Files
JY1.0/sql/修复_MK202608070966_BOM数量_20260812.sql

102 lines
4.2 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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