function zrfc_sd_pce_0086.
*"----------------------------------------------------------------------
*"*"Local interface:
*" EXPORTING
*" VALUE(ZMESSAGE) LIKE ZPCEGMESSAGE STRUCTURE ZPCEGMESSAGE
*" TABLES
*" POHEADER STRUCTURE ZCTO_PO_HEADER OPTIONAL
*" PODETAIL STRUCTURE ZCTO_PO_DETAIL OPTIONAL
*" POCONFIGURE STRUCTURE ZCTO_PO_CONFIG OPTIONAL
*" POADDRESS STRUCTURE ZCTO_PO_ADDRESS OPTIONAL
*" Z_SO STRUCTURE ZCTO_SO OPTIONAL
*" ZZSOERRORLOG STRUCTURE BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
***----
data: zhhpn like zcto_po_detail-hhpn.
data: zpodetail like zcto_po_detail,
zsoerrorlog like zsoerrorlog,
zqty like zcto_po_detail-qty,
zamount like zcto_po_detail-amount.
p_werks = zplant.
if poheader[] is initial
or podetail[] is initial
or poaddress[] is initial.
z_so-custpo = 'no data'.
z_so-hhso = 'Fail'.
append z_so.
exit.
endif.
sort podetail by hhpn.
read table podetail index 1.
zhhpn = podetail-hhpn.
**** if HHFG, summer to one line 20100415
loop at podetail.
if podetail-hhpn = zhhpn.
move-corresponding podetail to zpodetail .
zqty = zqty + podetail-qty .
zamount = zamount + podetail-amount.
continue.
else.
move-corresponding zpodetail to itab .
itab-qty = zqty.
itab-amount = zamount.
append itab.
clear: zqty,zamount,zpodetail.
zhhpn = podetail-hhpn.
move-corresponding podetail to zpodetail .
zqty = zqty + zpodetail-qty .
zamount = zamount + zpodetail-amount.
endif.
endloop.
move-corresponding zpodetail to itab .
append itab.
***read header
loop at itab.
read table poheader with key custpo = itab-custpo.
if sy-subrc = 0.
itab-cpodate = poheader-cpodate.
itab-currency = poheader-currency.
itab-totalamount = poheader-totalamount.
itab-emcso = poheader-emcso.
itab-endcpo = poheader-endcpo.
itab-resellerso = poheader-resellerso.
itab-producttype = poheader-producttype.
* itab-customername = POHEADER-customername.
* itab-soflag = POHEADER-soflag.
* itab-hhso = POHEADER-hhso.
itab-transdate = poheader-transdate .
itab-transtime = poheader-transtime.
modify itab.
else.
delete itab.
endif.
endloop.
***read address
loop at itab.
read table poaddress with key custpo = itab-custpo.
if sy-subrc = 0.
move-corresponding poaddress to itab.
modify itab.
else.
delete itab.
endif.
endloop.
**Process data Create SO
delete itab[] where soflag eq 'Y'.
move itab[] to t_comp[].
sort t_comp by custpo.
delete adjacent duplicates from t_comp comparing custpo.
sort itab by custpo cpoline.
delete adjacent duplicates from itab comparing custpo cpoline.
loop at t_comp.
clear: zbapisdhd1,zbapisdhd1[], zsalesdocument,zbapiret2,
zbapisditm,zbapisditm[],zbapiparnr,zbapiparnr[],
zbapischdl,zbapischdl[],zbapicond,zbapicond[],
zbapisdtext,zbapisdtext[].
z_so-custpo = t_comp-custpo.
g_item = 10.
****--- order_header_in = zbapisdhd1
zbapisdhd1-doc_type = zdoc_type.
zbapisdhd1-sales_org = zsales_org.
zbapisdhd1-distr_chan = zdistr_chan.
zbapisdhd1-division = zdivision.
zbapisdhd1-purch_date = t_comp-cpodate.
if t_comp-reqdeldate < sy-datum.
zbapisdhd1-req_date_h = sy-datum.
else.
zbapisdhd1-req_date_h = t_comp-reqdeldate. "
endif.
* ZBAPISDHD1-REF_1 = T_COMP-EMCSO.
zbapisdhd1-ref_doc_l = t_comp-emcso. "Change by five
zbapisdhd1-purch_no_c = t_comp-custpo.
zbapisdhd1-currency = t_comp-currency. "
zbapisdhd1-created_by = 'PCE-ITPM'. "change by five
****add by five
zbapisdhd1-incoterms2 = 'LH'. "
zbapisdhd1-price_date = t_comp-reqdeldate.
zbapisdhd1-ref_1 = t_comp-resellerso . "keep
zbapisdhd1-ref_1_s = t_comp-pickslipnumber. "keep
zbapisdhd1-purch_no_s = t_comp-endcpo.
****add by five
append zbapisdhd1.
***---ORDER_TEXT = zbapisdtext 2010.04.07
zbapisdtext-text_id = '0001'. "header text
zbapisdtext-langu = sy-langu.
zbapisdtext-text_line = t_comp-producttype.
append zbapisdtext.
clear zbapisdtext.
****--- order_partners = zbapiparnr
* SELECT kna1~kunnr INTO p_kunnr1
* FROM kna1
* WHERE name1 = t_comp-customername." BY FIVE 20100525
select single cvalue into p_kunnr1 from zpcecontrolvalue
where werks = 'PEL1'
and ctype = 'CTOCUST'
and indicator1 = 'ACT'.
if sy-subrc = 0 .
select single * from knvv
where kunnr = p_kunnr1
and knvv~vkorg = zsales_org
and knvv~vtweg = zdistr_chan
and knvv~spart = zdivision.
if sy-subrc <> 0.
exit.
else.
p_kunnr2 = p_kunnr1.
endif.
* EXIT. "Jimmy " by five remark0525
endif.
* ENDSELECT.
if p_kunnr2 is initial.
concatenate t_comp-customername
' is not find in customer data' into zmessage.
z_so-hhso = 'Fail'.
append z_so.
exit.
else.
zbapiparnr-partn_role = 'AG'.
zbapiparnr-partn_numb = p_kunnr2.
append zbapiparnr.
endif.
clear:p_kunnr2,p_kunnr1.
zbapiparnr-partn_role = 'WE'.
zbapiparnr-partn_numb = 'YYYYYYYYYY'. " one time customer
zbapiparnr-name = t_comp-shipto_name.
zbapiparnr-name_2 = t_comp-deliverto.
****ZBAPIPARNR-NAME_3 =
****ZBAPIPARNR-NAME_4 =
zbapiparnr-street = t_comp-shipto_street.
zbapiparnr-priv_addr = t_comp-shipto_street+35(10).
zbapiparnr-district = t_comp-shipto_state.
zbapiparnr-countr_iso = t_comp-shipto_iso.
zbapiparnr-postl_code = t_comp-shipto_postcode.
zbapiparnr-city = t_comp-shipto_city.
append zbapiparnr.
***** change ship to party with ZCTO_PO_ADDRESS intall address
* zbapiparnr-partn_role = 'WE'.
* zbapiparnr-partn_numb = 'YYYYYYYYYY'. " one time customer
* zbapiparnr-name = t_comp-in_name.
* zbapiparnr-street = t_comp-in_address.
* zbapiparnr-address = t_comp-in_address1.
* zbapiparnr-priv_addr = t_comp-in_address2.
* zbapiparnr-telephone = t_comp-in_phone.
* zbapiparnr-telebox = t_comp-in_email.
* zbapiparnr-fax_number = t_comp-in_fax.
* zbapiparnr-country = t_comp-in_country.
* zbapiparnr-region = t_comp-in_state.
* zbapiparnr-postl_code = t_comp-in_postalcode.
* zbapiparnr-city = t_comp-in_city.
* APPEND zbapiparnr.
clear:p_kunnr2,p_kunnr1.
* SELECT SINGLE kunnr adrnr INTO (p_kunnr2,p_adrnr) FROM kna1
* WHERE kunnr = 'YYYYYYYYYY'.
* IF SY-SUBRC <> 0.
* CONCATENATE T_COMP-CUSTOMERNAME 'BILL to party is not find'
*INTO ZMESSAGE.
* EXIT.
* ELSE.
* ZBAPIPARNR-PARTN_ROLE = 'RE'.
* ZBAPIPARNR-PARTN_NUMB = P_KUNNR2.
* ZBAPIPARNR-ADDR_LINK = P_ADRNR.
* APPEND ZBAPIPARNR.
* ENDIF.
************* address=ZBAPIADDRESS
* IF sy-subrc = 0.
* zbapiaddress-addr_no = p_adrnr .
* zbapiaddress-name = t_comp-billto_name .
* zbapiaddress-name_2 = t_comp-deliverto .
* zbapiaddress-street = t_comp-billto_street.
* zbapiaddress-str_suppl1 = t_comp-billto_street1.
* zbapiaddress-str_suppl2 = t_comp-billto_street2.
* zbapiaddress-location = t_comp-billto_street3.
* zbapiaddress-city = t_comp-billto_city.
* zbapiaddress-country = t_comp-billto_state.
* zbapiaddress-postl_cod1 = t_comp-billto_postcode.
* APPEND zbapiaddress.
* ENDIF.
************order item
loop at itab where custpo = t_comp-custpo.
****appedn pre-zero
call function 'CONVERSION_EXIT_ALPHA_INPUT'
exporting
input = g_item
importing
utput = g_item.
****--- ORDER_ITEMS_IN = zbapisditm
zbapisditm-itm_number = g_item.
zbapisditm-material = itab-hhpn.
zbapisditm-item_categ = zdoc_type.
* zbapisditm-BATCH = ''.
zbapisditm-plant = p_werks.
* zbapisditm-STORE_LOC = ''.
zbapisditm-target_qty = itab-qty.
zbapisditm-purch_no_c = itab-custpo.
zbapisditm-po_itm_no = itab-cpoline.
zbapisditm-ref_1 = itab-emcso.
select single lgpro prctr
into (zbapisditm-store_loc,zbapisditm-profit_ctr)
from marc
where matnr = zbapisditm-material
and werks = p_werks.
append zbapisditm.clear zbapisditm.
***---ORDER_TEXT = zbapisdtext 2010.04.07
zbapisdtext-itm_number = g_item. "item text
zbapisdtext-text_id = '0001'.
zbapisdtext-langu = sy-langu.
zbapisdtext-text_line = itab-b2b_mc_code.
append zbapisdtext.clear zbapisdtext.
***--ORDER_SCHEDULES_IN = zbapischdl
zbapischdl-itm_number = g_item.
zbapischdl-req_date = itab-reqdeldate.
zbapischdl-req_qty = itab-qty.
zbapischdl-sched_line = '1'.
zbapischdl-req_date = zbapisdhd1-req_date_h .
zbapischdl-tp_date = zbapisdhd1-req_date_h .
zbapischdl-ms_date = zbapisdhd1-req_date_h .
zbapischdl-load_date = zbapisdhd1-req_date_h .
zbapischdl-gi_date = zbapisdhd1-req_date_h .
zbapischdl-sched_type = zschtype.
append zbapischdl.clear zbapischdl.
***--ORDER_CONDITIONS_IN = zbapicond
zbapicond-itm_number = g_item.
zbapicond-cond_type = 'PR00'.
zbapicond-cond_value = itab-price.
zbapicond-currency = itab-currency.
zbapicond-cond_p_unt = '1'.
append zbapicond.clear zbapicond.
* zbapicond-itm_number = g_item.
* zbapicond-cond_type = 'MWST'.
* zbapicond-cond_value = '0'.
* zbapicond-currency = itab-currency.
* zbapicond-cond_p_unt = '1'.
* APPEND zbapicond.
g_item = g_item + 10.
endloop.
call function 'BAPI_SALESORDER_CREATEFROMDAT2'
exporting
* SALESDOCUMENTIN =
order_header_in = zbapisdhd1
importing
salesdocument = zsalesdocument
tables
return = zbapiret2
order_items_in = zbapisditm
* ORDER_ITEMS_INX =
order_partners = zbapiparnr
order_schedules_in = zbapischdl
* ORDER_SCHEDULES_INX =
order_conditions_in = zbapicond
order_text = zbapisdtext.
* PARTNERADDRESSES = ZBAPIADDRESS .
zzsoerrorlog[] = zbapiret2[].
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'Y'.
call function 'ENQUE_SLEEP'
exporting
seconds = 1.
if not zsalesdocument is initial. """
call function 'BAPI_TRANSACTION_COMMIT'
exporting
wait = 'X'
importing
return = zreturn.
if sy-subrc = 0.
update zcto_po_header set soflag = 'Y'
hhso = zsalesdocument
where custpo = t_comp-custpo.
if sy-subrc = 0.
z_so-hhso = zsalesdocument. append z_so.
zmessage = 'generate success!'.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
z_so-hhso = 'Fail'. append z_so.
zmessage = 'generate fail!'.
endif.
else.
call function 'BAPI_TRANSACTION_ROLLBACK'.
z_so-hhso = 'Fail'. append z_so.
zmessage = 'generate fail!'.
endif.
else.
z_so-hhso = 'Fail'. append z_so.
zmessage = 'generate fail!'.
endif.
if not zzsoerrorlog[] is initial.
select single * from zsoerrorlog where vbeln = t_comp-custpo.
if sy-subrc = 0 .
delete from zsoerrorlog where vbeln = t_comp-custpo.
if sy-subrc = 0.
loop at zzsoerrorlog.
move-corresponding zzsoerrorlog to zsoerrorlog .
zsoerrorlog-vbeln = t_comp-custpo.
zsoerrorlog-znumber = zzsoerrorlog-number.
zsoerrorlog-zmessage = zzsoerrorlog-message.
zsoerrorlog-zparameter = zzsoerrorlog-parameter.
zsoerrorlog-zrow = zzsoerrorlog-row.
zsoerrorlog-ztime = sy-uzeit.
zsoerrorlog-zdate = sy-datum.
insert into zsoerrorlog values zsoerrorlog.
endloop.
endif.
else.
loop at zzsoerrorlog.
move-corresponding zzsoerrorlog to zsoerrorlog .
zsoerrorlog-vbeln = t_comp-custpo.
zsoerrorlog-znumber = zzsoerrorlog-number.
zsoerrorlog-zmessage = zzsoerrorlog-message.
zsoerrorlog-zparameter = zzsoerrorlog-parameter.
zsoerrorlog-zrow = zzsoerrorlog-row.
zsoerrorlog-ztime = sy-uzeit.
zsoerrorlog-zdate = sy-datum.
insert into zsoerrorlog values zsoerrorlog.
endloop.
endif.
endif.
endloop.
endfunction.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14397246/viewspace-666218/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/14397246/viewspace-666218/