Hola a todos, espero se encuentran bien.
Estoy usando la función “RV_INVOICE_CREATE” para crear una factura a partir de una entrega que ya está contabilizada.
Ya llevo varios días probando con función en ABAP pero no consigo hacerla funcionar.
Algún ABAP de buen corazón que me pueda dar una mano?, mi problema radica en que no tengo claro como llenar las tablas.
Si tienen algún ejemplo que yo pueda adaptar me sería de gran utilidad, ojalá que se muestre de donde sacan la información y como lo hacen para llenar las tablas.
Tengan en cuenta que yo tengo el número de entrega que ya está contabilizada, y lo único que necesito es crear la factura.
Estye es mi código pero me sale el error: VF063
PARAMETERS: p_entreg TYPE vbeln.
* Declaración de tablas internas
DATA: lt_xkomfk TYPE TABLE OF komfk,
lt_xkomv TYPE TABLE OF komv,
lt_xthead TYPE TABLE OF theadvb,
lt_xvbfs TYPE TABLE OF vbfs,
lt_xvbpa TYPE TABLE OF vbpavb,
lt_xvbrk TYPE TABLE OF vbrkvb,
lt_xvbrp TYPE TABLE OF vbrpvb,
lt_xvbss TYPE TABLE OF vbss,
lt_pedido TYPE TABLE OF vbap.
* Declaración de estructuras
DATA: ls_vbsk_i TYPE vbsk,
ls_xkomfk TYPE komfk,
ls_xkomv TYPE komv,
ls_xthead TYPE theadvb,
ls_xvbfs TYPE vbfs,
ls_xvbpa TYPE vbpavb,
ls_xvbrk TYPE vbrkvb,
ls_xvbrp TYPE vbrpvb,
ls_xvbss TYPE vbss,
ls_pedido TYPE vbap.
* Declaración de variables
DATA: lv_smart TYPE vbsk-smart,
lv_factura TYPE vbrkvb-vbeln,
lv_pedido TYPE lips-vgbel, "Pedido
lv_auart TYPE vbak-auart, "Clase de documento de ventas
lv_fkara TYPE tvak-fkara. " Clase de factura
* Inicialización de estructuras y tablas
CLEAR: ls_vbsk_i, ls_xkomfk, ls_xkomv, ls_xthead,
ls_xvbfs, ls_xvbpa, ls_xvbrk,
ls_xvbss, ls_pedido.
REFRESH: lt_xkomfk, lt_xkomv, lt_xthead,
lt_xvbfs, lt_xvbpa, lt_xvbrk, lt_xvbrp,
lt_xvbss, lt_pedido.
* Recupero el número de pedido a partir de la entrega
SELECT SINGLE vgbel INTO lv_pedido FROM lips WHERE vbeln = p_entreg.
IF sy-subrc <> 0.
WRITE: /'1. No se encontró número de pedido para la entrega', p_entreg.
EXIT.
ENDIF.
WRITE: /'Pedido:', lv_pedido.
* Recupero datos de la tabla VBAK este es la clase de doc de ventas
SELECT SINGLE auart INTO lv_auart FROM vbak WHERE vbeln = lv_pedido.
IF sy-subrc <> 0.
WRITE: /'2. No se encontró la clase de documento de ventas'.
EXIT.
ENDIF.
* Poblando estructura XKOMFK
ls_xkomfk-vbeln = p_entreg. "Entrega
ls_xkomfk-vbtyp = 'ZTA'. "Tipo de documento de factura
APPEND ls_xkomfk TO lt_xkomfk.
* Poblando estructura VBSK_I
ls_vbsk_i-mandt = sy-mandt.
ls_vbsk_i-sammg = 'X'.
ls_vbsk_i-smart = 'F'. "Clase de Grupo
* Obtener la clase de factura propuesta (Order Billing Type) desde la tabla TVAK
SELECT SINGLE fkara INTO lv_fkara FROM tvak WHERE auart = lv_auart.
IF sy-subrc <> 0.
WRITE: /'3. No se encontró la clase de factura propuesta'.
EXIT.
ENDIF.
* Recupero los datos del pedido
SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_pedido FROM vbap WHERE vbeln = lv_pedido.
IF sy-subrc <> 0.
WRITE: / '6. No se encontraron pedidos para la entrega:', p_entreg.
EXIT.
ENDIF.
LOOP AT lt_pedido INTO ls_pedido.
CLEAR: ls_xvbrp, ls_xvbrk.
ls_xvbrp-posnr = ls_pedido-posnr. "Posición de factura
ls_xvbrp-vbeln = ls_pedido-vbeln. "Documento de facturación
ls_xvbrk-vbeln = ls_pedido-vbeln. "Documento de facturación
ls_xvbrk-fkart = lv_fkara. "Clase de factura
APPEND ls_xvbrp TO lt_xvbrp.
APPEND ls_xvbrk TO lt_xvbrk.
ENDLOOP.
CALL FUNCTION 'RV_INVOICE_CREATE'
EXPORTING
vbsk_i = ls_vbsk_i
TABLES
xkomfk = lt_xkomfk
xkomv = lt_xkomv
xthead = lt_xthead
xvbfs = lt_xvbfs
xvbpa = lt_xvbpa
xvbrk = lt_xvbrk
xvbrp = lt_xvbrp
xvbss = lt_xvbss.
* Mostrar mensajes de retorno
LOOP AT lt_xvbfs INTO ls_xvbfs.
WRITE: /'Tipo de Mensaje: ', ls_xvbfs-msgty,
/'Mensaje1: ', ls_xvbfs-msgv1,
/'Mensaje2: ', ls_xvbfs-msgv2,
/'Mensaje3: ', ls_xvbfs-msgv3,
/'Mensaje4: ', ls_xvbfs-msgv4.
ENDLOOP.
* Guarda si no hay errores
READ TABLE lt_xvbfs INTO ls_xvbfs WITH KEY msgty = 'E'.
IF sy-subrc <> 0.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'.
ENDIF.
* Mostrar el número de la factura creada
READ TABLE lt_xvbrk INTO ls_xvbrk INDEX 1.
IF sy-subrc = 0.
lv_factura = ls_xvbrk-vbeln.
WRITE: / 'Factura creada con éxito:', lv_factura.
ENDIF.