PDA

Ver la Versión Completa : bapi_po_create


WgaviriaStuva
12/06/06, 19:51:12
Estoy intentando crear una orden de compra de servicio, me esta dando muchos problemas ¿alguien tiene un ejemplo con este caso? .... gracias

Carlos J. Ortega González
13/06/06, 20:34:50
Este es parte de un código que yo utilice, espero té de una ayuda

Saludos
Carlos :)



*&---------------------------------------------------------------------*
*& Form f_genera_documentos
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_genera_documentos.

DATA: vl_lifnr(10) TYPE c,
vl_posnr(4) TYPE n,
vl_posnr_c(4) TYPE c.


* Se preparan las tablas para que los datos sean procesados por el BAPI
vl_lifnr = space.

WRITE sy-datum TO v_datum.

FREE: itab_doc_item,
itab_item_update,
itab_doc_sched,
itab_schd_update,
itab_doc_cond,
itab_cond_update,
wa_doc_header.

CLEAR: itab_doc_item,
itab_item_update,
itab_doc_sched,
itab_schd_update,
itab_doc_cond,
itab_cond_update,
wa_head_update.

* Se pobla las tablas para que los datos sean procesados por el BAPI
LOOP AT itab_layout.

IF vl_lifnr NE itab_layout-lifnr.

IF vl_lifnr NE space.
PERFORM f_ejecuta_bapi.

FREE: itab_doc_item,
itab_item_update,
itab_doc_sched,
itab_schd_update,
itab_doc_cond,
itab_cond_update,
wa_doc_header.

CLEAR: itab_doc_item,
itab_item_update,
itab_doc_sched,
itab_schd_update,
itab_doc_cond,
itab_cond_update,
wa_head_update.
ENDIF.

* Header
wa_doc_header-doc_type = itab_layout-bsart.
wa_doc_header-creat_date = v_datum.
wa_doc_header-vendor = itab_layout-lifnr.
wa_doc_header-purch_org = itab_layout-ekorg.
wa_doc_header-pur_group = itab_layout-ekgrp.
wa_doc_header-currency = itab_layout-waers.

wa_head_update-doc_type = c_x.
wa_head_update-creat_date = c_x.
wa_head_update-vendor = c_x.
wa_head_update-purch_org = c_x.
wa_head_update-pur_group = c_x.
wa_head_update-currency = c_x.

ENDIF.

vl_posnr = itab_layout-ebelp.

WRITE vl_posnr TO vl_posnr_c.

* Item
itab_doc_item-po_item = vl_posnr_c.
itab_doc_item-material = itab_layout-ematn.
itab_doc_item-short_text = itab_layout-txz01.
itab_doc_item-quantity = itab_layout-menge.
itab_doc_item-po_unit = itab_layout-meins.
itab_doc_item-gr_to_date = v_datum.
itab_doc_item-net_price = itab_layout-netpr.
itab_doc_item-plant = itab_layout-name1.
itab_doc_item-matl_group = itab_layout-wgbez.
itab_doc_item-stge_loc = itab_layout-lgobe.
APPEND itab_doc_item.

itab_item_update-po_item = vl_posnr_c.
itab_item_update-material = c_x.
itab_item_update-short_text = c_x.
itab_item_update-quantity = c_x.
itab_item_update-po_unit = c_x.
itab_item_update-gr_to_date = c_x.
itab_item_update-net_price = c_x.
itab_item_update-plant = c_x.
itab_item_update-matl_group = c_x.
itab_item_update-stge_loc = c_x.
APPEND itab_item_update.

* Schedul
itab_doc_sched-po_item = vl_posnr_c.
itab_doc_sched-sched_line = vl_posnr_c.
itab_doc_sched-del_datcat_ext = itab_layout-elpei.
itab_doc_sched-delivery_date = itab_layout-eeind.

APPEND itab_doc_sched.

itab_schd_update-po_item = vl_posnr_c.
itab_schd_update-sched_line = vl_posnr_c.
itab_schd_update-del_datcat_ext = c_x.
itab_schd_update-delivery_date = c_x.

APPEND itab_schd_update.

* Condiciones
itab_doc_cond-itm_number = c_itm_number.
itab_doc_cond-cond_count = c_cond_count.
itab_doc_cond-cond_type = c_cond_type.
itab_doc_cond-cond_value = itab_layout-netpr.
itab_doc_cond-currency = itab_layout-waers.
itab_doc_cond-change_id = c_change_id.

APPEND itab_doc_cond.

itab_cond_update-itm_number = c_x.
itab_cond_update-cond_count = c_x.
itab_cond_update-cond_type = c_x.
itab_cond_update-cond_value = c_x.
itab_cond_update-currency = c_x.
itab_cond_update-change_id = c_x.

APPEND itab_cond_update.

* vl_posnr = vl_posnr + 10.

ENDLOOP.

IF sy-subrc EQ 0.
PERFORM f_ejecuta_bapi.
ENDIF.

ENDFORM. " f_genera_documentos


*&---------------------------------------------------------------------*
*& Form f_ejecuta_bapi
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_ejecuta_bapi.

* Se limpia la tabla interna para recibir los mensajes del proceso del BAPI
FREE itab_return.
CLEAR itab_return.

* Se ejecuta el BAPI para la creación de la orden de compra
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = wa_doc_header
poheaderx = wa_head_update
no_price_from_po = c_x
TABLES
return = itab_return
poitem = itab_doc_item
poitemx = itab_item_update
pocond = itab_doc_cond
pocondx = itab_cond_update
poschedule = itab_doc_sched
poschedulex = itab_schd_update
posrvaccessvalues = itab_doc_srvacc.

* Se ejecuta el Commit par que la transacción quede en firme
PERFORM f_bapi_commit.

* Se presentan los mensajes que se generaron en la ejecución del BAPI
LOOP AT itab_return. "where type eq c_error.

WRITE:/ itab_return-type,
itab_return-id,
itab_return-number,
itab_return-message,
itab_return-log_no,
itab_return-log_msg_no,
itab_return-message_v1,
itab_return-message_v2,
itab_return-message_v3,
itab_return-message_v4,
itab_return-parameter,
itab_return-row,
itab_return-field,
itab_return-system.

ENDLOOP.

ENDFORM. " f_ejecuta_bapi


*&---------------------------------------------------------------------*
*& Form f_bapi_commit
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM f_bapi_commit.

* Se ejecuta el Commit par que la transacción quede en firme
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = itab_return1.

ENDFORM. " f_bapi_commit