使用BAPI创建/修改预留单 - 海边星
【原创】 使用BAPI创建/修改预留单
栏目:BAPI  作者:在海边看星星  阅读:(1172)

实现代码如下

  DATA: ls_reservation_header TYPE bapirkpfc.
  DATA: ls_reservation_items TYPE bapiresbc.
  DATA: lt_reservation_items TYPE TABLE OF bapiresbc.
  DATA: ls_return TYPE bapireturn.
  DATA: lt_return TYPE TABLE OF bapireturn.
  DATA: lv_reservation TYPE bapirkpfc-res_no.

  DATA:lt_reservationitems_changed  TYPE TABLE OF bapi2093_res_item_change,
       ls_reservationitems_changed  TYPE bapi2093_res_item_change,
       lt_reservationitems_changedx TYPE TABLE OF bapi2093_res_item_changex,
       ls_reservationitems_changedx TYPE bapi2093_res_item_changex,
       lt_bapiret2                  TYPE TABLE OF bapiret2,
       ls_bapiret2                  TYPE bapiret2.
  DATA:lt_resb TYPE TABLE OF resb,
       ls_resb TYPE resb.

  CLEAR:lv_message.
  IF ls_head_in-rsnum IS INITIAL.
    CLEAR ls_reservation_header.
    ls_reservation_header-plant = ls_head_in-werks.
    ls_reservation_header-res_date = sy-datum.
    ls_reservation_header-move_type = ls_head_in-bwart.
    ls_reservation_header-move_plant = ls_head_in-werks.

    ls_reservation_header-cost_ctr = ls_head_in-kostl.
    CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT'
      EXPORTING
        input  = ls_head_in-aufnr
      IMPORTING
        output = ls_reservation_header-order_no.
*  ls_reservation_header-order_no = ls_head_in-aufnr.
*  ls_reservation_header-gr_rcpt = ls_head_in-wempf.    

    IF ls_head_in-bwart = 'Z09' OR ls_head_in-bwart = 'Z10' OR ls_head_in-bwart = 'Z11'
       OR ls_head_in-bwart = 'Z12'.  
      ls_reservation_header-gr_rcpt = ls_head_in-wempf.
    ELSE.
      ls_reservation_header-gr_rcpt = ls_head_in-zuser && '/' && ls_head_in-zname.
    ENDIF.

    REFRESH lt_reservation_items.
    LOOP AT lt_item_in INTO ls_item_in.
      CLEAR ls_reservation_items.
      CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'
        EXPORTING
          input        = ls_item_in-matnr
        IMPORTING
          output       = ls_reservation_items-material
        EXCEPTIONS
          length_error = 1
          OTHERS       = 2.
*    ls_reservation_items-material = ls_item_in-matnr.
      ls_reservation_items-plant = ls_head_in-werks.
      ls_reservation_items-quantity = ls_item_in-zquan.
      CALL FUNCTION 'CONVERSION_EXIT_CUNIT_INPUT'
        EXPORTING
          input          = ls_item_in-zunit
          language       = sy-langu
        IMPORTING
          output         = ls_reservation_items-unit
        EXCEPTIONS
          unit_not_found = 1
          OTHERS         = 2.
*    ls_reservation_items-unit = ls_item_in-zunit.
      ls_reservation_items-req_date = ls_head_in-bdter.
      ls_reservation_items-movement = 'X'.

      ls_reservation_items-batch = ls_item_in-charg.
      ls_reservation_items-short_text = ls_item_in-sgtxt.
      ls_reservation_items-gr_rcpt = ls_item_in-wempf.

      APPEND ls_reservation_items TO lt_reservation_items.

    ENDLOOP.

    CLEAR lv_reservation.
    REFRESH lt_return.
    CALL FUNCTION 'BAPI_RESERVATION_CREATE'
      EXPORTING
        reservation_header = ls_reservation_header
*       NO_COMMIT          =
*       MOVEMENT_AUTO      =
      IMPORTING
        reservation        = lv_reservation
      TABLES
        reservation_items  = lt_reservation_items
        return             = lt_return.

    LOOP AT lt_return INTO ls_return WHERE type EQ 'A' OR type EQ 'E'.
      lv_message = lv_message && ls_return-message.
    ENDLOOP.

  ELSE.

    SELECT * INTO TABLE lt_resb FROM resb WHERE rsnum = ls_head_in-rsnum.

    LOOP AT lt_resb INTO ls_resb .
      ls_reservationitems_changed-res_item = ls_resb-rspos.
      ls_reservationitems_changed-delete_ind = 'X'.
      ls_reservationitems_changedx-res_item = ls_resb-rspos.
      ls_reservationitems_changedx-delete_ind = 'X'.
      APPEND ls_reservationitems_changed TO lt_reservationitems_changed.
      APPEND ls_reservationitems_changedx TO lt_reservationitems_changedx.
    ENDLOOP.
    CALL FUNCTION 'BAPI_RESERVATION_CHANGE'
      EXPORTING
        reservation               = ls_head_in-rsnum
*       TESTRUN                   =
*       ATPCHECK                  =
      TABLES
        reservationitems_changed  = lt_reservationitems_changed
        reservationitems_changedx = lt_reservationitems_changedx
*       RESERVATIONITEMS_NEW      =
        return                    = lt_bapiret2
*       EXTENSIONIN               =
      .

    LOOP AT lt_bapiret2 INTO ls_bapiret2  WHERE type EQ 'A' OR type EQ 'E'.
      lv_message = lv_message && ls_return-message.
    ENDLOOP.

  ENDIF.

  IF sy-subrc <> 0.

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

    IF ls_head_in-rsnum IS INITIAL.
      lv_message = |预留单 { lv_reservation } 创建成功|.
    ELSE.
      lv_message = |预留单 { lv_reservation } 修改成功|.
    ENDIF.
    ls_head_out-zdate = sy-datum.
    ls_head_out-ztime = sy-uzeit.
    ls_head_out-zstat = 'S'.
    ls_head_out-zmess = lv_message.
  ELSE.
    IF lv_message IS NOT INITIAL.
      CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
      ls_head_out-zstat = 'E'.
      ls_head_out-zmess = lv_message.
    ENDIF.
  ENDIF.




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

  联系我们

微信扫一扫

 登录  打赏

  随机文章