使用功能模块(FM)确认POD

2020-08-26 14:58发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,SCN,

我已经花了大约一周的时间来寻找答案,但是我仍然很简短。 我正在尝试使用FM或Class来为我们正在构建的移动应用程序确认POD。

我当前正在尝试使用FM WS_DELIVERY_UPDATE,它似乎可以工作,因为它会更新POD确认日期和时间。 但是,它不会将POD确认状态从A更新为C,这是我要实现的关键更改。

我还注意到有时我会收到异常CX_SY_OPEN_SQL_DB,但我不确定为什么吗?

我是否正使用此FM更新POD确认状态? 还是有另一种方式? 我不确定直接更新数据库是否值得?

这是我正在使用的代码:

报告z_del_confirm。

 数据:ef_error_any_0 TYPE xfeld,
         ef_error_in_item_deletion_0 TYPE xfeld,
         ef_error_in_pod_update_0 TYPE xfeld,
         ef_error_in_interface_0 TYPE xfeld,
         ef_error_in_goods_issue_0 TYPE xfeld,
         ef_error_in_final_check_0 TYPE xfeld,
         ef_error_partner_update TYPE xfeld,
         ef_error_sernr_update TYPE xfeld。

 数据:ls_ret TYPE bapiret2,
       ct_return bapiret2的类型表。


 数据:lt_lips嘴唇的类型表,
       lt_prot普罗特类型表,
       lt_verko verko类型表,
       lt_verpo verpo类型表,
       lt_vbpok vbpok类型表,
       ls_vbpok TYPE vbpok,
       ls_vbkok TYPE vbkok,
       lv_vbeln TYPE likp-vbeln,
       lv_posnr类型lips-posnr。

 lv_vbeln ='0080013339'。
 ls_vbkok-podat ='20040227'。
 ls_vbkok-potim ='031800'。
 ls_vbkok-kzpod ='D'。

 选择*从嘴唇到表lt_lips
   其中vbeln = lv_vbeln。

 *提货分拣接口表
 循环到lt_lips ASSIGNING FIELD-SYMBOL()。
   清除ls_vbpok。
   将移动到ls_vbpok中。
   ls_vbpok-vbeln =  -vbeln。
   ls_vbpok-vbeln_vl =  -vbeln。
   ls_vbpok-posnr_vl =  -posnr。
   ls_vbpok-posnn =  -posnr。
   ls_vbpok-pikmg =  -lgmng。  "拣选数量
 * ls_vbpok-matnr =  -matnr。
 * ls_vbpok-matnr =  -matnr。
 * ls_vbpok-charg =  -charg。
   ls_vbpok-lfimg =  -lfimg。
 * ls_vbpok-vrkme =  -vrkme。
 * ls_vbpok-brgew =  -brgew。
 * ls_vbpok-ntgew =  -ntgew。
 * ls_vbpok-gewei =  -gewei。
 * ls_vbpok-volum =  -volum。
 * ls_vbpok-voleh =  -voleh。
   ls_vbpok-lianp ='X'。
 * ls_vbpok-kzbrg ='X'。
 * ls_vbpok-kzntg ='X'。
 * ls_vbpok-kzvol ='X'。

   附加ls_vbpok至lt_vbpok。
 结局。

 尝试。
     通话功能'WS_DELIVERY_UPDATE'
       出口
         vbkok_wa = ls_vbkok
         同步='X'
         no_messages_update =''
         commit ='X'
         交付= lv_vbeln
         update_picking ='X'
 * nicht_sperren ='X'
 * IF_CONFIRM_CENTRAL =''
 * IF_WMPP =''
 * IF_GET_DELIVERY_BUFFERED =''
 * IF_NO_GENERIC_SYSTEM_SERVICE =''
 * IF_DATABASE_UPDATE ='1'
 * IF_NO_INIT =''
 * IF_NO_READ =''
         if_error_messages_send_0 =''
 * IF_NO_BUFFER_REFRESH =''
 * IT_PARTNER_UPDATE =
 * IT_SERNR_UPDATE =
 * IF_NO_REMOTE_CHG =''
 * IF_NO_MES_UPD_PACK =''
 * IF_LATE_DELIVERY_UPD =''
       输入
         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_interface_0
         ef_error_in_final_check_0 = ef_error_in_final_check_0
         ef_error_partner_update = ef_error_partner_update
         ef_error_sernr_update = ef_error_sernr_update
       桌子
         vbpok_tab = lt_vbpok
         prot = lt_prot
 * VERKO_TAB =
 * VERPO_TAB =
 * VBSUPCON_TAB =
 * IT_VERPO_SERNR =
 * IT_PACKING =
 * IT_PACKING_SERNR =
 * IT_REPACK =
 * IT_HANDLING_UNITS =
 * IT_OBJECTS =
 * ET_CREATED_HUS =
 * TVPOD_TAB =
 * IT_TMSTMP =
 * IT_BAPIADDR1 =
 * IT_TEXTL =
 * IT_TEXTH =
 * IT_AAC_ITEM_BLOCK =
 * IT_HU_HEADER_EPC =
 * IT_HU_ITEMS_EPC =
       。

   捕获cx_root INTO DATA(lx_data_root)。
     消息lx_data_root-> get_longtext()类型'I'。
 ENDTRY。

 在lt_prot ASSIGNING FIELD-SYMBOL()处循环播放。
 *清除ct_return。
   如果 -msgty ='E'或
      -msgty ='A'。
 *发生错误。
     DATA(ef_error_occured)='X'
   万一。
   ls_ret-type =  -msgty。
   ls_ret-id =  -msgid。
   ls_ret-number =  -msgno。
   ls_ret-message_v1 =  -msgv1。
   ls_ret-message_v2 =  -msgv2。
   ls_ret-message_v3 =  -msgv3。
   ls_ret-message_v4 =  -msgv4。
   将ls_ret附加到ct_return。
 ENDLOOP。

任何帮助将不胜感激。

谢谢

B

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,SCN,

我已经花了大约一周的时间来寻找答案,但是我仍然很简短。 我正在尝试使用FM或Class来为我们正在构建的移动应用程序确认POD。

我当前正在尝试使用FM WS_DELIVERY_UPDATE,它似乎可以工作,因为它会更新POD确认日期和时间。 但是,它不会将POD确认状态从A更新为C,这是我要实现的关键更改。

我还注意到有时我会收到异常CX_SY_OPEN_SQL_DB,但我不确定为什么吗?

我是否正使用此FM更新POD确认状态? 还是有另一种方式? 我不确定直接更新数据库是否值得?

这是我正在使用的代码:

报告z_del_confirm。

 数据:ef_error_any_0 TYPE xfeld,
         ef_error_in_item_deletion_0 TYPE xfeld,
         ef_error_in_pod_update_0 TYPE xfeld,
         ef_error_in_interface_0 TYPE xfeld,
         ef_error_in_goods_issue_0 TYPE xfeld,
         ef_error_in_final_check_0 TYPE xfeld,
         ef_error_partner_update TYPE xfeld,
         ef_error_sernr_update TYPE xfeld。

 数据:ls_ret TYPE bapiret2,
       ct_return bapiret2的类型表。


 数据:lt_lips嘴唇的类型表,
       lt_prot普罗特类型表,
       lt_verko verko类型表,
       lt_verpo verpo类型表,
       lt_vbpok vbpok类型表,
       ls_vbpok TYPE vbpok,
       ls_vbkok TYPE vbkok,
       lv_vbeln TYPE likp-vbeln,
       lv_posnr类型lips-posnr。

 lv_vbeln ='0080013339'。
 ls_vbkok-podat ='20040227'。
 ls_vbkok-potim ='031800'。
 ls_vbkok-kzpod ='D'。

 选择*从嘴唇到表lt_lips
   其中vbeln = lv_vbeln。

 *提货分拣接口表
 循环到lt_lips ASSIGNING FIELD-SYMBOL()。
   清除ls_vbpok。
   将移动到ls_vbpok中。
   ls_vbpok-vbeln =  -vbeln。
   ls_vbpok-vbeln_vl =  -vbeln。
   ls_vbpok-posnr_vl =  -posnr。
   ls_vbpok-posnn =  -posnr。
   ls_vbpok-pikmg =  -lgmng。  "拣选数量
 * ls_vbpok-matnr =  -matnr。
 * ls_vbpok-matnr =  -matnr。
 * ls_vbpok-charg =  -charg。
   ls_vbpok-lfimg =  -lfimg。
 * ls_vbpok-vrkme =  -vrkme。
 * ls_vbpok-brgew =  -brgew。
 * ls_vbpok-ntgew =  -ntgew。
 * ls_vbpok-gewei =  -gewei。
 * ls_vbpok-volum =  -volum。
 * ls_vbpok-voleh =  -voleh。
   ls_vbpok-lianp ='X'。
 * ls_vbpok-kzbrg ='X'。
 * ls_vbpok-kzntg ='X'。
 * ls_vbpok-kzvol ='X'。

   附加ls_vbpok至lt_vbpok。
 结局。

 尝试。
     通话功能'WS_DELIVERY_UPDATE'
       出口
         vbkok_wa = ls_vbkok
         同步='X'
         no_messages_update =''
         commit ='X'
         交付= lv_vbeln
         update_picking ='X'
 * nicht_sperren ='X'
 * IF_CONFIRM_CENTRAL =''
 * IF_WMPP =''
 * IF_GET_DELIVERY_BUFFERED =''
 * IF_NO_GENERIC_SYSTEM_SERVICE =''
 * IF_DATABASE_UPDATE ='1'
 * IF_NO_INIT =''
 * IF_NO_READ =''
         if_error_messages_send_0 =''
 * IF_NO_BUFFER_REFRESH =''
 * IT_PARTNER_UPDATE =
 * IT_SERNR_UPDATE =
 * IF_NO_REMOTE_CHG =''
 * IF_NO_MES_UPD_PACK =''
 * IF_LATE_DELIVERY_UPD =''
       输入
         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_interface_0
         ef_error_in_final_check_0 = ef_error_in_final_check_0
         ef_error_partner_update = ef_error_partner_update
         ef_error_sernr_update = ef_error_sernr_update
       桌子
         vbpok_tab = lt_vbpok
         prot = lt_prot
 * VERKO_TAB =
 * VERPO_TAB =
 * VBSUPCON_TAB =
 * IT_VERPO_SERNR =
 * IT_PACKING =
 * IT_PACKING_SERNR =
 * IT_REPACK =
 * IT_HANDLING_UNITS =
 * IT_OBJECTS =
 * ET_CREATED_HUS =
 * TVPOD_TAB =
 * IT_TMSTMP =
 * IT_BAPIADDR1 =
 * IT_TEXTL =
 * IT_TEXTH =
 * IT_AAC_ITEM_BLOCK =
 * IT_HU_HEADER_EPC =
 * IT_HU_ITEMS_EPC =
       。

   捕获cx_root INTO DATA(lx_data_root)。
     消息lx_data_root-> get_longtext()类型'I'。
 ENDTRY。

 在lt_prot ASSIGNING FIELD-SYMBOL()处循环播放。
 *清除ct_return。
   如果 -msgty ='E'或
      -msgty ='A'。
 *发生错误。
     DATA(ef_error_occured)='X'
   万一。
   ls_ret-type =  -msgty。
   ls_ret-id =  -msgid。
   ls_ret-number =  -msgno。
   ls_ret-message_v1 =  -msgv1。
   ls_ret-message_v2 =  -msgv2。
   ls_ret-message_v3 =  -msgv3。
   ls_ret-message_v4 =  -msgv4。
   将ls_ret附加到ct_return。
 ENDLOOP。

任何帮助将不胜感激。

谢谢

B

付费偷看设置
发送
4条回答
bbpeas
1楼-- · 2020-08-26 15:57

如果您只想完全确认POD,则可以使用具有以下参数的BAPI WS_DELIVERY_UPDATE_2:

表VBKOK_WA:
        VBELN_VL =交货编号
        PODAT =日期
        POTIM =时间
        KZPOD =‘B’
 COMMIT =" X"
 DELIVERY =交付编号
大道至简
2楼-- · 2020-08-26 15:57

但是,请务必注意,WS_DELIVERY_UPDATE或WS_DELIVERY_UPDATE_2从未被SAP正式发布过。 因此,根据您的版本/EHP,它可能不起作用且不受支持。

骆驼绵羊
3楼-- · 2020-08-26 15:44
它似乎起作用,因为它会更新POD确认日期和时间

如果交货数量和客户确认数量之间没有差异,则当通过VLPOD或VLPODQ确认交货时,系统会自动将状态更改为" C"。 让我知道您的情况是否有所不同。 顺便说一句,如果您是技术人员,您是否与应该知道这一点的职能团队讨论。

Haoba3210
4楼-- · 2020-08-26 15:50

您好,

您已传递ls_vbpok-KZPOD中的值

谢谢

一周热门 更多>