
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.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
2 | |
2 | |
2 | |
2 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |