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