BAPI para crear factura a partir de una entrega YA contabilizada

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • Junior Member
    • ene
    • 9

    #1

    BAPI para crear factura a partir de una entrega YA contabilizada

    Hola ABAPEROS.
    Espero que todos se encuentren bien.

    Necesito una BAPI que me genere una factura a partir de una entrega que ya está contabilizada.

    Para no hacerles perder tiempo voy a a hacer puntual con lo que exactamente necesito:

    Debo hacer cuatro programas Z uno que haga lo de la trx VA01, otro lo de la trx VL01N, otro lo de la VL02N, hasta ahí todo sin problema ya los tengo hechos.

    PERO no he podido encontrar una BAPI que me haga lo mismo que la trx VF01, las que he probado son para generar factura a partir del pedido pero eso ya lo tengo, necesito generar la factura a partir de una entrega que ya está contabilizada.

    Estas son las BAPI que ya he usado:
    BAPI_BILLINGDOC_CREATEMULTIPLE : Me genera la factura pero cuando voy y reviso por la VF01 con el número de entrega es como si aun no fuera generado la factura.

    Llevo ya dos semanas y no he podido lograrlo.

    Agradezco si tiene algún programa que hayan hecho y que me pueda ser de ayuda para poder generar la factura a partir de una entrega que ya está contabilizada.

    Bendiciones a todos.
  • Junior Member
    • ene
    • 9

    #2
    Re: BAPI para crear factura a partir de una entrega YA contabilizada

    Debido a que nadie ha dado una respuesta, les dejo la soluci%u00F3n por si alguien lo requiere:

    FUNCTION z_mfsd_gdc0079.
    *"----------------------------------------------------------------------
    *"*"Interfase local
    *" IMPORTING
    *" VALUE(REF_DOC) TYPE VGBEL
    *" EXPORTING
    *" VALUE(NUM_FACTURA) TYPE BILL_DOC
    *" TABLES
    *" LT_RETURN STRUCTURE BAPIRET2
    *"----------------------------------------------------------------------

    * Declaraci%u00F3n de tablas internas
    DATA: lt_billing_data_in TYPE TABLE OF bapivbrk,
    lt_success TYPE TABLE OF bapivbrksuccess,
    lt_entrega TYPE TABLE OF lips.

    * Declaraci%u00F3n de estructuras
    DATA: ls_billing_data_in TYPE bapivbrk,
    ls_success TYPE bapivbrksuccess,
    ls_return TYPE bapiret1,
    ls_entrega TYPE lips.

    * Declaraci%u00F3n de variables
    DATA: lv_cliente TYPE vbak-kunnr, " Cliente
    lv_pedido TYPE lips-vgbel, "Pedido
    lv_vkorg TYPE likp-vkorg, "Organizaci%u00F3n de ventas
    lv_auart TYPE vbak-auart, "Clase de documento de ventas
    lv_fkara TYPE tvak-fkara, "Clase de factura propuesta para una factura por pedido
    lv_vbtyp TYPE vbak-vbtyp. "Tipo de documento


    * Obtener el cliente desde la entrega
    CLEAR: lv_cliente, lv_vkorg.
    SELECT SINGLE kunnr vkorg
    INTO (lv_cliente, lv_vkorg)
    FROM likp
    WHERE vbeln = ref_doc. " N%u00FAmero de entrega

    * Recupero el n%u00FAmero de pedido a partir de la entrega
    CLEAR lv_pedido.
    SELECT SINGLE vgbel
    INTO lv_pedido
    FROM lips
    WHERE vbeln = ref_doc.

    * Recupero datos de la tabla VBAK este es la clase de doc de ventas
    CLEAR: lv_auart, lv_vbtyp.
    SELECT SINGLE auart vbtyp
    INTO (lv_auart, lv_vbtyp)
    FROM vbak
    WHERE vbeln = lv_pedido.

    " Obtener la clase de factura propuesta (Order Billing Type) desde la tabla TVAK
    CLEAR lv_fkara.
    SELECT SINGLE fkara
    INTO lv_fkara
    FROM tvak
    WHERE auart = lv_auart.

    * Recupero los datos del pedido
    REFRESH lt_entrega.
    SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_entrega
    FROM lips
    WHERE vbeln = ref_doc.

    IF sy-subrc = 0.
    LOOP AT lt_entrega INTO ls_entrega.
    CLEAR: ls_billing_data_in.
    ls_billing_data_in-salesorg = lv_vkorg. " Organizaci%u00F3n de ventas
    ls_billing_data_in-distr_chan = ls_entrega-vtweg. " Canal de distribuci%u00F3n
    ls_billing_data_in-division = ls_entrega-spart. " Divisi%u00F3n (Sector)
    ls_billing_data_in-doc_type = lv_auart. " Tipo de documento de facturaci%u00F3n - Clase de documento de venta ZTA
    ls_billing_data_in-ref_doc = ls_entrega-vbeln. " N%u00FAmero de entrega
    ls_billing_data_in-item_categ = ls_entrega-pstyv. "Tipo de posici%u00F3n de documento comercial
    ls_billing_data_in-doc_number = ls_entrega-vbeln. "Entrega
    ls_billing_data_in-itm_number = ls_entrega-posnr. "Posici%u00F3n del documento de venta
    ls_billing_data_in-ordbilltyp = lv_fkara. "Clase de factura propuesta para una factura por pedido
    ls_billing_data_in-price_date = sy-datum. "Fecha para la determinaci%u00F3n de precios y tipo de cambio
    ls_billing_data_in-ref_doc_ca = lv_vbtyp. "Categor%u00EDa del documento comercial anterior
    ls_billing_data_in-sold_to = lv_cliente. "Solicitante
    ls_billing_data_in-material = ls_entrega-matnr. " Material
    ls_billing_data_in-plant = ls_entrega-werks. " Planta
    ls_billing_data_in-ref_doc_ca = 'J'.
    "ls_billing_data_in-req_qty = ls_entrega-kwmeng. "Cantidad de pedido acumulada en unidades de ventas
    "ls_billing_data_in-sales_unit = ls_entrega-vrkme. "Unidad de ventas
    "ls_billing_data_in-currency = ls_entrega-waerk. "Moneda del documento SD (SD document currency)
    APPEND ls_billing_data_in TO lt_billing_data_in.
    ENDLOOP.
    ENDIF.

    * Llamar a la BAPI para crear la factura
    CALL FUNCTION 'BAPI_BILLINGDOC_CREATEMULTIPLE'
    TABLES
    billingdatain = lt_billing_data_in
    return = lt_return
    success = lt_success.

    * Guarda si no hay errores
    CLEAR: ls_return.
    READ TABLE lt_return INTO ls_return WITH KEY type = 'E'.
    IF sy-subrc <> 0.
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    EXPORTING
    wait = 'X'.
    * Mostrar el n%u00FAmero de la factura creada
    LOOP AT lt_success INTO ls_success.
    num_factura = ls_success-bill_doc.
    ENDLOOP.
    ENDIF.

    ENDFUNCTION.

    Comentario

    Trabajando...