避开这些坑!SAP内向交货单增强字段的完整配置流程(GN_DELIVERY_CREATE+LE_SHP_GN_DLV_CREATE)
如果你正在为SAP内向交货单的自定义字段无法正确传递而头疼,那么这篇文章就是为你准备的。这不是一篇从零开始的入门教程,而是针对那些已经尝试过增强,却卡在“字段不显示”、“BADI没触发”或“数据传丢了”这些具体问题上的中级开发人员。我们常常以为,在结构里追加了字段,实施了BADI,一切就该水到渠成。但现实往往是,你看着自己精心编写的代码,却发现数据像掉进了黑洞,在交货单创建后消失得无影无踪。问题的根源,往往隐藏在GN_DELIVERY_CREATE这个核心函数与LE_SHP_GN_DLV_CREATE这个BADI之间微妙的调用逻辑和数据流中。今天,我们就来彻底梳理这条路径,提供一个从字段定义到数据落地的完整检查清单,帮你精准定位并避开那些常见的“坑”。
1. 理解数据流向:从采购订单到内向交货单
在动手写一行代码之前,我们必须先搞清楚自定义字段的数据究竟要走一条怎样的路。很多配置失败,源于对这条路径的误解或一知半解。
1.1 核心数据载体:KOMDLGN结构
当你调用GN_DELIVERY_CREATE创建内向交货单时,输入的核心数据表是XKOMDLGN。这个内表里的每一行,都对应着一条待创建的交付项目。关键在于,KOMDLGN这个结构本身,是SAP标准交付的,它定义了从采购订单行项目到交货单行项目转换过程中所需的所有标准字段。
注意:
KOMDLGN是交货单创建过程中的临时工作区结构,并非数据库表。你的自定义数据需要先被正确地填充到这里,后续的增强逻辑才能将其搬运到最终的数据库表(如LIPS或LIKP)中。
那么,如何让这个标准结构认识你的自定义字段呢?答案是通过Append Structure(附加结构)。你需要将你的字段(例如ZZ_ETDPORT目的港、ZZ_ATDPORT实际离港日等)附加到KOMDLGN上。这个操作通常在SE11中完成,是后续所有数据传输的基石。
一个常见的误区是:开发者只在LIPS或LIKP表上追加了字段,却忘了源头KOMDLGN。这会导致在调用GN_DELIVERY_CREATE时,你根本无法将外部数据(比如从IDoc、RFC或自定义屏幕获取的数据)塞进这个关键的中转站。
1.2 GN_DELIVERY_CREATE的内部旅程
GN_DELIVERY_CREATE函数模块内部逻辑复杂,但其核心任务清晰:根据XKOMDLGN中的数据,结合物料、工厂、库存地点等主数据,执行一系列检查,最终生成交货单凭证,并将数据写入LIKP(抬头)和LIPS(行项目)。
在这个过程中,函数会处理标准字段的映射和计算。对于你附加在KOMDLGN上的自定义字段,标准逻辑会“看到”它们,但不知道该如何处理。这些字段会被原样携带在内部的工作变量中,直到一个关键的出口被触发——这就是LE_SHP_GN_DLV_CREATE BADI发挥作用的时候。
简单来说,数据流可以概括为:
- 你的程序准备数据,填充

&spm=1001.2101.3001.5002&articleId=153300711&d=1&t=3&u=b2bd5005ee684412a307104216027d87)
2214

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



