Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

How to dynamically create an Internal Table?

Former Member
0 Likes
484

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

Thank you very much!

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
450

  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

3 REPLIES 3
Read only

Former Member
0 Likes
450

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

Read only

Former Member
0 Likes
451

  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

Read only

Former Member
0 Likes
450

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