触发器记录销售订单锁库/预留数量原创
金蝶云社区-angen
angen
4人赞赏了该文章 63次浏览 未经作者许可,禁止转载编辑于2024年09月18日 16:07:21

    销售订单上锁库/预留数量经常与库存锁库列表或者预留关系查询里看到的结果不一致,历史版本可能存在bug,特别是在有销售订单部分预留到采购订单的业务场景,此问题的分析也比较难,因为远程客户重新做单时又不重现,建议如果经常出现此问题,可以使用触发器记录下日志,后续再结合上机操作日志来分析问题。以下为SQL Server下创建字段更新日志的步骤:


1,-- 创建日志表,用于记录销售订单锁库数量新值,旧值

--DROP TABLE SO_LOCKQTY_LOG
CREATE TABLE SO_LOCKQTY_LOG (FENTRYID INT, OLD_LOCKQTY DECIMAL, NEW_LOCKQTY DECIMAL, UP_DATE DATETIME, UP_TYPE NVARCHAR(200));


2,--删除触发器(如果存在的话)

GO
IF OBJECT_ID('LOG_LOCKQTY') <> 0 
BEGIN 
    DROP TRIGGER LOG_LOCKQTY;
END


3,-- 创建触发器

GO
CREATE TRIGGER LOG_LOCKQTY 
ON T_SAL_ORDERENTRY 
FOR INSERT, UPDATE, DELETE
AS
    IF UPDATE(FLOCKQTY)  --字段更新添加
    BEGIN
        INSERT INTO SO_LOCKQTY_LOG 
        SELECT A.FENTRYID, B.FLOCKQTY, A.FLOCKQTY, GETDATE(), 'UPDATE\INSERT' 
        FROM INSERTED A 
        LEFT JOIN DELETED B ON A.FENTRYID = B.FENTRYID;
    END;
     
     IF EXISTS(SELECT 1 FROM DELETED) AND NOT EXISTS (SELECT 1 FROM INSERTED) --字段删除
     BEGIN
        INSERT INTO SO_LOCKQTY_LOG 
        SELECT A.FENTRYID, A.FLOCKQTY, B.FLOCKQTY, GETDATE(), 'DELETE' 
        FROM DELETED A 
        LEFT JOIN INSERTED B ON A.FENTRYID = B.FENTRYID 
        WHERE B.FENTRYID IS NULL AND A.FLOCKQTY <> 0;
    END;


    下图1-1为'锁库/预留数量'字段更新日志示意图66ea88afbc65c9000147fdd6.png

图1-1

赞 4