Files
old_jintiantongye_wms/db/数据库更新20171016.sql
2025-09-12 17:30:18 +08:00

96 lines
6.5 KiB
Transact-SQL
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 [ASRS_WXZD_JYMH_CPK]
GO
/****** Object: StoredProcedure [dbo].[p_lockCell] Script Date: 2017/10/16 星期一 16:26:27 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROC [dbo].[p_lockCell]
@ckdm type_ck,
@kwbh type_kwbh,
@wzzl CHAR(1), --'M'=物料, 'P'=成品
@zlbh INT,
@kczs type_sl = NULL -- 锁定库位上预期的库存总数。我们用"库存总数"当时戳处理。
-- 由于一个用户提取可用库位到最终使用该库位的过程中可能被其它用户使用,
-- 这样就会引起错误,尤其是满货位入库。我们对此情况可以进行如下判定:如果被其它用户
-- 使用了,则库位上的总库存数量会发生改变,则某个用户锁定该库位时,锁定前获得的库位库存数
-- 就不会等于锁定时库位上的当前库存数
, @p_suolx BIT = NULL -- 增加锁类型代码
--WITH ENCRYPTION
AS
/**
* 锁定指定库位。
*
* Created by 蒋智湘 ON 05-06-23
* Modified by 蒋智湘 ON 2007-03-09 增加锁类型参数,并调整内部代码,以便正确记录上锁的类型
* Modified by jzx on 2009-5-4 当@wzzl='M'时目标库位上的sfwwzl可以='T'
* Modified by jzx on 2011-7-21 RAISERROR中小数部分替代改用字符串%d只能用于整数
* Modified by jzx on 2013-12-25 增加三个sfyx=1筛选条件
* Modified by jzx on 2015-1-2 仅对入库锁对比当前库存和参数库存差异。一个库位多次安排出库时,参数传递的库存数不
* 一定是kwjbxx.zsl字段值但这是允许的。
* Modified by jzx on 2015-9-17 去除参数@ckdm的引用因为kwjbxx表的关键字段是单个字段kwbh不是以前的ckdm+kwbh;
* 增加对参数@wzzl值的有效性检查
* Modified by jzx on 2016-4-22 允许给xnkw字段值为3的库位上锁。
* Modified by jzx on 2016-7-25 不允许给xnkw字段值为3的库位上入库锁。
* Modified by jzx on 2016-12-23 386比亚迪因为不存在拣选出库和追加入库锁类型即时相同也不允许再上锁
* Modified by jzx on 2017-9-27 sfwzzl字段值比较时仅对于zsl>0有效
* Modified by jzx on 2017-10-16 出库锁可以不限制
*/
IF @kwbh IS NOT NULL
BEGIN
SET NOCOUNT ON;
-- 不给虚拟货位/扩展库位上锁
IF EXISTS(SELECT 2 FROM kwjbxx WHERE kwbh=@kwbh AND sfyx=1 AND xnkw NOT IN(0,3))
RETURN;
IF (@p_suolx = 1) -- 对于入库锁xnkw字段值为3的不上锁
BEGIN
IF EXISTS(SELECT 2 FROM kwjbxx WHERE kwbh = @kwbh AND xnkw=3)
RETURN;
END;
IF @wzzl IS NULL OR (@wzzl <> 'M' AND @wzzl <> 'T')
BEGIN
RAISERROR('无效的参数@wzzl的值%s', 16, 1, @wzzl);
RETURN;
END;
UPDATE kwjbxx SET sfsd = @zlbh, suolx = @p_suolx
WHERE kwbh = @kwbh
AND (zsl = ISNULL(@kczs, 0) OR @p_suolx=0)
AND (sfsd = 0 OR sfsd = @zlbh/* OR suolx = @p_suolx */ OR xnkw=3 OR (suolx=0))
AND (sfwzzl IS NULL OR sfwzzl = @wzzl OR zsl=0 OR (@wzzl = 'M' AND sfwzzl = 'T'))
AND sfyx = 1;
IF @@ROWCOUNT = 0
BEGIN
DECLARE @sbh INT
, @sfwzzl CHAR(1), @v_suolx TINYINT
, @zsl varchar(30), @v_suolxmc NVARCHAR(10)
SELECT @sbh = sfsd, @sfwzzl = sfwzzl, @zsl = zsl, @v_suolx = ISNULL(suolx, 2),
@v_suolxmc = CASE sfsd WHEN 1 THEN '人工锁' WHEN -2 THEN '故障锁' ELSE (
CASE suolx WHEN 1 THEN '入库锁' WHEN 0 THEN '出库锁' ELSE '' END) END
FROM kwjbxx
WHERE kwbh = @kwbh AND sfyx=1;
IF @sbh<>0 AND @zlbh<>@sbh AND @p_suolx!=0
RAISERROR ('库位%s已被锁定(锁编号:%d 锁类型:%s)', 16, 1, @kwbh, @sbh, @v_suolxmc);
ELSE IF @sfwzzl <> @wzzl
RAISERROR ('不能在一个库位[%s]上混放物料和空盘 %s', 16, 1, @kwbh, @wzzl);
ELSE IF @zsl <> @kczs AND @p_suolx=1
BEGIN
DECLARE @v_zslStr VARCHAR(20);
DECLARE @v_kczsStr VARCHAR(20);
SET @v_zslStr = CAST(@zsl AS VARCHAR(20));
SET @v_kczsStr = CAST(@kczs AS VARCHAR(20));
RAISERROR ('操作期间库位已经被其他用户使用,当前库存:%s而您请求时的预期库存%s', 16, 1, @v_zslStr, @v_kczsStr);
END
ELSE
BEGIN
RAISERROR ('未定义库位%s', 16, 1, @kwbh);
END
END
END
GO
update kwjbxx set 可放入实物托盘个数=2 WHERE xnkw=0
go