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

Dynamic internal table

Hi,

I need to create internal table dynamically.

fields will be available in the runtime.

how can i do that ?

Regards

Praveen

Add a comment
10|10000 characters needed characters exceeded

Assigned Tags

Related questions

3 Answers

  • Posted on Nov 19, 2005 at 11:01 AM

    using the following method you can do that

    cl_alv_table_create=>create_dynamic_table

    check out the following weblogs for details.

    /people/subramanian.venkateswaran2/blog/2004/11/19/dynamic-internal-table

    /people/rich.heilman2/blog/2005/07/27/dynamic-internal-tables-and-structures--abap

    Regards

    Raja

    Add a comment
    10|10000 characters needed characters exceeded

  • Posted on Nov 19, 2005 at 11:01 AM

    hi,

    try this..

    =====================================

    REPORT zmaschl_create_data_dynamic .

    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.

    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 = 'SYST'

    CHANGING

    ct_fieldcat = it_fcat[].

    LOOP AT it_fcat INTO is_fcat WHERE NOT reptext_ddic IS initial.

    MOVE-CORRESPONDING is_fcat TO is_fieldcat.

    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.

    ENDLOOP.

    • 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 'SUBRC' 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.

    Add a comment
    10|10000 characters needed characters exceeded

  • author's profile photo Former Member
    Former Member
    Posted on Nov 19, 2005 at 11:04 AM

    Hi,

    You can do this with the help of <b> subroutine pools </b>.

    Sample 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.

    Refer to this link for further help.

    http://www.sap-img.com/ab030.htm

    Regards,

    Sailu.

    Message was edited by: Sailaja N.L.

    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.