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

Dynamic Itab

Former Member
0 Likes
387

How to create dynamic internal table?

3 REPLIES 3
Read only

Former Member
0 Likes
367

Check this one by Rich:

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

Read only

Former Member
0 Likes
367

hi,

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.

PLEASE REWARD IF HELPFUL

THANKS

VIVEKANAND

Read only

Former Member
0 Likes
367

Hi frend,

Try and use field symbol instead of itab to have a dynamic selection of fields.

Regards,

Ameet