Crear DN de nota de entrega

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

 

Supongo que te gusta

Origin blog.csdn.net/cylcylcylcylwo/article/details/114014976
Recomendado
Clasificación