如何在交货时删除批号?

问题描述

我需要删除交货项目上的批号 (LIPS-CHARG) 并尝试使用 BAPI_OUTB_DELIVERY_CHANGE 没有成功。 我可以使用此 BAPI 正确更改交货数量 (LIPS-LFIMG) 并使用 WS_DELIVERY_UPDATE_2 更改拣货编号 (LIPS-PKIMG),但是无法删除批号。

有人已经删除了批号吗?不需要使用这个BAPI,可以是另一个。我只需要以任何方式删除批次。

以下代码用于更改交货数量和拣货数量。在某个时刻,我将拣货数量更改为零,此时我需要删除批号。

"&**** Begin structures BAPI_OUTB_DELIVERY_CHANGE *******
ls_header_data-deliv_numb     = p_vbeln.
ls_header_control-deliv_numb  = p_vbeln.
  
APPEND INITIAL LINE TO lt_item_data ASSIGNING FIELD-SYMBOL(<ls_item_data>).

<ls_item_data>-deliv_numb       = p_vbeln.
<ls_item_data>-deliv_item       = lv_posnn.
<ls_item_data>-material         = <ls_alv>-matnr. 
<ls_item_data>-batch            = <ls_alv>-charg. 
<ls_item_data>-hieraritem       = <ls_lips>-posnr.
<ls_item_data>-usehieritm       = '1'. 
<ls_item_data>-dlv_qty          = lv_delivery_qtd. "my delivery quantity
<ls_item_data>-dlv_qty_imunit   = lv_delivery_qtd. "my delivery quantity
<ls_item_data>-fact_unit_nom    = <ls_lips>-umvkz.
<ls_item_data>-fact_unit_denom  = <ls_lips>-umvkn.
<ls_item_data>-sales_unit       = <ls_lips>-vrkme.

APPEND INITIAL LINE TO lt_item_control ASSIGNING FIELD-SYMBOL(<ls_item_control>).

<ls_item_control>-deliv_numb = p_vbeln.
<ls_item_control>-deliv_item = lv_posnn.
<ls_item_control>-chg_delqty = 'X'.
"&**** End structures BAPI_OUTB_DELIVERY_CHANGE *******

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
  header_data    = ls_header_data
  header_control = ls_header_control
  delivery       = p_vbeln
TABLES
  item_data      = lt_item_data
  item_control   = lt_item_control
  return         = lt_return.
 
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'. 

  
"&**** Begin structures WS_DELIVERY_UPDATE_2 *******
APPEND INITIAL LINE TO lt_vbpok ASSIGNING FIELD-SYMBOL(<ls_vbpok>).
<ls_vbpok>-vbeln_vl = <ls_lips>-vbeln.                
<ls_vbpok>-posnr_vl = <ls_lips>-posnr.                
<ls_vbpok>-vbeln    = <ls_lips>-vgbel.                
<ls_vbpok>-posnn    = <ls_lips>-vgpos.                
<ls_vbpok>-matnr    = <ls_lips>-matnr.
<ls_vbpok>-werks    = <ls_lips>-werks.
<ls_vbpok>-umvkz    = <ls_lips>-umvkz.                
<ls_vbpok>-umvkn    = <ls_lips>-umvkn.                
<ls_vbpok>-gewei    = <ls_lips>-gewei.
<ls_vbpok>-charg    = <ls_alv>-charg.
<ls_vbpok>-pikmg    = lv_picking_qtd.   "my picking quantity

ls_vbkok-vbeln_vl = <ls_lips>-vbeln.               
ls_vbkok-vbtyp_vl = 'J'.                           
ls_vbkok-komue    = 'X'.                           
ls_vbkok-gewei    = <ls_lips>-gewei.
ls_vbkok-anzpk    = lv_anzpk.
ls_vbkok-kzapk    = 'X'.
"&**** End structures WS_DELIVERY_UPDATE_2 *******

CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
    vbkok_wa                  = ls_vbkok
    delivery                  = p_vbeln
    synchron                  = abap_true
    update_picking            = abap_true
    nicht_sperren_1           = abap_true
    commit                    = abap_false
    if_error_messages_send    = abap_false
IMPORTING
    ef_error_any              = ls_error-any
    ef_error_in_item_deletion = ls_error-in_item_deletion
    ef_error_in_pod_update    = ls_error-in_pod_update
    ef_error_in_interface     = ls_error-in_interface
    ef_error_in_goods_issue   = ls_error-in_goods_issue
    ef_error_in_final_check   = ls_error-in_final_check
    ef_error_partner_update   = ls_error-partner_update
    ef_error_sernr_update     = ls_error-sernr_update
TABLES
    vbpok_tab                 = lt_vbpok.
    
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.

解决方法

我发现了我的错误! 当我们需要删除批号时,我们不需要在ITEM_DATA-DELIV_ITEM上发送值。

在我的代码中,我在 ITEM_DATA-DELIV_ITEM 上发送了“90000001”,在 ITEM_DATA-USEHIERITM 上发送了“00010”,但为了工作,我只发送了 ITEM_DATA-USEHIERITM 并且批号被正确删除。

谢谢大家!

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...