-- 盘点流程增强:盘点明细关联库存明细,支持盘点出库/PDA盘点/盘点回库/差异审核。 -- 可重复执行;请先在 FTC25009-WMS 的测试库验证后再上生产。 IF COL_LENGTH('dbo.pd_stockpd_detail', 'stock_id') IS NULL ALTER TABLE dbo.pd_stockpd_detail ADD stock_id nvarchar(80) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail', 'stock_detail_id') IS NULL ALTER TABLE dbo.pd_stockpd_detail ADD stock_detail_id nvarchar(80) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail', 'cargo_space_id') IS NULL ALTER TABLE dbo.pd_stockpd_detail ADD cargo_space_id nvarchar(80) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail', 'cargo_space_name') IS NULL ALTER TABLE dbo.pd_stockpd_detail ADD cargo_space_name nvarchar(255) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail', 'warehouse_id') IS NULL ALTER TABLE dbo.pd_stockpd_detail ADD warehouse_id nvarchar(80) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail', 'warehouse_name') IS NULL ALTER TABLE dbo.pd_stockpd_detail ADD warehouse_name nvarchar(255) NULL; IF OBJECT_ID('dbo.pd_stockpd_detail_finish', 'U') IS NOT NULL BEGIN IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'stock_id') IS NULL ALTER TABLE dbo.pd_stockpd_detail_finish ADD stock_id nvarchar(80) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'stock_detail_id') IS NULL ALTER TABLE dbo.pd_stockpd_detail_finish ADD stock_detail_id nvarchar(80) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'cargo_space_id') IS NULL ALTER TABLE dbo.pd_stockpd_detail_finish ADD cargo_space_id nvarchar(80) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'cargo_space_name') IS NULL ALTER TABLE dbo.pd_stockpd_detail_finish ADD cargo_space_name nvarchar(255) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'warehouse_id') IS NULL ALTER TABLE dbo.pd_stockpd_detail_finish ADD warehouse_id nvarchar(80) NULL; IF COL_LENGTH('dbo.pd_stockpd_detail_finish', 'warehouse_name') IS NULL ALTER TABLE dbo.pd_stockpd_detail_finish ADD warehouse_name nvarchar(255) NULL; END; EXEC(N' UPDATE pdd SET pdd.stock_id = bsd.stock_id, pdd.stock_detail_id = bsd.detail_id, pdd.cargo_space_id = bs.cargo_space_id, pdd.cargo_space_name = bcs.cargo_space_name, pdd.warehouse_id = bs.warehouse_id, pdd.warehouse_name = ISNULL(NULLIF(bs.warehouse_name, ''''), bw.warehouse_name) FROM dbo.pd_stockpd_detail pdd INNER JOIN dbo.bas_stock bs ON bs.tray_code = pdd.tray_code INNER JOIN dbo.bas_stock_detail bsd ON bsd.stock_id = bs.stock_id AND bsd.product_id = pdd.product_id LEFT JOIN dbo.bas_cargo_space bcs ON bcs.cargo_space_id = bs.cargo_space_id LEFT JOIN dbo.bas_warehouse bw ON bw.warehouse_id = bs.warehouse_id WHERE (pdd.stock_detail_id IS NULL OR pdd.stock_detail_id = '''') AND ISNULL(bsd.quantity, 0) > 0 '); IF OBJECT_ID('dbo.pd_stockpd_detail_finish', 'U') IS NOT NULL BEGIN EXEC(N' UPDATE pdd SET pdd.stock_id = bsd.stock_id, pdd.stock_detail_id = bsd.detail_id, pdd.cargo_space_id = bs.cargo_space_id, pdd.cargo_space_name = bcs.cargo_space_name, pdd.warehouse_id = bs.warehouse_id, pdd.warehouse_name = ISNULL(NULLIF(bs.warehouse_name, ''''), bw.warehouse_name) FROM dbo.pd_stockpd_detail_finish pdd INNER JOIN dbo.bas_stock bs ON bs.tray_code = pdd.tray_code INNER JOIN dbo.bas_stock_detail bsd ON bsd.stock_id = bs.stock_id AND bsd.product_id = pdd.product_id LEFT JOIN dbo.bas_cargo_space bcs ON bcs.cargo_space_id = bs.cargo_space_id LEFT JOIN dbo.bas_warehouse bw ON bw.warehouse_id = bs.warehouse_id WHERE (pdd.stock_detail_id IS NULL OR pdd.stock_detail_id = '''') AND ISNULL(bsd.quantity, 0) > 0 '); END; IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_pd_stockpd_detail_stock_detail_id' AND object_id = OBJECT_ID('dbo.pd_stockpd_detail')) EXEC(N'CREATE INDEX IX_pd_stockpd_detail_stock_detail_id ON dbo.pd_stockpd_detail(stock_detail_id)'); IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_pd_stockpd_detail_stock_id' AND object_id = OBJECT_ID('dbo.pd_stockpd_detail')) EXEC(N'CREATE INDEX IX_pd_stockpd_detail_stock_id ON dbo.pd_stockpd_detail(stock_id)'); IF OBJECT_ID('dbo.pd_stockpd_detail_finish', 'U') IS NOT NULL BEGIN IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE name = 'IX_pd_stockpd_detail_finish_stock_detail_id' AND object_id = OBJECT_ID('dbo.pd_stockpd_detail_finish')) EXEC(N'CREATE INDEX IX_pd_stockpd_detail_finish_stock_detail_id ON dbo.pd_stockpd_detail_finish(stock_detail_id)'); END;