102 lines
4.2 KiB
Transact-SQL
102 lines
4.2 KiB
Transact-SQL
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
|