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.