✒️ABAP El ALV jerárquico y el agrupamiento
ABAP El ALV jerárquico y el agrupamiento
Agrupamiento en un ALV:
--------------------------------------------------------------------------------------------
Se pueden agrupar los registros que mostramos en un ALV.
--------------------------------------------------------------------------------------------
Para ello:
------------------------------------------------------------------------------------
Declaramos:
ti_sort TYPE slis_t_sortinfo_alv,
st_sort TYPE slis_sortinfo_alv.
------------------------------------------------------------------------------------
Cargamos 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.
------------------------------------------------------------------------------------
Agregamos el parámetro IT_SORT en la llamada del ALV 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.
------------------------------------------------------------------------------------
Por último ejecutamos.
--------------------------------------------------------------------------------------------
ALV Jerárquico:
--------------------------------------------------------------------------------------------
Se utilizan cuando debemos mostrar en un reporte datos de cabecera y de posición.
No es posible utilizar el evento TOP-OF-PAGE ni tampoco se puede realizar la exportación a Excel.
--------------------------------------------------------------------------------------------
Para crear:
------------------------------------------------------------------------------------
En las declaraciones de las tablas internas de cabecera y posiciones debe haber como mínimo un campo en común.
Por ejemplo:
Tabla interna de cabecera
DATA: BEGIN OF ti_cabecera OCCURS 0,
carrid LIKE scarr-carrid,
carrname LIKE scarr-carrname,
ENDOF 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,
ENDOF ti_detalle.
------------------------------------------------------------------------------------
Luego, se declara una estructura SLIS_KEYINFO_ALV que contendrá el campo clave que une a las dos tablas:
st_keyinfo TYPE slis_keyinfo_alv.
------------------------------------------------------------------------------------
Ahora cargamos datos en ambas tablas:
CABECERA 1
ti_cabecera-carrid = 'ARG'.
ti_cabecera-carrname = 'Aerolíneas 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.
CABECERA 2
ti_cabecera-carrid = 'LAN'.
ti_cabecera-carrname = 'Lan Chile'.
APPEND ti_cabecera.
DETALLE 1
ti_detalle-carrid = 'LAN'.
ti_detalle-connid = '1030'.
ti_detalle-fldate = '20091005'.
ti_detalle-price = '500'.
ti_detalle-currency = 'USD'.
ti_detalle-planetype = 'A330'.
APPEND ti_detalle.
DETALLE 2
ti_detalle-carrid = 'LAN'.
ti_detalle-connid = '1040'.
ti_detalle-fldate = '20091007'.
ti_detalle-price = '600'.
ti_detalle-currency = 'USD'.
ti_detalle-planetype = 'A330'.
APPEND ti_detalle.
------------------------------------------------------------------------------------
Continuamos creando el catálogo para ambas tablas, sumando los campos de ambas tablas internas en 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 = 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.
------------------------------------------------------------------------------------
Cargamos en la estructura ST_KEYINFO los campos vinculados:
CLEAR st_keyinfo.
St_keyinfo-header01 = 'CARRID'.
St_keyinfo-item01 = 'CARRID'.
------------------------------------------------------------------------------------
Y por último ejecutamos 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.
--------------------------------------------------------------------------------------------
 
 
 
Sobre el autor
Publicación académica de Martin Alejandro Goya, en su ámbito de estudios para la Carrera Consultor ABAP.
Martin Alejandro Goya
Profesión: Ingeniero en Computacion - Argentina - Legajo: CJ13E
✒️Autor de: 49 Publicaciones Académicas
🎓Egresado del módulo:
Certificación Académica de Martin Goya