✒️ABAP El ALV jerárquico y el agrupamiento
ABAP El ALV jerárquico y el agrupamiento
INFORMES ALV DE LISTA, GRID Y JERARQUICOS.
Hola Compañeros:
Os dejo aquí el código fuente para la generación de diversos tipos de ALV. Utiliza la vista del JOIN incluida en el apartado de vistas de bases de datos publicada previamente en mis apuntes. Incluye la captura del evento doble click sobre el grid o lista ALV. Espero que os resulte útil.
-
- *&---------------------------------------------------------------------*
- *& Report ZGZ57B_ALV_REPORT
- *&
- *&---------------------------------------------------------------------*
- *&
- *&
- *&---------------------------------------------------------------------*
- REPORT zgz57b_alv_report.
- *---------------------------------------------------------------------*
- * Tablas de la Base de Datos SAP
- *---------------------------------------------------------------------*
- TABLES:
- sscrfields, "Tabla Eventos Pantalla (Gracias Ezequiel)
- kna1, "Maestro Clientes
- t005t, "Nombre de los Paises
- vbak, "Cabeceras de Pedido
- vbap, "Lineas de Pedido
- zgz57borders. "Vista con el Join de las tablas
- *---------------------------------------------------------------------*
- * Requrimientos ALV
- *---------------------------------------------------------------------*
- TYPE-POOLS:
- slis.
- DATA:
- * Tabla interna y estructura del ALV
- ti_alv TYPE slis_t_fieldcat_alv,
- wa_alv TYPE slis_fieldcat_alv,
- * Estructura para la configuración de la salida
- wa_layout TYPE slis_layout_alv,
- * Tabla interna y estructura para excluir funcionalidades
- ti_alv_excl TYPE slis_t_extab,
- wa_alv_excl TYPE slis_extab,
- * Tabla interna y estructura para la cabecera
- ti_alv_header TYPE slis_t_listheader,
- wa_alv_header TYPE slis_listheader,
- * Tabla interna y estructura para ordenamiento
- ti_alv_sort TYPE slis_t_sortinfo_alv,
- wa_alv_sort TYPE slis_sortinfo_alv,
- * Campo Clave para ALV Jerarquicos
- wa_alv_keyinfo TYPE slis_keyinfo_alv,
- * Tabla interna y estructura del ALV Orientado Objetos
- ti_oalv TYPE lvc_t_fcat,
- wa_oalv TYPE lvc_s_fcat,
- * Estructura para la configuración de la salida OO
- wa_olayout TYPE lvc_s_layo,
- * Tabla interna y estructura para excluir funcionalidades
- * ti_alv_excl TYPE slis_t_extab,
- * wa_alv_excl TYPE slis_extab,
- * Tabla interna y estructura para la cabecera
- * ti_oalv_header TYPE slis_t_listheader,
- * wa_oalv_header TYPE slis_listheader,
- * Tabla interna y estructura para ordenamiento
- * ti_oalv_sort TYPE slis_t_sortinfo_alv,
- * wa_oalv_sort TYPE slis_sortinfo_alv,
- * Variable con el nombre del programa
- v_repid LIKE sy-repid.
- DATA:
- g_oalv_grid TYPE REF TO cl_gui_alv_grid,
- g_disp_cont TYPE REF TO cl_gui_custom_container.
- DATA:
- g_user_fn(30) TYPE c.
- *--------------- Fin Requerimientos ALV ------------------------------*
- *---------------------------------------------------------------------*
- * Tipos para las Tablas de los Informes
- *---------------------------------------------------------------------*
- TYPES:
- ty_detalle LIKE zgz57borders.
- TYPES:
- BEGIN OF ty_clientes,
- land1 LIKE kna1-land1, "Codigo Pais
- landx LIKE t005t-landx, "Nombre Pais
- ort01 LIKE kna1-ort01 , "Ciudad
- kunnr LIKE kna1-kunnr , "Codigo Cliente
- name1 LIKE kna1-name1 , "Nombre Cliente
- END OF ty_clientes.
- TYPES:
- BEGIN OF ty_facturas,
- land1 LIKE kna1-land1, "Codigo Pais
- landx LIKE t005t-landx, "Nombre Pais
- kunnr LIKE kna1-kunnr , "Codigo Cliente
- name1 LIKE kna1-name1 , "Nombre Cliente
- vbeln LIKE vbak-vbeln, "Num.Pedido
- audat LIKE vbak-audat, "Fecha Pedido
- netwr LIKE vbak-netwr, "Valor Pedido
- END OF ty_facturas.
- *---------------------------------------------------------------------*
- * Tablas Internas y Registros (Workareas)
- *---------------------------------------------------------------------*
- DATA:
- ti_detalle TYPE STANDARD TABLE OF ty_detalle,
- wa_detalle TYPE ty_detalle,
- wa_detalle_aux LIKE wa_detalle, " Auxiliar para corte Detalle
- ti_header TYPE STANDARD TABLE OF ty_facturas,
- wa_header TYPE ty_facturas,
- so_ty_city(30) TYPE c,
- gv_t_ini TYPE i,
- gv_t_fin TYPE i,
- gv_records TYPE i,
- gv_mess(60) TYPE c,
- gv_time(10) TYPE c,
- gv_items(10) TYPE c,
- v_selected LIKE sy-tabix.
- *---------------------------------------------------------------------*
- * Pantalla de selección
- *---------------------------------------------------------------------*
- SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.
- SELECT-OPTIONS so_pais FOR zgz57borders-land1. "Seleccion Pais
- SELECT-OPTIONS so_cli FOR zgz57borders-kunnr. "Seleccion Cod.Cliente
- SELECT-OPTIONS so_fecha FOR sy-datum. "Seleccion Fecha Pedido
- SELECT-OPTIONS so_city FOR (so_ty_city)
- DEFAULT 'A' TO 'ZZ'. "Seleccion Ciudad
- SELECTION-SCREEN END OF BLOCK b1.
- SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.
- SELECTION-SCREEN BEGIN OF LINE.
- PARAMETERS:
- p_list RADIOBUTTON GROUP grp1. "Tipo Grip
- SELECTION-SCREEN COMMENT 3(20) text-004.
- PARAMETERS:
- p_grid RADIOBUTTON GROUP grp1. "Tipo Lista
- SELECTION-SCREEN COMMENT 26(20) text-005.
- PARAMETERS:
- p_hier RADIOBUTTON GROUP grp1. "Tipo Jerarquico
- SELECTION-SCREEN COMMENT 49(20) text-006.
- *PARAMETERS:
- * p_oogrid RADIOBUTTON GROUP grp1. "Tipo Lista OOP
- *SELECTION-SCREEN COMMENT 72(25) text-008.
- SELECTION-SCREEN END OF LINE.
- SELECTION-SCREEN END OF BLOCK b2.
- SELECTION-SCREEN BEGIN OF BLOCK b3 WITH FRAME TITLE text-003.
- *PARAMETERS:
- * p_tpais AS CHECKBOX USER-COMMAND ocpais, "Total Pais
- * p_tcity AS CHECKBOX USER-COMMAND occity, "Total Ciudad
- * p_tcli AS CHECKBOX USER-COMMAND occlie, "Total Cliente
- * p_tfra AS CHECKBOX USER-COMMAND ocpedi. "Total Pedido
- SELECTION-SCREEN BEGIN OF LINE.
- PARAMETERS:
- p_tpais AS CHECKBOX USER-COMMAND ocpais. "Total Pais
- SELECTION-SCREEN COMMENT 3(20) text-009.
- PARAMETERS:
- p_tcity AS CHECKBOX USER-COMMAND occity. "Total Ciudad
- SELECTION-SCREEN COMMENT 26(20) text-010.
- PARAMETERS:
- p_tcli AS CHECKBOX USER-COMMAND occlie. "Total Cliente
- SELECTION-SCREEN COMMENT 49(20) text-011.
- PARAMETERS:
- p_tfra AS CHECKBOX USER-COMMAND ocpedi. "Total Pedido
- SELECTION-SCREEN COMMENT 72(25) text-012.
- SELECTION-SCREEN END OF LINE.
- SELECTION-SCREEN BEGIN OF LINE.
- SELECTION-SCREEN COMMENT 3(1) text-999.
- PARAMETERS:
- p_spais AS CHECKBOX USER-COMMAND ocpais. "Total Pais
- SELECTION-SCREEN COMMENT 7(20) text-013.
- PARAMETERS:
- p_scity AS CHECKBOX USER-COMMAND occity. "Total Ciudad
- SELECTION-SCREEN COMMENT 30(20) text-014.
- PARAMETERS:
- p_scli AS CHECKBOX USER-COMMAND occlie. "Total Cliente
- SELECTION-SCREEN COMMENT 53(20) text-015.
- PARAMETERS:
- p_sfra AS CHECKBOX USER-COMMAND ocpedi. "Total Pedido
- SELECTION-SCREEN COMMENT 76(25) text-016.
- SELECTION-SCREEN END OF LINE.
- SELECTION-SCREEN END OF BLOCK b3.
- *-------------------------------------------------*
- AT SELECTION-SCREEN OUTPUT.
- *-------------------------------------------------*
- PERFORM enable_disable_opts.
- *-------------------------------------------------*
- AT SELECTION-SCREEN.
- *-------------------------------------------------*
- IF sscrfields-ucomm = 'OCPAIS'.
- IF p_tpais IS INITIAL.
- p_tcity = ' '.
- p_tcli = ' '.
- p_tfra = ' '.
- ENDIF.
- ENDIF.
- MODIFY SCREEN.
- IF sscrfields-ucomm = 'OCCITY'.
- IF p_tcity IS INITIAL.
- p_tcity = ' '.
- p_tcli = ' '.
- p_tfra = ' '.
- ELSE.
- p_tpais = 'X'.
- ENDIF.
- ENDIF.
- MODIFY SCREEN.
- IF sscrfields-ucomm = 'OCCLIE'.
- IF p_tcli IS INITIAL.
- p_tfra = ' '.
- ELSE.
- p_tcity = 'X'.
- p_tpais = 'X'.
- ENDIF.
- ENDIF.
- MODIFY SCREEN.
- IF sscrfields-ucomm = 'OCPEDI'.
- IF p_tfra IS NOT INITIAL.
- p_tcli = 'X'.
- p_tcity = 'X'.
- p_tpais = 'X'.
- ENDIF.
- ENDIF.
- MODIFY SCREEN.
- *-------------------------------------------------*
- INITIALIZATION.
- *-------------------------------------------------*
- CLEAR:
- gv_t_ini,
- gv_t_fin,
- gv_t_ini,
- gv_t_fin,
- gv_records,
- gv_mess,
- gv_time,
- g_user_fn.
- *-------------------------------------------------*
- START-OF-SELECTION.
- *-------------------------------------------------*
- IF p_list IS NOT INITIAL
- OR p_grid IS NOT INITIAL.
- g_user_fn = 'USER_EVENT'.
- PERFORM build_sort_group TABLES ti_alv_sort
- USING p_tpais
- p_tcity
- p_tcli
- p_tfra
- p_spais
- p_scity
- p_scli
- p_sfra.
- PERFORM run_sqlselect.
- PERFORM build_alv_normal TABLES ti_alv USING p_list.
- CLEAR wa_layout.
- wa_layout-window_titlebar = 'Historico de Pedidos'.
- wa_layout-zebra = 'X'.
- IF p_list IS NOT INITIAL.
- PERFORM run_alv_list TABLES ti_alv ti_detalle ti_alv_sort ti_alv_excl
- USING wa_layout g_user_fn '' ''.
- ENDIF.
- IF p_grid IS NOT INITIAL.
- PERFORM run_alv_grid TABLES ti_alv ti_detalle ti_alv_sort ti_alv_excl
- USING wa_layout g_user_fn '' ''.
- ENDIF.
- ENDIF.
- IF p_hier IS NOT INITIAL.
- PERFORM run_sql_hier.
- PERFORM build_alv_hier TABLES ti_alv.
- CLEAR wa_alv_keyinfo.
- wa_alv_keyinfo-header01 = 'VBELN'.
- wa_alv_keyinfo-item01 = 'VBELN'.
- CLEAR wa_layout.
- wa_layout-zebra = 'x'. " Rayado de líneas
- wa_layout-window_titlebar = 'Reporte Vuelos'.
- PERFORM run_alv_hier TABLES ti_alv ti_header ti_detalle
- USING 'TI_HEADER' 'TI_DETALLE'.
- ENDIF.
- *-------------------------------------------------*
- END-OF-SELECTION.
- *-------------------------------------------------*
- *-------------------------------------------------*
- TOP-OF-PAGE.
- *-------------------------------------------------*
- *-------------------------------------------------*
- END-OF-PAGE.
- *-------------------------------------------------*
- *&---------------------------------------------------------------------*
- *& Form USER_EVENT
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM user_event USING p_uevent LIKE sy-ucomm
- p_field TYPE slis_selfield.
- DATA:
- lv_tabla(30) TYPE c,
- lv_col LIKE sy-tabix,
- lv_campo(30) TYPE c,
- lv_valor(60) TYPE c.
- CASE p_uevent.
- WHEN '&IC1'. " &IC1 Doble Clic
- lv_tabla = p_field-tabname.
- lv_col = p_field-tabindex.
- lv_campo = p_field-fieldname.
- lv_valor = p_field-value.
- ENDCASE.
- p_field-refresh = 'X'.
- ENDFORM. "USER_EVENT
- *&---------------------------------------------------------------------*
- *& Form ENABLE_DISABLE_OPTS
- *&---------------------------------------------------------------------*
- * text
- *----------------------------------------------------------------------*
- * --> p1 text
- * <-- p2 text
- *----------------------------------------------------------------------*
- FORM enable_disable_opts.
- DATA:
- lv_next TYPE i,
- lv_set TYPE c,
- lv_unset TYPE c,
- lv_level_enable(5) TYPE c.
- CLEAR:
- lv_set,
- lv_unset,
- lv_level_enable.
- lv_next = 0.
- lv_level_enable = '#0000'.
- IF p_tpais IS NOT INITIAL.
- lv_level_enable+1(1) = '1'.
- ELSE.
- lv_level_enable(1) = '0
 
 
 
Sobre el autor
Publicación académica de Carlos Piles Rosell, en su ámbito de estudios para la Carrera Consultor ABAP.
Carlos Piles Rosell
Profesión: Analista de Sistemas y Programador - España - Legajo: GZ57B
✒️Autor de: 24 Publicaciones Académicas
🎓Egresado de los módulos:
Disponibilidad Laboral: PartTime
Certificación Académica de Carlos Piles