🚀PROMO #PLANCARRERA2024 - 🔥Bonificaciones, Precios Congelados y Cuotas

 X 

✒️ABAP El ALV jerárquico y el agrupamiento

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.

SAP Senior

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

✒️+Comunidad Académica CVOSOFT

Continúe aprendiendo sobre el tema "El ALV jerárquico y el agrupamiento" de la mano de nuestros alumnos.

SAP Senior

ALV Jerárquico y Agrupamiento. SLIS_T_SORTINFO_ALV: Tabla estándar de SAP que se utiliza para crear tablas internas para agrupamiento de reportes ALV. SLIS_SORTINFO_ALV: Estructura estándar de SAP que se utiliza para crear estructuras para agrupamiento de reportes ALV. IT_SORT: Parámetro exporting de la funciones standars que se utilizan para la creación de reportes ALV, que permite el agrupamiento de los campos de la tabla de salida del reporte. ALV Jerárquico. SLIS_KEYINFO_ALV:Estructura estándar de SAP que se utiliza para los reporteros ALV jerárquicos. REUSE_ALV_HIERSEQ_LIST_DISPLAY: Función estándar de SAP que se utiliza para la creación de reportes...

Acceder a esta publicación

Creado y Compartido por: Rafael Razo

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP SemiSenior

Resumen Lección: ALV Jerárquico y Agrupamiento Agrupamiento de un ALV Podemos agrupar los registros que mostramos en un ALV. Para ello, declaramos una tabla del tipo SLIS_T_SORTINFO_ALV y una estructura del tipo SLIS_SORTINFO_ALV. ALV Jerárquico Como dijimos anteriormente, los ALV Jerárquicos se utilizan cuando tenemos que mostrar en un reporte, 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.

Acceder a esta publicación

Creado y Compartido por: Alexander José Tovar Rodríguez

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Lección: ALV jerárquico y agrupamiento 1. AGRUPAMIENTO EN UN ALV Los registros que se agrupan en un ALV es cuando se declara una tabla del tipo slis_t_sortinfo_alv y una estructura slis_sortinfo_alv Posteriormente se carga la tabla ti_sort con los registros en el orden en el que se desea agrupar 2. ALV JERÁRQUICO Los ALV jerárquicos son usados cuando se tiene que mostrar en un reporte, datos de cabecera y de posición. En las declaraciones de las tablas internas de cabecera y posición debe haber al menos un campo en común. TIPS: En un reporte ALV de tipo jerárquico no podrá utilizarse el evento top of page, por lo cual no se podrá generar una cabecera con títulos y...

Acceder a esta publicación

Creado y Compartido por: Javier Mirabal

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Master

ALV JERÁRQUICO Y AGRUPAMIENTO. SLIS_T_SORTINFO_ALV: Tabla estándar de SAP que se utiliza para crear tablas internas para el agrupamiento de reportes ALV. IT_SORT: Parámetro exporting de la función estándar que se utiliza para la creación de reportes ALV, que permiten el agrupamiento de los campos de la tabla de salida del reporte. SLIS_KEYINFO_ALV; Estructura estándar de SAP que se utiliza para los reportes ALV jerárquicos. En los reportes de este tipo no es posible generar cabeceras con títulos y títulos, tampoco es posible utilizar el botón de exportación a excel debido a la diferencia de formatos entre los datos de cabecera y el detalle.

Acceder a esta publicación

Creado y Compartido por: Juan Santamaria Borja

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Expert


El ALV (List Viewer) jerárquico es una variante del ALV tradicional que permite mostrar datos en una estructura jerárquica, similar a un árbol, en lugar de una simple lista plana. Esto es especialmente útil cuando tienes datos que están relacionados en una jerarquía, como categorías y subcategorías, cuentas y subcuentas, etc. En SAP ABAP, puedes crear reportes ALV jerárquicos para presentar datos de manera más estructurada y fácil de entender. Características del ALV Jerárquico: Estructura de Árbol: El ALV jerárquico presenta los datos en una estructura de árbol, donde los elementos principales pueden tener elementos...

Acceder a esta publicación

Creado y Compartido por: Darling Geraldino

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

-ALV JERÁRQUICO Y AGRUPAMIENTO. Podemos agrupar los registros de un ALV declarando una tabla SLIS_T_SORTINFO_ALV y una estructura SLIS_SORTINFO_ALV Antes de llamar a la función ALV se carga la TI con los registros e indicando el órden st_sort-spos = 1. "Órden del agrupamiento st_sort-fieldname = 'ESTADO_CIVIL' Completar el parámetro con tabla interna exporting IT_SORT = TI_SORT Al ejecutar el reporte se verá la agrupación por Estado Civil -ALV JERÁRQUICO Se utilizan cuando en un reporte hay datos de cabecera y muchos de posiciones, debe existir al menos uno en común. Se declara una estructura del sig tipo: st_keyinfo TYPE SLIS_KEYINFO_ALV. Se crea el catálogo ALV para...

Acceder a esta publicación

Creado y Compartido por: Armando Mayo Marquez / Disponibilidad Laboral: FullTime + Carta Presentación

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

1- Agrupamiento en una ALV Podemos agrupar los registros que mostramos en un ALV declarando una tabla del tipo SLIST_T_SORTINFO_ALV y una estrutura del tipo SLIS_SORTINFO_ALV Completar el parámetro exporting IT_SORT con nuestra tabla interna TI_SORT 2- ALV jerárquico Audio Tips 1: en un ALV jerárquico no es posible utilizar el evento TOP SPAGE por lo que no será posible establecer una cabecera con títulos y logos tal como lo vemos hecho en los ALV de tipo Grilla. Otra limitación que presentan los ALV jerárquicos es que en ellos no se puede utilizar el boton de exportación de datos a excel debido a las diferencias que existen engre el formato de la cabecera y el formato de cada registro....

Acceder a esta publicación

Creado y Compartido por: Claudio Marcelo Dario Haikel

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Unidad 5 - Leccion 8 - ALV Jerárquico y Agrupamiento En los ALV Jerárquicos, No es posible utilizar el evento top of page, no se puede generar una cabecera con titulos y logos con el alv de grilla. No se puede utilizar el boton de exportar datos a excel.

Acceder a esta publicación

Creado y Compartido por: Matias Ciutat

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

ALV Jerárquico y Agrupamiento 1. Agrupamiento en un ALV - Declarar tabla del tipo SLIS_T_SORTINFO_ALV (Tabla de SAP usada para crear tablas internas para agrupamiento de reportes ALV). - Declarar estructura de tipo SLIS_SORTINFO_ALV (Estructura estándar SAP para crear estructuras para agrupamiento de reportes ALV) - Antes de llamar a función del ALV, se carga la tabla con registros en el orden en el que se requiere agrupar. - Completar parámetro IT_SORT de función con tabla interna creada para agrupamiento. 2. ALV Jerárquico - ALV jerárquicos se usan cuando se quiere mostrar en reporte datos de cabecera y de posición - En declaraciones de tablas internas de cabecera y posición...

Acceder a esta publicación

Creado y Compartido por: Darwin Enrique Terraza Berdugo / Disponibilidad Laboral: PartTime

*** CVOSOFT - Nuestros Alumnos - Nuestro Mayor Orgullo como Academia ***

SAP Senior

Leccion 8/9: ALV JERÁRQUICO Y AGRUPAMIENTO 1. Agrupamiento de un ALV Para agrupar registros que se muestran en un ALV se declara una tabla del tipo SLIS_T_SORTINFO_ALV y una estructura de tipo SLIS_SORTINFO_ALV Luego cargar la tabla TI_SORT con los registros en el orden que los deseamos agrupar. Debemos completar el parametro exportinf IT_SORT con la tabla interna TI_SORT. Finalmente, se ejecuta el reporte. 2. ALV JERÁRQUICO. Recalcar que estos ALV se utilizan cuando se tiene que mostrar en un reporte datos de cabecera y de posicion. Debemos declarar una estructura del tipo SLIS_KEYINFO_ALV, que será ST_KEYINFO y contendra el campo claque que une a las dos tablas internas. ahora vamos a cargar las tablas...

Acceder a esta publicación

Creado y Compartido por: Ruben Santiago Cuenca Balanza / Disponibilidad Laboral: FullTime + Carta Presentación

 


 

👌Genial!, estos fueron los últimos artículos sobre más de 79.000 publicaciones académicas abiertas, libres y gratuitas compartidas con la comunidad, para acceder a ellas le dejamos el enlace a CVOPEN ACADEMY.

Buscador de Publicaciones:

 


 

No sea Juan... Solo podrá llegar alto si realiza su formación con los mejores!