Application Development 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: 

Dynamic internal table

Former Member
0 Kudos

Hi,

any idea, how I can define an internal table with dynamic fields.

I want to create an customizing table with one field and the values from this field, should set the internal table.

e.g. Marc-matnr and marc-vkorg stands inside the customizing table,

internal table should define then with 2 fields like marc-matnr and marc-vkorg.

Any idea?

Regards

Nicole

7 REPLIES 7

bpawanchand
Active Contributor
0 Kudos

Hi

[Check this|http://www.sap-img.com/ab030.htm]

Regards

Pavan

Former Member
0 Kudos

Check this sample code:

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

former_member188685
Active Contributor
0 Kudos

One approach...

populate the fieldcatalog with the fields which you want(matnr etc..)

using the method cl_alv_table_create=>create_dynamic_table

create the dynamic table.

Check the sample code , how to work with Dynamic tables.

Also search in the forum you get lot of posts.

REPORT ztest_dynamic.
 
DATA: t_fcat TYPE lvc_t_fcat,
      itab   type ref to data,
      wa     type ref to data.
data: it_vbap type vbap_t,
      wa_vbap type vbap.
 
field-symbols: <final> type standard table,
               <fs_wa> type any,
               <fs> type any.
 
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
 EXPORTING
   I_STRUCTURE_NAME             = 'VBAP'
  CHANGING
    ct_fieldcat                  = t_fcat
 EXCEPTIONS
   INCONSISTENT_INTERFACE       = 1
   PROGRAM_ERROR                = 2
          .
CALL METHOD cl_alv_table_create=>create_dynamic_table
EXPORTING
it_fieldcatalog = t_fcat
IMPORTING
ep_table = itab.
 
ASSIGN itab->* TO <final>.
 
create data wa like line of <final>.
assign wa->* to <fs_wa>.
 
select * from vbap
into table it_vbap
up to 2 rows.
 
loop at it_vbap into wa_vbap.
 
assign component 'NETPR' of structure <fs_wa> to <fs>.
if sy-subrc eq 0.
  <fs> = wa_vbap-netpr.
  write:/ <fs>.
endif.
 
endloop.

saranwin
Contributor
0 Kudos

HI,

Try the below coding..

TYPES : begin of ls_itab,

matnr type matnr,

vkorg type vkorg,

end of ls_itab.

DATA : lt_itab type table of ls_itab,

wa_itab like line of ls_itab.

Regards,

Saran

0 Kudos

>

> HI,

>

> Try the below coding..

>

> TYPES : begin of ls_itab,

> matnr type matnr,

> vkorg type vkorg,

> end of ls_itab.

>

> DATA : lt_itab type table of ls_itab,

> wa_itab like line of ls_itab.

>

>

> Regards,

> Saran

Great.

Than how can i generate internal table statically?

uwe_schieferstein
Active Contributor
0 Kudos

Hello Nicole

You may want to have a look at [Creating Flat and Complex Internal Tables Dynamically using RTTI |https://wiki.sdn.sap.com/wiki/display/Snippets/CreatingFlatandComplexInternalTablesDynamicallyusingRTTI]

RTTI requires at least SAP release >= 6.20.

Regards

Uwe

Former Member
0 Kudos

Hi,

Just runn this code and follow the comments provided.

type-pools: slis.

field-symbols: <dyn_table> type standard table,

<dyn_wa>.

data: alv_fldcat type slis_t_fieldcat_alv,

it_fldcat type lvc_t_fcat.

selection-screen begin of block b1 with frame title text-001.

parameters: p_flds(5) type c.

selection-screen end of block b1.

start-of-selection.

*build the dynamic internal table

perform build_dyn_itab.

*write 5 records to the alv grid

do 5 times.

perform build_report.

enddo.

*call the alv grid.

perform call_alv.

************************************************************************

*Build_dyn_itab

************************************************************************

form build_dyn_itab.

data: new_table type ref to data,

new_line type ref to data,

wa_it_fldcat type lvc_s_fcat.

*Create fields .

clear wa_it_fldcat.

wa_it_fldcat-fieldname = 'name1'.

wa_it_fldcat-datatype = 'mara-matnr'.

wa_it_fldcat-intlen = 5.

append wa_it_fldcat to it_fldcat .

*

*clear wa_it_fldcat.

wa_it_fldcat-fieldname = sy-index.

wa_it_fldcat-datatype = 'CHAR'.

wa_it_fldcat-intlen = 5.

append wa_it_fldcat to it_fldcat .

*

do p_flds times.

clear wa_it_fldcat.

wa_it_fldcat-fieldname = sy-index.

wa_it_fldcat-datatype = 'CHAR'.

wa_it_fldcat-intlen = 6.

append wa_it_fldcat to it_fldcat .

enddo.

*Create dynamic internal table and assign to FS

call method cl_alv_table_create=>create_dynamic_table

exporting

it_fieldcatalog = it_fldcat

importing

ep_table = new_table.

assign new_table->* to <dyn_table>.

*Create dynamic work area and assign to FS

create data new_line like line of <dyn_table>.

assign new_line->* to <dyn_wa>.

endform.

*********************************************************************

*Form build_report

*********************************************************************

form build_report.

data: fieldname(20) type c.

data: fieldvalue(5) type c.

data: index(3) type c.

field-symbols: <fs1>.

do p_flds times.

index = sy-index.

*Set up fieldvalue

concatenate 'FLD' index into

fieldvalue.

condense fieldvalue no-gaps.

assign component index of structure <dyn_wa> to <fs1>.

<fs1> = fieldvalue.

enddo.

*Append to the dynamic internal table

append <dyn_wa> to <dyn_table>.

endform.

************************************************************************

*CALL_ALV

************************************************************************

form call_alv.

data: wa_cat like line of alv_fldcat.

do p_flds times.

clear wa_cat.

wa_cat-fieldname = sy-index.

wa_cat-seltext_s = sy-index.

wa_cat-outputlen = '6'.

append wa_cat to alv_fldcat.

enddo.

*Call ABAP List Viewer (ALV)

call function 'REUSE_ALV_GRID_DISPLAY'

exporting

it_fieldcat = alv_fldcat

tables

t_outtab = <dyn_table>.

endform.

Hope this helps you,

Murthy.