Tabla con columnas dinamicas

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • aldape
    Senior Member
    • dic
    • 204

    #1

    Tabla con columnas dinamicas

    Es posible crear en ABAP una tabla que tenga un numero variable de columnas???

    Esto seria lo mas comodo para los usuarios.. espero que me puedan ayudar..

    saludos!
  • aldape
    Senior Member
    • dic
    • 204

    #2
    pero que cosa! jejeje

    es el primer registro en aparecer en el google.com

    TYPE-POOLS: abap, col. *&———————————————————————* *&amp…




    Saludos!!

    Comentario

    • aldape
      Senior Member
      • dic
      • 204

      #3
      De todas formas me dice que el tipo global no existe... cl_salv_table...
      alguna idea?

      Comentario

      • aldape
        Senior Member
        • dic
        • 204

        #4
        encontre un ejemplo muy bueno con una amiga mia...

        BCALV_TABLE_CREATE


        es un ejemplo de programa que viene ya en el SAP... ejecutenlo con la se38

        espero que a alguien le sirva!!!
        saludos

        Comentario

        • DavidXD_XD
          Moderator
          • ago
          • 1255

          #5
          Hola Aldape, esa clase no existe por problemas de version ... me paso algo similar cuando queria crear un archivo con extension .zip, me salio en el ECC 6.0 pero en el 4.6 no
          David Carballido Córdova

          Comentario

          • frankmerlos
            Member
            • oct
            • 51

            #6
            Hola ALDAPE.

            Te copio un ejemplo de como crear una tabla dinamica.

            Pero igual necesitas un numero finito de columnas.

            Espero te sirva.

            Saludos.

            *&---------------------------------------------------------------------*
            *& Report ZSVPRUEBAS95
            *&---------------------------------------------------------------------*

            REPORT ZSVPRUEBAS95.

            ************************************************** **********************
            * TABLAS DEL SISTEMA.
            TABLES: GLT0, SKAT, BSEG, BKPF, T001, BSIS, BSAS, T880.

            DATA : BEGIN OF TI_CUENTAS_INTER2 OCCURS 0.
            DATA TIPO(1).
            DATA CNTRY LIKE T880-CNTRY.
            DATA BUKRS LIKE BSIS-BUKRS.
            DATA VBUND LIKE BSIS-VBUND.
            DATA DMBTR LIKE BSIS-DMBTR.
            DATA : END OF TI_CUENTAS_INTER2.

            ************************************************** **********************

            TYPE-POOLS: SLIS.
            DATA: IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
            IS_FCAT LIKE LINE OF IT_FCAT.

            DATA: IT_FIELDCAT TYPE LVC_T_FCAT,
            IS_FIELDCAT LIKE LINE OF IT_FIELDCAT.

            DATA: NEW_TABLE TYPE REF TO DATA.
            DATA: NEW_LINE TYPE REF TO DATA.
            DATA: POS TYPE I.

            FIELD-SYMBOLS: <L_TABLE> TYPE ANY TABLE,
            <L_LINE> TYPE ANY,
            <L_FIELD> TYPE ANY.

            * Build fieldcat
            CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
            EXPORTING
            I_STRUCTURE_NAME = 'BSIS'
            CHANGING
            CT_FIELDCAT = IT_FCAT[].


            POS = 1.

            IS_FIELDCAT-COL_POS = POS.
            IS_FIELDCAT-FIELDNAME = 'TIPO'.
            IS_FIELDCAT-REF_FIELD = ''.
            IS_FIELDCAT-REF_TABLE = ''.
            APPEND IS_FIELDCAT TO IT_FIELDCAT.

            POS = 2.

            IS_FIELDCAT-COL_POS = POS.
            IS_FIELDCAT-FIELDNAME = 'CNTRY'.
            IS_FIELDCAT-REF_FIELD = ''.
            IS_FIELDCAT-REF_TABLE = ''.
            APPEND IS_FIELDCAT TO IT_FIELDCAT.

            POS = 3.

            LOOP AT IT_FCAT INTO IS_FCAT WHERE NOT REPTEXT_DDIC IS INITIAL.
            IF IS_FCAT-FIELDNAME = 'BUKRS' OR
            IS_FCAT-FIELDNAME = 'VBUND' OR
            IS_FCAT-FIELDNAME = 'DMBTR'.
            MOVE-CORRESPONDING IS_FCAT TO IS_FIELDCAT.
            IS_FIELDCAT-COL_POS = POS.
            IS_FIELDCAT-FIELDNAME = IS_FCAT-FIELDNAME.
            IS_FIELDCAT-REF_FIELD = IS_FCAT-FIELDNAME.
            IS_FIELDCAT-REF_TABLE = IS_FCAT-REF_TABNAME.
            APPEND IS_FIELDCAT TO IT_FIELDCAT.
            POS = POS + 1.
            ENDIF.
            ENDLOOP.

            BREAK FMERLOS.

            * Create a new Table
            CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
            EXPORTING
            IT_FIELDCATALOG = IT_FIELDCAT
            IMPORTING
            EP_TABLE = NEW_TABLE.

            * Create a new Line with the same structure of the table.
            ASSIGN NEW_TABLE->* TO <L_TABLE>.
            CREATE DATA NEW_LINE LIKE LINE OF <L_TABLE>.
            ASSIGN NEW_LINE->* TO <L_LINE>.



            * Test it...
            DO 30 TIMES.
            ASSIGN COMPONENT 'BUKRS' OF STRUCTURE <L_LINE> TO <L_FIELD>.
            <L_FIELD> = SY-INDEX.
            INSERT <L_LINE> INTO TABLE <L_TABLE>.
            ENDDO.


            *LOOP AT <L_TABLE> ASSIGNING <L_LINE>.
            * ASSIGN COMPONENT 'SUBRC' OF STRUCTURE <L_LINE> TO <L_FIELD>.
            * WRITE <L_FIELD>.
            *ENDLOOP.

            Comentario

            • DavidXD_XD
              Moderator
              • ago
              • 1255

              #7
              Hola de nuevo ... aqui he mejorado un poco el codigo que encontró Aldape, pero creo q funciona con una version superior a la 4.6, una tabla interna que me da hasta 80 campos ...

              Código:
              REPORT  ZPRUEBA_2.
              
              TYPE-POOLS: abap, col.
              [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,
                    r_table         TYPE REF TO cl_salv_table,
                    r_header        TYPE REF TO cl_salv_form_element,
                    r_footer        TYPE REF TO cl_salv_form_element,
                    r_columns_table TYPE REF TO cl_salv_columns_table,
                    r_column_table  TYPE REF TO cl_salv_column_table,
                    r_datadescr     TYPE REF TO cl_abap_datadescr,
                    r_structdescr   TYPE REF TO cl_abap_structdescr,
                    gw_component    TYPE abap_componentdescr,
                    gt_component    TYPE abap_component_tab.
              
              PARAMETERS: p_col(2) 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.
              
              [COLOR="blue"]*  E N D  -  O F  -  S E L E C T I O N[/COLOR]
              END-OF-SELECTION.
                PERFORM display_report.
              
              [COLOR="blue"]*&---------------------------------------------------------------------*
              *&      Form build_dynamic_table
              *&---------------------------------------------------------------------*[/COLOR]
              FORM build_dynamic_table.
              
                DATA: l_idx(2) TYPE c,
                      l_desc   TYPE char50,
                      l_hslxx  TYPE p LENGTH 5 DECIMALS 2,
                      lt_color TYPE lvc_t_scol.
              
              [COLOR="blue"]* Columna 1[/COLOR]
                r_datadescr ?= cl_abap_datadescr=>describe_by_data( l_desc ).
                gw_component-name = 'COLUMN'.
                gw_component-type = r_datadescr.
                APPEND gw_component TO gt_component.
              [COLOR="blue"]* Column 2 - Types of color for each line[/COLOR]
                r_datadescr ?= cl_abap_datadescr=>describe_by_data( lt_color ).
                gw_component-name = 'COLOR'.
                gw_component-type = r_datadescr.
                APPEND gw_component TO gt_component.
              
                DO p_col TIMES.
                  l_idx = sy-index.
                  CONDENSE l_idx NO-GAPS.
                  r_datadescr ?= cl_abap_datadescr=>describe_by_data( l_hslxx ).
                  CONCATENATE 'COL' l_idx INTO gw_component-name.
                  gw_component-type = r_datadescr.
                  APPEND gw_component TO gt_component.
                ENDDO.
              
                TRY.
                  r_structdescr = cl_abap_structdescr=>create( p_components = gt_component ).
                  CATCH cx_sy_struct_creation .
                  WRITE: / 'CX_SY_STRUCT_CREATION'.
                ENDTRY.
              [COLOR="blue"]* Fill the table with data from GT_DATA[/COLOR]
                CREATE DATA gw_dyn TYPE HANDLE r_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
              *&---------------------------------------------------------------------*[/COLOR]
              FORM get_data.
              [COLOR="blue"]* Colocar data a llenar en la tabla interna creada[/COLOR]
              ENDFORM.                    "get_data
              
              [COLOR="blue"]*&---------------------------------------------------------------------*
              *&      Form display_report
              *&---------------------------------------------------------------------*[/COLOR]
              FORM display_report .
              
                PERFORM display_header.   " Display ALV Header
                PERFORM display_footer.   " DIsplay ALV Footer
                PERFORM fill_data.        " Fill data
                PERFORM set_color.        " Set color
                PERFORM display_list.     " Display the ALV
              
              ENDFORM.                  " display_report
              
              [COLOR="blue"]*&---------------------------------------------------------------------*
              *&      Form display_header
              *&---------------------------------------------------------------------*[/COLOR]
              FORM display_header .
              
                DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid,
                      l_text  TYPE string.
              
                SELECT SINGLE name_textc
                  INTO l_text
                    FROM user_addr
                      WHERE bname = sy-uname.
              
                CONCATENATE 'Usuario :'
                            l_text INTO l_text SEPARATED BY space.
              
                CREATE OBJECT lr_grid.
                lr_grid->create_text( row    = 1
                                      column = 1
                                      text   = l_text ).
                lr_grid->create_text( row    = 2
                                      column = 1
                                      text   = sy-host ).
                r_header = lr_grid.
              
              ENDFORM.                    " display_header
              
              [COLOR="blue"]*&---------------------------------------------------------------------*
              *&      Form display_footer
              *&---------------------------------------------------------------------*[/COLOR]
              FORM display_footer .
              
                DATA: lr_grid TYPE REF TO cl_salv_form_layout_grid.
              
                CREATE OBJECT lr_grid.
                lr_grid->create_text( row    = 1
                                      column = 1
                                      text   = sy.datum ).
                lr_grid->create_text( row    = 2
                                      column = 1
                                      text   = sy-uzeit ).
                r_footer = lr_grid.
              
              ENDFORM.                    " display_footer
              
              [COLOR="blue"]*&---------------------------------------------------------------------*
              *&      Form set_color
              *&---------------------------------------------------------------------*[/COLOR]
              FORM set_color.
              
                DATA: lt_color TYPE lvc_t_scol,
                      ls_color LIKE LINE OF lt_color,
                      l_idx(2) TYPE c.
              
                FIELD-SYMBOLS: <fs_color>.
              
                LOOP AT <dyn_table> INTO <dyn_wa>.
                  l_idx = sy-tabix.
                  CONDENSE l_idx NO-GAPS.
                  ASSIGN COMPONENT 'COLOR' OF STRUCTURE <dyn_wa> TO <fs_color>.
                  ls_color-color-col = '6'.      "col_total.
                  APPEND ls_color TO lt_color.
                  <fs_color> = lt_color.
                  MODIFY <dyn_table> FROM <dyn_wa> INDEX l_idx.
                  UNASSIGN: <fs_color>.
                ENDLOOP.
              
              ENDFORM.                    " set_color
              
              [COLOR="blue"]*&---------------------------------------------------------------------*
              *&      Form display_list
              *&---------------------------------------------------------------------*[/COLOR]
              FORM display_list.
              
                DATA: r_display TYPE REF TO cl_salv_display_settings.
              [COLOR="blue"]* Preparar tabla interna para mostrar (Tipo ALV List)[/COLOR]
                cl_salv_table=>factory( EXPORTING list_display = 'X'
                                        IMPORTING r_salv_table = r_table
                                        CHANGING  t_table      = <dyn_table> ).
              [COLOR="blue"]* Levantar título[/COLOR]
                r_table->set_top_of_list( r_header ).
              * Levantar Pie de Pagina (Footer)
                r_table->set_end_of_list( r_footer ).
                r_display = r_table->get_display_settings( ).
              [COLOR="blue"]* Assign all the column names[/COLOR]
                PERFORM set_column_attr.
              [COLOR="blue"]* Mostrar reporte[/COLOR]
                r_table->display( ).
              
              ENDFORM.                    " display_list
              
              [COLOR="blue"]*&---------------------------------------------------------------------*
              *&      Form set_column_attr
              *&---------------------------------------------------------------------*[/COLOR]
              FORM set_column_attr.
              
                DATA: l_idx(2)  TYPE c,
                      l_text(4) TYPE c,
                      colname   TYPE lvc_fname,
                      outps     TYPE scrtext_s,
                      outpm     TYPE scrtext_m,
                      outpl     TYPE scrtext_l.
              
                r_columns_table = r_table->get_columns( ).
              [COLOR="blue"]*   Atributos de columna[/COLOR]
                r_columns_table->set_color_column( 'COLOR' ).
                DO p_col TIMES.
                  l_idx = sy-index.
                  CONDENSE l_idx NO-GAPS.
                  CONCATENATE 'COL' l_idx INTO colname.
                  outps = colname.
                  outpm = colname.
                  outpl = colname.
                  r_column_table ?= r_columns_table->get_column( colname ).
                  r_column_table->set_optimized( value  = abap_true ).
                  r_column_table->set_alignment( value  = 1 ).
                  r_column_table->set_zero( value  = space ).
                  r_column_table->set_short_text( outps ).
                  r_column_table->set_medium_text( outpm ).
                  r_column_table->set_long_text( outpl ).
                ENDDO.
              
              ENDFORM.                    " set_column_attr
              
              [COLOR="blue"]*&---------------------------------------------------------------------*
              *&      Form fill_data
              *&---------------------------------------------------------------------*[/COLOR]
              FORM fill_data.
              
                DATA: l_idx(2),
                      l_col  TYPE string.
              
                DO p_col TIMES.
                  l_idx = sy-index.
                  CONDENSE l_idx NO-GAPS.
                  CONCATENATE 'COL' l_idx INTO l_col.
                  ASSIGN COMPONENT l_col OF STRUCTURE <dyn_wa> TO <fs>.
                  <fs> = 0.
                  UNASSIGN <fs>.
                ENDDO.
              
                DO p_col TIMES.
                  l_idx = sy-index.
                  CONDENSE l_idx NO-GAPS.
                  ASSIGN COMPONENT 'COLUMN' OF STRUCTURE <dyn_wa> TO <fs>.
                  CONCATENATE 'Row' l_idx INTO <fs> SEPARATED BY space.
                  UNASSIGN <fs>.
                  APPEND <dyn_wa> TO <dyn_table>.
                ENDDO.
              
              ENDFORM.                   " fill_data
              David Carballido Córdova

              Comentario

              • aldape
                Senior Member
                • dic
                • 204

                #8
                Hola! muchas gracias por su apoyo!..

                problema resuelto :P (Next!!!)


                saludos!

                Comentario

                Trabajando...