✒️ABAP El catálogo ALV automático, los logos, los encabezados y los status GUI
ABAP El catálogo ALV automático, los logos, los encabezados y los status GUI
CATALOGO ALV AUTOMATICO, LOGOS, ENCABEZADOS Y STATUS
CREACIÓN DEL CATÁLOGO EN FORMA AUTOMÁTICA
Existen dos formas de crear el catálogo del ALV, la primera es en forma manual, ingresando campo por campo, tal como hicimos en el ej anterior. La segunda, es crear el catálogo en forma automática con la función REUSE_ALV_FIELDCATALOG_MERGE.
Si tomamos el ejemplo de la leccion anterior, el código para la creación automática sería el siguiente:
v_repid = sy-repid.
IF p_grilla = 'X'.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = ti_catalogo[]
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = st_layout
TABLES
t_outtab = ti_usuarios.
ELSEIF p_lista = 'X'.
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.
ENDIF.
Pero para poder hacer esto vamos a tener que modificar dos puntos del programa. El primero es la forma como se declara la tabla interna del ALV. Si creamos el catálogo en forma automática debemos declarar la tabla interna utilizando LIKE y haciendo referencia a campos de una tabla base de datos existente:
*Declarar asi para usar el MERGE en el catalogo
DATA: BEGIN OF ti_usuarios OCCURS 0,
dni LIKE ztabla_usuarios-dni,
nombre_ape LIKE ztabla_usuarios-nombre_ape,
estado_usu LIKE ztabla_usuarios-estado_usu,
direccion LIKE ztabla_usuarios-direccion,
codigo_postal LIKE ztabla_usuarios-codigo_postal,
f_nacimiento LIKE ztabla_usuarios-f_nacimiento,
estado_civil LIKE ztabla_usuarios-estado_civil,
END OF ti_usuarios.
Lo otro que debemos hacer es configurar el editor, para que se restrinja la cantidad de caracteres de ancho de la pantalla a 72
NOTA: Configuración del ancho del Editor ABAP: para configurar el ancho del editor ABAP a 72 líneas accedemos a la opción del menú:
Utilidades-Opciones-Editor_ABAP-Editor y tildamos long.lineas compatib descend (72).
UTILIZACIÓN DE LOGOS Y ENCABEZADOS
En los ALV Grilla podemos agregar logos y encabezados en los listados. Para ello, debemos declarar una tabla del tipo SLIS_T_LISTHEADER y una estructura del tipo SLIS_LISTHEADER.
* Tabla y estructura para la cabecera
ti_header TYPE slis_t_listheader,
st_header TYPE slis_listheader.
Antes de completar el catálogo, vamos a llenar la tabla TI_HEADER con el encabezado del Reporte, el tipo de reporte y la fecha del sistema
DATA: v_fecha(10) TYPE c.
CONCATENATE sy-datum 6(2) sy-datum 4(2)
sy-datum(4) INTO v_fecha SEPARATED BY '/'.
st_header-typ = 'H'.
st_header-info = 'Listado de Usuarios'.
APPEND st_header TO ti_header.
CLEAR st_header.
st_header-typ = 'S'.
st_header-key = 'Tipo de reporte: '.
st_header-info = 'ALV'.
APPEND st_header TO ti_header.
CLEAR st_header.
st_header-typ = 'S'.
st_header-key = 'Fecha: '.
st_header-info = v_fecha.
APPEND st_header TO ti_header.
CLEAR st_header.
Luego, agregamos en la llamada a la función del ALV, el parámetro exporting I_CALLBACK_TOP_OF_PAGE con el literal TOP_OF_PAGE que será el nombre de la subrutina que cargue el contenido del encabezado y el logo.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
it_fieldcat = ti_catalogo[]
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = st_layout
TABLES
t_outtab = ti_usuarios.
Ahora creamos la subrutina TOP_OF_PAGE con la llamada a la función REUSE_ALV_COMMENTARY_WRITE, que carga el encabezado que definimos en la tabla interna TI_HEADER, junto con el logo ENJOYSAP_LOGO
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = ti_header
i_logo = 'ENJOYSAP_LOGO'.
ENDFORM. "top_of_page
NOTA: Transacción SE78: para ver los logos disponibles en el sistema o cargar nuevos debemos utilizar la transacción SE78
Finalmente ejecutamos el programa:
AUDIO: Para subir Logos, aparte de la Transacción SE78, tenemos la transacción estándar OAER. Para subir un logo completamos los parámetros solicitados: Nombre Clase=PICTURE, Tipo Clase = OT, Clave del Objeto=NOMBRE_LOGO (en Mayúscula). Ejecutamos la transacción y luego seleccionamos “Documento Estándar”, pinchamos sobre el icono “imagen” y saldrá una ventana de dialogo, donde podemos seleccionar la imagen de nuestro PC para subirla al servidor y ya se podrá usar en un reporte ALV. Si deseamos agregar la imagen a una Orden de Transporte debemos acceder al menú Documentos-Transportar.
UTILIZACIÓN DE STATUS GUIs
Para poder utilizar un Status GUI en un reporte ALV, vamos a agregar en la llamada a la función del ALV el parámetro exportin I_CALLBACK_PF_STATUS_SET con el literal PF_STATUS, que será el nombre de la subrutina que declare la utilización del Status GUI y el parámetro exporting I_CALLBACK_USER_COMMAND con el literal USER_COMMAND, que será el nombre de la subrutina que se ejecute para capturar la acción realizada por el usuario:
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = v_repid
i_callback_pf_status_set = 'PF_STATUS'
i_callback_user_command = 'USER_COMMAND'
it_fieldcat = ti_catalogo[]
i_callback_top_of_page = 'TOP_OF_PAGE'
is_layout = st_layout
TABLES
t_outtab = ti_usuarios.
Ahora definimos la subrutina PF_STATUS que setea el status:
FORM pf_status USING rt_extab TYPE slis_t_extab.
SET PF-STATUS '0100'.
ENDFORM. "PF_STATUS
Vamos a crear en el status, un botón con la descripción “Usuarios activos” y el código USU_ACTI.
También en las Teclas de función (Function Keys) del status, agregamos los códigos para poder navegar para atrás, volver a la pantalla principal o salir del programa. Cuando creamos estos botones, debemos acordarnos de setearlos con Tipo de función (Function Type) igual a E, sino no funcionarán como esperamos.
Por último agregamos la subrutina que capturará las acciones realizadas por el usuario:
FORM user_command USING r_ucomm TYPE syucomm
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'ACEPTAR'.
WHEN 'CANCELAR'.
ENDCASE.
ENDFORM. "user_command
Finalmente, si ejecutamos el reporte, veremos en el Status GUI, el botón de usuarios activos y si lo ejecutamos, se procesará el código existente en la subrutina USER_COMMAND:
 
 
 
Sobre el autor
Publicación académica de Alexander Castellanos, en su ámbito de estudios para la Carrera Consultor ABAP.
Alexander Castellanos
Profesión: Ingeniero de Sistemas - Colombia - Legajo: JS42A
✒️Autor de: 67 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Alexander Castellanos