Difference between revisions of "SAP MM BAPI"
From SapWiki
| Line 514: | Line 514: | ||
ENDIF. | ENDIF. | ||
ENDFORM. " f_entrada_merc_pedido</nowiki> | ENDFORM. " f_entrada_merc_pedido</nowiki> | ||
| + | |||
| + | ==Crear entrega de salida según pedido(VL01N), contabilizarla y realizar picking== | ||
| + | form entrega_cliente_final USING p_pedido p_oc CHANGING p_entrega | ||
| + | p_contabilizado_cli. | ||
| + | * VL01N | ||
| + | DATA: lt_sales_order TYPE TABLE OF bapidlvreftosalesorder WITH HEADER LINE, | ||
| + | lt_return type TABLE OF bapiret2, | ||
| + | lt_ekpo type TABLE OF ekpo WITH HEADER LINE, | ||
| + | ls_return like LINE OF lt_return, | ||
| + | l_delivery TYPE bapishpdelivnumb-deliv_numb, | ||
| + | l_num_deliveries TYPE bapidlvcreateheader-num_deliveries, | ||
| + | l_VSTEL type VSTEL. | ||
| + | |||
| + | if p_entrega is INITIAL. | ||
| + | lt_sales_order-ref_doc = p_pedido. | ||
| + | lt_sales_order-REF_ITEM = wa_data-posnr. | ||
| + | APPEND lt_sales_order. | ||
| + | |||
| + | SELECT SINGLE vstel into l_VSTEL from vbap where vbeln = wa_data-vbeln and | ||
| + | posnr = wa_data-posnr. | ||
| + | |||
| + | * crear la entrega | ||
| + | CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS' | ||
| + | EXPORTING | ||
| + | SHIP_POINT = l_vstel | ||
| + | IMPORTING | ||
| + | delivery = l_delivery | ||
| + | num_deliveries = l_num_deliveries | ||
| + | TABLES | ||
| + | sales_order_items = lt_sales_order | ||
| + | return = lt_return | ||
| + | . | ||
| + | |||
| + | IF l_delivery IS INITIAL. | ||
| + | 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>). | ||
| + | exit. | ||
| + | ENDLOOP. | ||
| + | EXIT. | ||
| + | ENDLOOP. | ||
| + | IF sy-subrc = 0. | ||
| + | move <ls_return>-message to g_message. | ||
| + | PERFORM add_news USING 'Entrega Cliente Final:' icon_red_light. | ||
| + | return. | ||
| + | ENDIF. | ||
| + | |||
| + | 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 'Entrega Cliente Final:' icon_green_light. | ||
| + | endif. | ||
| + | else. | ||
| + | l_delivery = p_entrega. | ||
| + | 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. | ||
| + | |||
| + | check l_delivery is NOT INITIAL. | ||
| + | |||
| + | * modificar entrega | ||
| + | REFRESH lt_lips. | ||
| + | * si no tiene lote => actualizar | ||
| + | select * into TABLE lt_lips from lips where vbeln = l_delivery and charg = space. | ||
| + | IF sy-subrc = 0. | ||
| + | LOOP AT lt_lips. | ||
| + | select COUNT(*) from marc where matnr = lt_lips-matnr and | ||
| + | werks = lt_lips-werks and | ||
| + | xchar = 'X'. "sujeto a lote | ||
| + | check sy-subrc = 0. | ||
| + | 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_data-batch = p_oc. "lote => pedido de traslado | ||
| + | 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. | ||
| + | |||
| + | lt_item_control-deliv_numb = lt_lips-vbeln. | ||
| + | lt_item_control-deliv_item = lt_lips-posnr. | ||
| + | lt_item_control-chg_delqty = 'X'. | ||
| + | |||
| + | APPEND lt_item_spl. | ||
| + | APPEND lt_item_control. | ||
| + | APPEND lt_item_data. | ||
| + | ENDLOOP. | ||
| + | |||
| + | *—–> modificar la entrega | ||
| + | if lt_item_data[] is NOT INITIAL. | ||
| + | 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 INTO ls_return WHERE TYPE = 'E'. | ||
| + | MOVE ls_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. | ||
| + | RETURN. "-------------------------> | ||
| + | ELSE. | ||
| + | CALL FUNCTION 'BAPI_TRANSACTION_COMMIT' | ||
| + | EXPORTING | ||
| + | WAIT = 'X'. | ||
| + | ENDIF. | ||
| + | ENDIF. | ||
| + | ENDIF. | ||
| + | |||
| + | ********************************************************************** | ||
| + | ***picking | ||
| + | ********************************************************************** | ||
| + | data: lt_vbpok type TABLE OF vbpok WITH HEADER LINE, | ||
| + | lt_prot type TABLE OF prott WITH HEADER LINE, | ||
| + | ls_vbkok like vbkok, | ||
| + | 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. | ||
| + | |||
| + | REFRESH lt_return. | ||
| + | |||
| + | select * into TABLE lt_ekpo from ekpo where ebeln = p_oc. | ||
| + | |||
| + | 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 | ||
| + | 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-taqui = 'X'. "confirmar picking | ||
| + | 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 'Entrega Cliente Final:' icon_red_light. | ||
| + | ENDLOOP. | ||
| + | |||
| + | ELSE. | ||
| + | MESSAGE S000(0k) WITH 'Se contabilizó la entrega' l_delivery into g_message. | ||
| + | PERFORM add_news USING 'Entrega Cliente Final:' icon_green_light. | ||
| + | p_contabilizado_cli = 'X'. | ||
| + | |||
| + | ENDIF. | ||
| + | endform. | ||
Revision as of 15:37, 4 April 2020
Contents
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
BAPI_GOODSMVT_CREATE entrada de mercancía para pedido de traslado MIGO con referencia a entrega
form recepcion USING p_oc p_entrega CHANGING p_materialdocument
p_MATDOCUMENTYEAR.
* entrada de mercancía para pedido de traslado MIGO con referencia
* a entrega
DATA: lt_item TYPE TABLE OF bapi2017_gm_item_create,
lt_ekpo TYPE TABLE OF ekpo,
lt_return TYPE TABLE OF bapiret2.
data: ls_ekpo TYPE ekpo,
ls_header LIKE bapi2017_gm_head_01,
ls_code LIKE bapi2017_gm_code,
ls_item LIKE LINE OF lt_item,
ls_return LIKE LINE OF lt_return.
DATA: l_materialdocument TYPE bapi2017_gm_head_ret-mat_doc,
l_MATDOCUMENTYEAR TYPE BAPI2017_GM_HEAD_RET-DOC_YEAR,
l_testrun TYPE testrun VALUE space.
CLEAR: lt_item[],
ls_header,
ls_code,
l_materialdocument.
SELECT * FROM ekpo INTO TABLE lt_ekpo
WHERE ebeln = p_oc.
IF sy-subrc = 0.
ls_header-pstng_date = sy-datum.
ls_header-doc_date = sy-datum.
ls_header-ref_doc_no = p_entrega.
ls_header-header_txt = wa_data-vbeln.
ls_code-gm_code = '01'. "MB1C ver tabla T158G
LOOP AT lt_ekpo INTO ls_ekpo.
CLEAR ls_item.
ls_item-move_type = '101'.
ls_item-material = ls_ekpo-matnr.
ls_item-plant = ls_ekpo-werks.
ls_item-stge_loc = ls_ekpo-lgort.
* si material esta sujeto a lote => lote = pedido de traslado
SELECT COUNT(*) FROM MARc WHERE MATNR = ls_ekpo-matnr
AND WERKS = ls_ekpo-werks
AND XCHAR = 'X'.
IF sy-subrc = 0.
ls_item-batch = p_oc.
ENDIF.
ls_item-entry_qnt = ls_ekpo-menge.
ls_item-po_number = ls_ekpo-ebeln.
ls_item-po_item = ls_ekpo-ebelp.
ls_item-val_type = ls_ekpo-bwtar.
ls_item-mvt_ind = 'B'. "indicador de movimiento
ls_item-DELIV_NUMB = p_entrega.
APPEND ls_item TO lt_item.
ENDLOOP.
CALL FUNCTION 'BAPI_GOODSMVT_CREATE'
EXPORTING
goodsmvt_header = ls_header
goodsmvt_code = ls_code
testrun = l_testrun
IMPORTING
materialdocument = l_materialdocument
MATDOCUMENTYEAR = l_MATDOCUMENTYEAR
TABLES
goodsmvt_item = lt_item
RETURN = lt_return
.
IF lt_return[] IS INITIAL.
* proceso OK
p_materialdocument = l_materialdocument.
p_MATDOCUMENTYEAR = l_MATDOCUMENTYEAR.
MESSAGE S000(0k) WITH 'Se creo documento de material'
l_materialdocument l_MATDOCUMENTYEAR INTO g_message.
PERFORM add_news USING 'Recepción:' icon_green_light.
* commit work
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ELSE.
* 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>).
EXIT.
ENDLOOP.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
MOVE <ls_return>-MESSAGE TO g_message.
PERFORM add_news USING 'Recepción:' icon_red_light.
wa_data-stat = icon_red_light.
ENDIF.
ENDIF.
ELSE.
ENDIF.
ENDFORM. " f_entrada_merc_pedido
Crear entrega de salida según pedido(VL01N), contabilizarla y realizar picking
form entrega_cliente_final USING p_pedido p_oc CHANGING p_entrega
p_contabilizado_cli.
* VL01N
DATA: lt_sales_order TYPE TABLE OF bapidlvreftosalesorder WITH HEADER LINE,
lt_return type TABLE OF bapiret2,
lt_ekpo type TABLE OF ekpo WITH HEADER LINE,
ls_return like LINE OF lt_return,
l_delivery TYPE bapishpdelivnumb-deliv_numb,
l_num_deliveries TYPE bapidlvcreateheader-num_deliveries,
l_VSTEL type VSTEL.
if p_entrega is INITIAL.
lt_sales_order-ref_doc = p_pedido.
lt_sales_order-REF_ITEM = wa_data-posnr.
APPEND lt_sales_order.
SELECT SINGLE vstel into l_VSTEL from vbap where vbeln = wa_data-vbeln and
posnr = wa_data-posnr.
* crear la entrega
CALL FUNCTION 'BAPI_OUTB_DELIVERY_CREATE_SLS'
EXPORTING
SHIP_POINT = l_vstel
IMPORTING
delivery = l_delivery
num_deliveries = l_num_deliveries
TABLES
sales_order_items = lt_sales_order
return = lt_return
.
IF l_delivery IS INITIAL.
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>).
exit.
ENDLOOP.
EXIT.
ENDLOOP.
IF sy-subrc = 0.
move <ls_return>-message to g_message.
PERFORM add_news USING 'Entrega Cliente Final:' icon_red_light.
return.
ENDIF.
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 'Entrega Cliente Final:' icon_green_light.
endif.
else.
l_delivery = p_entrega.
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.
check l_delivery is NOT INITIAL.
* modificar entrega
REFRESH lt_lips.
* si no tiene lote => actualizar
select * into TABLE lt_lips from lips where vbeln = l_delivery and charg = space.
IF sy-subrc = 0.
LOOP AT lt_lips.
select COUNT(*) from marc where matnr = lt_lips-matnr and
werks = lt_lips-werks and
xchar = 'X'. "sujeto a lote
check sy-subrc = 0.
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_data-batch = p_oc. "lote => pedido de traslado
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.
lt_item_control-deliv_numb = lt_lips-vbeln.
lt_item_control-deliv_item = lt_lips-posnr.
lt_item_control-chg_delqty = 'X'.
APPEND lt_item_spl.
APPEND lt_item_control.
APPEND lt_item_data.
ENDLOOP.
*—–> modificar la entrega
if lt_item_data[] is NOT INITIAL.
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 INTO ls_return WHERE TYPE = 'E'.
MOVE ls_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.
RETURN. "------------------------->
ELSE.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
WAIT = 'X'.
ENDIF.
ENDIF.
ENDIF.
**********************************************************************
***picking
**********************************************************************
data: lt_vbpok type TABLE OF vbpok WITH HEADER LINE,
lt_prot type TABLE OF prott WITH HEADER LINE,
ls_vbkok like vbkok,
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.
REFRESH lt_return.
select * into TABLE lt_ekpo from ekpo where ebeln = p_oc.
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
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-taqui = 'X'. "confirmar picking
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 'Entrega Cliente Final:' icon_red_light.
ENDLOOP.
ELSE.
MESSAGE S000(0k) WITH 'Se contabilizó la entrega' l_delivery into g_message.
PERFORM add_news USING 'Entrega Cliente Final:' icon_green_light.
p_contabilizado_cli = 'X'.
ENDIF.
endform.