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

CREATE DATA dref

Former Member
0 Likes
1,670

Hi All,

I need to create internal table dynamically, and below is the sample code:


      DATA: tab_fieldcat  TYPE lvc_t_fcat.

      CREATE DATA dref_table TYPE (tabname).
      ASSIGN dref_table->* TO <wa>.

     structref ?= cl_abap_typedescr=>describe_by_data( <wa> ).    

      LOOP AT structref ->components ASSIGNING <wa_component>.
        IF sy_tabix < 10.
          wa_field-fieldname     = <wa_component>-name.
          wa_field-ref_table     = g_table.
          wa_field-ref_field     = <wa_component>-name.
          APPEND wa_field TO tab_fieldcat.
        ENDIF.
      ENDLOOP.

      CREATE DATA eptable LIKE tab_fieldcat.    <----------- PROBLEM !!!
      ASSIGN eptable->* TO <itab>

Problem face at the last statement CREATE DATA, where <itab> is containing field components ROW_POS, COL_POS, FIELDNAME, TABNAME, etc etc that those are fields coming from structure lvc_t_fcat.

But i want dynamic table created according to fields that i filtered during LOOP~ENDLOOP.

Please comment how i can achieve that.

FYI, i can't use method cl_alv_table_create=>create_dynamic_table since i've read the disadvantage abt it from internet.

7 REPLIES 7
Read only

Former Member
0 Likes
1,283

Use create data statement as follows:

data: gv_struct_name TYPE w_tabname,

gv_dref TYPE REF TO data,.

FIELD-SYMBOLS: <gf_itab> TYPE STANDARD TABLE.

gv_struct_name = 'your structure or table name'

IF NOT gv_struct_name IS INITIAL.

CREATE DATA gv_dref TYPE TABLE OF (gv_struct_name).

ASSIGN gv_dref->* TO <gf_itab>.

ENDIF.

hope this will help you.

Read only

0 Likes
1,283

Hi Sheelesh, thanks for your reply however your code is leading me back to the problem that mentioned in my post.

Please comment.

Read only

0 Likes
1,283

The below statements will crate the dynamic internal table with reference to variable gv_struct_name but you need to populate the name of your table to the variable gv_struct_name.

IF NOT gv_struct_name IS INITIAL.

CREATE DATA gv_dref TYPE TABLE OF (gv_struct_name).

ASSIGN gv_dref->* TO <gf_itab>.

ENDIF.

I have used the same code previously and is working fine.

Read only

0 Likes
1,283

Hi,

You eg given is base on a table. For my case after i got a table, i need to further filter out those not required fields. That's why i need to Loop~Endloop to populate the fields that i need.

Problem comes when i create itab dynamically where it doesn't create according to the structure that i prepared.

Read only

0 Likes
1,283

Hi all, this is to update you that i get my problem solved by using SUBMIT.

(1)Main program -> (2)Submit subprogram -> (3)call subroutine in Main program

(1) & (2) - In main program, i SUBMIT xxx AND RETURN calling the subprogram.

- At this calling step, i EXPORT my fieldcat to memory ID

(2) & (3) - In subprogram, it only having the code to call back a subrountine in Main prog.

- In main program, it IMPORT back the fieldcat from memory ID and then resume the code for

dynamic table creation.

eg code:

Main prog - Z_MAIN

      EXPORT IT_FIELDCAT TO MEMORY ID 'TEST'.
      SUBMIT Z_SUB AND RETURN.

      FORM TEST.

        IMPORT IT_FIELDCAT FROM MEMORY ID 'TEST'.

        CALL METHOD cl_alv_table_create=>create_dynamic_table
          EXPORTING
            it_fieldcatalog           = IT_FIELDCAT
          IMPORTING
            ep_table                  = ep_table
          EXCEPTIONS
            generate_subpool_dir_full = 1
            OTHERS                    = 2.

          UNASSIGN <gf_table>.
          ASSIGN ep_table->* TO <gf_table>.
       ENDFORM.

Subprog - Z_SUB
      PERFORM TEST IN PROGRAM Z_MAIN.

Read only

Former Member
0 Likes
1,283

Hi ,

You can use this class for dyanamic generation of class

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = ifc (Field catalog)

IMPORTING

ep_table = dy_table.

dy_table is a pointer to an internal table .

and to be declared like

DATA: dy_table TYPE REF TO data.

ASSIGN dy_table->* TO <dyn_itrecord>.

Following fields of the fieldcatlog also should be filled

xfc-fieldname = 'MCODE'.

xfc-datatype = 'CHAR'.

  • xfc-inttype = 'D'.

xfc-intlen = '18'.

xfc-decimals = 0.

APPEND xfc TO ifc.

Read only

0 Likes
1,283

Hi varghese oommen, i can not use cl_alv_table_create=>create_dynamic_table due to it is having limitation on the memory.

Please comment.