METHOD zcl_ii_si_mmi015_s4_ib_syn~si_mmi015_s4_ib_syn.
*** **** INSERT IMPLEMENTATION HERE **** ***
DATA: ls_item_req_header TYPE zcl_dt_mmi015_s4_req_head.
DATA: lt_item_req_item TYPE zcl_dt_mmi015_s4_req_item_tab,
ls_item_req_item LIKE LINE OF lt_item_req_item.
DATA: lt_return_res TYPE zcl_dt_mmi015_s4_res_retur_tab.
DATA: ls_return_res LIKE LINE OF lt_return_res.
DATA:w_head TYPE bapimereqheader,
w_headx TYPE bapimereqheaderx,
t_new_item TYPE TABLE OF bapimereqitemimp,
i_new_item LIKE LINE OF t_new_item,
t_new_itemx TYPE TABLE OF bapimereqitemx,
i_new_itemx LIKE LINE OF t_new_itemx,
t_new_acco TYPE TABLE OF bapimereqaccount,
i_new_acco LIKE LINE OF t_new_acco,
t_new_accox TYPE TABLE OF bapimereqaccountx,
i_new_accox LIKE LINE OF t_new_accox.
DATA: t_pritemtext TYPE TABLE OF bapimereqitemtext,
i_pritemtext LIKE LINE OF t_pritemtext.
DATA:bt_ret2 TYPE TABLE OF bapiret2,
bs_ret2 LIKE LINE OF bt_ret2.
DATA:v_banfn TYPE eban-banfn.
DATA:l_txz01 TYPE string.
DATA:lt_ztmm005 TYPE TABLE OF ztmm005.
DATA:ls_ztmm005 TYPE ztmm005.
DATA:lv_xh2 TYPE ztmm005-xh.
DATA:lv_xhitem TYPE ztmm005-xhitem.
DATA:lv_cgsqd TYPE ztmm005-cgsqd.
DATA:lv_error,lv_xh.
ls_item_req_header = input-mt_mmi015_s4_req-head.
lt_item_req_item = input-mt_mmi015_s4_req-item.
w_head-pr_type = 'Z005'.
w_headx-pr_type = 'X'.
CLEAR:lv_error,v_banfn,lv_xh2,lv_xhitem,lv_cgsqd.
lv_cgsqd = ls_item_req_header-cgsqd.
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ls_ztmm005 FROM ztmm005 WHERE cgsqd = lv_cgsqd AND ztype = 'S'.
IF sy-subrc = 0.
lv_error = 'X'.
ls_return_res-type = 'E'.
ls_return_res-mess = '此OA申请单已创建SAP采购申请,' && ls_ztmm005-banfn.
ls_return_res-cgsqd = ls_item_req_item-cgsqd.
APPEND ls_return_res TO lt_return_res.
ENDIF.
IF lv_error = ''.
LOOP AT lt_item_req_item INTO ls_item_req_item.
CLEAR:i_new_item,i_new_itemx,i_new_acco,i_new_accox,i_pritemtext.
IF ls_item_req_item-knttp = 'F' AND ls_item_req_item-aufnr = ''.
lv_error = 'X'.
ls_return_res-type = 'E'.
ls_return_res-mess = '行:' && ls_item_req_item-row && '/没有指定内订单或工单,科目类别不能传值F。'.
ls_return_res-cgsqd = ls_item_req_item-cgsqd.
APPEND ls_return_res TO lt_return_res.
EXIT.
ELSEIF ls_item_req_item-knttp <> 'F' AND ls_item_req_item-aufnr <> ''.
lv_error = 'X'.
ls_return_res-type = 'E'.
ls_return_res-mess = '行:' && ls_item_req_item-row && '/指定了内订单或工单,科目类别应传值F。'.
ls_return_res-cgsqd = ls_item_req_item-cgsqd.
APPEND ls_return_res TO lt_return_res.
EXIT.
ENDIF.
IF ls_item_req_item-knttp = 'K' AND ls_item_req_item-kostl = ''.
lv_error = 'X'.
ls_return_res-type = 'E'.
ls_return_res-mess = '行:' && ls_item_req_item-row && '/没有指定成本中心,科目类别不能传值K。'.
ls_return_res-cgsqd = ls_item_req_item-cgsqd.
APPEND ls_return_res TO lt_return_res.
EXIT.
ELSEIF ls_item_req_item-knttp <> 'K' AND ls_item_req_item-kostl <> ''.
lv_error = 'X'.
ls_return_res-type = 'E'.
ls_return_res-mess = '行:' && ls_item_req_item-row && '/指定了成本中心,科目类别应传值K。'.
ls_return_res-cgsqd = ls_item_req_item-cgsqd.
APPEND ls_return_res TO lt_return_res.
EXIT.
ENDIF.
i_new_item-preq_item = ls_item_req_item-bnfpo.
i_new_item-pur_group = ls_item_req_item-ekgrp.
i_new_item-short_text = ls_item_req_item-txz01.
i_new_item-matl_group = ls_item_req_item-matkl.
i_new_item-item_cat = '0'.
i_new_item-acctasscat = ls_item_req_item-knttp.
i_new_item-quantity = ls_item_req_item-menge.
i_new_item-unit = ls_item_req_item-meins.
i_new_item-deliv_date = ls_item_req_item-lfdat.
i_new_item-plant = ls_item_req_item-werks.
i_new_item-preq_name = ls_item_req_item-afnam.
APPEND i_new_item TO t_new_item.
i_new_itemx-preq_item = ls_item_req_item-bnfpo.
i_new_itemx-preq_itemx = 'X'.
i_new_itemx-pur_group = 'X'.
i_new_itemx-short_text = 'X'.
i_new_itemx-matl_group = 'X'.
i_new_itemx-item_cat = 'X'.
i_new_itemx-acctasscat = 'X'.
i_new_itemx-quantity = 'X'.
i_new_itemx-unit = 'X'.
i_new_itemx-deliv_date = 'X'.
i_new_itemx-plant = 'X'.
i_new_itemx-preq_name = 'X'.
APPEND i_new_itemx TO t_new_itemx.
i_new_acco-preq_item = ls_item_req_item-bnfpo.
i_new_acco-orderid = |{ ls_item_req_item-aufnr ALPHA = IN }|.
-
IF ls_item_req_item-aufnr = ''. i_new_acco-costcenter = |{ ls_item_req_item-kostl ALPHA = IN }|.
-
ENDIF. i_new_acco-gl_account = |{ ls_item_req_item-sakto ALPHA = IN }|. i_new_acco-serial_no = '01'. APPEND i_new_acco TO t_new_acco. i_new_accox-preq_item = 'X'. i_new_accox-preq_item = ls_item_req_item-bnfpo. i_new_accox-orderid = 'X'.
-
IF ls_item_req_item-aufnr = ''. i_new_accox-costcenter = 'X'.
-
ENDIF. i_new_accox-gl_account = 'X'. i_new_accox-preq_itemx = 'X'. i_new_accox-serial_no = '01'. APPEND i_new_accox TO t_new_accox. i_pritemtext-preq_item = ls_item_req_item-bnfpo. i_pritemtext-text_id = 'B01'. i_pritemtext-text_line = ls_item_req_item-ztext. APPEND i_pritemtext TO t_pritemtext. ENDLOOP.
ENDIF.
IF lv_error = ‘’.
CALL FUNCTION 'BAPI_PR_CREATE' EXPORTING prheader = w_head prheaderx = w_headx IMPORTING number = v_banfn TABLES return = bt_ret2 pritem = t_new_item pritemx = t_new_itemx praccount = t_new_acco praccountx = t_new_accox "pritemtext = t_new_text " prcomponents = t_new_comp "prcomponentsx = t_new_compx pritemtext = t_pritemtext EXCEPTIONS OTHERS = 1. LOOP AT bt_ret2 INTO bs_ret2 WHERE type = 'E' . CLEAR ls_return_res. ls_return_res-mess = bs_ret2-message. ls_return_res-banfn = v_banfn. ls_return_res-type = 'E'. ls_return_res-cgsqd = ls_item_req_item-cgsqd. APPEND ls_return_res TO lt_return_res. ENDLOOP. IF sy-subrc = 0. CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'. ELSE. CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' EXPORTING wait = 'X'. ls_return_res-banfn = v_banfn. ls_return_res-type = 'S'. ls_return_res-cgsqd = ls_item_req_item-cgsqd. ls_return_res-mess = '单号:' && ls_item_req_item-cgsqd && '创建sap采购申请单号:' && v_banfn && '成功'. APPEND ls_return_res TO lt_return_res. ENDIF.
ENDIF.
REFRESH:lt_ztmm005.
SELECT MAX( xh ) INTO lv_xh2 FROM ztmm005.
ADD 1 TO lv_xh2.
LOOP AT lt_item_req_item INTO ls_item_req_item.
ADD 1 TO lv_xhitem.
CLEAR ls_ztmm005.
ls_ztmm005-xh = lv_xh2.
ls_ztmm005-xhitem = lv_xhitem.
ls_ztmm005-cgsqd = ls_item_req_item-cgsqd.
ls_ztmm005-zrow = ls_item_req_item-row.
ls_ztmm005-banfn = v_banfn.
ls_ztmm005-bnfpo = ls_item_req_item-bnfpo.
ls_ztmm005-ekgrp = ls_item_req_item-ekgrp.
ls_ztmm005-txz01 = ls_item_req_item-txz01.
ls_ztmm005-matkl = ls_item_req_item-matkl.
ls_ztmm005-knttp = ls_item_req_item-knttp.
ls_ztmm005-menge = ls_item_req_item-menge.
ls_ztmm005-meins = ls_item_req_item-meins.
ls_ztmm005-lfdat = ls_item_req_item-lfdat.
ls_ztmm005-werks = ls_item_req_item-werks.
ls_ztmm005-preis = ls_item_req_item-preis.
ls_ztmm005-afnam = ls_item_req_item-afnam.
ls_ztmm005-kostl = ls_item_req_item-kostl.
ls_ztmm005-aufnr = ls_item_req_item-aufnr.
ls_ztmm005-sakto = ls_item_req_item-sakto.
ls_ztmm005-ztext = ls_item_req_item-ztext.
ls_ztmm005-ztype = ls_return_res-type.
ls_ztmm005-mess = ls_return_res-mess.
ls_ztmm005-field1 = ls_item_req_item-field1.
ls_ztmm005-field2 = ls_item_req_item-field2.
ls_ztmm005-field3 = ls_item_req_item-field3.
ls_ztmm005-field4 = ls_item_req_item-field4.
ls_ztmm005-field5 = ls_item_req_item-field5.
APPEND ls_ztmm005 TO lt_ztmm005.
ENDLOOP.IF lt_ztmm005 IS NOT INITIAL.
MODIFY ztmm005 FROM TABLE lt_ztmm005.
ENDIF.output-mt_mmi015_s4_res-return = lt_return_res.
ENDMETHOD.