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

can we create internal table dynamically ? how?

Former Member
0 Likes
433

hi to all experts,

can we create internal table dynamically ? how?plz explain me with an example.Anybody with good example will be rewarded.it was asked in an interview what the answer for it

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
412

hi,

check this sample program............

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.

-


or Just try out this simpler dynamic internal tables

DATA: itab TYPE STANDARD TABLE OF spfli,

wa LIKE LINE OF itab.

DATA: line(72) TYPE c,

list LIKE TABLE OF line(72).

START-OF-SELECTION.

*line = ' CITYFROM CITYTO '.

line = ' AIRPTO '.

APPEND line TO list.

SELECT DISTINCT (list)

INTO CORRESPONDING FIELDS OF TABLE itab

FROM spfli.

IF sy-subrc EQ 0.

LOOP AT itab INTO wa.

  • WRITE: / wa-cityfrom, wa-cityto.

WRITE 😕 wa-airpto.

ENDLOOP.

ENDIF.

3 REPLIES 3
Read only

Former Member
0 Likes
413

hi,

check this sample program............

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.

-


or Just try out this simpler dynamic internal tables

DATA: itab TYPE STANDARD TABLE OF spfli,

wa LIKE LINE OF itab.

DATA: line(72) TYPE c,

list LIKE TABLE OF line(72).

START-OF-SELECTION.

*line = ' CITYFROM CITYTO '.

line = ' AIRPTO '.

APPEND line TO list.

SELECT DISTINCT (list)

INTO CORRESPONDING FIELDS OF TABLE itab

FROM spfli.

IF sy-subrc EQ 0.

LOOP AT itab INTO wa.

  • WRITE: / wa-cityfrom, wa-cityto.

WRITE 😕 wa-airpto.

ENDLOOP.

ENDIF.

Read only

Former Member
0 Likes
412

HI

Yes you can create

see this

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

JUST USE THIS CODE AND DO THE ESSENTIAL CHANGES ACCORDING TO YOU

  • STEP: 1 - get backend field catalog (currently displayed alv)

CLEAR: tl_fieldcatalog. REFRESH: tl_fieldcatalog.

CALL METHOD w_grid->get_backend_fieldcatalog

IMPORTING

et_fieldcatalog = tl_fieldcatalog.

  • STEP: 2 - create a new fieldcatalog for dynamic internal table

CLEAR: sl_fieldcatalog.

CLEAR: t_outtab_fieldname. REFRESH: t_outtab_fieldname.

CLEAR: tl_fieldcatalog_new. REFRESH: tl_fieldcatalog_new.

CLEAR: t_download_fieldname. REFRESH: t_download_fieldname.

CLEAR: t_download_fieldheading. REFRESH: t_download_fieldheading.

LOOP AT tl_fieldcatalog INTO sl_fieldcatalog.

  • STEP: 2.1 - populate data in T_OUTTAB_FIELDNAME

APPEND sl_fieldcatalog-fieldname TO t_outtab_fieldname.

  • STEP: 2.2 - populate TL_FIELDCATALOG_NEW & T_DOWNLOAD_FIELDNAME

IF sl_fieldcatalog-no_out EQ ''.

IF sl_fieldcatalog-fieldname NE 'STATUS'

OR sl_fieldcatalog-fieldname NE 'MESG_STATUS'

OR sl_fieldcatalog-fieldname NE 'ZLOCK'

OR sl_fieldcatalog-fieldname NE 'T_PLANT'

OR sl_fieldcatalog-fieldname NE 'T_CSR'.

  • If field is COMM_PLANT, change its length

IF sl_fieldcatalog-fieldname EQ 'COMM_PLANT'.

sl_fieldcatalog-outputlen = 1800.

sl_fieldcatalog-intlen = 1800.

sl_fieldcatalog-dd_outlen = 1800.

ENDIF. "comm_plant

sl_fieldcatalog_new = sl_fieldcatalog.

APPEND sl_fieldcatalog_new TO tl_fieldcatalog_new.

APPEND sl_fieldcatalog-fieldname TO t_download_fieldname.

APPEND sl_fieldcatalog-scrtext_l TO t_download_fieldheading.

CLEAR: sl_fieldcatalog, sl_fieldcatalog_new.

ENDIF.

ENDIF.

ENDLOOP.

  • STEP: 3 - create dynamic internal table

FREE: ref_download.

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

  • I_STYLE_TABLE =

it_fieldcatalog = tl_fieldcatalog_new

IMPORTING

ep_table = ref_download

  • E_STYLE_FNAME =

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.

ASSIGN ref_download->* TO <ft_download>.

CREATE DATA ref_wa LIKE LINE OF <ft_download>.

ASSIGN ref_wa->* TO <fs_download>.

  • STEP: 4 - populate data in dynamic internal table

LOOP AT t_outtab INTO wa_outtab.

LOOP AT t_download_fieldname.

ASSIGN COMPONENT t_download_fieldname OF STRUCTURE

<fs_download> TO <fs_download_field>.

IF t_download_fieldname-field EQ 'COMM_PLANT'.

  • STEP: 4.1 - get long text from database table

CLEAR: wal_table.

SELECT SINGLE * FROM zshaven_plnt_txt

INTO wal_table

WHERE vbeln = wa_outtab-vbeln

AND posnr = wa_outtab-posnr

AND del_no = wa_outtab-del_no

AND del_itm = wa_outtab-del_itm.

IF sy-subrc EQ 0.

  • STEP: 4.2 - break long-text into separate lines

CLEAR: tl_text. REFRESH: tl_text.

SPLIT wal_table-plant_comm

AT '~'

INTO TABLE tl_text.

  • STEP: 4.3 - Combine these separate lines with space in

  • between two lines

CLEAR: wal_text, final_text.

LOOP AT tl_text INTO wal_text.

IF final_text IS INITIAL.

final_text = wal_text.

ELSE.

CONCATENATE final_text '-' wal_text

INTO final_text.

REPLACE '-' WITH ' ' INTO final_text.

ENDIF.

ENDLOOP.

  • STEP: 4.4 - move long text to work-area

<fs_download_field> = final_text.

ENDIF. "subrc

ELSE. "t_download_fieldname

READ TABLE t_outtab_fieldname

WITH KEY field = t_download_fieldname-field.

ASSIGN COMPONENT t_outtab_fieldname-field OF STRUCTURE

wa_outtab TO <fs_outtab_field>.

<fs_download_field> = <fs_outtab_field>.

ENDIF.

ENDLOOP.

  • STEP: 4.5 - Move data from work-area to dynamic internal table

APPEND <fs_download> TO <ft_download>.

CLEAR: <fs_download>.

ENDLOOP.

  • STEP: 5 - download

CALL FUNCTION 'DOWNLOAD'

EXPORTING

filename = 'C:\zshaven.xls'

filetype = 'DAT'

filetype_no_show = 'X'

filetype_no_change = 'X'

TABLES

data_tab = <ft_download>

fieldnames = t_download_fieldheading

EXCEPTIONS

invalid_filesize = 1

invalid_table_width = 2

invalid_type = 3

no_batch = 4

unknown_error = 5

gui_refuse_filetransfer = 6

customer_error = 7

OTHERS = 8.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ENDIF.

Read only

Former Member
0 Likes
412

Hi,

You can very well create internal tables dynamically.

Please check the below links for more details on it.

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

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

Reward if useful.

Regards

Sayee