✒️ABAP El ALV jerárquico y el agrupamiento
ABAP El ALV jerárquico y el agrupamiento
Resumen
Unidad 5 lección 8
El ALV jerárquico y el agrupamiento
1- El agrupamiento en un ALV
Podemos agrupar los registros q mostramos en el ALV de modo q varios registros q presentan el mismo valor xa un campo en particular, se muestren de forma agrupada por ese campo.
declarar la tabla interna TI_SORT de tipo SLIS_T_SORTINFO_ALV y la estructura WA_SORT de tipo SLIS_SORTINFO_ALV.
*tabla interna y estructura xa ordenamiento
ti_sort TYPE slis_t_sortinfo_avl,
wa_sort TYPE slis_sortinfo_alv.
Luego dentro del evento START-OF-SELECTION y antes de llamar al modulo de funciones q ejecuta el ALV vamos a declarar la subrutina AGRUPAR_CAMPOS asi.
FORM agrupar_campos.
REFRESH ti_sort.
CLEAR wa_sort.
wa_sort-spos = 1. "orden de agrupamiento
wa_sort-fieldname = 'ESTADO_USU'.
APPEND wa_sort TO ti_sort.
ENDFORM.
podemos agrupar un reporte ALV x todos los campos de la tabla si se quiere. solo basta con agregarlos campos x los q deseamos agrupar en la tabla int TI_SORT.
Ahora en la declaracion del modulo de funciones 'REUSE_ALV_GRID_DISPLAY' debemos completar el parámetro EXPORTING IT_SORT con nuestra tabla interna TI_SORT.
en el prog.
it_sort = ti_sort.
y ahora hacemos lo mismo en la declaracion de modulo de funciones 'REUSE_ALV_LIST_DISPLAY' xa el reporte ALV LIST.
it_sort = ti_sort.
se puede ver q al ejecutar el reporte ALV GRILLA vamos agrupación x ESTADO_USU e igual va la misma sentencia xa la función ALV lista.
Como conclusión: El agrupamiento de reporte ALV esta disponible xa el ALV GRID y NO xa el ALV LIST.
2- El ALV jerárquico
Los ALV jerárquico se utilian con cabecera y detalle o posición y debe haber un campo en COMÚN.
paso a paso => crear ALV jerárquicon Ej info => Cia aérea y la info de vuelos de c/Cia
Declarar tabla interna TI_CABECERA la cual tiene
= denominación breve de la Cia aérea (CARRID)
= nombre de la Cia aérea (CARRNAME)
y la otra tabla interna TI_DETALLE la cual tiene como primer campo
= denominación breve de la Cia aérea (CARRID)
= campos relativos al vuelo
Campo COMUN = CARRID
*tabla interna cabecera
DATA: BEGIN OF ti_cabecera OCCURS 0,
carrid LIKE scarr-carrid,
carrname LIKE scarr-carrname,
END OF ti_cabecera.
* tabla interna detalle
DATA: BEGIN OF ti_detalle OCCURS 0,
carrid LIKE sflight-carrid,
connid LIKE sflight-connid,
fldate LIKE sflight-price,
price LIKE sflight-price,
currency LIKE sflight-currency,
planetype LIKE sflight-planetype,
END OF ti_detalle.
dado q vamos a generar catalogo del ALV jerárquico en forma automática entonces la declaración de ambas tablas internas la realizamos utilizando la sentencia OCCURS.
Luego debemos declarar un estructura de tipo SLIS_KEYINFO_ALV.
Ahora vamos a cargar la tabla interna de cabecera y detalle evento en START-OF-SELECTION declaramos subrutina CARGAR_DATOS.
PERFORM cargar_datos.
y dentro de la subrutina de CARGAR_DATOS completamos la tabla interna TI_CABECERA y TI_DETALLE con juego de datos xa la Cia aérea ARG.
FORM cargar_datos.
REFRESH ti_cabecera, ti_detalle.
* CABECERA 1
CLEAR ti_cabecera.
ti_cabecera-carrid = 'ARG'.
ti_cabecera-carrname = 'Aerolinea Argentina'.
APPEND ti_cabecera.
* DETALLE 1
CLEAR ti_detalle.
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.
*cabecera 2
CLEAR ti_cabecera.
ti_cabecera-carrid = 'LAN'.
ti_cabecera-carrname = 'Lan Chile'.
APPEND ti_cabecera.
* DETALLE 1
CLEAR ti_detalle.
ti_detalle-carrid = 'LAN'.
ti_detalle-connid = '1030',
ti_detalle-fldate = '20220603'.
ti_detalle-price = '500'.
ti_detalle-currency = 'USD'.
ti_detalle-planetype = 'A330'.
APPEND ti_detalle.
En lugar de cargar manual/ los registros de ambas tablas internas, podríamos realizar un SELECT a tablas DB correspondientes xa obtener la info.
En el evento START-OF-SELECTION declaramos subrutina CONFIGURAR_LAYOUT.
*configurar layout
PERFORM configurar_layout.
* subrutina configurar_layout.
FORM configurar_layout.
CLEAR wa_layout.
wa_layout-zebra = c_x. "rayado de lineas
wa_layout-windows_titlebar = text-001. " Reporte de vuelos
ENDFORM.
Luego creamos el catalogo de ALV xa ambas tablas => subrutinas ARMADO_CATALOGO_AUTOMATICO
PERFORM armado_catalogo_automatico
Dentro de esta subrutina ejecutamos el modulo de funciones REUSE_ALV_FIELDCATALOG_MERGE xa generar el catalogo en forma automática sumando los campos de ambas tablas internas en la tab int TI_CATALOGO.
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_interface = 1
program_error = 2
OTHERS = 3
IF sy_subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno.
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
ENDIF.
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_interface = 1
program_error = 2
OTHERS = 3
IF sy_subrc NE 0 .
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno.
sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4
ENDIF.
===>> En un ALV jerárquico NO es posible utilizar el evento TOP-OF-PAGE x lo q no es posible generar una cabecera con títulos y logos como se ha hecho en los ALV de tipo GRID o GRILLA.
otra limitación q presenta los ALV jerárquicos es q no se puede utilizar el botón de exportación de datos a excel debido al formato de la cabecera y formato del detalle de c/registro.
 
 
 
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