SAP ABAP 交货冲销(删除dn/删除dn行项目)BAPI_OUTB_DELIVERY_CHANGE

DATA:lt_lips           TYPE TABLE OF lips WITH HEADER LINE,

       ls_lips           TYPE lips,
       ls_header_data    LIKE bapiobdlvhdrchg,
       ls_header_control LIKE bapiobdlvhdrctrlchg,
       lt_return         LIKE TABLE OF bapiret2,
       ls_return         LIKE bapiret2,
       ls_item_data      LIKE  bapiobdlvitemchg,
       lt_item_data      LIKE TABLE OF bapiobdlvitemchg,
       ls_item_spl       LIKE  /spe/bapiobdlvitemchg,
       lt_item_spl       TYPE TABLE OF /spe/bapiobdlvitemchg,
       ls_techn_control  LIKE  bapidlvcontrol,
       ls_item_control   LIKE  bapiobdlvitemctrlchg,
       lt_item_control   LIKE TABLE OF bapiobdlvitemctrlchg.

 

SELECT     * "   获取退货dn的行项目数据
             INTO CORRESPONDING FIELDS OF TABLE lt_lips
             FROM  lips
             WHERE vbeln =  "交货号.

LOOP AT LT_LIPS INTO DATA(LS_LIPS).

    ls_item_spl-deliv_numb  = ls_lips-vbeln .
          ls_item_spl-deliv_item  = ls_lips-posnr .
          ls_item_spl-stge_loc    = ls_lips-lgort.
          APPEND ls_item_spl TO lt_item_spl.
          CLEAR:ls_item_spl.
          ls_item_data-deliv_numb      = ls_lips-vbeln .
          ls_item_data-deliv_item      = ls_lips-posnr .
          ls_item_data-batch           = ls_lips-charg.
          ls_item_data-dlv_qty         = ls_lips-lfimg .
          ls_item_data-dlv_qty_imunit  = ls_lips-lgmng.
          ls_item_data-fact_unit_nom   = ls_lips-umvkz.
          ls_item_data-fact_unit_denom = ls_lips-umvkn .
          ls_item_data-conv_fact       = ls_lips-umrev.
          APPEND ls_item_data TO lt_item_data.
          CLEAR:ls_item_data.
          ls_item_control-deliv_numb    = ls_lips-vbeln.
          ls_item_control-deliv_item    = ls_lips-posnr.
          ls_item_control-chg_delqty    'X'.
          ls_item_control-volume_flg    'X'.

    ls_item_control-del_item   'X'. "删除dn行项目
          APPEND ls_item_control TO lt_item_control.
          CLEAR:ls_item_control .

ENDLOOP.
ls_header_data-deliv_numb     = u_vbeln.
ls_header_control-deliv_numb  = u_vbeln.

ls_header_control-dlv_del     'X'."删除整个dn

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' "修改dn
      EXPORTING
        header_data    = ls_header_data
        header_control = ls_header_control
        delivery       = "交货号
      TABLES
        item_data      = lt_item_data
        item_control   = lt_item_control
        return         = lt_return
        item_data_spl  = lt_item_spl.

LOOP AT lt_return INTO ls_return WHERE type NA 'AEX'."如果不包含aex的错误 就代表成功
      lv_type 'S'.
      EXIT.
    ENDLOOP.
    IF  lt_return IS INITIAL ."为空也是代表成功
      lv_type 'S'.
    ENDIF.

    IF lv_type 'S'.
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = abap_true.

    ELSE.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

 ENDIF.

注意1:删除整个dn/删除dn行项目或只冲销不删除,根据实际业务需求选择

注意2:交货冲销之后需要进行过账(整单删除不需要过账),过账参考:https://www.cnblogs.com/LikZ-WM/p/16531047.html

posted @ 2022-08-02 17:49  LikZ-WM  阅读(932)  评论(0编辑  收藏  举报