|
Herramientas | Buscar en Tema | Desplegado |
|
#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. |
#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. |
Herramientas | Buscar en Tema |
Desplegado | |
|
|