No muestra la cabecera de un alv grid (OO)

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • jtristan
    Senior Member
    • oct
    • 240

    #1

    No muestra la cabecera de un alv grid (OO)

    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
    Junior Member
    • dic
    • 10

    #2
    Hola Jtristan,

    Por cada ALV tienes que crear lo siguiente:

    - variables a utilizar en este ejemplo.

    Código:
    *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.

    Código:
    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.

    Código:
    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.

    Código:
    * 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.

    Código:
    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.

    Comentario

    • jtristan
      Senior Member
      • oct
      • 240

      #3
      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.

      Comentario

      Trabajando...