Truco 15. Añadir nuevos campos en el informe de partidas de FI.


En nuestro truco de hoy vamos a analizar la forma de añadir nuevos campos en los informes estándar de partidas individuales de Finanzas. Este requerimiento suele ser muy habitual en nuevos proyectos o en la evolución de una instalación, cuando el usuario necesita tener información adicional a la ya de por si completa que ofrece Sap para la consulta de movimientos contables.

Algunos ejemplos habituales pueden ser el incluir las cuentas de proveedor o cliente al visualizar cuentas de gasto, facturas pendientes de recibir o cuentas de impuestos. O incluir información adicional proveniente de otros módulos relacionados (datos de compras, proyectos, facturación de ventas, movimientos de mercancía, clasificación propia de clientes o proveedores), etc.

Para realizar esta parametrización, os propongo dos alternativas:

1) Utilizar los Business Transactions Events (BTE): si queremos ampliar los informes de partidas individuales clásicos (FBL1N para Acreedores, FBL5N para Deudores y FBL3N para Cuentas de Mayor).

2) Utilizar una implementación de la Badi FAGL_ITEMS_CH_DATA: si queremos ampliar la nueva transacción para consultar las partidas de cuentas de mayor(FAGLL03).

Ampliación utilizando los BTE.

Las Business Transactions Events (BTE) son un mecanismo parecido a las Exits que Sap ideo hace unos años para permitir una personalización de componentes del sistema. El objetivo era permitir tanto a partners como a clientes añadir su propio código en las transacciones estándar, personalizandolo o permitiendo el desarrollo de soluciones sectoriales. Era algo así como una evolución de las User Exits.

A las BTE se accede desde la transacción FIBF. Básicamente los BTE son puntos o eventos donde Sap nos va a permitir introducir un módulo de función donde programar un código Abap personalizado. Tendremos dos tipos de puntos: Módulos P/S (Publish and Subscribe) y Módulos de Operación.

Cada módulo se disparara en un código de evento, y por tanto, se tratará de identificar el más apropiado para incluir en el sistema nuestro comportamiento personalizado. En nuestro caso, utilizaremos un evento en un Módulo P/S, en concreto el 1650 Visualización PI: Completar datos por posición, que nos va a permitir añadir campos adicionales en el informes de partidas individuales.

NOTA IMPORTANTE: la transacción FIBF tiene disponible una utilidad de información y documentación de los diferentes módulos disponibles. Se accede desde la opción de menú Entorno –> Sistema Info P/S y Entorno –> Sistema Info Procesos.

En esta documentación se informa del propósito de cada Módulo, así como la función abap de ejemplo (es un modelo que nunca hay que tocar, solo copiar para crear la nuestra propia) y las estructuras de datos de intercambio de información.

Como paso previo a la configuración de la BTE, habrá que ampliar la estructuras RFPOS, RFPOSX, añadiendo con una estructura APPEND todos los campos que queramos añadir en los informes (con la nomenclatura ZZNOMBRE).  Esto lo realizaremos con la transacción SE11, tal y como vemos en la imagen. En este caso, vamos a añadir el campo Central de Compras que tenemos en el maestro de clientes como un campo mas en nuestro informe de partidas abiertas (con el objetivo de analizar riesgo de clientes por ese campo y poder realizar sumarizaciones y clasificaciones).

Una vez preparada la estructura de datos, la activaremos ejecutando el report RFPOSXEXTEND. Este report añade los campos que hemos incluido a la estructura RFPOSXEXT, que es la que Sap utiliza en los informes. A continuación, realizaremos con la transacción FIBF los siguientes pasos:

1.Creación un identificador de Producto de cliente donde incluir nuestra personalización: desde la opción de menú Opciones –> Productos –> de un cliente. Aquí creamos una clave que nos permite gestionar todas nuestras personalizaciones y su activación o no.

Importante: si el flag Activo no esta marcado, la personalización no se activará en el sistema.

2. Creación del módulo de función: con la transacción SE37, nos crearemos un nuevo módulo de función como copia del que Sap nos ofrece como modelo (en este caso, el SAMPLE_INTERFACE_00001650). En este modulo incluiremos todo el código Abap necesario para nuestra personalización.

3. Asociar el módulo de función al evento: desde la opción de menú de la transacción FIBF, Opciones –> Modulos P/S –> de un cliente. Ahí asociamos el evento, al identificador de producto y al módulo de función. En resumen, al incluir aquí el módulo de función, estamos haciendo que se llame a nuestro código Abap en el lugar que Sap ha establecido en el estándar para dicho evento.

Nuestra personalización esta lista para ser utilizada. Desde la transacción de listado de partidas abiertas de clientes (FBL5N), ya tenemos disponible una nueva columna con la información del nuevo campo, leído del maestro de clientes.

Ampliacion utilizando la implementación de la BADI.

En el caso de estar utilizando la transacción FAGLL03 para listar partidas abiertas, deberemos de usar una implementación de la BADI FAGL_ITEMS_CH_DATA, que incluirá los siguientes pasos:

1. Ampliar la estructura FAGLPOSX, añadiendo los campos deseados en el include CI_FAGLPOSX. Lo realizaremos igual que antes desde la transacción SE11, aunque en este caso no incluiremos una estructura append, sino que  los campos los insertaremos en el include CI_FAGLPOSX (habrá que crearlo sino existe en nuestro sistema).

2. Crear una implementación de la BADI FAGL_ITEMS_CH_DATA. Desde la transacción SE19, crearemos la implementación, llamándola por ejemplo Z_FAGL_ITEMS_CH_DATA.

3. Personalizar los campos adicionales incluyendo nuestro código abap en el metodo de la Badi llamado CHANGE_ITEMS. Un ejemplo de código sería el siguiente:

method if_ex_fagl_items_ch_data~change_items.
data ls_items type faglposx.
data ls_tab type bkpf_key.
data ls_addon type bkpf_addon.
data ls_t001 type t001.
02.07.2011 Page 3 of 3
SAP Note 1423223 - Turkey: Display Yevmiye Number in line
item reports
loop at ct_items into ls_items.
if ls_t001-bukrs ne ls_items-bukrs.
select single * into ls_t001
from t001
where bukrs = ls_items-bukrs.
endif.
if ls_t001-land1 = 'TR'.
ls_tab-bukrs = ls_items-bukrs.
ls_tab-belnr = ls_items-belnr.
ls_tab-gjahr = ls_items-gjahr.
call function 'JOURNAL_00003320'
exporting
i_bkpf_key = ls_tab
i_land1 = 'TR'
importing
e_bkpf_addon = ls_addon.
ls_items-belnr_alt = ls_addon-belnr_alt.
modify ct_items from ls_items.
endif.
endloop.
endmethod.

Observar que los campos de cada partida están en las lineas de la tabla interna CT_ITEMS y desde ahí deberemos leer los valores, recuperar los nuestros y volveremos a dejar en la tabla interna para que aparezcan en el listado de PA´s.

4. Activar el metodo y la implementación de la badi. En ese momento,ya estará disponible el nuevo campo en la transacción FAGLL03.

Conclusiones.

En esta entrada del Blog hemos visto otros métodos de personalización de nuestro sistema, introduciendo las BTE (que son un mecanismo muy potente para personalizar el sistema) y las BADIS, que es la forma más nueva en la que Sap esta dejando puertas abiertas para personalizar su ERP, más relacionadas con la programación orientada a objetos y la implementación de clases.

Con estos métodos y los vistos en anteriores entradas, tenemos una visión mas que amplia de las diferentes opciones que nos propone Sap para aquellos casos en que el estándar no nos da la alternativa que necesitamos.

Información Adicional.

Nota 1423223: en esta nota se explica un ejemplo practico, por un requerimiento legal de Turquia, de como añadir campos en ambas transacciones.

En la blog Abap Mania, también tenemos un ejemplo práctico para el primer caso. Gracias por su aportación.

Para más información sobre añadir campos en los informes de partidas, mirad las notas OSS 569939, 217189, 112312, 429382. Y los siguientes links:

http://abapers.wordpress.com/tag/fibf/

http://www.saptechnical.com/Tutorials/ExitsBADIs/BTE/Page1.htm

http://www.saptechnical.com/Tutorials/ExitsBADIs/BTE/Page2.htm

http://www.saptechnical.com/Tutorials/Others/BTE/Page1.htm

http://www.mundosap.com/foro/showthread.php?t=3693

http://sap.ittoolbox.com/groups/technical-functional/sap-dev/field-sales-office-in-fbl5n-view-3738797

http://forums.sdn.sap.com/thread.jspa?threadID=844981

Esta entrada fue publicada en Sap Basis, Sap FI. Guarda el enlace permanente.

9 respuestas a Truco 15. Añadir nuevos campos en el informe de partidas de FI.

  1. Pingback: Resumen. Opciones de personalización en nuestro sistema Sap. « Notas y trucos SAP (Bitacora)

  2. excelente…. me servio a la perfección.

  3. Hernán Cabezas dijo:

    Muy buena….el problema que tengo es que en dialogo me muestra los campos añadidos en la FBL5N pero en fondo estas columnas están sin datos.

    • BL dijo:

      Estimado pudo solucionar su problema?
      Gracias!

      • Hernán Cabezas dijo:

        Si claro, lo que hice fue como el sy-tcode no me reconocía en fondo, opte por usar e_postab-lifnr para acreedores y e_postab-kunnr para deudores si algunos de estos no eran initial aplicaba mi codigo y funciona tanto para procesos en linea como n fondo. Espero haberte ayudado.

  4. Consultor FI dijo:

    Estimado Roberto:

    junto con saludar, conoces alguna Badi que sirva para reflejar el segmento en la transacción FAGL_FC_VAL – Valoración de moneda extranjera.

    saludos y gracias

  5. mlizcano77 dijo:

    Tienes muy buenos trucos y aportes, te felicito por tu blog

  6. Mauricio Palomo dijo:

    Excelente aporte!!!

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s