Skip to Content
avatar image
Former Member

How to declare a internal table at run time dynamically

Hi,

I have a problem to decalre a internal table at run time. A internal table which structure has to determine at run time like number of fields of a internal table depending on the excel file is coming from other system.

If any body has solution.....please drop as soon as possible.

Add comment
10|10000 characters needed characters exceeded

  • Get RSS Feed

5 Answers

  • May 25, 2006 at 03:49 PM

    This has been discussed many times in this forum. Please check out this weblog.

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

    Regards,

    Rich Heilman

    Add comment
    10|10000 characters needed characters exceeded

  • May 25, 2006 at 03:50 PM

    Hi

    CREATE DATA <REF> TYPE <TYPE TABLE> TABLE OF <TYPE LINE>

    [WITH [UNIQUE|NON-UNIQUE] keydef] [INITIAL SIZE n].

    For example:

    DATA: my_table TYPE REF TO data.

    DATA: table_name(30).

    FIELD-SYMBOLS: <my_table> TYPE table.

    table_name = 'MARA'.

    CREATE DATA my_table TYPE STANDARD TABLE OF (table_name).

    You can also use LIKE if you want to create a table like a structure defined in program:

    CREATE DATA <REF> LIKE <TYPE TABLE> TABLE OF <TYPE LINE>

    but now it has to indicate explicitly the structure.

    DATA: BEGIN OF itab,

    field1,

    field2,

    END OF itab.

    CREATE DATA my_table LIKE STANDARD TABLE OF itab.

    But you can use this statament:

    TYPES: BEGIN OF ty_itab,

    field1,

    field2,

    END OF ty_itab.

    table_name = 'TY_ITAB'.

    CREATE DATA my_table TYPE STANDARD TABLE OF (table_name).

    REgards,

    Ravi

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    May 25, 2006 at 03:50 PM

    hii

    chk out this code

    DATA : BEGIN OF I_ITAB OCCURS 0,

    TEST(5),

    END OF I_ITAB.

    DATA: I_DYN_TAB(10) VALUE 'I_ITAB[]'.

    DATA: DTAB TYPE REF TO DATA.

    FIELD-SYMBOLS : <ITAB> TYPE ANY TABLE ,

    <WA> TYPE ANY.

    I_ITAB-TEST = 'TEST'.

    APPEND I_ITAB.

    ASSIGN (I_DYN_TAB) TO <ITAB>.

    LOOP AT <ITAB> ASSIGNING <WA>.

    WRITE <WA>.

    ENDLOOP.

    also go thru this link

    dynamically-passing-table-in-subroutine

    Regards

    Naresh

    Add comment
    10|10000 characters needed characters exceeded

  • May 25, 2006 at 03:56 PM

    Hi,

    check this code..., this is used to dynamic alv colouring.

    REPORT zcdf_dynamic_table.
    DATA:
    r_dyn_table TYPE REF TO data,
    r_wa_dyn_table TYPE REF TO data,
    r_dock_ctnr TYPE REF TO cl_gui_docking_container,
    r_alv_grid TYPE REF TO cl_gui_alv_grid,
    
    t_fieldcat1 TYPE lvc_t_fcat, "with cell color
    t_fieldcat2 TYPE lvc_t_fcat, "without cell color
    
    wa_fieldcat LIKE LINE OF t_fieldcat1,
    wa_cellcolors TYPE LINE OF lvc_t_scol,
    wa_is_layout TYPE lvc_s_layo.
    
    FIELD-SYMBOLS:
    <t_dyn_table> TYPE STANDARD TABLE,
    <wa_dyn_table> TYPE ANY,
    <t_cellcolors> TYPE lvc_t_scol,
    <w_field> TYPE ANY.
    START-OF-SELECTION.
    
    * Build field catalog based on your criteria.
    
    wa_fieldcat-fieldname = 'FIELD1'.
    wa_fieldcat-inttype = 'C'.
    wa_fieldcat-outputlen = '10'.
    wa_fieldcat-coltext = 'My Field 1'.
    wa_fieldcat-seltext = wa_fieldcat-coltext.
    
    APPEND wa_fieldcat TO t_fieldcat1.
    
    wa_fieldcat-fieldname = 'FIELD2'.
    wa_fieldcat-inttype = 'C'.
    wa_fieldcat-outputlen = '10'.
    wa_fieldcat-coltext = 'My Field 2'.
    wa_fieldcat-seltext = wa_fieldcat-coltext.
    
    APPEND wa_fieldcat TO t_fieldcat1.
    
    * Before adding cell color table, save fieldcatalog to pass
    * to ALV call. The ALV call needs a fieldcatalog without
    * the internal table for cell coloring.
    
    t_fieldcat2[] = t_fieldcat1[].
    
    * Add cell color table.
    * CALENDAR_TYPE is a structure in the dictionary with a
    * field called COLTAB of type LVC_T_SCOL. You can use
    * any structure and field that has the type LVC_T_SCOL.
    
    wa_fieldcat-fieldname = 'T_CELLCOLORS'.
    wa_fieldcat-ref_field = 'COLTAB'.
    wa_fieldcat-ref_table = 'CALENDAR_TYPE'.
    
    APPEND wa_fieldcat TO t_fieldcat1.
    
    * Create dynamic table including the internal table
    * for cell coloring.
    
    CALL METHOD cl_alv_table_create=>create_dynamic_table
    EXPORTING
    it_fieldcatalog = t_fieldcat1
    IMPORTING
    ep_table = r_dyn_table
    EXCEPTIONS
    generate_subpool_dir_full = 1
    OTHERS = 2.
    
    IF sy-subrc <> 0.
    MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
    WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    ENDIF.
    
    * Get access to new table using field symbol.
    
    ASSIGN r_dyn_table->* TO <t_dyn_table>.
    
    * Create work area for new table.
    
    CREATE DATA r_wa_dyn_table LIKE LINE OF <t_dyn_table>.
    
    * Get access to new work area using field symbol.
    
    ASSIGN r_wa_dyn_table->* TO <wa_dyn_table>.
    
    * Get data into table from somewhere. Field names are
    * known at this point because field catalog is already
    * built. Read field names from the field catalog or use
    * COMPONENT <number> in a DO loop to access the fields. A
    * simpler hard coded approach is used here.
    
    ASSIGN COMPONENT 'FIELD1' OF STRUCTURE <wa_dyn_table> TO <w_field>.
    
    <w_field> = 'ABC'.
    
    ASSIGN COMPONENT 'FIELD2' OF STRUCTURE <wa_dyn_table> TO <w_field>.
    
    <w_field> = 'XYZ'.
    
    APPEND <wa_dyn_table> TO <t_dyn_table>.
    
    ASSIGN COMPONENT 'FIELD1' OF STRUCTURE <wa_dyn_table> TO <w_field>.
    
    <w_field> = 'TUV'.
    
    ASSIGN COMPONENT 'FIELD2' OF STRUCTURE <wa_dyn_table> TO <w_field>.
    
    <w_field> = 'DEF'.
    
    APPEND <wa_dyn_table> TO <t_dyn_table>.
    
    * Color cells based on your criteria. In this example, a test on
    * FIELD2 is used to decide on color.
    
    LOOP AT <t_dyn_table> INTO <wa_dyn_table>.
    
    ASSIGN COMPONENT 'FIELD2' OF STRUCTURE <wa_dyn_table> TO <w_field>.
    
    * Get access to internal table used to color cells.
    
    ASSIGN COMPONENT 'T_CELLCOLORS'
    OF STRUCTURE <wa_dyn_table> TO <t_cellcolors>.
    
    CLEAR wa_cellcolors.
    
    wa_cellcolors-fname = 'FIELD2'.
    
    IF <w_field> = 'DEF'.
    wa_cellcolors-color-col = '7'.
    ELSE.
    wa_cellcolors-color-col = '5'.
    ENDIF.
    
    APPEND wa_cellcolors TO <t_cellcolors>.
    
    MODIFY <t_dyn_table> FROM <wa_dyn_table>.
    
    ENDLOOP.
    
    
    * Display screen. Define screen 100 as empty, with next screen
    * set to 0 and flow logic of:
    *
    * PROCESS BEFORE OUTPUT.
    * MODULE initialization.
    *
    * PROCESS AFTER INPUT.
    
    CALL SCREEN 100.
    
    *---------------------------------------------------------------------*
    * MODULE initialization OUTPUT
    *---------------------------------------------------------------------*
    
    MODULE initialization OUTPUT.
    
    * Set up for ALV display.
    
    IF r_dock_ctnr IS INITIAL.
    
    CREATE OBJECT r_dock_ctnr
    EXPORTING
    side = cl_gui_docking_container=>dock_at_left
    ratio = '90'.
    
    CREATE OBJECT r_alv_grid
    EXPORTING i_parent = r_dock_ctnr.
    
    * Set ALV controls for cell coloring table.
    
    wa_is_layout-ctab_fname = 'T_CELLCOLORS'.
    
    * Display.
    
    CALL METHOD r_alv_grid->set_table_for_first_display
    EXPORTING
    is_layout = wa_is_layout
    CHANGING
    it_outtab = <t_dyn_table>
    it_fieldcatalog = t_fieldcat2.
    
    ELSE. "grid already prepared
    
    * Refresh display.
    
    CALL METHOD r_alv_grid->refresh_table_display
    EXPORTING
    i_soft_refresh = ' '
    EXCEPTIONS
    finished = 1
    OTHERS = 2.
    
    ENDIF.
    
    ENDMODULE. " initialization OUTPUT

    Regards

    vijay

    Add comment
    10|10000 characters needed characters exceeded

  • avatar image
    Former Member
    May 25, 2006 at 04:08 PM

    Hai Partha

    Go through the following Function Module

    You can put a check depending on your condition you can pass the table parameters to the FM..Ex:-If condition1 is true. Perform gui_upload tables ITAB1.elseif condition2 is true. Perform gui_upload tables ITAB2.endif.Form gui_upload tables ITAB structure ....CALL FUNCTION 'GUI_UPLOAD' EXPORTING FILENAME = LDF_FILENAME3 FILETYPE = LDF_TYPE1 HAS_FIELD_SEPARATOR = 'X' TABLES DATA_TAB = ITAB EXCEPTIONS FILE_OPEN_ERROR = 1 FILE_READ_ERROR = 2 NO_BATCH = 3 GUI_REFUSE_FILETRANSFER = 4 INVALID_TYPE = 5 NO_AUTHORITY = 6 UNKNOWN_ERROR = 7 BAD_DATA_FORMAT = 8 HEADER_NOT_ALLOWED = 9 SEPARATOR_NOT_ALLOWED = 10 HEADER_TOO_LONG = 11 UNKNOWN_DP_ERROR = 12 ACCESS_DENIED = 13 DP_OUT_OF_MEMORY = 14 DISK_FULL = 15 DP_TIMEOUT = 16 OTHERS = 17 . IF SY-SUBRC <> 0. MESSAGE E506 WITH 'UPLOAD' 'SY-SUBRC=' SY-SUBRC SPACE. ENDIF.Endform.

    Thanks & regards

    Sreenivasulu P

    Add comment
    10|10000 characters needed characters exceeded