Con esta BAPI vamos a crearnos un pedido de Compras...
Primero rellenamos la Cabecera de la BAPI.
FORM rellenar_bapi_cab.
CLEAR l_poheader.
CLEAR l_poheaderx.
l_poheader-comp_code = ekko-bukrs.
l_poheader-doc_type = 'NB'.
l_poheader-creat_date = sy-datlo.
l_poheader-created_by = sy-uname.
l_poheader-vendor = ekko-lifnr.
l_poheader-purch_org = ekko-ekorg.
l_poheader-pur_group = ekko-ekgrp.
l_poheader-doc_date = sy-datum.
l_poheaderx-comp_code = 'X'.
l_poheaderx-doc_type = 'X'.
l_poheaderx-creat_date = 'X'.
l_poheaderx-created_by = 'X'.
l_poheaderx-vendor = 'X'.
l_poheaderx-purch_org = 'X'.
l_poheaderx-pur_group = 'X'.
l_poheaderx-doc_date = 'X'.
ENDFORM. " rellenar_bapi_cab
Ahora rellenamos las posiciones
FORM rellenar_bapi_pos.
DATA: pos_rep LIKE ekpo-ebelp.
* Coger nombre material.
SELECT SINGLE * FROM makt WHERE matnr = i_pedido-matnr
AND spras = sy-langu.
SELECT SINGLE * FROM mara WHERE matnr = i_pedido-matnr.
CLEAR pos_rep.
LOOP AT i_pedido.
CLEAR: l_t_poitem, l_t_poitemx, l_t_poschedule, l_t_poschedulex.
ADD 10 TO pos_rep.
l_t_poitem-po_item = pos_rep.
l_t_poitem-short_text = makt-maktx.
l_t_poitem-material = i_pedido-matnr.
l_t_poitem-plant = ekpo-werks.
l_t_poitem-stge_loc = ekpo-lgort.
l_t_poitem-quantity = i_pedido-menge.
l_t_poitem-po_unit = mara-meins.
l_t_poitem-item_cat = '2'.
l_t_poitem-agreement = i_pedido-konnr.
l_t_poitem-agmt_item = i_pedido-ktpnr.
APPEND l_t_poitem.
l_t_poitemx-po_item = pos_rep.
l_t_poitemx-po_itemx = 'X'.
l_t_poitemx-short_text = 'X'.
l_t_poitemx-material = 'X'.
l_t_poitemx-plant = 'X'.
l_t_poitemx-stge_loc = 'X'.
l_t_poitemx-quantity = 'X'.
l_t_poitemx-po_unit = 'X'.
l_t_poitemx-item_cat = 'X'.
IF NOT i_pedido-konnr IS INITIAL.
l_t_poitemx-agreement = 'X'.
l_t_poitemx-agmt_item = 'X'.
ENDIF.
APPEND l_t_poitemx.
l_t_poschedule-po_item = pos_rep.
l_t_poschedule-delivery_date = i_pedido-eeind.
l_t_poschedule-quantity = i_pedido-menge.
l_t_poschedule-deliv_time = sy-uzeit.
APPEND l_t_poschedule.
l_t_poschedulex-po_item = pos_rep.
l_t_poschedulex-po_itemx = 'X'.
l_t_poschedulex-delivery_date = 'X'.
l_t_poschedulex-quantity = 'X'.
l_t_poschedulex-deliv_time = 'X'.
APPEND l_t_poschedulex.
ENDFORM. " rellenar_bapi_pos
Ejecutamos la BAPI.
FORM crear_pedido_compra .
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = l_poheader
poheaderx = l_poheaderx
IMPORTING
exppurchaseorder = d_ebeln
TABLES
return = l_t_return
poitem = l_t_poitem
poitemx = l_t_poitemx
poschedule = l_t_poschedule
poschedulex = l_t_poschedulex.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDFORM. " crear_pedido_compra