Quisiera saber si alguno tiene un codigo de ejemplo para la ejecuccion de esta BAPI, que necesito para crear pedidos de compra para servicios, en necesario que cada linea del pedido tenga varias lineas en servicios, y tambien debe tener informacion de CO.
Variables
-----------------------------------------------------------
DATA: lv_dummy TYPE packno,
lv_pkgno TYPE packno,
lv_item_pno TYPE packno,
lv_pckg_no TYPE char10,
lv_pckg_no1 TYPE char10,
lv_subpckg_no TYPE char10,
lv_line_no TYPE char2,
lv_line_no1 TYPE char2.
Internal Tables
-----------------------------------------------------------
DATA: lt_poitem TYPE TABLE OF bapimepoitem,
lt_poitemx TYPE TABLE OF bapimepoitemx,
lt_poaccount TYPE TABLE OF bapimepoaccount,
lt_poaccountx TYPE TABLE OF bapimepoaccountx,
lt_poservices TYPE TABLE OF bapiesllc,
lt_poservices TYPE TABLE OF bapiesllc,
lt_posrvaccessvalues TYPE TABLE OF bapiesklc,
gt_po TYPE TABLE OF {structure we maintain}.
Work Area
-----------------------------------------------------------
DATA: ls_poitem TYPE bapimepoitem,
ls_poitemx TYPE bapimepoitemx,
ls_poaccount TYPE bapimepoaccount,
ls_poaccountx TYPE bapimepoaccountx,
ls_poservices TYPE bapiesllc,
ls_poservices TYPE bapiesllc,
ls_posrvaccessvalues TYPE bapiesklc.
Logic
-----------------------------------------------------------
CLEAR: lv_pkgno.
lv_dummy = lc_1. " maintaining Line number at service level
*_ Item level details starts
LOOP AT gt_po INTO DATA(ls_po)
WHERE ebeln = <ls_po_temp>-ebeln. "#EC CI_NESTED
*_ POITEM & POITEMX
---------------------
ls_poitem-item_cat = ls_po-pstyp. " Item category in purchasing document
IF ls_po-pstyp IS NOT INITIAL.
lv_pkgno = lv_dummy.
ls_poitem-pckg_no = lv_pkgno.
" for mapping in poservice table, moving 'pckg no'(@item level) to lv_item_pno
lv_item_pno = ls_poitem-pckg_no.
lv_dummy = lv_item_pno + 2.
" additional fields to be passed
ls_poitem-period_ind_expiration_date = lc_d. " Period Ind Exp Date
ls_poitemx-item_cat = lc_x. " Item category in purchasing document
ls_poitemx-pckg_no = lc_x.
ENDIF.
IF ls_po-knttp = 'K'
AND ls_po-pstyp EQ 'D'.
LOOP AT lt_poitem TRANSPORTING NO FIELDS
WHERE po_item = ls_po-ebelp
AND pckg_no = lv_item_pno.
*_ POSERVICES
---------------
ls_poservices-pckg_no = ls_poservices-line_no = lv_item_pno.
lv_pckg_no = ls_poservices-pckg_no.
lv_line_no = lv_item_pno+8(2).
ls_poservices-outl_ind = lc_x.
ls_poservices-subpckg_no = lv_item_pno + 1.
lv_subpckg_no = ls_poservices-subpckg_no.
APPEND ls_poservices TO lt_poservices.
ls_poservices-pckg_no = ls_poservices-pckg_no + 1.
lv_pckg_no1 = ls_poservices-pckg_no.
ls_poservices-line_no = lv_pckg_no1.
lv_line_no1 = ls_poservices-line_no+8(2).
ls_poservices-ext_line = lc_1000(2).
ls_poservices-outl_ind = space.
ls_poservices-subpckg_no = space. " ls_poservices-pckg_no.
ls_poservices-service = ls_po-matnr.
ls_poservices-short_text = ls_po-txz01.
ls_poservices-quantity = ls_po-menge.
ls_poservices-base_uom = ls_po-lmein.
ls_poservices-gr_price = ls_po-netpr.
ls_poservices-net_value = ls_po-netpr.
ls_poservices-matl_group = ls_po-wgbez.
APPEND ls_poservices TO lt_poservices.
CLEAR: ls_poservices.
*_ POSRVACCESSVALUES
-----------------------
ls_posrvaccessvalues-pckg_no = lv_pckg_no1.
ls_posrvaccessvalues-line_no = lv_pckg_no1.
ls_posrvaccessvalues-serno_line = lv_item_pno+8(2).
ls_posrvaccessvalues-percentage = '100'.
ls_posrvaccessvalues-serial_no = lv_item_pno+8(2).
ls_posrvaccessvalues-quantity = ls_po-menge.
ls_posrvaccessvalues-net_value = ls_po-netpr.
APPEND ls_posrvaccessvalues TO lt_posrvaccessvalues.
CLEAR: ls_posrvaccessvalues.
" Mapping the account assignment fields at service level.
LOOP AT lt_poservices TRANSPORTING NO FIELDS
WHERE pckg_no = lv_pckg_no1
AND line_no = lv_line_no1.
" Account Assignment at service level
ls_poaccount-po_item = ls_po-ebelp. " Item number
ls_poaccountx-po_item = ls_po-ebelp. " Item number
ls_poaccountx-po_itemx = lc_x. " Item number
ls_poaccount-serial_no = lv_line_no.
ls_poaccountx-serial_no = lv_line_no.
ls_poaccountx-serial_nox = lc_x.
PERFORM f_conv_poaccount USING ls_po
CHANGING ls_poaccount.
IF ls_poaccount-gl_account IS NOT INITIAL. " G/L Account Number
ls_poaccountx-gl_account = lc_x.
ENDIF.
IF ls_poaccount-costcenter IS NOT INITIAL. " Cost Center
ls_poaccountx-costcenter = lc_x.
ENDIF.
IF ls_poaccount-orderid IS NOT INITIAL. " Order Number
ls_poaccountx-orderid = lc_x.
ENDIF.
IF ls_poaccount-profit_ctr IS NOT INITIAL. " Profit Center
ls_poaccountx-profit_ctr = lc_x.
ENDIF.
IF ls_poaccount-wbs_element IS NOT INITIAL. " wbs element
ls_poaccountx-wbs_element = lc_x.
ENDIF.
ls_poaccount-co_area = lc_1000. " Control Area
ls_poaccountx-co_area = lc_x.
IF ls_poaccount-net_value IS NOT INITIAL. " Net Price
ls_poaccount-net_value = ls_po-netpr.
ls_poaccountx-net_value = lc_x.
ENDIF.
IF ls_poaccount-quantity IS NOT INITIAL. " Qty
ls_poaccount-quantity = ls_po-menge.
ls_poaccountx-quantity = lc_x.
ENDIF.
*_ Distribution percentage has to be passed value like below
ls_poaccount-distr_perc = '1.0'.
ls_poaccountx-distr_perc = lc_x.
APPEND ls_poaccount TO lt_poaccount.
APPEND ls_poaccountx TO lt_poaccountx.
CLEAR: ls_poaccount, ls_poaccountx.
ENDLOOP.
ENDLOOP.
ENDIF.
ENDLOOP.
*_ Item level details ends
CLEAR: lv_ponum.
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
testrun = lv_testrun
IMPORTING
exppurchaseorder = lv_ponum
TABLES
poitem = lt_poitem
poitemx = lt_poitemx
poaccount = lt_poaccount
poaccountx = lt_poaccountx
poservices = lt_poservices
posrvaccessvalues = lt_posrvaccessvalues.