Ahora me tocó el tema de las bapis, pues abap es bastante amplio y mucho muy interesante y divertido, esta vez publicaré mi entrada acerca de una bapi que acabo de implementar, se trata de la bapi po_create1 y es para crear ordenes de compra, la transacción para crear una orden de compra es la me21n, pues bien ahora les dejaré la muestra de mi código:


REPORT Z_BAPI_PO_TEST.
*Lo primero es declarar nuestras tablas internas que mantendran los datos *correspondientes, haciendolo de esta manera:

DATA: l_poheader LIKE BAPIMEPOHEADER.
DATA: l_poheaderx LIKE BAPIMEPOHEADERX.
DATA: l_t_poitem LIKE BAPIMEPOITEM OCCURS 0 WITH HEADER LINE.
DATA: l_t_poitemx LIKE BAPIMEPOITEMX OCCURS 0 WITH HEADER LINE.
DATA: l_t_poschedule LIKE BAPIMEPOSCHEDULE OCCURS 0 WITH HEADER LINE.
DATA: l_t_poschedulex LIKE BAPIMEPOSCHEDULX OCCURS 0 WITH HEADER LINE.
DATA: l_t_return LIKE BAPIRET2 OCCURS 0 WITH HEADER LINE.

*Declaramos un espacio para nuestra orden de compra.
DATA : v_purchaseorder LIKE bapiekkoc-po_number.

*En mi caso puse un parametro para la selección de mi proveedor.
SELECTION-SCREEN BEGIN OF BLOCK block01 WITH FRAME TITLE text-001.
SKIP 1.
PARAMETER: p_vendor LIKE l_poheader-vendor OBLIGATORY.
ULINE.
SKIP 1.
SELECTION-SCREEN END OF BLOCK block01.

PERFORM rellenar_bapi_cab USING p_vendor.
PERFORM rellenar_bapi_pos.
PERFORM crear_pedido_compra.

*Y bien comenzamos, esta rutina me rellena la cabezera de mi orden, lo que vendria *siendo de la tabla ekko.
FORM rellenar_bapi_cab USING p_vendor.

CLEAR l_poheader.
CLEAR l_poheaderx.

l_poheader-comp_code = '0200'. "sociedad
l_poheader-doc_type = 'PGOC'. "Clase del documento
l_poheader-creat_date = sy-datlo. "Fecha de creación
l_poheader-created_by = sy-uname. "Responsable que añadió el objeto
l_poheader-vendor = p_vendor. "Proveedor
l_poheader-purch_org = 'OC02'. "Organización de compras
l_poheader-pur_group = 'G03'. "Grupo de compras
l_poheader-doc_date = sy-datum. "Fecha del documento


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 la rutina para mi detalle que vendría siendo lo de la tabla ekpo.
FORM rellenar_bapi_pos.

DATA: pos_rep LIKE ekpo-ebelp.

CLEAR pos_rep.

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-material = '000000021033017002'.
l_t_poitem-plant = 'B001'. "Centro
l_t_poitem-stge_loc = 'B001'. "almacén
l_t_poitem-quantity = '12'.
l_t_poitem-po_unit = 'PAA'.
l_t_poitem-item_cat = '2'.
APPEND l_t_poitem.

l_t_poitemx-po_item = pos_rep.
l_t_poitemx-po_itemx = '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'.
APPEND l_t_poitemx.

l_t_poschedule-po_item = pos_rep.
l_t_poschedule-delivery_date = sy-datum.
l_t_poschedule-quantity = '12'.
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

*Y por ultimo mandamos a llamar nuestra bapi con exportando nuestras tablas e *importando la orden que se creará =).
FORM crear_pedido_compra .

CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = l_poheader
poheaderx = l_poheaderx
IMPORTING
exppurchaseorder = v_purchaseorder
TABLES
return = l_t_return
poitem = l_t_poitem
poitemx = l_t_poitemx
poschedule = l_t_poschedule
poschedulex = l_t_poschedulex.

IF NOT v_purchaseorder IS INITIAL.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
* IMPORTING
* RETURN =
.
WRITE : / v_purchaseorder.
LOOP AT l_t_return.
WRITE: / l_t_return-message.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_ROLLBACK'.
*En caso de que halla error, me lo regrese.
LOOP AT l_t_return.
WRITE: / l_t_return-message.
ENDLOOP.

ENDIF.

ENDFORM. " crear_pedido_compra


Y bien eso sería todo, está sencilla pero me costó trabajo estarle investigando :( mas bien me daba flojera pensar jejeje.
Referencia