1. 为什么我们需要在创建内向交货单时增强自定义字段?
在SAP的物流执行模块里,内向交货单(Inbound Delivery)是处理采购收货、供应商来料的核心单据。标准功能已经很强大了,但实际业务总是千变万化。我遇到过很多次,业务部门跑过来说:“我们采购的这批货,供应商那边有个特殊的港口代码要传过来,系统里没有这个字段啊!” 或者 “这批物料有个紧急放行标识,收货的时候必须能看到并做检查。”
这时候,标准的 GN_DELIVERY_CREATE 函数就显得有点“力不从心”了。这个函数是SAP提供的、用于通过程序化方式创建内向交货单的核心工具,它处理的是标准字段。你想往里塞自己定义的字段,比如 ZZ_ETDPORT(预计离港港口)、ZZ_ATAPORT(实际到港港口)这些,直接传进去,它根本不认识,数据直接就丢了。
所以,“自定义字段增强” 就成了我们必须掌握的技能。这不仅仅是加个字段那么简单,它涉及到数据从源头(比如你的自定义采购订单增强字段)如何安全、完整地流向下游的交货单,并最终可能影响后续的收货和库存管理。整个过程,我们需要一个“中间人”来帮忙,这个“中间人”就是SAP留给我们的标准增强点——BADI。今天要聊的,就是专门为 GN_DELIVERY_CREATE 准备的 LE_SHP_GN_DLV_CREATE。我会带你一步步走通从字段追加到BADI实现的全过程,分享我踩过的坑和验证过的稳当方法。
2. 动手之前:理解数据结构与增强脉络
在写第一行代码之前,我们必须搞清楚数据是怎么流动的。GN_DELIVERY_CREATE 函数的核心输入参数是 XKOMDLGN 内表,它的结构是 KOMDLGN。你可以把它理解成创建交货单的“原材料清单”,里面包含了物料、数量、工厂、库存地点等所有基础信息。
那么,我们的自定义字段加在哪里呢? 答案就是:通过Append Structure(附加结构)来扩展 KOMDLGN 结构。 这是最标准、最推荐的做法。为什么?因为这样你的字段就成为了标准结构的一部分,所有使用 KOMDLGN 的地方,理论上都能看到并使用这个字段,兼容性最好。
具体操作,需要在SE11(ABAP数据字典)里进行:
- 找到结构
KOMDLGN。 - 菜单栏选择 实用程序 -> 附加结构。
- 创建一个新的附加结构,比如
ZKOMPDLGN,然后在里面定义你需要的字段,例如:ZZ_ETDPORT预计离港港口ZZ_ATDPORT实际离港港口ZZ_ATAPORT实际到港港口ZZ_DISPORT卸货港口
- 激活这个附加结构。
完成这一步后,你在程序里定义 LS_KOMDLGN 时,就会发现这些 ZZ_ 开头的字段已经可以用了。就像原始代码里那样,可以直接从采购订单的增强结构 GS_INBOUND 里赋值过来:
ls_komdlgn-


2267

被折叠的 条评论
为什么被折叠?



