Files
JY1.0/sql/replenishment_contract_link_test_20260803.sql

230 lines
11 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 方案一补货关联合同测试库增量脚本;修改人: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