Posted by
StormShadow
In:
ABAP
BAPI PO CREATE1
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
This entry was posted on 10:04
and is filed under
ABAP
.
You can follow any responses to this entry through
the RSS 2.0 feed.
You can leave a response,
or trackback from your own site.
Posted on
-
2 Comments
Suscribirse a:
Enviar comentarios (Atom)
2 comentarios:
Hola,
Estoy tratando de crear un PO mediante el proceso que explicas solo que me sale el el siguiente mensaje de errr:
No se ha creado ninguna instancia de tipo objeto PurchaseOrder; ref.externa:
Los datos de cabecera del pedido todavía son erróneos
Por favor, entre Fin per.validez
Por favor, entre In.per.validez
Artículo 100001 está sujeto a imputación (indicar tipo imputación)
El artículo 100001 no existe o no está activado
Precio de venta sin determinar para el artículo 100001 en la posición 00010
Artículo 100002 está sujeto a imputación (indicar tipo imputación)
El artículo 100002 no existe o no está activado
Precio de venta sin determinar para el artículo 100002 en la posición 00020
Introducir una cantidad de pedido
¿Se puede cumplir la fecha de entrega?
Artículo 100002 no catalogado en centro 0001 (error 1, ver texto explicativo)
La Fecha Inicio y Fin de Validez se las coloque tal como estan posteadas las demas:
st_poheader-vper_start = '20101018'. "ti_mextrans-ship_date. "Fecha Inicio Validez
st_poheader-vper_end = '20101118'. "ti_mextrans-rec_date. "Fecha Fin Validez
Me no se porque marca error igual en los articulos.
Espero me puedas ayudar. Saludos.
Disculpa, encontraste solución??
Publicar un comentario