Difference between revisions of "SAP MM BAPI"
From SapWiki
(Created page with "==BAPI_PO_CREATE1== <nowiki> form crear_pedido CHANGING p_oc. * Rutina que crea los pedidos de traslado (ME21N) DATA: ls_header TYPE bapimepoheader, ls_h...") |
|||
| Line 141: | Line 141: | ||
ENDFORM.</nowiki> | ENDFORM.</nowiki> | ||
| + | |||
| + | == Crear una entrega de Pedido de traslado VL10B, contabilizarla y realizar picking== | ||
| + | <nowiki> *&---------------------------------------------------------------------* | ||
| + | *& Form CREAR_ENTREGA | ||
| + | *&---------------------------------------------------------------------* | ||
| + | * Crear una entrega de Pedido de traslado VL10B | ||
| + | *----------------------------------------------------------------------* | ||
| + | * --> p1 text | ||
| + | * <-- p2 text | ||
| + | *----------------------------------------------------------------------* | ||
| + | FORM CREAR_ENTREGA using p_ebeln | ||
| + | CHANGING p_entrega | ||
| + | p_cont. | ||
| + | * Crear una entrega de Pedido de traslado VL10B | ||
| + | DATA: begin of lt_ekpo occurs 1. | ||
| + | include structure ekpo. | ||
| + | data n_doc type i. | ||
| + | data end of lt_ekpo. | ||
| + | |||
| + | data : begin of lt_entregas occurs 1, | ||
| + | vbeln type vbeln, | ||
| + | num type i, | ||
| + | end of lt_entregas. | ||
| + | |||
| + | data: lt_stock_trans_items like BAPIDLVREFTOSTO occurs 0 with header line, | ||
| + | lt_return like BAPIRET2 occurs 0 with header line, | ||
| + | l_ship_point like BAPIDLVCREATEHEADER-SHIP_POINT, | ||
| + | l_due_date like BAPIDLVCREATEHEADER-DUE_DATE, | ||
| + | l_delivery like BAPISHPDELIVNUMB-DELIV_NUMB. | ||
| + | |||
| + | data: lt_DELIVERIES like BAPISHPDELIVNUMB occurs 0 with header line, | ||
| + | lt_CREATED_ITEMS like BAPIDLVITEMCREATED occurs 0 with header line. | ||
| + | data: ls_vbkok like vbkok, | ||
| + | lt_vbpok like vbpok occurs 0 with header line, | ||
| + | lt_prot like prott occurs 0 with header line, | ||
| + | |||
| + | l_error_any_0 type c length 1, | ||
| + | l_error_in_item_deletion_0 type c length 1, | ||
| + | l_error_in_pod_update_0 type c length 1, | ||
| + | l_error_in_interface_0 type c length 1, | ||
| + | l_error_in_goods_issue_0 type c length 1, | ||
| + | l_error_in_final_check_0 type c length 1, | ||
| + | l_error_partner_update type c length 1, | ||
| + | l_error_sernr_update type c length 1. | ||
| + | |||
| + | SELECT SINGLE vstel | ||
| + | FROM ekpv | ||
| + | INTO l_ship_point | ||
| + | WHERE ebeln EQ p_ebeln. | ||
| + | |||
| + | SELECT * | ||
| + | FROM ekpo UP TO 1 ROWS | ||
| + | INTO table lt_ekpo | ||
| + | WHERE ebeln EQ p_ebeln | ||
| + | ORDER BY ebelp. | ||
| + | |||
| + | ********************************************************************** | ||
| + | * crear entrega | ||
| + | ********************************************************************** | ||
| + | IF p_entrega IS INITIAL. | ||
| + | |||
| + | REFRESH lt_stock_trans_items. | ||
| + | |||
| + | LOOP AT lt_ekpo. | ||
| + | CLEAR lt_stock_trans_items. | ||
| + | lt_stock_trans_items-ref_doc = lt_ekpo-ebeln. | ||
| + | lt_stock_trans_items-ref_item = lt_ekpo-ebelp. | ||
| + | lt_stock_trans_items-dlv_qty = lt_ekpo-menge. | ||
| + | lt_stock_trans_items-sales_unit = lt_ekpo-meins. | ||
| + | APPEND lt_stock_trans_items. | ||
| + | ENDLOOP. | ||
| + | |||
| + | CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO' | ||
| + | EXPORTING | ||
| + | ship_point = l_ship_point | ||
| + | due_date = sy-datum | ||
| + | IMPORTING | ||
| + | delivery = l_delivery | ||
| + | TABLES | ||
| + | stock_trans_items = lt_stock_trans_items | ||
| + | DELIVERIES = lt_DELIVERIES | ||
| + | CREATED_ITEMS = lt_CREATED_ITEMS | ||
| + | RETURN = lt_return. | ||
| + | |||
| + | IF l_delivery IS INITIAL. | ||
| + | LOOP AT lt_return WHERE TYPE EQ 'E'. | ||
| + | MESSAGE ID lt_return-ID TYPE 'I' NUMBER lt_return-NUMBER WITH | ||
| + | lt_return-MESSAGE_V1 | ||
| + | lt_return-MESSAGE_V2 | ||
| + | lt_return-MESSAGE_V3 | ||
| + | lt_return-MESSAGE_V4 INTO g_message. | ||
| + | |||
| + | PERFORM add_news USING 'Creación de entrega:' icon_red_light. | ||
| + | wa_data-stat = icon_red_light. | ||
| + | |||
| + | ENDLOOP. | ||
| + | |||
| + | ELSE. | ||
| + | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' | ||
| + | EXPORTING | ||
| + | WAIT = 'X'. | ||
| + | . | ||
| + | p_entrega = l_delivery. | ||
| + | MESSAGE s000(0k) WITH l_delivery 'creada con éxito' INTO g_message. | ||
| + | PERFORM add_news USING 'Creación de entrega:' icon_green_light. | ||
| + | wa_data-stat = icon_green_light. | ||
| + | ENDIF. | ||
| + | |||
| + | * Entrega creada asigna en ITAB. | ||
| + | LOOP AT lt_CREATED_ITEMS. | ||
| + | lt_entregas-vbeln = lt_CREATED_ITEMS-DELIV_NUMB. | ||
| + | lt_entregas-num = 1. | ||
| + | COLLECT lt_entregas. | ||
| + | ENDLOOP. | ||
| + | |||
| + | ELSE. | ||
| + | l_delivery = p_entrega. | ||
| + | lt_entregas-vbeln = l_delivery. | ||
| + | lt_entregas-num = 1. | ||
| + | COLLECT lt_entregas. | ||
| + | ENDIF. | ||
| + | |||
| + | *--------------------------------------------------------------------* | ||
| + | * contabiliza SM & picking entregas. | ||
| + | *--------------------------------------------------------------------* | ||
| + | DATA lt_return2 TYPE bapiret2_t. | ||
| + | DATA lt_lips TYPE TABLE OF lips WITH HEADER LINE. | ||
| + | DATA: ls_data TYPE bapiobdlvhdrchg, | ||
| + | ls_control TYPE bapiobdlvhdrctrlchg, | ||
| + | lt_item_control TYPE TABLE OF bapiobdlvitemctrlchg WITH HEADER LINE, | ||
| + | lt_item_data TYPE TABLE OF bapiobdlvitemchg WITH HEADER LINE, | ||
| + | lt_item_spl TYPE TABLE OF /spe/bapiobdlvitemchg WITH HEADER LINE, | ||
| + | ls_techn_control TYPE bapidlvcontrol. | ||
| + | |||
| + | loop at lt_entregas. | ||
| + | REFRESH lt_return. | ||
| + | |||
| + | * modificar entrega | ||
| + | REFRESH lt_lips. | ||
| + | * si no tiene almacen => actualizar con almacén de origen | ||
| + | select * into TABLE lt_lips from lips where vbeln = l_delivery and lgort = space. | ||
| + | IF sy-subrc = 0. | ||
| + | LOOP AT lt_lips. | ||
| + | lt_item_spl-deliv_numb = lt_lips-vbeln. | ||
| + | lt_item_spl-deliv_item = lt_lips-posnr. | ||
| + | lt_item_control-deliv_numb = lt_lips-vbeln. | ||
| + | lt_item_control-deliv_item = lt_lips-posnr. | ||
| + | lt_item_data-deliv_numb = lt_lips-vbeln. | ||
| + | lt_item_data-deliv_item = lt_lips-posnr. | ||
| + | lt_item_data-dlv_qty = lt_lips-lfimg. | ||
| + | lt_item_spl-stge_loc = wa_data-lgort_ori. "almacén de origen | ||
| + | lt_item_data-material = lt_lips-matnr. | ||
| + | lt_item_data-fact_unit_nom = lt_lips-umvkz. | ||
| + | lt_item_data-fact_unit_denom = lt_lips-umvkn. | ||
| + | lt_item_data-base_uom = lt_lips-meins. | ||
| + | lt_item_data-sales_unit = lt_lips-vrkme. | ||
| + | |||
| + | APPEND lt_item_spl. | ||
| + | APPEND lt_item_control. | ||
| + | APPEND lt_item_data. | ||
| + | ENDLOOP. | ||
| + | |||
| + | *—–> modificar la entrega | ||
| + | ls_data-deliv_numb = l_delivery. | ||
| + | ls_control-deliv_numb = l_delivery. | ||
| + | ls_techn_control-upd_ind = 'U'. | ||
| + | |||
| + | CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE' | ||
| + | EXPORTING | ||
| + | header_data = ls_data | ||
| + | header_control = ls_control | ||
| + | delivery = l_delivery | ||
| + | techn_control = ls_techn_control | ||
| + | TABLES | ||
| + | item_data = lt_item_data[] | ||
| + | item_control = lt_item_control[] | ||
| + | RETURN = lt_return | ||
| + | item_data_spl = lt_item_spl[] | ||
| + | . | ||
| + | |||
| + | LOOP AT lt_return WHERE TYPE = 'E'. | ||
| + | MOVE lt_return-MESSAGE TO g_message. | ||
| + | PERFORM add_news USING 'Modif. Almacén de Entrega:' icon_red_light. | ||
| + | wa_data-stat = icon_red_light. | ||
| + | EXIT. | ||
| + | ENDLOOP. | ||
| + | IF sy-subrc = 0. | ||
| + | CONTINUE. | ||
| + | ELSE. | ||
| + | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' | ||
| + | EXPORTING | ||
| + | WAIT = 'X'. | ||
| + | ENDIF. | ||
| + | ENDIF. | ||
| + | |||
| + | l_delivery = lt_entregas-vbeln. | ||
| + | ls_vbkok-vbeln_vl = l_delivery. | ||
| + | ls_vbkok-wabuc = 'X'. "contabilizar Salida merc. | ||
| + | |||
| + | SELECT vbeln AS vbeln_vl | ||
| + | posnr AS posnr_vl | ||
| + | matnr | ||
| + | charg | ||
| + | lfimg | ||
| + | lgmng | ||
| + | umvkz | ||
| + | umvkn | ||
| + | vrkme | ||
| + | meins | ||
| + | werks FROM lips | ||
| + | INTO CORRESPONDING FIELDS OF TABLE lt_vbpok | ||
| + | WHERE vbeln EQ l_delivery. | ||
| + | |||
| + | LOOP AT lt_vbpok. | ||
| + | lt_vbpok-vbeln = lt_vbpok-vbeln_vl. | ||
| + | lt_vbpok-posnn = lt_vbpok-posnr_vl. | ||
| + | lt_vbpok-lgort = wa_data-lgort_ori. "lt_ekpo-lgort. "p_lgort. | ||
| + | lt_vbpok-mdiff_lgort = wa_data-lgort_ori. "lt_ekpo-lgort. "p_lgort. | ||
| + | |||
| + | MODIFY lt_vbpok. | ||
| + | ENDLOOP. | ||
| + | |||
| + | CALL FUNCTION 'WS_DELIVERY_UPDATE_2' | ||
| + | EXPORTING | ||
| + | vbkok_wa = ls_vbkok | ||
| + | * commit = 'X' | ||
| + | delivery = l_delivery | ||
| + | update_picking = 'X' | ||
| + | if_error_messages_send = ' ' | ||
| + | IMPORTING | ||
| + | ef_error_any = l_error_any_0 | ||
| + | ef_error_in_item_deletion = l_error_in_item_deletion_0 | ||
| + | ef_error_in_pod_update = l_error_in_pod_update_0 | ||
| + | ef_error_in_interface = l_error_in_interface_0 | ||
| + | ef_error_in_goods_issue = l_error_in_goods_issue_0 | ||
| + | ef_error_in_final_check = l_error_in_final_check_0 | ||
| + | ef_error_partner_update = l_error_partner_update | ||
| + | ef_error_sernr_update = l_error_sernr_update | ||
| + | TABLES | ||
| + | vbpok_tab = lt_vbpok | ||
| + | prot = lt_prot. | ||
| + | |||
| + | IF l_error_any_0 EQ 'X'. | ||
| + | LOOP AT lt_prot where msgty eq 'E'. | ||
| + | MESSAGE ID lt_prot-msgid | ||
| + | TYPE 'I' | ||
| + | NUMBER lt_prot-msgno | ||
| + | WITH lt_prot-msgv1 | ||
| + | lt_prot-msgv2 | ||
| + | lt_prot-msgv3 | ||
| + | lt_prot-msgv4 into g_message. | ||
| + | PERFORM add_news USING 'Contabilización de entrega:' icon_red_light. | ||
| + | wa_data-stat = icon_red_light. | ||
| + | * error = 'X'. | ||
| + | ENDLOOP. | ||
| + | |||
| + | ELSE. | ||
| + | COMMIT WORK AND WAIT. | ||
| + | MESSAGE S000(0k) WITH 'Se contabilizó la entrega' l_delivery into g_message. | ||
| + | PERFORM add_news USING 'Contabilización de entrega:' icon_green_light. | ||
| + | wa_data-stat = icon_green_light. | ||
| + | p_cont = 'X'. | ||
| + | ENDIF. | ||
| + | |||
| + | endloop. | ||
| + | ENDFORM. " CREAR_ENTREGA</nowiki> | ||
Revision as of 15:26, 4 April 2020
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.
Crear una entrega de Pedido de traslado VL10B, contabilizarla y realizar picking
*&---------------------------------------------------------------------*
*& Form CREAR_ENTREGA
*&---------------------------------------------------------------------*
* Crear una entrega de Pedido de traslado VL10B
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM CREAR_ENTREGA using p_ebeln
CHANGING p_entrega
p_cont.
* Crear una entrega de Pedido de traslado VL10B
DATA: begin of lt_ekpo occurs 1.
include structure ekpo.
data n_doc type i.
data end of lt_ekpo.
data : begin of lt_entregas occurs 1,
vbeln type vbeln,
num type i,
end of lt_entregas.
data: lt_stock_trans_items like BAPIDLVREFTOSTO occurs 0 with header line,
lt_return like BAPIRET2 occurs 0 with header line,
l_ship_point like BAPIDLVCREATEHEADER-SHIP_POINT,
l_due_date like BAPIDLVCREATEHEADER-DUE_DATE,
l_delivery like BAPISHPDELIVNUMB-DELIV_NUMB.
data: lt_DELIVERIES like BAPISHPDELIVNUMB occurs 0 with header line,
lt_CREATED_ITEMS like BAPIDLVITEMCREATED occurs 0 with header line.
data: ls_vbkok like vbkok,
lt_vbpok like vbpok occurs 0 with header line,
lt_prot like prott occurs 0 with header line,
l_error_any_0 type c length 1,
l_error_in_item_deletion_0 type c length 1,
l_error_in_pod_update_0 type c length 1,
l_error_in_interface_0 type c length 1,
l_error_in_goods_issue_0 type c length 1,
l_error_in_final_check_0 type c length 1,
l_error_partner_update type c length 1,
l_error_sernr_update type c length 1.
SELECT SINGLE vstel
FROM ekpv
INTO l_ship_point
WHERE ebeln EQ p_ebeln.
SELECT *
FROM ekpo UP TO 1 ROWS
INTO table lt_ekpo
WHERE ebeln EQ p_ebeln
ORDER BY ebelp.
**********************************************************************
* crear entrega
**********************************************************************
IF p_entrega IS INITIAL.
REFRESH lt_stock_trans_items.
LOOP AT lt_ekpo.
CLEAR lt_stock_trans_items.
lt_stock_trans_items-ref_doc = lt_ekpo-ebeln.
lt_stock_trans_items-ref_item = lt_ekpo-ebelp.
lt_stock_trans_items-dlv_qty = lt_ekpo-menge.
lt_stock_trans_items-sales_unit = lt_ekpo-meins.
APPEND lt_stock_trans_items.
ENDLOOP.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_STO'
EXPORTING
ship_point = l_ship_point
due_date = sy-datum
IMPORTING
delivery = l_delivery
TABLES
stock_trans_items = lt_stock_trans_items
DELIVERIES = lt_DELIVERIES
CREATED_ITEMS = lt_CREATED_ITEMS
RETURN = lt_return.
IF l_delivery IS INITIAL.
LOOP AT lt_return WHERE TYPE EQ 'E'.
MESSAGE ID lt_return-ID TYPE 'I' NUMBER lt_return-NUMBER WITH
lt_return-MESSAGE_V1
lt_return-MESSAGE_V2
lt_return-MESSAGE_V3
lt_return-MESSAGE_V4 INTO g_message.
PERFORM add_news USING 'Creación de entrega:' icon_red_light.
wa_data-stat = icon_red_light.
ENDLOOP.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
.
p_entrega = l_delivery.
MESSAGE s000(0k) WITH l_delivery 'creada con éxito' INTO g_message.
PERFORM add_news USING 'Creación de entrega:' icon_green_light.
wa_data-stat = icon_green_light.
ENDIF.
* Entrega creada asigna en ITAB.
LOOP AT lt_CREATED_ITEMS.
lt_entregas-vbeln = lt_CREATED_ITEMS-DELIV_NUMB.
lt_entregas-num = 1.
COLLECT lt_entregas.
ENDLOOP.
ELSE.
l_delivery = p_entrega.
lt_entregas-vbeln = l_delivery.
lt_entregas-num = 1.
COLLECT lt_entregas.
ENDIF.
*--------------------------------------------------------------------*
* contabiliza SM & picking entregas.
*--------------------------------------------------------------------*
DATA lt_return2 TYPE bapiret2_t.
DATA lt_lips TYPE TABLE OF lips WITH HEADER LINE.
DATA: ls_data TYPE bapiobdlvhdrchg,
ls_control TYPE bapiobdlvhdrctrlchg,
lt_item_control TYPE TABLE OF bapiobdlvitemctrlchg WITH HEADER LINE,
lt_item_data TYPE TABLE OF bapiobdlvitemchg WITH HEADER LINE,
lt_item_spl TYPE TABLE OF /spe/bapiobdlvitemchg WITH HEADER LINE,
ls_techn_control TYPE bapidlvcontrol.
loop at lt_entregas.
REFRESH lt_return.
* modificar entrega
REFRESH lt_lips.
* si no tiene almacen => actualizar con almacén de origen
select * into TABLE lt_lips from lips where vbeln = l_delivery and lgort = space.
IF sy-subrc = 0.
LOOP AT lt_lips.
lt_item_spl-deliv_numb = lt_lips-vbeln.
lt_item_spl-deliv_item = lt_lips-posnr.
lt_item_control-deliv_numb = lt_lips-vbeln.
lt_item_control-deliv_item = lt_lips-posnr.
lt_item_data-deliv_numb = lt_lips-vbeln.
lt_item_data-deliv_item = lt_lips-posnr.
lt_item_data-dlv_qty = lt_lips-lfimg.
lt_item_spl-stge_loc = wa_data-lgort_ori. "almacén de origen
lt_item_data-material = lt_lips-matnr.
lt_item_data-fact_unit_nom = lt_lips-umvkz.
lt_item_data-fact_unit_denom = lt_lips-umvkn.
lt_item_data-base_uom = lt_lips-meins.
lt_item_data-sales_unit = lt_lips-vrkme.
APPEND lt_item_spl.
APPEND lt_item_control.
APPEND lt_item_data.
ENDLOOP.
*—–> modificar la entrega
ls_data-deliv_numb = l_delivery.
ls_control-deliv_numb = l_delivery.
ls_techn_control-upd_ind = 'U'.
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
EXPORTING
header_data = ls_data
header_control = ls_control
delivery = l_delivery
techn_control = ls_techn_control
TABLES
item_data = lt_item_data[]
item_control = lt_item_control[]
RETURN = lt_return
item_data_spl = lt_item_spl[]
.
LOOP AT lt_return WHERE TYPE = 'E'.
MOVE lt_return-MESSAGE TO g_message.
PERFORM add_news USING 'Modif. Almacén de Entrega:' icon_red_light.
wa_data-stat = icon_red_light.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
CONTINUE.
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
l_delivery = lt_entregas-vbeln.
ls_vbkok-vbeln_vl = l_delivery.
ls_vbkok-wabuc = 'X'. "contabilizar Salida merc.
SELECT vbeln AS vbeln_vl
posnr AS posnr_vl
matnr
charg
lfimg
lgmng
umvkz
umvkn
vrkme
meins
werks FROM lips
INTO CORRESPONDING FIELDS OF TABLE lt_vbpok
WHERE vbeln EQ l_delivery.
LOOP AT lt_vbpok.
lt_vbpok-vbeln = lt_vbpok-vbeln_vl.
lt_vbpok-posnn = lt_vbpok-posnr_vl.
lt_vbpok-lgort = wa_data-lgort_ori. "lt_ekpo-lgort. "p_lgort.
lt_vbpok-mdiff_lgort = wa_data-lgort_ori. "lt_ekpo-lgort. "p_lgort.
MODIFY lt_vbpok.
ENDLOOP.
CALL FUNCTION 'WS_DELIVERY_UPDATE_2'
EXPORTING
vbkok_wa = ls_vbkok
* commit = 'X'
delivery = l_delivery
update_picking = 'X'
if_error_messages_send = ' '
IMPORTING
ef_error_any = l_error_any_0
ef_error_in_item_deletion = l_error_in_item_deletion_0
ef_error_in_pod_update = l_error_in_pod_update_0
ef_error_in_interface = l_error_in_interface_0
ef_error_in_goods_issue = l_error_in_goods_issue_0
ef_error_in_final_check = l_error_in_final_check_0
ef_error_partner_update = l_error_partner_update
ef_error_sernr_update = l_error_sernr_update
TABLES
vbpok_tab = lt_vbpok
prot = lt_prot.
IF l_error_any_0 EQ 'X'.
LOOP AT lt_prot where msgty eq 'E'.
MESSAGE ID lt_prot-msgid
TYPE 'I'
NUMBER lt_prot-msgno
WITH lt_prot-msgv1
lt_prot-msgv2
lt_prot-msgv3
lt_prot-msgv4 into g_message.
PERFORM add_news USING 'Contabilización de entrega:' icon_red_light.
wa_data-stat = icon_red_light.
* error = 'X'.
ENDLOOP.
ELSE.
COMMIT WORK AND WAIT.
MESSAGE S000(0k) WITH 'Se contabilizó la entrega' l_delivery into g_message.
PERFORM add_news USING 'Contabilización de entrega:' icon_green_light.
wa_data-stat = icon_green_light.
p_cont = 'X'.
ENDIF.
endloop.
ENDFORM. " CREAR_ENTREGA