SAP-ABAP:BAPI_OUTB_DELIVERY_CHANGE(修改外向交货单) 功能详解

1. 概述

BAPI名称: BAPI_OUTB_DELIVERY_CHANGE
作用: 修改已存在的外向交货单(Outbound Delivery)的 头信息行项目数据,支持调整交货日期、数量、批次等关键字段,适用于动态业务场景下的交货流程调整。


2. 核心功能

模块 功能说明
头信息修改 更新交货日期(DELIV_DATE)、运输点(SHIP_POINT)、装运条件(SHIP_COND)等
行项目修改 调整数量(DELIV_QTY)、批次(BATCH)、拣配状态(PICK_STATUS)等
状态管理 重新打开已完成的交货单(如从未过账状态恢复修改权限)
数据校验
<think>好的,用户想了解BAPI_OUTB_DELIVERY_CHANGE的使用方法和示例代码。让我先回忆一下相关的引用内容。引用[2]提到这个BAPI用于过账接口,但和冲销接口一起使用时可能出现问题,需要处理并发和变量冲突。引用[4]给出了数据结构,比如BAPIDLVPARTNERCHG和BAPIOBDLVITEMCHG,这些可能在示例代码中用到。引用[3]和[5]提到另一个BAPI_OUTB_DELIVERY_CONFIRM_DEC,但用户明确问的是BAPI_OUTB_DELIVERY_CHANGE,所以需要专注于这个函数。 用户可能需要详细的步骤和代码示例,说明如何调用这个BAPI修改交货单的信息,比如数量、库位等。引用[4]中的DATA部分展示了可能需要定义的结构体,比如LWA_ITEM_DATA和LWA_ITEM_CONTROL,这些结构用于传递项目级别的更改数据。 另外,引用[1]提到SD_DELIVERY_UPDATE_PICKING和这个BAPI结合使用,可能需要在调用前先更新拣配信息。所以在步骤中可能需要先调用其他函数,再使用BAPI_OUTB_DELIVERY_CHANGE进行修改。 需要注意的是,用户可能在之前的测试中遇到E VL 216错误,引用[2]分析是因为并发或公共变量的问题,所以在示例代码中应该提醒用户注意提交和变量作用域,可能建议使用COMMIT WORK或BAPI_TRANSACTION_COMMIT。 总结步骤应该是:初始化参数、填充数据结构、调用BAPI、处理返回消息、提交事务。代码部分需要展示如何设置交货单号、项目数据、控制参数等。同时,要提到可能的错误处理,比如检查RETURN表是否有错误。 最后,相关问题的生成需要围绕常见的使用场景、错误处理、优化方法等,帮助用户进一步了解可能遇到的问题和解决方案。</think>### BAPI_OUTB_DELIVERY_CHANGE 使用方法及示例代码 BAPI_OUTB_DELIVERY_CHANGESAP 中用于修改外向交货单的常用函数,支持更新拣配数量、库位、批次等字段[^1][^4]。以下是使用步骤及示例代码: --- #### **核心步骤** 1. **数据准备** - 定义 BAPI 输入参数的数据结构(如交货单号、项目数据、控制参数等)。 - 初始化必填字段,例如交货单号(`DELIVERY`)、项目编号(`DELIV_ITEM`)。 2. **调用前逻辑** - 若需更新拣配数量,需先调用函数 `SD_DELIVERY_UPDATE_PICKING` 进行拣配操作[^1]。 - 对于批次或库位更新,需填充 `ITEM_DATA` 和 `ITEM_CONTROL` 结构。 3. **调用 BAPI** - 通过 `CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'` 执行修改- 检查返回表 `RETURN` 中的错误消息。 4. **提交事务** - 使用 `BAPI_TRANSACTION_COMMIT` 提交变更,确保数据持久化。 --- #### **示例代码** ```abap DATA: lt_item_data TYPE TABLE OF bapiobdlvitemchg, "项目数据 lt_item_control TYPE TABLE OF bapiobdlvitemctrlchg, "项目控制 lt_return TYPE TABLE OF bapiret2. "返回消息 "1. 设置交货单号及项目数据 DATA(lv_delivery) = '80000001'. "交货单号 APPEND INITIAL LINE TO lt_item_data ASSIGNING FIELD-SYMBOL(<fs_item>). <fs_item>-deliv_numb = lv_delivery. "交货单号 <fs_item>-deliv_item = '000010'. "项目编号 <fs_item>-material = 'MAT001'. "物料号 <fs_item>-plant = '1000'. "工厂 <fs_item>-stge_loc = 'FG01'. "目标库位 <fs_item>-batch = 'BATCH001'. "批次号 "2. 设置控制参数(标记修改字段) APPEND INITIAL LINE TO lt_item_control ASSIGNING FIELD-SYMBOL(<fs_control>). <fs_control>-deliv_numb = lv_delivery. <fs_control>-deliv_item = '000010'. <fs_control>-stge_loc_flg = 'X'. "标记库位需更新 "3. 调用 BAPI CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' EXPORTING delivery = lv_delivery TABLES item_data = lt_item_data item_control = lt_item_control return = lt_return. "4. 检查错误 READ TABLE lt_return WITH KEY type = 'E' TRANSPORTING NO FIELDS. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. MESSAGE '更新失败' TYPE 'E'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. MESSAGE '更新成功' TYPE 'S'. ENDIF. ``` --- #### **关键注意事项** 1. **并发控制** - 若同时调用冲销接口(如 `WS_REVERSE_GOODS_ISSUE`),需确保冲销操作完全提交后再调用此 BAPI,避免状态冲突[^2]。 2. **字段标记** - 在 `ITEM_CONTROL` 中需通过标志位(如 `stge_loc_flg = 'X'`)明确指定修改字段[^4]。 3. **增强处理** - 若遇到无法冲销的问题,可通过 BAdI `LE_SHP_DELIVERY_PROC` 清空分配状态字段 `CS_LIKP-VLSTK`[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱喝水的鱼丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值