BAPI_DELIVERYPROCESSING_EXEC
SA solo puede usar este BAPI
Cree una nota de entrega con referencia a varias órdenes de compra : BBP_INB_DELIVERY_CREATE (se requiere una mejora para los materiales que no se pueden escribir)
1. El lote no se puede escribir , debe llamar a BAPI_OUTB_DELIVERY_CHANGE para modificar ( tal vez la unidad de cantidad debe pasarse una vez, de lo contrario, informará un error VLBAPI 004 "Error en el documento & 1 artículo & 2 (verificación de consistencia de cantidad)" ) ; WS_DELIVERY_UPDATE también no se puede escribir en
Use lt_request-extdelv_no = uv_dn. No se puede escribir el número de nota de entrega externo, escríbalo cuando WS_DELIVERY_UPDATE se modifique
Adjunto:
DATOS: ls_item TYPE bapiibdlvitemchg.
SELECCIONAR ÚNICO lfimg lgmng lfimg_flo lgmng_flo umvkz umvkn umrev
DE labios
INTO (ls_item-dlv_qty, ls_item-dlv_qty_imunit, ls_item-del_qty_flo, ls_item-dlv_qty_st_flo,
ls_item-fact_unit_nom, ls_item-fact_unit_denom, ls_item-conv_fact)
DONDE vbeln = '0180001234'
Y posnr = '000010'.
Compártelo
2. Se informa de un error "No se pasó ningún tipo de entrega".
El motivo es que la función ME_EKPV_ARRAY_READ no devuelve los datos de ekpv, y determinará si ekpv está vacío, si está vacío habrá una serie de códigos de asignación (incluido el tipo de entrega LFART) que no se ejecutarán.
Este es un error en el propio bapi y no hay ninguna nota.
Además, si se ingresa una línea de pedido inexistente, también se informará de este error.
Aquí se asigna Ebeln. En el ciclo recursivo posterior, la tabla de lectura usa ebeln ebelp, por lo que hará que el retorno final de ekpv esté vacío.
Hay un objeto lo_db en esta función, lo_db tiene un atributo mv_iter como contador y el atributo mt_data almacena los datos extraídos de la tabla ekpv. Y este objeto es singleton
Por lo tanto, mv_iter y mt_data no se borrarán automáticamente al llamar a bapi repetidamente, por lo que si llama a este bapi por segunda vez, mv_iter = 2 no entrará en recursividad en este momento (no se verá afectado por la asignación a lt_intpu), y el la ejecución puede tener éxito en este momento Crear albarán de entrega
3. Si la verificación de disponibilidad está configurada, el inventario disponible se informará a I VL 150, y hay una E
4. No se puede especificar el artículo, el artículo se acumula de 10
Fecha de envío real (fecha de publicación)
Bapi no tiene parámetros para escribir la fecha de entrega real. Si no escribe la fecha de entrega real, la fecha de creación se utiliza al publicar
Al publicar usando WS_DELIVERY_UPDATE o WS_DELIVERY_UPDATE_2, puede escribir la fecha de publicación a través de vbkok-wadat_ist
Cambiar directamente la mesa
MANIFESTACIÓN
función zflg_dn_create.
* "------------------------------------------------ ----------------------
* "*" Interfaz local:
* "IMPORTANDO
* "VALOR (VBTYP) TIPO VBTYP
* "VALOR (VBELV) TIPO VBELN_VON
* "VALOR (LIFEX) TIPO ZDN_PLAN OPCIONAL
* "EXPORTANDO
* "VALUE (RTYPE) TYPE BAPI_MTYPE
* "VALOR (RTMSG) TIPO BAPI_MSG
* "VALOR (VBELN) TIPO VBELN_VL
*" MESAS
* "ESTRUCTURA IT_ITEM ZDN_METHOD_S1
* "DEVOLVER ESTRUCTURA BAPIRET2 OPCIONAL
* "------------------------------------------------ ----------------------
zfmdatasave1 'ZFLG_DN_CREATE'.
zfmdatasave2 'B'.
*crear
datos:
lt_request como bapideliciousrequest ocurre 0 con la línea de encabezado,
lt_createditems como bapideliciouscreateditems aparece 0 con la línea de encabezado.
*modificar
datos:
it_header_partner como tabla de bapidlvpartnerchg, "Entrega: cambio de socio
it_header_deadlines como tabla de bapidlvdeadln, "Fecha límite de entrega
it_item_data como tabla de bapiobdlvitemchg, "cambiar el nivel de elemento de datos de picking de entrega saliente
it_item_control como tabla de bapiobdlvitemctrlchg, "Datos de control de nivel de artículo de entrega saliente
et_return como tabla de bapiret2 con línea de encabezado, "Parámetros de retorno
it_item_data_spl como tabla de / spe / bapiobdlvitemchg, "cambiar el nivel de elemento de datos de picking de entrega saliente (SPE)
is_header_data como bapiobdlvhdrchg, "cambiar el nivel de encabezado de datos de picking de entrega saliente
is_header_control como bapiobdlvhdrctrlchg, "Datos de control de nivel de encabezado de entrega saliente
iv_delivery como bapiobdlvhdrchg-deliv_numb. "交货
datos:
lw_header_partner como bapidlvpartnerchg, "Entrega: cambio de socio
lw_header_deadlines como bapidlvdeadln, "Fecha límite de entrega
lw_item_data como bapiobdlvitemchg, "cambiar el nivel de elemento de datos de picking de entrega saliente
lw_item_control como bapiobdlvitemctrlchg, "Datos de control de nivel de artículo de entrega saliente
lw_return como bapiret2. "Parámetros de retorno
datos: l_techn_control tipo bapidlvcontrol.
datos:
ls_item tipo bapiobdlvitemchg,
ls_item_t tipo bapiobdlvitemchg,
ls_item_control tipo bapiobdlvitemctrlchg,
ls_deadlines escriba bapidlvdeadln.
llamar a la función 'CONVERSION_EXIT_ALPHA_INPUT'
exportador
entrada = vbelv
importador
salida = vbelv.
realizar alpha_input cambiando la vidax.
bucle en it_item.
lt_request-document_type = vbtyp. "B significa orden de compra, una orden de venta
lt_request-document_numb = vbelv. "Número de orden de referencia
lt_request-document_item = it_item-posnv. "Número de artículo de pedido de referencia
lt_request-plant = it_item-werks.
lt_request-stge_loc = it_item-lgort.
lt_request-amount_sales_uom = it_item-lfimg. "Cantidad de entrega (la cantidad no se puede escribir cuando la cantidad de inventario disponible es insuficiente)
lt_request-delivery_date = sy-datum.
lt_request-extdelv_no = lifex. "Identificación externa del albarán de entrega (número de plan de almacenamiento) chenyl para wangnl 20170518 liberado para facturación combinada_20170602
lt_request-date = sy-datum.
lt_request-time = sy-uzeit.
añadir lt_request.
endloop.
llamar a la función 'RV_DELIVERY_INIT'.
llamar a la función 'BAPI_DELIVERYPROCESSING_EXEC'
mesas
request = lt_request
createditems = lt_createditems
retorno = retorno.
* 1. Esta BAPI tiene errores, algunos errores no serán RETURN, por lo que RETURN está vacío y es posible que la orden de entrega no se cree correctamente (por ejemplo, la orden de venta no se puede encontrar, la orden de venta se ha creado y la orden de entrega se ha creado), o no puede ser creado
leer tabla lt_createditems índice 1.
vbeln = lt_createditems-document_numb. "Número de nota de entrega
leer el retorno de la tabla con el tipo de clave = 'E'.
si vbeln no es inicial y sy-subrc ne 0. "Hay un error, cuando la ubicación de almacenamiento es incorrecta, la devolución devolverá un error, pero se generará el número de orden de entrega
llamar a la función 'BAPI_TRANSACTION_COMMIT'
exportador
esperar = 'X'.
rtype = 'S'.
rtmsg = 'El albarán se creó correctamente'.
* Escribir split
llamar a la función 'RV_DELIVERY_INIT'.
* Información del encabezado
is_header_data-deliv_numb = vbeln. "Número de nota de entrega
is_header_control-deliv_numb = vbeln.
* Modificar la cantidad de elementos en las 10 líneas originales
bucle en it_item donde charg no es inicial.
borrar lw_item_data.
lw_item_data-deliv_numb = vbeln.
lw_item_data-deliv_item = sy-tabix * 10. "Línea de pedido original
lw_item_data-dlv_qty = it_item-lfimg.
lw_item_data-dlv_qty_imunit = it_item-lfimg.
* lw_item_data-base_uom = 'TO'. "Unidad básica
* lw_item_data-sales_unit = 'TO'. "Unidad de ventas
lw_item_data-fact_unit_nom = 1. "El numerador (factor) de la cantidad de ventas convertida en SKU
lw_item_data-fact_unit_denom = 1. "La cantidad de ventas se convierte al valor de SKU (divisor)
lw_item_data-batch = it_item-charg. "批次
agregue lw_item_data a it_item_data.
borre lw_item_control.
lw_item_control-deliv_numb = vbeln.
lw_item_control-deliv_item = sy-tabix * 10. "Línea de pedido original
lw_item_control-chg_delqty = 'X'. "Indicador de modificación de cantidad
agregue lw_item_control a it_item_control.
endloop.
si it_item_data [] no es inicial.
llamar a la función 'BAPI_OUTB_DELIVERY_CHANGE'
exportador
header_data = is_header_data
header_control = is_header_control
entrega = vbeln
mesas
header_partner = it_header_partner
header_deadlines = it_header_deadlines
item_data = it_item_data
item_control = it_item_control
return = et_return
* ITEM_DATA_SPL = IT_ITEM_DATA_SPL
.
si et_return [] es inicial.
llamar a la función 'BAPI_TRANSACTION_COMMIT'
exportador
esperar = 'X'.
terminara si.
bucle en et_return donde tipo = 'E'.
id de mensaje et_return-id
escriba 'E'
número et_return-number
con et_return-message_v1
et_return-message_v2
et_return-message_v3
et_return-message_v4
en rtmsg.
endloop.
terminara si.
*SMS
si lifex no es inicial.
bucle en it_item.
actualizar zsd001_item
establecer dn = vbeln zt = 'en curso'
donde dn_plan = lifex y dn_posnr = it_item-dn_posnr.
endloop.
comprometer el trabajo y esperar.
terminara si.
realizar alpha_output cambiando vbeln.
demás.
claro vbeln.
llamar a la función 'BAPI_TRANSACTION_ROLLBACK'.
rtype = 'E'.
rtmsg = 'No se pudo crear la nota de entrega:'.
bucle a la vuelta.
rtmsg = rtmsg && mensaje de retorno.
endloop.
terminara si.
zfmdatasave2 'R'.
función final.
BAPI_OUTB_DELIVERY_CREATE_STO参考 PO
BAPI_OUTB_DELIVERY_CREATE_SLS参考 SO
Cree una nota de entrega con referencia al pedido y no es necesario transferir la cantidad. La cantidad del albarán creado se refiere a la cantidad prometida del pedido en lugar de la cantidad del artículo de línea. La cantidad prometida del pedido puede ser la cantidad de inventario cuando se crea el pedido.
Se puede crear como un todo
Código
po create dn "agregar por cyl 2016/9/13
* Sentencia p17
seleccione count (*) de ztmm_po_lis2 donde ebeln = lisnum y bsart = 'EB'.
si sy-subrc = 0.
seleccionar sencillo
ekko ~ bsart ekko ~ lifnr ekko ~ bukrs ekko ~ inco2
ekpo ~ ebelp retpo
en los campos correspondientes de ls_ekpo2
de ekko
unión interna ekpo en ekko ~ ebeln = ekpo ~ ebeln
donde ekko ~ ebeln = lisnum.
divida ls_ekpo2-inco2 en '+' en lv_bukrs lv_kunnr lv_type.
desplaza lv_kunnr a la izquierda 2 lugares.
si ls_ekpo2-bsart = 'EB' y ls_ekpo2-lifnr = '0000010142'
y ls_ekpo2-bukrs + 0 (2) = '23' y ls_ekpo2-bukrs ne '2300' y ls_ekpo2-bukrs ne '2330'
y lv_bukrs + 0 (2) = '23' y lv_bukrs ne '2300' y lv_bukrs ne '2330'
y (lv_type = 'Consignment' o lv_type = 'Prototype')
y ls_ekpo2-retpo es inicial.
lv_p17 = 'X'.
terminara si.
terminara si.
si lv_p17 = 'X'.
llamar a la función 'RV_DELIVERY_INIT'.
seleccione ebeln ebelp
en los campos correspondientes de la tabla lt_ekpo
de ekpo
donde ebeln = lisnum.
bucle en lt_ekpo en ls_ekpo.
ls_bapidlvreftosto-ref_doc = ls_ekpo-ebeln.
ls_bapidlvreftosto-ref_item = ls_ekpo-ebelp.
agregue ls_bapidlvreftosto a lt_bapidlvreftosto.
endloop.
función de llamada 'BAPI_OUTB_DELIVERY_CREATE_STO'
importador
delivery = lv_vbeln
mesas
stock_trans_items = lt_bapidlvreftosto
return = lt_return.
si lv_vbeln no es inicial.
llamar a la función 'BAPI_TRANSACTION_COMMIT'
exportador
esperar = 'X'.
concatenar comentario 'orden de compra' lisnum 'crear un nuevo número de orden de entrega' lv_vbeln en comentario.
concatenar 'Orden de compra' lisnum 'Crear un nuevo número de nota de entrega' lv_vbeln en ls_logitem-comment.
ls_logitem-msg_no = ls_logitem-msg_no + 1.
añadir ls_logitem.
demás.
llamar a la función 'BAPI_TRANSACTION_ROLLBACK'.
lea la tabla lt_return en ls_return con el tipo de clave = 'E' id = 'VR' número = '420'. "La mercancía ha sido entregada
si sy-subrc = 0.
concatenar comentario 'orden de compra' lisnum 'no se creó un nuevo número de orden de entrega' en el comentario.
concatenate'orden de compra 'lisnum'no se ha creado un nuevo número de orden de entrega' en ls_logitem-comment.
ls_logitem-msg_no = ls_logitem-msg_no + 1.
demás.
código_texto = '003'.
concatenar comentario 'orden de compra' lisnum 'No se pudo crear orden de entrega:' en comentario.
concatenar 'Orden de compra' lisnum 'No se pudo crear la nota de entrega:' en ls_logitem-comment.
ls_logitem-msg_no = ls_logitem-msg_no + 1.
bucle en lt_return en ls_return donde escriba = 'E' o escriba = 'A'.
concatenar el comentario ls_return-message en un comentario.
ls_logitem-comment = ls_return-message.
ls_logitem-msg_no = ls_logitem-msg_no + 1.
endloop.
terminara si.
terminara si.
terminara si.
* Cilindro final