Skip to Content
author's profile photo Former Member
Former Member

How to dynamically create an Internal Table?

Can someone give some help on the dynamic creation of internal table?

Thank you very much!

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

3 Answers

  • Best Answer
    author's profile photo Former Member
    Former Member
    Posted on Oct 18, 2006 at 12:09 PM
      DATA dref TYPE REF TO data.
    
      FIELD-SYMBOLS: <xyz> TYPE ANY TABLE.
    
      TRY.
          CREATE DATA dref TYPE STANDARD TABLE OF (tab)
                                WITH NON-UNIQUE DEFAULT KEY.
          ASSIGN dref->* TO  <xyz>.
        CATCH cx_sy_create_data_error.
          WRITE 'Wrong Database!'.
      ENDTRY.
    
    
    

    You are done with it...

    (tab) can hold any table name.

    regards,

    Sandeep Josyula

    *Reward if found useful...pl dont forget

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Oct 18, 2006 at 02:58 AM

    Below code might give you some idea:

    type-pools : abap.
    field-symbols: <dyn_table> type standard table,
                   <dyn_wa>,
                   <dyn_field>.
    data: dy_table type ref to data,
          dy_line  type ref to data,
          xfc type lvc_s_fcat,
          ifc type lvc_t_fcat.
    
    selection-screen begin of block b1 with frame.
       parameters: p_table(30) type c default 'T001'.
    selection-screen end of block b1.
    
    start-of-selection.
    
       perform get_structure.
       perform create_dynamic_itab.
    * Creates a dyanamic internal table **
       perform get_data.
       perform write_out.
    
    form get_structure.
    
      data : idetails type abap_compdescr_tab,
             xdetails type abap_compdescr.
      data : ref_table_des type ref to cl_abap_structdescr.
    
    * Get the structure of the table.
      ref_table_des ?= cl_abap_typedescr=>describe_by_name( p_table ).
    
      idetails[] = ref_table_des->components[].
    
      loop at idetails into xdetails.
           clear xfc.
           xfc-fieldname = xdetails-name .
           xfc-datatype = xdetails-type_kind.
           xfc-inttype = xdetails-type_kind.
           xfc-intlen  = xdetails-length." / 2.
           xfc-decimals = xdetails-decimals. " / 2.
           append xfc  to ifc.
      endloop.
    
    endform.
    
    form create_dynamic_itab.
    * Create dynamic internal table and assign to FS
    
       call method cl_alv_table_create=>create_dynamic_table
        exporting
                 it_fieldcatalog = ifc
        importing
                 ep_table        = dy_table.
    
       assign dy_table->* to <dyn_table>.
    * Create dynamic work area and assign to FS
       create data dy_line like line of <dyn_table>.
       assign dy_line->* to <dyn_wa>.
    
    endform.
    
    form get_data.
    
    * Select Data from table.
      select * into table <dyn_table>
         from (p_table).
    
    endform.
    
    form write_out.
    * Write out data from table.
    
       loop at <dyn_table> into <dyn_wa>.
           do.
             assign component sy-index of structure <dyn_wa> to <dyn_field>.
             if sy-subrc <> 0.
                exit.
             endif.
             if sy-index = 1.
                write:/ <dyn_field>.
             else.
                write: <dyn_field>.
             endif.
          enddo.
      endloop.
    
    endform.

    <b>Thanks to the Original Contributors.</b>

    Kind Regards

    Eswar

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Oct 18, 2006 at 12:14 PM

    Have a look at below code.

    REPORT ZCLUST1 .

    • Example: how to create a dynamic internal table

    • The dynamic internal table stucture

    DATA: BEGIN OF STRUCT OCCURS 10,

    FILDNAME(8) TYPE C,

    ABPTYPE TYPE C,

    LENGTH TYPE I,

    END OF STRUCT.

    • The dynamic program source table

    DATA: BEGIN OF INCTABL OCCURS 10,

    LINE(72),

    END OF INCTABL.

    DATA: LNG TYPE I, TYPESRTING(6).

    • Sample dynamic internal table stucture

    STRUCT-FILDNAME = 'field1'. STRUCT-ABPTYPE = 'c'. STRUCT-LENGTH = '6'.

    APPEND STRUCT. CLEAR STRUCT.

    STRUCT-FILDNAME = 'field2'. STRUCT-ABPTYPE = 'd'.

    APPEND STRUCT. CLEAR STRUCT.

    STRUCT-FILDNAME = 'field3'. STRUCT-ABPTYPE = 'i'.

    APPEND STRUCT. CLEAR STRUCT.

    • Create the dynamic internal table definition in the dyn. program

    INCTABL-LINE = 'program zdynpro.'. APPEND INCTABL.

    INCTABL-LINE = 'data: begin of dyntab occurs 10,'. APPEND INCTABL.

    LOOP AT STRUCT.

    INCTABL-LINE = STRUCT-FILDNAME.

    LNG = STRLEN( STRUCT-FILDNAME ).

    IF NOT STRUCT-LENGTH IS INITIAL .

    TYPESRTING(1) = '('.

    TYPESRTING+1 = STRUCT-LENGTH.

    TYPESRTING+5 = ')'.

    CONDENSE TYPESRTING NO-GAPS.

    INCTABL-LINE+LNG = TYPESRTING.

    ENDIF.

    INCTABL-LINE+15 = 'type '.

    INCTABL-LINE+21 = STRUCT-ABPTYPE.

    INCTABL-LINE+22 = ','.

    APPEND INCTABL.

    ENDLOOP.

    INCTABL-LINE = 'end of dyntab. '.

    APPEND INCTABL.

    • Create the code processes the dynamic internal table

    INCTABL-LINE = ' '. APPEND INCTABL.

    INCTABL-LINE = 'dyntab-field1 = ''aaaaaa''.'. APPEND INCTABL.

    INCTABL-LINE = 'dyntab-field1 = ''19970814''.'. APPEND INCTABL.

    INCTABL-LINE = 'dyntab-field1 = 1.'. APPEND INCTABL.

    INCTABL-LINE = 'append dyntab.'. APPEND INCTABL.

    INCTABL-LINE = ' '. APPEND INCTABL.

    INCTABL-LINE = 'loop at dyntab.'. APPEND INCTABL.

    INCTABL-LINE = 'write: / dyntab.'. APPEND INCTABL.

    INCTABL-LINE = 'endloop.'. APPEND INCTABL.

    • Create and run the dynamic program

    INSERT REPORT 'zdynpro'(001) FROM INCTABL.

    SUBMIT ZDYNPRO.

    I hope it helps.

    Best Regards,

    Vibha

    *Please mark all the helpful answers

    Add a comment
    10|10000 characters needed characters exceeded

Before answering

You should only submit an answer when you are proposing a solution to the poster's problem. If you want the poster to clarify the question or provide more information, please leave a comment instead, requesting additional details. When answering, please include specifics, such as step-by-step instructions, context for the solution, and links to useful resources. Also, please make sure that you answer complies with our Rules of Engagement.
You must be Logged in to submit an answer.

Up to 10 attachments (including images) can be used with a maximum of 1.0 MB each and 10.5 MB total.