更新设备维修、发货、精工车间工序工价/生产审核/工时统计、仓储盘点/库存查询/库位/入库,新增车间派工移动端及SQL脚本

This commit is contained in:
Developer
2026-07-17 09:49:34 +08:00
parent 9c1f52078d
commit 2b9058c69c
20 changed files with 3326 additions and 343 deletions

View File

@@ -0,0 +1,233 @@
-- 库存查询需求量排除已完成订单
-- 修改人:Ld 修改时间:2026-07-14 16:16:14;
ALTER VIEW dbo.物料管理_需求量_视图
AS
SELECT
b.物料流水号,
CASE WHEN b.需求量 > ISNULL(c.已领数, 0) THEN b.需求量 - ISNULL(c.已领数, 0) ELSE 0 END AS 需求量
FROM
(
SELECT 物料流水号, SUM(数量) AS 需求量
FROM
(
SELECT p.物料流水号, ISNULL(p.数量, 0) AS 数量
FROM dbo.PDM_零件明细表_所有视图 p
LEFT JOIN dbo.PDM_订单信息_视图 o ON p.订单编号 = o.订单编号
WHERE p.是否分配 = 1
AND p.订单类型 <> 3
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 库存查询需求数不计入已完成订单
UNION ALL
SELECT t.物料流水号, ISNULL(t.实领数, 0) AS 数量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = t.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE t.物料流水号 IS NOT NULL
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 临时领料需求不计入已完成订单
) AS a
GROUP BY 物料流水号
) AS b
LEFT JOIN
(
SELECT l.物料流水号, SUM(ISNULL(l.已领数, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细_视图 l
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = l.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 扣减已领数时同步排除已完成订单
GROUP BY l.物料流水号
) AS c ON b.物料流水号 = c.物料流水号;
GO
ALTER PROCEDURE [dbo].[物料管理_需求量_更新]
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM [dbo].[物料管理_需求量];
INSERT INTO [dbo].[物料管理_需求量]
SELECT
b.物料流水号,
CASE WHEN b.需求量 > ISNULL(c.已领数, 0) THEN b.需求量 - ISNULL(c.已领数, 0) ELSE 0 END AS 需求量
FROM
(
SELECT 物料流水号, SUM(数量) AS 需求量
FROM
(
SELECT p.物料流水号, ISNULL(p.数量, 0) AS 数量
FROM dbo.PDM_零件明细表_所有视图 p
LEFT JOIN dbo.PDM_订单信息_视图 o ON p.订单编号 = o.订单编号
WHERE p.是否分配 = 1
AND p.订单类型 <> 3
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总需求量不计入已完成订单
UNION ALL
SELECT t.物料流水号, ISNULL(t.实领数, 0) AS 数量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = t.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE t.物料流水号 IS NOT NULL
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总临时领料需求不计入已完成订单
) AS a
GROUP BY 物料流水号
) AS b
LEFT JOIN
(
SELECT l.物料流水号, SUM(ISNULL(l.已领数, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细_视图 l
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = l.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总扣减已领数时同步排除已完成订单
GROUP BY l.物料流水号
) AS c ON b.物料流水号 = c.物料流水号
WHERE CASE WHEN b.需求量 > ISNULL(c.已领数, 0) THEN b.需求量 - ISNULL(c.已领数, 0) ELSE 0 END > 0;
END;
GO
ALTER PROCEDURE [dbo].[仓储管理_报缺补货_需求量明细_查询]
@物料流水号 INT = 15448
AS
BEGIN
SET NOCOUNT ON;
;WITH 需求明细 AS
(
SELECT
p.订单编号,
p.组件流水号,
p.物料流水号,
SUM(ISNULL(p.数量, 0)) AS 需求量,
N'生产订单需求' AS 来源
FROM dbo.PDM_零件明细表_所有视图 p
LEFT JOIN dbo.PDM_订单信息_视图 o ON p.订单编号 = o.订单编号
WHERE p.是否分配 = 1
AND p.订单类型 <> 3
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 需求量明细不显示已完成订单
AND (@物料流水号 IS NULL OR p.物料流水号 = @物料流水号)
GROUP BY
p.订单编号,
p.组件流水号,
p.物料流水号
UNION ALL
SELECT
cv.订单编号,
t.组件流水号,
t.物料流水号,
SUM(ISNULL(t.实领数, 0)) AS 需求量,
N'临时领料需求' AS 来源
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = t.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE t.物料流水号 IS NOT NULL
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 临时领料明细不显示已完成订单
AND (@物料流水号 IS NULL OR t.物料流水号 = @物料流水号)
GROUP BY
cv.订单编号,
t.组件流水号,
t.物料流水号
),
已领明细 AS
(
SELECT
cv.订单编号,
l.组件流水号,
l.物料流水号,
SUM(ISNULL(l.已领数, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细_视图 l
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = l.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 明细扣减已领数时同步排除已完成订单
AND (@物料流水号 IS NULL OR l.物料流水号 = @物料流水号)
GROUP BY
cv.订单编号,
l.组件流水号,
l.物料流水号
)
SELECT
d.订单编号,
d.组件流水号,
d.物料流水号,
d.需求量,
ISNULL(l.已领数, 0) AS 已领数,
CASE
WHEN d.需求量 > ISNULL(l.已领数, 0)
THEN d.需求量 - ISNULL(l.已领数, 0)
ELSE 0
END AS 最终需求量,
ISNULL(o.简称, '') AS 简称,
d.来源
FROM 需求明细 d
LEFT JOIN 已领明细 l
ON d.物料流水号 = l.物料流水号
AND d.组件流水号 = l.组件流水号
AND ISNULL(d.订单编号, '') = ISNULL(l.订单编号, '')
LEFT JOIN dbo.PDM_订单信息_视图 o
ON d.订单编号 = o.订单编号
ORDER BY
d.订单编号,
d.组件流水号,
d.来源;
;WITH 原视图需求 AS
(
SELECT
x.物料流水号,
SUM(x.数量) AS 总需求量
FROM
(
SELECT
p.物料流水号,
ISNULL(p.数量, 0) AS 数量
FROM dbo.PDM_零件明细表_所有视图 p
LEFT JOIN dbo.PDM_订单信息_视图 o ON p.订单编号 = o.订单编号
WHERE p.是否分配 = 1
AND p.订单类型 <> 3
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总明细不计入已完成订单
AND (@物料流水号 IS NULL OR p.物料流水号 = @物料流水号)
UNION ALL
SELECT
t.物料流水号,
ISNULL(t.实领数, 0) AS 数量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = t.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE t.物料流水号 IS NOT NULL
AND ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总临时领料不计入已完成订单
AND (@物料流水号 IS NULL OR t.物料流水号 = @物料流水号)
) x
GROUP BY x.物料流水号
),
原视图已领 AS
(
SELECT
l.物料流水号,
SUM(ISNULL(l.已领数, 0)) AS 总已领数
FROM dbo.车间装配管理_领料单明细_视图 l
LEFT JOIN dbo.PDM_组件名称_视图 cv ON cv.组件流水号 = l.组件流水号
LEFT JOIN dbo.PDM_订单信息_视图 o ON cv.订单编号 = o.订单编号
WHERE ISNULL(o.订单状态, N'') <> N'已完成' -- 修改人:Ld 修改时间:2026-07-14 16:16:14; 汇总扣减已领数时同步排除已完成订单
AND (@物料流水号 IS NULL OR l.物料流水号 = @物料流水号)
GROUP BY l.物料流水号
)
SELECT
d.物料流水号,
d.总需求量,
ISNULL(l.总已领数, 0) AS 总已领数,
CASE
WHEN d.总需求量 > ISNULL(l.总已领数, 0)
THEN d.总需求量 - ISNULL(l.总已领数, 0)
ELSE 0
END AS 总最终需求量
FROM 原视图需求 d
LEFT JOIN 原视图已领 l
ON d.物料流水号 = l.物料流水号
ORDER BY d.物料流水号;
END;
GO

View File

@@ -0,0 +1,322 @@
-- 库存查询需求量性能优化:直连基础表判断订单完成状态,减少重视图展开
-- 修改人:Ld 修改时间:2026-07-14 16:35:00;
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_零件基本件_物料组件_20260714' AND object_id = OBJECT_ID(N'dbo.PDM_零件明细表_基本件'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_零件基本件_物料组件_20260714
ON dbo.PDM_零件明细表_基本件 (物料流水号, 组件流水号)
INCLUDE (零件数量, 已领数量);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_零件标准外购_物料组件_20260714' AND object_id = OBJECT_ID(N'dbo.PDM_零件明细表_标准件和外购件'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_零件标准外购_物料组件_20260714
ON dbo.PDM_零件明细表_标准件和外购件 (物料流水号, 组件流水号)
INCLUDE (零件数量, 已领数量);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_临时领料_物料组件_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_装配执行_临时领料明细'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_临时领料_物料组件_20260714
ON dbo.车间装配管理_装配执行_临时领料明细 (物料流水号, 组件流水号)
INCLUDE (实领数);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_领料明细_基本件_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_领料单明细'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_领料明细_基本件_20260714
ON dbo.车间装配管理_领料单明细 (基本件流水号)
INCLUDE (已领数量);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_领料明细_标准外购_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_领料单明细'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_领料明细_标准外购_20260714
ON dbo.车间装配管理_领料单明细 (标准件和外购件流水号)
INCLUDE (已领数量);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_领料明细_物料组件_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_领料单明细'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_领料明细_物料组件_20260714
ON dbo.车间装配管理_领料单明细 (物料流水号, 组件流水号)
INCLUDE (已领数量);
END;
GO
ALTER VIEW dbo.物料管理_需求量_视图
AS
WITH 组件订单 AS
(
SELECT
c.组件流水号,
c.是否分配,
o.订单类型,
o.是否提交,
p.是否启用
FROM dbo.PDM_组件名称 c
INNER JOIN dbo.PDM_机床名称 m ON c.机床流水号 = m.机床流水号
INNER JOIN dbo.PDM_项目名称 p ON m.项目流水号 = p.项目流水号
INNER JOIN dbo.合同管理_订单信息_基础表 o ON p.项目流水号 = o.项目流水号
),
需求 AS
(
SELECT b.物料流水号, SUM(ISNULL(b.零件数量, 0)) AS 需求量
FROM dbo.PDM_零件明细表_基本件 b
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE co.是否分配 = 1
AND co.订单类型 <> 3
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 直接用基础字段排除已完成订单
GROUP BY b.物料流水号
UNION ALL
SELECT s.物料流水号, SUM(ISNULL(s.零件数量, 0)) AS 需求量
FROM dbo.PDM_零件明细表_标准件和外购件 s
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE co.是否分配 = 1
AND co.订单类型 <> 3
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 直接用基础字段排除已完成订单
GROUP BY s.物料流水号
UNION ALL
SELECT t.物料流水号, SUM(ISNULL(t.实领数, 0)) AS 需求量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN 组件订单 co ON t.组件流水号 = co.组件流水号
WHERE t.物料流水号 IS NOT NULL
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 临时领料同口径排除已完成订单
GROUP BY t.物料流水号
),
需求汇总 AS
(
SELECT 物料流水号, SUM(需求量) AS 需求量
FROM 需求
GROUP BY 物料流水号
),
已领 AS
(
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_基本件 b ON l.基本件流水号 = b.基本件流水号
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 扣减已领数时同步排除已完成订单
GROUP BY b.物料流水号
UNION ALL
SELECT s.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号 = s.标准件和外购件流水号
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 扣减已领数时同步排除已完成订单
GROUP BY s.物料流水号
UNION ALL
SELECT l.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
LEFT JOIN 组件订单 co ON l.组件流水号 = co.组件流水号
WHERE l.物料流水号 IS NOT NULL
AND ISNULL(l.物料流水号, 0) <> 0
AND ISNULL(l.基本件流水号, 0) = 0
AND ISNULL(l.标准件和外购件流水号, 0) = 0
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 临时件扣减已领数时同步排除已完成订单
GROUP BY l.物料流水号
),
已领汇总 AS
(
SELECT 物料流水号, SUM(已领数) AS 已领数
FROM 已领
GROUP BY 物料流水号
)
SELECT
d.物料流水号,
CASE WHEN d.需求量 > ISNULL(l.已领数, 0) THEN d.需求量 - ISNULL(l.已领数, 0) ELSE 0 END AS 需求量
FROM 需求汇总 d
LEFT JOIN 已领汇总 l ON d.物料流水号 = l.物料流水号;
GO
ALTER PROCEDURE [dbo].[物料管理_需求量_更新]
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM dbo.物料管理_需求量;
INSERT INTO dbo.物料管理_需求量
SELECT 物料流水号, 需求量
FROM dbo.物料管理_需求量_视图
WHERE 需求量 > 0;
END;
GO
ALTER PROCEDURE [dbo].[仓储管理_报缺补货_需求量明细_查询]
@物料流水号 INT = 15448
AS
BEGIN
SET NOCOUNT ON;
;WITH 组件订单 AS
(
SELECT
c.组件流水号,
o.订单编号,
c.是否分配,
o.订单类型,
o.是否提交,
p.是否启用,
ISNULL(k.简称, '') AS 简称
FROM dbo.PDM_组件名称 c
INNER JOIN dbo.PDM_机床名称 m ON c.机床流水号 = m.机床流水号
INNER JOIN dbo.PDM_项目名称 p ON m.项目流水号 = p.项目流水号
INNER JOIN dbo.合同管理_订单信息_基础表 o ON p.项目流水号 = o.项目流水号
LEFT JOIN dbo.客户关系管理系统_客户名称 k ON p.客户流水号 = k.客户流水号
),
需求明细 AS
(
SELECT
co.订单编号,
b.组件流水号,
b.物料流水号,
SUM(ISNULL(b.零件数量, 0)) AS 需求量,
N'生产订单需求' AS 来源
FROM dbo.PDM_零件明细表_基本件 b
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE co.是否分配 = 1
AND co.订单类型 <> 3
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 明细不显示已完成订单
AND (@物料流水号 IS NULL OR b.物料流水号 = @物料流水号)
GROUP BY co.订单编号, b.组件流水号, b.物料流水号
UNION ALL
SELECT
co.订单编号,
s.组件流水号,
s.物料流水号,
SUM(ISNULL(s.零件数量, 0)) AS 需求量,
N'生产订单需求' AS 来源
FROM dbo.PDM_零件明细表_标准件和外购件 s
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE co.是否分配 = 1
AND co.订单类型 <> 3
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 明细不显示已完成订单
AND (@物料流水号 IS NULL OR s.物料流水号 = @物料流水号)
GROUP BY co.订单编号, s.组件流水号, s.物料流水号
UNION ALL
SELECT
co.订单编号,
t.组件流水号,
t.物料流水号,
SUM(ISNULL(t.实领数, 0)) AS 需求量,
N'临时领料需求' AS 来源
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN 组件订单 co ON t.组件流水号 = co.组件流水号
WHERE t.物料流水号 IS NOT NULL
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 临时领料明细不显示已完成订单
AND (@物料流水号 IS NULL OR t.物料流水号 = @物料流水号)
GROUP BY co.订单编号, t.组件流水号, t.物料流水号
),
已领明细 AS
(
SELECT
co.订单编号,
b.组件流水号,
b.物料流水号,
SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_基本件 b ON l.基本件流水号 = b.基本件流水号
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 明细扣减已领数时同步排除已完成订单
AND (@物料流水号 IS NULL OR b.物料流水号 = @物料流水号)
GROUP BY co.订单编号, b.组件流水号, b.物料流水号
UNION ALL
SELECT
co.订单编号,
s.组件流水号,
s.物料流水号,
SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号 = s.标准件和外购件流水号
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 明细扣减已领数时同步排除已完成订单
AND (@物料流水号 IS NULL OR s.物料流水号 = @物料流水号)
GROUP BY co.订单编号, s.组件流水号, s.物料流水号
UNION ALL
SELECT
co.订单编号,
l.组件流水号,
l.物料流水号,
SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
LEFT JOIN 组件订单 co ON l.组件流水号 = co.组件流水号
WHERE l.物料流水号 IS NOT NULL
AND ISNULL(l.物料流水号, 0) <> 0
AND ISNULL(l.基本件流水号, 0) = 0
AND ISNULL(l.标准件和外购件流水号, 0) = 0
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:35:00; 临时件明细扣减已领数时同步排除已完成订单
AND (@物料流水号 IS NULL OR l.物料流水号 = @物料流水号)
GROUP BY co.订单编号, l.组件流水号, l.物料流水号
),
已领汇总 AS
(
SELECT 订单编号, 组件流水号, 物料流水号, SUM(已领数) AS 已领数
FROM 已领明细
GROUP BY 订单编号, 组件流水号, 物料流水号
),
明细 AS
(
SELECT
d.订单编号,
d.组件流水号,
d.物料流水号,
d.需求量,
ISNULL(l.已领数, 0) AS 已领数,
CASE WHEN d.需求量 > ISNULL(l.已领数, 0) THEN d.需求量 - ISNULL(l.已领数, 0) ELSE 0 END AS 最终需求量,
d.来源
FROM 需求明细 d
LEFT JOIN 已领汇总 l
ON d.物料流水号 = l.物料流水号
AND d.组件流水号 = l.组件流水号
AND ISNULL(d.订单编号, '') = ISNULL(l.订单编号, '')
)
SELECT
d.订单编号,
d.组件流水号,
d.物料流水号,
d.需求量,
d.已领数,
d.最终需求量,
ISNULL(co.简称, '') AS 简称,
d.来源
FROM 明细 d
LEFT JOIN 组件订单 co ON d.组件流水号 = co.组件流水号
ORDER BY d.订单编号, d.组件流水号, d.来源;
;WITH 汇总 AS
(
SELECT 物料流水号, 需求量
FROM dbo.物料管理_需求量_视图
WHERE (@物料流水号 IS NULL OR 物料流水号 = @物料流水号)
)
SELECT
物料流水号,
需求量 AS 总需求量,
0 AS 总已领数,
需求量 AS 总最终需求量
FROM 汇总
ORDER BY 物料流水号;
END;
GO

View File

@@ -0,0 +1,149 @@
-- 库存查询需求量性能优化补充:补齐备货/临时备货领料扣减口径
-- 修改人:Ld 修改时间:2026-07-14 16:42:00;
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_备货领料_领料流水号_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_动力头备货_领料明细'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_备货领料_领料流水号_20260714
ON dbo.车间装配管理_动力头备货_领料明细 (领料流水号)
INCLUDE (物料流水号);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_临时备货领料_临时流水号_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_动力头备货_临时领料明细'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_临时备货领料_临时流水号_20260714
ON dbo.车间装配管理_动力头备货_临时领料明细 (临时流水号)
INCLUDE (物料流水号);
END;
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = N'IX_Ld_领料明细_临时流水号_20260714' AND object_id = OBJECT_ID(N'dbo.车间装配管理_领料单明细'))
BEGIN
CREATE NONCLUSTERED INDEX IX_Ld_领料明细_临时流水号_20260714
ON dbo.车间装配管理_领料单明细 (临时流水号)
INCLUDE (已领数量);
END;
GO
ALTER VIEW dbo.物料管理_需求量_视图
AS
WITH 组件订单 AS
(
SELECT
c.组件流水号,
c.是否分配,
o.订单类型,
o.是否提交,
p.是否启用
FROM dbo.PDM_组件名称 c
INNER JOIN dbo.PDM_机床名称 m ON c.机床流水号 = m.机床流水号
INNER JOIN dbo.PDM_项目名称 p ON m.项目流水号 = p.项目流水号
INNER JOIN dbo.合同管理_订单信息_基础表 o ON p.项目流水号 = o.项目流水号
),
需求 AS
(
SELECT b.物料流水号, SUM(ISNULL(b.零件数量, 0)) AS 需求量
FROM dbo.PDM_零件明细表_基本件 b
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE co.是否分配 = 1
AND co.订单类型 <> 3
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 直接用基础字段排除已完成订单
GROUP BY b.物料流水号
UNION ALL
SELECT s.物料流水号, SUM(ISNULL(s.零件数量, 0)) AS 需求量
FROM dbo.PDM_零件明细表_标准件和外购件 s
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE co.是否分配 = 1
AND co.订单类型 <> 3
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 直接用基础字段排除已完成订单
GROUP BY s.物料流水号
UNION ALL
SELECT t.物料流水号, SUM(ISNULL(t.实领数, 0)) AS 需求量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN 组件订单 co ON t.组件流水号 = co.组件流水号
WHERE t.物料流水号 IS NOT NULL
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 临时领料同口径排除已完成订单
GROUP BY t.物料流水号
),
需求汇总 AS
(
SELECT 物料流水号, SUM(需求量) AS 需求量
FROM 需求
GROUP BY 物料流水号
),
已领 AS
(
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_基本件 b ON l.基本件流水号 = b.基本件流水号
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 扣减已领数时同步排除已完成订单
GROUP BY b.物料流水号
UNION ALL
SELECT s.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号 = s.标准件和外购件流水号
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 扣减已领数时同步排除已完成订单
GROUP BY s.物料流水号
UNION ALL
SELECT l.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
LEFT JOIN 组件订单 co ON l.组件流水号 = co.组件流水号
WHERE l.物料流水号 IS NOT NULL
AND ISNULL(l.物料流水号, 0) <> 0
AND ISNULL(l.基本件流水号, 0) = 0
AND ISNULL(l.标准件和外购件流水号, 0) = 0
AND ISNULL(l.领料流水号, 0) = 0
AND ISNULL(l.临时流水号, 0) = 0
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 临时件扣减已领数时同步排除已完成订单
GROUP BY l.物料流水号
UNION ALL
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.车间装配管理_动力头备货_领料明细 b ON l.领料流水号 = b.领料流水号
GROUP BY b.物料流水号 -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 保留原口径中的备货领料扣减
UNION ALL
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.车间装配管理_动力头备货_临时领料明细 b ON l.临时流水号 = b.临时流水号
GROUP BY b.物料流水号 -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 保留原口径中的临时备货领料扣减
),
已领汇总 AS
(
SELECT 物料流水号, SUM(已领数) AS 已领数
FROM 已领
GROUP BY 物料流水号
)
SELECT
d.物料流水号,
CASE WHEN d.需求量 > ISNULL(l.已领数, 0) THEN d.需求量 - ISNULL(l.已领数, 0) ELSE 0 END AS 需求量
FROM 需求汇总 d
LEFT JOIN 已领汇总 l ON d.物料流水号 = l.物料流水号;
GO
ALTER PROCEDURE [dbo].[物料管理_需求量_更新]
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM dbo.物料管理_需求量;
INSERT INTO dbo.物料管理_需求量
SELECT 物料流水号, 需求量
FROM dbo.物料管理_需求量_视图
WHERE 需求量 > 0; -- 修改人:Ld 修改时间:2026-07-14 16:42:00; 复用优化后的视图口径刷新汇总表
END;
GO

View File

@@ -0,0 +1,111 @@
-- 库存查询需求量性能优化补充:已领扣减侧保留无订单链路数据,保持旧口径一致
-- 修改人:Ld 修改时间:2026-07-14 16:50:00;
ALTER VIEW dbo.物料管理_需求量_视图
AS
WITH 组件订单 AS
(
SELECT
c.组件流水号,
c.是否分配,
o.订单类型,
o.是否提交,
p.是否启用
FROM dbo.PDM_组件名称 c
INNER JOIN dbo.PDM_机床名称 m ON c.机床流水号 = m.机床流水号
INNER JOIN dbo.PDM_项目名称 p ON m.项目流水号 = p.项目流水号
LEFT JOIN dbo.合同管理_订单信息_基础表 o ON p.项目流水号 = o.项目流水号
),
需求 AS
(
SELECT b.物料流水号, SUM(ISNULL(b.零件数量, 0)) AS 需求量
FROM dbo.PDM_零件明细表_基本件 b
INNER JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE co.是否分配 = 1
AND co.订单类型 <> 3
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 需求侧仍排除已完成订单
GROUP BY b.物料流水号
UNION ALL
SELECT s.物料流水号, SUM(ISNULL(s.零件数量, 0)) AS 需求量
FROM dbo.PDM_零件明细表_标准件和外购件 s
INNER JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE co.是否分配 = 1
AND co.订单类型 <> 3
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 需求侧仍排除已完成订单
GROUP BY s.物料流水号
UNION ALL
SELECT t.物料流水号, SUM(ISNULL(t.实领数, 0)) AS 需求量
FROM dbo.车间装配管理_装配执行_临时领料明细 t
LEFT JOIN 组件订单 co ON t.组件流水号 = co.组件流水号
WHERE t.物料流水号 IS NOT NULL
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 临时领料同口径排除已完成订单
GROUP BY t.物料流水号
),
需求汇总 AS
(
SELECT 物料流水号, SUM(需求量) AS 需求量
FROM 需求
GROUP BY 物料流水号
),
已领 AS
(
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_基本件 b ON l.基本件流水号 = b.基本件流水号
LEFT JOIN 组件订单 co ON b.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 已领扣减侧保留无订单链路数据
GROUP BY b.物料流水号
UNION ALL
SELECT s.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.PDM_零件明细表_标准件和外购件 s ON l.标准件和外购件流水号 = s.标准件和外购件流水号
LEFT JOIN 组件订单 co ON s.组件流水号 = co.组件流水号
WHERE NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 已领扣减侧保留无订单链路数据
GROUP BY s.物料流水号
UNION ALL
SELECT l.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
LEFT JOIN 组件订单 co ON l.组件流水号 = co.组件流水号
WHERE l.物料流水号 IS NOT NULL
AND ISNULL(l.物料流水号, 0) <> 0
AND ISNULL(l.基本件流水号, 0) = 0
AND ISNULL(l.标准件和外购件流水号, 0) = 0
AND ISNULL(l.领料流水号, 0) = 0
AND ISNULL(l.临时流水号, 0) = 0
AND NOT (ISNULL(co.是否提交, 0) = 6 AND ISNULL(co.是否启用, 0) = 1) -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 临时件扣减侧保留无订单链路数据
GROUP BY l.物料流水号
UNION ALL
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.车间装配管理_动力头备货_领料明细 b ON l.领料流水号 = b.领料流水号
GROUP BY b.物料流水号 -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 保留原口径中的备货领料扣减
UNION ALL
SELECT b.物料流水号, SUM(ISNULL(l.已领数量, 0)) AS 已领数
FROM dbo.车间装配管理_领料单明细 l
INNER JOIN dbo.车间装配管理_动力头备货_临时领料明细 b ON l.临时流水号 = b.临时流水号
GROUP BY b.物料流水号 -- 修改人:Ld 修改时间:2026-07-14 16:50:00; 保留原口径中的临时备货领料扣减
),
已领汇总 AS
(
SELECT 物料流水号, SUM(已领数) AS 已领数
FROM 已领
GROUP BY 物料流水号
)
SELECT
d.物料流水号,
CASE WHEN d.需求量 > ISNULL(l.已领数, 0) THEN d.需求量 - ISNULL(l.已领数, 0) ELSE 0 END AS 需求量
FROM 需求汇总 d
LEFT JOIN 已领汇总 l ON d.物料流水号 = l.物料流水号;
GO

View File

@@ -0,0 +1,101 @@
-- 修复员工工时统计导出 null:统一导出元数据列名,并修正导出文件名前缀;修改人:Ld 修改时间:2026-07-17 07:53:49;
ALTER PROCEDURE [dbo].[报表_精工车间_员工工时统计_查询数据]
@开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL,
@排序名称 INT = NULL,
@排序方式 INT = NULL
AS
BEGIN
SET NOCOUNT ON;
-- 后端导出处理器未支持 tabletype=18,使用通用导出类型 15 防止返回 NULL;修改人:Ld 修改时间:2026-07-17 07:58:30;
SELECT N'员工工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT
256 * 15 AS 工序,
256 * 10 AS 工序顺序,
256 * 30 AS 零件名称,
256 * 30 AS 零件图号,
256 * 20 AS 物料编码,
256 * 10 AS 加工数,
256 * 12 AS 计价方式,
256 * 10 AS 单价,
256 * 12 AS 总价,
256 * 15 AS 加工工时M,
256 * 10 AS 暂停时长,
256 * 30 AS 开始加工时间,
256 * 30 AS 完成时间,
256 * 10 AS 操作者,
256 * 25 AS 设备,
246 * 25 AS 订单编号,
246 * 25 AS 产品名称;
SELECT
0 AS 工序,
1 AS 工序顺序,
0 AS 零件名称,
0 AS 零件图号,
0 AS 物料编码,
1 AS 加工数,
0 AS 计价方式,
1 AS 单价,
1 AS 总价,
1 AS 加工工时M,
1 AS 暂停时长,
0 AS 开始加工时间,
0 AS 完成时间,
0 AS 操作者,
0 AS 设备,
0 AS 订单编号,
0 AS 产品名称;
;WITH PriceData AS (
SELECT
data.*,
CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
CASE
WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
)
SELECT
工序,
工序顺序,
零件名称,
图号 AS 零件图号,
物料编码,
完成数 AS 加工数,
计价方式,
单价,
总价,
加工时长 AS 加工工时M,
暂停时间 AS 暂停时长,
开始加工 AS 开始加工时间,
结束加工 AS 完成时间,
操作者,
工位号 AS 设备,
订单编号,
产品名称
FROM PriceData
ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END
GO

View File

@@ -7,7 +7,88 @@ GO
SET QUOTED_IDENTIFIER ON
GO
-- 员工工时汇总增加工价总价,工价取工序工价当前启用最终单价,总价=完成数量*工价;修改人:Ld 修改时间:2026-07-06 09:12:38;
-- 完成过程表补充计价字段,工时统计按当次完成记录判断计件或计时;修改人:Ld 修改时间:2026-07-06 15:18:06;
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'计价方式') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [计价方式] NVARCHAR(20) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_计价方式] DEFAULT (N'计件');
GO
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'单件工价') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [单件工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_单件工价] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'单时工价') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [单时工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_单时工价] DEFAULT ((0));
GO
-- 旧完成记录默认计件,单件工价按工序工价当前启用价格回填;修改人:Ld 修改时间:2026-07-06 15:18:06;
UPDATE finishData
SET 计价方式 = ISNULL(NULLIF(finishData.计价方式, N''), N'计件'),
单件工价 = CASE
WHEN ISNULL(finishData.单件工价, 0) <> 0 THEN finishData.单件工价
ELSE ISNULL(priceData.单件工价, 0)
END,
单时工价 = ISNULL(finishData.单时工价, 0)
FROM [dbo].[设备管理_零件工序_工序完成过程情况] finishData
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM [dbo].[车间生产管理工艺_工序工价] price
WHERE price.工序流水号 = finishData.工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE finishData.计价方式 IS NULL
OR finishData.计价方式 = N''
OR finishData.单件工价 IS NULL
OR finishData.单时工价 IS NULL;
GO
-- 工时统计明细视图补充完成过程流水号和计价字段,便于计时单价编辑回写;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER VIEW [dbo].[车间生产管理_零件工序加工时长_视图]
AS
SELECT
dbo.车间生产管理_零件工序_视图.工序,
dbo.车间生产管理_零件工序_视图.加工设备,
dbo.车间生产管理_零件工序_视图.零件名称,
dbo.车间生产管理_零件工序_视图.零件图号 AS 图号,
dbo.车间生产管理_零件工序_视图.数量,
dbo.设备管理_零件工序_工序完成过程情况.完成数量 AS 完成数,
dbo.设备管理_零件工序_工序完成过程情况.加工开始时间 AS 开始加工,
dbo.设备管理_零件工序_工序完成过程情况.加工完成时间 AS 结束加工,
ISNULL(dbo.设备管理_零件工序_工序完成过程情况.扫码工时, 0) AS 加工时长,
dbo.车间生产管理_零件工序_视图.订单号 AS 订单编号,
dbo.车间生产管理_零件工序_视图.产品名称,
dbo.设备管理_零件工序_工序完成过程情况.操作者编号,
CONVERT(VARCHAR(10), dbo.车间生产管理_零件工序_视图.派工日期, 23) AS 任务下达,
dbo.基础数据_设备工位点检表.设备名称 + N'-' + dbo.设备管理_零件工序_工序完成过程情况.工位号 AS 工位号,
dbo.人事档案管理_人员名单.姓名 AS 操作者,
dbo.车间生产管理_零件工序_视图.订单流水号,
dbo.车间生产管理_零件工序_视图.定额工时,
dbo.车间生产管理_零件工序_视图.准结工时,
dbo.车间生产管理_零件工序_视图.工艺计划流水号,
dbo.车间生产管理_零件工序_视图.物料编码,
dbo.车间生产管理_零件工序_视图.工序顺序,
dbo.设备管理_零件工序_工序完成过程情况.暂停时间,
dbo.设备管理_零件工序_工序完成过程情况.完成过程流水号,
ISNULL(NULLIF(dbo.设备管理_零件工序_工序完成过程情况.计价方式, N''), N'计件') AS 计价方式,
ISNULL(dbo.设备管理_零件工序_工序完成过程情况.单件工价, 0) AS 单件工价,
ISNULL(dbo.设备管理_零件工序_工序完成过程情况.单时工价, 0) AS 单时工价
FROM dbo.车间生产管理_零件工序_视图
INNER JOIN dbo.设备管理_零件工序_工序完成过程情况
ON dbo.车间生产管理_零件工序_视图.工序流水号 = dbo.设备管理_零件工序_工序完成过程情况.工序流水号
INNER JOIN dbo.基础数据_设备工位点检表
ON dbo.设备管理_零件工序_工序完成过程情况.工位号 = dbo.基础数据_设备工位点检表.工位号
INNER JOIN dbo.人事档案管理_人员名单
ON dbo.设备管理_零件工序_工序完成过程情况.操作者编号 = dbo.人事档案管理_人员名单.人员编号
GO
-- 员工工时汇总增加单价总价,计件按单件工价*数量,计时按单时工价*加工分钟/60;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[车间生产管理_工人工时统计_查询数据]
@开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL
@@ -28,16 +109,24 @@ BEGIN
f.操作者编号,
f.完成日期,
f.完成数量,
ISNULL(f.完成数量, 0) * ISNULL(price.工价, 0) AS 总价
CASE
WHEN ISNULL(NULLIF(f.计价方式, N''), N'计件') = N'计时'
THEN ROUND(ISNULL(f.扫码工时, 0) / 60.0 * ISNULL(f.单时工价, 0), 4)
ELSE ROUND(ISNULL(f.完成数量, 0) * CASE WHEN ISNULL(f.单件工价, 0) <> 0 THEN f.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.设备管理_零件工序_工序完成过程情况 f
INNER JOIN dbo.人事档案管理_人员名单 p ON f.操作者编号 = p.人员编号
OUTER APPLY (
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
FROM dbo.车间生产管理工艺_工序工价 pp
WHERE pp.工序流水号 = f.工序流水号
AND ISNULL(pp.是否启用, 1) = 1
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
) price
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.工序流水号 = f.工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE f.完成日期 >= @开始时间
AND f.完成日期 <= @结束时间
) a
@@ -45,7 +134,7 @@ BEGIN
END
GO
-- 员工工时明细增加工价总价,明细按零件名称+图号+工序匹配工序工价;修改人:Ld 修改时间:2026-07-06 09:12:38;
-- 员工工时明细返回单价,计时记录允许前端编辑单时工价;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[精工车间_员工工时统计_详情_查询数据]
@操作者编号 INT = 62,
@开始时间 DATETIME = NULL,
@@ -56,32 +145,43 @@ AS
BEGIN
SET NOCOUNT ON;
SELECT
data.*,
data.加工时长 / NULLIF(data.完成数, 0) AS 单个工时,
ISNULL(price.工价, 0) AS 工价,
ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
FROM dbo.车间生产管理工艺_工序工价 pp
WHERE pp.零件名称 = data.零件名称
AND pp.图号 = data.图号
AND pp.工序名称 = data.工序
AND ISNULL(pp.是否启用, 1) = 1
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
) price
WHERE data.操作者编号 = @操作者编号
AND data.结束加工 >= @开始时间
AND data.结束加工 < DATEADD(DAY, 1, @结束时间)
;WITH PriceData AS (
SELECT
data.*,
data.加工时长 / NULLIF(data.完成数, 0) AS 单个工时,
CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
CASE
WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.操作者编号 = @操作者编号
AND data.结束加工 >= @开始时间
AND data.结束加工 < DATEADD(DAY, 1, @结束时间)
)
SELECT *
FROM PriceData
ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC;
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END
GO
-- 设备工时汇总增加工价总价,工价取工序工价当前启用最终单价,总价=完成数量*工价;修改人:Ld 修改时间:2026-07-06 09:12:38;
-- 设备工时汇总增加单价总价,计件按单件工价*数量,计时按单时工价*加工分钟/60;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[车间生产管理_设备工时统计_查询数据]
@开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL
@@ -99,16 +199,24 @@ BEGIN
ISNULL(f.扫码工时, 0) AS 工时,
e.设备名称 + N'-' + f.工位号 AS 工位号,
f.完成数量,
ISNULL(f.完成数量, 0) * ISNULL(price.工价, 0) AS 总价
CASE
WHEN ISNULL(NULLIF(f.计价方式, N''), N'计件') = N'计时'
THEN ROUND(ISNULL(f.扫码工时, 0) / 60.0 * ISNULL(f.单时工价, 0), 4)
ELSE ROUND(ISNULL(f.完成数量, 0) * CASE WHEN ISNULL(f.单件工价, 0) <> 0 THEN f.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.设备管理_零件工序_工序完成过程情况 f
INNER JOIN dbo.基础数据_设备工位点检表 e ON f.工位号 = e.工位号
OUTER APPLY (
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
FROM dbo.车间生产管理工艺_工序工价 pp
WHERE pp.工序流水号 = f.工序流水号
AND ISNULL(pp.是否启用, 1) = 1
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
) price
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.工序流水号 = f.工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE f.完成日期 >= @开始时间
AND f.完成日期 <= @结束时间
) a
@@ -116,7 +224,7 @@ BEGIN
END
GO
-- 设备工时明细增加工价总价,明细按零件名称+图号+工序匹配工序工价;修改人:Ld 修改时间:2026-07-06 09:12:38;
-- 设备工时明细返回单价,计时记录允许前端编辑单时工价;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[精工车间_设备工时统计_详情_查询数据]
@设备 NVARCHAR(50) = NULL,
@开始时间 DATETIME = NULL,
@@ -127,31 +235,76 @@ AS
BEGIN
SET NOCOUNT ON;
SELECT
data.*,
ISNULL(price.工价, 0) AS 工价,
ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
FROM dbo.车间生产管理工艺_工序工价 pp
WHERE pp.零件名称 = data.零件名称
AND pp.图号 = data.图号
AND pp.工序名称 = data.工序
AND ISNULL(pp.是否启用, 1) = 1
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
) price
WHERE data.工位号 = @设备
AND data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
;WITH PriceData AS (
SELECT
data.*,
CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
CASE
WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.工位号 = @设备
AND data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
)
SELECT *
FROM PriceData
ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC;
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END
GO
-- 员工工时导出增加工价总价列,保持与页面明细一致;修改人:Ld 修改时间:2026-07-06 09:12:38;
-- 计时记录单时工价编辑保存;修改人:Ld 修改时间:2026-07-06 15:18:06;
IF OBJECT_ID(N'[dbo].[车间生产管理_工时统计_单时工价_修改数据]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[车间生产管理_工时统计_单时工价_修改数据];
GO
CREATE PROCEDURE [dbo].[车间生产管理_工时统计_单时工价_修改数据]
@完成过程流水号 NVARCHAR(50) = N'',
@单时工价 NVARCHAR(50) = N''
AS
BEGIN
SET NOCOUNT ON;
DECLARE @Id INT;
DECLARE @Safe单时工价 DECIMAL(18, 4);
SET @Id = CASE WHEN ISNUMERIC(NULLIF(@完成过程流水号, N'')) = 1 THEN CONVERT(INT, @完成过程流水号) ELSE NULL END;
SET @Safe单时工价 = CASE WHEN ISNUMERIC(NULLIF(@单时工价, N'')) = 1 THEN CONVERT(DECIMAL(18, 4), @单时工价) ELSE 0 END;
IF @Id IS NULL
BEGIN
SELECT N'0' AS result, N'完成过程流水号不能为空' AS message;
RETURN;
END;
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET 计价方式 = N'计时',
单时工价 = @Safe单时工价,
修改时间 = GETDATE()
WHERE 完成过程流水号 = @Id;
SELECT N'1' AS result;
END
GO
-- 员工工时导出增加计价方式、单价和总价列;修改人:Ld 修改时间:2026-07-06 15:18:06;
ALTER PROCEDURE [dbo].[报表_精工车间_员工工时统计_查询数据]
@开始时间 DATETIME = NULL,
@结束时间 DATETIME = NULL,
@@ -161,7 +314,9 @@ AS
BEGIN
SET NOCOUNT ON;
SELECT N'库存_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '17' AS tabletype;
-- 修正导出文件名前缀,避免工时统计导出显示库存文件名;修改人:Ld 修改时间:2026-07-17 07:53:49;
-- 后端导出处理器未支持 tabletype=18,使用通用导出类型 15 防止返回 NULL;修改人:Ld 修改时间:2026-07-17 07:58:30;
SELECT N'员工工时统计_' + REPLACE(REPLACE(REPLACE(CONVERT(NVARCHAR(19), GETDATE(), 21), ':', ''), '-', ''), ' ', '-') AS tablename, '15' AS tabletype;
SELECT
256 * 15 AS 工序,
@@ -170,10 +325,11 @@ BEGIN
256 * 30 AS 零件图号,
256 * 20 AS 物料编码,
256 * 10 AS 加工数,
256 * 12 AS 计价方式,
256 * 10 AS 单价,
256 * 12 AS 总价,
256 * 15 AS 加工工时M,
256 * 10 AS 暂停时长,
256 * 10 AS 工价,
256 * 12 AS 总价,
256 * 30 AS 开始加工时间,
256 * 30 AS 完成时间,
256 * 10 AS 操作者,
@@ -186,12 +342,14 @@ BEGIN
1 AS 工序顺序,
0 AS 零件名称,
0 AS 零件图号,
0 AS 物料编号,
-- 修正导出元数据列名需与字段宽度和数据列一致;修改人:Ld 修改时间:2026-07-17 07:53:49;
0 AS 物料编码,
1 AS 加工数,
0 AS 计价方式,
1 AS 单价,
1 AS 总价,
1 AS 加工工时M,
1 AS 暂停时长,
1 AS 工价,
1 AS 总价,
0 AS 开始加工时间,
0 AS 完成时间,
0 AS 操作者,
@@ -199,38 +357,53 @@ BEGIN
0 AS 订单编号,
0 AS 产品名称;
;WITH PriceData AS (
SELECT
data.*,
CASE WHEN data.计价方式 = N'计时' THEN ISNULL(data.单时工价, 0) ELSE CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END END AS 单价,
CASE
WHEN data.计价方式 = N'计时' THEN ROUND(ISNULL(data.加工时长, 0) / 60.0 * ISNULL(data.单时工价, 0), 4)
ELSE ROUND(ISNULL(data.完成数, 0) * CASE WHEN ISNULL(data.单件工价, 0) <> 0 THEN data.单件工价 ELSE ISNULL(priceData.单件工价, 0) END, 4)
END AS 总价
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM dbo.车间生产管理工艺_工序工价 price
WHERE price.零件名称 = data.零件名称
AND price.图号 = data.图号
AND price.工序名称 = data.工序
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
)
SELECT
data.工序,
data.工序顺序,
data.零件名称,
data.图号 AS 零件图号,
data.物料编码,
data.完成数 AS 加工数,
data.加工时长 AS 加工工时M,
data.暂停时间 AS 暂停时长,
ISNULL(price.工价, 0) AS 工价,
ISNULL(data.完成数, 0) * ISNULL(price.工价, 0) AS 总价,
data.开始加工 AS 开始加工时间,
data.结束加工 AS 完成时间,
data.操作者,
data.工位号 AS 设备,
data.订单编号,
data.产品名称
FROM dbo.车间生产管理_零件工序加工时长_视图 data
OUTER APPLY (
SELECT TOP 1 ISNULL(pp.[最终单价(元/件)], 0) AS 工价
FROM dbo.车间生产管理工艺_工序工价 pp
WHERE pp.零件名称 = data.零件名称
AND pp.图号 = data.图号
AND pp.工序名称 = data.工序
AND ISNULL(pp.是否启用, 1) = 1
ORDER BY ISNULL(pp.生效日期, CONVERT(DATE, '1900-01-01')) DESC, pp.修改时间 DESC, pp.工价流水号 DESC
) price
WHERE data.结束加工 >= @开始时间
AND data.结束加工 <= @结束时间
工序,
工序顺序,
零件名称,
图号 AS 零件图号,
物料编码,
完成数 AS 加工数,
计价方式,
单价,
总价,
加工时长 AS 加工工时M,
暂停时间 AS 暂停时长,
开始加工 AS 开始加工时间,
结束加工 AS 完成时间,
操作者,
工位号 AS 设备,
订单编号,
产品名称
FROM PriceData
ORDER BY
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN data.结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN data.结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN data.结束加工 END DESC;
CASE WHEN @排序名称 = 1 AND @排序方式 = 1 THEN 结束加工 END DESC,
CASE WHEN @排序名称 = 1 AND @排序方式 <> 1 THEN 结束加工 END ASC,
CASE WHEN ISNULL(@排序名称, 0) <> 1 THEN 结束加工 END DESC;
END
GO

View File

@@ -1,4 +1,36 @@
-- 生产完成审核查询与审核处理 修改人:Ld 修改时间:2026-07-02 13:57:18;
-- 生产完成审核查询与审核处理 修改人:Ld 修改时间:2026-07-02 13:57:18;
-- 生产审核补充计价方式和工价字段,用于传递到工时统计;修改人:Ld 修改时间:2026-07-06 15:18:06;
IF OBJECT_ID(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'计价方式') IS NULL
ALTER TABLE [dbo].[MES_机加工MES_加工完成整修审核表] ADD [计价方式] NVARCHAR(20) NULL CONSTRAINT [DF_MES_机加工MES_加工完成整修审核表_计价方式] DEFAULT (N'计件');
GO
IF OBJECT_ID(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'单件工价') IS NULL
ALTER TABLE [dbo].[MES_机加工MES_加工完成整修审核表] ADD [单件工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_MES_机加工MES_加工完成整修审核表_单件工价] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[MES_机加工MES_加工完成整修审核表]', N'单时工价') IS NULL
ALTER TABLE [dbo].[MES_机加工MES_加工完成整修审核表] ADD [单时工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_MES_机加工MES_加工完成整修审核表_单时工价] DEFAULT ((0));
GO
-- 审核通过后写入完成过程表的计价字段,保障本脚本可单独部署;修改人:Ld 修改时间:2026-07-06 15:18:06;
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'计价方式') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [计价方式] NVARCHAR(20) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_计价方式] DEFAULT (N'计件');
GO
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'单件工价') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [单件工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_单件工价] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'U') IS NOT NULL
AND COL_LENGTH(N'[dbo].[设备管理_零件工序_工序完成过程情况]', N'单时工价') IS NULL
ALTER TABLE [dbo].[设备管理_零件工序_工序完成过程情况] ADD [单时工价] DECIMAL(18, 4) NULL CONSTRAINT [DF_设备管理_零件工序_工序完成过程情况_单时工价] DEFAULT ((0));
GO
IF OBJECT_ID(N'[dbo].[机加工MES_加工完成整修审核_查询数据]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[机加工MES_加工完成整修审核_查询数据];
GO
@@ -49,6 +81,9 @@ BEGIN
工作者.姓名 AS 工作者姓名,
A.完成数量,
A.完成类型,
ISNULL(NULLIF(A.计价方式, N''), N'计件') AS 计价方式,
CASE WHEN ISNULL(A.单件工价, 0) <> 0 THEN A.单件工价 ELSE ISNULL(priceData.单件工价, 0) END AS 单件工价,
ISNULL(A.单时工价, 0) AS 单时工价,
A.录工票人员编号,
录工票人员.姓名 AS 录工票人员姓名,
A.工位号,
@@ -90,6 +125,17 @@ BEGIN
OR A.审核人 = 审核人员.姓名
LEFT JOIN [dbo].[基础数据_设备工位点检表] AS SB
ON A.工位号 = SB.工位号
OUTER APPLY (
SELECT TOP 1
CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END AS 单件工价
FROM [dbo].[车间生产管理工艺_工序工价] price
WHERE price.工序流水号 = A.工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC
) priceData
WHERE (@审核状态_check = 0 OR A.审核状态 = @审核状态)
AND (@审核类型_check = 0 OR A.审核类型 = @审核类型)
AND (@操作者_check = 0 OR ISNULL(操作者人员.姓名, ISNULL(A.操作者, N'')) LIKE N'%' + @操作者 + N'%')
@@ -115,6 +161,9 @@ BEGIN
工作者姓名,
完成数量,
完成类型,
计价方式,
单件工价,
单时工价,
录工票人员编号,
录工票人员姓名,
工位号,
@@ -155,12 +204,8 @@ BEGIN
END;
GO
-- 生产完成审核状态更新,审核通过时接入原 MES 完工链路 修改人:Ld 修改时间:2026-07-02 14:55:23;
IF OBJECT_ID(N'[dbo].[机加工MES_加工完成整修审核_审核数据]', N'P') IS NOT NULL
DROP PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据];
GO
CREATE PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
-- 生产审核普通通过只改审核状态为已审核;修改数量/时间才修正生产完成数据。修改人:Ld 修改时间:2026-07-17 09:10:08;
ALTER PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
@审核流水号 INT,
@审核状态 NVARCHAR(20),
@审核人 NVARCHAR(100) = NULL,
@@ -170,28 +215,39 @@ CREATE PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
@审核加工完成时间 DATETIME = NULL,
@审核整修开始时间 DATETIME = NULL,
@审核整修结束时间 DATETIME = NULL,
@审核整修方案 NVARCHAR(1000) = NULL
@审核整修方案 NVARCHAR(1000) = NULL,
@计价方式 NVARCHAR(20) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @目标审核状态 NVARCHAR(20);
DECLARE @审核类型 NVARCHAR(50);
DECLARE @工序流水号 INT;
DECLARE @工作者考勤编号 NVARCHAR(50);
DECLARE @完成数量 FLOAT;
DECLARE @完成类型 INT;
DECLARE @原完成数量 FLOAT;
DECLARE @最终完成数量 FLOAT;
DECLARE @数量差 FLOAT;
DECLARE @录工票人员编号 INT;
DECLARE @工位号 NVARCHAR(100);
DECLARE @备注 NVARCHAR(500);
DECLARE @设备流水号 INT;
DECLARE @完成过程流水号 INT;
DECLARE @设备号 NVARCHAR(100);
DECLARE @整修记录id INT;
DECLARE @整修方案 NVARCHAR(1000);
DECLARE @剩余工时 FLOAT;
DECLARE @剩余数量 INT;
DECLARE @原流程结果 NVARCHAR(100);
DECLARE @完成过程流水号 INT;
DECLARE @Safe计价方式 NVARCHAR(20);
DECLARE @单件工价 DECIMAL(18, 4);
DECLARE @单时工价 DECIMAL(18, 4);
DECLARE @是否修改加工 BIT = 0;
DECLARE @是否修改整修 BIT = 0;
DECLARE @是否本过程开启事务 BIT;
DECLARE @原流程返回 TABLE (result NVARCHAR(100));
SET @目标审核状态 = CASE WHEN @审核状态 IN (N'审核通过', N'已审核') THEN N'已审核' ELSE @审核状态 END;
IF @目标审核状态 NOT IN (N'已审核', N'审核不通过')
BEGIN
SELECT N'0' AS result, N'审核状态不正确' AS message;
RETURN;
END;
IF NOT EXISTS (
SELECT 1
@@ -204,172 +260,172 @@ BEGIN
RETURN;
END;
IF @审核状态 NOT IN (N'审核通过', N'审核不通过')
BEGIN
SELECT N'0' AS result, N'审核状态不正确' AS message;
RETURN;
END;
SELECT
@审核类型 = 审核类型,
@工序流水号 = 工序流水号,
@工作者考勤编号 = 工作者考勤编号,
@完成数量 = ISNULL(@审核完成数量, 完成数量),
@完成类型 = 完成类型,
@原完成数量 = ISNULL(完成数量, 0),
@录工票人员编号 = 录工票人员编号,
@工位号 = 工位号,
@备注 = 备注,
@设备号 = 设备号,
@整修记录id = 整修记录id,
@整修方案 = ISNULL(@审核整修方案, 整修方案)
@整修方案 = ISNULL(@审核整修方案, 整修方案),
@Safe计价方式 = ISNULL(NULLIF(@计价方式, N''), ISNULL(NULLIF(计价方式, N''), N'计件')),
@单时工价 = ISNULL(单时工价, 0)
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核';
IF @Safe计价方式 NOT IN (N'计件', N'计时')
SET @Safe计价方式 = N'计件';
SET @最终完成数量 = ISNULL(@审核完成数量, @原完成数量);
SET @数量差 = ISNULL(@最终完成数量, 0) - ISNULL(@原完成数量, 0);
SET @是否修改加工 = CASE
WHEN @目标审核状态 = N'已审核'
AND @审核类型 = N'加工完成'
AND (@审核完成数量 IS NOT NULL OR @审核加工开始时间 IS NOT NULL OR @审核加工完成时间 IS NOT NULL OR @计价方式 IS NOT NULL)
THEN 1 ELSE 0 END;
SET @是否修改整修 = CASE
WHEN @目标审核状态 = N'已审核'
AND @审核类型 = N'结束整修'
AND (@审核整修开始时间 IS NOT NULL OR @审核整修结束时间 IS NOT NULL OR @审核整修方案 IS NOT NULL)
THEN 1 ELSE 0 END;
IF @是否修改加工 = 1 AND (@最终完成数量 < 0 OR @最终完成数量 <> FLOOR(@最终完成数量))
BEGIN
SELECT N'0' AS result, N'完成数量必须为大于等于 0 的整数' AS message;
RETURN;
END;
SELECT TOP 1 @单件工价 = CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END
FROM [dbo].[车间生产管理工艺_工序工价] price
WHERE price.工序流水号 = @工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC;
SET @单件工价 = ISNULL(@单件工价, 0);
SET @单时工价 = ISNULL(@单时工价, 0);
BEGIN TRY
SET @是否本过程开启事务 = CASE WHEN @@TRANCOUNT = 0 THEN 1 ELSE 0 END;
IF @是否本过程开启事务 = 1
BEGIN
BEGIN TRAN;
END
ELSE
BEGIN
SAVE TRAN 生产完成审核保存点;
END;
IF @审核状态 = N'审核通过' AND @审核类型 = N'加工完成'
IF @是否修改加工 = 1
BEGIN
IF @工序流水号 IS NULL OR @工作者考勤编号 IS NULL OR @完成数量 IS NULL OR @完成类型 IS NULL OR @录工票人员编号 IS NULL
SELECT @设备流水号 = [设备流水号]
FROM [dbo].[基础数据_设备工位点检表]
WHERE [工位号] = @工位号;
SELECT TOP 1 @完成过程流水号 = [完成过程流水号]
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE [工序流水号] = @工序流水号
AND [录工票人员编号] = @录工票人员编号
AND [工位号] = @工位号
AND [完成数量] = @原完成数量
ORDER BY [完成过程流水号] DESC;
IF @完成过程流水号 IS NULL
BEGIN
SELECT TOP 1 @完成过程流水号 = [完成过程流水号]
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE [工序流水号] = @工序流水号
AND [录工票人员编号] = @录工票人员编号
AND [工位号] = @工位号
ORDER BY [完成过程流水号] DESC;
END;
IF @完成过程流水号 IS NULL
BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, N'审核记录缺少原 MES 完工必需参数' AS message;
SELECT N'0' AS result, N'未找到对应生产完成记录' AS message;
RETURN;
END;
IF @完成数量 <= 0 OR @完成数量 <> FLOOR(@完成数量)
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET [完成数量] = @最终完成数量,
[加工开始时间] = ISNULL(@审核加工开始时间, [加工开始时间]),
[加工完成时间] = ISNULL(@审核加工完成时间, [加工完成时间]),
[完成日期] = CASE WHEN @审核加工完成时间 IS NULL THEN [完成日期] ELSE CONVERT(DATE, @审核加工完成时间) END,
[操作日期] = ISNULL(@审核加工完成时间, [操作日期]),
[计价方式] = @Safe计价方式,
[单件工价] = @单件工价,
[单时工价] = CASE WHEN @Safe计价方式 = N'计时' THEN ISNULL([单时工价], @单时工价) ELSE 0 END,
[修改人员] = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE [修改人员] END,
[修改时间] = GETDATE()
WHERE [完成过程流水号] = @完成过程流水号;
IF ISNULL(@数量差, 0) <> 0
BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, N'完成数量必须为大于 0 的整数' AS message;
RETURN;
END;
UPDATE [dbo].[车间生产管理工艺_零件工序]
SET [完成数量] = ISNULL([完成数量], 0) + @数量差
WHERE [工序流水号] = @工序流水号;
INSERT INTO @原流程返回(result)
EXEC [dbo].[设备管理_零件工序_工序完成过程情况_增加数据]
@工序流水号 = @工序流水号,
@工作者考勤编号 = @工作者考勤编号,
@完成数量 = @完成数量,
@完成类型 = @完成类型,
@录工票人员编号 = @录工票人员编号,
@工位号 = @工位号,
@备注 = @备注,
@剩余工时 = @剩余工时 OUTPUT,
@剩余数量 = @剩余数量 OUTPUT;
SELECT TOP 1 @原流程结果 = result FROM @原流程返回;
IF ISNULL(@原流程结果, N'') <> N'成功'
BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, ISNULL(@原流程结果, N'原 MES 完工流程执行失败') AS message;
RETURN;
UPDATE [dbo].[车间生产管理工艺_零件工序_任务分配]
SET [加工数量] = ISNULL([加工数量], 0) + @数量差
WHERE [工序流水号] = @工序流水号
AND [人员编号] = @录工票人员编号
AND [设备流水号] = @设备流水号;
END;
IF @审核加工完成时间 IS NOT NULL
BEGIN
SELECT @完成过程流水号 = MAX(完成过程流水号)
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE 工序流水号 = @工序流水号
AND 录工票人员编号 = @录工票人员编号
AND 完成数量 = @完成数量;
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET 加工开始时间 = ISNULL(@审核加工开始时间, 加工开始时间),
加工完成时间 = @审核加工完成时间,
完成日期 = CONVERT(DATE, @审核加工完成时间),
操作日期 = @审核加工完成时间,
修改人员 = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE 修改人员 END,
修改时间 = GETDATE()
WHERE 完成过程流水号 = @完成过程流水号;
UPDATE [dbo].[车间生产管理工艺_零件工序]
SET 完成日期 = CASE WHEN 完成日期 IS NULL OR 完成数量 >= ISNULL(完成数量, 0) THEN @审核加工完成时间 ELSE 完成日期 END
WHERE 工序流水号 = @工序流水号;
END;
IF @审核加工开始时间 IS NOT NULL AND @审核加工完成时间 IS NULL
BEGIN
SELECT @完成过程流水号 = MAX(完成过程流水号)
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE 工序流水号 = @工序流水号
AND 录工票人员编号 = @录工票人员编号
AND 完成数量 = @完成数量;
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET 加工开始时间 = @审核加工开始时间,
修改人员 = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE 修改人员 END,
修改时间 = GETDATE()
WHERE 完成过程流水号 = @完成过程流水号;
SET [完成日期] = @审核加工完成时间
WHERE [工序流水号] = @工序流水号;
END;
END;
IF @审核状态 = N'审核通过' AND @审核类型 = N'结束整修'
IF @是否修改整修 = 1
BEGIN
IF @整修记录id IS NULL OR @设备号 IS NULL
BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, N'审核记录缺少整修结束必需参数' AS message;
RETURN;
END;
UPDATE [dbo].[设备管理_整修]
SET 整修开始时间 = CASE WHEN @审核整修开始时间 IS NULL THEN 整修开始时间 ELSE CONVERT(VARCHAR(20), @审核整修开始时间, 120) END,
整修结束时间 = CONVERT(VARCHAR(20), ISNULL(@审核整修结束时间, GETDATE()), 120),
整修状态 = N'1',
整修方案 = @整修方案
WHERE id = @整修记录id
AND 设备号 = @设备号;
SET [整修开始时间] = CASE WHEN @审核整修开始时间 IS NULL THEN [整修开始时间] ELSE CONVERT(VARCHAR(20), @审核整修开始时间, 120) END,
[整修结束时间] = CASE WHEN @审核整修结束时间 IS NULL THEN [整修结束时间] ELSE CONVERT(VARCHAR(20), @审核整修结束时间, 120) END,
[整修方案] = @整修方案
WHERE [id] = @整修记录id
AND [设备号] = @设备号;
END;
UPDATE [dbo].[MES_机加工MES_加工完成整修审核表]
SET 审核状态 = @审核状态,
审核人 = @审核人,
审核时间 = GETDATE(),
审核意见 = ISNULL(@审核意见, N''),
完成数量 = CASE WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' THEN @完成数量 ELSE 完成数量 END,
开始时间 = CASE
WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' AND @审核加工开始时间 IS NOT NULL THEN @审核加工开始时间
WHEN @审核状态 = N'审核通过' AND @审核类型 = N'结束整修' AND @审核整修开始时间 IS NOT NULL THEN @审核整修开始时间
ELSE 开始时间
END,
结束时间 = CASE
WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' AND @审核加工完成时间 IS NOT NULL THEN @审核加工完成时间
WHEN @审核状态 = N'审核通过' AND @审核类型 = N'结束整修' THEN ISNULL(@审核整修结束时间, GETDATE())
ELSE 结束时间
END,
整修方案 = CASE WHEN @审核状态 = N'审核通过' AND @审核类型 = N'结束整修' THEN @整修方案 ELSE 整修方案 END,
剩余工时 = CASE WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' THEN @剩余工时 ELSE 剩余工时 END,
剩余数量 = CASE WHEN @审核状态 = N'审核通过' AND @审核类型 = N'加工完成' THEN @剩余数量 ELSE 剩余数量 END,
修改人 = N'Ld',
修改时间 = GETDATE()
WHERE id = @审核流水号
AND 审核状态 = N'待审核';
SET [审核状态] = @目标审核状态,
[审核人] = @审核人,
[审核时间] = GETDATE(),
[审核意见] = ISNULL(@审核意见, N''),
[完成数量] = CASE WHEN @是否修改加工 = 1 THEN @最终完成数量 ELSE [完成数量] END,
[开始时间] = CASE
WHEN @是否修改加工 = 1 AND @审核加工开始时间 IS NOT NULL THEN @审核加工开始时间
WHEN @是否修改整修 = 1 AND @审核整修开始时间 IS NOT NULL THEN @审核整修开始时间
ELSE [开始时间]
END,
[结束时间] = CASE
WHEN @是否修改加工 = 1 AND @审核加工完成时间 IS NOT NULL THEN @审核加工完成时间
WHEN @是否修改整修 = 1 AND @审核整修结束时间 IS NOT NULL THEN @审核整修结束时间
ELSE [结束时间]
END,
[整修方案] = CASE WHEN @是否修改整修 = 1 THEN @整修方案 ELSE [整修方案] END,
[计价方式] = CASE WHEN @是否修改加工 = 1 THEN @Safe计价方式 ELSE [计价方式] END,
[单件工价] = CASE WHEN @是否修改加工 = 1 THEN @单件工价 ELSE [单件工价] END,
[单时工价] = CASE WHEN @是否修改加工 = 1 THEN @单时工价 ELSE [单时工价] END,
[修改人] = N'Ld',
[修改时间] = GETDATE()
WHERE [id] = @审核流水号
AND [审核状态] = N'待审核';
IF @是否本过程开启事务 = 1
BEGIN
COMMIT TRAN;
END;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
IF ISNULL(@是否本过程开启事务, 1) = 1
BEGIN
ROLLBACK TRAN;
END
ELSE
BEGIN
ROLLBACK TRAN 生产完成审核保存点;
END;
END;
SELECT N'0' AS result, ERROR_MESSAGE() AS message;
@@ -379,3 +435,5 @@ BEGIN
SELECT N'1' AS result;
END;
GO
GO

View File

@@ -0,0 +1,231 @@
-- 生产审核普通通过只改审核状态为已审核;修改数量/时间才修正生产完成数据。修改人:Ld 修改时间:2026-07-17 09:10:08;
ALTER PROCEDURE [dbo].[机加工MES_加工完成整修审核_审核数据]
@审核流水号 INT,
@审核状态 NVARCHAR(20),
@审核人 NVARCHAR(100) = NULL,
@审核意见 NVARCHAR(1000) = NULL,
@审核完成数量 FLOAT = NULL,
@审核加工开始时间 DATETIME = NULL,
@审核加工完成时间 DATETIME = NULL,
@审核整修开始时间 DATETIME = NULL,
@审核整修结束时间 DATETIME = NULL,
@审核整修方案 NVARCHAR(1000) = NULL,
@计价方式 NVARCHAR(20) = NULL
AS
BEGIN
SET NOCOUNT ON;
DECLARE @目标审核状态 NVARCHAR(20);
DECLARE @审核类型 NVARCHAR(50);
DECLARE @工序流水号 INT;
DECLARE @原完成数量 FLOAT;
DECLARE @最终完成数量 FLOAT;
DECLARE @数量差 FLOAT;
DECLARE @录工票人员编号 INT;
DECLARE @工位号 NVARCHAR(100);
DECLARE @设备流水号 INT;
DECLARE @完成过程流水号 INT;
DECLARE @设备号 NVARCHAR(100);
DECLARE @整修记录id INT;
DECLARE @整修方案 NVARCHAR(1000);
DECLARE @Safe计价方式 NVARCHAR(20);
DECLARE @单件工价 DECIMAL(18, 4);
DECLARE @单时工价 DECIMAL(18, 4);
DECLARE @是否修改加工 BIT = 0;
DECLARE @是否修改整修 BIT = 0;
DECLARE @是否本过程开启事务 BIT;
SET @目标审核状态 = CASE WHEN @审核状态 IN (N'审核通过', N'已审核') THEN N'已审核' ELSE @审核状态 END;
IF @目标审核状态 NOT IN (N'已审核', N'审核不通过')
BEGIN
SELECT N'0' AS result, N'审核状态不正确' AS message;
RETURN;
END;
IF NOT EXISTS (
SELECT 1
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核'
)
BEGIN
SELECT N'0' AS result, N'该审核记录不存在或已审核' AS message;
RETURN;
END;
SELECT
@审核类型 = 审核类型,
@工序流水号 = 工序流水号,
@原完成数量 = ISNULL(完成数量, 0),
@录工票人员编号 = 录工票人员编号,
@工位号 = 工位号,
@设备号 = 设备号,
@整修记录id = 整修记录id,
@整修方案 = ISNULL(@审核整修方案, 整修方案),
@Safe计价方式 = ISNULL(NULLIF(@计价方式, N''), ISNULL(NULLIF(计价方式, N''), N'计件')),
@单时工价 = ISNULL(单时工价, 0)
FROM [dbo].[MES_机加工MES_加工完成整修审核表]
WHERE id = @审核流水号
AND 审核状态 = N'待审核';
IF @Safe计价方式 NOT IN (N'计件', N'计时')
SET @Safe计价方式 = N'计件';
SET @最终完成数量 = ISNULL(@审核完成数量, @原完成数量);
SET @数量差 = ISNULL(@最终完成数量, 0) - ISNULL(@原完成数量, 0);
SET @是否修改加工 = CASE
WHEN @目标审核状态 = N'已审核'
AND @审核类型 = N'加工完成'
AND (@审核完成数量 IS NOT NULL OR @审核加工开始时间 IS NOT NULL OR @审核加工完成时间 IS NOT NULL OR @计价方式 IS NOT NULL)
THEN 1 ELSE 0 END;
SET @是否修改整修 = CASE
WHEN @目标审核状态 = N'已审核'
AND @审核类型 = N'结束整修'
AND (@审核整修开始时间 IS NOT NULL OR @审核整修结束时间 IS NOT NULL OR @审核整修方案 IS NOT NULL)
THEN 1 ELSE 0 END;
IF @是否修改加工 = 1 AND (@最终完成数量 < 0 OR @最终完成数量 <> FLOOR(@最终完成数量))
BEGIN
SELECT N'0' AS result, N'完成数量必须为大于等于 0 的整数' AS message;
RETURN;
END;
SELECT TOP 1 @单件工价 = CASE
WHEN ISNULL(price.[单件工价], 0) <> 0 THEN price.[单件工价]
ELSE ISNULL(price.[最终单价(元/件)], 0)
END
FROM [dbo].[车间生产管理工艺_工序工价] price
WHERE price.工序流水号 = @工序流水号
AND ISNULL(price.是否启用, 1) = 1
ORDER BY ISNULL(price.生效日期, CONVERT(DATE, '1900-01-01')) DESC, price.修改时间 DESC, price.工价流水号 DESC;
SET @单件工价 = ISNULL(@单件工价, 0);
SET @单时工价 = ISNULL(@单时工价, 0);
BEGIN TRY
SET @是否本过程开启事务 = CASE WHEN @@TRANCOUNT = 0 THEN 1 ELSE 0 END;
IF @是否本过程开启事务 = 1
BEGIN TRAN;
ELSE
SAVE TRAN 生产完成审核保存点;
IF @是否修改加工 = 1
BEGIN
SELECT @设备流水号 = [设备流水号]
FROM [dbo].[基础数据_设备工位点检表]
WHERE [工位号] = @工位号;
SELECT TOP 1 @完成过程流水号 = [完成过程流水号]
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE [工序流水号] = @工序流水号
AND [录工票人员编号] = @录工票人员编号
AND [工位号] = @工位号
AND [完成数量] = @原完成数量
ORDER BY [完成过程流水号] DESC;
IF @完成过程流水号 IS NULL
BEGIN
SELECT TOP 1 @完成过程流水号 = [完成过程流水号]
FROM [dbo].[设备管理_零件工序_工序完成过程情况]
WHERE [工序流水号] = @工序流水号
AND [录工票人员编号] = @录工票人员编号
AND [工位号] = @工位号
ORDER BY [完成过程流水号] DESC;
END;
IF @完成过程流水号 IS NULL
BEGIN
IF @是否本过程开启事务 = 1 ROLLBACK TRAN ELSE ROLLBACK TRAN 生产完成审核保存点;
SELECT N'0' AS result, N'未找到对应生产完成记录' AS message;
RETURN;
END;
UPDATE [dbo].[设备管理_零件工序_工序完成过程情况]
SET [完成数量] = @最终完成数量,
[加工开始时间] = ISNULL(@审核加工开始时间, [加工开始时间]),
[加工完成时间] = ISNULL(@审核加工完成时间, [加工完成时间]),
[完成日期] = CASE WHEN @审核加工完成时间 IS NULL THEN [完成日期] ELSE CONVERT(DATE, @审核加工完成时间) END,
[操作日期] = ISNULL(@审核加工完成时间, [操作日期]),
[计价方式] = @Safe计价方式,
[单件工价] = @单件工价,
[单时工价] = CASE WHEN @Safe计价方式 = N'计时' THEN ISNULL([单时工价], @单时工价) ELSE 0 END,
[修改人员] = CASE WHEN ISNUMERIC(@审核人) = 1 THEN CAST(@审核人 AS INT) ELSE [修改人员] END,
[修改时间] = GETDATE()
WHERE [完成过程流水号] = @完成过程流水号;
IF ISNULL(@数量差, 0) <> 0
BEGIN
UPDATE [dbo].[车间生产管理工艺_零件工序]
SET [完成数量] = ISNULL([完成数量], 0) + @数量差
WHERE [工序流水号] = @工序流水号;
UPDATE [dbo].[车间生产管理工艺_零件工序_任务分配]
SET [加工数量] = ISNULL([加工数量], 0) + @数量差
WHERE [工序流水号] = @工序流水号
AND [人员编号] = @录工票人员编号
AND [设备流水号] = @设备流水号;
END;
IF @审核加工完成时间 IS NOT NULL
BEGIN
UPDATE [dbo].[车间生产管理工艺_零件工序]
SET [完成日期] = @审核加工完成时间
WHERE [工序流水号] = @工序流水号;
END;
END;
IF @是否修改整修 = 1
BEGIN
UPDATE [dbo].[设备管理_整修]
SET [整修开始时间] = CASE WHEN @审核整修开始时间 IS NULL THEN [整修开始时间] ELSE CONVERT(VARCHAR(20), @审核整修开始时间, 120) END,
[整修结束时间] = CASE WHEN @审核整修结束时间 IS NULL THEN [整修结束时间] ELSE CONVERT(VARCHAR(20), @审核整修结束时间, 120) END,
[整修方案] = @整修方案
WHERE [id] = @整修记录id
AND [设备号] = @设备号;
END;
UPDATE [dbo].[MES_机加工MES_加工完成整修审核表]
SET [审核状态] = @目标审核状态,
[审核人] = @审核人,
[审核时间] = GETDATE(),
[审核意见] = ISNULL(@审核意见, N''),
[完成数量] = CASE WHEN @是否修改加工 = 1 THEN @最终完成数量 ELSE [完成数量] END,
[开始时间] = CASE
WHEN @是否修改加工 = 1 AND @审核加工开始时间 IS NOT NULL THEN @审核加工开始时间
WHEN @是否修改整修 = 1 AND @审核整修开始时间 IS NOT NULL THEN @审核整修开始时间
ELSE [开始时间]
END,
[结束时间] = CASE
WHEN @是否修改加工 = 1 AND @审核加工完成时间 IS NOT NULL THEN @审核加工完成时间
WHEN @是否修改整修 = 1 AND @审核整修结束时间 IS NOT NULL THEN @审核整修结束时间
ELSE [结束时间]
END,
[整修方案] = CASE WHEN @是否修改整修 = 1 THEN @整修方案 ELSE [整修方案] END,
[计价方式] = CASE WHEN @是否修改加工 = 1 THEN @Safe计价方式 ELSE [计价方式] END,
[单件工价] = CASE WHEN @是否修改加工 = 1 THEN @单件工价 ELSE [单件工价] END,
[单时工价] = CASE WHEN @是否修改加工 = 1 THEN @单时工价 ELSE [单时工价] END,
[修改人] = N'Ld',
[修改时间] = GETDATE()
WHERE [id] = @审核流水号
AND [审核状态] = N'待审核';
IF @是否本过程开启事务 = 1
COMMIT TRAN;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
BEGIN
IF ISNULL(@是否本过程开启事务, 1) = 1
ROLLBACK TRAN;
ELSE
ROLLBACK TRAN 生产完成审核保存点;
END;
SELECT N'0' AS result, ERROR_MESSAGE() AS message;
RETURN;
END CATCH;
SELECT N'1' AS result;
END;
GO

View File

@@ -0,0 +1,81 @@
-- 物料入库组件自制件入库模块添加入库单按钮配套测试库脚本
-- 修改人:Ld 修改时间:2026-07-14 09:05:57;
ALTER PROCEDURE [dbo].[仓储管理_入库单_查询]
@类型_check bit = 0,
@类型 nvarchar(50) = null
AS
BEGIN
SET NOCOUNT ON;
-- 修改人:Ld 修改时间:2026-07-14 09:05:57; 返回订单和类型字段,并支持采购/自制件入库单筛选
SELECT
入库单.入库单流水号,
入库单.入库单号,
入库单.采购合同流水号,
入库单.采购合同号,
供应商.供应商名称,
供应商.供应商流水号,
入库单.到货数,
入库单.是否入库,
入库单.入库时间,
入库单.订单流水号,
入库单.订单号,
入库单.类型
FROM dbo.仓储管理_入库单 AS 入库单
LEFT JOIN dbo.采购管理_供应商 AS 供应商
ON 入库单.供应商流水号 = 供应商.供应商流水号
WHERE
ISNULL(@类型_check, 0) = 0
OR (
@类型 = N'自制'
AND ISNULL(入库单.类型, N'') = N'自制'
)
OR (
@类型 = N'采购'
AND ISNULL(入库单.类型, N'') <> N'自制'
);
END
GO
IF OBJECT_ID(N'dbo.trg_库存管理_自制件_入库记录_回写入库单', N'TR') IS NOT NULL
DROP TRIGGER dbo.trg_库存管理_自制件_入库记录_回写入库单;
GO
CREATE TRIGGER dbo.trg_库存管理_自制件_入库记录_回写入库单
ON dbo.库存管理_自制件_入库记录
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
-- 修改人:Ld 修改时间:2026-07-14 09:05:57; 自制件完成入库后按订单回写最近一张待入库单状态
;WITH 候选入库单 AS (
SELECT
入库单.入库单流水号,
ROW_NUMBER() OVER (
PARTITION BY 新记录.入库记录流水号
ORDER BY
CASE WHEN CONVERT(float, ISNULL(入库单.到货数, 0)) = CONVERT(float, ISNULL(新记录.实际到货数量, 0)) THEN 0 ELSE 1 END,
入库单.入库单流水号
) AS 排序号
FROM inserted AS 新记录
INNER JOIN dbo.车间生产管理_零件工艺计划_视图 AS 工艺计划
ON 新记录.工艺计划流水号 = 工艺计划.工艺计划流水号
INNER JOIN dbo.仓储管理_入库单 AS 入库单
ON 入库单.订单流水号 = CONVERT(nvarchar(100), 工艺计划.订单流水号)
AND ISNULL(入库单.类型, N'') = N'自制'
AND ISNULL(入库单.是否入库, 0) = 0
)
UPDATE 入库单
SET
入库单.是否入库 = 1,
入库单.入库时间 = GETDATE()
FROM dbo.仓储管理_入库单 AS 入库单
INNER JOIN 候选入库单 AS 候选
ON 入库单.入库单流水号 = 候选.入库单流水号
WHERE 候选.排序号 = 1;
END
GO
-- 修改人:Ld 修改时间:2026-07-14 09:05:57;