删除销售订单:BAPI_SALESORDER_CHANGE

1.删除销售订单的BAPI:BAPI_SALESORDER_CHANGE

  • 销售订单更改/删除TCODE:VA02

具体示例代码如下:

"定义
data:lv_sd               TYPE bapivbeln-vbeln,
        ls_order_header_in  TYPE bapisdh1,
        ls_order_header_inx TYPE bapisdh1x,
        lt_order_item_in    TYPE STANDARD TABLE OF bapisditm,
        lt_order_item_inx   TYPE STANDARD TABLE OF bapisditmx,
        ls_order_item_in    TYPE bapisditm,
        ls_order_item_inx   TYPE bapisditmx.
  DATA: lt_return TYPE STANDARD TABLE OF bapiret2,
        ls_return TYPE bapiret2.


        LOOP AT gt_sd ASSIGNING FIELD-SYMBOL(<fs_sd>)
                GROUP BY ( key1 = <fs_sd>-vbeln )
                ASSIGNING FIELD-SYMBOL(<fs_group>).
    CLEAR: lv_sd,
           ls_return,
           ls_order_header_in,
           ls_order_header_inx,
           ls_order_item_in,
           lt_order_item_in,
           ls_order_item_inx,
           lt_order_item_inx.
     LOOP AT GROUP <fs_group> ASSIGNING FIELD-SYMBOL(<fs_line>) .

      ls_order_item_in-itm_number = <fs_line>-posnr.
      ls_order_item_in-reason_rej = 'Z2'. "关闭原因
      APPEND ls_order_item_in TO lt_order_item_in.

      ls_order_item_inx-itm_number = <fs_line>-posnr.
      ls_order_item_inx-updateflag = 'U'.
      ls_order_item_inx-reason_rej = 'X'.
      APPEND ls_order_item_inx TO lt_order_item_inx.
    ENDLOOP.
    "Z3是删除,Z2 是更改,这是自定义的,跟BAPI无关
    IF <fs_line>-zrule = 'Z3'.
      lv_sd = <fs_line>-vbeln.
      ls_order_header_inx-updateflag = 'D'.
      CLEAR: lt_order_item_in, lt_order_item_inx.
    ELSE.
      lv_sd = <fs_line>-vbeln.
      ls_order_header_inx-updateflag = 'U'.
    ENDIF.
    "赋值
      CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
    EXPORTING
      salesdocument    = lv_sd
      order_header_in  = ls_order_header_in
      order_header_inx = ls_order_header_inx
    TABLES
      return           = lt_return
      order_item_in    = lt_order_item_in
      order_item_inx   = lt_order_item_inx.
      "处理返回结果
IF line_exists( lt_return[ type = 'E' ] ) OR
     line_exists( lt_return[ type = 'A' ] ).
    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

    cs_sd-light = icon_red_light.
    cs_sd-mtype = 'E'.
    LOOP AT lt_return INTO ls_return WHERE type = 'E' OR type = 'A' .
      cs_sd-messg = |{ cs_sd-messg }/{ ls_return-message }|.
    ENDLOOP.
    SHIFT cs_sd-messg LEFT DELETING LEADING '/'.

  ELSEIF line_exists( lt_return[ type = 'W' ] ).

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    cs_sd-light = icon_green_light.
    cs_sd-mtype = 'W'.
    LOOP AT lt_return INTO ls_return WHERE type = 'W'.
      cs_sd-messg = |{ cs_sd-messg }/{ ls_return-message }|.
    ENDLOOP.

    IF iv_zrule = 'Z3'.
      cs_sd-messg = |{ cs_sd-messg }/删除成功|.
    ELSE.
      cs_sd-messg = |{ cs_sd-messg }/关闭成功|.
    ENDIF.
    SHIFT cs_sd-messg LEFT DELETING LEADING '/'.

  ELSEIF line_exists( lt_return[ type = 'S' ] ).

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
      EXPORTING
        wait = 'X'.

    cs_sd-light = icon_green_light.
    cs_sd-mtype = 'S'.
    IF iv_zrule = 'Z3'.
      cs_sd-messg = |{ cs_sd-messg }/删除成功|.
    ELSE.
      cs_sd-messg = |{ cs_sd-messg }/关闭成功|.
    ENDIF.
    SHIFT cs_sd-messg LEFT DELETING LEADING '/'.
  ENDIF.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值