Ejemplo BAPI_PO_CREATE1

Estimados buenas tardes,

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.

Agradezco su colaboración,

Hola, te dejo este link, espero te sirva:

h**ps://answers.sap.com/questions/4511068/sample-code-for-creating-po-for-multiple-items-usi.html

Nota: Recuerda moficar el link para poder entrar. Lo envío con un * en lugar de “t” por condiciones de este foro.

Saludos,

5 Me gusta

Muchas Gracias por tu respuesta :blush:

1 me gusta

Buenos días,

Muchas gracias por el pequeño ejemplo, la verdad que es bastante bueno :slight_smile:

Un saludo,

Ruymán M.

1 me gusta

La verdad no sirve para servicios el ejemplo :frowning: pero es bueno para materiales

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.
1 me gusta

Este tema se cerró automáticamente 7 días después de la última publicación. No se permiten nuevas respuestas.