六、K3 WISE 开发插件《Update字段级更新触发器 - BOS单审核后反写源单》

审核成功触发,是一个比较典型的场景。需要用到update触发器,跟踪到审核状态的变化。

引用的源码《采购检验单审核后反写收料通知单》,其中采购检验单是BOS自定义单据。

if (object_id('bobang_tgr_check_update', 'TR') is not null)
    drop trigger bobang_tgr_check_update
go
create trigger cl_tgr_check_update
on bobang_bos_check
after update
as 
declare @FID int
declare @FMultiCheckStatus  varchar(100)
declare @FAuxQtyPass float --合格数量
declare @FQtyPass float --基本单位合格数量
declare @FAuxNotPassQty float --不合格数量
declare @FNotPassQty float --基本单位不合格数量
declare @FAuxConPassQty float --让步接收数量
declare @FConPassQty float --基本单位让步接收数量
declare @FID_Src bigint --源单ID
declare @FEntryID_SRC bigint --源单FEntryID

select @FID=FID,@FMultiCheckStatus=FMultiCheckStatus
from inserted

--审核时
if update(FMultiCheckStatus) and @FMultiCheckStatus=16 
begin 
    declare mycursor cursor for 
    select FAuxPassQty,FPassQty,FAuxUnPassQty,FUnPassQty,FAuxConcessQty,FConcessQty,FID_Src,FEntryID_Src 
    from bobang_bos_checkentry where FID=@FID
    open mycursor  
    fetch next from mycursor 
    into @FAuxQtyPass,@FQtyPass,@FAuxNotPassQty,@FNotPassQty,@FAuxConPassQty,@FConPassQty,@FID_Src,@FEntryID_SRC
    while (@@fetch_status=0) 
    begin 
        update t1 
        set t1.FAuxQtyPass=t1.FAuxQtyPass+isnull(@FAuxQtyPass,0),
        t1.FQtyPass=t1.FQtyPass+isnull(@FQtyPass,0),
        t1.FAuxNotPassQty=t1.FAuxNotPassQty+isnull(@FAuxNotPassQty,0),
        t1.FNotPassQty=t1.FNotPassQty+isnull(@FNotPassQty,0),
        t1.FAuxConPassQty=t1.FAuxConPassQty+isnull(@FAuxConPassQty,0),
        t1.FConPassQty=t1.FConPassQty+isnull(@FConPassQty,0)
        from POInStockEntry t1 
        left join POInStock t2 on t1.FInterID=t2.FInterID
        where t1.FInterID=@FID_Src and t1.FEntryID=@FEntryID_SRC
        and t2.FTranType=72
    fetch next from mycursor 
    into @FAuxQtyPass,@FQtyPass,@FAuxNotPassQty,@FNotPassQty,@FAuxConPassQty,@FConPassQty,@FID_Src,@FEntryID_SRC
    end 
    close mycursor 
    DEALLOCATE mycursor 
end 

--驳回前检查
declare @isTuiLiao int
declare @isRuKu int
if update(FMultiCheckStatus) and @FMultiCheckStatus=4 
begin 
    declare mycursor cursor for 
    select FAuxPassQty,FPassQty,FAuxUnPassQty,FUnPassQty,FAuxConcessQty,FConcessQty,FID_Src,FEntryID_Src 
    from bobang_bos_checkentry where FID=@FID
    open mycursor  
    fetch next from mycursor 
    into @FAuxQtyPass,@FQtyPass,@FAuxNotPassQty,@FNotPassQty,@FAuxConPassQty,@FConPassQty,@FID_Src,@FEntryID_SRC
    while (@@fetch_status=0) 
    begin 
        select @isTuiLiao=COUNT(*) from POInStockEntry 
        where FSourceTrantype=72 and  FSourceInterId=@FID_Src and FSourceEntryID=@FEntryID_SRC
        if @isTuiLiao>0
        begin
            raiserror ('已下推退料通知单,不能反审核!',16,1)
            rollback tran    
        end
        
        select @isRuKu=COUNT(*) from ICStockBillEntry 
        where FSourceTrantype=72 and  FSourceInterId=@FID_Src and FSourceEntryID=@FEntryID_SRC
        if @isTuiLiao>0
        begin
            raiserror ('已下推外购入库单,不能反审核!',16,1)
            rollback tran    
        end
        
    fetch next from mycursor 
    into @FAuxQtyPass,@FQtyPass,@FAuxNotPassQty,@FNotPassQty,@FAuxConPassQty,@FConPassQty,@FID_Src,@FEntryID_SRC
    end 
    close mycursor 
    DEALLOCATE mycursor 
end

--驳回初始时
if update(FMultiCheckStatus) and @FMultiCheckStatus=2 
begin 
    declare mycursor cursor for 
    select FAuxPassQty,FPassQty,FAuxUnPassQty,FUnPassQty,FAuxConcessQty,FConcessQty,FID_Src,FEntryID_Src 
    from bobang_bos_checkentry where FID=@FID
    open mycursor  
    fetch next from mycursor 
    into @FAuxQtyPass,@FQtyPass,@FAuxNotPassQty,@FNotPassQty,@FAuxConPassQty,@FConPassQty,@FID_Src,@FEntryID_SRC
    while (@@fetch_status=0) 
    begin 
        update t1 
        set t1.FAuxQtyPass=t1.FAuxQtyPass-isnull(@FAuxQtyPass,0),
        t1.FQtyPass=t1.FQtyPass-isnull(@FQtyPass,0),
        t1.FAuxNotPassQty=t1.FAuxNotPassQty-isnull(@FAuxNotPassQty,0),
        t1.FNotPassQty=t1.FNotPassQty-isnull(@FNotPassQty,0),
        t1.FAuxConPassQty=t1.FAuxConPassQty-isnull(@FAuxConPassQty,0),
        t1.FConPassQty=t1.FConPassQty-isnull(@FConPassQty,0)
        from POInStockEntry t1 
        left join POInStock t2 on t1.FInterID=t2.FInterID
        where t1.FInterID=@FID_Src and t1.FEntryID=@FEntryID_SRC
        and t2.FTranType=72
    fetch next from mycursor 
    into @FAuxQtyPass,@FQtyPass,@FAuxNotPassQty,@FNotPassQty,@FAuxConPassQty,@FConPassQty,@FID_Src,@FEntryID_SRC
    end 
    close mycursor 
    DEALLOCATE mycursor 
end

 

转载于:https://www.cnblogs.com/zhugq02/p/11236679.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CREATE trigger icstockbill_check --实现对物料据管控 on Icstockbill for insert as Declare @Ftrantype int --据类别定义/生产领料24/调拔41/销售出库21 Select @Ftrantype=Ftrantype from inserted --控制领料的领料日期不能小于生产任务的计划开工日期 倒扣物料只能车间仓库发料 if (@Ftrantype=24) begin declare @icmo varchar(20) declare @message varchar(200) declare @message0 varchar(200) declare @message00 varchar(200) declare @message000 varchar(200) declare @finterid240 int set @message='错误!领料日期不能小于生产任务计划开工日期,请与生管人员联系!错误号:' set @message0='生产领料发料仓库不正确,倒扣物料不能从 原料仓/半成品仓/成品仓 发料' set @message00='已完工生产任务不能跨月领料.请检查领料日期!' set @message000='生产领料必需关联源生产任务号,请重新录入据!' if exists ( select t1.fbillno from inserted as t1 inner join icstockbillentry as t2 on t2.finterid=t1.finterid where t2.ficmointerid=0 ) begin RAISERROR(@message000,18,18) ROLLBACK end if exists( select t3.fbillno from inserted as t1 inner join icstockbillentry as t2 on t2.finterid=t1.finterid inner join icmo as t3 on t3.finterid=t2.fsourceinterid where t2.fsourceinterid>0 and t1.fdate0 and t1.fdateCast(year(max(t4.fdate)) as int(10))*100+Cast(month(max(t4.fdate)) as int(5)) ) begin RAISERROR(@message00,18,18) ROLLBACK end --更新领料上的销售订号 select @finterid240=finterid from inserted update t2 set t2.fentryselfb0445=t4.fbillno from icstockbill as t1 inner join icstockbillentry as t2 on t1.ftrantype=24 and t1.finterid=t2.finterid inner join icmo as t3 on t3.finterid=t2.ficmointerid left join seorder as t4 on t4.finterid=t3.forderinterid where isnull(t4.fbillno,'no')'no' and t2.finterid=@finterid240 return end --控制委外加工生产任务领料日期不对小于计划开工日期 if (@Ftrantype=28) begin declare @icmo3 varchar(20) declare @message3 varchar(200) set @message3='错误!委外加工发出日期不能小于对应委外加工生产任务计划开工日期,请与采购人员联系变更!错误号:' if exists( select t3.fbillno from inserted as t1 inner join icstockbillentry as t2 on t2.finterid=t1.finterid inner join icmo as t3 on t3.finterid=t2.fsourceinterid where t2.fsourceinterid>0 and t1.fdate0 and t1.fdate0 and t1.fdate0 and t1.fdate<t3.FPlanCommitDate set @message4=@message4+@icmo4 RAISERROR(@message4,18,18) ROLLBACK end ; --更新产品入库上的销售订号 select @finterid20=finterid from inserted update t2 set t2.fentryselfa0236=t4.fbillno from icstockbill as t1 inner join icstockbillentry as t2 on t1.ftrantype=2 and t1.finterid=t2.finterid inner join icmo as t3 on t3.finterid=t2.ficmointerid left join seorder as t4 on t4.finterid=t3.forderinterid where isnull(t4.fbillno,'no')'no' and t2.finterid=@finterid20 return end ---更新委外加工入销售订号 if (@Ftrantype=5) begin update t2 set t2.fentryselfa0548=t4.fbillno from inserted as t1 inner join icstockbillentry as t2 on t2.finterid=t1.finterid inner join icmo as t3 on t3.finterid=t2.fsourceinterid inner join seorder as t4 on t4.finterid=t3.forderinterid return end ---控制出全部出货的销售订所对应的采购订不能退料(红字外购入库) /*if (@Ftrantype=1) begin declare @message500 varchar(200) set @message500='已全部出货的销售订所对应的采购订不能退料!请检查您所退料的采购订号码是否正确!' if exists (select t1.fbillno from inserted as t1 inner join icstockbillentry as t2 on t2.finterid=t1.finterid inner join seorder as t3 on t3.fbillno=t2.fentryselfa0152 where t2.fqty<0 and t3.fclosed=1 ) begin RAISERROR(@message500,18,18) ROLLBACK end return end */
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值