更新人事/采购/销售/精工/仓储/技术等模块,新增出库单/PDA采购入库页面,补充生产计划需求文档及多项SQL脚本

This commit is contained in:
Developer
2026-09-14 07:56:15 +08:00
parent 9fc3aae3e9
commit ffac9fcc61
40 changed files with 6762 additions and 181 deletions

View File

@@ -0,0 +1,416 @@
/*
修改人:Ld 修改时间:2026-09-07 15:42:36;
用途: 测试库新增仓库 PDA 扫码采购入库后端过程。
数据库: ERPTOOL_JY_20250826Back
说明: 仅部署测试库;PDA 入库提交复用现有 dbo.仓储管理_采购件入库_循环执行,保持库存和采购合同状态更新口径一致。
*/
IF COL_LENGTH(N'dbo.仓储管理_入库单标签', N'入库状态') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签主表增加PDA入库状态:0待入库、1部分入库、2已入库。
ALTER TABLE dbo.仓储管理_入库单标签 ADD 入库状态 INT NOT NULL CONSTRAINT DF_仓储管理_入库单标签_入库状态 DEFAULT(0)
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签', N'入库人') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签主表记录PDA最终入库人。
ALTER TABLE dbo.仓储管理_入库单标签 ADD 入库人 INT NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签', N'入库时间') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签主表记录PDA最终入库时间。
ALTER TABLE dbo.仓储管理_入库单标签 ADD 入库时间 DATETIME NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'标准件和外购件流水号') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细补充原采购入库过程所需标准件/外购件流水号。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 标准件和外购件流水号 INT NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'采购类型') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细补充采购类型:1普通采购、2耗材采购。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 采购类型 INT NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'批号') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细补充批号,兼容主轴入库。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 批号 INT NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'批次编码') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细补充批次编码,用于PDA入库和后续条码追溯。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 批次编码 NVARCHAR(100) NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'已入库数量') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细记录PDA已入库数量,支持防重复入库和后续部分入库。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 已入库数量 DECIMAL(18,4) NOT NULL CONSTRAINT DF_仓储管理_入库单标签明细_已入库数量 DEFAULT(0)
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'货位流水号') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细记录PDA入库选择的货位流水号。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 货位流水号 INT NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'货位名称') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细记录PDA入库选择的货位名称。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 货位名称 NVARCHAR(100) NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'入库状态') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细增加PDA入库状态:0待入库、1部分入库、2已入库。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 入库状态 INT NOT NULL CONSTRAINT DF_仓储管理_入库单标签明细_入库状态 DEFAULT(0)
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'入库人') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细记录PDA入库人。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 入库人 INT NULL
END
GO
IF COL_LENGTH(N'dbo.仓储管理_入库单标签明细', N'入库时间') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细记录PDA入库时间。
ALTER TABLE dbo.仓储管理_入库单标签明细 ADD 入库时间 DATETIME NULL
END
GO
IF OBJECT_ID(N'dbo.TR_仓储管理_入库单标签明细_补充采购入库参数', N'TR') IS NOT NULL
DROP TRIGGER dbo.TR_仓储管理_入库单标签明细_补充采购入库参数
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; 标签明细新增后自动补齐原采购入库过程所需参数。
CREATE TRIGGER dbo.TR_仓储管理_入库单标签明细_补充采购入库参数
ON dbo.仓储管理_入库单标签明细
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE d
SET 标准件和外购件流水号 = ISNULL(d.标准件和外购件流水号, ISNULL(cg.标准件和外购件流水号, hc.标准件和外购件流水号)),
采购类型 = ISNULL(d.采购类型, CASE WHEN cg.采购合同明细流水号 IS NOT NULL THEN 1 WHEN hc.采购合同明细流水号 IS NOT NULL THEN 2 ELSE NULL END),
批号 = ISNULL(d.批号, ISNULL(cg.批号, hc.批号)),
批次编码 = ISNULL(d.批次编码, ISNULL(cg.批次编码, hc.批次编码))
FROM dbo.仓储管理_入库单标签明细 d
INNER JOIN inserted i ON d.入库单标签明细流水号 = i.入库单标签明细流水号
INNER JOIN dbo.仓储管理_入库单标签 t ON d.入库单标签流水号 = t.入库单标签流水号
OUTER APPLY (
SELECT TOP 1
v.采购合同明细流水号,
v.标准件和外购件流水号,
v.批号,
(CONVERT(VARCHAR(10), GETDATE(), 23) + '-CG' + CONVERT(NVARCHAR(50), v.采购合同明细流水号))
+ CASE WHEN ISNULL(v.是否主轴, 0) = 1 THEN '.' + CONVERT(NVARCHAR(50), v.批号) ELSE '' END AS 批次编码
FROM dbo.采购管理_采购合同明细_视图 v
WHERE v.采购合同流水号 = t.采购合同流水号
AND v.物料流水号 = d.物料流水号
AND (d.采购合同明细流水号 IS NULL OR v.采购合同明细流水号 = d.采购合同明细流水号)
ORDER BY v.采购合同明细流水号
) cg
OUTER APPLY (
SELECT TOP 1
v.采购合同明细流水号,
0 AS 标准件和外购件流水号,
1 AS 批号,
CONVERT(VARCHAR(10), GETDATE(), 23) + '-HC' + CONVERT(NVARCHAR(50), v.采购合同明细流水号) AS 批次编码
FROM dbo.采购管理_耗材采购合同明细_查询视图 v
WHERE v.采购合同流水号 = t.采购合同流水号
AND v.物料流水号 = d.物料流水号
AND (d.采购合同明细流水号 IS NULL OR v.采购合同明细流水号 = d.采购合同明细流水号)
ORDER BY v.采购合同明细流水号
) hc
END
GO
IF OBJECT_ID(N'dbo.仓储管理_PDA货位_查询', N'P') IS NOT NULL
DROP PROCEDURE dbo.仓储管理_PDA货位_查询
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; PDA查询可用货位,供扫码入库选择库位。
CREATE PROCEDURE dbo.仓储管理_PDA货位_查询
@货位名称 NVARCHAR(100) = NULL
AS
BEGIN
SET NOCOUNT ON;
SELECT TOP 200
货位流水号,
货位名称,
仓库流水号
FROM dbo.库存管理_货位主文件
WHERE ISNULL(是否启用, 1) = 1
AND (ISNULL(@货位名称, N'') = N'' OR 货位名称 LIKE N'%' + @货位名称 + N'%')
ORDER BY 货位名称
END
GO
IF OBJECT_ID(N'dbo.仓储管理_PDA采购扫码入库_查询', N'P') IS NOT NULL
DROP PROCEDURE dbo.仓储管理_PDA采购扫码入库_查询
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; PDA扫码后查询标签和剩余待入库数量。
CREATE PROCEDURE dbo.仓储管理_PDA采购扫码入库_查询
@扫码内容 NVARCHAR(500) = NULL,
@标签ID INT = NULL,
@入库单号 NVARCHAR(100) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @标签编号 NVARCHAR(100)
SET @标签编号 = @扫码内容
IF @标签编号 LIKE N'JYRK|%'
BEGIN
SET @标签编号 = SUBSTRING(@标签编号, 6, 100)
END
SELECT
t.入库单标签流水号 AS 标签ID,
t.标签编号,
t.入库单号,
t.采购合同流水号,
t.采购合同号,
t.供应商流水号,
t.供应商,
t.批次号,
t.入库状态 AS 标签入库状态,
d.入库单标签明细流水号 AS 标签明细ID,
d.物料流水号,
d.采购合同明细流水号,
d.标准件和外购件流水号,
d.采购类型,
d.批号,
d.批次编码,
d.物料名称,
d.图号,
d.数量 AS 标签数量,
d.已入库数量,
CONVERT(DECIMAL(18,4), ISNULL(d.数量, 0) - ISNULL(d.已入库数量, 0)) AS 剩余入库数量,
d.货位流水号,
ISNULL(d.货位名称, h.货位名称) AS 货位名称,
d.入库状态 AS 明细入库状态,
d.是否需要质检
FROM dbo.仓储管理_入库单标签 t
INNER JOIN dbo.仓储管理_入库单标签明细 d
ON t.入库单标签流水号 = d.入库单标签流水号
LEFT JOIN dbo.库存管理_货位主文件 h
ON d.货位流水号 = h.货位流水号
WHERE t.是否启用 = 1
AND (
(@标签ID IS NOT NULL AND t.入库单标签流水号 = @标签ID)
OR (ISNULL(@标签编号, N'') <> N'' AND t.标签编号 = @标签编号)
OR (ISNULL(@入库单号, N'') <> N'' AND t.入库单号 = @入库单号)
OR (ISNULL(@扫码内容, N'') <> N'' AND t.入库单号 = @扫码内容)
)
ORDER BY d.入库单标签明细流水号
END
GO
IF OBJECT_ID(N'dbo.仓储管理_PDA采购扫码入库_提交', N'P') IS NOT NULL
DROP PROCEDURE dbo.仓储管理_PDA采购扫码入库_提交
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- 修改人:Ld 修改时间:2026-09-07 15:42:36; PDA确认入库提交,复用原采购入库循环过程并更新标签入库状态。
CREATE PROCEDURE dbo.仓储管理_PDA采购扫码入库_提交
@扫码内容 NVARCHAR(500) = NULL,
@标签ID INT = NULL,
@标签明细流水号组 NVARCHAR(4000) = NULL,
@入库数量组 NVARCHAR(4000) = NULL,
@货位流水号组 NVARCHAR(4000) = NULL,
@入库人 INT = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @实际标签ID INT
DECLARE @标签编号 NVARCHAR(100)
SET @标签编号 = @扫码内容
IF @标签编号 LIKE N'JYRK|%'
BEGIN
SET @标签编号 = SUBSTRING(@标签编号, 6, 100)
END
SELECT TOP 1 @实际标签ID = 入库单标签流水号
FROM dbo.仓储管理_入库单标签
WHERE 是否启用 = 1
AND (
(@标签ID IS NOT NULL AND 入库单标签流水号 = @标签ID)
OR (ISNULL(@标签编号, N'') <> N'' AND 标签编号 = @标签编号)
OR (ISNULL(@扫码内容, N'') <> N'' AND 入库单号 = @扫码内容)
)
IF @实际标签ID IS NULL
BEGIN
SELECT '0' AS result, N'未找到有效入库标签' AS message
RETURN
END
DECLARE @提交明细 TABLE
(
RowNum INT NOT NULL,
标签明细ID INT NULL,
入库数量 DECIMAL(18,4) NULL,
货位流水号 INT NULL
)
;WITH 明细表 AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum, CAST(Value AS INT) AS 标签明细ID
FROM dbo.SplitString(@标签明细流水号组, ',')
),
数量表 AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum, CAST(Value AS DECIMAL(18,4)) AS 入库数量
FROM dbo.SplitString(@入库数量组, ',')
),
货位表 AS (
SELECT ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum, CAST(Value AS INT) AS 货位流水号
FROM dbo.SplitString(@货位流水号组, ',')
)
INSERT INTO @提交明细(RowNum, 标签明细ID, 入库数量, 货位流水号)
SELECT m.RowNum, m.标签明细ID, q.入库数量, h.货位流水号
FROM 明细表 m
LEFT JOIN 数量表 q ON m.RowNum = q.RowNum
LEFT JOIN 货位表 h ON m.RowNum = h.RowNum
IF NOT EXISTS (SELECT 1 FROM @提交明细 WHERE ISNULL(入库数量, 0) > 0)
BEGIN
SELECT '0' AS result, N'请提交至少一条入库数量大于0的明细' AS message
RETURN
END
IF EXISTS (SELECT 1 FROM @提交明细 WHERE ISNULL(入库数量, 0) <= 0 OR 货位流水号 IS NULL)
BEGIN
SELECT '0' AS result, N'存在入库数量为空、数量小于等于0或未选择货位的明细' AS message
RETURN
END
IF EXISTS (
SELECT 1
FROM @提交明细 s
LEFT JOIN dbo.仓储管理_入库单标签明细 d ON s.标签明细ID = d.入库单标签明细流水号
WHERE d.入库单标签明细流水号 IS NULL
OR d.入库单标签流水号 <> @实际标签ID
OR s.入库数量 > CONVERT(DECIMAL(18,4), ISNULL(d.数量, 0) - ISNULL(d.已入库数量, 0))
)
BEGIN
SELECT '0' AS result, N'存在无效明细或入库数量超过标签剩余数量' AS message
RETURN
END
IF EXISTS (
SELECT 1
FROM @提交明细 s
LEFT JOIN dbo.库存管理_货位主文件 h ON s.货位流水号 = h.货位流水号
WHERE h.货位流水号 IS NULL OR ISNULL(h.是否启用, 1) <> 1
)
BEGIN
SELECT '0' AS result, N'存在无效或停用货位' AS message
RETURN
END
DECLARE @物料流水号组 NVARCHAR(4000)
DECLARE @实际到货数量组 NVARCHAR(4000)
DECLARE @标准件和外购件流水号组 NVARCHAR(4000)
DECLARE @采购合同明细流水号组 NVARCHAR(4000)
DECLARE @是否采购组 NVARCHAR(4000)
DECLARE @批号组 NVARCHAR(4000)
DECLARE @批次编码组 NVARCHAR(4000)
SELECT
@物料流水号组 = STUFF((SELECT ',' + CONVERT(NVARCHAR(50), d.物料流水号) FROM @提交明细 s INNER JOIN dbo.仓储管理_入库单标签明细 d ON s.标签明细ID = d.入库单标签明细流水号 ORDER BY s.RowNum FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
@实际到货数量组 = STUFF((SELECT ',' + CONVERT(NVARCHAR(50), CONVERT(FLOAT, s.入库数量)) FROM @提交明细 s ORDER BY s.RowNum FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
@标准件和外购件流水号组 = STUFF((SELECT ',' + CONVERT(NVARCHAR(50), ISNULL(d.标准件和外购件流水号, 0)) FROM @提交明细 s INNER JOIN dbo.仓储管理_入库单标签明细 d ON s.标签明细ID = d.入库单标签明细流水号 ORDER BY s.RowNum FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
@采购合同明细流水号组 = STUFF((SELECT ',' + CONVERT(NVARCHAR(50), ISNULL(d.采购合同明细流水号, 0)) FROM @提交明细 s INNER JOIN dbo.仓储管理_入库单标签明细 d ON s.标签明细ID = d.入库单标签明细流水号 ORDER BY s.RowNum FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
@是否采购组 = STUFF((SELECT ',' + CONVERT(NVARCHAR(50), ISNULL(d.采购类型, 1)) FROM @提交明细 s INNER JOIN dbo.仓储管理_入库单标签明细 d ON s.标签明细ID = d.入库单标签明细流水号 ORDER BY s.RowNum FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
@批号组 = STUFF((SELECT ',' + CONVERT(NVARCHAR(50), ISNULL(d.批号, 1)) FROM @提交明细 s INNER JOIN dbo.仓储管理_入库单标签明细 d ON s.标签明细ID = d.入库单标签明细流水号 ORDER BY s.RowNum FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, ''),
@批次编码组 = STUFF((SELECT ',' + ISNULL(d.批次编码, t.批次号) FROM @提交明细 s INNER JOIN dbo.仓储管理_入库单标签明细 d ON s.标签明细ID = d.入库单标签明细流水号 INNER JOIN dbo.仓储管理_入库单标签 t ON d.入库单标签流水号 = t.入库单标签流水号 ORDER BY s.RowNum FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
BEGIN TRY
BEGIN TRAN
EXEC dbo.仓储管理_采购件入库_循环执行
@物料流水号组 = @物料流水号组,
@实际到货数量组 = @实际到货数量组,
@货位流水号组 = @货位流水号组,
@入库人员流水号 = @入库人,
@采购合同明细流水号组 = @采购合同明细流水号组,
@标准件和外购件流水号组 = @标准件和外购件流水号组,
@是否采购组 = @是否采购组,
@批号组 = @批号组,
@批次编码组 = @批次编码组
UPDATE d
SET 已入库数量 = CONVERT(DECIMAL(18,4), ISNULL(d.已入库数量, 0)) + s.入库数量,
货位流水号 = s.货位流水号,
货位名称 = h.货位名称,
入库状态 = CASE WHEN CONVERT(DECIMAL(18,4), ISNULL(d.已入库数量, 0)) + s.入库数量 >= CONVERT(DECIMAL(18,4), ISNULL(d.数量, 0)) THEN 2 ELSE 1 END,
入库人 = @入库人,
入库时间 = GETDATE()
FROM dbo.仓储管理_入库单标签明细 d
INNER JOIN @提交明细 s ON d.入库单标签明细流水号 = s.标签明细ID
INNER JOIN dbo.库存管理_货位主文件 h ON s.货位流水号 = h.货位流水号
UPDATE t
SET 入库状态 = CASE
WHEN NOT EXISTS (SELECT 1 FROM dbo.仓储管理_入库单标签明细 d WHERE d.入库单标签流水号 = t.入库单标签流水号 AND CONVERT(DECIMAL(18,4), ISNULL(d.已入库数量, 0)) < CONVERT(DECIMAL(18,4), ISNULL(d.数量, 0))) THEN 2
WHEN EXISTS (SELECT 1 FROM dbo.仓储管理_入库单标签明细 d WHERE d.入库单标签流水号 = t.入库单标签流水号 AND CONVERT(DECIMAL(18,4), ISNULL(d.已入库数量, 0)) > 0) THEN 1
ELSE 0
END,
入库人 = @入库人,
入库时间 = CASE
WHEN NOT EXISTS (SELECT 1 FROM dbo.仓储管理_入库单标签明细 d WHERE d.入库单标签流水号 = t.入库单标签流水号 AND CONVERT(DECIMAL(18,4), ISNULL(d.已入库数量, 0)) < CONVERT(DECIMAL(18,4), ISNULL(d.数量, 0))) THEN GETDATE()
ELSE t.入库时间
END
FROM dbo.仓储管理_入库单标签 t
WHERE t.入库单标签流水号 = @实际标签ID
COMMIT TRAN
SELECT '1' AS result, N'入库成功' AS message, @实际标签ID AS 标签ID
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0 ROLLBACK TRAN
SELECT '0' AS result, ERROR_MESSAGE() AS message, @实际标签ID AS 标签ID
END CATCH
END
GO

View File

@@ -0,0 +1,129 @@
/* 修改人:Ld 修改时间:2026-09-08 10:04:25; 测试库新增PDA采购扫码入库页面菜单,并跟随物料入库权限授权 */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @ModuleId INT;
SELECT @ModuleId = id
FROM dbo.基础表_模块信息
WHERE [path] = N'WarehouseManagement/PDAPurchaseInbound'
OR component = N'/WarehouseManagement/PDAPurchaseInbound'
OR name = N'PDAPurchaseInbound'
OR title = N'PDA扫码入库';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo.基础表_模块信息
(
[path],
component,
redirect,
name,
title,
icon,
是否通知,
消息通知来源,
通知条件,
dashboardIcon,
是否禁用
)
VALUES
(
N'WarehouseManagement/PDAPurchaseInbound',
N'/WarehouseManagement/PDAPurchaseInbound',
NULL,
N'PDAPurchaseInbound',
N'PDA扫码入库',
N'PurchasePartsStorage',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo.基础表_模块信息
SET [path] = N'WarehouseManagement/PDAPurchaseInbound',
component = N'/WarehouseManagement/PDAPurchaseInbound',
redirect = NULL,
name = N'PDAPurchaseInbound',
title = N'PDA扫码入库',
icon = N'PurchasePartsStorage',
是否禁用 = 0
WHERE id = @ModuleId;
END;
;WITH RoleList AS
(
SELECT
r.角色编号,
r.pid,
r.角色模块顺序 AS 物料入库顺序
FROM dbo.基础表_角色模块信息 r
WHERE r.id = 44
AND ISNULL(r.是否启用, 1) = 1
)
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
SELECT
@ModuleId,
RoleList.pid,
@ModuleId,
RoleList.角色编号,
1,
ISNULL(RoleOrder.MaxOrder, RoleList.物料入库顺序) + 1
FROM RoleList
OUTER APPLY
(
SELECT MAX(角色模块顺序) AS MaxOrder
FROM dbo.基础表_角色模块信息
WHERE 角色编号 = RoleList.角色编号
AND pid = RoleList.pid
) RoleOrder
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = @ModuleId
AND pid = RoleList.pid
AND 角色编号 = RoleList.角色编号
);
UPDATE r
SET 是否启用 = 1
FROM dbo.基础表_角色模块信息 r
WHERE r.id = @ModuleId
AND EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息 sourceRole
WHERE sourceRole.id = 44
AND sourceRole.角色编号 = r.角色编号
AND sourceRole.pid = r.pid
AND ISNULL(sourceRole.是否启用, 1) = 1
);
SELECT @ModuleId AS PDA扫码入库模块ID;
SELECT id, [path], component, name, title, icon, 是否禁用
FROM dbo.基础表_模块信息
WHERE id = @ModuleId;
SELECT r.IDD, r.id, r.pid, r.角色编号, r.是否启用, r.角色模块顺序, m.title, m.component
FROM dbo.基础表_角色模块信息 r
INNER JOIN dbo.基础表_模块信息 m ON r.id = m.id
WHERE r.id = @ModuleId
ORDER BY r.角色编号, r.pid, r.角色模块顺序;
COMMIT TRAN;

View File

@@ -0,0 +1,80 @@
USE [ERPTOOL_JY]
GO
DECLARE @sql NVARCHAR(MAX)
DECLARE @new NVARCHAR(MAX)
DECLARE @start INT
DECLARE @afterStatus INT
DECLARE @finish INT
DECLARE @replaceLength INT
SELECT @sql = OBJECT_DEFINITION(OBJECT_ID(N'dbo.PDM_组件名称_确认更改新'))
IF @sql IS NULL
BEGIN
RAISERROR(N'未找到存储过程 PDM_组件名称_确认更改新', 16, 1)
RETURN
END
SET @new = N' -- 修改人:Ld 修改时间:2026-08-12 13:16:31; 合同查询修改数量时按产品基础BOM重新计算订单BOM,避免在已乘组件数量的订单BOM上再次相乘。
IF EXISTS (
SELECT 1
FROM PDM_零件明细表_基本件 b
INNER JOIN 产品信息_基本件_基础表 p ON p.产品流水号 = @产品流水号临时 AND p.物料流水号 = b.物料流水号
WHERE b.组件流水号 = @orderN AND ISNULL(b.零件数量, 0) <> ISNULL(CONVERT(INT, p.零件数量 * @数量临时), 0)
)
OR EXISTS (
SELECT 1
FROM PDM_零件明细表_标准件和外购件 w
INNER JOIN 产品信息_外购件_基础表 p ON p.产品流水号 = @产品流水号临时 AND p.物料流水号 = w.物料流水号
WHERE w.组件流水号 = @orderN AND ISNULL(w.零件数量, 0) <> ISNULL(CONVERT(INT, p.零件数量 * @数量临时), 0)
)
begin
update b
set b.零件数量 = CONVERT(INT, p.零件数量 * @数量临时),
b.零件类型 = p.零件类型,
b.材料流水号 = p.材料流水号,
b.导入人员编号 = p.导入人员编号
from PDM_零件明细表_基本件 b
inner join 产品信息_基本件_基础表 p on p.产品流水号 = @产品流水号临时 and p.物料流水号 = b.物料流水号
where b.组件流水号 = @orderN
update w
set w.零件数量 = CONVERT(INT, p.零件数量 * @数量临时),
w.零件类型 = p.零件类型,
w.材料流水号 = p.材料流水号,
w.导入人员编号 = p.导入人员编号
from PDM_零件明细表_标准件和外购件 w
inner join 产品信息_外购件_基础表 p on p.产品流水号 = @产品流水号临时 and p.物料流水号 = w.物料流水号
where w.组件流水号 = @orderN
-- 只有修改数量才将合同打回至 订单分配界面 重新分配 且有物料待分配
update PDM_组件名称 SET 是否分配 = 0 where 组件流水号 = @orderN
update 合同管理_订单信息_基础表 set 是否下达 = 0,是否提交=1 where 项目流水号=@项目流水号
end'
SET @start = CHARINDEX(N'declare @零件数量改前 int', @sql)
SET @afterStatus = CHARINDEX(N'update 合同管理_订单信息_基础表 set 是否下达 = 0,是否提交=1 where 项目流水号=@项目流水号', @sql, @start)
SET @finish = CASE WHEN @afterStatus > 0 THEN CHARINDEX(N'end', @sql, @afterStatus) ELSE 0 END
IF @start = 0 OR @afterStatus = 0 OR @finish = 0
BEGIN
IF CHARINDEX(N'合同查询修改数量时按产品基础BOM重新计算订单BOM', @sql) > 0
BEGIN
PRINT N'过程已包含本次BOM数量重算修复,无需重复修改'
RETURN
END
RAISERROR(N'未找到预期的BOM数量缩放旧片段,未执行修改', 16, 1)
RETURN
END
SET @replaceLength = @finish - @start + LEN(N'end')
SET @sql = STUFF(@sql, @start, @replaceLength, @new)
SET @sql = REPLACE(@sql, N'CREATE PROCEDURE [dbo].[PDM_组件名称_确认更改新]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_确认更改新]')
SET @sql = REPLACE(@sql, N'CREATE PROCEDURE [dbo].[PDM_组件名称_确认更改新]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_确认更改新]')
SET @sql = REPLACE(@sql, N'CREATE PROCEDURE [dbo].[PDM_组件名称_确认更改新]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_确认更改新]')
SET @sql = REPLACE(@sql, N'CREATE PROCEDURE [dbo].[PDM_组件名称_确认更改新]', N'ALTER PROCEDURE [dbo].[PDM_组件名称_确认更改新]')
EXEC sp_executesql @sql
GO

View File

@@ -0,0 +1,341 @@
CREATE PROCEDURE [dbo].[PDM_组件名称_确认更改新]
@项目流水号 int = '17412',
@机床流水号 int = '17448',
@修改人 int = '5',
@合同备注 nvarchar(200)=null
AS
declare @合同类型 int
declare @订单流水号 int
declare @组件流水号 int
declare @产品流水号 int
declare @机床流水号游标 int
declare @产品名称 nvarchar(200) = null
declare @数量 float = null
declare @单位 nvarchar(50) = null
declare @单价 float = null
declare @产品详情 nvarchar(500) = null
declare @产品位置 nvarchar(50) = null
declare @是否可选 int
declare @物料流水号 int
declare @是否滑台 int
declare @是否分配 int
declare @是否接收 int
declare @顺序 int
declare @组件流水号临时 int
declare @产品流水号临时 int
declare @机床流水号游标临时 int
declare @产品名称临时 nvarchar(200) = null
declare @数量临时 float = null
declare @配置数临时 float = null
declare @单位临时 nvarchar(50) = null
declare @单价临时 float = null
declare @产品详情临时 nvarchar(500) = null
declare @产品位置临时 nvarchar(50) = null
declare @是否可选临时 int
declare @物料流水号临时 int
declare @是否滑台临时 int
declare @顺序临时 int
select @合同类型=合同类型 from PDM_项目名称 where 项目流水号=@项目流水号
select @订单流水号=订单流水号 from 合同管理_订单信息_基础表 where 项目流水号=@项目流水号
declare @改前数量 int
select top 1 @组件流水号 = 组件流水号 from PDM_组件名称_修改记录_临时表 where PDM_组件名称_修改记录_临时表.机床流水号 = @机床流水号
select @改前数量 = count(1) from PDM_组件名称 where 组件流水号 = @组件流水号
declare @项目修改记录流水号 int
insert into PDM_项目名称_修改记录(项目流水号,修改人,合同备注)values(@项目流水号,@修改人,@合同备注)
set @项目修改记录流水号 = @@IDENTITY
if @合同类型 = 2
begin
insert into PDM_机床名称_修改记录(项目修改记录流水号,机床流水号,机床名称,数量,单位,单价,详情)
select @项目修改记录流水号,机床流水号,机床名称,数量,单位,单价,详情 from PDM_机床名称 where 项目流水号=@项目流水号
update PDM_机床名称 set PDM_机床名称.机床名称=a.机床名称,PDM_机床名称.数量=a.数量,PDM_机床名称.单位=a.单位,
PDM_机床名称.单价=a.单价,PDM_机床名称.详情=a.详情 from PDM_机床名称_修改记录_临时表 as a where PDM_机床名称.机床流水号=a.机床流水号
declare @机床数 int
select @机床数 = 数量 from PDM_机床名称_修改记录_临时表 where 机床流水号 = @机床流水号
update PDM_组件名称_修改记录_临时表 set 数量 = 配置数 * @机床数 where 机床流水号 = @机床流水号
-- 然后删除机床
--DELETE FROM PDM_机床名称
--WHERE 项目流水号 = @项目流水号
-- AND 机床流水号 NOT IN (SELECT 机床流水号 FROM PDM_机床名称_修改记录_临时表 WHERE 项目流水号 = @项目流水号)
-- 由于考虑到专机合同删除问题 实际删除临时表放到后面
-- 修改人:Ld 修改时间:2026-07-23 允许合同修改时删除未领料机床,已领料机床保留,避免误删已领料数据
IF EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 WHERE 项目流水号 = @项目流水号)
BEGIN
DELETE r FROM 车间装配管理_装配任务 r
INNER JOIN PDM_组件名称 c ON c.组件流水号 = r.组件流水号
INNER JOIN PDM_机床名称 m ON m.机床流水号 = c.机床流水号
WHERE m.项目流水号 = @项目流水号
AND NOT EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 t WHERE t.项目流水号 = @项目流水号 AND t.机床流水号 = m.机床流水号)
AND NOT EXISTS (SELECT 1 FROM PDM_组件名称 c2 WHERE c2.机床流水号 = m.机床流水号 AND ISNULL(c2.是否领料, 0) <> 0)
DELETE r FROM 车间装配管理_装配执行_临时领料明细 r
INNER JOIN PDM_组件名称 c ON c.组件流水号 = r.组件流水号
INNER JOIN PDM_机床名称 m ON m.机床流水号 = c.机床流水号
WHERE m.项目流水号 = @项目流水号
AND NOT EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 t WHERE t.项目流水号 = @项目流水号 AND t.机床流水号 = m.机床流水号)
AND NOT EXISTS (SELECT 1 FROM PDM_组件名称 c2 WHERE c2.机床流水号 = m.机床流水号 AND ISNULL(c2.是否领料, 0) <> 0)
DELETE r FROM 车间装配管理_领料单明细 r
INNER JOIN PDM_组件名称 c ON c.组件流水号 = r.组件流水号
INNER JOIN PDM_机床名称 m ON m.机床流水号 = c.机床流水号
WHERE m.项目流水号 = @项目流水号
AND NOT EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 t WHERE t.项目流水号 = @项目流水号 AND t.机床流水号 = m.机床流水号)
AND NOT EXISTS (SELECT 1 FROM PDM_组件名称 c2 WHERE c2.机床流水号 = m.机床流水号 AND ISNULL(c2.是否领料, 0) <> 0)
DELETE r FROM 车间装配管理_领料单 r
INNER JOIN PDM_组件名称 c ON c.组件流水号 = r.组件流水号
INNER JOIN PDM_机床名称 m ON m.机床流水号 = c.机床流水号
WHERE m.项目流水号 = @项目流水号
AND NOT EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 t WHERE t.项目流水号 = @项目流水号 AND t.机床流水号 = m.机床流水号)
AND NOT EXISTS (SELECT 1 FROM PDM_组件名称 c2 WHERE c2.机床流水号 = m.机床流水号 AND ISNULL(c2.是否领料, 0) <> 0)
DELETE r FROM PDM_零件明细表_基本件 r
INNER JOIN PDM_组件名称 c ON c.组件流水号 = r.组件流水号
INNER JOIN PDM_机床名称 m ON m.机床流水号 = c.机床流水号
WHERE m.项目流水号 = @项目流水号
AND NOT EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 t WHERE t.项目流水号 = @项目流水号 AND t.机床流水号 = m.机床流水号)
AND NOT EXISTS (SELECT 1 FROM PDM_组件名称 c2 WHERE c2.机床流水号 = m.机床流水号 AND ISNULL(c2.是否领料, 0) <> 0)
DELETE r FROM PDM_零件明细表_标准件和外购件 r
INNER JOIN PDM_组件名称 c ON c.组件流水号 = r.组件流水号
INNER JOIN PDM_机床名称 m ON m.机床流水号 = c.机床流水号
WHERE m.项目流水号 = @项目流水号
AND NOT EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 t WHERE t.项目流水号 = @项目流水号 AND t.机床流水号 = m.机床流水号)
AND NOT EXISTS (SELECT 1 FROM PDM_组件名称 c2 WHERE c2.机床流水号 = m.机床流水号 AND ISNULL(c2.是否领料, 0) <> 0)
DELETE c FROM PDM_组件名称 c
INNER JOIN PDM_机床名称 m ON m.机床流水号 = c.机床流水号
WHERE m.项目流水号 = @项目流水号
AND NOT EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 t WHERE t.项目流水号 = @项目流水号 AND t.机床流水号 = m.机床流水号)
AND NOT EXISTS (SELECT 1 FROM PDM_组件名称 c2 WHERE c2.机床流水号 = m.机床流水号 AND ISNULL(c2.是否领料, 0) <> 0)
DELETE m FROM PDM_机床名称 m
WHERE m.项目流水号 = @项目流水号
AND NOT EXISTS (SELECT 1 FROM PDM_机床名称_修改记录_临时表 t WHERE t.项目流水号 = @项目流水号 AND t.机床流水号 = m.机床流水号)
AND NOT EXISTS (SELECT 1 FROM PDM_组件名称 c WHERE c.机床流水号 = m.机床流水号 AND ISNULL(c.是否领料, 0) <> 0)
END
delete from PDM_机床名称_修改记录_临时表 where 项目流水号 = @项目流水号
end
insert into PDM_组件名称_修改记录(项目修改记录流水号,组件流水号,产品流水号,机床流水号,产品名称,数量,单位,单价,产品详情)
select @项目修改记录流水号,组件流水号,产品流水号,机床流水号,产品名称,数量,单位,单价,产品详情 from PDM_组件名称 where 机床流水号=@机床流水号 and 是否合同创建 = 1 and 已删= 0
declare @orderN int--临时变量,用来保存游标值
declare y_curr cursor for --申明游标 为orderNum
select 组件流水号 from PDM_组件名称_修改记录_临时表 where PDM_组件名称_修改记录_临时表.机床流水号 = @机床流水号
open y_curr --打开游标
fetch next from y_curr into @orderN ----开始循环游标变量
while(@@fetch_status=0)---返回被 FETCH 语句执行的最后游标的状态,而不是任何当前被连接打开的游标的状态。
begin
select @产品流水号临时=ISNULL([PDM_组件名称_修改记录_临时表].产品流水号,0),
@机床流水号游标临时 =[PDM_组件名称_修改记录_临时表].机床流水号,
@产品名称临时=[PDM_组件名称_修改记录_临时表].产品名称,
@数量临时=[PDM_组件名称_修改记录_临时表].数量,
@配置数临时=[PDM_组件名称_修改记录_临时表].配置数,
@单位临时=[PDM_组件名称_修改记录_临时表].单位,
@单价临时=[PDM_组件名称_修改记录_临时表].单价,
@产品详情临时=[PDM_组件名称_修改记录_临时表].产品详情,
@产品位置临时=[PDM_组件名称_修改记录_临时表].产品位置,
@是否可选临时=[PDM_组件名称_修改记录_临时表].是否可选,
@物料流水号临时=ISNULL( [PDM_组件名称_修改记录_临时表].物料流水号,0),
@是否滑台临时=ISNULL( 产品信息_基础表.是否滑台,0 ),
@顺序临时=[PDM_组件名称_修改记录_临时表].顺序
from [dbo].[PDM_组件名称_修改记录_临时表] LEFT JOIN 产品信息_基础表
ON 产品信息_基础表.产品流水号 = [PDM_组件名称_修改记录_临时表].产品流水号 where 组件流水号 = @orderN
select @产品流水号=ISNULL( PDM_组件名称.产品流水号,0),
@机床流水号游标 =PDM_组件名称.机床流水号,
@产品名称=PDM_组件名称.产品名称,
@数量=PDM_组件名称.数量,
@是否分配=PDM_组件名称.是否分配,
@是否接收 = 是否接收,
--@单位=PDM_组件名称.单位,
--@产品详情=PDM_组件名称.产品详情,
--@产品位置=PDM_组件名称.产品位置,
--@是否可选=PDM_组件名称.是否可选,
@物料流水号=ISNULL( PDM_组件名称.物料流水号,0),
@是否滑台=ISNULL( 产品信息_基础表.是否滑台,0)
from [dbo].PDM_组件名称 LEFT JOIN 产品信息_基础表
ON 产品信息_基础表.产品流水号 = PDM_组件名称.产品流水号 where 组件流水号 = @orderN
if @产品流水号临时 <> @产品流水号
begin
update dbo.PDM_组件名称 set 修改状态 = 2,是否分配 = 0 where 组件流水号 = @orderN
delete from 车间装配管理_领料单明细 where 组件流水号 = @orderN
delete from 车间装配管理_领料单 where 组件流水号 = @orderN
delete from 车间装配管理_装配执行_临时领料明细 where 组件流水号=@orderN
delete from PDM_零件明细表_基本件 where 组件流水号 = @orderN
delete from PDM_零件明细表_基本件_数据导入保存 where 订单流水号 = @订单流水号 and 产品名称 = @产品名称
delete from PDM_零件明细表_标准件和外购件 where 组件流水号 = @orderN
delete from PDM_零件明细表_外购件和标准件_数据导入保存 where 订单流水号 = @订单流水号 and 产品名称 = @产品名称
end
else
begin
-- 只有数量发生改动 才会修改 是否分配状态
--update dbo.PDM_组件名称 set 修改状态 = 1,是否分配 = 0 where 组件流水号 = @orderN
update dbo.PDM_组件名称 set 修改状态 = 1 where 组件流水号 = @orderN
if @数量临时 <> @数量 and @是否分配 = 1
begin
if @数量临时 <> @数量 and @是否分配 = 1
begin
declare @零件数量改前 int
declare @零件数量改后 int
SELECT @零件数量改前 = 零件数量 FROM PDM_零件明细表_基本件 where 组件流水号 = @orderN
SET @零件数量改后 = @零件数量改前/@数量 * @数量临时
IF(@零件数量改前 != @零件数量改后)
begin
update PDM_零件明细表_基本件 set 零件数量 = 零件数量/@数量 * @数量临时 where 组件流水号 = @orderN
update PDM_零件明细表_标准件和外购件 set 零件数量 = 零件数量/@数量 * @数量临时 where 组件流水号 = @orderN
-- 只有修改数量才将合同打回至 订单分配界面 重新分配 且有物料待分配
update PDM_组件名称 SET 是否分配 = 0 where 组件流水号 = @orderN
update 合同管理_订单信息_基础表 set 是否下达 = 0,是否提交=1 where 项目流水号=@项目流水号
end
end
end
end
if (
((@是否滑台临时 = 2 or @是否滑台临时 =4) and @物料流水号临时 = 0 and @产品流水号临时 <> 0 and (@是否滑台 = 2 or @是否滑台 =4) and @物料流水号 = 0 and @产品流水号 <> 0)
OR ((@是否滑台临时 = 1 or @是否滑台临时 =3) and @物料流水号临时 = 0 and @产品流水号临时 <> 0 and (@是否滑台 = 1 or @是否滑台 =3) and @物料流水号 = 0 and @产品流水号 <> 0)
OR (@是否滑台临时 = 0 and @物料流水号临时 = 0 and @产品流水号临时 = 0 and @是否滑台 = 0 and @物料流水号 = 0 and @产品流水号 = 0)
OR (@是否滑台临时 = 0 and @物料流水号临时 <> 0 and @产品流水号临时 = 0 and @是否滑台 = 0 and @物料流水号 <> 0 and @产品流水号 = 0)
OR (@是否滑台临时 = 0 and @物料流水号临时 = 0 and @产品流水号临时 <> 0 and @是否滑台 = 0 and @物料流水号 = 0 and @产品流水号 <> 0)
OR (@是否滑台临时 = 5 and @物料流水号临时 = 0 and @产品流水号临时 <> 0 and @是否滑台 = 5 and @物料流水号 = 0 and @产品流水号 <> 0)
)
begin
update PDM_组件名称 set PDM_组件名称.产品流水号=@产品流水号临时,
PDM_组件名称.产品名称=@产品名称临时,
PDM_组件名称.数量=@数量临时,
PDM_组件名称.配置数=@配置数临时,
PDM_组件名称.单位=@单位临时,
PDM_组件名称.单价=@单价临时,
PDM_组件名称.产品详情=@产品详情临时,
PDM_组件名称.产品位置=@产品位置临时,
PDM_组件名称.物料流水号=@物料流水号临时,
顺序 = @顺序临时
where PDM_组件名称.组件流水号 = @orderN
END
ELSE
begin
-- 先判断是否接收,如果接收过的就不修改它的状态到未下达 如果没接受过 零部件物料变为 未分配状态 订单也需要同步未分配
--if(@是否接收 = 1)
--begin
--update PDM_组件名称 set PDM_组件名称.产品流水号=@产品流水号临时,
-- PDM_组件名称.产品名称=@产品名称临时,
-- PDM_组件名称.数量=@数量临时,
-- PDM_组件名称.配置数=@配置数临时,
-- PDM_组件名称.单位=@单位临时,
-- PDM_组件名称.单价=@单价临时,
-- PDM_组件名称.产品详情=@产品详情临时,
-- PDM_组件名称.产品位置=@产品位置临时,
-- PDM_组件名称.物料流水号=@物料流水号临时,[电机联接板文本]=NULL,[联轴器文本]=NULL,
-- 轴承位置=NULL,轴承位置文本=NULL,安装方向=NULL,电机位置=NULL,电机位置文本=NULL,
-- 传动方式位置=NULL,传动方式位置文本=NULL,
-- [滑台电机位置]=NULL, [滑台电机文本]=NULL, 主轴轮=NULL,电机轮=NULL,皮带轮=NULL,其它=NULL,输出转速=NULL,
-- 中心内冷=NULL,防护类型=NULL,电机联接板=NULL,联轴器=NULL,组件采购=0,
-- 组件仓库=0,组件动力头=0,组件滑台=0,组件精工车间=0,组件专机=0,是否分配=0,是否接收=0,是否领料=0,装配进度=0,产品状态=0, 顺序 = @顺序临时
-- where PDM_组件名称.组件流水号 = @orderN
--end
--else
--begin
update PDM_组件名称 set PDM_组件名称.产品流水号=@产品流水号临时,
PDM_组件名称.产品名称=@产品名称临时,
PDM_组件名称.数量=@数量临时,
PDM_组件名称.配置数=@配置数临时,
PDM_组件名称.单位=@单位临时,
PDM_组件名称.单价=@单价临时,
PDM_组件名称.产品详情=@产品详情临时,
PDM_组件名称.产品位置=@产品位置临时,
PDM_组件名称.物料流水号=@物料流水号临时,[电机联接板文本]=NULL,[联轴器文本]=NULL,
轴承位置=NULL,轴承位置文本=NULL,安装方向=NULL,电机位置=NULL,电机位置文本=NULL,
传动方式位置=NULL,传动方式位置文本=NULL,
[滑台电机位置]=NULL, [滑台电机文本]=NULL, 主轴轮=NULL,电机轮=NULL,皮带轮=NULL,其它=NULL,输出转速=NULL,
中心内冷=NULL,防护类型=NULL,电机联接板=NULL,联轴器=NULL,组件采购=0,
组件仓库=0,组件动力头=0,组件滑台=0,组件精工车间=0,组件专机=0,是否分配=0,是否接收=0,是否领料=0,装配进度=0,产品状态=0, 顺序 = @顺序临时
where PDM_组件名称.组件流水号 = @orderN
update 合同管理_订单信息_基础表 set 是否下达 = 0,是否提交=1 where 项目流水号=@项目流水号
--end
END
--end
fetch next from y_curr into @orderN --开始循环游标变量
end
close y_curr--关闭游标
deallocate y_curr --释放游标
--update PDM_组件名称 set PDM_组件名称.产品流水号=a.产品流水号,PDM_组件名称.产品名称=a.产品名称,PDM_组件名称.数量=a.数量,PDM_组件名称.单位=a.单位,
--PDM_组件名称.单价=a.单价,PDM_组件名称.产品详情=a.产品详情,PDM_组件名称.物料流水号=a.物料流水号,轴承位置=NULL,轴承位置文本=NULL,安装方向=NULL,电机位置=NULL,电机位置文本=NULL,传动方式位置=NULL,传动方式位置文本=NULL,
--主轴轮=NULL,电机轮=NULL,皮带轮=NULL,其它=NULL,输出转速=NULL,中心内冷=NULL,防护类型=NULL,电机联接板=NULL,联轴器=NULL,组件采购=0,组件仓库=0,组件动力头=0,组件滑台=0,组件精工车间=0,
--组件专机=0,是否分配=0,是否接收=0,是否领料=0,装配进度=0,产品状态=0 from PDM_组件名称_修改记录_临时表 as a
--where PDM_组件名称.组件流水号=a.组件流水号 and PDM_组件名称.机床流水号 = @机床流水号
delete from 车间装配管理_装配任务 where 组件流水号 in (select 组件流水号 from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0)
delete from 车间装配管理_装配执行_临时领料明细 where 组件流水号 in (select 组件流水号 from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0)
delete from 车间装配管理_领料单明细 where 组件流水号 in (select 组件流水号 from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0)
delete from 车间装配管理_领料单 where 组件流水号 in (select 组件流水号 from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0)
delete from PDM_零件明细表_基本件 where 组件流水号 in (select 组件流水号 from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0)
delete from PDM_零件明细表_基本件_数据导入保存 where 订单流水号 = @订单流水号 and 产品名称 not in (select 产品名称 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null)
delete from PDM_零件明细表_标准件和外购件 where 组件流水号 in (select 组件流水号 from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0)
delete from PDM_零件明细表_外购件和标准件_数据导入保存 where 订单流水号 = @订单流水号 and 产品名称 not in (select 产品名称 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null)
delete from PDM_组件名称 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 = 0
update PDM_组件名称 set 已删 = 1 where 组件流水号 not in (select 组件流水号 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is not null) and 机床流水号=@机床流水号 and 是否合同创建 = 1 and 产品状态 > 0
insert into PDM_组件名称(产品流水号,机床流水号,产品名称,产品详情,单位,单价,数量,是否合同创建,产品位置,是否可选,物料流水号,配置数,顺序)
select 产品流水号,机床流水号,产品名称,产品详情,单位,单价,数量,1,产品位置,是否可选,物料流水号,配置数,顺序 from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is null
-- 如果有 insert into 就将这个订单改为未下发 增加时将订单整体打回未下发
if(select count(1) from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is null) > 0
begin
update 合同管理_订单信息_基础表 set 是否下达 = 0,是否提交=1 where 项目流水号=@项目流水号
end
-- 不在最后判断,在前面如果在游标遍历中 数量改变了才重置是否下达
--declare @n int
--select @n=COUNT(*) from PDM_组件名称_修改记录_临时表 where 机床流水号=@机床流水号 and 组件流水号 is null
--if @n > 0
--begin
-- update 合同管理_订单信息_基础表 set 是否下达 = 0,是否提交=1 where 项目流水号=@项目流水号
--end
declare @n int
select @n=COUNT(*) from PDM_组件名称_修改记录_临时表 where 组件流水号 = @组件流水号--机床流水号=@机床流水号 --and 组件流水号 is null
if @n > @改前数量 -- 新增了物料
begin
update 合同管理_订单信息_基础表 set 是否下达 = 0,是否提交=1 where 项目流水号=@项目流水号
end
declare @金额 float
if @合同类型 = 2
begin
select @金额=SUM(ISNULL(单价,0)*ISNULL(数量,0)) from PDM_机床名称 where 项目流水号 = @项目流水号
update PDM_项目名称 set 合同金额 = @金额,合同备注=@合同备注 where 项目流水号=@项目流水号
end
else
begin
select @金额=SUM(ISNULL(单价,0)*ISNULL(数量,0)) from PDM_组件名称 where 机床流水号 = @机床流水号 and 已删 = 0
update PDM_项目名称 set 合同金额 = @金额,合同备注=@合同备注 where 项目流水号=@项目流水号
end
delete from PDM_组件名称_修改记录_临时表 where 机床流水号 = @机床流水号
update 合同管理_订单信息_基础表 set 确认日期 = NULL,是否确认=0,技术审核=1 where 项目流水号=@项目流水号

View File

@@ -0,0 +1,53 @@
-- 售后合同提成类型保存支持(正式库)
-- 修改人:Ld 修改时间:2026-08-13 07:47:17;
USE [ERPTOOL_JY]
GO
IF OBJECT_ID(N'dbo.PDM_项目名称_售后合同_编辑数据', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[PDM_项目名称_售后合同_编辑数据]
GO
--CREATE 李显
--2021-08-31
-- 修改人:Ld 修改时间:2026-08-13 07:47:17; 增加售后合同提成类型参数并保存到项目主表
CREATE PROCEDURE [dbo].[PDM_项目名称_售后合同_编辑数据]
@项目流水号 int,
@客户流水号 int=null,
@售后客户流水号 int=null,
@付款方式流水号 int=null,
@交货期限 nvarchar(50)=null,
@客户要求 nvarchar(200)=null,
@操作者 int=null,
@原项目流水号 int=null,
@收货人 nvarchar(50)=null,
@签订日期 nvarchar(50)=null,
@税率 float=null,
@售后原因 nvarchar(MAX)=null,
@解决方案 nvarchar(MAX)=null,
@合同备注 nvarchar(50)=null,
@提成类型 nvarchar(50)=null
AS
BEGIN
SET NOCOUNT ON;
UPDATE PDM_项目名称
SET 客户流水号=@客户流水号,
付款方式流水号=@付款方式流水号,
交货期限=@交货期限,
操作者=@操作者,
客户要求=@客户要求,
合同备注=@合同备注,
提成类型=@提成类型,
签订日期=@签订日期,
税率=@税率,
收货人员=@收货人,
售后原因=@售后原因,
解决方案=@解决方案,
原项目流水号=@原项目流水号,
售后客户流水号=@售后客户流水号
WHERE 项目流水号=@项目流水号;
SELECT '1' AS result;
END
GO

View File

@@ -0,0 +1,53 @@
-- 售后合同提成类型保存支持
-- 修改人:Ld 修改时间:2026-08-12 17:07:03;
USE [ERPTOOL_JY_20250826Back]
GO
IF OBJECT_ID(N'dbo.PDM_项目名称_售后合同_编辑数据', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[PDM_项目名称_售后合同_编辑数据]
GO
--CREATE 李显
--2021-08-31
-- 修改人:Ld 修改时间:2026-08-12 17:07:03; 增加售后合同提成类型参数并保存到项目主表
CREATE PROCEDURE [dbo].[PDM_项目名称_售后合同_编辑数据]
@项目流水号 int,
@客户流水号 int=null,
@售后客户流水号 int=null,
@付款方式流水号 int=null,
@交货期限 nvarchar(50)=null,
@客户要求 nvarchar(200)=null,
@操作者 int=null,
@原项目流水号 int=null,
@收货人 nvarchar(50)=null,
@签订日期 nvarchar(50)=null,
@税率 float=null,
@售后原因 nvarchar(MAX)=null,
@解决方案 nvarchar(MAX)=null,
@合同备注 nvarchar(50)=null,
@提成类型 nvarchar(50)=null
AS
BEGIN
SET NOCOUNT ON;
UPDATE PDM_项目名称
SET 客户流水号=@客户流水号,
付款方式流水号=@付款方式流水号,
交货期限=@交货期限,
操作者=@操作者,
客户要求=@客户要求,
合同备注=@合同备注,
提成类型=@提成类型,
签订日期=@签订日期,
税率=@税率,
收货人员=@收货人,
售后原因=@售后原因,
解决方案=@解决方案,
原项目流水号=@原项目流水号,
售后客户流水号=@售后客户流水号
WHERE 项目流水号=@项目流水号;
SELECT '1' AS result;
END
GO

View File

@@ -16,6 +16,7 @@ AS
BEGIN
SET NOCOUNT ON;
-- 修改人:Ld 修改时间:2026-08-11 10:09:42; 合同查询改为按合同去重,并将合同编号前缀匹配优先,避免BH开头合同被同合同多订单记录挤出列表。
SELECT TOP 50
p.项目流水号,
p.合同编号,
@@ -28,8 +29,23 @@ BEGIN
FROM dbo.PDM_项目名称 AS p
LEFT JOIN dbo.客户关系管理系统_客户名称 AS c
ON p.客户流水号 = c.客户流水号
LEFT JOIN dbo.合同管理_订单信息_基础表 AS o
ON p.项目流水号 = o.项目流水号
OUTER APPLY (
SELECT TOP 1
oi.订单流水号,
oi.订单编号,
oi.完成期限
FROM dbo.合同管理_订单信息_基础表 AS oi
WHERE oi.项目流水号 = p.项目流水号
AND (ISNULL(@关键字, N'') = N''
OR ISNULL(oi.订单编号, N'') LIKE N'%' + @关键字 + N'%'
OR p.合同编号 LIKE N'%' + @关键字 + N'%'
OR ISNULL(c.客户名称, N'') LIKE N'%' + @关键字 + N'%'
OR ISNULL(c.简称, N'') LIKE N'%' + @关键字 + N'%')
AND (ISNULL(@订单编号, N'') = N'' OR ISNULL(oi.订单编号, N'') LIKE N'%' + @订单编号 + N'%')
ORDER BY
CASE WHEN ISNULL(@关键字, N'') <> N'' AND ISNULL(oi.订单编号, N'') LIKE @关键字 + N'%' THEN 0 ELSE 1 END,
oi.订单流水号 DESC
) AS o
WHERE ISNULL(p.是否启用, 1) = 1
AND ISNULL(p.合同编号, N'') <> N''
AND (ISNULL(@关键字, N'') = N''
@@ -40,7 +56,10 @@ BEGIN
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;
ORDER BY
CASE WHEN ISNULL(@关键字, N'') <> N'' AND p.合同编号 LIKE @关键字 + N'%' THEN 0 ELSE 1 END,
CASE WHEN ISNULL(@合同编号, N'') <> N'' AND p.合同编号 LIKE @合同编号 + N'%' THEN 0 ELSE 1 END,
p.项目流水号 DESC;
END;
GO
@@ -71,6 +90,8 @@ BEGIN
DECLARE @仓库备货合同编号 NVARCHAR(50);
DECLARE @补货类型名称 NVARCHAR(50);
DECLARE @订单类型 INT = 3;
DECLARE @补货锁资源 NVARCHAR(255);
DECLARE @补货锁结果 INT;
IF @补货期限 IS NULL
BEGIN
@@ -108,6 +129,41 @@ BEGIN
BEGIN TRY
BEGIN TRANSACTION;
-- 修改人:Ld 修改时间:2026-08-11 09:42:28; 同一类补货提交加事务级应用锁,避免重复点击或并发请求消费同一份补货单生成多张订单。
SET @补货锁资源 = N'报缺补货_提交_关联合同_' + CASE WHEN @是否外购 = 1 THEN N'外购' ELSE N'自制' END;
EXEC @补货锁结果 = sys.sp_getapplock
@Resource = @补货锁资源,
@LockMode = 'Exclusive',
@LockOwner = 'Transaction',
@LockTimeout = 10000;
IF @补货锁结果 < 0
BEGIN
SELECT '0' AS result, N'补货单正在提交,请稍后重试' AS message;
ROLLBACK TRANSACTION;
RETURN;
END;
-- 修改人:Ld 修改时间:2026-08-11 09:42:28; 获得锁后重新检查中间表,第一笔提交删除后,后续重复请求不再继续创建订单。
IF @是否外购 = 1
BEGIN
IF NOT EXISTS (SELECT 1 FROM dbo.外购件补货明细中间表 WITH (UPDLOCK, HOLDLOCK))
BEGIN
SELECT '0' AS result, N'外购补货单为空' AS message;
ROLLBACK TRANSACTION;
RETURN;
END;
END
ELSE
BEGIN
IF NOT EXISTS (SELECT 1 FROM dbo.自制件补货明细中间表 WITH (UPDLOCK, HOLDLOCK))
BEGIN
SELECT '0' AS result, N'自制补货单为空' AS message;
ROLLBACK TRANSACTION;
RETURN;
END;
END;
IF @来源类型 = N'仓库备货'
BEGIN
-- 仓库备货每次创建独立CKBH合同,编号规则按补货单日期+三位序号生成;修改人:Ld 修改时间:2026-08-04 08:29:13;

View File

@@ -0,0 +1,143 @@
USE [ERPTOOL_JY]
GO
BEGIN TRANSACTION
BEGIN TRY
-- 修改人:Ld 修改时间:2026-08-17 08:35:19; 备份订单MK202607210883修复前BOM数量,恢复口径为新增保存数量乘当前组件数量。
IF OBJECT_ID(N'dbo.GPT_BOM数量修复备份_20260817', N'U') IS NULL
BEGIN
CREATE TABLE dbo.GPT_BOM数量修复备份_20260817
(
备份流水号 int IDENTITY(1,1) NOT NULL PRIMARY KEY,
订单编号 nvarchar(50) NULL,
组件流水号 int NULL,
来源表 nvarchar(100) NULL,
明细流水号 int NULL,
物料流水号 int NULL,
产品名称 nvarchar(200) NULL,
零件名称 nvarchar(200) NULL,
图号或型号 nvarchar(200) NULL,
修复前数量 int NULL,
新增保存数量 float NULL,
组件数量 float NULL,
应改数量 int NULL,
已领数量 int NULL,
备份时间 datetime NOT NULL DEFAULT(GETDATE()),
修改人 nvarchar(50) NOT NULL DEFAULT(N'Ld'),
备注 nvarchar(500) NULL
)
END
INSERT INTO dbo.GPT_BOM数量修复备份_20260817
(
订单编号, 组件流水号, 来源表, 明细流水号, 物料流水号,
产品名称, 零件名称, 图号或型号, 修复前数量, 新增保存数量,
组件数量, 应改数量, 已领数量, 备注
)
SELECT
c.订单编号,
c.组件流水号,
N'PDM_零件明细表_基本件',
b.基本件流水号,
b.物料流水号,
c.产品名称,
m.名称,
m.代号,
b.零件数量,
s.数量,
c.数量,
CONVERT(int, s.数量 * c.数量),
b.已领数量,
N'按新增保存数量乘当前组件数量恢复订单BOM'
FROM dbo.PDM_零件明细表_基本件 b
INNER JOIN dbo.PDM_组件名称_视图 c ON c.组件流水号 = b.组件流水号
INNER JOIN dbo.PDM_零件明细表_基本件_数据导入保存 s ON s.订单流水号 = c.订单流水号 AND s.产品名称 = c.产品名称 AND s.物料流水号 = b.物料流水号
LEFT JOIN dbo.库存管理_物料主文件_基本 m ON m.物料流水号 = b.物料流水号
WHERE c.订单编号 = N'MK202607210883'
AND c.组件流水号 IN (31253, 31254)
AND ISNULL(b.零件数量, 0) <> ISNULL(CONVERT(int, s.数量 * c.数量), 0)
AND NOT EXISTS
(
SELECT 1
FROM dbo.GPT_BOM数量修复备份_20260817 bak
WHERE bak.订单编号 = c.订单编号
AND bak.来源表 = N'PDM_零件明细表_基本件'
AND bak.明细流水号 = b.基本件流水号
AND bak.备注 = N'按新增保存数量乘当前组件数量恢复订单BOM'
)
INSERT INTO dbo.GPT_BOM数量修复备份_20260817
(
订单编号, 组件流水号, 来源表, 明细流水号, 物料流水号,
产品名称, 零件名称, 图号或型号, 修复前数量, 新增保存数量,
组件数量, 应改数量, 已领数量, 备注
)
SELECT
c.订单编号,
c.组件流水号,
N'PDM_零件明细表_标准件和外购件',
w.标准件和外购件流水号,
w.物料流水号,
c.产品名称,
m.名称,
m.代号,
w.零件数量,
s.数量,
c.数量,
CONVERT(int, s.数量 * c.数量),
w.已领数量,
N'按新增保存数量乘当前组件数量恢复订单BOM'
FROM dbo.PDM_零件明细表_标准件和外购件 w
INNER JOIN dbo.PDM_组件名称_视图 c ON c.组件流水号 = w.组件流水号
INNER JOIN dbo.PDM_零件明细表_外购件和标准件_数据导入保存 s ON s.订单流水号 = c.订单流水号 AND s.产品名称 = c.产品名称 AND s.物料流水号 = w.物料流水号
LEFT JOIN dbo.库存管理_物料主文件_基本 m ON m.物料流水号 = w.物料流水号
WHERE c.订单编号 = N'MK202607210883'
AND c.组件流水号 IN (31253, 31254)
AND ISNULL(w.零件数量, 0) <> ISNULL(CONVERT(int, s.数量 * c.数量), 0)
AND NOT EXISTS
(
SELECT 1
FROM dbo.GPT_BOM数量修复备份_20260817 bak
WHERE bak.订单编号 = c.订单编号
AND bak.来源表 = N'PDM_零件明细表_标准件和外购件'
AND bak.明细流水号 = w.标准件和外购件流水号
AND bak.备注 = N'按新增保存数量乘当前组件数量恢复订单BOM'
)
-- 修改人:Ld 修改时间:2026-08-17 08:35:19; 自制基本件按新增保存数量乘当前组件数量恢复。
UPDATE b
SET b.零件数量 = CONVERT(int, s.数量 * c.数量),
b.修改人员 = 0,
b.修改时间 = GETDATE()
FROM dbo.PDM_零件明细表_基本件 b
INNER JOIN dbo.PDM_组件名称_视图 c ON c.组件流水号 = b.组件流水号
INNER JOIN dbo.PDM_零件明细表_基本件_数据导入保存 s ON s.订单流水号 = c.订单流水号 AND s.产品名称 = c.产品名称 AND s.物料流水号 = b.物料流水号
WHERE c.订单编号 = N'MK202607210883'
AND c.组件流水号 IN (31253, 31254)
AND ISNULL(b.零件数量, 0) <> ISNULL(CONVERT(int, s.数量 * c.数量), 0)
-- 修改人:Ld 修改时间:2026-08-17 08:35:19; 标准件和外购件按新增保存数量乘当前组件数量恢复。
UPDATE w
SET w.零件数量 = CONVERT(int, s.数量 * c.数量),
w.修改人员 = 0,
w.修改时间 = GETDATE()
FROM dbo.PDM_零件明细表_标准件和外购件 w
INNER JOIN dbo.PDM_组件名称_视图 c ON c.组件流水号 = w.组件流水号
INNER JOIN dbo.PDM_零件明细表_外购件和标准件_数据导入保存 s ON s.订单流水号 = c.订单流水号 AND s.产品名称 = c.产品名称 AND s.物料流水号 = w.物料流水号
WHERE c.订单编号 = N'MK202607210883'
AND c.组件流水号 IN (31253, 31254)
AND ISNULL(w.零件数量, 0) <> ISNULL(CONVERT(int, s.数量 * c.数量), 0)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION
END
DECLARE @ErrorMessage nvarchar(4000) = ERROR_MESSAGE()
RAISERROR(@ErrorMessage, 16, 1)
END CATCH
GO

View File

@@ -0,0 +1,101 @@
USE [ERPTOOL_JY]
GO
BEGIN TRANSACTION
BEGIN TRY
-- 修改人:Ld 修改时间:2026-08-12 13:27:21; 备份订单MK202608070966修复前BOM数量,便于回溯。
IF OBJECT_ID(N'dbo.GPT_BOM数量修复备份_20260812', N'U') IS NULL
BEGIN
CREATE TABLE dbo.GPT_BOM数量修复备份_20260812
(
备份流水号 int IDENTITY(1,1) NOT NULL PRIMARY KEY,
订单编号 nvarchar(50) NULL,
组件流水号 int NULL,
来源表 nvarchar(100) NULL,
明细流水号 int NULL,
物料流水号 int NULL,
产品流水号 int NULL,
产品名称 nvarchar(200) NULL,
零件名称 nvarchar(200) NULL,
图号或型号 nvarchar(200) NULL,
修复前数量 int NULL,
应改数量 int NULL,
组件数量 float NULL,
产品基础BOM数量 float NULL,
备份时间 datetime NOT NULL DEFAULT(GETDATE()),
修改人 nvarchar(50) NOT NULL DEFAULT(N'Ld'),
备注 nvarchar(500) NULL
)
END
INSERT INTO dbo.GPT_BOM数量修复备份_20260812
(
订单编号, 组件流水号, 来源表, 明细流水号, 物料流水号, 产品流水号,
产品名称, 零件名称, 图号或型号, 修复前数量, 应改数量,
组件数量, 产品基础BOM数量, 备注
)
SELECT
c.订单编号,
c.组件流水号,
CASE WHEN v.类型 = N'自制' THEN N'PDM_零件明细表_基本件' ELSE N'PDM_零件明细表_标准件和外购件' END,
v.流水号,
v.物料流水号,
c.产品流水号,
c.产品名称,
v.零件名称,
v.图号或型号,
v.数量,
CONVERT(int, p.数量 * c.数量),
c.数量,
p.数量,
N'修复合同查询修改数量导致订单BOM重复乘组件数量'
FROM dbo.PDM_组件名称_视图 c
INNER JOIN dbo.PDM_零件明细表_所有视图 v ON v.组件流水号 = c.组件流水号
INNER JOIN dbo.产品信息_零件视图 p ON p.产品流水号 = c.产品流水号 AND p.物料流水号 = v.物料流水号
WHERE c.订单编号 = N'MK202608070966'
AND ISNULL(v.数量, 0) <> ISNULL(CONVERT(int, p.数量 * c.数量), 0)
AND NOT EXISTS
(
SELECT 1
FROM dbo.GPT_BOM数量修复备份_20260812 b
WHERE b.订单编号 = c.订单编号
AND b.组件流水号 = c.组件流水号
AND b.明细流水号 = v.流水号
AND b.备注 = N'修复合同查询修改数量导致订单BOM重复乘组件数量'
)
-- 修改人:Ld 修改时间:2026-08-12 13:27:21; 自制基本件按产品基础BOM数量乘组件数量修回正常订单BOM总数量。
UPDATE b
SET b.零件数量 = CONVERT(int, p.零件数量 * c.数量),
b.修改人员 = 0,
b.修改时间 = GETDATE()
FROM dbo.PDM_零件明细表_基本件 b
INNER JOIN dbo.PDM_组件名称_视图 c ON c.组件流水号 = b.组件流水号
INNER JOIN dbo.产品信息_基本件_基础表 p ON p.产品流水号 = c.产品流水号 AND p.物料流水号 = b.物料流水号
WHERE c.订单编号 = N'MK202608070966'
AND ISNULL(b.零件数量, 0) <> ISNULL(CONVERT(int, p.零件数量 * c.数量), 0)
-- 修改人:Ld 修改时间:2026-08-12 13:27:21; 标准件和外购件按产品基础BOM数量乘组件数量修回正常订单BOM总数量。
UPDATE w
SET w.零件数量 = CONVERT(int, p.零件数量 * c.数量),
w.修改人员 = 0,
w.修改时间 = GETDATE()
FROM dbo.PDM_零件明细表_标准件和外购件 w
INNER JOIN dbo.PDM_组件名称_视图 c ON c.组件流水号 = w.组件流水号
INNER JOIN dbo.产品信息_外购件_基础表 p ON p.产品流水号 = c.产品流水号 AND p.物料流水号 = w.物料流水号
WHERE c.订单编号 = N'MK202608070966'
AND ISNULL(w.零件数量, 0) <> ISNULL(CONVERT(int, p.零件数量 * c.数量), 0)
COMMIT TRANSACTION
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
ROLLBACK TRANSACTION
END
DECLARE @ErrorMessage nvarchar(4000) = ERROR_MESSAGE()
RAISERROR(@ErrorMessage, 16, 1)
END CATCH
GO

View File

@@ -0,0 +1,143 @@
USE [ERPTOOL_JY];
GO
SET NOCOUNT ON;
SET XACT_ABORT ON;
-- 修正三个毛坯物料因取消派工重复/超量退料导致的库存虚增;修改人:Ld 修改时间:2026-08-12 14:48:00;
DECLARE @修改时间 DATETIME = GETDATE();
IF OBJECT_ID(N'dbo.GPT_三个毛坯物料超退修正备份_20260812_出库记录', N'U') IS NULL
BEGIN
SELECT *
INTO dbo.GPT_三个毛坯物料超退修正备份_20260812_出库记录
FROM dbo.库存管理_物料出库_出库记录
WHERE 出库记录流水号 IN (181876, 150374, 191087);
END;
IF OBJECT_ID(N'dbo.GPT_三个毛坯物料超退修正备份_20260812_退料入库记录', N'U') IS NULL
BEGIN
SELECT *
INTO dbo.GPT_三个毛坯物料超退修正备份_20260812_退料入库记录
FROM dbo.库存管理_退料_入库记录
WHERE 入库记录流水号 IN (3903, 3774, 3775, 3779, 3780, 3781);
END;
IF OBJECT_ID(N'dbo.GPT_三个毛坯物料超退修正备份_20260812_库位库存', N'U') IS NULL
BEGIN
SELECT *
INTO dbo.GPT_三个毛坯物料超退修正备份_20260812_库位库存
FROM dbo.库存管理_物料与货位对照表
WHERE 物料与货位流水号 IN (79925, 73361, 89701);
END;
IF OBJECT_ID(N'dbo.GPT_三个毛坯物料超退修正备份_20260812_累计库存', N'U') IS NULL
BEGIN
SELECT *
INTO dbo.GPT_三个毛坯物料超退修正备份_20260812_累计库存
FROM dbo.库存管理_外购件累计库存
WHERE 物料流水号 IN (12350, 3627, 2215);
END;
BEGIN TRY
BEGIN TRANSACTION;
-- 修改人:Ld 修改时间:2026-08-12 14:48:00; 前置校验,避免当前数据已变化时误修正。
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_外购件累计库存 WHERE 物料流水号 = 12350 AND 累计库存 = 537)
RAISERROR(N'01.026.001.0007 当前累计库存不是 537,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_外购件累计库存 WHERE 物料流水号 = 3627 AND 累计库存 = 660)
RAISERROR(N'01.026.001.0030 当前累计库存不是 660,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_外购件累计库存 WHERE 物料流水号 = 2215 AND 累计库存 = 1072)
RAISERROR(N'01.026.001.0043 当前累计库存不是 1072,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_物料与货位对照表 WHERE 物料与货位流水号 = 79925 AND 货位存量 = 500)
RAISERROR(N'01.026.001.0007 异常库位行当前库存不是 500,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_物料与货位对照表 WHERE 物料与货位流水号 = 73361 AND 货位存量 = 636)
RAISERROR(N'01.026.001.0030 异常库位行当前库存不是 636,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_物料与货位对照表 WHERE 物料与货位流水号 = 89701 AND 货位存量 = 900)
RAISERROR(N'01.026.001.0043 异常库位行当前库存不是 900,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_物料出库_出库记录 WHERE 出库记录流水号 = 181876 AND 出库数量 = 6 AND 退料数量 = 500)
RAISERROR(N'出库记录 181876 当前数量不符合预期,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_物料出库_出库记录 WHERE 出库记录流水号 = 150374 AND 出库数量 = 17 AND 退料数量 = 317)
RAISERROR(N'出库记录 150374 当前数量不符合预期,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_物料出库_出库记录 WHERE 出库记录流水号 = 191087 AND 出库数量 = 156 AND 退料数量 = 300)
RAISERROR(N'出库记录 191087 当前数量不符合预期,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_退料_入库记录 WHERE 入库记录流水号 = 3903 AND 实际到货数量 = 500)
RAISERROR(N'退料入库记录 3903 当前数量不符合预期,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_退料_入库记录 WHERE 入库记录流水号 = 3774 AND 实际到货数量 = 317)
RAISERROR(N'退料入库记录 3774 当前数量不符合预期,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_退料_入库记录 WHERE 入库记录流水号 = 3775 AND 实际到货数量 = 317)
RAISERROR(N'退料入库记录 3775 当前数量不符合预期,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_退料_入库记录 WHERE 入库记录流水号 = 3779 AND 实际到货数量 = 300)
RAISERROR(N'退料入库记录 3779 当前数量不符合预期,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_退料_入库记录 WHERE 入库记录流水号 = 3780 AND 实际到货数量 = 300)
RAISERROR(N'退料入库记录 3780 当前数量不符合预期,停止修正。', 16, 1);
IF NOT EXISTS (SELECT 1 FROM dbo.库存管理_退料_入库记录 WHERE 入库记录流水号 = 3781 AND 实际到货数量 = 300)
RAISERROR(N'退料入库记录 3781 当前数量不符合预期,停止修正。', 16, 1);
-- 修改人:Ld 修改时间:2026-08-12 14:48:00; 出库记录退料数量修正为该出库记录实际可退数量。
UPDATE dbo.库存管理_物料出库_出库记录 SET 退料数量 = 6 WHERE 出库记录流水号 = 181876;
UPDATE dbo.库存管理_物料出库_出库记录 SET 退料数量 = 17 WHERE 出库记录流水号 = 150374;
UPDATE dbo.库存管理_物料出库_出库记录 SET 退料数量 = 156 WHERE 出库记录流水号 = 191087;
-- 修改人:Ld 修改时间:2026-08-12 14:48:00; 保留历史退料记录流水号,将重复超退记录数量归零,最后一笔保留正常退料数量。
UPDATE dbo.库存管理_退料_入库记录 SET 实际到货数量 = 6 WHERE 入库记录流水号 = 3903;
UPDATE dbo.库存管理_退料_入库记录 SET 实际到货数量 = 0 WHERE 入库记录流水号 = 3774;
UPDATE dbo.库存管理_退料_入库记录 SET 实际到货数量 = 17 WHERE 入库记录流水号 = 3775;
UPDATE dbo.库存管理_退料_入库记录 SET 实际到货数量 = 0 WHERE 入库记录流水号 = 3779;
UPDATE dbo.库存管理_退料_入库记录 SET 实际到货数量 = 0 WHERE 入库记录流水号 = 3780;
UPDATE dbo.库存管理_退料_入库记录 SET 实际到货数量 = 156 WHERE 入库记录流水号 = 3781;
-- 修改人:Ld 修改时间:2026-08-12 14:48:00; 同步扣减异常虚增库存到毛坯库对应明细行。
UPDATE dbo.库存管理_物料与货位对照表 SET 货位存量 = 6, 操作日期 = @修改时间 WHERE 物料与货位流水号 = 79925;
UPDATE dbo.库存管理_物料与货位对照表 SET 货位存量 = 19, 操作日期 = @修改时间 WHERE 物料与货位流水号 = 73361;
UPDATE dbo.库存管理_物料与货位对照表 SET 货位存量 = 156, 操作日期 = @修改时间 WHERE 物料与货位流水号 = 89701;
-- 修改人:Ld 修改时间:2026-08-12 14:48:00; 累计库存按库位合计的正常库存同步修正。
UPDATE dbo.库存管理_外购件累计库存 SET 累计库存 = 43 WHERE 物料流水号 = 12350;
UPDATE dbo.库存管理_外购件累计库存 SET 累计库存 = 43 WHERE 物料流水号 = 3627;
UPDATE dbo.库存管理_外购件累计库存 SET 累计库存 = 328 WHERE 物料流水号 = 2215;
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
DECLARE @错误信息 NVARCHAR(4000) = ERROR_MESSAGE();
RAISERROR(@错误信息, 16, 1);
END CATCH;
SELECT N'修正后库存' AS 类型,
m.物料编码,
m.物料流水号,
k.累计库存 AS 累计库存,
SUM(d.货位存量) AS 货位库存合计
FROM dbo.库存管理_物料主文件_基本 m
LEFT JOIN dbo.库存管理_外购件累计库存 k ON m.物料流水号 = k.物料流水号
LEFT JOIN dbo.库存管理_物料与货位对照表 d ON m.物料流水号 = d.物料流水号
WHERE m.物料流水号 IN (12350, 3627, 2215)
GROUP BY m.物料编码, m.物料流水号, k.累计库存
ORDER BY m.物料编码;
SELECT N'修正后出库记录' AS 类型,
出库记录流水号,
物料流水号,
出库数量,
退料数量,
订单流水号,
退料时间
FROM dbo.库存管理_物料出库_出库记录
WHERE 出库记录流水号 IN (181876, 150374, 191087)
ORDER BY 出库记录流水号;
SELECT N'修正后退料入库记录' AS 类型,
入库记录流水号,
物料流水号,
实际到货数量,
入库时间,
货位流水号
FROM dbo.库存管理_退料_入库记录
WHERE 入库记录流水号 IN (3903, 3774, 3775, 3779, 3780, 3781)
ORDER BY 入库记录流水号;

View File

@@ -0,0 +1,115 @@
/* 修改人:Ld 修改时间:2026-08-25 17:18:00; 测试库新增出库单展示页面菜单,并跟随已有出库记录权限授权 */
SET XACT_ABORT ON;
BEGIN TRAN;
DECLARE @ModuleId INT;
SELECT @ModuleId = id
FROM dbo.基础表_模块信息
WHERE [path] = N'WarehouseManagement/OutboundOrder'
OR component = N'/WarehouseManagement/OutboundOrder'
OR title = N'出库单';
IF @ModuleId IS NULL
BEGIN
INSERT INTO dbo.基础表_模块信息
(
[path],
component,
redirect,
name,
title,
icon,
是否通知,
消息通知来源,
通知条件,
dashboardIcon,
是否禁用
)
VALUES
(
N'WarehouseManagement/OutboundOrder',
N'/WarehouseManagement/OutboundOrder',
NULL,
N'OutboundOrder',
N'出库单',
N'PurchaseOutRecord',
NULL,
NULL,
NULL,
NULL,
0
);
SET @ModuleId = SCOPE_IDENTITY();
END
ELSE
BEGIN
UPDATE dbo.基础表_模块信息
SET [path] = N'WarehouseManagement/OutboundOrder',
component = N'/WarehouseManagement/OutboundOrder',
redirect = NULL,
name = N'OutboundOrder',
title = N'出库单',
icon = N'PurchaseOutRecord',
是否禁用 = 0
WHERE id = @ModuleId;
END;
;WITH RoleList AS
(
SELECT
r.角色编号,
r.pid,
MAX(r.角色模块顺序) AS 出库记录顺序
FROM dbo.基础表_角色模块信息 r
WHERE r.id = 48
AND ISNULL(r.是否启用, 1) = 1
GROUP BY r.角色编号, r.pid
)
INSERT INTO dbo.基础表_角色模块信息
(
id,
pid,
模块顺序,
角色编号,
是否启用,
角色模块顺序
)
SELECT
@ModuleId,
RoleList.pid,
@ModuleId,
RoleList.角色编号,
1,
ISNULL(RoleOrder.MaxOrder, RoleList.出库记录顺序) + 1
FROM RoleList
OUTER APPLY
(
SELECT MAX(角色模块顺序) AS MaxOrder
FROM dbo.基础表_角色模块信息
WHERE 角色编号 = RoleList.角色编号
AND pid = RoleList.pid
) RoleOrder
WHERE NOT EXISTS
(
SELECT 1
FROM dbo.基础表_角色模块信息
WHERE id = @ModuleId
AND pid = RoleList.pid
AND 角色编号 = RoleList.角色编号
);
SELECT @ModuleId AS 出库单模块ID;
SELECT id, [path], component, name, title, icon, 是否禁用
FROM dbo.基础表_模块信息
WHERE id = @ModuleId;
SELECT r.IDD, r.id, r.pid, r.角色编号, r.是否启用, r.角色模块顺序, m.title, m.component
FROM dbo.基础表_角色模块信息 r
INNER JOIN dbo.基础表_模块信息 m ON r.id = m.id
WHERE r.id = @ModuleId
ORDER BY r.角色编号, r.pid, r.角色模块顺序;
COMMIT TRAN;

View File

@@ -232,7 +232,9 @@ ALTER PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
@审核整修开始时间 DATETIME = NULL,
@审核整修结束时间 DATETIME = NULL,
@审核整修方案 NVARCHAR(1000) = NULL,
@计价方式 NVARCHAR(20) = NULL
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 传入角色编号以支持系统管理员重审已审核记录
@计价方式 NVARCHAR(20) = NULL,
@角色编号 INT = NULL
AS
BEGIN
SET NOCOUNT ON;
@@ -258,6 +260,8 @@ BEGIN
DECLARE @单时工价 DECIMAL(18, 4);
DECLARE @是否修改加工 BIT = 0;
DECLARE @是否修改整修 BIT = 0;
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 系统管理员可对已审核记录再次提交修改
DECLARE @是否管理员重审 BIT = CASE WHEN ISNULL(@角色编号, 0) = 2 THEN 1 ELSE 0 END;
DECLARE @是否本过程开启事务 BIT;
SET @目标审核状态 = CASE WHEN @审核状态 IN (N'审核通过', N'已审核') THEN N'已审核' ELSE @审核状态 END;
@@ -272,7 +276,8 @@ BEGIN
SELECT 1
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核'
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 管理员重审时允许命中已审核记录
AND (审核状态 = N'待审核' OR (@是否管理员重审 = 1 AND 审核状态 = N'已审核'))
)
BEGIN
SELECT N'0' AS result, N'该审核记录不存在或已审核' AS message;
@@ -292,7 +297,8 @@ BEGIN
@单时工价 = ISNULL(单时工价, 0)
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核';
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 管理员重审时允许读取已审核记录
AND (审核状态 = N'待审核' OR (@是否管理员重审 = 1 AND 审核状态 = N'已审核'));
IF @Safe计价方式 NOT IN (N'计件', N'计时')
SET @Safe计价方式 = N'计件';
@@ -451,7 +457,8 @@ BEGIN
[修改人] = N'Ld',
[修改时间] = GETDATE()
WHERE [id] = @审核流水号
AND [审核状态] = N'待审核';
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 管理员重审时允许更新已审核记录
AND ([审核状态] = N'待审核' OR (@是否管理员重审 = 1 AND [审核状态] = N'已审核'));
IF @是否本过程开启事务 = 1
COMMIT TRAN;

View File

@@ -0,0 +1,314 @@
/*
用途:修改 dbo.物料管理_增加_批量,根据物料编码前两位写入物料类型,并修正现有物料类型。
规则:01毛坯,02自制,03采购,04原材料,05耗材,06设备,07质检,08半成品,09模具,10成品。
备份:执行前备份原存储过程定义、物料类型基础表、物料主文件全表快照。
修改人:Ld 修改时间:2026-09-03 13:47:51;
*/
SET NOCOUNT ON;
SET XACT_ABORT ON;
BEGIN TRY
BEGIN TRAN;
IF OBJECT_ID(N'dbo.GPT备份_物料管理_增加_批量_过程_20260903_134751', N'U') IS NULL
BEGIN
SELECT
DB_NAME() AS 数据库名,
SCHEMA_NAME(o.schema_id) AS 架构名,
o.name AS 过程名,
m.definition AS 过程定义,
GETDATE() AS 备份时间,
N'修改人:Ld 修改时间:2026-09-03 13:47:51; 物料管理_增加_批量修改前过程定义备份' AS 备份说明
INTO dbo.GPT备份_物料管理_增加_批量_过程_20260903_134751
FROM sys.objects o
INNER JOIN sys.sql_modules m ON o.object_id = m.object_id
WHERE o.type = 'P'
AND o.object_id = OBJECT_ID(N'dbo.物料管理_增加_批量');
END
IF OBJECT_ID(N'dbo.GPT备份_物料类型_基础表_20260903_134751', N'U') IS NULL
BEGIN
SELECT
*,
GETDATE() AS 备份时间,
N'修改人:Ld 修改时间:2026-09-03 13:47:51; 物料类型基础表修改前备份' AS 备份说明
INTO dbo.GPT备份_物料类型_基础表_20260903_134751
FROM dbo.物料类型_基础表;
END
IF OBJECT_ID(N'dbo.GPT备份_库存管理_物料主文件_基本_20260903_134751', N'U') IS NULL
BEGIN
SELECT
*,
GETDATE() AS 备份时间,
N'修改人:Ld 修改时间:2026-09-03 13:47:51; 按物料编码前两位修正类型前全表备份' AS 备份说明
INTO dbo.GPT备份_库存管理_物料主文件_基本_20260903_134751
FROM dbo.库存管理_物料主文件_基本;
END
UPDATE t
SET t.类型 = v.类型
FROM dbo.物料类型_基础表 t
INNER JOIN (VALUES
(1, N'毛坯'),
(2, N'自制'),
(3, N'采购'),
(4, N'原材料'),
(5, N'耗材'),
(6, N'设备'),
(7, N'质检'),
(8, N'半成品'),
(9, N'模具'),
(10, N'成品')
) v(类型流水号, 类型) ON t.类型流水号 = v.类型流水号; -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 同步编码前缀对应的物料类型名称。
INSERT INTO dbo.物料类型_基础表(类型流水号, 类型)
SELECT v.类型流水号, v.类型
FROM (VALUES
(1, N'毛坯'),
(2, N'自制'),
(3, N'采购'),
(4, N'原材料'),
(5, N'耗材'),
(6, N'设备'),
(7, N'质检'),
(8, N'半成品'),
(9, N'模具'),
(10, N'成品')
) v(类型流水号, 类型)
WHERE NOT EXISTS (
SELECT 1
FROM dbo.物料类型_基础表 t
WHERE t.类型流水号 = v.类型流水号
); -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 补齐编码前缀对应的物料类型字典。
UPDATE m
SET m.类型 = r.规则类型,
m.修改日期 = GETDATE()
FROM dbo.库存管理_物料主文件_基本 m
CROSS APPLY (
SELECT CASE LEFT(LTRIM(RTRIM(ISNULL(m.物料编码, N''))), 2)
WHEN N'01' THEN 1
WHEN N'02' THEN 2
WHEN N'03' THEN 3
WHEN N'04' THEN 4
WHEN N'05' THEN 5
WHEN N'06' THEN 6
WHEN N'07' THEN 7
WHEN N'08' THEN 8
WHEN N'09' THEN 9
WHEN N'10' THEN 10
END AS 规则类型
) r
WHERE r.规则类型 IS NOT NULL
AND ISNULL(m.类型, -1) <> r.规则类型; -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 按物料编码前两位回写现有物料类型。
COMMIT TRAN;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN;
DECLARE @错误消息 nvarchar(4000);
DECLARE @错误严重级别 int;
DECLARE @错误状态 int;
SELECT
@错误消息 = ERROR_MESSAGE(),
@错误严重级别 = ERROR_SEVERITY(),
@错误状态 = ERROR_STATE();
RAISERROR(@错误消息, @错误严重级别, @错误状态); -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 兼容当前 SQL Server 版本的异常抛出方式。
END CATCH;
GO
ALTER PROCEDURE [dbo].[物料管理_增加_批量]
@材料 nvarchar(50)=null,
@货位 nvarchar(50)=null,
@单位 nvarchar(50)=null,
@类型 nvarchar(50)=null,
@物料名称 nvarchar(50)=null,
@图号 nvarchar(50)=null,
@物料说明 nvarchar(MAX)=null,
@物料库 nvarchar(50) =null,
@人员编号 int = null,
@曾用物料编码 nvarchar(50) = null,
@物料编码 nvarchar(50) = null,
@规格 nvarchar(50) = null,
@创建时间 DATETIME = NULL
AS
DECLARE @物料流水号 INT
DECLARE @材料流水号 INT
DECLARE @货位流水号 INT
DECLARE @单位流水号 INT
DECLARE @类型流水号 INT
DECLARE @物料库流水号 INT
DECLARE @物料编码前缀 nvarchar(2) -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 用物料编码前两位判断物料类型。
--DECLARE @物料编码1 nvarchar(50) = null
--DECLARE @物料编码2 nvarchar(50) = null
SET @物料编码前缀 = LEFT(LTRIM(RTRIM(ISNULL(@物料编码, N''))), 2) -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 统一取物料编码前缀。
SET @类型流水号 = CASE @物料编码前缀 -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 01毛坯、02自制、03采购、04原材料、05耗材、06设备、07质检、08半成品、09模具、10成品。
WHEN N'01' THEN 1
WHEN N'02' THEN 2
WHEN N'03' THEN 3
WHEN N'04' THEN 4
WHEN N'05' THEN 5
WHEN N'06' THEN 6
WHEN N'07' THEN 7
WHEN N'08' THEN 8
WHEN N'09' THEN 9
WHEN N'10' THEN 10
END
IF @类型流水号 IS NULL
BEGIN
IF @类型 = N'自制'
BEGIN
SET @类型流水号 = 2
END
ELSE
BEGIN
SET @类型流水号 = 1
END
END
IF @曾用物料编码 IS NOT NULL AND @曾用物料编码 <> ''
BEGIN
-- 检查是否存在物料编码 = @曾用物料编码 的记录
IF EXISTS (SELECT 1 FROM 库存管理_物料主文件_基本 WHERE 物料编码 = @曾用物料编码)
BEGIN
-- 更新该记录的物料编码为新编码,同时记录曾用物料编码(可选,也可以将旧编码存入曾用物料编码列)
UPDATE 库存管理_物料主文件_基本
SET 物料编码 = @物料编码,
类型 = @类型流水号, -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 编码变更时同步按新编码前两位更新物料类型。
曾用物料编码 = @曾用物料编码, -- 将旧编码存入曾用物料编码字段,便于追溯
修改人 = @人员编号,
修改日期 = GETDATE()
WHERE 物料编码 = @曾用物料编码;
-- 注意:如果同一个物料编码出现在多个表中(如库存表),可能需要同步更新,此处仅更新主文件
-- 如果有需要,也可以更新 库存管理_物料与货位对照表 或 库存管理_外购件累计库存 中的关联字段(通常不需要,因为流水号不变)
PRINT '物料编码更新成功:' + @曾用物料编码 + ' -> ' + @物料编码;
RETURN; -- 更新完成后直接退出,不再执行后面的新增逻辑
END
ELSE
BEGIN
-- 如果曾用物料编码不存在,可以报错或者继续执行新增逻辑,这里选择报错
RAISERROR('曾用物料编码 %s 在系统中不存在,无法更新。', 16, 1, @曾用物料编码);
RETURN;
END
END
--获得材料流水号
select @材料流水号 = 材料流水号 from dbo.PDM_零件明细表_材料
where 材料=@材料
if @材料流水号 is null
begin
insert into PDM_零件明细表_材料(材料,操作日期) values (@材料,getdate())
set @材料流水号=IDENT_CURRENT('PDM_零件明细表_材料')
end
--获得货位流水号
select @货位流水号 = 货位流水号 from dbo.库存管理_货位主文件
where 货位名称=@货位
if @货位流水号 is null
begin
set @货位流水号 = 2514
end
--获得单位流水号
select @单位流水号 = 单位流水号 from dbo.单位名称_基础表
where 单位=@单位
if @单位流水号 is null
begin
set @单位流水号 = 1
end
--获得物料库流水号
if @物料库 = '通用'
begin
set @物料库流水号 = 1
end
else
begin
set @物料库流水号 = 2
end
IF EXISTS (SELECT 1 FROM 库存管理_物料主文件_基本 WHERE 物料编码 = @物料编码)
BEGIN
-- 存在则更新(覆盖)
UPDATE 库存管理_物料主文件_基本
SET 名称 = @物料名称,
代号 = @图号,
单位流水号 = @单位流水号,
材料流水号 = @材料流水号,
类型 = @类型流水号,
货位流水号 = @货位流水号,
物料库流水号 = @物料库流水号,
修改人 = @人员编号,
修改日期 = GETDATE(),
物料说明 = @物料说明,
规格 = @规格,
曾用物料编码 = ISNULL(曾用物料编码, @曾用物料编码) -- 保留原有曾用编码,如果没有则设置
WHERE 物料编码 = @物料编码;
-- 获取流水号用于更新关联表
SELECT @物料流水号 = 物料流水号 FROM 库存管理_物料主文件_基本 WHERE 物料编码 = @物料编码;
PRINT '物料编码 ' + @物料编码 + ' 已存在,已执行覆盖更新。';
END
ELSE
BEGIN
--select @物料编码2 = 'LJ'+ right(cast(power(10,8) as varchar) + (SUBSTRING((select 物料编码 from 库存管理_物料主文件_基本 WHERE 物料流水号 = (select Max(物料流水号) from 库存管理_物料主文件_基本)),3,8) + 1),8)
insert into 库存管理_物料主文件_基本(名称,代号,单位流水号,材料流水号,类型,物料编码,货位流水号,物料库流水号,修改人,修改日期,物料说明,曾用物料编码,规格,创建人)
values(@物料名称,@图号,@单位流水号,@材料流水号,@类型流水号,@物料编码,@货位流水号,@物料库流水号,@人员编号,GETDATE(),@物料说明,@曾用物料编码,@规格,@人员编号)
set @物料流水号 = IDENT_CURRENT(N'库存管理_物料主文件_基本')
insert into 库存管理_物料与货位对照表(物料流水号,货位存量,货位流水号)values(@物料流水号,0,@货位流水号)
insert into 库存管理_外购件累计库存(物料流水号,累计库存)values(@物料流水号,0)
END
GO
SET NOCOUNT ON;
SELECT N'物料类型字典' AS 检查项, 类型流水号, 类型
FROM dbo.物料类型_基础表
WHERE 类型流水号 BETWEEN 1 AND 10
ORDER BY 类型流水号;
WITH R AS (
SELECT
LEFT(LTRIM(RTRIM(ISNULL(物料编码, N''))), 2) AS 前两位,
类型,
CASE LEFT(LTRIM(RTRIM(ISNULL(物料编码, N''))), 2)
WHEN N'01' THEN 1
WHEN N'02' THEN 2
WHEN N'03' THEN 3
WHEN N'04' THEN 4
WHEN N'05' THEN 5
WHEN N'06' THEN 6
WHEN N'07' THEN 7
WHEN N'08' THEN 8
WHEN N'09' THEN 9
WHEN N'10' THEN 10
END AS 规则类型
FROM dbo.库存管理_物料主文件_基本
)
SELECT
前两位,
规则类型,
COUNT(*) AS 总数,
SUM(CASE WHEN ISNULL(类型, -1) <> 规则类型 THEN 1 ELSE 0 END) AS 未匹配数量
FROM R
WHERE 规则类型 IS NOT NULL
GROUP BY 前两位, 规则类型
ORDER BY 前两位;
SELECT
OBJECT_ID(N'dbo.GPT备份_物料管理_增加_批量_过程_20260903_134751', N'U') AS 过程备份表ID,
OBJECT_ID(N'dbo.GPT备份_物料类型_基础表_20260903_134751', N'U') AS 类型备份表ID,
OBJECT_ID(N'dbo.GPT备份_库存管理_物料主文件_基本_20260903_134751', N'U') AS 物料备份表ID;

View File

@@ -0,0 +1,85 @@
/*
用途:回滚 2026-09-03 13:47:51 物料类型按物料编码前缀修正。
说明:请在需要回滚的数据库中执行,本脚本依赖同库备份表:
1. dbo.GPT备份_物料管理_增加_批量_过程_20260903_134751
2. dbo.GPT备份_物料类型_基础表_20260903_134751
3. dbo.GPT备份_库存管理_物料主文件_基本_20260903_134751
修改人:Ld 修改时间:2026-09-03 13:47:51;
*/
SET NOCOUNT ON;
SET XACT_ABORT ON;
IF OBJECT_ID(N'dbo.GPT备份_物料管理_增加_批量_过程_20260903_134751', N'U') IS NULL
OR OBJECT_ID(N'dbo.GPT备份_物料类型_基础表_20260903_134751', N'U') IS NULL
OR OBJECT_ID(N'dbo.GPT备份_库存管理_物料主文件_基本_20260903_134751', N'U') IS NULL
BEGIN
RAISERROR(N'缺少本次变更备份表,无法自动回滚。', 16, 1);
RETURN;
END
BEGIN TRY
BEGIN TRAN;
UPDATE m
SET m.类型 = b.类型,
m.修改日期 = b.修改日期
FROM dbo.库存管理_物料主文件_基本 m
INNER JOIN dbo.GPT备份_库存管理_物料主文件_基本_20260903_134751 b
ON m.物料流水号 = b.物料流水号
WHERE ISNULL(m.类型, -1) <> ISNULL(b.类型, -1); -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 使用备份恢复物料主文件类型。
DELETE t
FROM dbo.物料类型_基础表 t
WHERE NOT EXISTS (
SELECT 1
FROM dbo.GPT备份_物料类型_基础表_20260903_134751 b
WHERE b.类型流水号 = t.类型流水号
); -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 删除本次新增的类型字典行。
UPDATE t
SET t.类型 = b.类型
FROM dbo.物料类型_基础表 t
INNER JOIN dbo.GPT备份_物料类型_基础表_20260903_134751 b
ON t.类型流水号 = b.类型流水号; -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 恢复原类型字典名称。
COMMIT TRAN;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRAN;
DECLARE @错误消息 nvarchar(4000);
DECLARE @错误严重级别 int;
DECLARE @错误状态 int;
SELECT
@错误消息 = ERROR_MESSAGE(),
@错误严重级别 = ERROR_SEVERITY(),
@错误状态 = ERROR_STATE();
RAISERROR(@错误消息, @错误严重级别, @错误状态); -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 兼容当前 SQL Server 版本的异常抛出方式。
END CATCH;
GO
DECLARE @过程定义 nvarchar(max);
SELECT TOP 1 @过程定义 = 过程定义
FROM dbo.GPT备份_物料管理_增加_批量_过程_20260903_134751
ORDER BY 备份时间 DESC;
IF @过程定义 IS NULL
BEGIN
RAISERROR(N'未找到原存储过程定义,无法恢复过程。', 16, 1);
RETURN;
END
SET @过程定义 = REPLACE(@过程定义, N'CREATE PROCEDURE', N'ALTER PROCEDURE');
SET @过程定义 = REPLACE(@过程定义, N'CREATE PROCEDURE', N'ALTER PROCEDURE');
SET @过程定义 = REPLACE(@过程定义, N'CREATE PROCEDURE', N'ALTER PROCEDURE');
SET @过程定义 = REPLACE(@过程定义, N'CREATE PROCEDURE', N'ALTER PROCEDURE');
SET @过程定义 = REPLACE(@过程定义, N'CREATE PROC', N'ALTER PROC');
EXEC sp_executesql @过程定义; -- 修改人:Ld 修改时间:2026-09-03 13:47:51; 使用备份定义恢复存储过程。
GO
SELECT N'回滚检查-类型字典' AS 检查项, 类型流水号, 类型
FROM dbo.物料类型_基础表
ORDER BY 类型流水号;

View File

@@ -0,0 +1,89 @@
/*
用途:安全修正物料标准维护页面的类型名称显示。
设计:不改变 dbo.物料视图 的字段名和主要关联结构,不新增 dbo.物料类型_基础表 关联,仅将原 CASE 扩展为 1-10 类型。
规则:1毛坯、2自制、3采购、4原材料、5耗材、6设备、7质检、8半成品、9模具、10成品。
修改人:Ld 修改时间:2026-09-03 14:18:27;
*/
SET NOCOUNT ON;
IF OBJECT_ID(N'dbo.GPT备份_物料视图_CASE安全版前_20260903_141827', N'U') IS NULL
BEGIN
SELECT
DB_NAME() AS 数据库名,
OBJECT_SCHEMA_NAME(object_id) AS 架构名,
name AS 对象名,
type_desc AS 对象类型,
OBJECT_DEFINITION(object_id) AS 对象定义,
GETDATE() AS 备份时间,
N'修改人:Ld 修改时间:2026-09-03 14:18:27; 物料视图改为CASE安全版前备份' AS 备份说明
INTO dbo.GPT备份_物料视图_CASE安全版前_20260903_141827
FROM sys.objects
WHERE object_id = OBJECT_ID(N'dbo.物料视图');
END
GO
ALTER VIEW dbo.物料视图
AS
SELECT dbo.库存管理_物料主文件_基本.名称, dbo.库存管理_物料主文件_基本.代号, dbo.PDM_零件明细表_材料.材料,
dbo.单位名称_基础表.单位, CONVERT(varchar(10), dbo.库存管理_物料主文件_基本.修改日期, 23) AS 修改日期,
dbo.人事档案管理_人员名单.姓名 AS 修改人, dbo.库存管理_物料主文件_基本.物料流水号,
dbo.库存管理_物料主文件_基本.是否禁用, dbo.库存管理_物料主文件_基本.类型,
CASE dbo.库存管理_物料主文件_基本.类型
WHEN 1 THEN N'毛坯'
WHEN 2 THEN N'自制'
WHEN 3 THEN N'采购'
WHEN 4 THEN N'原材料'
WHEN 5 THEN N'耗材'
WHEN 6 THEN N'设备'
WHEN 7 THEN N'质检'
WHEN 8 THEN N'半成品'
WHEN 9 THEN N'模具'
WHEN 10 THEN N'成品'
END AS 类型名称, -- 修改人:Ld 修改时间:2026-09-03 14:18:27; 原位置扩展CASE类型名称,避免新增JOIN影响页面。
dbo.库存管理_物料主文件_基本.操作日期,
dbo.库存管理_物料主文件_基本.材料流水号, dbo.库存管理_物料主文件_基本.单位流水号,
dbo.库存管理_物料主文件_基本.物料编码, dbo.库存管理_物料_图片.文件后缀, dbo.库存管理_物料_图片.是否启用,
dbo.库存管理_物料_图片.文件内容, dbo.库存管理_物料主文件_基本.货位流水号,
dbo.库存管理_货位主文件.货位名称 AS 库位, dbo.库存管理_物料主文件_基本.物料库流水号,
dbo.物料库_基础表.物料类型, dbo.库存管理_物料主文件_基本.物料说明,
dbo.库存管理_物料主文件_基本.曾用物料编码, dbo.库存管理_物料主文件_基本.规格, ISNULL(creator.姓名,
dbo.库存管理_物料主文件_基本.创建人) AS Expr1, dbo.库存管理_物料主文件_基本.最高库存,
dbo.库存管理_物料主文件_基本.安全库存, dbo.库存管理_物料主文件_基本.最低库存
FROM dbo.库存管理_物料主文件_基本 LEFT OUTER JOIN
dbo.物料库_基础表 ON
dbo.库存管理_物料主文件_基本.物料库流水号 = dbo.物料库_基础表.物料库流水号 LEFT OUTER JOIN
dbo.库存管理_货位主文件 ON
dbo.库存管理_物料主文件_基本.货位流水号 = dbo.库存管理_货位主文件.货位流水号 LEFT OUTER JOIN
dbo.库存管理_物料_图片 ON
dbo.库存管理_物料主文件_基本.物料流水号 = dbo.库存管理_物料_图片.物料流水号 LEFT OUTER JOIN
dbo.PDM_零件明细表_材料 ON
dbo.库存管理_物料主文件_基本.材料流水号 = dbo.PDM_零件明细表_材料.材料流水号 LEFT OUTER JOIN
dbo.单位名称_基础表 ON
dbo.库存管理_物料主文件_基本.单位流水号 = dbo.单位名称_基础表.单位流水号 LEFT OUTER JOIN
dbo.人事档案管理_人员名单 ON
dbo.库存管理_物料主文件_基本.修改人 = dbo.人事档案管理_人员名单.人员编号 LEFT OUTER JOIN
dbo.人事档案管理_人员名单 AS creator ON dbo.库存管理_物料主文件_基本.创建人 = creator.人员编号
GO
SELECT TOP 20
物料编码,
名称,
类型,
类型名称,
物料类型
FROM dbo.物料视图
WHERE LEFT(LTRIM(RTRIM(ISNULL(物料编码, N''))), 2) IN (N'01', N'02', N'03', N'04', N'05', N'06', N'07', N'08', N'09', N'10')
ORDER BY 物料编码;
DECLARE @PageCount int;
DECLARE @ItemCount int;
EXEC dbo.物料管理_查询数据_分页
@PageCurrent = 1,
@PageSize = 20,
@PageCount = @PageCount OUTPUT,
@ItemCount = @ItemCount OUTPUT;
SELECT @PageCount AS PageCount, @ItemCount AS ItemCount;
SELECT OBJECT_ID(N'dbo.GPT备份_物料视图_CASE安全版前_20260903_141827', N'U') AS CASE安全版前备份表ID;

View File

@@ -0,0 +1,33 @@
/*
用途:回滚 2026-09-03 14:18:27 物料视图类型名称 CASE 安全版修正。
说明:请在需要回滚的数据库中执行,本脚本依赖同库备份表 dbo.GPT备份_物料视图_CASE安全版前_20260903_141827。
修改人:Ld 修改时间:2026-09-03 14:18:27;
*/
SET NOCOUNT ON;
IF OBJECT_ID(N'dbo.GPT备份_物料视图_CASE安全版前_20260903_141827', N'U') IS NULL
BEGIN
RAISERROR(N'缺少物料视图 CASE 安全版前备份表,无法自动回滚。', 16, 1);
RETURN;
END
DECLARE @视图定义 nvarchar(max);
SELECT TOP 1 @视图定义 = 对象定义
FROM dbo.GPT备份_物料视图_CASE安全版前_20260903_141827
ORDER BY 备份时间 DESC;
IF @视图定义 IS NULL
BEGIN
RAISERROR(N'未找到备份的物料视图定义,无法恢复视图。', 16, 1);
RETURN;
END
SET @视图定义 = REPLACE(@视图定义, N'CREATE VIEW', N'ALTER VIEW');
EXEC sp_executesql @视图定义; -- 修改人:Ld 修改时间:2026-09-03 14:18:27; 使用安全版前备份恢复物料视图。
GO
SELECT TOP 20 物料编码, 名称, 类型, 类型名称, 物料类型
FROM dbo.物料视图
ORDER BY 物料编码;

View File

@@ -10,7 +10,9 @@ ALTER PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
@审核整修开始时间 DATETIME = NULL,
@审核整修结束时间 DATETIME = NULL,
@审核整修方案 NVARCHAR(1000) = NULL,
@计价方式 NVARCHAR(20) = NULL
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 传入角色编号以支持系统管理员重审已审核记录
@计价方式 NVARCHAR(20) = NULL,
@角色编号 INT = NULL
AS
BEGIN
SET NOCOUNT ON;
@@ -36,6 +38,8 @@ BEGIN
DECLARE @单时工价 DECIMAL(18, 4);
DECLARE @是否修改加工 BIT = 0;
DECLARE @是否修改整修 BIT = 0;
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 系统管理员可对已审核记录再次提交修改
DECLARE @是否管理员重审 BIT = CASE WHEN ISNULL(@角色编号, 0) = 2 THEN 1 ELSE 0 END;
DECLARE @是否本过程开启事务 BIT;
SET @目标审核状态 = CASE WHEN @审核状态 IN (N'审核通过', N'已审核') THEN N'已审核' ELSE @审核状态 END;
@@ -50,7 +54,8 @@ BEGIN
SELECT 1
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核'
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 管理员重审时允许命中已审核记录
AND (审核状态 = N'待审核' OR (@是否管理员重审 = 1 AND 审核状态 = N'已审核'))
)
BEGIN
SELECT N'0' AS result, N'该审核记录不存在或已审核' AS message;
@@ -70,7 +75,8 @@ BEGIN
@单时工价 = ISNULL(单时工价, 0)
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核';
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 管理员重审时允许读取已审核记录
AND (审核状态 = N'待审核' OR (@是否管理员重审 = 1 AND 审核状态 = N'已审核'));
IF @Safe计价方式 NOT IN (N'计件', N'计时')
SET @Safe计价方式 = N'计件';
@@ -229,7 +235,8 @@ BEGIN
[修改人] = N'Ld',
[修改时间] = GETDATE()
WHERE [id] = @审核流水号
AND [审核状态] = N'待审核';
-- 修改人:Ld 修改时间:2026-08-20 13:20:11; 管理员重审时允许更新已审核记录
AND ([审核状态] = N'待审核' OR (@是否管理员重审 = 1 AND [审核状态] = N'已审核'));
IF @是否本过程开启事务 = 1
COMMIT TRAN;

View File

@@ -0,0 +1,147 @@
-- 生产计划后端开发测试库脚本;修改人:Ld 修改时间:2026-08-20 13:24:00;
USE [ERPTOOL_JY_20250826Back];
GO
/* 修改人:Ld 修改时间:2026-08-20 13:24:00; 工况查询增加计划开始时间字段,保留原有返回字段,兼容现有前端。 */
ALTER PROCEDURE [dbo].[精工车间_工况_分页查询]
@人员编号 int = null,
@人员编号_check int = null,
@设备流水号 nvarchar(50) = null,
@设备流水号_check int = null,
@零件名称_check int = null,
@零件名称 nvarchar(50) = null,
@排序名称 int = null,
@排序方式 int = null,
@时间_check bit = null,
@开始时间 datetime = null,
@结束时间 datetime = null,
@PageCurrent int = 1,
@PageSize int = 20,
@PageCount int OUTPUT,
@ItemCount int OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @selectStrWhere nvarchar(4000);
SET @selectStrWhere = N'数量 > 完成数';
IF (@人员编号_check = 1)
SET @selectStrWhere += N' AND 人员编号 = ' + CONVERT(nvarchar(20), @人员编号);
IF (@设备流水号_check = 1 AND ISNULL(@设备流水号, N'') <> N'')
SET @selectStrWhere += N' AND 设备 LIKE N''%' + REPLACE(@设备流水号, N'''', N'''''') + N'%''';
IF (@零件名称_check = 1 AND ISNULL(@零件名称, N'') <> N'')
SET @selectStrWhere += N' AND 零件名称 LIKE N''%' + REPLACE(@零件名称, N'''', N'''''') + N'%''';
IF (@时间_check = 1)
SET @selectStrWhere += N' AND 分配时间 >= ''' + CONVERT(nvarchar(30), @开始时间, 120) + N''' AND 分配时间 <= ''' + CONVERT(nvarchar(30), @结束时间, 120) + N'''';
DECLARE @fieldOrder nvarchar(1000);
IF (@排序名称 = 1)
SET @fieldOrder = CASE WHEN @排序方式 = 1 THEN N'零件名称 DESC' ELSE N'零件名称 ASC' END;
ELSE IF (@排序名称 = 2)
SET @fieldOrder = CASE WHEN @排序方式 = 1 THEN N'工序 DESC' ELSE N'工序 ASC' END;
ELSE IF (@排序名称 = 3)
SET @fieldOrder = CASE WHEN @排序方式 = 1 THEN N'姓名 DESC' ELSE N'姓名 ASC' END;
ELSE IF (@排序名称 = 4)
SET @fieldOrder = CASE WHEN @排序方式 = 1 THEN N'设备 DESC' ELSE N'设备 ASC' END;
ELSE
SET @fieldOrder = N'分配时间 DESC';
EXEC sp_xt_pagesplit
N'车间生产管理工艺_零件工序_已派工_视图',
N'工艺任务流水号',
@selectStrWhere,
N'[工艺任务流水号], [工序顺序], [数量], [姓名], [设备], [分配时间], [计划开始日期] AS [计划开始时间], [工艺计划流水号], [工序], [工序流水号], [人员编号], [设备流水号], [完成数], [是否加工中], [零件图号], [零件名称], [订单号], [精工期限], [报废数量], [工序状态], [加工开始时间], [加工完成时间]',
@fieldOrder,
N'',
@PageCurrent,
@PageSize,
@PageCount OUTPUT,
@ItemCount OUTPUT;
END;
GO
/* 修改人:Ld 修改时间:2026-08-20 13:24:00; 新增设备门牌队列查询,按设备返回当前任务、下一项任务和后续队列。 */
CREATE OR ALTER PROCEDURE [dbo].[车间生产管理_设备门牌看板_查询数据]
@设备流水号 nvarchar(50) = NULL,
@设备流水号_check bit = 0,
@仅未完成 bit = 1
AS
BEGIN
SET NOCOUNT ON;
;WITH BaseTask AS (
SELECT
v.工艺任务流水号,
v.工艺计划流水号,
v.工序流水号,
v.设备流水号,
v.设备,
v.姓名,
v.订单号,
v.零件名称,
v.零件图号,
v.工序顺序,
v.工序,
v.数量,
v.完成数,
v.是否加工中,
v.工序状态,
v.分配时间,
v.计划开始日期 AS 计划开始时间,
v.精工期限,
v.加工开始时间,
v.加工完成时间,
ROW_NUMBER() OVER (
PARTITION BY v.设备流水号
ORDER BY
CASE WHEN ISNULL(v.是否加工中, 0) = 1 THEN 0 ELSE 1 END,
ISNULL(v.计划开始日期, TRY_CONVERT(datetime, v.分配时间)),
ISNULL(v.精工期限, N'9999-12-31'),
v.工序顺序,
v.工艺任务流水号
) AS 设备队列序号,
COUNT(1) OVER (PARTITION BY v.设备流水号) AS 后续任务数
FROM dbo.车间生产管理工艺_零件工序_已派工_视图 v
WHERE (@仅未完成 = 0 OR ISNULL(v.数量, 0) > ISNULL(v.完成数, 0))
AND (@设备流水号_check = 0 OR CONVERT(nvarchar(50), v.设备流水号) LIKE N'%' + ISNULL(@设备流水号, N'') + N'%')
)
SELECT
工艺任务流水号,
工艺计划流水号,
工序流水号,
设备流水号,
设备,
姓名,
订单号,
零件名称,
零件图号,
工序顺序,
工序,
数量,
完成数,
是否加工中,
工序状态,
分配时间,
计划开始时间,
精工期限,
加工开始时间,
加工完成时间,
设备队列序号,
后续任务数,
CASE
WHEN 设备队列序号 = 1 AND ISNULL(是否加工中, 0) = 1 THEN N'生产中'
WHEN 设备队列序号 = 1 THEN N'下一项'
ELSE N'排队中'
END AS 门牌状态,
CASE WHEN 设备队列序号 = 1 THEN 1 ELSE 0 END AS 是否当前任务,
CASE WHEN 设备队列序号 = 2 THEN 1 ELSE 0 END AS 是否下一任务
FROM BaseTask
ORDER BY 设备流水号, 设备队列序号;
END;
GO
-- 修改人:Ld 修改时间:2026-08-20 13:24:00;

View File

@@ -0,0 +1,232 @@
-- 生产计划查询补充销售合同计划字段测试库脚本;修改人:Ld 修改时间:2026-09-10 08:34:52;
USE [ERPTOOL_JY_20250826Back];
GO
/* 修改人:Ld 修改时间:2026-09-10 08:34:52; 生产计划查询返回部件名称和买方名称,供销售合同计划展示使用。 */
ALTER PROCEDURE [dbo].[车间生产管理_生产计划_查询数据]
@合同编号_check bit = null,
@合同编号 nvarchar(50) = null,
@零件名称_check bit = null,
@零件名称 nvarchar(50) = null,
@产品名称_check bit = null,
@产品名称 nvarchar(50) = null,
@状态_check bit = null,
@状态 nvarchar(50) = null,
@月份 nvarchar(50) = '2026-5'
AS
BEGIN
SET NOCOUNT ON;
DECLARE @年 nvarchar(50);
DECLARE @月 nvarchar(50);
DECLARE @selectStr nvarchar(MAX);
DECLARE @selectStrWhere nvarchar(MAX);
IF CHARINDEX('-', @月份) > 0
BEGIN
SET @年 = LEFT(@月份, CHARINDEX('-', @月份) - 1);
SET @月 = SUBSTRING(@月份, CHARINDEX('-', @月份) + 1, LEN(@月份) - CHARINDEX('-', @月份));
END
ELSE
BEGIN
SET @年 = LEFT(@月份, 4);
SET @月 = RIGHT(@月份, 2);
END;
SELECT TOP (0) *
INTO #生产计划
FROM dbo.车间生产管理_生产计划_视图_新;
SET @selectStr = N'INSERT INTO #生产计划 SELECT * FROM dbo.车间生产管理_生产计划_视图_新 ';
SET @selectStrWhere = N' WHERE 年 = @年 AND 月 = @月 ';
IF (@零件名称_check = 1 AND ISNULL(@零件名称, N'') <> N'')
SET @selectStrWhere += N' AND (零件名称 + ISNULL(零件图号, N'''')) LIKE N''%'' + @零件名称 + N''%'' ';
IF (@合同编号_check = 1 AND ISNULL(@合同编号, N'') <> N'')
SET @selectStrWhere += N' AND 订单号 LIKE N''%'' + @合同编号 + N''%'' ';
IF (@产品名称_check = 1 AND ISNULL(@产品名称, N'') <> N'')
SET @selectStrWhere += N' AND 产品名称 LIKE N''%'' + @产品名称 + N''%'' ';
IF (@状态_check = 1 AND ISNULL(@状态, N'') <> N'')
SET @selectStrWhere += N' AND 状态 LIKE N''%'' + @状态 + N''%'' ';
SET @selectStr += @selectStrWhere + N';';
EXEC sp_executesql
@selectStr,
N'@零件名称 nvarchar(50), @合同编号 nvarchar(50), @产品名称 nvarchar(50), @状态 nvarchar(50), @年 nvarchar(50), @月 nvarchar(50)',
@零件名称 = @零件名称,
@合同编号 = @合同编号,
@产品名称 = @产品名称,
@状态 = @状态,
@年 = @年,
@月 = @月;
CREATE TABLE #BHZZOrders (
订单流水号 int,
订单编号 nvarchar(100),
订单备注 nvarchar(500),
合同日期 date,
备注中数字 nvarchar(50),
备注中人名 nvarchar(50)
);
CREATE TABLE #MKOrders (
订单流水号 int,
订单编号 nvarchar(100),
订单备注 nvarchar(500),
合同日期 date,
备注数字部分 nvarchar(50),
备注人名部分 nvarchar(50)
);
CREATE TABLE #收货人信息 (
订单流水号 int,
订单编号 nvarchar(100),
收货人 nvarchar(100),
地址 nvarchar(500)
);
INSERT INTO #BHZZOrders
SELECT DISTINCT
o.订单流水号,
o.订单编号,
o.订单备注,
CAST(o.合同日期 AS date) AS 合同日期,
dbo.提取备注中的数字(o.订单备注) AS 备注中数字,
dbo.提取备注中的中文(o.订单备注) AS 备注中人名
FROM dbo.PDM_订单信息_视图 o
WHERE o.订单编号 LIKE N'BHZZ%'
AND EXISTS (
SELECT 1
FROM #生产计划 p
WHERE NULLIF(LTRIM(RTRIM(CONVERT(nvarchar(100), p.订单号))), N'') = o.订单编号
);
INSERT INTO #MKOrders
SELECT
o.订单流水号,
o.订单编号,
o.订单备注,
CAST(o.合同日期 AS date) AS 合同日期,
dbo.提取备注中的数字(o.订单备注) AS 备注数字部分,
dbo.提取备注中的中文(o.订单备注) AS 备注人名部分
FROM dbo.PDM_订单信息_视图 o
WHERE o.订单编号 LIKE N'%MK%';
INSERT INTO #收货人信息
SELECT DISTINCT
o.订单流水号,
o.订单编号,
c.收货人,
c.地址
FROM dbo.PDM_订单信息_视图 o
LEFT JOIN dbo.客户关系管理系统_客户名称 c ON o.客户流水号 = c.客户流水号
WHERE o.订单编号 LIKE N'%MK%'
OR EXISTS (SELECT 1 FROM #BHZZOrders b WHERE b.订单编号 = o.订单编号);
;WITH AllMatches AS (
SELECT
B.订单流水号 AS BHZZ订单流水号,
B.订单编号 AS BHZZ订单编号,
B.合同日期 AS BHZZ合同日期,
B.订单备注 AS BHZZ订单备注,
B.备注中数字 AS BHZZ备注提取数字,
B.备注中人名 AS BHZZ备注提取人名,
M.订单流水号 AS MK订单流水号,
M.订单编号 AS MK订单编号,
M.合同日期 AS MK合同日期,
M.订单备注 AS MK订单备注,
M.备注数字部分 AS MK备注数字部分,
M.备注人名部分 AS MK备注提取人名,
R.收货人 AS MK订单收货人,
R.地址 AS MK订单收货地址,
DATEDIFF(DAY, M.合同日期, B.合同日期) AS 日期差天数,
CASE
WHEN B.备注中数字 IS NOT NULL AND M.备注数字部分 IS NOT NULL
AND B.备注中数字 = M.备注数字部分 THEN N'数字匹配'
WHEN B.备注中数字 IS NOT NULL AND CHARINDEX(B.备注中数字, M.订单编号) > 0 THEN N'订单编号包含数字'
WHEN B.备注中人名 IS NOT NULL AND M.备注人名部分 IS NOT NULL
AND B.备注中人名 = M.备注人名部分 THEN N'人名匹配'
WHEN B.备注中人名 IS NOT NULL AND R.收货人 IS NOT NULL
AND B.备注中人名 = R.收货人 THEN N'人名与收货人匹配'
WHEN M.备注人名部分 IS NOT NULL AND R.收货人 IS NOT NULL
AND M.备注人名部分 = R.收货人 THEN N'MK备注人名与收货人匹配'
ELSE N'其他关联'
END AS 关联类型
FROM #BHZZOrders B
INNER JOIN #MKOrders M ON
(B.备注中数字 IS NOT NULL AND M.备注数字部分 IS NOT NULL AND B.备注中数字 = M.备注数字部分)
OR (B.备注中数字 IS NOT NULL AND CHARINDEX(B.备注中数字, M.订单编号) > 0)
OR (B.备注中人名 IS NOT NULL AND M.备注人名部分 IS NOT NULL AND B.备注中人名 = M.备注人名部分)
LEFT JOIN #收货人信息 R ON M.订单流水号 = R.订单流水号
),
RankedMatches AS (
SELECT
*,
ROW_NUMBER() OVER (
PARTITION BY BHZZ订单流水号
ORDER BY
CASE
WHEN 关联类型 = N'人名与收货人匹配' THEN 1
WHEN 关联类型 = N'数字匹配' THEN 2
WHEN 关联类型 = N'订单编号包含数字' THEN 3
WHEN 关联类型 = N'人名匹配' THEN 4
WHEN 关联类型 = N'MK备注人名与收货人匹配' THEN 5
ELSE 6
END,
ABS(日期差天数)
) AS rn
FROM AllMatches
)
SELECT *
INTO #ClosestMatches
FROM RankedMatches
WHERE rn = 1;
-- 修改人:Ld 修改时间:2026-09-10 08:34:52; 从组件视图按MK订单补充部件名称和买方名称,客户名称不再取收货人。
EXEC sp_executesql N'
SELECT
p.*,
ISNULL(componentInfo.部件名称, p.产品名称) AS 部件名称,
componentInfo.买方名称,
linkProject.合同编号 AS 关联合同编号,
c.BHZZ订单流水号,
c.BHZZ订单编号,
c.BHZZ合同日期,
c.BHZZ订单备注,
c.BHZZ备注提取数字,
c.BHZZ备注提取人名,
c.MK订单流水号,
c.MK订单编号,
c.MK合同日期,
c.MK订单备注,
c.MK备注数字部分,
c.MK备注提取人名,
c.MK订单收货人,
c.MK订单收货地址,
c.日期差天数,
c.关联类型
FROM #生产计划 p
LEFT JOIN #ClosestMatches c ON c.BHZZ订单编号 = CONVERT(nvarchar(100), p.订单号)
LEFT JOIN dbo.合同管理_订单信息_基础表 linkOrder
ON linkOrder.订单编号 = CONVERT(nvarchar(100), p.订单号)
LEFT JOIN dbo.PDM_项目名称 linkProject
ON linkOrder.项目流水号 = linkProject.项目流水号
OUTER APPLY (
SELECT TOP (1)
comp.产品名称 AS 部件名称,
comp.买方名称
FROM dbo.PDM_组件名称_视图 comp
WHERE comp.订单编号 = ISNULL(NULLIF(c.MK订单编号, N''''), CONVERT(nvarchar(100), p.订单号))
ORDER BY
CASE WHEN comp.产品名称 = p.产品名称 THEN 0 ELSE 1 END,
comp.组件流水号
) componentInfo
ORDER BY p.订单号, p.工序顺序;';
END;
GO
-- 修改人:Ld 修改时间:2026-09-10 08:34:52;

View File

@@ -0,0 +1,248 @@
-- 设备门牌看板存储过程从测试库同步到正式库;修改人:Ld 修改时间:2026-09-10 08:18:13;
USE [ERPTOOL_JY];
GO
/* 修改人:Ld 修改时间:2026-09-10 08:18:13; 同步测试库设备门牌看板过程,下一项按待加工区原过程口径,由任务分配设备流水号匹配工位后取可以加工第一项。 */
ALTER PROCEDURE [dbo].[车间生产管理_设备门牌看板_查询数据]
@设备流水号 nvarchar(50) = NULL,
@设备流水号_check bit = 0,
@仅未完成 bit = 1
AS
BEGIN
SET NOCOUNT ON;
/* 修改人:Ld 修改时间:2026-09-10 08:18:13; 正式库同步测试库设备门牌看板逻辑,过程体内保留追溯注释。 */
;WITH WorkStation AS (
SELECT
sb.设备流水号,
sb.工位号,
sb.设备名称,
rt.工艺计划流水号 AS 当前工艺计划流水号,
rt.工序流水号 AS 当前工序流水号,
rt.人员编号 AS 当前人员编号,
rt.操作时间 AS 当前操作时间
FROM dbo.基础数据_设备工位点检表 sb
LEFT JOIN dbo.MES_机加工MES_实时监控信息表 rt
ON rt.终端编号 = sb.工位号
WHERE sb.工位号 IS NOT NULL
AND (@设备流水号_check = 0
OR CONVERT(nvarchar(50), sb.设备流水号) LIKE N'%' + ISNULL(@设备流水号, N'') + N'%'
OR sb.工位号 LIKE N'%' + ISNULL(@设备流水号, N'') + N'%'
OR sb.设备名称 LIKE N'%' + ISNULL(@设备流水号, N'') + N'%')
),
CurrentTask AS (
SELECT *
FROM (
SELECT
ws.设备流水号,
ws.工位号,
ws.设备名称,
ws.当前操作时间,
v.工艺任务流水号,
ws.当前工艺计划流水号 AS 工艺计划流水号,
ws.当前工序流水号 AS 工序流水号,
ws.当前人员编号 AS 人员编号,
v.操作者 AS 姓名,
v.订单号,
v.零件名称,
v.零件图号,
v.工序顺序,
v.工序,
v.数量,
v.已完成数 AS 完成数,
v.剩余数量,
v.工序状态,
v.派工日期,
ROW_NUMBER() OVER (
PARTITION BY ws.工位号
ORDER BY v.订单号, v.工艺任务流水号
) AS rn
FROM WorkStation ws
INNER JOIN dbo.车间生产管理工艺_零件工序_派工任务_加工视图 v
ON v.工位号 = ws.工位号
AND v.工艺计划流水号 = ws.当前工艺计划流水号
AND v.工序流水号 = ws.当前工序流水号
WHERE ISNULL(ws.当前工艺计划流水号, 0) > 0
AND ISNULL(ws.当前工序流水号, 0) > 0
) c
WHERE c.rn = 1
),
CanProcess AS (
SELECT DISTINCT
gx1.工艺计划流水号,
1 AS 可以加工
FROM dbo.车间生产管理工艺_零件工序 gx1
WHERE gx1.工序顺序 = 1
AND (
ISNULL(gx1.完成数量, 0) > 0
OR EXISTS (
SELECT 1
FROM dbo.MES_机加工MES_加工完成整修审核表 aud1
WHERE aud1.工序流水号 = gx1.工序流水号
AND aud1.审核类型 = N'加工完成'
AND aud1.审核状态 = N'待审核'
AND ISNULL(aud1.完成数量, 0) > 0
)
)
),
PendingArea AS (
SELECT
ws.设备流水号,
ws.工位号,
ws.设备名称,
fp.工艺任务流水号,
v.工艺计划流水号,
v.工序流水号,
fp.人员编号,
v.操作者 AS 姓名,
ISNULL(gz.改制订单编号, v.订单号) AS 订单号,
v.零件名称,
v.零件图号,
v.工序顺序,
v.工序,
fp.数量,
ISNULL(fp.加工数量, 0) AS 完成数,
fp.数量 - ISNULL(fp.加工数量, 0) AS 剩余数量,
v.工序状态,
fp.分配时间 AS 派工日期,
v.精工期限,
v.计划完成日期,
CASE WHEN v.工序顺序 = 1 THEN 1 ELSE ISNULL(cp.可以加工, 0) END AS 可以加工
FROM WorkStation ws
INNER JOIN dbo.车间生产管理工艺_零件工序_任务分配 fp
ON fp.设备流水号 = ws.设备流水号
INNER JOIN dbo.车间生产管理_零件工序_视图 v
ON v.工序流水号 = fp.工序流水号
LEFT JOIN CanProcess cp
ON cp.工艺计划流水号 = v.工艺计划流水号
LEFT JOIN dbo.技术中心_改制订单记录 gz
ON gz.工艺计划流水号 = v.工艺计划流水号
AND ISNULL(gz.是否删除, 0) = 0
WHERE v.工艺编号 IS NOT NULL
AND v.考核状态 = 2
AND ISNULL(v.工序状态, 0) < 3
AND (@仅未完成 = 0 OR fp.数量 - ISNULL(fp.加工数量, 0) > 0)
AND CASE WHEN v.工序顺序 = 1 THEN 1 ELSE ISNULL(cp.可以加工, 0) END = 1
AND NOT (
ISNULL(v.工艺计划流水号, 0) = ISNULL(ws.当前工艺计划流水号, 0)
AND ISNULL(v.工序流水号, 0) = ISNULL(ws.当前工序流水号, 0)
)
AND NOT EXISTS (
SELECT 1
FROM dbo.MES_机加工MES_加工完成整修审核表 aud
WHERE aud.工序流水号 = v.工序流水号
AND aud.录工票人员编号 = fp.人员编号
AND aud.审核类型 = N'加工完成'
AND aud.审核状态 = N'待审核'
AND ISNULL(aud.完成类型, 0) = 1
)
),
NextTask AS (
SELECT *
FROM (
SELECT
p.*,
ROW_NUMBER() OVER (
PARTITION BY p.工位号
ORDER BY
p.计划完成日期,
p.派工日期,
p.工艺任务流水号
) AS rn
FROM PendingArea p
) n
WHERE n.rn = 1
),
DoorTask AS (
SELECT
c.工艺任务流水号,
c.工艺计划流水号,
c.工序流水号,
c.设备流水号,
c.工位号 + N':' + ISNULL(c.设备名称, N'') AS 设备,
c.姓名,
c.订单号,
c.零件名称,
c.零件图号,
c.工序顺序,
c.工序,
c.数量,
c.完成数,
1 AS 是否加工中,
c.工序状态,
CONVERT(varchar(19), c.派工日期, 120) AS 分配时间,
c.当前操作时间 AS 计划开始时间,
CONVERT(varchar(10), NULL) AS 精工期限,
c.当前操作时间 AS 加工开始时间,
CONVERT(datetime, NULL) AS 加工完成时间,
1 AS 设备队列序号,
c.工位号,
N'生产中' AS 门牌状态,
1 AS 是否当前任务,
0 AS 是否下一任务
FROM CurrentTask c
UNION ALL
SELECT
n.工艺任务流水号,
n.工艺计划流水号,
n.工序流水号,
n.设备流水号,
n.工位号 + N':' + ISNULL(n.设备名称, N'') AS 设备,
n.姓名,
n.订单号,
n.零件名称,
n.零件图号,
n.工序顺序,
n.工序,
n.数量,
n.完成数,
0 AS 是否加工中,
n.工序状态,
CONVERT(varchar(19), n.派工日期, 120) AS 分配时间,
n.派工日期 AS 计划开始时间,
n.精工期限,
CONVERT(datetime, NULL) AS 加工开始时间,
CONVERT(datetime, NULL) AS 加工完成时间,
CASE WHEN c.工位号 IS NULL THEN 1 ELSE 2 END AS 设备队列序号,
n.工位号,
N'下一项' AS 门牌状态,
CASE WHEN c.工位号 IS NULL THEN 1 ELSE 0 END AS 是否当前任务,
CASE WHEN c.工位号 IS NULL THEN 0 ELSE 1 END AS 是否下一任务
FROM NextTask n
LEFT JOIN CurrentTask c
ON c.工位号 = n.工位号
)
SELECT
工艺任务流水号,
工艺计划流水号,
工序流水号,
设备流水号,
设备,
姓名,
订单号,
零件名称,
零件图号,
工序顺序,
工序,
数量,
完成数,
是否加工中,
工序状态,
分配时间,
计划开始时间,
精工期限,
加工开始时间,
加工完成时间,
设备队列序号,
COUNT(1) OVER (PARTITION BY 工位号) - 1 AS 后续任务数,
门牌状态,
是否当前任务,
是否下一任务
FROM DoorTask
ORDER BY 工位号, 设备队列序号;
END;
GO
-- 修改人:Ld 修改时间:2026-09-10 08:18:13;

View File

@@ -0,0 +1,361 @@
/*
修改人:Ld 修改时间:2026-09-03 14:56:40;
用途: 测试库采购生成入库单时同步生成入库单标签信息,并提供扫码查询过程。
数据库: ERPTOOL_JY_20250826Back
说明: 本脚本只部署测试库,不包含正式库发布。
*/
IF OBJECT_ID(N'dbo.仓储管理_入库单标签明细', N'U') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 新增入库单标签明细表,保存扫码展示所需物料信息。
CREATE TABLE dbo.仓储管理_入库单标签明细
(
入库单标签明细流水号 INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
入库单标签流水号 INT NOT NULL,
物料流水号 INT NULL,
采购合同明细流水号 INT NULL,
物料名称 NVARCHAR(100) NULL,
图号 NVARCHAR(100) NULL,
数量 DECIMAL(18,4) NULL,
是否需要质检 BIT NULL,
创建时间 DATETIME NOT NULL CONSTRAINT DF_仓储管理_入库单标签明细_创建时间 DEFAULT(GETDATE())
)
END
GO
IF OBJECT_ID(N'dbo.仓储管理_入库单标签', N'U') IS NULL
BEGIN
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 新增入库单标签主表,二维码以标签ID或入库单号查询该表。
CREATE TABLE dbo.仓储管理_入库单标签
(
入库单标签流水号 INT IDENTITY(1,1) NOT NULL PRIMARY KEY,
标签编号 NVARCHAR(100) NOT NULL,
入库单号 NVARCHAR(100) NULL,
批次号 NVARCHAR(100) NULL,
采购合同流水号 INT NULL,
采购合同号 NVARCHAR(100) NULL,
供应商流水号 NVARCHAR(100) NULL,
供应商 NVARCHAR(100) NULL,
二维码内容 NVARCHAR(500) NULL,
创建人 INT NULL,
创建时间 DATETIME NOT NULL CONSTRAINT DF_仓储管理_入库单标签_创建时间 DEFAULT(GETDATE()),
是否启用 BIT NOT NULL CONSTRAINT DF_仓储管理_入库单标签_是否启用 DEFAULT(1)
)
END
GO
IF NOT EXISTS (
SELECT 1
FROM sys.foreign_keys
WHERE name = N'FK_仓储管理_入库单标签明细_标签'
AND parent_object_id = OBJECT_ID(N'dbo.仓储管理_入库单标签明细')
)
BEGIN
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 为标签明细增加主表外键,便于后续重打和追溯。
ALTER TABLE dbo.仓储管理_入库单标签明细
ADD CONSTRAINT FK_仓储管理_入库单标签明细_标签
FOREIGN KEY (入库单标签流水号) REFERENCES dbo.仓储管理_入库单标签(入库单标签流水号)
END
GO
IF NOT EXISTS (
SELECT 1
FROM sys.indexes
WHERE name = N'IX_仓储管理_入库单标签_入库单号'
AND object_id = OBJECT_ID(N'dbo.仓储管理_入库单标签')
)
BEGIN
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 增加入库单号索引,提升扫码查询速度。
CREATE INDEX IX_仓储管理_入库单标签_入库单号 ON dbo.仓储管理_入库单标签(入库单号)
END
GO
IF NOT EXISTS (
SELECT 1
FROM sys.indexes
WHERE name = N'IX_仓储管理_入库单标签_标签编号'
AND object_id = OBJECT_ID(N'dbo.仓储管理_入库单标签')
)
BEGIN
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 增加标签编号索引,支持二维码按标签编号查询。
CREATE INDEX IX_仓储管理_入库单标签_标签编号 ON dbo.仓储管理_入库单标签(标签编号)
END
GO
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 改造生成入库单过程,同步写入标签主表和明细表,并返回标签字段。
ALTER PROCEDURE [dbo].[采购管理_到货内容_新增]
@发起人 int = null,
@通知内容 nvarchar(500) = null,
@采购合同流水号 int = null,
@到货数组 varchar(500) = null,
@物料流水号组 varchar(500) = null,
@质检标志组 varchar(500) = null,
@采购合同 nvarchar(50) = null,
@供应商流水号 nvarchar(50) = null,
@入库单号 nvarchar(50) = null
AS
BEGIN
SET NOCOUNT ON;
update 采购管理_采购合同 set 是否到货 = 3 where 采购合同流水号 = @采购合同流水号
DECLARE @实际入库单号 NVARCHAR(100)
DECLARE @批次号 NVARCHAR(100)
DECLARE @标签编号 NVARCHAR(100)
DECLARE @入库单标签流水号 INT
DECLARE @供应商 NVARCHAR(100)
SET @实际入库单号 = NULLIF(LTRIM(RTRIM(@入库单号)), N'')
IF @实际入库单号 IS NULL
BEGIN
DECLARE @TodayDate VARCHAR(8) = CONVERT(VARCHAR(8), GETDATE(), 112)
DECLARE @Sequence INT
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 兼容测试库旧SQL Server版本,不使用TRY_CAST。
SELECT @Sequence = ISNULL(MAX(CASE WHEN ISNUMERIC(RIGHT(入库单号, 3)) = 1 THEN CAST(RIGHT(入库单号, 3) AS INT) ELSE 0 END), 0) + 1
FROM 仓储管理_入库单
WHERE 入库单号 LIKE 'RK' + @TodayDate + CAST(@采购合同流水号 AS VARCHAR(20)) + '%'
SET @实际入库单号 = 'RK' + @TodayDate + CAST(@采购合同流水号 AS VARCHAR(20)) + RIGHT('000' + CAST(@Sequence AS VARCHAR(10)), 3)
END
SET @批次号 = @实际入库单号
SET @标签编号 = 'JYRK待生成'
SELECT TOP 1 @供应商 = 供应商名称
FROM 采购管理_采购合同明细_视图
WHERE 采购合同流水号 = @采购合同流水号
IF @供应商 IS NULL
BEGIN
SELECT TOP 1 @供应商 = 供应商
FROM 采购管理_耗材采购合同明细_查询视图
WHERE 采购合同流水号 = @采购合同流水号
END
-- 声明临时表变量
DECLARE @物料明细表 TABLE (
RowNum INT,
到货数 INT,
物料流水号 INT,
需要质检 INT
)
-- 解析质检标志数组
;WITH 质检标志表 AS (
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum,
CAST(Value AS INT) AS 需要质检
FROM dbo.SplitString(@质检标志组, ',')
),
-- 解析到货数组
到货表 AS (
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum,
CAST(Value AS INT) AS 到货数
FROM dbo.SplitString(@到货数组, ',')
),
-- 解析物料流水号组
物料表 AS (
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT NULL)) AS RowNum,
CAST(Value AS INT) AS 物料流水号
FROM dbo.SplitString(@物料流水号组, ',')
)
-- 插入到物料明细表
INSERT INTO @物料明细表
SELECT
到货表.RowNum,
到货表.到货数,
物料表.物料流水号,
ISNULL(质检标志表.需要质检, 0) AS 需要质检
FROM 到货表
INNER JOIN 物料表 ON 到货表.RowNum = 物料表.RowNum
LEFT JOIN 质检标志表 ON 到货表.RowNum = 质检标志表.RowNum
WHERE 到货表.到货数 > 0
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 先生成标签主表,明细按本次提交物料写入,扫码可直接读取。
IF EXISTS (SELECT 1 FROM @物料明细表)
BEGIN
INSERT INTO dbo.仓储管理_入库单标签
(
标签编号,
入库单号,
批次号,
采购合同流水号,
采购合同号,
供应商流水号,
供应商,
二维码内容,
创建人
)
VALUES
(
@标签编号,
@实际入库单号,
@批次号,
@采购合同流水号,
@采购合同,
@供应商流水号,
@供应商,
N'JYRK|' + @标签编号,
@发起人
)
SET @入库单标签流水号 = SCOPE_IDENTITY()
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 标签编号使用自增标签ID生成,避免同一秒并发生成重复编号。
SET @标签编号 = 'JYRK' + RIGHT('0000000000' + CAST(@入库单标签流水号 AS VARCHAR(20)), 10)
UPDATE dbo.仓储管理_入库单标签
SET 标签编号 = @标签编号,
二维码内容 = N'JYRK|' + @标签编号
WHERE 入库单标签流水号 = @入库单标签流水号
INSERT INTO dbo.仓储管理_入库单标签明细
(
入库单标签流水号,
物料流水号,
采购合同明细流水号,
物料名称,
图号,
数量,
是否需要质检
)
SELECT
@入库单标签流水号,
m.物料流水号,
ISNULL(d1.采购合同明细流水号, d2.采购合同明细流水号),
ISNULL(d1.物料名称, d2.采购件),
ISNULL(d1.图号或型号, d2.图号或型号),
m.到货数,
m.需要质检
FROM @物料明细表 m
OUTER APPLY (
SELECT TOP 1 采购合同明细流水号, 物料名称, 图号或型号
FROM 采购管理_采购合同明细_视图
WHERE 采购合同流水号 = @采购合同流水号
AND 物料流水号 = m.物料流水号
ORDER BY 采购合同明细流水号
) d1
OUTER APPLY (
SELECT TOP 1 采购合同明细流水号, 采购件, 图号或型号
FROM 采购管理_耗材采购合同明细_查询视图
WHERE 采购合同流水号 = @采购合同流水号
AND 物料流水号 = m.物料流水号
ORDER BY 采购合同明细流水号
) d2
END
-- 判断是否有质检物料(需要质检的物料)
IF EXISTS (SELECT 1 FROM @物料明细表 WHERE 需要质检 = 1)
BEGIN
-- 发送通知给质检部门
INSERT INTO 采购管理_到货通知记录(通知内容,通知日期,发起人,接收角色)
VALUES(@通知内容, GETDATE(), @发起人, 20) -- 20为质检部门角色ID
-- 质检物料到货记录
INSERT INTO 采购管理_采购到货(采购合同流水号, 到货数, 物料流水号, 是否需要质检, 质检状态)
SELECT
@采购合同流水号,
到货数,
物料流水号,
1, -- 需要质检
'待质检'
FROM @物料明细表
WHERE 需要质检 = 1
END
-- 判断是否有免检物料(不需要质检的物料)
IF EXISTS (SELECT 1 FROM @物料明细表 WHERE 需要质检 = 0)
BEGIN
-- 发送通知给仓库部门
INSERT INTO 采购管理_到货通知记录(通知内容,通知日期,发起人,接收角色)
VALUES(@通知内容, GETDATE(), @发起人, 7) -- 7为仓库部门角色ID
-- 免检物料到货记录(直接入库)
INSERT INTO 采购管理_采购到货(采购合同流水号,到货数,物料流水号,是否需要质检,质检状态,等待入库数量)
SELECT
@采购合同流水号,
到货数,
物料流水号,
0, -- 不需要质检
'已入库',
到货数
FROM @物料明细表
WHERE 需要质检 = 0
-- 插入入库单,并生成带序号的入库单号
INSERT INTO 仓储管理_入库单(入库单号,采购合同流水号,采购合同号,供应商流水号,供应商名称,到货数,是否入库)
SELECT
@实际入库单号,
@采购合同流水号,
@采购合同,
@供应商流水号,
@供应商,
到货数,
0
FROM @物料明细表
WHERE 需要质检 = 0
END
-- 返回执行结果
SELECT
'1' AS result,
@实际入库单号 AS 入库单号,
@批次号 AS 批次号,
@入库单标签流水号 AS 标签ID,
@标签编号 AS 标签编号,
N'JYRK|' + @标签编号 AS 二维码内容
END
GO
IF OBJECT_ID(N'dbo.采购管理_入库单标签_扫码查询', N'P') IS NOT NULL
DROP PROCEDURE dbo.采购管理_入库单标签_扫码查询
GO
-- 修改人:Ld 修改时间:2026-09-03 14:56:40; 新增扫码查询过程,扫码后按标签编号、标签ID或入库单号返回入库明细。
CREATE PROCEDURE dbo.采购管理_入库单标签_扫码查询
@扫码内容 NVARCHAR(500) = NULL,
@标签ID INT = NULL,
@入库单号 NVARCHAR(100) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @标签编号 NVARCHAR(100)
SET @标签编号 = @扫码内容
IF @标签编号 LIKE N'JYRK|%'
BEGIN
SET @标签编号 = SUBSTRING(@标签编号, 6, 100)
END
SELECT
t.入库单标签流水号 AS 标签ID,
t.标签编号,
t.入库单号,
t.采购合同号,
t.供应商,
t.批次号,
d.物料名称,
d.图号,
d.数量,
d.是否需要质检,
t.创建时间
FROM dbo.仓储管理_入库单标签 t
INNER JOIN dbo.仓储管理_入库单标签明细 d
ON t.入库单标签流水号 = d.入库单标签流水号
WHERE t.是否启用 = 1
AND (
(@标签ID IS NOT NULL AND t.入库单标签流水号 = @标签ID)
OR (ISNULL(@标签编号, N'') <> N'' AND t.标签编号 = @标签编号)
OR (ISNULL(@入库单号, N'') <> N'' AND t.入库单号 = @入库单号)
OR (ISNULL(@扫码内容, N'') <> N'' AND t.入库单号 = @扫码内容)
)
ORDER BY d.入库单标签明细流水号
END
GO