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