✒️ABAP El ALV jerárquico y el agrupamiento
ABAP El ALV jerárquico y el agrupamiento
1) AGRUPAMIENTO EN UN ALV
Se puede agrupar los registros de un Reporte en un ALV. Para esto, declaramos 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, se cargará la Tabla TI_SORT con los registros en el orden en el que deseamos agrupar.
* Se carga la tabla interna del agrupamiento
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 se completa 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
TABLES
t_outtab = ti_usuarios .
2. ALV JERÁRQUICO
se usan para mostrar datos de cabecera y de posición. . en las declaraciones de las tablas internas de cabecera y posiciones, debe haber como mínimo un campo en común.
En el caso que se muestra acontinuación , el campo común es CARRID (Cia Aerea) .
* 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-connid,
fldate LIKE sflight-fldate,
price LIKE sflight-price,
currency LIKE sflight-currency,
planetype LIKE sflight-planetype,
END OF ti_detalle.
Debemos declarar una estructura del tipos SLIS_KEYINFO_ALV, que será ST_KEYINFO y contendrá el campo clave que une a las dos tablas internas declaradas anteriormente.
* Campo Clave
st_keyinfo TYPE Slis_keyinfo_alv . " estrucutura que almacena el campo clave de unión
Ahora se cargarán las Tablas internas de cabecera y detalle con un juego de datos para la Cia aérea ARG .
* CABECERA 1
ti_cabecera-carrid = 'ARG' .
ti_cabecera-carrname = 'Aerolineas Argentinas' .
APPEND ti-cabecera .
* DETALLE 1
ti_detalle-carrid = 'ARG' .
ti_detalle-connid = '1010' .
ti_detalle-fldate = '20091111' .
ti_detalle-price = '380' .
ti_detalle-currency = 'USD' .
ti_detalle-planetype = 'A310' .
APPEND ti_detalle.
* DETALLE 2
ti_detalle-carrid = 'ARG' .
ti_detalle-connid = '1020' .
ti_detalle-fldate = '20091011' .
ti_detalle-price = '300' .
ti_detalle-currency = 'USD' .
ti_detalle-planetype = 'A330' .
APPEND ti_detalle.
A continuación se crea el catálogo del ALV para ambas tablas internas, sumando los campos de ambas tablas en la tabla del catálogo TI_CATALOGO.
Se completa el catálogo en forma automática para ambas tablas internas.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'TI_CABECERA'
i_client_never_display = 'X'
i_inclname = sy-repid
CHANGING
ct_fieldcat = ti_catalogo()
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
i_program_name = sy-repid
i_internal_tabname = 'TI_DETALLE'
i_client_never_display = 'X'
i_inclname = sy-repid
CHANGING
ct_fieldcat = ti_catalogo()
EXCEPTIONS
inconsistent_interface = 1
program_error = 2
OTHERS = 3.
Ahora se 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 último , se ejcuta la Función REUSE_ALV-HIERSEQ_LIST_DISPLAY.
CALL FUNCTION 'REUSE_ALV_HIERSEQ_LIST-DISPLAY'
EXPORTING
i_callback_program = 'sy-repid
i-callback_pf_status_set = 'PF_STATUS'
it_fieldcat = 'ti_catalogo()
i_tabname_header = 'TI_CABECERA'
i_tabname-item = 'TI_DETALLE'
is_keyinfo = st_keyinfo
TABLES
t_outtab_header = ti-cabecera
t_outtab_item = ti_detalle
EXCEPTIONS
program_error = 1
OTHERS = 2.
AUDIO:
En un ALV Jerárquico no podemos utilizar el evento TOP_OF_PAGE por lo que no será posible generar una cabecera con títulos y logos como en los ALV Grilla. Otra limitante que tienen los ALV Jerárquicos es que no podemos utilizar el botón de exportación de datos a Excel debido a las diferencias que existen entre el formato de cabecera y el formato de cada registro.
 
 
 
Sobre el autor
Publicación académica de Carlos Alberto Carreira, en su ámbito de estudios para la Carrera Consultor ABAP.
Carlos Alberto Carreira
Profesión: Consultor Técnico en Jde W.s. - Argentina - Legajo: KC15G
✒️Autor de: 92 Publicaciones Académicas
🎓Cursando Actualmente: Consultor ABAP Nivel Inicial
🎓Egresado de los módulos:
Certificación Académica de Carlos Carreira