✒️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
Resumen
Unidad 5 lección 7
El catálogo ALV automático, los logos, los encabezados y los estaTus GUI.
1- La creación del catálogo del ALV.
Existen dos formas de crear el catálogo ALV = primera forma manual => campo a campo
FORM armar_catalogo.
REFRESH ti_catalogo.
CLEAR wa_catalogo.
wa_catalago-fieldname = 'DNI' "Nombre del campo
wa_catalago-tabname = 'TI_USUARIOS' "Nombre del campo
wa_catalago-seltext_s = 'DNI' "Descripcion corta cabecera
wa_catalago-seltext_m = 'DNI' "Descripcion media cabecera
wa_catalago-seltext_l = 'DNI' "Descripcion larga cabecera
wa_catalago-outputlen = 10 "ancho de columna
wa_catalago-just = 'C' "Alineacion centrada
APPEND wa_catalogo TO ti_catalogo
2da opcion es crealo automática/ con el modulo de funciones 'REUSE_ALV_FIELDCATALOG_MERGE'
si tomamos el ej anterior => la creacion automático del catalogo seria
FORM armar_catalogo_automático.
CLEAR v_repid.
v_repid = sy-repid.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = v_repid
i_internal_tabname = 'TI_USUARIOS'
i_client_never_display = 'X'
i_inclname = v_repid
CHANGING
ct_fieldcat = ti_catalogo[]
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
ENDIF.
xa poder utilizar el modulo de funciones q crea automatica/ el catálogo vamos a tener q modificar dos puntos del prog.
Primero: Declarar la tabla interna de ALV, en este caso TI_USUARIOS =>tabla interna utilizando la sentencia OCCURS y LIKE y haciendo referencia a campos de una tabla DB existente.
REPORT zreporte_alv_automático.
TYPE -POOLS: slis.
CONSTANTS: c_x(1) TYPE c VALUE 'X'.
* declarar asi xa usuar 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,
fnacimiento LIKE ztabla_usuarios-fnacimiento,
nacionalidad LIKE ztabla_usuarios-nacionalidad,
codigo_postal LIKE ztabla_usuarios-codigo_postal,
estado_civil LIKE ztabla_usuarios-estado_civil,
END OF ti_usuarios,
declaración de la tabla interna del catalgo mediante la sentencia OCCURS 0 hace q no sea necesario declarar una cabecera o estructura ya q la misma viene incluida con la tabla interna.
Segundo: configurar el EDITOR ABAP xa q se restrinja la la cantidad de ancho de la pantalla a 72 caracteres. Esto significa q ninguna linea del prog. debe tener + de 72 caracteres de ancho, ya sea comentarios o código.
La configuracion el ancho del EDITOR ABAP a 72 caracteres en la opción del menú es:
= Utilidades
= opciones
= Editor ABAP
y tildamos long lineas compatib descend(72)
sino se realiza esta configuración a 72 caracteres de ancho el prog genera error => dump en pantalla
Ahora bien si generamos el catalogo del ALV en forma automática utilizar el modulo de funciones 'REUSE_ALV_FIELDCATALOG_MERGE' entonces luego de la ejecucion de este modulo de funciones la tabla interna TI_CATALOGO tendra lo sgnte:
Tabla: TI_USURIOS |
Tipo tabla Standard table [8 x 56 (732) ] |
LINEA | ROW | COL_POS | FIELDNAME | TABNAME |
1 | DNI | TI_USUARIOS | ||
2 | NOMRE_APE | TI_USUARIOS | ||
3 | ESTADO_USU | TI_USUARIOS | ||
4 | DIRECCION | TI_USUARIOS | ||
5 | FNACIMIENTO | TI_USUARIOS | ||
6 | NACIONALIDAD | TI_USUARIOS | ||
7 | CODIGO_POSTAL | TI_USUARIOS | ||
8 | ESTADO_CIVIL | TI_USUARIOS |
Si deseamos mofificar alguna de las propiedades de los campos del catalogo del ALV entonces luego de la ejecucion del modulo de funciones 'REUSE_ALV_FIELDCATALOG_MERGE' vamos a tener q modificar el contenido de la tabla interna TI_CATALOGO x Ej: => modificamos el contenido del texto medio correspondiente al campo NOMBRE_APE con TEST asi como lo vemos:
* le cambiamos el nombre de salida a la columna NOMBRE_APE
READ TABLE ti_catalogo WITH KEY fieldname 'NOMBRE_APE' INTO wa_catalogo.
IF sy-subrc EQ 0.
wa_catalogo-seltext_m = 'TEST'.
wa_catalogo-ddictxt = 'M'.
CLEAR v_indice.
v_indice = sy-tabix.
MODIFY ti_catalogo INDEX v_indice FROM wa_catalogo.
ENDIF.
y el resultado es:
REPORTE DE USUARIOS |
LUPA - ASC-DESC-FILTRO- entre otros |
DNI | TEST | ESTADO_USU | DIRECCION | FECHA_NACIMIENTO | NACIONALIDAD | CODIGO_POSTAL |
1111 | NNNN | I | AAAAAVVVVV | DDMMYYYY | EEEEEEE | 5555555 |
2 - La utilización de logos y encabezados en los ALV
En los ALV GRILLA podemos agregar logos q encabezados en los listados, en cambio no es posible en el ALV LIST. xa ello debemos declarar una tab int de tipo SLIS_T_LISTHEADER y una estructura de tipo SLIS_LISTHEADER tal como vemos:
* tabla interna y estructura xa la cabecera
ti_header TYPE slis_t_listheader,
wa_header TYPE slis_listheader.
Antes de declarar la subrutina q genera el catalogo de ALV en forma automática vamos a declarar la subrutina LLENAR_CABECERA asi:
* completamos la cabecera del ALV
PERFORM llenar_cabecera.
y dentro de la subrutina LLENAR_CABECERA vamos a llenar tambie la tabla interna TI_HEADER con el encabezado del reporte y la fecha del sist.
FORM llenar_cabecera.
DATA: vl_fecha(10) TYPE c.
CLEAR vl_fecha.
CONCATENATE sy-datum+6(2) sy-datum+4(2) sy-datum(4)
INTO vl_fecha SEPARATED BY '/'.
REFRESH ti_header.
CLEAR wa_header.
wa_header-typ = 'H'.
wa_header-info = 'Listado de usuarios'.
APPEND wa_header TO ti_header.
CLEAR wa_header.
wa_header-typ = 'S'.
wa_header-key = 'Tipo de Reporte'.
wa_header-info = 'ALV'.
APPEND wa_header TO ti_header.
CLEAR wa_header.
wa_header-typ = 'S'.
wa_header-key = 'Fecha:'.
wa_header-info = 'vl_fecha'.
APPEND wa_header TO ti_header.
ENDFORM.
Luego agregamos en la llamada el modulo de funciones de ALV. el parámetro exporting I_CALL_TOP_PAGE con literal TOP_OF_PAGE q sera el nombre de la subrutina q cargue el contenido del encabezado y el logo.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
......
......
i_callback_top_of_page = 'TOP_OF_PAGE'
.......
Ahora vamos a crear la subrutina TOP_OF_PAGE con la llamada al modulo de funciones 'RESUSE_ALV_COMENTARY_WRITE' el cual carga el encabezado q definimos en la tabla interna TI_HEADER, junto con el log 'ENJOYSAP_LOGO'.
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMENTARY_WRITE'
EXPORTING
it_list_commentary = ti_header
i_logo = 'ENJOYSAP_LOGO'.
ENDFORM.
=> TX SE78 xa la admon de los logos disponibles en el sist .
ejecutamos el prog y se ve asi:
Listado de Usuarios Tipo de reporte: ALV Fecha: 10/03/2022 |
LOGO EMPRESA |
TX OAER => subir logo a SAP.
En la pantalla de seleccion
nombre Clase : Picture
tipo de Clase : OT
clave de Objeto : 'LOGO_EMPRESA'
Ejecutamos la TX
en la sgnte pantalla => Documento estándar y luego el icono imagen. en la ventana de diálogo se carga la imagen
si deseamos agregar la imagen a la OT debemos acceder al menu "documentos transportar"
3- La utilización de un status GUI en un ALV.
xa poder utilizar un status gui en un reporte ALV, vamos agregar en la llamada del modulo de funciones de ALV el parámetro exporting I_BACK_PF_STATUS_SET con el literal 'PF_STATUS' q será el nombre de la subrutina q declara la utilización del status GUI y el parámetro exporting I_CALLBACK_USER_COMMAND con el literal 'USER_COMMAND' q será el nombre de la subrutina q se ejecuta xa capturar la acción realizada x el usuario.
i_callback_pf_status_set = 'PF_STATUS'
I_callback_user_command = 'USER_COMMAND'
Ahora definimos la subrutina PF_STATUS
FORM pf_status USING rt_extab TYPE slis_t_extab.
set PF-STATUS '0100'
ENDFORM.
vamos a crear un status GUI => clic derecho y seleccionamos = Crea
= STATUS GUI
completamos el nombre del status q es 0100 y un texto breve q es STATUS 0100 asi:
Programa: ZREPORTE_ALV_AUTOMATICO
Status : 0100
Texto Breve: Status 0100
(chulo) Status dialogo
Dentro de la barra de pulsadores vamos a crear el boton con la descripcion 'usuarios activos' y el código 'USU_ACTI'
En las teclas de funciones del status GUI 0100 agregamos los códigos de navegacion xa poder volver atras (BACK) volver a la pantalla ppal (EXIT) o salir del prog. (CANCEL)
Si hacemos doble clic en c/u de los códigos de los botones de navegacion entonces podemos configurarlos => tipo de función 'E' sino funcionará como esperamos
x ultimo agregamos la subrutina USER_COMMAND q capturará las acciones realizadas x el usuario.
FORM user_command USING r_ucomm TYPE syucomm
se_selfield TYPE slis_selfield
CASE r_ucomm.
WHEN 'USU_ACTI'
ENDCASE.
final/ si ejecutamos el reporte, veremos en el status GUI, el boton de usuarios y q ejecutamos se procesa el codigo existente en la subrutina USER_COMMAND.
Reporte de Usuarios
boton USUARIOS ACTIVOS
con boton atras (<<<)
volvemos a la pantalla ppal
* ALV GRILLA
* ALV LISTA
 
 
 
Sobre el autor
Publicación académica de Gustavo Betancur Guzmán, en su ámbito de estudios para la Carrera Consultor ABAP.
Gustavo Betancur Guzmán
Profesión: Ingeniero de Sistemas - Colombia - Legajo: WS86O
✒️Autor de: 164 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP MM Nivel Avanzado
- Carrera Consultor en SAP MM Nivel Inicial