BAPI_SALESDOCUMENT_CHANGE修改SO范例 - 海边星
【原创】 BAPI_SALESDOCUMENT_CHANGE修改SO范例
栏目:ABAP  作者:在海边看星星  阅读:(359)
  DATA: lt_item    TYPE STANDARD TABLE OF bapisditm WITH HEADER LINE,
        lt_itemx   TYPE STANDARD TABLE OF bapisditmx WITH HEADER LINE,
        lt_return  TYPE STANDARD TABLE OF bapiret2 WITH HEADER LINE,
        ls_headerx TYPE bapisdh1x.
  DATA: lv_msg(220).

  FIELD-SYMBOLS: <fs_alv>   TYPE typ_alv,
                 <fs_field> TYPE any.

  DATA: lt_alv TYPE STANDARD TABLE OF typ_alv WITH HEADER LINE.

  lt_alv[] = gt_alv[].
  DELETE lt_alv WHERE sel = ''.

  IF lt_alv[] IS INITIAL.
    MESSAGE '请选择需要修改的行!' TYPE 'S' DISPLAY LIKE 'E'.
    EXIT.
  ENDIF.

  SORT lt_alv BY vbeln posnr.
  LOOP AT lt_alv.
    AT NEW vbeln.
      CLEAR: lt_item[],lt_item,lt_itemx[],lt_itemx.
    ENDAT.

    lt_item = VALUE #( itm_number = lt_alv-posnr
                       plant      = lt_alv-werks  "修改库存地点的时候要带上工厂,不然会被自动清掉,离谱
                       store_loc  = lt_alv-lgort
                     ).
    APPEND lt_item.
    CLEAR lt_item.

    lt_itemx = VALUE #( itm_number = lt_alv-posnr
                        updateflag = 'U'
                        store_loc  = 'X'
                      ).
    APPEND lt_itemx.
    CLEAR lt_itemx.


    AT END OF vbeln.
      CLEAR: lt_return[],lt_return,ls_headerx,lt_alv-msg.

      ls_headerx-updateflag = 'U'.

      CALL FUNCTION 'BAPI_SALESORDER_CHANGE'
        EXPORTING
          salesdocument    = lt_alv-vbeln
          order_header_inx = ls_headerx
        TABLES
          order_item_in    = lt_item
          order_item_inx   = lt_itemx
          return           = lt_return.

      LOOP AT lt_return WHERE type CA 'EAX'.
        MESSAGE ID lt_return-id TYPE lt_return-type NUMBER lt_return-number
                INTO lv_msg
                WITH lt_return-message_v1 lt_return-message_v2
                     lt_return-message_v3 lt_return-message_v4.
        lt_alv-msg = lt_alv-msg && lv_msg && ';'.
      ENDLOOP.
      IF sy-subrc = 0.
        CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
        lt_alv-type = 'E'.
        lt_alv-sicon = c_red.
      ELSE.
        CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
          EXPORTING
            wait = 'X'.
        lt_alv-type = 'S'.
        lt_alv-sicon = c_green.
        lt_alv-msg = '修改成功!'.
      ENDIF.

      LOOP AT gt_alv ASSIGNING <fs_alv> WHERE vbeln = lt_alv-vbeln
                                          AND sel = 'X'.
        <fs_alv>-type = lt_alv-type.
        <fs_alv>-sicon = lt_alv-sicon.
        <fs_alv>-msg = lt_alv-msg.
      ENDLOOP.
    ENDAT.
  ENDLOOP.




我的评论
昵称
邮箱
域名
  记住 通知博主
验证码

  联系我们

微信扫一扫

 登录  打赏

  随机文章