✒️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
Creación de Catálogo de forma Automática
Existen 2 formas de crear un catálogo, manual como vimos anteriormente, completando todos los campos, o automática con la función REUSE_ALV_FIELDCATALOG_MERGE
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.
Para hacer esto hay que modificar 2 puntos del programa.
1 - la forma en como se declara la tabla interna ALV, debemos crear el catálogo usando LIKE haciendo referencia a campos de una tabla ya existente
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.
DATA: st_usuarios LIKE LINE OF ti_usuarios.
2 - lo otro es restringuir el ancho de línea a 72.
En Utilidades, Opciones, Editor ABAP, Editor, tildar el check Long. líneas compatib.descend(72)
Utilización de Logos y Encabezados.
En los ALV grillas podemos agregar logos y encabezados, para ello declarar 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.
Luego llenamos la tabla con el encabezado del reporte, le agregamos el tipo reporte y fecha sistema. Lo hacemos completando la estructura st_header y agregandola a ti_header
Luego se agrega en la llamada a la función ALV el parámetro I_CALL_TOP_PAGE con el literal 'TOP_OF_PAGE' que será lo que cargue el contenido del encabezado y logo
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.
Luego se crea la subrutina TOP_OF_PAGE con la llamada a la función REUSE_ALV_COMMENTARY_VALUE que carga el encabezado definido y el logo
FORM top_of_page.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = ti_header
i_logo = 'ENJOYSAP_LOGO'.
Para ver los logos disponibles usamos la SE78 , también la OAER, allí completamos Nombre Clase =Pictures, Tipo Clase = OT, Clave objeto = <nombre del logo>
Se ejecuta y en la sig. pantalla se selecciona doc. estandar y luego imagen, allí seleccionamos el archivo a subir
Utilización de Status GUI
Para poder usar un Status GUI en un ALV, se debe agregar a la llamada a la función, el parámetro I_CALLED_BACK_PF_STATUS_SET con 'PF_STATUS' que será la subrutina que declara la utilización del Status GUI
Y el parámetro I_CALLBACK_USER_COMMAND con 'USER_COMMAND' que será la subrutina para capturar la acción del usuario
Luego se define la subrutina PF_STATUS
Hay que crear en el Status GUI un botón cuya descripción será "Usuarios Activos" y el código USU_ACTI
También se definen los códigos para poder navegar atrás, volver a la pantalla principal o salir del programa.
Al crear estos botones se le debe colocar Tipo de Función = E
Y luego la subrutina con las acciones de los botones
Para agregar a mi status gui las teclas de función de la barra de herramientas:
1-En el status vas a las teclas de función y asignas a cada uno de estos botones un código de función:
A la flecha verde que se utiliza para volver para atrás le asignas "BACK".
A la flecha amarillo que se utiliza para exit para atrás le asignas "EXIT".
A la flecha roja que se utiliza para cancelar para atrás le asignas "CANCEL".
Luego tenes varias posibilidades de hacerlo, te explico una de ellas:
Asignas a estos tres botones en el campo Tipo de Función "blanco" que corresponde a "Función de aplicación".
Luego dentro del PAI de la dynpro del status, particularmente en el USER_COMMAND de la dynpro:
PROCESS AFTER INPUT.
MODULE user_command_0100.
Vamos a hacer lo siguiente:
MODULE user_command_0100 INPUT.
CASE sy-ucomm.
WHEN 'BACK' OR 'CANCELAR' OR 'EXIT'.
LEAVE TO SCREEN 0.
WHEN 'ACEPTAR'.
WHEN OTHERS.
ENDCASE.
ENDMODULE. " USER_COMMAND_0100 INPUT
En el ejemplo mostrado para los tres botones se hace lo mismo pero se podria hacer algo diferente por cada funcionalidad.
 
 
 
Sobre el autor
Publicación académica de Daniel Martinez Chaer, en su ámbito de estudios para la Carrera Consultor ABAP.
Daniel Martinez Chaer
Profesión: Analista Programador - Uruguay - Legajo: SK29Z
✒️Autor de: 76 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: FullTime
Presentación:
Con experiencia en sap fi y mm, migración desde sistema legacy, extracción de datos de la base oracle sap y generación de reportes.
Certificación Académica de Daniel Martinez