IF OBJECT_ID(N'dbo.仓储管理_入库记录_退货入库_验证', N'P') IS NOT NULL DROP PROCEDURE dbo.仓储管理_入库记录_退货入库_验证 GO CREATE PROCEDURE dbo.仓储管理_入库记录_退货入库_验证 @物料流水号 INT = NULL, @退货数量 FLOAT = NULL, @是否采购 INT = NULL, @采购合同明细流水号 INT = NULL, @批号 INT = NULL, @入库时间 DATETIME = NULL, @入库记录流水号 INT = NULL AS BEGIN SET NOCOUNT ON; DECLARE @货位存量 FLOAT; DECLARE @图号 NVARCHAR(50); DECLARE @名称 NVARCHAR(50); DECLARE @库位 NVARCHAR(50); DECLARE @货位流水号 INT; SELECT @名称 = 名称, @图号 = 代号, @库位 = 库位 FROM dbo.库存管理_物料主文件_基本 WHERE 物料流水号 = @物料流水号; SELECT @货位流水号 = 货位流水号 FROM dbo.库存管理_外购件_入库记录 WHERE 入库记录流水号 = @入库记录流水号; SET @图号 = RIGHT(ISNULL(@图号, N''), 2); SET @名称 = LEFT(ISNULL(@名称, N''), 2); IF @名称 = N'主轴' BEGIN SELECT @货位存量 = ISNULL(MAX(货位存量), 0) FROM dbo.库存管理_物料与货位对照表 WHERE 物料流水号 = @物料流水号 AND 采购合同明细流水号 = @采购合同明细流水号 AND 是否采购 = @是否采购 AND (@货位流水号 IS NULL OR 货位流水号 = @货位流水号) AND (@批号 IS NULL OR 批号 = @批号); END ELSE BEGIN SELECT @货位存量 = ISNULL(MAX(货位存量), 0) FROM dbo.库存管理_物料与货位对照表 WHERE 物料流水号 = @物料流水号 AND 采购合同明细流水号 = @采购合同明细流水号 AND 是否采购 = @是否采购 AND (@货位流水号 IS NULL OR 货位流水号 = @货位流水号); IF ISNULL(@货位存量, 0) < ISNULL(@退货数量, 0) AND (@图号 = N'MP' OR @库位 = N'毛坯库') BEGIN SELECT @货位存量 = ISNULL(MAX(货位存量), 0) FROM dbo.库存管理_物料与货位对照表 WHERE 物料流水号 = @物料流水号 AND 采购合同明细流水号 IS NULL AND 是否采购 IS NULL AND (@货位流水号 IS NULL OR 货位流水号 = @货位流水号); END; END; IF ISNULL(@退货数量, 0) > ISNULL(@货位存量, 0) SELECT 0 AS 数值; ELSE SELECT 1 AS 数值; END GO IF OBJECT_ID(N'dbo.仓储管理_入库记录_退货入库', N'P') IS NOT NULL DROP PROCEDURE dbo.仓储管理_入库记录_退货入库 GO CREATE PROCEDURE dbo.仓储管理_入库记录_退货入库 @物料流水号 INT = NULL, @退货数量 FLOAT = NULL, @退货原因 NVARCHAR(500) = NULL, @入库记录流水号 INT = NULL, @退货人 INT = NULL, @采购合同流水号 INT = NULL, @供应商流水号 INT = NULL, @是否采购 INT = NULL, @采购合同明细流水号 INT = NULL, @批号 INT = NULL, @组件流水号 INT = NULL, @采购合同 NVARCHAR(50) = NULL, @供应商 NVARCHAR(500) = NULL, @物料名称 NVARCHAR(500) = NULL, @图号或型号 NVARCHAR(500) = NULL, @物料编码 NVARCHAR(50) = NULL, @单位 NVARCHAR(50) = NULL, @类型 NVARCHAR(50) = NULL, @入库时间 DATETIME, @库存 FLOAT = NULL AS BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; DECLARE @图号 NVARCHAR(50); DECLARE @名称 NVARCHAR(50); DECLARE @入库货位流水号 INT; DECLARE @影响行数 INT; BEGIN TRY BEGIN TRANSACTION; SELECT @入库货位流水号 = 货位流水号 FROM dbo.库存管理_外购件_入库记录 WHERE 入库记录流水号 = @入库记录流水号; INSERT INTO dbo.仓储管理_入库记录_退货记录表 (退货数量, 退货原因, 供应商流水号, 退货人流水号, 退货时间, 采购合同流水号, 入库记录流水号, 是否采购, 采购合同, 供应商, 类型, 物料名称, 图号或型号, 物料编码, 单位) VALUES (@退货数量, @退货原因, @供应商流水号, @退货人, GETDATE(), @采购合同流水号, @入库记录流水号, @是否采购, @采购合同, @供应商, @类型, @物料名称, @图号或型号, @物料编码, @单位); UPDATE dbo.库存管理_外购件累计库存 SET 累计库存 = ISNULL(累计库存, 0) - @退货数量 WHERE 物料流水号 = @物料流水号; SELECT @名称 = 名称, @图号 = 代号 FROM dbo.库存管理_物料主文件_基本 WHERE 物料流水号 = @物料流水号; SET @图号 = LEFT(ISNULL(@图号, N''), 2); SET @名称 = LEFT(ISNULL(@名称, N''), 2); SET @影响行数 = 0; IF @名称 = N'主轴' BEGIN UPDATE dbo.库存管理_物料与货位对照表 SET 货位存量 = 货位存量 - @退货数量 WHERE 物料流水号 = @物料流水号 AND 采购合同明细流水号 = @采购合同明细流水号 AND 是否采购 = @是否采购 AND (@入库货位流水号 IS NULL OR 货位流水号 = @入库货位流水号) AND CONVERT(VARCHAR(10), @入库时间, 23) = CONVERT(VARCHAR(10), 操作日期, 23) AND 批号 = @批号 AND ISNULL(货位存量, 0) >= @退货数量; SET @影响行数 = @@ROWCOUNT; END ELSE BEGIN IF @图号 = N'MP' BEGIN UPDATE dbo.库存管理_物料与货位对照表 SET 货位存量 = 货位存量 - @退货数量 WHERE 物料流水号 = @物料流水号 AND (@入库货位流水号 IS NULL OR 货位流水号 = @入库货位流水号) AND 采购合同明细流水号 IS NULL AND 是否采购 IS NULL AND ISNULL(货位存量, 0) >= @退货数量; SET @影响行数 = @@ROWCOUNT; END ELSE BEGIN UPDATE dbo.库存管理_物料与货位对照表 SET 货位存量 = 货位存量 - @退货数量 WHERE 物料流水号 = @物料流水号 AND 采购合同明细流水号 = @采购合同明细流水号 AND 是否采购 = @是否采购 AND (@入库货位流水号 IS NULL OR 货位流水号 = @入库货位流水号) AND CONVERT(VARCHAR(10), @入库时间, 23) = CONVERT(VARCHAR(10), 操作日期, 23) AND ISNULL(货位存量, 0) >= @退货数量; SET @影响行数 = @@ROWCOUNT; END; END; IF @影响行数 = 0 BEGIN RAISERROR(N'库存盘点对应库位库存不足或未找到对应库存记录', 16, 1); END; UPDATE dbo.库存管理_外购件_入库记录 SET 实际到货数量 = 实际到货数量 - @退货数量, 退货数量 = ISNULL(退货数量, 0) + @退货数量 WHERE 入库记录流水号 = @入库记录流水号; IF @名称 = N'主轴' UPDATE dbo.采购管理_采购批次 SET 已到数 = 已到数 - @退货数量 WHERE 采购合同明细流水号 = @采购合同明细流水号 AND 批号 = @批号; IF @是否采购 = 1 BEGIN UPDATE dbo.采购管理_采购合同明细 SET 已到货数量 = 已到货数量 - @退货数量, 到货日期 = NULL WHERE 采购合同明细流水号 = @采购合同明细流水号; UPDATE dbo.采购管理_采购合同 SET 是否到货 = 1 WHERE 采购合同流水号 = @采购合同流水号; END ELSE BEGIN UPDATE dbo.采购管理_耗材采购合同明细 SET 已到货数量 = ISNULL(已到货数量, 0) - @退货数量, 到货日期 = NULL WHERE 采购合同明细流水号 = @采购合同明细流水号; UPDATE dbo.采购管理_采购合同 SET 是否到货 = 1 WHERE 采购合同流水号 = @采购合同流水号; END; DECLARE @订单类型 INT; DECLARE @订单流水号 INT; DECLARE @组件采购 INT; SELECT @订单流水号 = 订单流水号, @订单类型 = 订单类型, @组件采购 = 组件采购 FROM dbo.PDM_组件名称_视图 WHERE 组件流水号 = @组件流水号; IF @订单类型 = 3 BEGIN UPDATE dbo.合同管理_订单信息_基础表 SET 是否提交 = 3, 入库日期 = NULL WHERE 订单流水号 = @订单流水号; UPDATE dbo.库存管理_外购件累计库存 SET 补货中 = ISNULL(补货中, 0) + @退货数量 WHERE 物料流水号 = @物料流水号; END; IF @订单类型 = 1 AND @组件采购 = 1 BEGIN UPDATE dbo.PDM_组件名称 SET 产品状态 = 2 WHERE 组件流水号 = @组件流水号; END; COMMIT TRANSACTION; SELECT '1' AS result; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; SELECT '0' AS result, ERROR_MESSAGE() AS msg; END CATCH; END GO IF OBJECT_ID(N'dbo.仓储管理_自制件入库记录_退货入库', N'P') IS NOT NULL DROP PROCEDURE dbo.仓储管理_自制件入库记录_退货入库 GO CREATE PROCEDURE dbo.仓储管理_自制件入库记录_退货入库 @物料流水号 INT = NULL, @退货数量 FLOAT = NULL, @退货原因 NVARCHAR(500) = NULL, @入库记录流水号 INT = NULL, @退货人 INT = NULL, @组件流水号 INT = NULL, @入库时间 DATETIME, @批号 NVARCHAR(50) AS BEGIN SET NOCOUNT ON; SET XACT_ABORT ON; DECLARE @工艺计划流水号 INT; DECLARE @名称 NVARCHAR(50); DECLARE @入库货位流水号 INT; DECLARE @影响行数 INT; BEGIN TRY BEGIN TRANSACTION; SELECT @工艺计划流水号 = 工艺计划流水号, @入库货位流水号 = 货位流水号 FROM dbo.库存管理_自制件_入库记录 WHERE 入库记录流水号 = @入库记录流水号; INSERT INTO dbo.仓储管理_自制件入库记录_退货记录表 (退货数量, 退货原因, 退货人流水号, 退货时间, 入库记录流水号) VALUES (@退货数量, @退货原因, @退货人, GETDATE(), @入库记录流水号); UPDATE dbo.库存管理_外购件累计库存 SET 累计库存 = ISNULL(累计库存, 0) - @退货数量 WHERE 物料流水号 = @物料流水号; SELECT @名称 = 名称 FROM dbo.库存管理_物料主文件_基本 WHERE 物料流水号 = @物料流水号; SET @名称 = LEFT(ISNULL(@名称, N''), 2); IF @名称 = N'主轴' BEGIN UPDATE dbo.库存管理_物料与货位对照表 SET 货位存量 = 货位存量 - @退货数量 WHERE 物料流水号 = @物料流水号 AND 工艺计划流水号 = @工艺计划流水号 AND (@入库货位流水号 IS NULL OR 货位流水号 = @入库货位流水号) AND CONVERT(VARCHAR(10), @入库时间, 23) = CONVERT(VARCHAR(10), 操作日期, 23) AND 批号 = @批号 AND ISNULL(货位存量, 0) >= @退货数量; END ELSE BEGIN UPDATE dbo.库存管理_物料与货位对照表 SET 货位存量 = 货位存量 - @退货数量 WHERE 物料流水号 = @物料流水号 AND 工艺计划流水号 = @工艺计划流水号 AND (@入库货位流水号 IS NULL OR 货位流水号 = @入库货位流水号) AND CONVERT(VARCHAR(10), @入库时间, 23) = CONVERT(VARCHAR(10), 操作日期, 23) AND ISNULL(货位存量, 0) >= @退货数量; END; SET @影响行数 = @@ROWCOUNT; IF @影响行数 = 0 BEGIN RAISERROR(N'库存盘点对应库位库存不足或未找到对应库存记录', 16, 1); END; UPDATE dbo.库存管理_自制件_入库记录 SET 实际到货数量 = 实际到货数量 - @退货数量, 退货数量 = ISNULL(退货数量, 0) + @退货数量 WHERE 入库记录流水号 = @入库记录流水号; IF @名称 = N'主轴' UPDATE dbo.车间生产工艺管理_零件批次 SET 入库数 = 入库数 - @退货数量 WHERE 工艺计划流水号 = @工艺计划流水号 AND 批号 = @批号; UPDATE dbo.车间生产管理工艺_零件工艺计划 SET 考核状态 = 3, 入库数量 = 入库数量 - @退货数量 WHERE 工艺计划流水号 = @工艺计划流水号; DECLARE @订单类型 INT; DECLARE @订单流水号 INT; DECLARE @组件车间 INT; SELECT @订单流水号 = 订单流水号, @订单类型 = 订单类型, @组件车间 = 组件精工车间 FROM dbo.PDM_组件名称_视图 WHERE 组件流水号 = @组件流水号; IF @订单类型 = 3 BEGIN UPDATE dbo.合同管理_订单信息_基础表 SET 是否提交 = 3, 入库日期 = NULL WHERE 订单流水号 = @订单流水号; UPDATE dbo.库存管理_外购件累计库存 SET 补货中 = ISNULL(补货中, 0) + @退货数量 WHERE 物料流水号 = @物料流水号; END; IF @订单类型 = 1 AND @组件车间 = 1 BEGIN UPDATE dbo.PDM_组件名称 SET 产品状态 = 2 WHERE 组件流水号 = @组件流水号; END; COMMIT TRANSACTION; SELECT '1' AS result; END TRY BEGIN CATCH IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; SELECT '0' AS result, ERROR_MESSAGE() AS msg; END CATCH; END GO