Делал как-то давно, но сейчас сделать какой-то демо-пример уже времени нет (конец рабочего дня), так что просто выложу часть работающего у нас кода, думаю разберешься:
Code:
*&---------------------------------------------------------------------*
*& Form create_sd_order
*&---------------------------------------------------------------------*
form create_sd_order tables it_ccrqp structure zpm_ccrqp
using is_ccrqk like zpm_ccrqk
changing p_msg_type
vbeln like vbak-vbeln.
data: header like bapisdhd1.
data: it_item like bapisditm occurs 10 with header line,
it_schedule like bapischdl occurs 10 with header line,
it_partners like bapiparnr occurs 1 with header line.
data: return like bapiret2 occurs 1 with header line.
data: mt_saler(4).
data: it_vbadr like sadrvb occurs 0 with header line,
it_vbpa like vbpavb occurs 0 with header line.
data posnr(6) type n.
data l_approve like it_ccrqp-approve.
data l_ZPM_TVKBZ like ZPM_TVKBZ.
define create_partner.
clear it_partners.
it_partners-partn_role = &1.
it_partners-partn_numb = &2.
append it_partners.
end-of-definition.
* Create Header
move: 'ZCCO' to header-doc_type,
is_ccrqk-vkorg to header-sales_org,
is_ccrqk-vtweg to header-distr_chan,
is_ccrqk-spart to header-division,
is_ccrqk-vkbur to header-sales_off,
is_ccrqk-wadat to header-purch_date,
is_ccrqk-wadat to header-doc_date,
* is_ccrqk-wadat_ist to header-req_date_h,
is_ccrqk-vbeln_ag to header-ref_doc,
space to header-ass_number,
is_ccrqk-wadat_ist to header-price_date,
'EXW' to header-incoterms1,
'Отгрузка с нефтебазы' to header-incoterms2,
'0001' to header-pmnttrms.
if not is_ccrqk-vbeln_ag is initial.
move 'G' to header-refdoc_cat.
select single kdgrp zterm inco1 inco2
into (header-cust_group,
header-pmnttrms,
header-incoterms1,
header-incoterms2)
from vbkd where vbeln = is_ccrqk-vbeln_ag
and posnr = '000000'.
* Create Partner with AG reference
call function 'SD_PARTNER_READ'
exporting
f_vbeln = is_ccrqk-vbeln_ag
tables
i_xvbadr = it_vbadr
i_xvbpa = it_vbpa.
if not it_vbpa[] is initial.
loop at it_vbpa.
create_partner it_vbpa-parvw it_vbpa-kunnr.
endloop.
endif.
else.
* Create Partner Default
concatenate 'MT' is_ccrqk-vkorg(2)
into mt_saler.
create_partner 'AG' is_ccrqk-kunnr.
create_partner 'RE' is_ccrqk-kunnr.
create_partner 'RG' is_ccrqk-kunnr.
create_partner 'WE' is_ccrqk-kunnr.
create_partner 'ZG' mt_saler.
create_partner 'ZP' mt_saler.
create_partner 'ZR' mt_saler.
endif.
concatenate is_ccrqk-vkorg
is_ccrqk-vkbur
is_ccrqk-wadat into header-purch_no_c
separated by '/'.
* Create Item & Schedule
clear: it_item,
it_schedule.
posnr = 10.
loop at it_ccrqp.
clear: it_item,
it_schedule.
move: posnr to it_item-itm_number,
it_ccrqp-matnr to it_item-material,
is_ccrqk-werks to it_item-plant,
it_ccrqp-lgort to it_item-store_loc,
is_ccrqk-wadat_ist to it_item-price_date.
select single vstel into it_item-ship_point
from ZPM_TVKBZ
where vkorg = is_ccrqk-vkorg
and vtweg = is_ccrqk-vtweg
and spart = is_ccrqk-spart
and werks = is_ccrqk-werks
and lgort = it_ccrqp-lgort.
if sy-subrc ne 0.
move: '0001' to it_item-ship_point.
endif.
if it_ccrqp-approve > '1.1'.
it_item-overdlvtol = 100 / it_ccrqp-approve.
l_approve = it_item-overdlvtol * it_ccrqp-approve.
if l_approve < 100.
it_item-overdlvtol = it_item-overdlvtol + '0.1'.
endif.
else.
it_item-overdlvtol = 50.
endif.
if not is_ccrqk-vbeln_ag is initial.
select * from vbap up to 1 rows where vbeln = is_ccrqk-vbeln_ag
and matnr = it_ccrqp-matnr.
move: vbap-vbeln to it_item-ref_doc,
vbap-posnr to it_item-ref_doc_it,
'G' to it_item-ref_doc_ca.
select single zterm inco1 inco2 into (it_item-pmnttrms,
it_item-incoterms1,
it_item-incoterms2)
from vbkd
where vbeln = is_ccrqk-vbeln_ag
and posnr = vbap-posnr.
endselect.
else.
move: 'EXW' to it_item-incoterms1,
'Отгрузка с нефтебазы' to it_item-incoterms2,
'0001' to it_item-pmnttrms.
endif.
move: posnr to it_schedule-itm_number,
it_ccrqp-approve to it_schedule-req_qty,
is_ccrqk-wadat_ist to it_schedule-req_date,
is_ccrqk-wadat_ist to it_schedule-dlv_date.
append: it_item,
it_schedule.
add 10 to posnr.
endloop.
* Exec BAPI
call function 'BAPIT_SALESORDER_CREATEFROMDAT2'
exporting
order_header_in = header
importing
salesdocument = vbeln
tables
return = return
order_items_in = it_item
order_partners = it_partners
order_schedules_in = it_schedule.
* EXEC Message_log
if not return[] is initial.
delete it_msg where kunnr = is_ccrqk-kunnr.
loop at return.
clear it_msg.
move is_ccrqk-kunnr to it_msg-kunnr.
move-corresponding return to it_msg.
insert it_msg into table it_msg.
endloop.
endif.
* EXEC COMMIT
if not vbeln is initial.
call function 'BAPIT_TRANSACTION_COMMIT'.
endif.
p_msg_type = 'S'.
read table return with key type = 'A'.
if sy-subrc = 0.
p_msg_type = return-type.
exit.
endif.
read table return with key type = 'E'.
if sy-subrc = 0.
p_msg_type = return-type.
exit.
endif.
read table return with key type = 'W'.
if sy-subrc = 0.
p_msg_type = return-type.
exit.
endif.
read table return with key type = 'I'.
if sy-subrc = 0.
p_msg_type = return-type.
exit.
endif.
endform. " create_sd_order
Code: