SAP MM BAPI
From SapWiki
BAPI_PO_CREATE1
form crear_pedido CHANGING p_oc.
* Rutina que crea los pedidos de traslado (ME21N)
DATA: ls_header TYPE bapimepoheader,
ls_headerx TYPE bapimepoheaderx,
lt_items TYPE STANDARD TABLE OF bapimepoitem,
ls_items TYPE bapimepoitem,
lt_itemsx TYPE STANDARD TABLE OF bapimepoitemx,
ls_itemsx TYPE bapimepoitemx,
lt_schedules TYPE STANDARD TABLE OF bapimeposchedule,
ls_schedules TYPE bapimeposchedule,
lt_schedulesx TYPE STANDARD TABLE OF bapimeposchedulx,
ls_schedulesx TYPE bapimeposchedulx,
lt_return TYPE TABLE OF bapiret2,
ls_return TYPE bapiret2,
l_item_idx TYPE I,
l_numped TYPE bapiekkoc-po_number.
CLEAR: ls_header,
ls_headerx.
ls_header-doc_type = 'ZXXX'.
SELECT SINGLE EKORG EKGRP BUKRS lifnr INTO
(ls_header-purch_org,ls_header-pur_group,ls_header-comp_code,ls_header-VENDOR)
FROM ekko WHERE ebeln = wa_data-zzcontrato.
ls_header-suppl_plnt = wa_data-werks_ori.
ls_header-doc_date = sy-datum.
ls_header-REF_1 = wa_data-vbeln.
ls_headerx-doc_type = 'X'.
ls_headerx-purch_org = 'X'.
ls_headerx-pur_group = 'X'.
ls_headerx-comp_code = 'X'.
ls_headerx-suppl_plnt = 'X'.
ls_headerx-doc_date = 'X'.
ls_headerX-REF_1 = 'X'.
ls_headerX-VENDOR = 'X'.
*Grabamos las tablas correspondientes a los materiales y repartos
l_item_idx = wa_data-posnr.
ls_items-po_item = l_item_idx.
ls_items-material = wa_data-matnr.
ls_items-plant = wa_data-werks_sumi.
ls_items-stge_loc = wa_data-lgort_sumi.
*ls_items-item_cat = '7'.
ls_items-po_unit = wa_data-VRKME.
ls_items-TRACKINGNO = wa_data-posnr. "wa_data-vbeln. "N° necesidad
ls_items-QUANTITY = wa_data-KWMENG.
ls_items-agreement = wa_data-zzcontrato.
select SINGLE * into @data(ls_ekpo) from ekpo
where ebeln = @wa_data-zzcontrato
and LOEKZ <> 'X'.
ls_items-agmt_item = ls_ekpo-ebelp.
select SINGLE NETWR INTO ls_items-net_price from vbap
where vbeln = wa_data-vbeln and
posnr = wa_data-posnr.
*ls_items-no_rounding = 'X'.
APPEND ls_items TO lt_items.
ls_itemsx-po_item = l_item_idx.
ls_itemsx-po_itemx = 'X'.
ls_itemsx-material = 'X'.
ls_itemsx-plant = 'X'.
ls_itemsx-stge_loc = 'X'.
*ls_itemsx-item_cat = 'X'.
ls_itemsx-po_unit = 'X'.
*ls_itemsx-no_rounding = 'X'.
ls_itemsx-TRACKINGNO = 'X'.
ls_itemsX-QUANTITY = 'X'.
ls_itemsX-agreement = 'X'.
ls_itemsX-agmt_item = 'X'.
ls_itemsX-net_price = 'X'.
APPEND ls_itemsx TO lt_itemsx.
ls_schedules-po_item = l_item_idx.
ls_schedules-quantity = wa_data-KWMENG.
ls_schedules-delivery_date = wa_data-edatu.
APPEND ls_schedules TO lt_schedules.
ls_schedulesx-po_item = l_item_idx.
ls_schedulesx-po_itemx = 'X'.
ls_schedulesx-quantity = 'X'.
ls_schedulesx-delivery_date = 'X'.
APPEND ls_schedulesx TO lt_schedulesx.
* Llamamos a la BAPI para crear el pedido de traslados
CALL FUNCTION 'BAPI_PO_CREATE1'
EXPORTING
poheader = ls_header
poheaderx = ls_headerx
IMPORTING
exppurchaseorder = l_numped
TABLES
RETURN = lt_return
poitem = lt_items
poitemx = lt_itemsx
poschedule = lt_schedules
poschedulex = lt_schedulesx
.
if l_numped is INITIAL.
* error
LOOP AT lt_return INTO ls_return
GROUP BY COND string( WHEN ls_return-type = 'E' THEN |EQ 1|
WHEN ls_return-type = 'A' THEN |EQ 2|
WHEN ls_return-type = 'W' THEN |EQ 3|
WHEN ls_return-type = 'I' THEN |EQ 4|
)
ASCENDING
ASSIGNING FIELD-SYMBOL(<group>).
LOOP AT GROUP <group> ASSIGNING FIELD-SYMBOL(<ls_return>).
ENDLOOP.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
move <ls_return>-message to g_message.
PERFORM add_news USING 'Crear Pedido:' icon_red_light.
wa_data-stat = icon_red_light.
ENDIF.
else.
* éxito
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
p_oc = l_numped.
* Pedido grabado correctamente, lo informamos en el log
MESSAGE i000(0K) WITH 'Pedido grabado correctamente' l_numped INTO g_message.
PERFORM add_news USING 'Crear Pedido:' icon_green_light.
wa_data-stat = icon_green_light.
endif.
CLEAR: lt_items, lt_schedules, lt_itemsx, lt_schedulesx.
REFRESH: lt_items, lt_schedules, lt_itemsx, lt_schedulesx.
ENDFORM.