SD 外向交货单

作者:斌将军 约 9 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:SD, 销售分销
SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

**1**

**写在前面**

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

**1.1**

**文档说明**

本文档将介绍外向交货单的创建、修改、删除、过账以及冲销,并且包含如何使用代码来实现上述过程。另外,还将介绍衍生出的交货单屏幕增强和BAPI维护扩展字段等内容。

**1.2**

**外向交货单介绍**

在 SAP系统中,外向交货单(Outbound Delivery

Note)是一个关键的物流文档,用于管理和跟踪从仓库到客户的发货过程。外向交货单通常与销售订单相关联,是实现销售订单发货和交付的重要环节。

**外向交货单的主要功能和用途:**

发货管理:

• 外向交货单详细记录了从仓库发往客户的产品或商品的信息。

• 它包含了发货的物料、数量、交货日期、运输方式等关键信息。

销售订单关联:

• 外向交货单通常与销售订单直接关联,确保发货的产品和数量与客户的需求相匹配。

• 通过销售订单,可以自动生成外向交货单,简化了发货流程。

物流跟踪:

• 外向交货单记录了货物的装载、运输和交付状态,帮助企业跟踪物流过程。

• 可以实时更新发货状态,便于客户查询和企业的内部管理。

库存管理:

• 发货时,系统会自动减少相应的库存数量,确保库存信息的准确性。

• 外向交货单的处理直接影响库存水平和可用库存的计算。

财务集成:

• 外向交货单完成后,可以触发财务模块的账务处理,如应收账款的生成和发票的开具。

• 确保物流和财务数据的同步和一致性。

**外向交货单的处理流程:**

创建外向交货单:

• 根据销售订单生成外向交货单,或手动创建新的外向交货单。

库存确认:

• 系统检查仓库中是否有足够的库存来满足交货需求。

装载和发货:

• 仓库工作人员根据交货单进行拣货和装载,更新交货单状态为“已发货”。

交付确认:

• 货物送达客户后,客户或物流公司确认收货,系统更新交货单状态为“已完成”。

财务处理:

• 根据完成的交货单生成发票,更新应收账款。

外向交货单在 SAP

系统中起着至关重要的作用,确保了从订单到交付的整个供应链流程的顺畅和透明。通过外向交货单,企业可以有效地管理库存、优化物流、提高客户满意度,并且实现财务数据的准确性和及时性。

**2**

**创建交货单**

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

**2.1**

**前台操作**

事务代码VL01N

参照销售订单创建外向交货单

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

带出销售订单对应的行项目,视情况修改数量等字段,保存即可

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

**2.2**

**BAPI创建**

调用BAPI: BAPI_OUTB_DELIVERY_CREATE_SLS ,创建交货单

"--------------------@斌将军--------------------

DATA:lv_ship_point TYPE bapidlvcreateheader-ship_point, "装运点 lv_due_date TYPE bapidlvcreateheader-due_date, "创建日期 lv_delivery TYPE bapishpdelivnumb-deliv_numb, lv_num_deliveries TYPE bapidlvcreateheader-num_deliveries. DATA:lt_sales_order_items TYPE TABLE OF bapidlvreftosalesorder, ls_sales_order_items TYPE bapidlvreftosalesorder, lt_serial_numbers TYPE TABLE OF bapidlvserialnumber, ls_serial_numbers TYPE bapidlvserialnumber, lt_extension_in TYPE TABLE OF bapiparex, ls_extension_in TYPE bapiparex, lt_deliveries TYPE TABLE OF bapishpdelivnumb, ls_deliveries TYPE bapishpdelivnumb, lt_created_items TYPE TABLE OF bapidlvitemcreated, ls_created_items TYPE bapidlvitemcreated, lt_extension_out TYPE TABLE OF bapiparex, ls_extension_out TYPE bapiparex, lt_return TYPE TABLE OF bapiret2, ls_return TYPE bapiret2. TYPES:BEGIN OF ty_lips_ext, posnr TYPE lips-posnr, "交货单行项目 lgort TYPE lips-lgort, "库存地点 END OF ty_lips_ext. DATA:lt_lips_ext TYPE TABLE OF ty_lips_ext, ls_lips_ext TYPE ty_lips_ext.
DATA:lv_check TYPE char1, lv_message TYPE char255.

REFRESH:lt_sales_order_items,lt_serial_numbers,lt_extension_in, lt_deliveries,lt_created_items,lt_return.

CLEAR:lv_ship_point,lv_due_date,lv_delivery,lv_num_deliveries.

lv_ship_point = '1011'."装运点lv_due_date = '20240506'."创建日期 "参照销售订单创建CLEAR:ls_sales_order_items.ls_sales_order_items-ref_doc = '0000001399'."参考凭证 销售订单ls_sales_order_items-ref_item = '20'."参考项 销售订单行ls_sales_order_items-dlv_qty = '1'."实际已交货量(按销售单位)ls_sales_order_items-sales_unit = 'EA'."销售单位APPEND ls_sales_order_items TO lt_sales_order_items. "*CLEAR:ls_created_items.*ls_created_items-ref_doc = '0000001400'."参考凭证 销售订单*ls_created_items-ref_item = '10'."参考项 销售订单行**ls_created_items-deliv_item = '20'." 交货单行*ls_created_items-material = '000000004000000905'." 交货单行*ls_created_items-dlv_qty = '1'."实际已交货量(按销售单位)*ls_created_items-sales_unit = 'EA'."销售单位*APPEND ls_created_items TO lt_created_items. CLEAR:lv_delivery,lv_num_deliveries.CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS' EXPORTING ship_point = lv_ship_point due_date = lv_due_date IMPORTING delivery = lv_delivery num_deliveries = lv_num_deliveries TABLES sales_order_items = lt_sales_order_items serial_numbers = lt_serial_numbers extension_in = lt_extension_in deliveries = lt_deliveries created_items = lt_created_items return = lt_return. CLEAR:lv_check,lv_message.LOOP AT lt_return INTO ls_return WHERE type CA 'AEX'. lv_message = lv_message && ls_return-message. CLEAR:ls_return.ENDLOOP. IF lv_check = 'E'. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'.ENDIF."--------------------@斌将军--------------------

**2.3**

**创建BAPI增强之内存传值**

外向交货单BAPI只能维护部分字段,一些字段需要通过增强才能维护进去,比如通过内存传值的方法

创建内存结构,在创建交货单时写入库存地点

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

并在交货单创建BAPI前,抛内存到增强

请注意区分销售订单行项目和交货单行项目。交货单行项目自动流水,不会根据销售订单行项目创建相同行项目的交货单行。

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

实现BADI: _ LE_SHP_DELIVERY_PROC~CHANGE_DELIVERY_ITEM _ 方法

接程序内存,并将值写入 CS_LIPS 中。

如果是抬头字段,当系统不走 _ CHANGE_DELIVERY_HEADER _ 方法时,可以将抬头中的字段也在该方法中写入交货单

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

**2.4**

**创建BAPI增强之EXTENSIONIN**

另一种做法是使用BAPI的EXTENSIONIN进行维护,但也需要增强配合。

根据官方文档,可以实现BADI: _ BADI_DLV_CREATE_SLS_EXTIN~ADDITIONAL_INPUT _ 方法

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

创建用于扩展的结构

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

传入EXTENSION_IN中

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

创建函数组,用于将EXTENSION_IN传输到全局变量中

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

定义函数组全局变量

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

实施BADI

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

抛值:将BAPI传入的扩展结构传入函数组

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

实现BADI: _ LE_SHP_DELIVERY_PROC~SAVE_DOCUMENT_PREPARE _

接值:调用函数,获取全局变量,并将数据更新到CT_XLIPS中

更新逻辑如上文写在 _ CHANGE_DELIVERY_ITEM _ 方法中也可以

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

效果如下:

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

**3**

**屏幕增强**

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

**3.1**

**抬头增强**

在LIKP中附加结构

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

创建函数组

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

创建函数ZFG_LIKP_PBO

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

创建函数ZFG_LIKP_PAI

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

创建9001子屏幕

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

画出字段

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

定义屏幕流,控制控件可编辑状态

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图

STATUS_9001

MODULE status_9001 OUTPUT. LOOP AT SCREEN. IF screen-name+(10) = 'ZSLIKP_EXT'. IF gv_trtyp = 'A'."A显示 B 编辑 screen-input = 0. MODIFY SCREEN. ENDIF. ENDIF. ENDLOOP.ENDMODULE.

实施BADI: _ LE_SHP_TAB_CUST_HEAD _

SD 外向交货单 - 封面图
SD 外向交货单 - 封面图
METHOD:ACTIVATE_TAB_PAGE 添加页签

此处可以用事务代码区分开内向/外向交货单

...

斌将军

关于作者:斌将军

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「SD外向交货单.md」整理生成,仅用于内部技术分享与学习交流。