Kingdee 供应链出入库老单删除触发器1(随笔记录)

 1 IF  EXISTS (select name from sysobjects where name='tr_XX')
 2 DROP TRIGGER tr_XX
 3 GO
 4 CREATE TRIGGER tr_XX
 5 ON dbo.ICStockBillEntry
 6 FOR DELETE
 7 as
 8 BEGIN  
 9     DECLARE @FInterID        AS INT,
10     @FTranType            AS INT,
11     @FBillNo                AS NVARCHAR(50),
12     @FEntryID                AS INT 
13     
14     declare @table0 table
15         (FInterID   INT,
16         FEntryID    INT)
17         
18         insert into @table0
19         (FInterID,FEntryID)
20         SELECT FInterID,FEntryID FROM DELETED    
21     
22     WHILE EXISTS(SELECT 1 FROM @table0)
23         BEGIN
24             SET ROWCOUNT 1
25             SELECT @FInterID=FInterID,@FEntryID=FEntryID FROM DELETED
26             IF @FInterID > 0 
27                 BEGIN
28                     SELECT @FTranType=FTranType,@FBillNo=FBillNo FROM dbo.ICStockBill WHERE FInterID=@FInterID
29                     IF @FTranType > 0 
30                         IF @FTranType=1 OR @FTranType=2 OR @FTranType=5 OR @FTranType=10 OR @FTranType=21 OR @FTranType=24 OR @FTranType=28 OR @FTranType=29 OR @FTranType=41
31                                 -- 业务逻辑处理
32                             END    
33                 END
34             DELETE FROM @table0 WHERE FInterID=@FInterID AND FEntryID=@FEntryID
35             SET ROWCOUNT 0
36         END    
37 END
38 GO

  该触发器 主要是想 针对K3供应链出入库老单删除单据或单据中一行或多行物料 时 触发追加的业务逻辑处理 。 经过测试 发现该触发器 在sql server 查询分析器上执行删除事务该触发器的业务逻辑可以执行,但是在K3客户端进行单据删除操作,触发器的业务逻辑没有被执行。后跟踪K3删除单据sql脚本,发现K3单据删除有两种情况:

  1、整张单据删除:K3是先执行“delete from ICStockBill where FInterID=XXXX”,接着执行“delete from ICStockBillEntry whereFInterID=XXXX”;

  2、单据删除部分,由于K3是操作是进去K3选中一行 点击菜单栏删除按钮进行删除 然后保存.sql执行顺序是:"DELETE ICStockBill WHERE FInterID=xxxx  ----> INSERT INTO StockBillEntry ........   ----> INSERT INTO ICStockBill...... ----->UPDATE ICStockBill .......".  

  由跟踪出来的信息可知K3单据删除都是先删除 单据头表:ICStockBill ,由于该触发器是单据体表(ICStockBillEntry)的触发器,并且在该触发器中 需要查询单据头表的单据类型(FTranType)等信息 作为下步判断逻辑处理等,但是在此处 单据头该单据信息已被删除,查出来为空。进而不能下步的处理,所以该触发器处理失效.   由于对K3单据删除时 K3是怎么处理 不清楚,上面分析都是本人自己跟踪测试 个人分析出来的。所以在K3中如果需要需要处理这样的业务逻辑,该怎么处理?

PS:在此处记录下来,以后如果有很好的解决办法再来解答...

你可能感兴趣的:(Kingdee 供应链出入库老单删除触发器1(随笔记录))