‎2009 Mar 23 2:47 AM
can anybody give me a sample code of creating a dynamic internal table structure? what im getting from searching the net is that it acquires the table structure of the table you will define in the code. but what i need to do is that i should be the one to define the fields, type, etc....
‎2009 Mar 23 2:51 AM
Hi,
Declaration for Dynamic Table:-
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE,
<dyn_table1> TYPE STANDARD TABLE,
<dyn_wa1>,
<dyn_wa>.
FIELD-SYMBOLS: <l_fs_dyn> TYPE ANY,
<l_fs_bom> TYPE ANY.
*---Dynamic Internal Table
DATA: dy_table TYPE REF TO data,
dy_table1 TYPE REF TO data,
dy_line TYPE REF TO data.
Creation of Dynamic Internal Table:-
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = fcat (for which internal table needs to be built)
IMPORTING
ep_table = dy_table
EXCEPTIONS
generate_subpool_dir_full = 1
OTHERS = 2
.
IF sy-subrc <> 0.
ENDIF.
Population of Dynamic Internal Table:-
CLEAR: l_tabix,
w_tabix.
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
ASSIGN dy_table->* TO <dyn_table1>.
CREATE DATA dy_line LIKE LINE OF <dyn_table1>.
ASSIGN dy_line->* TO <dyn_wa1>.
LOOP AT it_parent.
l_tabix = sy-tabix.
LOOP AT fcat INTO ls_fcat TO 23."WHERE col_pos <= '19'.
ASSIGN COMPONENT ls_fcat-fieldname
OF STRUCTURE <dyn_wa> TO <l_fs_dyn>.
ASSIGN COMPONENT ls_fcat-fieldname
OF STRUCTURE it_parent TO <l_fs_bom>.
<l_fs_dyn> = <l_fs_bom>.
ENDIF.
ENDLOOP
APPEND <dyn_wa> TO <dyn_table>.
CLEAR: <dyn_wa>,
<dyn_wa1>,
<l_fs_bom>,
<l_fs_dyn>.
Build your fcat as field type etc.....
Thanks & Regards,
Ruchi Tiwari
‎2009 Mar 23 4:13 AM
hi ruchi, im a newbie in this language. some symbols are not defined in your sample code. can i have the correct code?
‎2009 Mar 23 4:16 AM
Hi,
Refer:
https://www.sdn.sap.com/irj/scn/advancedsearch?cat=sdn_wiki&query=dynamicinternaltable&adv=false&sortby=cm_rnd_rankvalue
Hope this helps you.
Regards,
Tarun
‎2009 Mar 23 4:35 AM
Hi Ian,
Let me know specificly in which part are u facing problem so that i can elaborate more.....
Thanks & Regards,
Ruchi Tiwari
‎2009 Mar 23 2:52 AM
hi,
FIELD-SYMBOLS: <dyn_table> TYPE STANDARD TABLE ,
<dyn_wa>.
*---Dynamic Internal Table
DATA: dy_table TYPE REF TO data,
dy_line TYPE REF TO data.
ASSIGN dy_table->* TO <dyn_table>.
CREATE DATA dy_line LIKE LINE OF <dyn_table>.
ASSIGN dy_line->* TO <dyn_wa>.
thanks
‎2009 Mar 23 3:43 AM
Hi Dude,
Go through this Link :
Field Symbols
Link:[http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb3860358411d1829f0000e829fbfe/content.htm]
Link:[http://help.sap.com/saphelp_nw04/helpdata/en/fc/eb387a358411d1829f0000e829fbfe/content.htm]
Example
DATA: wa(10) VALUE '0123456789'.
DATA: BEGIN OF line1,
col1(3),
col2(2),
col3(5),
END OF line1.
DATA: BEGIN OF line2,
col1(2),
col2 LIKE sy-datum,
END OF line2.
FIELD-SYMBOLS: <f1> STRUCTURE line1 DEFAULT wa,
<f2> STRUCTURE line2 DEFAULT wa.
WRITE: / <f1>-col1, <f1>-col2, <f1>-col3,
/ <f2>-col1, <f2>-col2.
Example using the correct syntax (TYPE and CASTING):
DATA: wa(10) VALUE '0123456789'.
DATA: BEGIN OF line1,
col1(3),
col2(2),
col3(5),
END OF line1.
DATA: BEGIN OF line2,
COL1(2),
COL2 LIKE sy-datum,
END OF line2.
FIELD-SYMBOLS: <f1> LIKE line1.
ASSIGN wa TO <f1> CASTING.
FIELD-SYMBOLS: <f2> LIKE line2.
ASSIGN wa TO <f2> CASTING.
WRITE: / <f1>-col1, <F1>-col2, <F1>-col3,
/ <f2>-col1, <F2>-col2.
Edited by: Raghunath Shyamala on Mar 23, 2009 4:44 AM
‎2009 Mar 23 4:00 AM
‎2009 Mar 23 4:07 AM
Hi,
You have to determine the number of fields atleast at run time dynamically and prepare your fieldcatalog that needs to be passed to create_table method.
Regards,
Raghavendra
‎2009 Mar 23 4:55 AM
Hi,
u can make a dynamic internal table with unlimited fields.
check this code.
DATA: struct_type TYPE REF TO cl_abap_structdescr,
comp_tab TYPE cl_abap_structdescr=>component_table,
dref TYPE REF TO data,
itab_type TYPE REF TO cl_abap_tabledescr,
wa_comp LIKE LINE OF comp_tab,
index TYPE char10.
FIELD-SYMBOLS : <tab> TYPE STANDARD TABLE,
<wa> TYPE ANY.
PARAMETER col TYPE i.
"Here u have to define the fields of the internal table.
DO col TIMES.
index = sy-index.
CONCATENATE 'COL' index INTO wa_comp-name. "Field name
CONDENSE wa_comp-name NO-GAPS.
wa_comp-type ?= cl_abap_datadescr=>describe_by_name( 'I' ). "Field data type
APPEND wa_comp TO comp_tab.
ENDDO.
struct_type = cl_abap_structdescr=>create( comp_tab ).
itab_type = cl_abap_tabledescr=>create( struct_type ).
CREATE DATA dref TYPE HANDLE itab_type.
ASSIGN dref->* TO <tab>. "This is the dynamic Internal table
CREATE DATA dref TYPE HANDLE struct_type.
ASSIGN dref->* TO <wa>. "This is the work area for the above table.
set debugger and see..
‎2009 Mar 26 4:30 AM
hi Sukriti,
how am i going to put values to the work area or table?
‎2009 Mar 26 4:38 AM
Hi,
Do like this....
FIELD-SYMBOLS: <fs> TYPE any.
LOOP AT comp_tab INTO wa_comp.
ASSIGN COMPONENT wa_comp-name OF STRUCTURE <wa> TO <fs>. "<---get by field name
IF <fs> IS ASSIGNED.
<fs> = value. "<----Value
UNASSIGN <fs>.
ENDIF.
ENDLOOP.
‎2009 Mar 26 4:44 AM
Hi,
Refer wiki code for sample dynamic internal table
Hope this helps you.
Regards,
Tarun
‎2009 Mar 26 5:27 AM
sorry, but i still dont know how those values to work area and then to internal table and what if i have 10 fields to put values in for example?
Edited by: lan sdng on Mar 26, 2009 6:43 AM
‎2009 Mar 26 5:51 AM
‎2009 Mar 26 5:58 AM
FIELD-SYMBOLS: <fs> TYPE any.
LOOP AT comp_tab INTO wa_comp.
ASSIGN COMPONENT wa_comp-name OF STRUCTURE <wa> TO <fs>. "<---get by field name
IF <fs> IS ASSIGNED.
<fs> = value. "<----Value
UNASSIGN <fs>.
ENDIF.
ENDLOOP.
the field names r stored in the table 'comp_tab'.
so looping at this table gives u all the components of the work area. as <wa> is assigned type ANY. so u cannot get the field names diretly..eg. <wa>-fld_name.
so u have to do like this....
ASSIGN COMPONENT wa_comp-name OF STRUCTURE <wa> TO <fs>.
here u re taking one field 'wa_comp-name' at a time, and is being assigned to <fs>. now u can put values into <fs> which refers to a field of <wa> at runtime.
U can check with debugger....
at the end of loop use APPEND <wa> to <tab>.
so if u want to pu values from an internal table to this dynamic tabe...use like this...
FIELD-SYMBOLS: <fs_wa> TYPE any,
<fs1> type any.
LOOP at itab ASSIGNING <fa_wa>.
LOOP AT comp_tab INTO wa_comp.
ASSIGN COMPONENT wa_comp-name OF STRUCTURE <wa> TO <fs>. "<---get by field name
ASSIGN COMPONENT wa_comp-name OF STRUCTURE <fs_wa> TO <fs1>. "<---get by field name
IF <fs> IS ASSIGNED.
<fs> = <fs1>. "<----Value
UNASSIGN <fs>.
ENDIF.
ENDLOOP.
APPEND <WA> to <dyn_tab>.
ENDLOOP.
‎2009 Mar 26 8:01 AM
how come the values does not appear in the internal table if i do this?
LOOP AT comp_tab INTO wa_comp.
ASSIGN COMPONENT wa_comp-name OF STRUCTURE <wa> TO <fs>.
IF <fs> IS ASSIGNED.
<fs> = 1.
ENDIF.
ENDLOOP.
APPEND <wa> TO <tab>.
‎2009 Mar 26 8:34 AM
‎2009 Mar 26 4:36 AM
Hi,
Kindly go through these below threads:
/people/subramanian.venkateswaran2/blog/2004/11/19/dynamic-internal-table
Hope it helps
Regards
Mansi