357 lines
30 KiB
Transact-SQL
357 lines
30 KiB
Transact-SQL
/****** Object: StoredProcedure [dbo].[p_increaseInventory] Script Date: 2017/11/7 星期二 7:49:27 ******/
|
||
SET ANSI_NULLS ON
|
||
GO
|
||
SET QUOTED_IDENTIFIER ON
|
||
GO
|
||
ALTER PROCEDURE [dbo].[p_increaseInventory]
|
||
-- WITH ENCRYPTION
|
||
AS
|
||
/**
|
||
* 在多个库位上添加库存过程。
|
||
* 待加入的库存数据在临时表#inserted中。该临时表的内容在调用该过程前
|
||
* 由其他过程或触发器或其他SQL代码负责填入。
|
||
*
|
||
* Created by jzx on 2006-07-31
|
||
* Modified by jzx on 2006-12-19 在库存表中增加对供应单位字段的存储
|
||
* Modified by jzx on 2007-02-26 库位上库存总量的更新办法改成汇总库位库存总数后的值,而不是简单的递减
|
||
* Modified by jzx on 2009-4-12 保留零库位库存记录,达到记忆目的
|
||
* Modified by jzx on 2009-4-28 不再保留零库位库存记录,达到记忆目的。因为那样会出现很多零库存记录,操作者很烦
|
||
* Modified by jzx on 2010-8-8 增加对库存备注信息的存储
|
||
* Modified by jzx on 2010-9-17 删除对无效表inventory的操作
|
||
* Modified by jzx on 2011-5-4 增加对jzl和txm的存储
|
||
* Modified by jzx on 2011-5-10 取出库存表中je字段值的处理。该字段设计有问题
|
||
* Modified by jzx on 2014-10-31 删除零库存记录时,仅对inserted表操作的库位处理,而不是整个当前库存表中所有的库位
|
||
* Modified by jzx on 2015-9-17 对cpkcxx表新增字段“前批库存数”和“后批入库时间”赋值;累加前库位为0的,则入库时间也更新
|
||
* Modified by jzx on 2016-3-16 给cpkcxx表的cfwzxx字段赋值。这个字段很早就有了,只是仅386项目开始才使用
|
||
* Modified by jzx on 2016-5-13 给cpkcxx表新增字段“预约出库时间”赋值;查找库存记录时,增加txm字段匹配条件
|
||
* Modified by jzx on 2016-7-16 给cpkcxx表新增字段rkzbsj(入库准备时间)字段赋值
|
||
* Modified by jzx on 2016-9-18 增加set nocount on语句
|
||
* Modified by jzx on 2016-11-5 debug:之前停用游标操作时,用的@zlzt变量值判断新库存记录的质量状态值,改成i.zlzt;同时把变量定义都注释掉
|
||
* Modified by jzx on 2016-12-23 优化代码,使用表变量。需要按照关键字段汇总临时表#inserted;增加piz字段存储
|
||
* Modified by jzx on 2017-2-17 计算预约出库时间改用关联新表sc_StandByDuration,而不是之前的sc_gwxx
|
||
* Modified by jzx on 2017-2-18 debug: 之前没有给@cntInsert赋值,错误第给@cntUpdate赋值两遍
|
||
* Modified by jzx on 2017-10-18 给kwjbxx表上新增字段wzzls赋值
|
||
* Modified by jzx on 2017-11-7 修改kwjbxx表时,增加sl>0条件,即cprkzl表插入记录触发器增加的零库存记录不考虑。
|
||
*/
|
||
BEGIN
|
||
|
||
SET NOCOUNT ON;
|
||
|
||
DECLARE @cntAll INT, @cntUpdate INT, @cntInsert INT;
|
||
DECLARE @inserted TABLE(cpbh type_cpbh, lpxx type_ph null, ckmc type_ck, kwbh type_kwbh, zlzt CHAR(1)
|
||
, txm varchar(30) null, tpbh nvarchar(50) null
|
||
, sl type_sl, rksj datetime, cfwzxx tinyint null, rkzbsj datetime null, yycksj datetime null
|
||
, cpmc type_pm null, cpgg1 type_gg null, cpgg2 type_cz null, cpgg3 type_th null
|
||
, jldw type_jldw null, wzlb type_wzlb null
|
||
, gydw nvarchar(60) null, jhj type_dj null, jzl type_sl null, bz varchar(200) null
|
||
, piz numeric(8,3),scrq DATETIME null,hth NVARCHAR(50) null,maoz NVARCHAR(50) null,hjzt NVARCHAR(50) null
|
||
,ywy NVARCHAR(50) null,mxcc NVARCHAR(50) null,gdh NVARCHAR(50) null,yt NVARCHAR(50) null, gx NVARCHAR(50) null, scfc NVARCHAR(50) null, bc NVARCHAR(50) null
|
||
);
|
||
INSERT INTO @inserted
|
||
SELECT i.cpbh, i.lpxx, MAX(i.ckmc), i.kwbh, i.zlzt, i.txm, i.tpbh
|
||
, SUM(i.sl), MAX(i.rksj), MAX(i.cfwzxx), MAX(i.rkzbsj)
|
||
--, DATEADD(MI, CASE WHEN i.zlzt IN('9','A') THEN S.gwcs8 ELSE S.gwcs2 END, MAX(i.rksj)) AS yycksj
|
||
, DATEADD(MI, MAX(s.duration), MAX(i.rksj)) AS yycksj
|
||
|
||
, MAX(i.cpmc), MAX(i.cpgg1), MAX(i.cpgg2), MAX(i.cpgg3), MAX(jldw), MAX(i.wzlb), MAX(i.gydw), MAX(i.jhj)
|
||
, MAX(i.jzl), MAX(i.bz), MIN(i.piz),i.scrq,i.hth,i.maoz,i.hjzt,i.ywy,i.mxcc,i.gdh,i.yt,i.gx,i.scfc,i.bc
|
||
FROM #inserted i
|
||
--LEFT JOIN kwjbxx K ON i.kwbh = K.kwbh
|
||
--LEFT JOIN sc_gwxx S ON CAST(K.hdh AS VARCHAR) + '#机'=S.gwid
|
||
--GROUP BY i.kwbh,i.zlzt,i.cpbh,i.lpxx,i.txm,i.tpbh,S.gwcs8,S.gwcs2;
|
||
LEFT JOIN sc_StandByDuration s ON i.wzlb=s.wzlb AND i.zlzt=s.dczt
|
||
GROUP BY i.kwbh,i.zlzt,i.cpbh,i.lpxx,i.txm,i.tpbh,i.scrq,i.hth,i.maoz,i.hjzt,i.ywy,i.mxcc,i.gdh,i.yt,i.gx,i.scfc,i.bc
|
||
|
||
-- 首先检查库位号是否没有填写的
|
||
SELECT @cntAll = count(*) FROM @inserted WHERE kwbh IS NULL OR LEN(kwbh) = 0;
|
||
IF @cntAll > 0
|
||
BEGIN
|
||
RAISERROR('未指定有效的库位号', 16, 1);
|
||
RETURN;
|
||
END;
|
||
-- 再检查是否有记录存在。为了检查调用过程时,是否有外部程序删除了临时表记录
|
||
SELECT @cntAll = count(*) FROM @inserted;
|
||
IF @cntAll = 0
|
||
BEGIN
|
||
RAISERROR('待改动的库存记录数为0', 16, 1);
|
||
RETURN;
|
||
END;
|
||
|
||
UPDATE cpkcxx SET sl = r.sl + i.sl
|
||
, rksj = CASE WHEN r.sl<=0 THEN i.rksj ELSE r.rksj END
|
||
, jldw = i.jldw
|
||
, cpmc =i.cpmc
|
||
, cpgg1=i.cpgg1
|
||
, cpgg2=i.cpgg2
|
||
, cpgg3= i.cpgg3
|
||
, jhj =i.jhj
|
||
, wzlb = i.wzlb
|
||
, gydw = ISNULL(i.gydw, r.gydw)
|
||
, bz = ISNULL(i.bz, r.bz)
|
||
, 前批库存数=r.sl
|
||
, 后批入库时间=i.rksj
|
||
, cfwzxx = i.cfwzxx
|
||
, 预约出库时间 = i.yycksj
|
||
, rkzbsj = i.rkzbsj
|
||
, piz = i.piz
|
||
, txm = i.txm
|
||
,scrq=i.scrq
|
||
,hth=i.hth
|
||
,maoz=i.maoz
|
||
,hjzt=i.hjzt
|
||
,ywy=i.ywy
|
||
,mxcc=i.mxcc
|
||
|
||
,gdh=i.gdh
|
||
,yt=i.yt
|
||
,gx=i.gx
|
||
,scfc=i.scfc
|
||
,bc=i.bc
|
||
FROM cpkcxx r, @inserted i
|
||
WHERE r.kwbh = i.kwbh
|
||
AND r.zlzt = i.zlzt
|
||
AND r.cpbh = i.cpbh
|
||
--AND ISNULL(r.txm, ISNULL(i.txm, ' ')) = ISNULL(i.txm, ' ')
|
||
AND ISNULL(r.lpxx, ' ') = ISNULL(i.lpxx, ' ')
|
||
AND ISNULL(r.tpbh, ' ') = ISNULL(i.tpbh, ' ');
|
||
|
||
SET @cntUpdate = @@ROWCOUNT;
|
||
SET @cntInsert = 0;
|
||
--set @cntUpdate = 0;; 2017-2-18 debug
|
||
|
||
IF (@cntUpdate < @cntAll)
|
||
BEGIN
|
||
INSERT INTO cpkcxx (ckmc, kwbh, cpbh, lpxx, sl, zlzt, rksj, jldw, cpmc, cpgg1, cpgg2, cpgg3, jhj, wzlb, gydw, bz, jzl, txm
|
||
, 前批库存数, 后批入库时间, tpbh, cfwzxx, 预约出库时间, rkzbsj, piz,scrq,hth,maoz,hjzt,ywy,mxcc,gdh,yt,gx,scfc,bc)
|
||
SELECT i.ckmc, i.kwbh, i.cpbh, i.lpxx, i.sl, i.zlzt, i.rksj, i.jldw, i.cpmc, i.cpgg1, i.cpgg2, i.cpgg3, i.jhj, i.wzlb, i.gydw, i.bz, i.jzl, i.txm
|
||
, 0, i.rksj, i.tpbh, i.cfwzxx, i.yycksj, i.rkzbsj, i.piz,i.scrq,i.hth,i.maoz,i.hjzt,i.ywy,i.mxcc,i.gdh,i.yt,i.gx,i.scfc,i.bc
|
||
FROM @inserted i
|
||
WHERE NOT EXISTS(SELECT 2 FROM cpkcxx a WHERE a.kwbh = i.kwbh
|
||
AND a.zlzt = i.zlzt
|
||
AND a.cpbh = i.cpbh
|
||
--AND ISNULL(a.txm, ISNULL(i.txm, ' ')) = ISNULL(i.txm, ' ')
|
||
AND ISNULL(a.lpxx, ' ') = ISNULL(i.lpxx, ' ')
|
||
AND ISNULL(a.tpbh, ' ') = ISNULL(i.tpbh, ' '));
|
||
SET @cntInsert = @@ROWCOUNT;
|
||
--SET @cntUpdate = @@ROWCOUNT;2017-2-18 debug
|
||
END;
|
||
-- 还要检查一次
|
||
IF @cntInsert + @cntUpdate != @cntAll
|
||
BEGIN
|
||
RAISERROR('插入和修改记录数之和不等于待处理记录总行数', 16, 1);
|
||
RETURN;
|
||
END;
|
||
|
||
--修改库位上的总数量
|
||
UPDATE kwjbxx SET zsl=ISNULL(sumsl, 0), sjwzlx = t.zlzt, sfwzzl='M', wzzls=zls
|
||
FROM (SELECT i.kw, SUM(a.sl) AS sumsl, MAX(a.zlzt) zlzt, COUNT(DISTINCT cpbh+ISNULL(lpxx,'')) zls
|
||
FROM cpkcxx a JOIN (SELECT DISTINCT kwbh kw FROM @inserted) i
|
||
ON a.kwbh = i.kw AND a.sl>0 -- 2017-11-7 debug 增加sl>0的条件
|
||
GROUP BY i.kw)T
|
||
WHERE kwbh = t.kw;
|
||
/*
|
||
|
||
DECLARE @ckmc type_ck
|
||
, @kwbh type_kwbh, @jldw type_jldw
|
||
, @kc_jlh INT, @lpxx type_ph, @wzlb type_wzlb
|
||
, @cpbh nvarchar(50), @rksl type_sl, @zlzt CHAR(1)
|
||
, @cpmc varchar(80), @cpgg1 varchar(255), @cpgg2 type_cz, @cpgg3 type_th, @jhj type_dj
|
||
, @pmh VARCHAR(10), @rksj datetime, @v_gydw NVARCHAR(60)
|
||
, @v_kcsl type_sl, @v_kcbz VARCHAR(200), @v_jzl type_sl, @v_txm VARCHAR(30), @v_tpbh varchar(12)
|
||
, @v_cfwzxx nvarchar(20), @txm varchar(30), @时长 INT, @rkzbsj DATETIME;
|
||
|
||
|
||
DECLARE c_kc CURSOR FOR--修改库存时的游标
|
||
SELECT ckmc, kwbh, cpbh, lpxx, zlzt, txm
|
||
, sl, cpmc, cpgg1, cpgg2, cpgg3, jhj, pmh, wzlb, jldw, rksj, gydw, bz, jzl, txm, tpbh, cfwzxx
|
||
, rkzbsj
|
||
FROM #inserted;
|
||
|
||
--遍历游标,修改库存
|
||
OPEN c_kc
|
||
WHILE 1 = 1
|
||
BEGIN
|
||
FETCH c_kc INTO @ckmc, @kwbh, @cpbh, @lpxx, @zlzt, @txm, @rksl, @cpmc, @cpgg1, @cpgg2, @cpgg3
|
||
, @jhj, @pmh, @wzlb, @jldw, @rksj, @v_gydw, @v_kcbz, @v_jzl, @v_txm, @v_tpbh, @v_cfwzxx
|
||
, @rkzbsj
|
||
IF @@FETCH_STATUS <> 0 BREAK;
|
||
|
||
IF @kwbh IS NULL OR LEN(@kwbh) = 0 -- 2016-5-13 增减库位编号是否为空值判断
|
||
BEGIN
|
||
RAISERROR('未指定有效的库位号', 16, 1);
|
||
BREAK;
|
||
END;
|
||
|
||
-- 2016-5-13 386项目特性。
|
||
SELECT @时长 = CASE WHEN @zlzt IN('9','A') THEN S.gwcs8 ELSE S.gwcs2 END
|
||
FROM kwjbxx K, sc_gwxx S
|
||
WHERE CAST(K.hdh AS VARCHAR) + '#机'=S.gwid
|
||
AND kwbh = @kwbh;
|
||
|
||
-- 检查是否有相同的库存记录
|
||
SET @kc_jlh = NULL
|
||
SET @v_kcsl = NULL
|
||
SELECT @kc_jlh = jlh, @v_kcsl = sl
|
||
FROM cpkcxx
|
||
WHERE kwbh = @kwbh
|
||
AND zlzt = @zlzt
|
||
AND cpbh = @cpbh
|
||
--AND ISNULL(txm, ' ') = ISNULL(@txm, ' ')
|
||
AND ISNULL(lpxx, ' ') = ISNULL(@lpxx, ' ')
|
||
AND ISNULL(tpbh, ' ') = ISNULL(@v_tpbh, ' ');
|
||
IF @kc_jlh IS NULL OR @v_kcsl = 0
|
||
BEGIN
|
||
IF @v_kcsl = 0
|
||
UPDATE cpkcxx SET sl = sl + @rksl, jhj=@jhj, rksj = CASE WHEN sl<=0 THEN @rksj ELSE rksj END
|
||
, 前批库存数=sl, 后批入库时间=@rksj
|
||
, cpmc=@cpmc, cpgg1=@cpgg1, cpgg2=@cpgg2, cpgg3 = @cpgg3, jldw = @jldw, wzlb = @wzlb
|
||
, gydw = ISNULL(@v_gydw, gydw)
|
||
, bz = ISNULL(@v_kcbz, bz), tpbh = @v_tpbh
|
||
, cfwzxx = @v_cfwzxx
|
||
, 预约出库时间 = DATEADD(MI, @时长, @rksj)
|
||
, rkzbsj = @rkzbsj
|
||
WHERE jlh = @kc_jlh;
|
||
--插入库位库存
|
||
ELSE
|
||
BEGIN
|
||
INSERT INTO cpkcxx (ckmc, kwbh, cpbh, lpxx, sl, zlzt, rksj, jldw, cpmc, cpgg1, cpgg2, cpgg3, jhj, wzlb, gydw, bz, jzl, txm
|
||
, 前批库存数, 后批入库时间, tpbh, cfwzxx, 预约出库时间, rkzbsj)
|
||
VALUES(@ckmc, @kwbh, @cpbh, @lpxx, @rksl, @zlzt, @rksj, @jldw, @cpmc, @cpgg1, @cpgg2, @cpgg3, @jhj, @wzlb, @v_gydw, @v_kcbz, @v_jzl, @v_txm
|
||
, 0, @rksj, @v_tpbh, @v_cfwzxx, DATEADD(MI, @时长, @rksj), @rkzbsj);
|
||
IF (@@ERROR <> 0)
|
||
BREAK;
|
||
END
|
||
END
|
||
ELSE
|
||
BEGIN
|
||
UPDATE cpkcxx SET sl=sl + @rksl, jhj=@jhj, 前批库存数=sl, 后批入库时间=@rksj
|
||
--, cpmc=@cpmc, cpgg1=@cpgg1, cpgg2=@cpgg2, cpgg3 = @cpgg3, jldw = @jldw, wzlb = @wzlb
|
||
, gydw = ISNULL(@v_gydw, gydw)
|
||
, bz = ISNULL(@v_kcbz, bz)
|
||
WHERE jlh = @kc_jlh;
|
||
END
|
||
--修改库位信息
|
||
UPDATE kwjbxx SET sjwzlx = @zlzt, sfwzzl='M'
|
||
WHERE ckmc = @ckmc
|
||
AND kwbh = @kwbh
|
||
AND (sjwzlx <> @zlzt OR sjwzlx IS NULL OR sfwzzl IS NULL OR sfwzzl <> 'M');
|
||
--修改库位上的总数量
|
||
UPDATE kwjbxx SET zsl=ISNULL(sumsl, 0)
|
||
FROM (SELECT ckmc ck, kwbh kw FROM kwjbxx WHERE ckmc=@ckmc AND kwbh = @kwbh) A
|
||
LEFT JOIN (SELECT ckmc ck2, kwbh kw2, SUM(sl) AS sumsl
|
||
FROM cpkcxx
|
||
WHERE ckmc=@ckmc AND kwbh = @kwbh GROUP BY ckmc, kwbh )T
|
||
ON A.ck=T.ck2 AND A.kw=T.kw2
|
||
WHERE ckmc = A.ck AND kwbh = A.kw AND zsl<>ISNULL(sumsl, 0)
|
||
END
|
||
CLOSE c_kc
|
||
DEALLOCATE c_kc*/
|
||
|
||
IF EXISTS(SELECT 2 FROM sys_config WHERE id_pzx='delete_0_inventory' AND dqz='1')
|
||
DELETE cpkcxx WHERE sl=0 AND kwbh IN(SELECT DISTINCT kwbh FROM @inserted);
|
||
END
|
||
go
|
||
ALTER TRIGGER [dbo].[t_wlRkzl_IU] ON [dbo].[cprkzl] --WITH ENCRYPTION
|
||
FOR INSERT, UPDATE
|
||
AS
|
||
/**
|
||
* 生成指令或修改入库指令的入库库位后,锁定指令操作的库位
|
||
* Created by 蒋智湘 ON 06-06-07
|
||
* Modified by 蒋智湘 ON 2007-03-09 调用库位上锁过程时,添加锁类型参数的值
|
||
* Modified by jzx on 2009-5-4 给cprkzl.qczt字段赋值。对应红字入库单,总是赋予0,否则根据总原库存数量是否为0设定是否0还是空值。
|
||
* Modified by jzx on 2014-11-3 对修改后入库库位为Null的处理。
|
||
* Modified by jzx on 2015-7-8 为了知道托盘在途过程中占用库位的库存情况,提前在安排库位的时候就插入零库存记录行
|
||
* Modified by jzx on 2015-12-13 支持插入的新指令记录的状态为完成状态时,无需锁定库位。这种情况用于处理不记账的入库记录日志
|
||
* Modified by jzx on 2016-3-15 因386项目电池托盘条码长度超过7个字符而修改代码
|
||
* Modified by jzx on 2016-3-17 debug:对于未关联入库单的入库指令,插入的库存的质量状态默认从cprkzl表的zlzt字段中获取,而不是强制为合格2;
|
||
* 同时将cfwzxx字段也插入库存记录表
|
||
* Modified by jzx on 2016-7-17 更改jccs字段值的筛选条件更改了
|
||
* Modified by jzx on 2016-7-31 仅仅针对xnkw=0库位才记录库存数据;常温存放及其后续工序不需要改变检测次数字段的值
|
||
* Modified by jzx on 2016-8-7 为了提高效率,不再传电池编号到库存表,只能在电池信息表看电池。
|
||
* Modified by jzx on 2017-10-20 更改托盘编号变量的数据类型为varchar(50),而不是varchar(12)
|
||
* Modified by jzx on 2017-11-7 插入的零库存记录,lpxx字段在386项目中注释掉了(386 lpxx字段存储的电池条码,实际累加库存时,不记录条码),
|
||
导致审核指令增加库存时,额外新增了记录行,恢复回来。
|
||
*/
|
||
BEGIN
|
||
DECLARE @ckmc type_ck --仓库代码
|
||
, @kwbh type_kwbh --库位编号
|
||
, @tpbh varchar(50) --托盘号
|
||
, @ckmc_old type_ck
|
||
, @kwbh_old type_kwbh
|
||
, @tpbh_old varchar(50)
|
||
, @zlbh INT
|
||
, @kcs type_sl
|
||
, @v_pzbh varchar(30);
|
||
|
||
SET NOCOUNT ON;
|
||
|
||
IF UPDATE(kwbh) OR UPDATE(tpbh) OR UPDATE(ckmc)-- OR UPDATE(tpbh)
|
||
BEGIN
|
||
SELECT @ckmc_old = ckmc, @kwbh_old = kwbh, @tpbh_old = tpbh
|
||
FROM deleted;
|
||
SELECT @ckmc = ckmc, @kwbh = kwbh, @tpbh = tpbh, @zlbh = zlbh, @kcs = ykcs, @v_pzbh = pzbh
|
||
FROM inserted
|
||
WHERE zt!=2;-- 2015-12-13 jzx 如果插入的指令就是完成状态,则不用进行锁定处理
|
||
|
||
IF @kwbh_old IS NOT NULL AND (ISNULL(@kwbh,' ') <> @kwbh_old)
|
||
BEGIN
|
||
-- 锁定新库位
|
||
IF @kwbh IS NOT NULL
|
||
BEGIN
|
||
EXEC p_lockCell @ckmc, @kwbh, 'M', @zlbh, @kcs, 1
|
||
IF @@ERROR > 0
|
||
RETURN;
|
||
END;
|
||
--释放修改前的库位
|
||
EXEC p_unlockCell @ckmc_old, @kwbh_old, @zlbh
|
||
|
||
-- 记录字段“是否取出”的值
|
||
UPDATE cprkzl SET qczt = CASE WHEN ykcs > 0 THEN 0 ELSE NULL END
|
||
WHERE zlbh = @zlbh;
|
||
END
|
||
ELSE IF @kwbh_old IS NULL AND @kwbh IS NOT NULL --插入记录时,才会出现IS NULL的情况
|
||
BEGIN
|
||
EXEC p_lockCell @ckmc, @kwbh, 'M', @zlbh, @kcs, 1
|
||
IF @@ERROR > 0
|
||
RETURN;
|
||
-- 记录字段“是否取出”的值
|
||
UPDATE cprkzl SET qczt = 0
|
||
WHERE zlbh = @zlbh AND ykcs > 0;
|
||
END
|
||
|
||
IF (ISNULL(@kwbh_old, ' ') <> ISNULL(@kwbh, ' ')) OR (ISNULL(@tpbh_old, ' ') <> ISNULL(@tpbh, ' '))
|
||
BEGIN
|
||
IF @kwbh_old IS NOT NULL
|
||
DELETE cpkcxx
|
||
FROM deleted z LEFT JOIN cprkd d ON z.pzbh = d.ysdh
|
||
WHERE cpkcxx.sl = 0
|
||
AND cpkcxx.kwbh = z.kwbh
|
||
AND cpkcxx.zlzt = ISNULL(d.zl, ISNULL(z.zlzt,'2'))
|
||
AND cpkcxx.cpbh = z.cpbh
|
||
AND ISNULL(cpkcxx.lpxx, ' ') = ISNULL(z.lpxx, ' ')
|
||
AND ISNULL(cpkcxx.tpbh, ' ') = ISNULL(z.tpbh, ' ')
|
||
AND cpkcxx.bz = ISNULL('入库单' + z.pzbh, '入库指令' + CAST(z.zlbh AS VARCHAR(12)));
|
||
|
||
IF @kwbh IS NOT NULL
|
||
BEGIN
|
||
INSERT INTO cpkcxx (ckmc, kwbh, tpbh, zlzt, cpbh, lpxx, txm, sl, rksj, jldw, cpmc, cpgg1, cpgg2, cpgg3, jhj, wzlb, jzl, cfwzxx, bz)
|
||
SELECT z.ckmc, z.kwbh, z.tpbh, ISNULL(d.zl, ISNULL(z.zlzt,'2')), z.cpbh,z.lpxx, MAX(z.txm), 0, GETDATE()
|
||
, MAX(m.jldw), MAX(m.cpmc), MAX(m.cpgg1), MAX(m.cpgg2), MAX(m.cpgg3), MAX(m.jhj), MAX(m.wzlb)
|
||
, MAX(ISNULL(z.bzl, m.jzl)), MAX(z.cfwzxx)
|
||
, MAX(ISNULL('入库单' + z.pzbh, '入库指令' + CAST(z.zlbh AS VARCHAR(12))))
|
||
FROM inserted z LEFT JOIN cprkd d ON z.pzbh=d.ysdh LEFT JOIN cprkdmx m ON z.mxbh = m.mxbh
|
||
JOIN kwjbxx k on z.kwbh = k.kwbh AND xnkw=0 -- 2016-7-31
|
||
WHERE NOT EXISTS(SELECT 2 FROM cpkcxx r
|
||
WHERE r.kwbh = z.kwbh
|
||
AND r.zlzt = ISNULL(d.zl, ISNULL(z.zlzt,'2'))
|
||
AND r.cpbh = z.cpbh
|
||
AND ISNULL(r.lpxx, ' ') = ISNULL(z.lpxx, ' ')
|
||
AND ISNULL(r.tpbh, ' ') = ISNULL(z.tpbh, ' ')
|
||
)
|
||
GROUP BY z.ckmc,z.kwbh,z.tpbh,d.zl,z.cpbh,z.lpxx,z.zlzt;
|
||
END;
|
||
END;
|
||
END
|
||
END
|
||
go
|