Autor Tema: BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N  (Leído 26842 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ale12

  • Usuario Completo
  • ***
  • Mensajes: 92
    • Ver Perfil
Quiero compartir con vosotros una Bapi para añadir Partición de Lotes en una Entrega... como si lo hiciéramos por la transacción VL02N.

Con este Report lo que conseguimos es añadir particiones de lotes en una entrega ya existente utilizando la siguiente Bapi: BAPI_OUTB_DELIVERY_CHANGE.


Código: [Seleccionar]
REPORT  z_bapi_outb_delivery_change.

TABLES: lips, marc.


DATA: header_data     LIKE  bapiobdlvhdrchg.
DATA: header_control  LIKE  bapiobdlvhdrctrlchg.
DATA: delivery        LIKE  bapiobdlvhdrchg-deliv_numb.

DATA: item_data    LIKE  bapiobdlvitemchg OCCURS 0 WITH HEADER LINE.
DATA: item_control LIKE  bapiobdlvitemctrlchg
                                          OCCURS 0 WITH HEADER LINE.
DATA: return       LIKE  bapiret2         OCCURS 0 WITH HEADER LINE.




header_data-deliv_numb    = '0080974350'.
header_control-deliv_numb = '0080974350'.
delivery                  = '0080974350'.


* Esta sería la posición Padre
* La cantidad de esta posición es de 200 KG, pero como
* vamos a añadir dos subposiciones de 100 + 40 KG, le quedarán 60.
item_data-deliv_numb = '0080974350'.
item_data-deliv_item = '000010'.
item_data-material   = '000000000000002803'.
item_data-dlv_qty    = '60.000'.     "Cantidad pendiente calculada
item_data-dlv_qty_imunit = '60.000'. "Cantidad pendiente calculada
item_data-fact_unit_nom  = '1'.
item_data-fact_unit_denom = '1'.
APPEND item_data.


* Aquí indicamos las subposiciones de la posición Padre
CLEAR item_data.
item_data-deliv_numb = '0080974350'.
item_data-deliv_item = '900001'.
item_data-material   = '000000000000002803'.
item_data-batch      = '28/273/081'.
item_data-hieraritem = '000010'.
item_data-usehieritm = '1'.
item_data-dlv_qty    = '100.000'.
item_data-dlv_qty_imunit = '100.000'.
item_data-fact_unit_nom = '1'.
item_data-fact_unit_denom = '1'.
APPEND item_data.


CLEAR item_data.
item_data-deliv_numb = '0080974350'.
item_data-deliv_item = '900002'.
item_data-material   = '000000000000002803'.
item_data-batch      = '08/280/081'.
item_data-hieraritem = '000010'.
item_data-usehieritm = '1'.
item_data-dlv_qty    = '40.000'.
item_data-dlv_qty_imunit = '40.000'.
item_data-fact_unit_nom = '1'.
item_data-fact_unit_denom = '1'.
APPEND item_data.


** Si en la posición no viene indicado el Almacen, lo cogeremos del
** maestro de la MARC.
*IF lips-lgort IS INITIAL.
*  SELECT SINGLE * FROM marc
*                 WHERE matnr = lips-matnr
*                   AND werks = lips-werks.
*  item_data_spl-deliv_numb  = '0080974350'.
*  item_data_spl-deliv_item  = lips-posnr.
*  item_data_spl-stge_loc    = marc-lgpro.
*  item_data_spl-pick_denial = 'X'.
*  APPEND item_data_spl.
*ENDIF.


item_control-deliv_numb = '0080974350'.
item_control-deliv_item = '000010'.
item_control-chg_delqty = 'X'.
APPEND item_control.


CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    header_data    = header_data
    header_control = header_control
    delivery       = delivery
  TABLES
    item_data      = item_data
    item_control   = item_control
    return         = return.

COMMIT WORK AND WAIT.




*****
DATA: lf_mensaje(220).

LOOP AT return.

  MESSAGE ID return-id
          TYPE 'S'
          NUMBER return-number
          WITH return-message_v1
          return-message_v2
          return-message_v3
          return-message_v4
          INTO
          lf_mensaje.

  WRITE lf_mensaje.

ENDLOOP.



Desconectado eljebi

  • Novato
  • *
  • Mensajes: 4
    • Ver Perfil
Re: BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N
« Respuesta #1 en: 17 de Mayo de 2011, 04:13:15 pm »
Hola a todos,

Agradezco a ale12 el codigo que comparte.  No se si alguien lo ha probado, yo lo he hecho, pero no consigo que realice la partición de lotes correctamente. Me asocia el lote a la linea de entrega, pero en la entrega no aparece la posicion 900001 indicando la particion.

Entiendo que la primera parte, completar la tabla item_data solo es necesario si quieras dejar un resto por entregar, si la entrega va a ser completa no es necesario rellenar nada en esta tabla.

Agradezco cualquier comentario.

Saludos.

Desconectado ale12

  • Usuario Completo
  • ***
  • Mensajes: 92
    • Ver Perfil
Re: BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N
« Respuesta #2 en: 17 de Mayo de 2011, 05:32:32 pm »
Hola,

La verdad es que yo cuando he querido realizar la entrega completa, he puesto en la posición principal la cantidad a cero y en las subposiciones el resto.

Lo de dejarlo en blanco no lo he probado.


Un saludo.

Desconectado eljebi

  • Novato
  • *
  • Mensajes: 4
    • Ver Perfil
Re: BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N
« Respuesta #3 en: 17 de Mayo de 2011, 07:11:36 pm »
Hola ale12,

Efectivamente poniendo la cantidad de la posicion principal a cero ha funcionado correctamente. El problema que tengo ahora es que el picking no lo completa. No tedras para esto algun consejillo.  :-\


Saludos y gracias.


 

Desconectado eljebi

  • Novato
  • *
  • Mensajes: 4
    • Ver Perfil
Re: BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N
« Respuesta #4 en: 18 de Mayo de 2011, 04:44:18 pm »
Por si acaso alguien tiene este mismo problema:

Para solucionar lo del picking he utilizado otra bapi:

SD_DELIVERY_UPDATE_PICKING_1

solo hay que pasarle los parametros :VBKOK_WA cabecera, VBPOK_TAB lineas a las que vas a realizar el picking.

Saludos.

Desconectado abapito

  • Usuario Completo
  • ***
  • Mensajes: 76
    • Ver Perfil
Re:BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N
« Respuesta #5 en: 03 de Enero de 2012, 05:10:33 pm »
Hola eljebi,

¿Podrías poner el ejemplo de como rellenaste la bapi?


Muchas gracias.

Desconectado josesman

  • Novato
  • *
  • Mensajes: 1
    • Ver Perfil
Re:BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N
« Respuesta #6 en: 30 de Septiembre de 2014, 05:37:44 pm »
Hola eljebi,

como actualizaste el lote sin hacer partición de lotes? intento solo agregarle el lote a la posición y me hace la partición, acá mi código:

  header_data-deliv_numb           = DELIVERY.

  header_control-deliv_numb       = DELIVERY.

  techn_control-upd_ind   = 'U'.


      item_data-deliv_numb              = DELIVERY.

      item_data-deliv_item                = '000010'.

      item_data-material                   = 'ALP600000'.

      item_data-batch                       = '0000000070'.

      item_data-dlv_qty                    = '1'.

      item_data-dlv_qty_imunit         = '1'.

      item_data-base_uom               = 'PQT'.

      item_data-fact_unit_nom          = 1.

      item_data-fact_unit_denom      = 1.

      item_data-sales_unit                 = 'PQT'.



      item_control-deliv_numb           = delivery.

      item_control-deliv_item             = '000010'.

      item_control-chg_delqty           = 'X'.




      APPEND  item_data.

      APPEND item_control.

 

      CLEAR : item_data, item_control.

CALL FUNCTION 'BAPI_OUTB_DELIVERY_CHANGE'
  EXPORTING
    header_data                   = HEADER_DATA
    header_control                = HEADER_CONTROL
    delivery                      = DELIVERY
   TECHN_CONTROL                 = TECHN_CONTROL
*   HEADER_DATA_SPL               =
*   HEADER_CONTROL_SPL            =
*   SENDER_SYSTEM                 =
  tables
*   HEADER_PARTNER                =
*   HEADER_PARTNER_ADDR           =
*   HEADER_DEADLINES              =
   ITEM_DATA                     = ITEM_DATA
   ITEM_CONTROL                  = ITEM_CONTROL
*   ITEM_SERIAL_NO                =
*   SUPPLIER_CONS_DATA            =
*   EXTENSION1                    =
*   EXTENSION2                    =
    return                        = RETURN2
*   TOKENREFERENCE                =
*   ITEM_DATA_SPL                 =
*   COLLECTIVE_CHANGE_ITEMS       =
*   NEW_ITEM_DATA                 =
*   NEW_ITEM_DATA_SPL             =
*   NEW_ITEM_ORG                  =
*   ITEM_DATA_DOCU_BATCH          =
          .

COMMIT WORK AND WAIT.