如何在SAP B1中自动计算交货单表头及行级UDF字段值
交货单自定义体积字段自动计算实现方案(MS-SQL 环境)
1. 新增自定义UDF字段
首先在ODLN(交货单表头)、DLN1(交货单行)两张表中分别新增U_Inner_Volume字段,字段类型建议选择高精度小数类型适配计算需求,执行SQL语句如下:
-- 给DLN1表新增U_Inner_Volume字段 ALTER TABLE DLN1 ADD U_Inner_Volume DECIMAL(19,6) NULL; -- 给ODLN表新增U_Inner_Volume字段 ALTER TABLE ODLN ADD U_Inner_Volume DECIMAL(19,6) NULL;
2. 配置自动计算触发器
通过AFTER INSERT触发器实现交货单创建时字段自动赋值:
2.1 行表DLN1字段自动计算触发器
触发逻辑:交货单行创建时,自动按Volume * 0.75计算行级内部体积值:
CREATE TRIGGER trg_DLN1_CalcInnerVolume ON DLN1 AFTER INSERT AS BEGIN SET NOCOUNT ON; UPDATE d SET d.U_Inner_Volume = i.Volume * 0.75 FROM DLN1 d INNER JOIN inserted i ON d.DocEntry = i.DocEntry AND d.LineNum = i.LineNum; END GO
2.2 表头ODLN字段自动计算触发器
触发逻辑:交货单行创建完成后,自动汇总所有行的内部体积值赋值到表头字段:
CREATE TRIGGER trg_ODLN_CalcInnerVolume ON DLN1 AFTER INSERT AS BEGIN SET NOCOUNT ON; UPDATE o SET o.U_Inner_Volume = (SELECT SUM(U_Inner_Volume) FROM DLN1 WHERE DocEntry = i.DocEntry) FROM ODLN o INNER JOIN inserted i ON o.DocEntry = i.DocEntry; END GO
补充说明
- 如果业务场景允许后续修改交货单行的
Volume字段,需要额外新增AFTER UPDATE触发器同步更新两个表的U_Inner_Volume值 - 若当前使用的是SAP Business One系统,建议优先通过SDK事件、格式化搜索(Formatted Search)实现自动计算,避免直接创建数据库触发器影响系统标准升级、补丁更新流程
- 字段的精度(
DECIMAL(19,6)中的参数)可以根据实际业务的体积精度要求调整
内容的提问来源于stack exchange,提问作者Jaime Dolor jr.
相关产品推荐
相关产品推荐

