✒️ABAP El ALV jerárquico y el agrupamiento
ABAP El ALV jerárquico y el agrupamiento
Agrupamiento en un ALV
Para agrupar un ALV, deberemos declarar una tabla tipo SLIS_T_SORTINFO_ALV y una estructura SLIS_SORTINFO_ALV
* Tabla y estructura para ordenamiento
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 queremos 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.
Deberemos completar el parametro exporting IT_SORT con la 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.
Tendremos como resultado el ALV agrupado por el Estado Civil
ALV jerarquico
Se utiliza cuando tenemos que mostrar un reporte en cabecera y detalle, Tener en cuenta que debe de existir por lo minimo un campo en comun
entre la cabecera y el detalle.
* 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.
Declararemos una estructura de tipo SLIS_KEYINFO_ALV este contendra el campo clave que une la cabecera y detalle
* Campo Clave
st_keyinfo TYPE slis_keyinfo_alv.
Cargamos un juego de datos de las tablas cabecera y detalle
CLEAR: ti_cabecera, ti_detalle.
REFRESH: ti_cabecera, ti_detalle.
* 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.
* 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.
Luego crearemos el catalogo , sumando los campos de ambas tablas en la tabla del catalogo 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.
Completamos la estructura ST_KEYINFO , los campos HEADER01 y ITEM01 va los campos que hacen vinculo entre cabecera y detalle
CLEAR st_keyinfo.
st_keyinfo-header01 = 'CARRID'.
st_keyinfo-item01 = 'CARRID'.
Por ultimo ejecutamos 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.
IF sy-subrc NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
**no es posible usar el evento TOP-OF-PAGE es decir no se puede utilizar titulo , cabecera y logo . Otro es que no se puede utilizar el boton de exportar excel
 
 
 
Sobre el autor
Publicación académica de Fabian Samir Geldres Del Carpio, en su ámbito de estudios para la Carrera Consultor ABAP.
Fabian Samir Geldres Del Carpio
Profesión: Computación E Informatica - Peru - Legajo: XT66M
✒️Autor de: 51 Publicaciones Académicas
🎓Cursando Actualmente: Consultor Funcional Módulo PP
🎓Egresado del módulo:
Certificación Académica de Fabian Geldres