
REPORTES ALV: GRILLAS Y LISTAS
1. QUE ES UN ALV?
ALV (ABAP List Viewer): Es una herramienta exclusiva de ABAP, q se utiliza para crear reportes de manera eficaz, rápida y estandarizada.
VENTAJAS:
- Simplifican el desarrollo de reportes, por lo tanto se reducen los tiempos de programación.
- Proporcionan a nuestros reportes un montón de funcionalidad estándar.
- Proporcionan una salida por pantalla estandarizada e uniforme.
La creación de un Reporte ALV, se basa en la utilización de funciones.
Tipos de ALV:
- Grillas:------|
|----> Pueden utilizarse en cualquier reporte.
- Listas:-------|
- Jerárquico: Se utiliza sólo en los casos donde se muestran datos de cabeceras y de detalle, como por ejemplo números de factura y detalles o Aerolíneas y vuelos.
A cada tipo de ALV le corresponde una función diferente q son:
- Grillas --> REUSE_ALV_GRID_DISPLAY
- Listas --> REUSE_ALV_LIST_DISPLAY
- Jerárquico --> REUSE_ALV_HIERSEQ_LIST_DISPLAY
Dado q los reportes ALV requiere de la interacción del usuario con el reporte ya q proporciona muchísimas funcionalidades estándar q el usuario del reporte puede utilizar sin necesidad de ser programadas, entonces no tienen el menor sentido la utilización de ALV en procesos q se ejecutaran de fondo en donde el usuario no podrá sacar provecho de dicha funcionalidad, este punto es importante tenerlo en cuenta al momento de realizar la especificación o diseño técnico del reporte q es el momento en donde se piensa todos los aspectos y alcance del programa a crear.
2. MI PRIMER REPORTE ALV.
Pasos para crear el primer reporte ALV
PASO 1ero: Declaraciones de tipos, estructuras y tablas propias del ALV
Declaramos el tipo SLIS, q es necesario para la utilización de reporte ALV.
TYPE-POOLS: slis.
También declaramos una tabla y una estructura para el catálogo del ALV q son del tipo SLIS_T_FIELDCAT_ALV y
SLIS_FIELDCAT_ALV, otra estructura para la configuración de la salida q es del tipo SLIS_LAYOUT_ALV y una variable del tipo SY-REPID, para almacenar el nombre del programa.
Ej:
* Tabla y estructura del catalogo
DATA: ti_catalogo TYPE slis_t_fieldcat_alv,
st_catalogo TYPE slis_fieldcat_alv,
* Estructura para la configuración de la salida
st_layout TYPE slis_layout_alv,
* Variable con el nombre del programa
v_repid LIKE sy-repid.
PASO 2do: Declaración de la tabla de salida del ALV
Vamos a declarar la tabla de salida TI_USUARIOS q se mostrará en el ALV.
Ej:
* Tabla de salida del ALV
DATA: ti_usuarios TYPE STANDARD TABLE OF ztabla_usuarios,
st_usuarios LIKE LINE OF ti_usuarios.
PASO 3ero: Selección de los datos q se mostrarán en el ALV
Ahora seleccionamos los datos de la tabla ZTABLA_USUARIOS, q mostraremos en el listado de salida y lo guardamos en la tabla interna TI_USUARIOS.
Ej:
SELECT dni nombre_ape estado_usu direccion codigo_postal f_nacimiento estado_civil
FROM ztabla_usuarios
INTO CORRESPONDING FIELDS OF TABLE ti_usuarios.
PASO 4to: Armado del catálogo del ALV
Armamos el catálogo del ALV con los campos q serán las columnas de nuestro reporte. Para ello, completaremos para cada columna del listado, los siguientes campos pertenecientes a la tabla del catálogo.
Ej:
CLEAR st_catalogo.
st_catalogo-fieldname = 'DNI'. "Nombre del campo
st_catalogo-tabname = 'TI_USUARIOS'. "Nombre Tabla
st_catalogo-seltext_s = 'DNI'. "Descripción corta Cabecera
st_catalogo-seltext_m = 'DNI'. "Descripción media Cabecera
st_catalogo-seltext_l = 'DNI'. "Descripción larga Cabecera
st_catalogo-outputlen = 15. "Ancho de la columna
st_catalogo-just = 'L'. "Alineación
APPEND st_catalogo TO ti_catalogo.
Existen muchísimas más propiedades del catálogo q se pueden configurar según lo q necesitemos mostrar en el listado.
PASO 5to: Configuración de la salida del ALV
Vamos a cargar con valores la estructura ST_LAYOUT para configurar ciertos aspectos de la salida del ALV.
Ej:
CLEAR st_layout.
st_layout-zebra = 'X'. " Rayado de lineas
st_layout-window_titlebar = text-001. " Titulo Ventana Principal
Existen muchas más opciones a configurar en el layout de un reporte ALV.
PASO 6to: Ejecución de la función del ALV
Por último, lo q nos queda es la ejecución de la función del ALV.
Si queremos un reporte tipo grilla, ejecutaremos la función REUSE_ALV_GRID_DISPLAY.
Si queremos un reporte tipo lista, ejecutaremos la función REUSE_ALV_LIST_DISPLAY.
Ambas funciones se completan de la misma manera. Como dijimos anteriormente, los ALV jerárquicos se utilizan para cuando tenemos q mostrar datos de cabeceras y detalle, por lo tanto no es aplicable para este ejemplo.
Si es grilla:
v_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
it_fieldcat = ti_catalogo[ ]
is_layout = st_layout
TABLES
t_outtab = ti_usuarios.
Si es lista:
v_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_LIST_DISPLAY'
EXPORTING
i_callback_program = v_repid
it_fieldcat = ti_catalogo[ ]
is_layout = st_layout
TABLES
t_outtab = ti_usuarios.
Debemos tener en cuenta q por convención de ABAP colocaremos siempre a la derecha de la tabla interna del catálogo tanto en la function q genera la grilla como la q genera la lista una llave abierta y una llave cerrada.
La ppal diferencia entre la ALV Grill y la ALV List se encuentra en la visualización la cual es bastante diferente entre ambas opciones, a su vez en la ALV Grill permite la generación de un encabezado en la parte superior del listado en el cual podemos colocar un logo con totales y subtotales lo cual no es posible con el ALV List, el ALV List genera una lista de visualización utilizando la sentencia write esto le da la misma apariencia look and field de lo llamado reporte clásico. El ALV Grill es más bonito visualmente y permite copiar y pegar columna en dde queramos cuestión q no es posible con el ALV List. El ALV Grill no se puede ejecutar de fondo por lo q el módulo de funciones reuse_alv traducirá automáticamente la salida en pantalla a ALV List si ejecutamos el reporte de fondo. El ALV Grill utiliza controles active x en el servidor de presentación por lo q consume más memoria en el servidor q el ALV List y por último el ALV List permite solo la visualización de los datos en cambio con el ALV Grill podemos editar los registros o los campos si así lo deseamos.