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 internal table

Former Member
0 Likes
772

i have to create dynamic internal table without oops concept.

i am useing func.module alv_list_display.

can any one say me how to create internal table without oops concept.

6 REPLIES 6
Read only

Former Member
0 Likes
728

Read in SAP.HELP about Assign statement and obut FIeld-Symbols

BR, JAcek

Message was edited by: Jacek Slowikowski

Message was edited by: Jacek Slowikowski

Read only

0 Likes
728

Hi,

  • This program permits to create or update lines from source table

  • to target table with create internal tables dynamically.

  • If we have also the possibilities to include conditions for selecting

  • data with where dynamic and with syntax-check of this conditions .

Code

**----


    • Program name.: ZSELECT_DYNAMIC - MOSHEG - from version 4.6

  • This program permits to create or update lines from source table

  • to target table with create internal tables dynamically.

  • If we have also the possibilities to include conditions for selecting

  • data with where dynamic and with syntax-check of this conditions .

*----


  • parameters for this program :

*----


  • Source table Z?????

  • Target table Z?????

  • _ client speciifed

*

  • Code line1 for where dynamic

  • line2 for where dynamic

  • line3 for where dynamic

  • line4 for where dynamic

*----


REPORT zselect_dynamic LINE-SIZE 132

LINE-COUNT 65(1)

NO STANDARD PAGE HEADING

MESSAGE-ID z1.

TYPES ztab LIKE dcobjdef-name .

PARAMETERS: tab_name TYPE ztab DEFAULT 'Z?????' ,

tab_nam2 TYPE ztab DEFAULT 'Z?????' ,

pclient AS CHECKBOX .

SELECTION-SCREEN SKIP .

PARAMETERS: where1(80) ,

where2(80) ,

where3(80) ,

where4(80) .

*

DATA : lcode(72),

prog_tab LIKE lcode OCCURS 0 WITH HEADER LINE .

DEFINE append_line.

append &1 to prog_tab.

END-OF-DEFINITION.

DATA: BEGIN OF nametab OCCURS 0.

INCLUDE STRUCTURE dntab.

DATA: END OF nametab.

DATA: BEGIN OF twhere OCCURS 20,

line(80),

END OF twhere.

DATA: zprogram LIKE sy-cprog,

no_line TYPE i,

zmessage(150) ,

count_commit TYPE i .

DATA: d_ref TYPE REF TO data,

d_ref2 TYPE REF TO data ,

lt_alv_cat TYPE TABLE OF lvc_s_fcat,

ls_alv_cat LIKE LINE OF lt_alv_cat.

FIELD-SYMBOLS : TYPE table,

,

,"TYPE ANY ,

,

.

**----


    • Main program.

**----


START-OF-SELECTION.

END-OF-SELECTION.

**----


    • Main program.

**----


PERFORM z_define_itab .

&----


*& Form z_define_itab

&----


FORM z_define_itab .

CHECK ( tab_name(01) = 'Z' OR tab_name(01) = 'Y' )

  • if you want treat tables with your namespace, insert here your code

AND ( tab_nam2(01) = 'Z' OR tab_nam2(01) = 'Y' ) .

REFRESH nametab.

CALL FUNCTION 'NAMETAB_GET'

EXPORTING

langu = sy-langu

tabname = tab_name

TABLES

nametab = nametab

EXCEPTIONS

no_texts_found = 1.

LOOP AT nametab .

ls_alv_cat-fieldname = nametab-fieldname .

ls_alv_cat-ref_table = tab_name.

ls_alv_cat-ref_field = nametab-fieldname .

APPEND ls_alv_cat TO lt_alv_cat.

ENDLOOP.

  • internal table build

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING it_fieldcatalog = lt_alv_cat

IMPORTING ep_table = d_ref .

ASSIGN d_ref->* TO .

IF where1 IS INITIAL AND where2 IS INITIAL

AND where3 IS INITIAL AND where4 IS INITIAL .

SELECT * FROM (tab_name) INTO TABLE .

  • ORDER BY PRIMARY KEY.

ELSE .

PERFORM select_with_where .

ENDIF .

DESCRIBE TABLE LINES sy-tfill .

IF sy-tfill = 0 .

MESSAGE i000 WITH

'Data not selected, verify the tables or conditions ! ' .

STOP .

ELSE .

MESSAGE s000 WITH 'You have successfully treated yours tables.'.

ENDIF .

CREATE DATA d_ref2 TYPE (tab_nam2).

ASSIGN d_ref2->* TO .

LOOP AT ASSIGNING .

CLEAR .

LOOP AT nametab .

ASSIGN COMPONENT nametab-fieldname

OF STRUCTURE TO .

IF sy-subrc <> 0. EXIT. ENDIF.

ASSIGN COMPONENT nametab-fieldname OF STRUCTURE TO .

IF sy-subrc = 0.

= .

ENDIF.

ENDLOOP .

CHECK sy-subrc = 0.

INSERT INTO (tab_nam2) VALUES .

IF sy-subrc NE 0 .

UPDATE (tab_nam2) FROM .

ENDIF .

ADD 1 TO count_commit .

IF count_commit = '10000' .

COMMIT WORK .

count_commit = 0 .

ENDIF .

WRITE : .

ENDLOOP .

ENDFORM. " z_define_itab

&----


*& Form select_with_where

&----


FORM select_with_where.

IF NOT where1 IS INITIAL .

twhere-line = where1 . APPEND twhere .

ENDIF .

IF NOT where2 IS INITIAL .

twhere-line = where2 . APPEND twhere .

ENDIF .

IF NOT where3 IS INITIAL .

twhere-line = where3 . APPEND twhere .

ENDIF .

IF NOT where4 IS INITIAL .

twhere-line = where4 . APPEND twhere .

ENDIF .

REFRESH prog_tab.

append_line 'REPORT ZGEN .'.

append_line 'TABLES:'.

append_line tab_name.

append_line '.'.

append_line 'DATA: ITAB LIKE'.

append_line tab_name.

append_line 'OCCURS 0 WITH HEADER LINE.'.

append_line 'FORM SELECT_TABLE.'.

append_line 'SELECT * FROM'.

append_line tab_name.

IF pclient = 'X'.

append_line 'CLIENT SPECIFIED'.

ENDIF.

append_line 'INTO TABLE ITAB'.

append_line 'WHERE '.

LOOP AT twhere.

append_line twhere.

ENDLOOP.

append_line ' . '.

append_line 'ENDFORM.'.

PERFORM generate_form .

ENDFORM. " select_with_where

&----


*& Form generate_form

&----


FORM generate_form .

GENERATE SUBROUTINE POOL prog_tab NAME zprogram

MESSAGE zmessage LINE no_line .

IF sy-subrc NE 0.

WRITE: / 'Syntax error : ', zmessage,

/ 'in line', no_line .

STOP.

ENDIF.

SELECT * FROM (tab_name) INTO TABLE

WHERE (twhere) .

ENDFORM. " generate_form

rgds,

latheesh

Read only

naimesh_patel
Active Contributor
0 Likes
728

Hello,

See this code:

PARAMETERS: p_tab TYPE dd02l-tabname,

compon TYPE i.

DATA: field1 TYPE c VALUE '5',

field2(2) TYPE c VALUE '10',

field3(6) TYPE c ,

ref_tab TYPE REF TO data.

FIELD-SYMBOLS: <fs> TYPE STANDARD TABLE.

create DATA ref_tab TYPE standard TABLE of (P_TAB).

ASSIGN ref_tab->* TO <fs>.

Regards,

Naimesh

Read only

Former Member
0 Likes
728

hi,

Check the link.

Code posted by Priyank Jain is having dynamic internal table creation without oops concepts.

Regards,

Sailaja.

Read only

uwe_schieferstein
Active Contributor
0 Likes
728

Hello Cyrilvictor

If you have seen the cumbersome solutions without ABAP-OO you may find the following coding attractive even if it is using ABAP-OO:

DATA:
  gd_tabname    TYPE tabname  VALUE 'KNA1',
  gdo_dref      TYPE REF TO DATA.

FIELD-SYMBOLS:
  <gt_itab>     TYPE TABLE.  " must be table


  CREATE DATA gdo_dref TYPE (gd_tabname).
* NOTE: gd_tabname could be any other flat structure

  ASSIGN gdo_dref->* TO <gt_itab>.
* <gt_itab> has the line structure of KNA1

Regards

Uwe

Read only

Former Member
0 Likes
728

Hi cyrilvictor,

1.

For this purpose,

in my program,

there is an INDEPENDENT FORM

whose inputs are

TABLE NAME / STRUCTURE NAME

and from those, it consructs dynamic table.

2. Here is the program.

the dynamic table name will be

<DYNTABLE>.

3. U can use this program (FORM in this program)

to generate any kind of internal table

by specifying TABLE NAME .

4.

REPORT abc.

*----


COMPULSORY

FIELD-SYMBOLS: <dyntable> TYPE ANY TABLE.

FIELD-SYMBOLS: <dynline> TYPE ANY.

DATA: lt TYPE lvc_t_fcat.

DATA: ls TYPE lvc_s_fcat.

FIELD-SYMBOLS: <fld> TYPE ANY.

DATA : fldname(50) TYPE c.

*----


parameters : iname LIKE dd02l-tabname.

*----


START-OF-SELECTION.

*----


PERFORM

PERFORM mydyntable USING lt.

BREAK-POINT.

*----


  • INDEPENDENT FORM

*----


FORM mydyntable USING ptabname.

*----


Create Dyn Table From FC

FIELD-SYMBOLS: <fs_data> TYPE REF TO data.

FIELD-SYMBOLS: <fs_1>.

FIELD-SYMBOLS: <fs_2> TYPE ANY TABLE.

DATA: lt_data TYPE REF TO data.

data : lt TYPE lvc_t_fcat .

DATA : ddfields LIKE ddfield OCCURS 0 WITH HEADER LINE.

*----


CALL FUNCTION 'DD_NAMETAB_TO_DDFIELDS'

EXPORTING

tabname = iname

TABLES

ddfields = ddfields.

.

*----


CONSTRUCT FIELD LIST

LOOP AT ddfields.

ls-fieldname = ddfields-fieldname.

APPEND ls TO lt.

ENDLOOP.

ASSIGN lt_data TO <fs_data>.

CALL METHOD cl_alv_table_create=>create_dynamic_table

EXPORTING

it_fieldcatalog = lt

IMPORTING

ep_table = <fs_data>

EXCEPTIONS

generate_subpool_dir_full = 1

OTHERS = 2.

IF sy-subrc <> 0.

ENDIF.

*----


Assign Dyn Table To Field Sumbol

ASSIGN <fs_data>->* TO <fs_1>.

ASSIGN <fs_1> TO <fs_2>.

ASSIGN <fs_1> TO <dyntable>.

ENDFORM. "MYDYNTABLE

regards,

amit m.