所有的流程看起来都不错,但是当通过调用函数时,更新也失败,需要更新的字段没有更新,不知道问题出在哪里,有人可以帮我解决这个问题吗?我错过了什么步骤吗?
错误消息登录 LT_PROT
DATA: LT_PROT LIKE PROTT OCCURS 10 WITH HEADER LINE.
DATA: LT_VBPOK LIKE VBPOK OCCURS 500 WITH HEADER LINE.
DATA: LS_VBKOK LIKE VBKOK.
DATA: GT_LIPS LIKE LT_LIPS.
DATA: WA_LIPS TYPE LTY_LIPS.
DATA: EF_ERROR_ANY_0 TYPE C,
EF_ERROR_IN_ITEM_DELETION_0 TYPE C,
EF_ERROR_IN_POD_UPDATE_0 TYPE C,
EF_ERROR_IN_INTERFACE_0 TYPE C,
EF_ERROR_IN_GOODS_ISSUE_0 TYPE C,
EF_ERROR_IN_FINAL_CHECK_0 TYPE C.
SELECT * FROM LIPS INTO CORRESPONDING FIELDS OF TABLE LT_LIPS
WHERE VGBEL = LT_BCODE_I-VGBEL
AND VGPOS = LT_BCODE_I-VGPOS.
LOOP AT LT_LIPS INTO WA_LIPS.
WA_LIPS-LFIMG = LT_BCODE_I-MENGE.
MODIFY LT_LIPS FROM WA_LIPS INDEX SY-TABIX.
ENDLOOP.
"VBPOK IS CHANGE INDICATOR, AFTERWARD CALL FUNCTION TO CHANGE FIELD LFIMG IN STANDART TABLE LIPS.
LOOP AT LT_LIPS INTO GT_LIPS.
LT_VBPOK-LFIMG = GT_LIPS-LFIMG.
APPEND LT_VBPOK.
ENDLOOP.
ls_vbkok-vbeln_vl = LT_BCODE_I-REF_DOC.
CALL FUNCTION 'WS_DELIVERY_UPDATE'
EXPORTING
vbkok_wa = ls_vbkok " DELIVERY DOCUMENT NUMBER
synchron = 'X'
no_messages_update = ' '
update_picking = 'X'
commit = 'X'
delivery = LT_BCODE_I-REF_DOC "VARIABLE OF DELIVERY DOCUMENT
nicht_sperren = 'X'
if_error_messages_send_0 = space
IMPORTING
ef_error_any_0 = ef_error_any_0
ef_error_in_item_deletion_0 = ef_error_in_item_deletion_0
ef_error_in_pod_update_0 = ef_error_in_pod_update_0
ef_error_in_interface_0 = ef_error_in_interface_0
ef_error_in_goods_issue_0 = ef_error_in_goods_issue_0
ef_error_in_final_check_0 = ef_error_in_final_check_0
TABLES
vbpok_tab = lt_vbpok "TABLE TO BE CHANGE
prot = lt_prot.
首先,该功能模型的属性选项卡上的状态为“未发布”。这意味着它不应该在客户代码中使用, 因为
- SAP 可能会在未来的更新中更改或删除它而不发出警告,然后您的代码将不再工作。
- 它很可能没有正确记录。
- 它可能有隐藏的和意想不到的陷阱。例如,仅适用于特定的极端情况,不执行您期望它执行的所有操作,或者需要在执行某些操作之前或之后调用其他功能模块。
- 错误处理可能会丢失,或者可能提供在模块通常使用的上下文之外具有误导性的信息
所以在使用“未发布”的功能模块之前,应该检查交易码BAPI
如果有一个官方的 bapi 功能模块可以满足您的需求。 Bapi 功能模块专门用于客户代码。它们有详细记录,保证处理好一切,并且 SAP 承诺不会在未来的更新中破坏它们。
说教就这么多,让我们看看你的实际问题。
每当您遇到具有以下字段的数据结构时MSGNO
, MSGTY
, MSGID
最多四个通用变量,您正在处理一条消息。您可以在交易中查找此类消息代码SE91
。在那里我们可以看到消息类别 VL 中的数字 280 的含义是:
交付更新界面中的必填字段缺少 VBELN 00000 00000
这个可以参考一下结构ls_vbkok
或到餐桌上lt_vbpok
。我建议您在代码中设置调试器断点,并找出 VBELN 字段可能缺少值的位置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)