You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 04:36:00