-- 方案一补货关联合同测试库增量脚本;修改人:Ld 修改时间:2026-08-03 16:06:00; USE [ERPTOOL_JY_20250826Back]; GO IF OBJECT_ID(N'[dbo].[仓储管理_补货关联合同_查询数据]', N'P') IS NOT NULL DROP PROCEDURE [dbo].[仓储管理_补货关联合同_查询数据]; GO -- 补货创建时查询可关联的销售合同/订单;修改人:Ld 修改时间:2026-08-03 16:06:00; CREATE PROCEDURE [dbo].[仓储管理_补货关联合同_查询数据] @关键字 NVARCHAR(100) = NULL, @合同编号 NVARCHAR(100) = NULL, @客户 NVARCHAR(100) = NULL, @订单编号 NVARCHAR(100) = NULL AS BEGIN SET NOCOUNT ON; SELECT TOP 50 p.项目流水号, p.合同编号, ISNULL(c.客户名称, N'') AS 客户名称, ISNULL(c.简称, c.客户名称) AS 客户简称, o.订单流水号, o.订单编号, CONVERT(VARCHAR(10), p.签订日期, 23) AS 签订日期, CONVERT(VARCHAR(10), ISNULL(o.完成期限, p.交货日期), 23) AS 交货日期 FROM dbo.PDM_项目名称 AS p LEFT JOIN dbo.客户关系管理系统_客户名称 AS c ON p.客户流水号 = c.客户流水号 LEFT JOIN dbo.合同管理_订单信息_基础表 AS o ON p.项目流水号 = o.项目流水号 WHERE ISNULL(p.是否启用, 1) = 1 AND ISNULL(p.合同编号, N'') <> N'' AND (ISNULL(@关键字, N'') = N'' OR p.合同编号 LIKE N'%' + @关键字 + N'%' OR ISNULL(c.客户名称, N'') LIKE N'%' + @关键字 + N'%' OR ISNULL(c.简称, N'') LIKE N'%' + @关键字 + N'%' OR ISNULL(o.订单编号, N'') LIKE N'%' + @关键字 + N'%') AND (ISNULL(@合同编号, N'') = N'' OR p.合同编号 LIKE N'%' + @合同编号 + N'%') AND (ISNULL(@客户, N'') = N'' OR ISNULL(c.客户名称, N'') LIKE N'%' + @客户 + N'%' OR ISNULL(c.简称, N'') LIKE N'%' + @客户 + N'%') AND (ISNULL(@订单编号, N'') = N'' OR ISNULL(o.订单编号, N'') LIKE N'%' + @订单编号 + N'%') ORDER BY p.项目流水号 DESC, o.订单流水号 DESC; END; GO IF OBJECT_ID(N'[dbo].[报缺补货_提交_关联合同]', N'P') IS NOT NULL DROP PROCEDURE [dbo].[报缺补货_提交_关联合同]; GO -- 补货提交时挂到选定销售合同/订单或仓库备货合同;不改原报缺补货_提交;修改人:Ld 修改时间:2026-08-03 16:06:00; -- 仓库备货提交时自动生成CKBH前缀合同号,并写入仓库补货合同明细;修改人:Ld 修改时间:2026-08-04 08:29:13; CREATE PROCEDURE [dbo].[报缺补货_提交_关联合同] @是否外购 INT = NULL, @操作者 INT = NULL, @订单备注 NVARCHAR(200) = NULL, @补货期限 DATETIME = NULL, @来源类型 NVARCHAR(20) = NULL, @项目流水号 INT = NULL, @订单流水号 INT = NULL AS BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; DECLARE @单号 VARCHAR(100); DECLARE @单号前缀 VARCHAR(20); DECLARE @序号 INT; DECLARE @机床流水号 INT; DECLARE @组件流水号 INT; DECLARE @仓库备货合同编号 NVARCHAR(50); DECLARE @补货类型名称 NVARCHAR(50); DECLARE @订单类型 INT = 3; IF @补货期限 IS NULL BEGIN SELECT '0' AS result, N'请选择补货期限' AS message; RETURN; END; IF ISNULL(@来源类型, N'') = N'' BEGIN SELECT '0' AS result, N'请选择补货来源' AS message; RETURN; END; IF @是否外购 = 1 BEGIN IF NOT EXISTS (SELECT 1 FROM dbo.外购件补货明细中间表) BEGIN SELECT '0' AS result, N'外购补货单为空' AS message; RETURN; END; SET @单号前缀 = 'BHWG-'; SET @补货类型名称 = N'外购补货'; END ELSE BEGIN IF NOT EXISTS (SELECT 1 FROM dbo.自制件补货明细中间表) BEGIN SELECT '0' AS result, N'自制补货单为空' AS message; RETURN; END; SET @单号前缀 = 'BHZZ-'; SET @补货类型名称 = N'自制补货'; END; BEGIN TRY BEGIN TRANSACTION; IF @来源类型 = N'仓库备货' BEGIN -- 仓库备货每次创建独立CKBH合同,编号规则按补货单日期+三位序号生成;修改人:Ld 修改时间:2026-08-04 08:29:13; SET @序号 = 1; SET @仓库备货合同编号 = N'CKBH-' + CONVERT(VARCHAR(8), GETDATE(), 112) + RIGHT('000' + CONVERT(VARCHAR(10), @序号), 3); WHILE EXISTS (SELECT 1 FROM dbo.PDM_项目名称 WITH (UPDLOCK, HOLDLOCK) WHERE 合同编号 = @仓库备货合同编号) BEGIN SET @序号 = @序号 + 1; SET @仓库备货合同编号 = N'CKBH-' + CONVERT(VARCHAR(8), GETDATE(), 112) + RIGHT('000' + CONVERT(VARCHAR(10), @序号), 3); END; INSERT INTO dbo.PDM_项目名称(合同编号, 合同类型, 操作者, 税率, 签订日期, 交货日期, 是否生成订单, 提交日期, 客户流水号, 是否审核, 合同备注, 是否启用, 收货人员, 合同金额, 未收款项) VALUES(@仓库备货合同编号, 3, @操作者, 0.13, GETDATE(), @补货期限, 1, GETDATE(), 8, 1, N'仓库发起备货补货合同', 1, N'仓库', 0, 0); SET @项目流水号 = SCOPE_IDENTITY(); -- 合同明细视图规格品名来源于机床名称+详情,此处写入仓库补货、单价0;修改人:Ld 修改时间:2026-08-04 08:29:13; INSERT INTO dbo.PDM_机床名称(项目流水号, 机床名称, 数量, 单价, 单位) VALUES(@项目流水号, N'仓库补货', 1, 0, N'项'); SET @机床流水号 = SCOPE_IDENTITY(); END; ELSE BEGIN IF @项目流水号 IS NULL BEGIN SELECT '0' AS result, N'请选择关联销售合同' AS message; ROLLBACK TRANSACTION; RETURN; END; IF NOT EXISTS (SELECT 1 FROM dbo.PDM_项目名称 WHERE 项目流水号 = @项目流水号 AND ISNULL(是否启用, 1) = 1) BEGIN SELECT '0' AS result, N'关联销售合同不存在或已停用' AS message; ROLLBACK TRANSACTION; RETURN; END; END; SET @序号 = 1; SET @单号 = @单号前缀 + CONVERT(VARCHAR(8), GETDATE(), 112) + RIGHT('000' + CONVERT(VARCHAR(10), @序号), 3); WHILE EXISTS (SELECT 1 FROM dbo.合同管理_订单信息_基础表 WHERE 订单编号 = @单号) BEGIN SET @序号 = @序号 + 1; SET @单号 = @单号前缀 + CONVERT(VARCHAR(8), GETDATE(), 112) + RIGHT('000' + CONVERT(VARCHAR(10), @序号), 3); END; IF @机床流水号 IS NULL BEGIN INSERT INTO dbo.PDM_机床名称(项目流水号) VALUES(@项目流水号); SET @机床流水号 = SCOPE_IDENTITY(); END; INSERT INTO dbo.PDM_组件名称(机床流水号, 是否合同创建, 产品名称, 产品流水号, 数量, 配置数) VALUES(@机床流水号, 1, @补货类型名称, 0, 1, 1); SET @组件流水号 = SCOPE_IDENTITY(); IF @是否外购 = 1 BEGIN INSERT INTO dbo.合同管理_订单信息_基础表(项目流水号, 订单编号, 订单类型, 是否提交, 下单人, 下单日期, 采购期限, 订单备注) VALUES(@项目流水号, @单号, @订单类型, 1, @操作者, GETDATE(), @补货期限, ISNULL(@订单备注, N'') + CASE WHEN ISNULL(@来源类型, N'') <> N'' THEN N';补货来源:' + @来源类型 ELSE N'' END); INSERT INTO dbo.PDM_零件明细表_标准件和外购件(组件流水号, 物料流水号, 零件数量, 零件类型, 材料流水号, 导入人员编号) SELECT @组件流水号, 物料流水号, 补货数量, 2, 材料流水号, @操作者 FROM dbo.外购件补货明细中间表; INSERT INTO dbo.外购件补货单_图片(标准件和外购件流水号, [文件标识], [文件名称], [文件后缀], [是否启用], [文件内容]) SELECT 标准件和外购件流水号, [文件标识], [文件名称], [文件后缀], 补货单_图片.[是否启用], [文件内容] FROM dbo.补货单_图片 INNER JOIN dbo.外购件补货明细中间表 ON dbo.补货单_图片.补货单明细中间表流水号 = dbo.外购件补货明细中间表.补货单明细中间表流水号 INNER JOIN dbo.PDM_零件明细表_标准件和外购件 ON dbo.外购件补货明细中间表.物料流水号 = dbo.PDM_零件明细表_标准件和外购件.物料流水号 WHERE 组件流水号 = @组件流水号 AND 是否外购 = 1; DELETE FROM dbo.外购件补货明细中间表; DELETE FROM dbo.补货单_图片 WHERE 是否外购 = 1; END; ELSE BEGIN INSERT INTO dbo.合同管理_订单信息_基础表(项目流水号, 订单编号, 订单类型, 是否提交, 下单人, 下单日期, 精工期限, 订单备注) VALUES(@项目流水号, @单号, @订单类型, 1, @操作者, GETDATE(), @补货期限, ISNULL(@订单备注, N'') + CASE WHEN ISNULL(@来源类型, N'') <> N'' THEN N';补货来源:' + @来源类型 ELSE N'' END); INSERT INTO dbo.PDM_零件明细表_基本件(组件流水号, 物料流水号, 零件数量, 零件类型, 材料流水号, 导入人员编号, 是否投产, 投产数) SELECT @组件流水号, 物料流水号, 补货数量, 3, 材料流水号, @操作者, 1, 补货数量 FROM dbo.自制件补货明细中间表; INSERT INTO dbo.自制件补货单_图片(基本件流水号, [文件标识], [文件名称], [文件后缀], [是否启用], [文件内容]) SELECT 基本件流水号, [文件标识], [文件名称], [文件后缀], [是否启用], [文件内容] FROM dbo.补货单_图片 INNER JOIN dbo.自制件补货明细中间表 ON dbo.补货单_图片.补货单明细中间表流水号 = dbo.自制件补货明细中间表.补货单明细中间表流水号 INNER JOIN dbo.PDM_零件明细表_基本件 ON dbo.自制件补货明细中间表.物料流水号 = dbo.PDM_零件明细表_基本件.物料流水号 WHERE 组件流水号 = @组件流水号 AND 是否外购 = 0; DELETE FROM dbo.自制件补货明细中间表; DELETE FROM dbo.补货单_图片 WHERE 是否外购 = 0; END; COMMIT TRANSACTION; SELECT '1' AS result, @单号 AS 订单编号, @项目流水号 AS 项目流水号, @仓库备货合同编号 AS 合同编号, N'提交成功' AS message; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; SELECT '0' AS result, ERROR_MESSAGE() AS message; END CATCH; END; GO