create trigger t_tjc on ICStockBill
for insert
as
set nocount on
BEGIN
DECLARE @FInterID int
select @FInterID=FInterID from inserted
if exists(select * from ICStockBill where FInterID=@FInterID)
update A
set A.FQty=A.FQty-B.FQty
from tjc A 
left outer join t_ICItemCore E on A.FNumber=E.FNumber
left outer join ICStockBillEntry B on E.FItemID=B.FItemID
left outer join ICStockBill C on B.FInterID=C.FInterID
where B.FInterID=@FInterID  and B.FSourceTranType=85 and B.FPPBomEntryID=0
end
set nocount off
FInterID为入库单据内码,同一入库单据本来在前台界面单击“保存”一次后,更新一次库存就行了,但如果再在前台界面再点击“保存”一次,库存又会更新?想不明白,咋回事

解决方案 »

  1.   


    create trigger t_tjc on ICStockBill
    for insert
    as
    set nocount on
    BEGIN
    DECLARE @FInterID int
    select @FInterID=FInterID from inserted
    if exists(select * from ICStockBill where FInterID=@FInterID)beginupdate A
    set A.FQty=A.FQty-B.FQty  from tjc A 
    left outer join t_ICItemCore E on A.FNumber=E.FNumber
    left outer join ICStockBillEntry B on E.FItemID=B.FItemID
    left outer join ICStockBill C on B.FInterID=C.FInterID
    where B.FInterID=@FInterID  and B.FSourceTranType=85 and B.FPPBomEntryID=0endend
    set nocount off---
    --不行,用after 试试!
    create trigger t_tjc on ICStockBill
    after  insert
      

  2.   

    这是K3的前台入库界面,一单击保存,感觉好像就在数据库里重新删除了这条入库单记录,再插入一次
    但是K3的功能里有这样一个字段FWhenSaveUpdate当为0时就是保存时更新库存,为1时就是不保存
    搞不懂这个逻辑是什么
      

  3.   

    那ICStockBill这个表里肯定有这条入库单的记录哈,有这条入库单,就不应该再保存的时候,再去插入一次吧?
      

  4.   

    估计你的ICStockBill 表是存放单据的吧。单据入库时,执行触发器,会更新一次库存, 再次执行,你的判断语句if exists(select * from ICStockBill where FInterID=@FInterID) 当然是成立的,自然会再执行一次了。表中可以插入重复的单据? 既然能插重复的单据,你又如何能让库存不重复更新?
      

  5.   

    ICStockBill是包含所有出入库,领退料的主表,测试过,如果我的判断语句不要,也一样的是同一单据再保存的时候会更新偶的自建表tjc