实现代码如下
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.
下一篇: 物料主数据相关权限...