PDA

Ver la Versión Completa : No muestra la cabecera de un alv grid (OO)


jtristan
30/09/10, 14:44:59
Hola,
en una pantalla tengo dos grids. El caso, es que no consigo que el catalogo se muestre en el segundo.

CALL METHOD go_grid1->set_table_for_first_display
CHANGING
it_fieldcatalog = alv_field_grid
it_outtab = t_impresion.


CALL METHOD go_grid2->set_table_for_first_display
CHANGING
it_fieldcatalog = alv_field_error_grid
it_outtab = t_impresion_error.

Es la llamada. He comprobado que los campos estén bien llamados, que la tabla también esté bien llamada pero no hay forma de que lo muestre por pantalla.

¿Necesito hacer algún tipo de refresco?

Muchas gracias.
Un saludo.

force
03/10/10, 22:51:08
Hola Jtristan,

Por cada ALV tienes que crear lo siguiente:

- variables a utilizar en este ejemplo.



*Variables del ALV
DATA: go_cl_alvgrid TYPE REF TO cl_gui_alv_grid,
go_container TYPE REF TO cl_gui_custom_container,
gtd_fieldcat TYPE lvc_t_fcat,
gst_layout TYPE lvc_s_layo.



- Un objeto con el contenedor en la dynpro, después lo creas en el código, creas el objeto ALV con el objeto del contenedor, cargas el layout y el catalogo y mostras el ALV.



CREATE OBJECT go_container
EXPORTING
container_name = 'CONTENEDOR' " Nombre objeto custom de la dynpro.
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
OTHERS = 5.

IF sy-subrc EQ 0.
* Creas el objeto ALV de acuerdo al contenedor.
CREATE OBJECT go_cl_alvgrid
EXPORTING
i_parent = go_container.

* Invocar a los metodos del objeto go_cl_alvgrid.

CALL METHOD go_cl_alvgrid->REGISTER_EDIT_EVENT
EXPORTING
i_event_id = CL_GUI_ALV_GRID=>MC_EVT_MODIFIED.

CALL METHOD go_cl_alvgrid->REGISTER_EDIT_EVENT
EXPORTING
i_event_id = CL_GUI_ALV_GRID=>MC_EVT_ENTER.

CALL METHOD go_cl_alvgrid->SET_READY_FOR_INPUT
EXPORTING
i_ready_for_input = 1.

* Aquí puedes llenar el Layout y el catalogo.

* Mostras el ALV.

CALL METHOD go_cl_alvgrid->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
is_layout = gst_layout
i_save = 'A'
CHANGING
it_outtab = ti_lfa1[]
it_fieldcatalog = gtd_fieldcat.
ENDIF.



La parte de los métodos del alvgrid puedes sacarla, pero lo demás tiene que haber uno por cada ALV que quieras mostrar.

A MODO RESUMEN.

Los objetos de la dynpro se tiene que llamar distintos (ejemplo: contenedor1 y contenedor2), cuando creas el objeto al contenedor tienes que hacerlo por cada Contenedor con 2 variables distintas.


CREATE OBJECT go_container
EXPORTING
container_name = 'CONTENEDOR' " Nombre objeto custom de la dynpro.
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
OTHERS = 5.

CREATE OBJECT go_container_2
EXPORTING
container_name = 'CONTENEDOR_2' " Nombre objeto custom de la dynpro.
EXCEPTIONS
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
OTHERS = 5.


Lo mismo cuando creas el objeto ALV para cada contenedor.



* Creas el objeto ALV de acuerdo al contenedor.
CREATE OBJECT go_cl_alvgrid
EXPORTING
i_parent = go_container.

* Creas el objeto ALV de acuerdo al contenedor del segundo ALV.
CREATE OBJECT go_cl_alvgrid_2
EXPORTING
i_parent = go_container_2.


Ahora puedes mostrar los 2 ALV.


CALL METHOD go_cl_alvgrid->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
is_layout = gst_layout
i_save = 'A'
CHANGING
it_outtab = ti_lfa1[]
it_fieldcatalog = gtd_fieldcat.

CALL METHOD go_cl_alvgrid_2->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
is_layout = gst_layout_2
i_save = 'A'
CHANGING
it_outtab = ti_lfa1_2[]
it_fieldcatalog = gtd_fieldcat_2.


En el código que pusiste no le has pasado el layout, fíjate eso también.

Perdón por hacerlo tan largo, pero se me hacia difícil de explicarlo sino.
Espero que te sirva y se aya entendido.
Por Cualquier problema no dudes en consultarme.

Saludos.

jtristan
13/10/10, 08:52:05
Muchas gracias force por tu contestanción. Perdona que haya tardado tanto en contestarte pero es que justo empecé las vacaciones el día que me surgió el problema.
He revisado el código y si que estaría correcto siguiendo los pasos que me indicas. Si que es cierto que no le paso el layout porque no deseo cambiar ninguno de sus valores.
¿Podría estar relacionado por tener dos contenedores? He visto ejemplos donde utilizan un contenedor que dividen en código en dos secciones. No se me ocurre nada más.

Muchas gracias.
Un saludo.