235 lines
13 KiB
Transact-SQL
235 lines
13 KiB
Transact-SQL
/* 采购合同明细跟随PDM标准外购件源流水号变更(测试库)
|
||
修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
*/
|
||
SET NOCOUNT ON;
|
||
|
||
IF OBJECT_ID(N'dbo.GPT_采购明细PDM跟随变更_待处理', N'U') IS NULL
|
||
BEGIN
|
||
CREATE TABLE dbo.GPT_采购明细PDM跟随变更_待处理
|
||
(
|
||
ID int IDENTITY(1,1) NOT NULL PRIMARY KEY,
|
||
项目流水号 int NULL,
|
||
订单流水号 int NULL,
|
||
机床流水号 int NULL,
|
||
旧组件流水号 int NULL,
|
||
旧产品名称 nvarchar(200) NULL,
|
||
采购合同流水号 int NULL,
|
||
采购合同明细流水号 int NOT NULL,
|
||
旧标准件和外购件流水号 int NOT NULL,
|
||
物料流水号 int NOT NULL,
|
||
旧零件数量 int NULL,
|
||
新组件流水号 int NULL,
|
||
新标准件和外购件流水号 int NULL,
|
||
处理状态 int NOT NULL CONSTRAINT DF_GPT_采购明细PDM跟随变更_待处理_处理状态 DEFAULT(0),
|
||
处理说明 nvarchar(400) NULL,
|
||
创建时间 datetime NOT NULL CONSTRAINT DF_GPT_采购明细PDM跟随变更_待处理_创建时间 DEFAULT(GETDATE()),
|
||
处理时间 datetime NULL,
|
||
修改人 nvarchar(50) NULL,
|
||
修改时间 datetime NULL
|
||
);
|
||
END;
|
||
GO
|
||
|
||
IF OBJECT_ID(N'dbo.GPT_采购明细PDM跟随变更_执行', N'P') IS NOT NULL
|
||
DROP PROCEDURE dbo.GPT_采购明细PDM跟随变更_执行;
|
||
GO
|
||
|
||
CREATE PROCEDURE dbo.GPT_采购明细PDM跟随变更_执行
|
||
@新组件流水号 int
|
||
AS
|
||
BEGIN
|
||
SET NOCOUNT ON;
|
||
|
||
DECLARE @项目流水号 int;
|
||
DECLARE @订单流水号 int;
|
||
DECLARE @机床流水号 int;
|
||
|
||
SELECT TOP 1
|
||
@项目流水号 = v.项目流水号,
|
||
@订单流水号 = v.订单流水号,
|
||
@机床流水号 = c.机床流水号
|
||
FROM dbo.PDM_组件名称 c
|
||
LEFT JOIN dbo.PDM_组件名称_视图 v ON v.组件流水号 = c.组件流水号
|
||
WHERE c.组件流水号 = @新组件流水号;
|
||
|
||
DECLARE @Map TABLE
|
||
(
|
||
ID int PRIMARY KEY,
|
||
采购合同明细流水号 int NOT NULL,
|
||
新标准件和外购件流水号 int NOT NULL
|
||
);
|
||
|
||
;WITH MatchRows AS
|
||
(
|
||
SELECT
|
||
p.ID,
|
||
p.采购合同明细流水号,
|
||
n.标准件和外购件流水号 AS 新标准件和外购件流水号,
|
||
ROW_NUMBER() OVER(PARTITION BY p.ID ORDER BY n.标准件和外购件流水号) AS rn
|
||
FROM dbo.GPT_采购明细PDM跟随变更_待处理 p
|
||
INNER JOIN dbo.采购管理_采购合同明细 d
|
||
ON d.采购合同明细流水号 = p.采购合同明细流水号
|
||
AND d.标准件和外购件流水号 = p.旧标准件和外购件流水号
|
||
INNER JOIN dbo.PDM_零件明细表_标准件和外购件 n
|
||
ON n.组件流水号 = @新组件流水号
|
||
AND n.物料流水号 = p.物料流水号
|
||
WHERE p.处理状态 = 0
|
||
AND ISNULL(p.项目流水号, 0) = ISNULL(@项目流水号, 0)
|
||
AND ISNULL(p.订单流水号, 0) = ISNULL(@订单流水号, 0)
|
||
AND ISNULL(p.机床流水号, 0) = ISNULL(@机床流水号, 0)
|
||
AND ISNULL(d.已到货数量, 0) = 0
|
||
AND NOT EXISTS (SELECT 1 FROM dbo.库存管理_外购件_入库记录 r WHERE r.采购合同明细流水号 = d.采购合同明细流水号)
|
||
AND NOT EXISTS (SELECT 1 FROM dbo.质检管理_质检记录_主表 q WHERE q.零部件流水号 = d.采购合同明细流水号 AND ISNULL(q.是否禁用, 0) = 0)
|
||
AND NOT EXISTS (SELECT 1 FROM dbo.采购管理_采购批次 b WHERE b.采购合同明细流水号 = d.采购合同明细流水号 AND (ISNULL(b.是否入库, 0) <> 0 OR ISNULL(b.已到数, 0) <> 0))
|
||
AND NOT EXISTS (SELECT 1 FROM dbo.采购管理_采购合同明细 d2 WHERE d2.采购合同流水号 = d.采购合同流水号 AND d2.标准件和外购件流水号 = n.标准件和外购件流水号 AND d2.采购合同明细流水号 <> d.采购合同明细流水号)
|
||
)
|
||
INSERT INTO @Map(ID, 采购合同明细流水号, 新标准件和外购件流水号)
|
||
SELECT ID, 采购合同明细流水号, 新标准件和外购件流水号
|
||
FROM MatchRows
|
||
WHERE rn = 1;
|
||
|
||
-- 采购明细未发生到货、入库、质检时,允许跟随到同项目同机床同物料的新PDM源流水号;修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
UPDATE d
|
||
SET d.标准件和外购件流水号 = m.新标准件和外购件流水号
|
||
FROM dbo.采购管理_采购合同明细 d
|
||
INNER JOIN @Map m ON m.采购合同明细流水号 = d.采购合同明细流水号;
|
||
|
||
UPDATE p
|
||
SET p.新组件流水号 = @新组件流水号,
|
||
p.新标准件和外购件流水号 = m.新标准件和外购件流水号,
|
||
p.处理状态 = 1,
|
||
p.处理说明 = N'已按同项目同机床同物料自动跟随到新PDM标准外购件流水号',
|
||
p.处理时间 = GETDATE(),
|
||
p.修改人 = N'Ld',
|
||
p.修改时间 = GETDATE()
|
||
FROM dbo.GPT_采购明细PDM跟随变更_待处理 p
|
||
INNER JOIN @Map m ON m.ID = p.ID;
|
||
END;
|
||
GO
|
||
|
||
DECLARE @def nvarchar(max);
|
||
|
||
SELECT @def = OBJECT_DEFINITION(OBJECT_ID(N'dbo.PDM_组件名称_确认更改新'));
|
||
IF @def NOT LIKE N'%GPT_采购明细PDM跟随变更_待处理%'
|
||
BEGIN
|
||
SET @def = REPLACE(@def, N'CREATE PROCEDURE [dbo].[PDM_组件名称_确认更改新]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_确认更改新]');
|
||
SET @def = REPLACE(@def, N'CREATE PROCEDURE [dbo].[PDM_组件名称_确认更改新]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_确认更改新]');
|
||
SET @def = REPLACE(@def, N'CREATE PROCEDURE [dbo].[PDM_组件名称_确认更改新]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_确认更改新]');
|
||
|
||
SET @def = REPLACE(@def,
|
||
N' if @产品流水号临时 <> @产品流水号
|
||
begin
|
||
update dbo.PDM_组件名称 set 修改状态 = 2,是否分配 = 0 where 组件流水号 = @orderN',
|
||
N' if @产品流水号临时 <> @产品流水号
|
||
begin
|
||
-- 记录被产品替换影响且已加入采购合同的PDM标准外购件,后续新BOM生成后自动跟随;修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
INSERT INTO dbo.GPT_采购明细PDM跟随变更_待处理(项目流水号,订单流水号,机床流水号,旧组件流水号,旧产品名称,采购合同流水号,采购合同明细流水号,旧标准件和外购件流水号,物料流水号,旧零件数量,修改人,修改时间)
|
||
SELECT DISTINCT @项目流水号,@订单流水号,@机床流水号,@orderN,@产品名称,d.采购合同流水号,d.采购合同明细流水号,s.标准件和外购件流水号,s.物料流水号,s.零件数量,N''Ld'',GETDATE()
|
||
FROM dbo.PDM_零件明细表_标准件和外购件 s
|
||
INNER JOIN dbo.采购管理_采购合同明细 d ON d.标准件和外购件流水号 = s.标准件和外购件流水号
|
||
WHERE s.组件流水号 = @orderN
|
||
AND NOT EXISTS (SELECT 1 FROM dbo.GPT_采购明细PDM跟随变更_待处理 p WHERE p.处理状态 = 0 AND p.采购合同明细流水号 = d.采购合同明细流水号 AND p.旧标准件和外购件流水号 = s.标准件和外购件流水号);
|
||
|
||
update dbo.PDM_组件名称 set 修改状态 = 2,是否分配 = 0 where 组件流水号 = @orderN');
|
||
|
||
SET @def = REPLACE(@def,
|
||
N'delete from 车间装配管理_装配任务 where 组件流水号 in (select 组件流水号 from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0)',
|
||
N'-- 记录删除组件影响且已加入采购合同的PDM标准外购件,后续新BOM生成后自动跟随;修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
insert into dbo.GPT_采购明细PDM跟随变更_待处理(项目流水号,订单流水号,机床流水号,旧组件流水号,旧产品名称,采购合同流水号,采购合同明细流水号,旧标准件和外购件流水号,物料流水号,旧零件数量,修改人,修改时间)
|
||
select distinct @项目流水号,@订单流水号,@机床流水号,c.组件流水号,c.产品名称,d.采购合同流水号,d.采购合同明细流水号,s.标准件和外购件流水号,s.物料流水号,s.零件数量,N''Ld'',GETDATE()
|
||
from dbo.PDM_组件名称 c
|
||
inner join dbo.PDM_零件明细表_标准件和外购件 s on s.组件流水号 = c.组件流水号
|
||
inner join dbo.采购管理_采购合同明细 d on d.标准件和外购件流水号 = s.标准件和外购件流水号
|
||
where c.组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null)
|
||
and c.机床流水号=@机床流水号 and c.是否合同创建 = 1 and c.产品状态 = 0
|
||
and not exists (select 1 from dbo.GPT_采购明细PDM跟随变更_待处理 p where p.处理状态 = 0 and p.采购合同明细流水号 = d.采购合同明细流水号 and p.旧标准件和外购件流水号 = s.标准件和外购件流水号);
|
||
|
||
delete from 车间装配管理_装配任务 where 组件流水号 in (select 组件流水号 from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0)');
|
||
|
||
EXEC(@def);
|
||
END;
|
||
GO
|
||
|
||
DECLARE @def2 nvarchar(max);
|
||
|
||
SELECT @def2 = OBJECT_DEFINITION(OBJECT_ID(N'dbo.技术确认_刷新BOM'));
|
||
IF @def2 NOT LIKE N'%GPT_采购明细PDM跟随变更_执行%'
|
||
BEGIN
|
||
SET @def2 = REPLACE(@def2, N'CREATE PROCEDURE [dbo].[技术确认_刷新BOM]', N'ALTER PROCEDURE [dbo].[技术确认_刷新BOM]');
|
||
SET @def2 = REPLACE(@def2, N'CREATE PROCEDURE [dbo].[技术确认_刷新BOM]', N'ALTER PROCEDURE [dbo].[技术确认_刷新BOM]');
|
||
SET @def2 = @def2 + N'
|
||
|
||
-- 新BOM标准外购件生成后,回填采购合同明细PDM源流水号;修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
EXEC dbo.GPT_采购明细PDM跟随变更_执行 @新组件流水号 = @组件流水号
|
||
';
|
||
EXEC(@def2);
|
||
END;
|
||
GO
|
||
|
||
DECLARE @def3 nvarchar(max);
|
||
|
||
SELECT @def3 = OBJECT_DEFINITION(OBJECT_ID(N'dbo.PDM_组件名称_老组件_增加数据_批量零件'));
|
||
IF @def3 NOT LIKE N'%GPT_采购明细PDM跟随变更_执行%'
|
||
BEGIN
|
||
SET @def3 = REPLACE(@def3, N'CREATE PROCEDURE [dbo].[PDM_组件名称_老组件_增加数据_批量零件]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_老组件_增加数据_批量零件]');
|
||
SET @def3 = @def3 + N'
|
||
|
||
-- 批量新增标准外购件后,回填采购合同明细PDM源流水号;修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
EXEC dbo.GPT_采购明细PDM跟随变更_执行 @新组件流水号 = @组件流水号
|
||
';
|
||
EXEC(@def3);
|
||
END;
|
||
GO
|
||
|
||
DECLARE @def4 nvarchar(max);
|
||
|
||
SELECT @def4 = OBJECT_DEFINITION(OBJECT_ID(N'dbo.PDM_组件名称_增加数据_批量零件'));
|
||
IF @def4 NOT LIKE N'%GPT_采购明细PDM跟随变更_执行%'
|
||
BEGIN
|
||
SET @def4 = REPLACE(@def4, N'CREATE PROCEDURE [dbo].[PDM_组件名称_增加数据_批量零件]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_增加数据_批量零件]');
|
||
SET @def4 = @def4 + N'
|
||
|
||
-- 新组件批量新增标准外购件后,回填采购合同明细PDM源流水号;修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
EXEC dbo.GPT_采购明细PDM跟随变更_执行 @新组件流水号 = @组件流水号
|
||
';
|
||
EXEC(@def4);
|
||
END;
|
||
GO
|
||
|
||
DECLARE @def5 nvarchar(max);
|
||
|
||
SELECT @def5 = OBJECT_DEFINITION(OBJECT_ID(N'dbo.物料管理_专机_新增物料'));
|
||
IF @def5 NOT LIKE N'%GPT_采购明细PDM跟随变更_执行%'
|
||
BEGIN
|
||
SET @def5 = REPLACE(@def5, N'CREATE PROCEDURE [dbo].[物料管理_专机_新增物料]', N'ALTER PROCEDURE [dbo].[物料管理_专机_新增物料]');
|
||
SET @def5 = @def5 + N'
|
||
|
||
-- 专机新增标准外购件后,回填采购合同明细PDM源流水号;修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
EXEC dbo.GPT_采购明细PDM跟随变更_执行 @新组件流水号 = @组件流水号
|
||
';
|
||
EXEC(@def5);
|
||
END;
|
||
GO
|
||
|
||
DECLARE @def6 nvarchar(max);
|
||
|
||
SELECT @def6 = OBJECT_DEFINITION(OBJECT_ID(N'dbo.订单信息_下达订单'));
|
||
IF @def6 NOT LIKE N'%GPT_采购明细PDM跟随变更_执行%'
|
||
BEGIN
|
||
SET @def6 = REPLACE(@def6, N'CREATE PROCEDURE [dbo].[订单信息_下达订单]', N'ALTER PROCEDURE [dbo].[订单信息_下达订单]');
|
||
SET @def6 = REPLACE(@def6,
|
||
N'insert into PDM_零件明细表_标准件和外购件(组件流水号,物料流水号,零件数量,零件类型,材料流水号)
|
||
select @组件流水号,物料流水号,零件数量,零件类型,材料流水号 from 产品信息_外购件_基础表 where 产品流水号=@产品流水号
|
||
|
||
set @id = @id + 1',
|
||
N'insert into PDM_零件明细表_标准件和外购件(组件流水号,物料流水号,零件数量,零件类型,材料流水号)
|
||
select @组件流水号,物料流水号,零件数量,零件类型,材料流水号 from 产品信息_外购件_基础表 where 产品流水号=@产品流水号
|
||
|
||
-- 下达订单生成标准外购件后,回填采购合同明细PDM源流水号;修改人:Ld 修改时间:2026-07-24 10:48:00;
|
||
EXEC dbo.GPT_采购明细PDM跟随变更_执行 @新组件流水号 = @组件流水号
|
||
|
||
set @id = @id + 1');
|
||
EXEC(@def6);
|
||
END;
|
||
GO
|