147 lines
3.8 KiB
Transact-SQL
147 lines
3.8 KiB
Transact-SQL
CREATE PROCEDURE [dbo].[车间生产管理工艺_零件工序_取消派工]
|
|
@工艺任务流水号 INT = NULL,
|
|
@工序流水号 INT = NULL,
|
|
@数量 INT = NULL,
|
|
@退货人 INT = NULL,
|
|
@订单流水号 INT = NULL
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
SET XACT_ABORT ON;
|
|
|
|
DECLARE @工艺计划流水号 INT;
|
|
DECLARE @任务数量 FLO
|
|
AT;
|
|
DECLARE @加工数量 INT;
|
|
DECLARE @是否加工中 INT;
|
|
DECLARE @图号 NVARCHAR(50);
|
|
DECLARE @物料名称 NVARCHAR(50);
|
|
DECLARE @物料流水号 INT;
|
|
DECLARE @出库记录流水号 INT;
|
|
DECLARE @匹配出库记录数 INT;
|
|
DECLARE @n INT = 0;
|
|
|
|
BEGIN TRY
|
|
BEGIN TRANSACTION;
|
|
|
|
|
|
SELECT
|
|
@任务数量 = 数量,
|
|
@加工数量 = ISNULL(加工数量, 0),
|
|
@是否加工中 = ISNULL(是否加工中, 0)
|
|
FROM dbo.车间生产管理工艺_零件工序_任务分配 WITH (UPDLOCK, HOLDLOCK)
|
|
WHERE 工艺任务流水号 = @工艺任务流水号
|
|
AND 工序流水号 = @工序流水号;
|
|
|
|
IF @任务数
|
|
量 IS NULL
|
|
BEGIN
|
|
RAISERROR(N'派工任务不存在或已取消', 16, 1);
|
|
END;
|
|
|
|
IF @加工数量 > 0 OR @是否加工中 > 0
|
|
BEGIN
|
|
RAISERROR(N'零件已加工或加工中,不能取消派工', 16, 1);
|
|
END;
|
|
|
|
IF ISNULL(@任务数量, 0) <= 0
|
|
BEGIN
|
|
|
|
RAISERROR(N'派工数量异常,不能取消派工', 16, 1);
|
|
END;
|
|
|
|
SELECT @工艺计划流水号 = 工艺计划流水号
|
|
FROM dbo.车间生产管理工艺_零件工序
|
|
WHERE 工序流水号 = @工序流水号;
|
|
|
|
SELECT
|
|
@图号 = RTRIM(LTRIM(零件图号)) + N'MP',
|
|
@物料名称 = 零件名称 + N'MP'
|
|
FROM
|
|
dbo.车间生产管理_零件工艺计划_视图
|
|
WHERE 工艺计划流水号 = @工艺计划流水号;
|
|
|
|
SELECT @物料流水号 = 物料流水号
|
|
FROM dbo.库存管理_物料主文件_基本
|
|
WHERE RTRIM(LTRIM(代号)) = @图号
|
|
AND RTRIM(LTRIM(名称)) = @物料名称
|
|
AND ISNULL(是否禁用, 0) = 0;
|
|
|
|
IF @物料流水号 IS NOT N
|
|
ULL
|
|
BEGIN
|
|
SELECT
|
|
@匹配出库记录数 = COUNT(*),
|
|
@出库记录流水号 = MAX(出库记录流水号)
|
|
FROM dbo.库存管理_物料出库_出库记录 WITH (UPDLOCK, HOLDLOCK)
|
|
WHERE 物料流水号 = @物料流水号
|
|
AND 订单流水号 = @订单流水号
|
|
|
|
AND ISNULL(出库数量, 0) - ISNULL(退料数量, 0) >= @任务数量;
|
|
|
|
IF ISNULL(@匹配出库记录数, 0) > 1
|
|
BEGIN
|
|
RAISERROR(N'同一订单同一毛坯存在多条可退出库记录,请先人工确认出库记录', 16, 1);
|
|
END;
|
|
|
|
IF ISNULL(@匹配出库记录数, 0) = 1
|
|
BEGIN
|
|
|
|
EXEC dbo.仓储管理_退料入库_执行
|
|
@出库记录流水号 = @出库记录流水号,
|
|
@退料数量 = @任务数量,
|
|
@退料人 = @退货人;
|
|
END;
|
|
END;
|
|
|
|
UPDATE dbo.车间生产管理工艺_零件工序
|
|
SET 已分配数 = ISNULL(已分配数, 0) - @任务数量
|
|
|
|
WHERE 工序流水号 = @工序流水号
|
|
AND ISNULL(已分配数, 0) >= @任务数量;
|
|
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
RAISERROR(N'工序已分配数不足,取消派工失败', 16, 1);
|
|
END;
|
|
|
|
DELETE FROM dbo.车间生产管理工艺_零件工序_任务分配
|
|
WHERE 工艺任务流水号 = @工艺任务流水号
|
|
AN
|
|
D 工序流水号 = @工序流水号;
|
|
|
|
IF @@ROWCOUNT = 0
|
|
BEGIN
|
|
RAISERROR(N'派工任务删除失败', 16, 1);
|
|
END;
|
|
|
|
SELECT @n = COUNT(*)
|
|
FROM dbo.车间生产管理工艺_零件工序_任务分配
|
|
WHERE 工序流水号 IN
|
|
(
|
|
SELECT 工序流水号
|
|
FROM
|
|
dbo.车间生产管理工艺_零件工序
|
|
WHERE 工艺计划流水号 = @工艺计划流水号
|
|
);
|
|
|
|
IF @n = 0
|
|
BEGIN
|
|
UPDATE dbo.车间生产管理工艺_零件工艺计划
|
|
SET 分配日期 = NULL
|
|
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;
|
|
|