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