Código abierto > Bapis
BAPI_OUTB_DELIVERY_CHANGE - Partición de Lotes en una Entrega VL02N
ale12:
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: ---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.
--- Fin del código ---
eljebi:
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.
ale12:
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.
eljebi:
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.
eljebi:
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.
Navegación
[#] Página Siguiente
Ir a la versión completa