✒️ABAP POO / Introducción al ALV Grid Control Por Jeferson Pena Curvelo
ABAP Introducción al ALV Grid Control

Introducción al ALV Grid Control:
El sistema SAP nos permite crear controles Z utilizando objetos ABAP. Uno de los controles de los que hablamos es el ALV GRID CONTROL con el cual podremos crear reportes ALV utilizando objetos.
Con este control tendremos disponibles todas las funciones estándar de la barra de menús y también podremos configurar todas las propiedades del ALV para adaptarlo a nuestras necesidades.
Para crear el ALV se debe utilizar un contenedor. Este objeto puede contener otros controles aparte del ALV GRID CONTROL como por ejemplo TREE CONTROL, SAP PICTURE CONTROL, SAP SPLITTER CONTROL y más.
El contenedor proporciona un área física para la visualización de los objetos. Todos los controles existen dentro de un contenedor.
Utilizaremos dos objetos para administrar los controles Z y el ALV GRID CONTROL. Ellos son las clases:
- CL_GUI_CUSTOM_CONTAINER
- CL_GUI_ALV_GRID
Podemos ver todos los atributos, métodos y demás configuraciones de los objetos a través del "Generador de Clases" Transacción SE24.
Pasos para la creación del ALV GRID CONTROL:
Se creará el reporte ZPRUEBA_ALV_GRID_OBJETOS y se realizará las siguientes declaraciones de datos:
TYPE-POOLS: slis.
DATA: ti_usuarios LIKE TABLE OF wa_usuarios,
st_usuarios LIKE LINE OF ti_usuarios.
DATA: ok_code TYPE sy-ucomm,
o_grilla TYPE REF TO cl_gui_alv_grid,
e_contenedor TYPE REF TO cl_gui_custom container.
Para esto se tendrá que haber creado previamente la tabla ZTABLA_USUARIOS.
En el evento START-OF-SELECTION se realizará la búsqueda de los datos en la tabla ZTABLA_USUARIOS. En el evento END-OF-SELECTION se llamará a la dynpro 0100 que es la que almacenará el ALV.
START-OF-SELECTION.
PERFORM seleccion_datos.
END-OF-SELECTION.
CALL SCREEN 0100.
Crearemos la dynpro 0100 y el Status GUI 0100 con los botones de navegación estándar. Asignaremos el OK_CODE a la dynpro.
Utilizando el Screen Painter, a través de la transacción SE80, crearemos un Custom Control que servirá de contenedor de nuestro ALV.
Luego en la lista de elementos de la dynpro asignaremos el nombre CONTENEDOR al Custom Control.
En la lógica de procesamiento de la dynpro crearemos los siguientes módulos:
PROCESS BEFORE OUTPUT.
MODULE status_0100.
MODULE crear_objetos_0100.
PROCESS AFTER INPUT.
MODULE salir_0100.
En el módulo CREAR_OBJETOS_0100 crearemos los objetos O_CONTENEDOR y O_GRILLA
MODULE crear_objetos_0100 OUTPUT.
IF o_contenedor IS INITIAL.
CREATE OBJECT o_contenedor
EXPORTING
container_name = 'CONTENEDOR'.
CREATE OBJECT o_grilla
EXPORTING
i_parent = o_contenedor.
CALL METHOD o_grilla->set_table_for_first_display
EXPORTING
i_structure_name = 'ZTABLA_USUARIOS*
CHANGING
it_outtab = ti_usuarios
EXCEPTIONS
OTHERS =4
ELSE.
CALL METHOD o_grilla->refresh_table_display
EXPORTING
i_soft_refresh = 'X'
EXCEPTIONS
finished =1
OTHERS =2.
ENDIF.
ENDMODULE .
Para excluir los botones estándar de nuestro reporte, se debe completar una tabla interna de tipo UI_FUNCTIONS y pasar esta tabla interna en el parámetro IT_TOOLBAR_EXCLUDING correspondiente al método SET_TABLE_FOR_FIRST_DISPLAY. Los códigos de función de los botones que deseamos quitar de la barra se pueden obtener inspeccionando las constantes de la clase estándar CL_GUI_ALV_GRID en la transacción SE24. Para ocultar la barra de herramientas enteras podemos asignar "X" al campo NO_TOOLBAR del layout.
Utilizamos el método SET_TABLE_FOR_FIRST_DISPLAY para visualizar el ALV por primera vez. Luego, si se realiza algún cambio al mismo, utilizamos el método REFRESH_TABLE_DISPLAY. Previamente a mostrar el ALV debemos completar el catálogo.
Finalmente, en el módulo SALIR_0100 liberamos los objetos O_CONTENEDOR y O_GRILLA y volvemos a la pantalla inicial.
MODULE salir_0100 INPUT.
CALL METHOD o_grilla->free.
CALL METHOD o_contenedor->free.
LEAVE PROGRAM.
ENDMODULE.
Cuando trabajamos con el control ALV_GRID_CONTROL, puede suceder que, dado un requerimiento, sea conveniente crear una pantalla de selección tal como las que se crean en reportes clásicos, y luego, con base en parámetros introducidos en pantalla por el usuario, se llame mediante la sentencia CALL_SCREEN a diferentes dynpros. El programa que se está creando sería un híbrido entre un reporte clásico y un programa de diálogo. Si nos encontramos en dicha situación y realizamos por ejemplo un CALL_SCREEN a la dynpro 0100 y deseamos que al presionar el botón BACK del Status en la dynpro 0100 el programa regrese a la pantalla de selección entonces dentro del código correspondiente al botón back deberíamos ejecutar la sentencia LEAVE_TO_SCREEN = 0 en lugar de LEAVE PROGRAM ya que de lo contrario estaríamos abandonando el programa sin pasar por la pantalla de selección.
 
 
 
Sobre el autor
Publicación académica de Jeferson Jos Pena Curvelo, en su ámbito de estudios para el Master ABAP Orientado a Objetos.
Jeferson Jos Pena Curvelo
Chile - Legajo: PD49W
✒️Autor de: 180 Publicaciones Académicas
🎓Egresado de los módulos:
- Master ABAP Orientado a Objetos
- Master ABAP for HANA
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
Disponibilidad Laboral: FullTime
























