Reportes

14
REPORTES

Transcript of Reportes

Page 1: Reportes

REPORTES

Page 2: Reportes

Reportes – RichardRey.com - 2

En ABAP se cuenta con una serie de instrucciones especialmente diseñadas para que la generación de reportes sea más sencilla. Existen dos formas de construir reportes en ABAP:

• Reportes tipo LIST o WRITE.

• Reportes tipo ALV.

Reportes tipo LIST o WRITE

Para este tipo de reportes, existen una serie de sentencias que nos permitirán construir nuestro reporte "a mano", es decir, paso por paso, línea por línea.

Todo empieza por la sentencia WRITE, con ella podremos visualizar una variable por pantalla, su estructura es la siguiente:

WRITE / (<offset>) (<long>) <datos a visualizar>.

Con la barra (/) indicaremos si deseamos un salto de línea o no antes de imprimir, esta barra es opcional.

Con el (<offset>) indicaremos si queremos en que columna de la pantalla empezará la impresión.

Con el (<long>) indicaremos la longitud de los valores a utilizar; todos estos campos son opcionales.

Ejemplo:

WRITE / (15) <variable>.

Con la sentencia ULINE, podremos imprimir una línea horizontal, ideal para la construcción de tablas en un reporte; esta sentencia cuenta con las mismas propiedades de la sentencia WRITE explicada arriba; en el caso de pintar líneas verticales, utilizamos la sentencia VLINE.

Para saltar una o varias líneas en la impresión, contamos con la sentencia SKIP, que por defecto, responde al salto de una única línea, a menos que se le indique explícitamente cuantas líneas de salto se quieren con la instrucción: SKIP <n> (n = número de líneas).

Ahora bien, si deseamos saltar a una línea específica de la pantalla, utilizaríamos la sentencia SKIP

TO LINE <n> (n = número de la línea destino).

Si el salto que queremos dar, es hacia la siguiente página, la instrucción que nos sería de utilidad sería NEW-PAGE.

Al utilizar la sentencia WRITE, en ocasiones imprimiremos cantidades en monedas, para una correcta impresión, completaremos con las siguientes sentencias:

WRITE <campo> CURRENCY <moneda> o WRITE <campo> CURRENCY LOCAL.

Page 3: Reportes

Reportes – RichardRey.com - 3

Si vamos a imprimir, por ejemplo, el código de un material, y no deseamos que aparezcan los ceros a la izquierda del código, utilizamos la siguiente instrucción:

WRITE <variable> NO-ZERO.

Para imprimir fechas estableciendo su formato de salida, contamos con:

WRITE <fecha> DD/MM/YY.

WRITE <fecha> MM/DD/YY.

WRITE <fecha> DD/MM/YYYY.

WRITE <fecha> MM/DD/YYYY.

Atributos de pantalla y Formatos de Páginas

Dejamos atrás el WRITE para entrar en otros aspectos, como añadirle colores o estilos a ciertas variables para diferenciarlas de otras, como por ejemplo, la cabecera de una tabla.

FORMAT NTENSIFIED ON/OFF.

FORMAT INVERSE ON/OFF.

FORMAT INPUT ON/OFF.

FORMAT COLOR <n>.

FORMAT RESET.

. Con estas instrucciones, podemos jugar con el look y el diseño de nuestro reporte.

También hay un grupo de instrucciones destinadas a dar formato de salida a nuestro reporte.

Podemos controlar ambos extremos de una página con los eventos TOP-OF-PAGE y END-OF-PAGE; éste último no se ejecutará si el salto de página se produce con un NEWPAGE.

Si no queremos que la cabecera del reporte sea la estándar de SAP, sino controlarla nosotros mismos a través del evento TOP-OF-PAGE, lo que haremos es que la primera instrucción de nuestro programa sea la siguiente:

REPORT <Zxxx> NO STANDARD PAGE HEADING.

El formato de la página del reporte se define también desde la instrucción REPORT.

REPORT <Zxxx> LINE-SIZE <n> (ancho de la línea).

REPORT <Zxxx> LINE-COUNT <n(m)> (n = líneas por páginas; m = líneas reservadas para pie de página).

Page 4: Reportes

Reportes – RichardRey.com - 4

REPORT <Zxxx> PAGE-COUNT <n>. (n = número máximo de páginas).

Con la instrucción RESERVE, podemos impedir que un bloque de líneas que presentan una coherencia juntas, se corten y se pierda la misma, para esto podemos reservar un número determinado de líneas con la instrucción:

RESERVE <n> LINES.

Esta instrucción se debe colocar justo antes del WRITE sobre el que se quiere "reservar" ese bloque de líneas; de no haber espacio suficiente para imprimir estas líneas, éstas se imprimirán en la siguiente página.

Elementos de Texto.

En el entorno de desarrollo ABAP se nos permite manejar elementos de texto sin necesidad de

escribir el código en el programa.

Estos elementos de texto pueden ser títulos de reportes, cabeceras, textos de selección, entre

otros.

Para acceder a la pantalla de edición de estos textos, desde el editor ABAP, ubicamos el menú

Pasar a -> Elementos de Texto.

• Títulos y Cabeceras: para tratar el título y cabeceras del reporte y las cabeceras de

columna que saldrán por pantalla e impresora.

• Textos de Selección: para tratar las descripciones que acompañan a los parámetros de

entrada del tipo PARAMETERS o SELECT-OPTIONS.

• Textos Numerados: para tratar constantes de tipo texto sin necesidad de declararlas

dentro del programa. Los nombres de estas constantes serán TEXT-nnn donde <nnn> es un

número de 3 dígitos. Además podemos mantener los textos numerados en varios idiomas.

Mensajes de Diálogo.

Son aquellos mensajes que aparecen en la línea de mensajes y que son manejables desde un

programa. Estos mensajes están agrupados en áreas de mensajes. Para indicar que área vamos a

usar en un reporte, utilizamos MESSAGE-ID en la instrucción REPORT.

REPORT <reporte> MESSAGE-ID <area>.

Para el tratamiento de las áreas de mensajes, encontramos su editor en el menú

Pasar a -> Mensajes.

Para visualizar un mensaje dentro del código utilizamos la sentencia MESSAGE Tnnn.

Donde "nnn" es el número del mensaje dentro de su respectiva área y "T" es el tipo de mensaje.

Page 5: Reportes

Reportes – RichardRey.com - 5

Los diferentes tipos de mensajes que permite el sistema son los siguientes:

• A = Cancelación del proceso.

• E = Error. es necesaria una corrección de los datos.

• I = Información. Mensaje meramente informativo. El proceso continuará con un ENTER.

• S = Confirmación; información en la pantalla siguiente.

• W = Warning. Nos da un aviso, podemos cambiar los datos o pulsar ENTER para continuar.

Solo los mensajes tipo A y E interrumpirán la ejecución del programa, obligando su finalización

antes de tiempo, el resto de mensajes, permitirá continuar con la ejecución hasta el final.

Podemos acompañar los mensajes con variables como parámetros:

MESSAGE Tnnn WITH <var1> <var2>.

En su definición veremos símbolos &, éstos símbolos se podrán sustituir por variables en el código

del programa; dependiendo del tipo de mensaje permite más símbolos que otros, hasta un

máximo de 4 variables.

Ejemplo de un reporte con WRITE.

A continuación te dejo un ejemplo funcional de cómo construir un reporte tipo WRITE o LIST.

********************************************************************************

REPORT zrr. DATA: it_flights LIKE TABLE OF mara, wa_flights LIKE LINE OF it_flights. START-OF-SELECTION. SELECT * FROM mara INTO TABLE it_flights WHERE matnr BETWEEN '000000000080003050' and '000000000080003060' . END-OF-SELECTION. SORT it_flights BY matnr ersda. * Data output PERFORM data_output. TOP-OF-PAGE.

NEW-LINE. WRITE: / sy-uline.

Page 6: Reportes

Reportes – RichardRey.com - 6

FORMAT COLOR COL_HEADING . WRITE: sy-vline, AT (3) ' ' , AT (10) 'Material' ,

AT (1) sy-vline, AT (15) 'Fecha' , AT (1) sy-vline, AT (25) 'Grupo Artículos' , AT (1) sy-vline, AT (30) 'Número Antiguo' , AT (1) sy-vline. FORMAT COLOR OFF .

WRITE: / sy-uline. *&---------------------------------------------------------------------* *& Form DATA_OUTPUT *&---------------------------------------------------------------------* * List output of flight data *----------------------------------------------------------------------* FORM data_output. LOOP AT it_flights INTO wa_flights. NEW-LINE. WRITE: sy-vline. WRITE: AT (3) ' ' , AT (10) wa_flights-matnr COLOR COL_KEY, AT (1) sy-vline, AT (15) wa_flights-ersda COLOR COL_NORMAL , AT (1) sy-vline, AT (25) wa_flights-mtart COLOR COL_NORMAL , AT (1) sy-vline, AT (30) wa_flights-bismt COLOR COL_NORMAL , AT (1) sy-vline. AT END OF matnr. ULINE. ENDAT. ENDLOOP. ENDFORM. " DATA_OUTPUT

********************************************************************************

Page 7: Reportes

Reportes – RichardRey.com - 7

Reportes ALV

Desde la versión 4.6C; existen funcionalidades avanzadas para el desarrollo de reportes, mucho

más sencillos de construir que los reportes WRITE, y mucho más elegantes y prácticos que estos,

ya que permiten cierto dinamismo, como agrupar, totalizar columnas numéricas, añadir y quitar

columnas, guardar los cambios realizados, exportar a Excel y otros formatos, etc.

Cuando se crea un reporte utilizando funciones ALV es necesario:

• Incluir en el programa la librería SLIS, que tiene definidas todas las estructuras de los parámetros de entrada y de salida de esta función. Esta librería se importa con la instrucción TYPE-SPOOLS: slis.

• Definir correctamente el catálogo de campos.

• Definir en el programa todas las subrutinas que implementarán el comportamiento de éste ante la ejecución de determinados eventos o ante la interacción del usuario.

• Pasarle los datos que deben ser mostrados en el reporte a la función utilizando tablas internas.

Utilizando las funciones ALV, ninguna sentencia WRITE aparecerá en el programa. Se informa a la

correspondiente función de los datos que van a ser mostrados, la definición y características de

Page 8: Reportes

Reportes – RichardRey.com - 8

cada uno de éstos datos y de la apariencia y todo es implementado por la función. En el momento

que llamamos a una de las funciones ALV para que imprima el report, perdemos el control del

programa. Esto es, cualquier evento del programa como ‘Nueva página’, ‘Top of page’, ‘End of

page’, etc. será controlado e implementado por la función, a no ser que le indiquemos a la función

qué eventos queremos que sean implementadas en el programa.

Se llamará a la función, informándole obligatoriamente los siguientes parámetros:

• I_CALLBACK_PROGRAM: Se informa a la función con el nombre del programa que está llamando a dicha función.

• IT_FIELDCAT: Este parámetro será una tabla interna que contiene la definición de los campos que aparecerán en el listado.

• T_OUTTAB: Nombre de la tabla interna que contiene toda la información recogida por el programa y la cual debe ser impresa en el reporte.

Cada tipo de ALV cuenta con diferentes parámetros de entrada opcionales, pero estos 3 son

obligatorios en todos los casos.

Existen 3 tipos principales de reportes ALV, el uso de cada uno dependerá de lo se requiera en un

momento dado.

• ALV List: permite simular el trazado de un reporte WRITE, pero con las funcionalidades y

bondades de un ALV.

• ALV Grid: Permite generar una tabla gráfica, totalmente editable desde su presentación

(añadir y quitar columnas, agrupar y ordenar, totalizar valores, entre otras).

• ALV Jerárquico: Es un tipo de reporte que consta de 2 cabeceras, y permite enlazar la

información de ambas partes de una manera gráficamente legible.

Cada uno de ellos tiene su propio módulo de funciones con sus respectivas estructuras, veamos un

poco como se construyen cada uno.

NOTA: Se mostrarán solo algunos de los parámetros de mayor uso de las funciones ALV, las

mismas cuentan con otros parámetros que aquí no se muestran por razones de espacio.

Page 9: Reportes

Reportes – RichardRey.com - 9

ALV LIST

CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY' EXPORTING i_callback_program = g_repid i_structure_name = gc_structure it_fieldcat = gt_fieldcat_list i_save = gc_save is_layout = gs_layout is_variant = gs_variant is_print = gs_print TABLES t_outtab = gt_output_value EXCEPTIONS program_error = 1 OTHERS = 2.

• I_CALLBACK_PROGRAM: Recibe el nombre del programa que invoca a la función.

• I_STRUCTURE_NAME: Indica la Estructura de Datos del Diccionario que se tomará como

base en la construcción del reporte.

• IT_FIELDCAT: Contiene lo que en ALV se conoce como el "Catálogo de Objetos"; esto es, la

lista de campos (o columnas) que se van a listar en el reporte.

• I_SAVE: En este parámetro se indicará que tipos de "layouts" se podrán "pre cargar",

(deben existir en el sistema); se le puede indicar a la función ALV tres posibles opciones;

que muestre aquellos layouts grabados como estándares ('X'); los layouts específicos de

usuarios ('U'), o todos los layouts disponibles ('A').

• IS_LAYOUT: Se le puede indicar a la función que el diseño del reporte aparezca con una

serie de ajustes; (con cabecera o sin ella, con colores en las filas o columnas, entre otras).

• IS_VARIANT: Este parámetro contendrá la variante de visualización (layout) que el usuario

haya seleccionado, de la lista de opciones para dicho reporte.

• IS_PRINT: Esta tabla interna controla parametrizaciones de impresión, como no mostrar la

cabecera, asignar impresora, saltarse la ventana de diálogo que solicita la impresora, entre

otras.

• T_OUTTAB: Esta será la tabla interna que contendrá la información que se requiere

desplegar en un reporte ALV.

La siguiente imagen es una muestra de los resultados que obtendremos para este tipo de ALV.

Page 10: Reportes

Reportes – RichardRey.com - 10

ALV GRID

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = v_repi d I_BACKGROUND_ID = 'ALV_BACKGROUND' i_callback_top_of_page = l_form _cabecera i_save = 'A' it_fieldcat = gt_fie ldcat is_variant = varian te TABLES t_outtab = p_outp ut.

• I_CALLBACK_PROGRAM: Recibe el nombre del programa que invoca a la función.

• I_BACKGROUND_ID: Permitirá asignarle una imagen de fondo al reporte.

• I_CALLBACK_TOP_OF_PAGE: Permite indicarle a la función que controlaremos la cabecera

del reporte desde nuestro programa.

• I_SAVE: En este parámetro se indicará que tipos de "layouts" se podrán "pre cargar",

(deben existir en el sistema); se le puede indicar a la función ALV tres posibles opciones;

que muestre aquellos layouts grabados como estándares ('X'); los layouts específicos de

usuarios ('U'), o todos los layouts disponibles ('A').

• IT_FIELDCAT: Contiene lo que en ALV se conoce como el "Catálogo de Objetos"; esto es, la

lista de campos (o columnas) que se van a listar en el reporte.

• IS_VARIANT: Este parámetro contendrá la variante de visualización (layout) que el usuario

haya seleccionado, de la lista de opciones para dicho reporte.

Page 11: Reportes

Reportes – RichardRey.com - 11

• T_OUTTAB: Esta será la tabla interna que contendrá la información que se requiere

desplegar en un reporte ALV.

Veamos que se obtiene con este tipo de ALV.

Page 12: Reportes

Reportes – RichardRey.com - 12

ALV JERÁRQUICO

Este tipo de ALV consiste en anidar dos tablas (una con la estructura de cabecera y otra con la

estructura del detalle), que permite enlazar la información de ambas tablas. Es muy útil cuando se

quiere un reporte que contenga doble cabecera; la función necesitará recibir la información en dos

tablas separadas.

CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY' EXPORTING i_callback_program = gv_rep id i_callback_pf_status_set = slis_e v_pf_status_set i_callback_user_command = slis_e v_user_command is_layout = gs_lay out it_fieldcat = gt_fie ldcat it_sort = gt_sor tinfo i_save = 'A' is_variant = gs_var iant it_events = gt_eve nt i_tabname_header = 'IT_HEADER' i_tabname_item = 'ITAB' is_keyinfo = gs_key info is_print = gs_pri nt TABLES t_outtab_header = IT_HEA DER t_outtab_item = ITAB EXCEPTIONS program_error = 1 OTHERS = 2.

• I_CALLBACK_PROGRAM: Recibe el nombre del programa que invoca a la función.

• I_CALLBACK_PF_STATUS_SET: Permite indicarle a la función cual será el Status GUI (barra

de pulsadores) que queremos desplegar con el reporte.

• I_CALLBACK_USER_COMMAND: Permitirá controlar los eventos que puedan ocurrir en el

reporte (pulsar un campo del listado y saltar a otra transacción, pulsar un botón añadido

en la barra de pulsadores, entre otros).

• IS_LAYOUT: Se le puede indicar a la función que el diseño del reporte aparezca con una

serie de ajustes; (con cabecera o sin ella, con colores en las filas o columnas, entre otras).

• IT_FIELDCAT: Contiene lo que en ALV se conoce como el "Catálogo de Objetos"; esto es, la

lista de campos (o columnas) que se van a listar en el reporte.

• IT_SORT: Con esta tabla se le indicará a la función cual será el criterio de ordenamiento

con el cual se desplegará la información.

• I_SAVE: En este parámetro se indicará que tipos de "layouts" se podrán "pre cargar",

(deben existir en el sistema); se le puede indicar a la función ALV tres posibles opciones;

que muestre aquellos layouts grabados como estándares ('X'); los layouts específicos de

usuarios ('U'), o todos los layouts disponibles ('A').

Page 13: Reportes

Reportes – RichardRey.com - 13

• IS_VARIANT: Este parámetro contendrá la variante de visualización (layout) que el usuario

haya seleccionado, de la lista de opciones para dicho reporte.

• IT_EVENTS: Se le indicará a la función cuales serán los eventos del sistema que controlará.

• I_TABNAME_HEADER: Contendrá el nombre de la tabla de cabecera.

• I_TABNAME_ITEM: Contendrá el nombre de la tabla del detalle de posiciones.

• IS_KEYINFO: Esta tabla contendrá las conexiones de enlaces entre las dos tablas, como se

puede deducir, ambas tablas deberán contener el mismo campo con el mismo nombre,

para poder servir de enlace entre ambas.

• IS_PRINT: Esta tabla interna controla parametrizaciones de impresión, como no mostrar la

cabecera, asignar impresora, saltarse la ventana de diálogo que solicita la impresora, entre

otras.

• T_OUTTAB_HEADER: Esta será la tabla interna que contendrá la información de cabecera

del reporte, será la primera línea de desglose en la doble cabecera.

• T_OUTTAB_ITEM: Esta tabla contendrá los datos a mostrarse, relativos al detalle, o lo que

es lo mismo, la información de la segunda tabla, con las posiciones del reporte.

Veamos qué tipo de reportes logramos obtener con esta función.

La tabla T_OUTTAB_HEADER contiene las líneas de color naranja, mientras que la tabla

T_OUTTAB_ITEM contendrá el desglose de líneas en fondo blanco, que corresponden a la

cabecera de color azul.

Si observamos en detalle, el desglose es el detalle de la línea naranja respectiva; dentro de la

jerarquía indicada.

Por eso se les conoce como reportes jerárquicos.

Page 14: Reportes

Reportes – RichardRey.com - 14

Ejemplo de ALV

Si quieres ver un ejemplo práctico y funcional sobre la construcción de un reporte ALV, revisa el

siguiente enlace, que te llevará a un trabajo realizado para un artículo en mi Blog personal.

http://richardrey.com/index.php/abap-tips/plantilla-para-construir-un-alv-2/

Con esto ya tienes diversas vías para construir reportes en un programa Z.

Richard Rey

http://aprendeabap.com