SAP VL02N 交货单过账函数 WS_DELIVERY_UPDATE

SAP VL02N 交货单过账函数 WS_DELIVERY_UPDATE

前言

用BDC模拟VL02N过账也可以,并不复杂
只不过用SAP提供的Function Module在扩展性上要好一些

代码总览

测试报表

TABLES: likp.

DATA: gs_likp   TYPE likp,
      gt_lips   TYPE STANDARD TABLE OF lips,
      gs_lips   TYPE lips,
      gs_return TYPE zcommon_return.

SELECTION-SCREEN BEGIN OF BLOCK blk1 WITH FRAME TITLE TEXT-001.
  SELECT-OPTIONS: s_vbeln FOR likp-vbeln MEMORY ID vbe.
SELECTION-SCREEN END OF BLOCK blk1.

START-OF-SELECTION.

  SELECT SINGLE * FROM likp WHERE vbeln IN @s_vbeln INTO CORRESPONDING FIELDS OF @gs_likp.
  gs_likp-wadat_ist = gs_likp-wadat.

  SELECT * FROM lips WHERE vbeln IN @s_vbeln INTO CORRESPONDING FIELDS OF TABLE @gt_lips.

  CALL FUNCTION 'ZSDFM01_DELIVERY'
    EXPORTING
      wa_likp   = gs_likp
    IMPORTING
      wa_return = gs_return
    TABLES
      it_lips   = gt_lips.

  WRITE gs_return.

END-OF-SELECTION.

FM ZSDFM01_DELIVERY

<think> 嗯,用户这次问的是ABAP中WS_DELIVERY_UPDATE函数的返回信息。之前系统指令要求用中文回答,还要注意数学公式格式,不过这个问题主要涉及ABAP编程,可能不太需要数学表达式。 用户应该是个ABAP开发者,正在处理交货单过账功能。ta特意提到"参考站内引用",但后面又说明引用仅供参考,看来更关注实际开发中的技术细节。从ta提问的精准度看,至少是有中级ABAP开发经验的。 关于WS_DELIVERY_UPDATE,这个函数确实很重要但文档较少。需要重点解释返回结构: - ET_RETURN表最关键,要说明字段组合的判定逻辑 - TO_DELETE_FLAG这种冷门但危险的标识必须强调 - 状态码SUBRC的几种典型场景 - 扩展参数虽然可选但实际项目常用 用户可能遇到的是调试场景,所以补充了开发建议。函数参数部分看起来冗余,但实际项目调用时容易出错,特别是导出参数经常被忽略。最后问题设计成递进的: 1 基础校验逻辑 2 性能问题(这个函数确实容易超时) 3 增强点(实际项目必然要扩展) 突然想到,用户没提是否在S4HANA环境,但补充说明里还是加上为妙,毕竟新旧版本差异大。另外ta上次问过VL01N相关,这次深入底层函数,看来在做交货单的深度开发。 </think> 在ABAP中,`WS_DELIVERY_UPDATE` 函数交货单过账的核心函数,其返回信息对业务处理至关重要。以下是关键返回参数解析和技术要点: ### 一、核心返回参数 1. **`ET_RETURN` 表(BAPIRET2类型)** - 存放所有消息(成功/错误/警告),字段包括: ```abap TYPE TYPE BAPI_MTYPE, // 消息类型(S/E/W/I/X) ID TYPE SYMSGID, // 消息类 NUMBER TYPE SYMSGNO, // 消息编号 MESSAGE TYPE BAPI_MSG, // 消息文本 MESSAGE_V1 TYPE SYMSGV, // 变量占位符1 MESSAGE_V2 TYPE SYMSGV // 变量占位符2 ``` - **关键逻辑**:需循环此表检查 `TYPE='E'`(错误)或 `TYPE='A'`(终止)消息。 2. **`TO_DELETE_FLAG`(删除标志)** - 类型 `DELFLAG`,值域: - `''` 未标记删除 - `'L'` 逻辑删除(需后续处理) - `'P'` 物理删除标志 3. **`SUBRC`(执行状态码)** - `0` = 成功 - `4` = 部分成功(需检查 `ET_RETURN`) - `8` = 完全失败 ### 二、其他重要参数 | 参数名 | 类型 | 作用 | |------------------|------------|------------------------------| | `DOCUMENT_HEADER`| LIKP | 更新后的交货单抬头数据 | | `NUM_DELIVERIES` | INTEGER | 处理的交货单数量 | | `DELIVERY_ITEM` | VBFA | 关联的凭证流数据(可选导出) | ### 三、开发注意事项 1. **错误处理规范** ```abap LOOP AT et_return INTO DATA(ls_msg) WHERE type CA 'EAX'. MESSAGE ID ls_msg-id TYPE ls_msg-type NUMBER ls_msg-number WITH ls_msg-message_v1 ls_msg-v2 ls_msg-v3 ls_msg-v4. ENDLOOP. ``` 2. **性能优化** - 调用前用 `COMMIT WORK AND WAIT` 清理锁 - 避免循环调用,批量传递 `VT_VBELN` 交货单集合 3. **增强点** 使用 `EXIT_SAPLV50I_001`(用户出口)或 `BADI_LE_SHP_DELIVPROC` 处理自定义逻辑。 ### 四、典型错误场景 1. **库存不足** - 消息ID `VL` + 编号 `162` 2. **批次状态锁定** - 消息ID `VL` + 编号 `307` 3. **凭证流冲突** - 消息ID `V2` + 编号 `023` > ⚠️ **关键实践**:生产环境必须捕获 `TO_DELETE_FLAG='L'` 场景并触发 `VL02N` 的后续处理,否则将产生僵尸单据[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值