✒️ABAP El ALV jerárquico y el agrupamiento
ABAP El ALV jerárquico y el agrupamiento
CATALOGO ALV AUTOMATICO, LOGOS, ENCABEZADOS Y STATUS.
Creación del catálogo en forma automática:
Para crear el catálogo en forma automática se hace con la función REUSE_ALV_FIELDCATALOG_MERGE.
Como ejemplo el código para la creación automática sería el siguiente:
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.
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. Así.
*Declarar así 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,
dirección LIKE ztabla_usuarios-dirección,
codigo_postal 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 retrinja la cantidad de caracteres de ancho de la pantalla a 72. Para hacer esto vamos al menu 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. Así.
DATA: v_fecha(10) TYPE c.
CONCATENATE sy-datum 6(2) sy-datum 4(2)
sy_datum(4) INTO v_fecha SEPARATED BY '/'. "Esto se hace para mostrar la fecha separada "por /
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_CALL_TOP_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
Transacción SE78: Sirve para ver los logos disponibles en el sistema o cargar nuevos.
Otra forma para subir logos es a través de la transacción OAER.
1.En nombre clase, introducimos pictures.
2.tipo de clase: OT
3.Clave del objeto, nombre que se le quiere dar al logo en mayusculas.
se ejecuta la transacción
4.Luego seleccionamos documento estandar, a través de este podemos seleccionar y subir el archivo de nuestra pc al servidor, para usarlo en un encabezado de un alv.
5.Si deseamos agregar la imagen a una orden de transporte vamos a la opción documentos, transportar.
3.Utilización de Status GUIs
Para poder utilizar un Status GUI en un reporte ALV, se agrega en la llamada a la función del ALV el parámetro exporting 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 exportig 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 (Functio 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 syucom
rs_selfield TYPE slis_selfield.
CASE r_ucomm.
WHEN 'USU_ACTI'.
ENDCASE.
ENDFORM. "user command
Agrupamiento en un ALV
Podemos agrupar los registros que mostramos en un ALV.
Debemos declarar una tabla del tipo SLIS_T_SORTINFO_ALV y una estructura del tipo SLIS_SORTINFO_ALV.
*Tabla y estructura para ordenamiento
ti_sort TYPE slis_t_sortinfo_alv,
st_sort TYPE slis_sortinfo_alv,
Luego antes de llamar a la función del ALV, vamos a cargar la tabla TI_SORT con los registros en el orden en el que deseamos agrupar.
CLEAR st_sort.
st_sort_spos = 1. "Orden del agrupamiento
st_sort-fieldname = 'ESTADO_CIVIL'. "Nombre del campo que agrupa
APPEND st_sort TO ti_sort.
Ahora debemos completar el parámetro exporting IT_SORT con nuestra tabla interna TI_SORT
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
it_sort = ti_sort
TABLAS
t_outtab = ti_usuarios.
ALV JERÁRQUICO.
Estos se utilizan cuando tenemos que mostrar en un reporte, datos de cabecera y de posición.
En las declaraciones de las tablas internas de cabecera y posiciones, debe hacer como mínimo un campo en común.
Para el siguiente caso el campo en común es CARRID.
*Tabla interna de la cabecera
DATA: BEGIN OF ti_cabecera OCCURS 0,
carrid LIKE scarr-carrid,
carrname LIKE scarr-carrname,
END OF ti_cabecera.
*Tabla interna de posiciones
DATA: BEGIN OF ti_detalle OCCURS 0,
carrid LIKE sflight-carrid,
connid LIKE sflight-carrid,
fldate LIKE sflight-fldate,
price LIKE sflight-price,
currency LIKE sflight-currency,
planetypr LIKE sflight-planetype,
END OF ti_detalle.
Debemos declarar una estructura del tipo SLIS_KEYINFO_ALV, que será ST_KEYINFO y contendrá el campo clave que une a las dos tablas internas.
*Campo Clave
st_keyinfo TYPE slis_keyinfo_alv.
Ahora vamos a cargar las tablas internas de cabecera y detalle con un juego de datos para la compañía aérea ARG.
*CABECERA 1
ti_cabecera-carrid = 'ARG'
APPEND ti_cabecera.
*Detalle 1
ti_detalle-carrid = 'ARG'.
ti_detalle-connid = '1010'.
APPEND ti_detalle.
*Detalle 2
ti_detalle-carrid = 'ARG'.
ti_detalle-connid = '1020'.
APPEND ti_detalle.
Luego crearemos el catálogo del ALV para ambas tablas internas, sumando los campos de ambas tablas en la tabla del catálogo TI_CATALOGO.
Ahora tenemos que completar la estructura ST_KEYINFO. En los campos HEADER01 y ITEM01 va a ir el campo de la tabla de cabecera que hace de vínculo con la tabla de detalles.
CLEAR st_keyinfo.
st_keyinfo-header01 = 'CARRID'.
st_keyinfo-item01 = 'CARRID'.
Por ultimo se ejecuta la función REUSE_ALV_HIERSEQ_LIST_DISPLAY.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST_DISPLAY'
 
 
 
Sobre el autor
Publicación académica de Franco Alfieri Maringota Alvarado, en su ámbito de estudios para la Carrera Consultor ABAP.
Franco Alfieri Maringota Alvarado
Peru - Legajo: GF44M
✒️Autor de: 288 Publicaciones Académicas
🎓Egresado de los módulos:
- Carrera Consultor en SAP FI Nivel Inicial
- Carrera Consultor en SAP BI / BW BO Nivel Avanzado
- Carrera Consultor ABAP Nivel Avanzado
- Carrera Consultor ABAP Nivel Inicial
- Carrera Consultor en SAP BI / BW BO Nivel Inicial