SAP预留创建BAPI

 DATA: ls_reservationheader LIKE bapi2093_res_head,

        lt_reservationitems LIKE TABLE OF bapi2093_res_item

                             WITH HEADER LINE,

        lt_profitability  LIKE TABLE OF bapi_profitability_segment

                            WITH HEADER LINE,

        lt_reservation TYPE TABLE OF zmrosxo00010 WITH HEADER LINE,

        lt_return LIKE  TABLE OF bapiret2 WITH HEADER LINE,

        lv_reservation LIKE bapirkpfc-res_no,

        lv_message1(200),

        lv_message2(200),

        lv_rspos LIKE resb-rspos,

        lv_rsnum LIKE rkpf-rsnum,

        lv_flag1(1),

        lv_matnr TYPE matnr,

        lv_dept TYPE zzmro_pldep,

        lv_unit TYPE zzmro_plunit,

        lv_zrpnr TYPE zzmro_rpnr,

        lv_message(200),

        lv_save_flag(1),

        lv_id TYPE SYMSGNO,

        lv_number TYPE SYMSGNO,

        lv_type TYPE BAPI_MTYPE.

  CLEAR:ls_reservationheader,lv_reservation,lt_reservationitems,

        lt_reservationitems[],lt_return,lt_return[],

        lv_message1,lv_rspos,lt_reservation,lt_reservation[].

  DATA: lv_zrplanlp  LIKE zmrothq10560-zrplanlp,

        lv_subrc     TYPE sysubrc,

        lv_flag2(1).

  DATA: lt_zmrothq10550 LIKE zmrothq10550 OCCURS 0 WITH HEADER LINE,

        "需求计划抬头/行项目表

        lt_zmrothq10560 LIKE zmrothq10560 OCCURS 0 WITH HEADER LINE.

**------------------ Part 2. 创建需求计划单 -----------------------**

  CLEAR: lv_zrpnr,lv_zrplanlp,lv_subrc.

  CLEAR: lt_zmrothq10550,lt_zmrothq10550[],lt_zmrothq10560,

         lt_zmrothq10560[].

*  lt_reservation[] = it_reservation[].

**------------------ Part 1. 创建预留 -----------------------**

*预留抬头赋值

  ls_reservationheader-res_date    = sy-datum.

*  IF LT_RESERVATION-ZTYPE = '1'.

  ls_reservationheader-move_type   = gs_head-bwart.

*"工作分解结构元素 (WBS 元素)

  ls_reservationheader-wbs_element  = gs_head-posid.

*"工作分解结构元素 (WBS 元素)

  ls_reservationheader-COSTCENTER  = gs_head-kostl.

  ls_reservationheader-move_stloc  = gs_head-lgort.

  ls_reservationheader-move_plant  = gs_head-werks.

  ls_reservationheader-created_by  = gs_head-zcreate_by.

*ABOVE

* 预留行项目赋值

  LOOP AT gt_item INTO gs_item.

    lt_reservationitems-material = gs_item-matnr."lv_matnr.

    CALL FUNCTION 'CONVERSION_EXIT_MATN1_INPUT'

      EXPORTING

        input        = gs_item-matnr

      IMPORTING

        output       = gs_item-matnr

      EXCEPTIONS

        length_error = 1

        OTHERS       = 2.

*物料转换一下

    lt_reservationitems-plant = gs_item-werks.

    lt_reservationitems-stge_loc = gs_item-lgort.

    lt_reservationitems-entry_qnt = gs_item-zbdmng.

    lt_reservationitems-entry_uom = gs_item-meins.

    lt_reservationitems-req_date = gs_item-bdter.

    IF gs_item-saknr NE ''.

    lt_reservationitems-gl_account = gs_item-saknr.

    ENDIF.

    lt_reservationitems-movement = 'X'.

    PERFORM frm_get_cmmtitem(ZMROEHQ10480) USING gs_item-matnr"物料

                                   gs_item-werks"工厂

                                   gs_head-bwart"移动类型

                                   gs_head-asset_no"资产号"20140214

                             CHANGING lt_reservationitems.

    APPEND lt_reservationitems.

    CLEAR  lt_reservationitems.

  ENDLOOP.

* BAPI创建预留

  CALL FUNCTION 'BAPI_RESERVATION_CREATE1'

    EXPORTING

      reservationheader    = ls_reservationheader

    IMPORTING

      reservation          = lv_reservation

    TABLES

      reservationitems     = lt_reservationitems

      profitabilitysegment = lt_profitability

      return               = lt_return.

* 读返回消息 确定是否创建成功

  LOOP AT lt_return WHERE type = 'A' OR type = 'E'.

    CONCATENATE lv_message1 lt_return-message INTO lv_message1.

  ENDLOOP.

  IF sy-subrc = 0.

    CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.

*预留创建失败,写入日志表.

      gs_log-zwzglptid = gs_head-zwzglptid.

      gs_log-datum = sy-datum.

      gs_log-uzeit = sy-uzeit.

      gs_log-werks = gs_head-werks.

      gs_log-zwzglrpdart = gs_head-zwzglrpdart.

      gs_log-zwzglmeth = gs_head-zwzglmeth.

      gs_log-zrpdart = gs_head-zrpdart.

      gs_log-if_po = '1'.

      gs_log-zpubcnr = lv_reservation.

      gs_log-po_log = text-013.

      gs_log-znumber  = lv_number.

      gs_log-type     = lv_type.

      gs_log-id       = lv_id.

      IF gt_log[] IS NOT INITIAL.

      MODIFY gt_log FROM gs_log INDEX 1.

      ELSE.

      APPEND gs_log TO gt_log.

      ENDIF.

  ELSE.

    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

      EXPORTING

        WAIT = 'X'.

*预留创建成功,写入日志表.

      gs_log-zwzglptid = gs_head-zwzglptid.

      gs_log-datum = sy-datum.

      gs_log-uzeit = sy-uzeit.

      gs_log-werks = gs_head-werks.

      gs_log-zwzglrpdart = gs_head-zwzglrpdart.

      gs_log-zwzglmeth = gs_head-zwzglmeth.

      gs_log-zrpdart = gs_head-zrpdart.

*      gs_log-if_po = '1'.  "暂时还无法确定是否创建成功

      gs_log-zpubcnr = lv_reservation.

      gs_log-po_log = text-012.

      gs_log-znumber  = lv_number.

      gs_log-type     = lv_type.

      gs_log-id       = lv_id.

      IF gt_log[] IS NOT INITIAL.

      MODIFY gt_log FROM gs_log INDEX 1.

      ELSE.

      APPEND gs_log TO gt_log.

      ENDIF.

  ENDIF.

猜你喜欢

转载自blog.csdn.net/sq1986127/article/details/81067756