230 lines
11 KiB
Transact-SQL
230 lines
11 KiB
Transact-SQL
-- 方案一补货关联合同测试库增量脚本;修改人: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
|
||
|