Reuse_alv_grid_display

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • mysmb2
    Senior Member
    • ene
    • 406

    #1

    Reuse_alv_grid_display

    Hola!, alguien sabe si la funcion REUSE_ALV_GRID_DISPLAY tiene un limite en cuanto a cantidad de campos a mostrar o cantidad de caracteres.

    Muchas Gracias.
    Sebastián Chiavia
    http://www.programacionabap.com.ar
  • DavidXD_XD
    Moderator
    • ago
    • 1255

    #2
    Hola ... me dio curiosidad la pregunta e hice un pequeño programa que crea una tabla interna en forma dinamica dependiendo de un parametro en pantalla que sera el numero de columnas del ALV, en un comienzo solo le di hasta un maximo de 99 columnas y salio el ALV, luego le di un maximo de 999 columnas y tbm salio , ahora solo deberas modificar el parametro de entrada con 4 caracteres y probar con 9999 columnas, creo q las columnas del ALV es ilimitado y ademas no creo q exista un reporte con mas de 999 columnas (seria perdida de tiempo), pero ahi va el codigo, espero te pueda ayudar

    Código:
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *& Report  ZPRUEBA_2
    *&---------------------------------------------------------------------*
    *&  Autor       : David Carballido Cordova
    *&  Fecha       : 22/02/2009
    *&  Descripción : Crear una tabla interna dinámica y mostrar en ALV
    *&  Programa    : ZPRUEBA_2
    *&---------------------------------------------------------------------*[/COLOR]
    REPORT  ZPRUEBA_2.
    
    TYPE-POOLS: abap, col, slis.
    [COLOR="blue"]* Tablas dinámicas[/COLOR]
    FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
                   <dyn_wa>,
                   <fs>.
    
    [COLOR="blue"]* Variables Globales[/COLOR]
    DATA: gt_dyn TYPE REF TO DATA,
          gw_dyn TYPE REF TO DATA.
    
    PARAMETERS: p_col(3) TYPE c OBLIGATORY.
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *                      S T A R T  -  O F  -  S E L E C T I O N
    *&---------------------------------------------------------------------*[/COLOR]
    START-OF-SELECTION.
      PERFORM build_dynamic_table.
      PERFORM get_data.
      PERFORM build_alv.
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form  build_dynamic_table
    *&---------------------------------------------------------------------*
    *       Construyendo tabla interna dinamica
    *----------------------------------------------------------------------*[/COLOR]
    FORM build_dynamic_table.
    
      DATA: lr_datadescr   TYPE REF TO cl_abap_datadescr,
            lr_structdescr TYPE REF TO cl_abap_structdescr,
            ls_component   TYPE abap_componentdescr,
            lt_component   TYPE abap_component_tab.
    
      DATA: l_descr    TYPE char50,
            l_indx(3)  TYPE n,
            l_char5(5) TYPE c.
    
    [COLOR="blue"]* Columna 1[/COLOR]
      lr_datadescr ?= cl_abap_datadescr=>describe_by_data( l_descr ).
      ls_component-name = 'COLUMNA'.
      ls_component-type = lr_datadescr.
      APPEND ls_component TO lt_component.
    [COLOR="blue"]* Columnas Dinamicas[/COLOR]
      DO p_col TIMES.
        l_indx = sy-index.
        CONDENSE l_indx NO-GAPS.
        lr_datadescr ?= cl_abap_datadescr=>describe_by_data( l_char5 ).
        CONCATENATE 'COL' l_indx INTO ls_component-name.
        ls_component-type = lr_datadescr.
        APPEND ls_component TO lt_component.
      ENDDO.
    [COLOR="blue"]* Creando la tabla interna[/COLOR]
      TRY.
        lr_structdescr = cl_abap_structdescr=>create( p_components = lt_component ).
        CATCH cx_sy_struct_creation.
        WRITE: / 'Excepcion:', 'CX_SY_STRUCT_CREATION'.
      ENDTRY.
      CREATE DATA gw_dyn TYPE HANDLE lr_structdescr.
      ASSIGN gw_dyn->* TO <dyn_wa>.
      CREATE DATA gt_dyn LIKE STANDARD TABLE OF <dyn_wa>.
      ASSIGN gt_dyn->* TO <dyn_table>.
    
    ENDFORM.                    " build_dynamic_table
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form  get_data
    *&---------------------------------------------------------------------*
    *       Armando data para la tabla interna
    *----------------------------------------------------------------------*[/COLOR]
    FORM get_data.
    
      DATA: l_cadena(15),
            l_cont(3) TYPE n.
    
      FIELD-SYMBOLS <fs>.
    
      DO 10 TIMES.
        CLEAR <dyn_wa>.
        l_cont = sy-index.
        CONCATENATE 'COLUMNA' l_cont INTO <dyn_wa>.
        CONDENSE <dyn_wa> NO-GAPS.
        DO p_col TIMES.
          CLEAR: l_cadena.
          l_cont = sy-index.
          CONCATENATE '<dyn_wa>-COL' l_cont INTO l_cadena.
          ASSIGN (l_cadena) TO <fs>.
          <fs> = sy-index.
        ENDDO.
        APPEND <dyn_wa> TO <dyn_table>.
      ENDDO.
    
    ENDFORM.                    " get_data
    
    [COLOR="blue"]*&---------------------------------------------------------------------*
    *&      Form  build_alv
    *&---------------------------------------------------------------------*
    *       Construyendo ALV
    *----------------------------------------------------------------------*[/COLOR]
    FORM build_alv.
    
      DATA: lt_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE.
    
      DATA: l_cadena(6) TYPE c,
            l_cont(3)   TYPE n.
    
    [COLOR="blue"]* Creando catalogo[/COLOR]
      CLEAR lt_fieldcat.
      lt_fieldcat-fieldname = 'COLUMNA'.
      lt_fieldcat-tabname   = '<DYN_TABLE>'.
      lt_fieldcat-key       = 'X'.
      lt_fieldcat-seltext_l = 'Columna'.
      APPEND lt_fieldcat.
    
      DO p_col TIMES.
        CLEAR lt_fieldcat.
        l_cont = sy-index.
        CONCATENATE 'COL' l_cont INTO l_cadena.
        lt_fieldcat-fieldname = l_cadena.
        lt_fieldcat-tabname   = '<DYN_TABLE>'.
        lt_fieldcat-seltext_l = l_cadena.
        APPEND lt_fieldcat.
      ENDDO.
    
    [COLOR="Blue"]* Desplegando ALV[/COLOR]
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
         I_CALLBACK_PROGRAM                = 'ZPRUEBA_2'
         IT_FIELDCAT                       = lt_fieldcat[]
        TABLES
          T_OUTTAB                         = <dyn_table>
        EXCEPTIONS
         PROGRAM_ERROR                     = 1
         OTHERS                            = 2.
    
      IF SY-SUBRC <> 0.
        MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
             WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
      ENDIF.
    
    ENDFORM.                    " build_alv
    David Carballido Córdova

    Comentario

    • ekim68
      Member
      • mar
      • 57

      #3
      Cant.Max Columnas ALV REUSE

      Soporta 1000 columnas según probe con el programa antes mencionado.

      Saludos.

      Comentario

      • Mauricio Hidalgo
        Senior Member
        • may
        • 481

        #4
        Haciendole los ajustes que corresponda al programa, la verdad que el programa proporcionado no veo que tenga límites en cuanto a cuantas columnas pueda crear dinámicamente, llegué a 10000 columnas. Me parece que sólo estarás restringido a la memoria reservada para tablas internas dentro de tu instalación.

        Saludos

        Comentario

        • Eduard Castro
          Junior Member
          • abr
          • 6

          #5
          Hola,

          Saben si para ejecuciones en fondo presenta el mismo comportamiento?. Tengo un inconveniente cuando uso la funcion REUSE_ALV_GRID_DISPLAY en fondo, puesto que me está suprimiendo las últimas columnas del reporte. Son tres columnas, cada una con un ancho CHAR 1.

          Esto no ocurre cuando la ejecuto en modo dialogo.

          Gracias por su colaboración.

          Eduard Castro

          Comentario

          • vanesamacri
            Senior Member
            • jun
            • 146

            #6
            Originalmente publicado por Eduard Castro
            Hola,

            Saben si para ejecuciones en fondo presenta el mismo comportamiento?. Tengo un inconveniente cuando uso la funcion REUSE_ALV_GRID_DISPLAY en fondo, puesto que me está suprimiendo las últimas columnas del reporte. Son tres columnas, cada una con un ancho CHAR 1.

            Esto no ocurre cuando la ejecuto en modo dialogo.

            Gracias por su colaboración.

            Eduard Castro
            Buenas tardes.

            Al ejecutar en proceso batch (de fondo) es posible determinar la longitud de salida de la impresión (se determina a la hora de crear el job). Probablemente, lo que está ocurriendo en tu caso es que la longitud de impresión es inferior a la longitud real ocupada por el alv, motivo por el cual se truncan las últimas columnas.

            Comentario

            • Eduard Castro
              Junior Member
              • abr
              • 6

              #7
              Originalmente publicado por vanesamacri
              Buenas tardes.

              Al ejecutar en proceso batch (de fondo) es posible determinar la longitud de salida de la impresión (se determina a la hora de crear el job). Probablemente, lo que está ocurriendo en tu caso es que la longitud de impresión es inferior a la longitud real ocupada por el alv, motivo por el cual se truncan las últimas columnas.
              Hola, gracias por tu ayuda, no sabia que es posible realizar esta opción. Por favor, indícame como puedo ajustar el área de impresión del JOB.

              De antemano gracias por tu colaboración.

              Eduard Castro

              Comentario

              Trabajando...