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 structure for different tables

Former Member
0 Likes
1,055

Hi All,

My requirement is, a table has to be given in the selection-screen and i have to download the data of that particular table.

My doubt is, here we are passing the table names dynamically, so how can we assign the structure to the different tables.

Any clues...

Senthil.

6 REPLIES 6
Read only

Former Member
0 Likes
877
Hi

  Maybe the below code can help you.

*
TYPES: c80(80).
DATA: i_src TYPE STANDARD TABLE OF c80 WITH HEADER LINE.
*DATA: lin TYPE i.
*DATA: msg(240).
FIELD-SYMBOLS: <field> TYPE ANY.
DATA: headline(255).

PARAMETERS: p_tab TYPE dd03l-tabname OBLIGATORY VALUE CHECK.
DATA: tabstr LIKE p_tab.
DATA: layout(3).  " 'A' = ALV, 'L' = ABAP-Liste

SELECTION-SCREEN BEGIN OF BLOCK layout WITH FRAME TITLE text-001
                                       NO INTERVALS.
PARAMETERS:        p_alv  RADIOBUTTON GROUP layo.
PARAMETERS:        p_list RADIOBUTTON GROUP layo.
SELECTION-SCREEN END   OF BLOCK layout.


DEFINE src.
  concatenate &1 &2 &3 &4 into i_src separated by space.
  append i_src.
END-OF-DEFINITION.


START-OF-SELECTION.
  CONCATENATE '''' p_tab '''' INTO tabstr.
  CASE 'X'.
    WHEN p_alv.
      layout = '''A'''.
    WHEN p_list.
      layout = '''L'''.
  ENDCASE.
  src 'REPORT' p_tab '.' ''.
  src 'DATA I_TAB TYPE STANDARD TABLE OF' p_tab '.' ''.
  src 'FORM GETTAB.' '' '' ''.
  src 'PERFORM CALLBACK IN PROGRAM' sy-repid '' ''.
  src '        TABLES I_TAB USING' tabstr layout 'IF FOUND.'.
  src 'ENDFORM.' '' '' ''.
  GENERATE SUBROUTINE POOL i_src NAME p_tab. " LINE lin MESSAGE msg.
  PERFORM gettab IN PROGRAM (p_tab) IF FOUND.


TOP-OF-PAGE.
  CHECK NOT headline IS INITIAL.
  FORMAT COLOR COL_HEADING.
  WRITE headline.
  ULINE.


*---------------------------------------------------------------------*
*       FORM callback                                                 *
*---------------------------------------------------------------------*
*       Sämtliche Verarbeitung muss in dieser Routine liegen          *
*---------------------------------------------------------------------*
*  -->  TAB         Tabelle                                           *
*  -->  TABNAME     Name der Tabelle                                  *
*  -->  LAYOUT_TYP  Gewünschtes Layout 'A' = ALV-Grid, 'L' = Liste    *
*---------------------------------------------------------------------*
FORM callback TABLES tab TYPE STANDARD TABLE
              USING value(tabname) TYPE dd02l-tabname
                    value(layout_typ).

  DATA: typ,
        len TYPE i,
        pos TYPE i,
        last_field TYPE i.
  TYPES: BEGIN OF ty_header,
           position TYPE dd03l-position,
           reptext  TYPE dd04t-reptext,
         END   OF ty_header.
  DATA: headers TYPE STANDARD TABLE OF ty_header WITH HEADER LINE.

  SELECT * INTO TABLE tab FROM (tabname).
  CHECK sy-subrc = 0.
  IF NOT sy-batch IS INITIAL.
    layout_typ = 'L'.
  ENDIF.
  CASE layout_typ.
    WHEN 'A'.
      CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
           EXPORTING
                i_structure_name = tabname
           TABLES
                t_outtab         = tab
           EXCEPTIONS
                program_error    = 0
                OTHERS           = 0.
    WHEN 'L'.
*     Ermitteln der Feldtexte
      SELECT dd03l~position dd04t~reptext
             INTO TABLE headers
             FROM dd03l
             INNER JOIN dd04t
             ON dd04t~rollname = dd03l~rollname
             WHERE dd03l~tabname = tabname AND
                   dd04t~ddlanguage = sy-langu AND
                   dd04t~as4local = 'A' AND
                   dd04t~as4vers = 0
             ORDER BY dd03l~position.
*     Ermitteln des letzten auszugebenden Feldes und
*     Festlegung der Überschrift
      FORMAT COLOR COL_HEADING.
      CLEAR pos.
      READ TABLE tab INDEX 1.
      DO.
        CHECK sy-index > 1.
        ASSIGN COMPONENT sy-index OF STRUCTURE tab TO <field>.
        IF sy-subrc NE 0.
          EXIT.
        ENDIF.
        DESCRIBE FIELD <field> OUTPUT-LENGTH len TYPE typ.
        READ TABLE headers INDEX sy-index.
*       Überschriften numerischer Felder rechtsbündig
        IF typ CA 'NPIF'.
          WRITE headers-reptext(len) TO headline+pos(len)
                RIGHT-JUSTIFIED.
        ELSE.
          WRITE headers-reptext(len) TO headline+pos(len).
        ENDIF.
        last_field = sy-index.
        pos = pos + len + 1.
        IF pos > 254.
          EXIT.
        ENDIF.
      ENDDO.
      WRITE AT sy-linsz ''.
      FORMAT COLOR COL_BACKGROUND INTENSIFIED OFF.
*     Ausgabe der Tabelle
      LOOP AT tab.
        NEW-LINE.
        DO last_field TIMES.
          CHECK sy-index > 1.
          ASSIGN COMPONENT sy-index OF STRUCTURE tab TO <field>.
          WRITE: <field>.
        ENDDO.
      ENDLOOP.
  ENDCASE.
ENDFORM.

Thanks to the original progam provider.

Kind Regards
Eswar

Read only

Former Member
0 Likes
877

Use the statement

parameters: p_table like DD02L-TABNAME.

field-symbols: <fs> type any.

assign (p_table) to <fs>.

then use

assign (p_table) to <fs>.

select * rows

from (p_table)

into <fs>

where <where condition>.

write:/ <fs>-field1.

endselect.

Regards,

Ravi

Read only

Former Member
0 Likes
877

Hi senthil,

try this..

REPORT YCHATEST.

TYPE-POOLS : SLIS.

PARAMETERS : P_TABLE LIKE DD02L-TABNAME DEFAULT 'SFLIGHT'.
FIELD-SYMBOLS : <FS_TABLE> TYPE c.
DATA : IT_FCAT TYPE SLIS_T_FIELDCAT_ALV,
       TAB_NAME(25).


ASSIGN P_TABLE TO <FS_TABLE>.
<FS_TABLE> = P_TABLE .

CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
  EXPORTING
    I_PROGRAM_NAME   = SY-REPID
    I_STRUCTURE_NAME = <FS_TABLE>
    I_INCLNAME       = SY-REPID
  CHANGING
    CT_FIELDCAT      = IT_FCAT.

u can use it_fcat as the dynamic structure

Read only

former_member186741
Active Contributor
0 Likes
877

Check this out:

REPORT ZNRW_DYN_TAB_TEST.

PARAMETERS : P_TAB(30) DEFAULT 'VBAK'.

parameters p_recs(3) type n default 20.

data : QUERY_TABLE(30).

QUERY_TABLE = P_TAB.

DATA DREF TYPE REF TO DATA.

DATA tabDREF TYPE REF TO DATA.

FIELD-SYMBOLS <struc> TYPE ANY.

FIELD-SYMBOLS <tab> TYPE table.

CREATE DATA DREF TYPE (QUERY_TABLE).

ASSIGN DREF->* TO <struc>.

CREATE DATA tabdref TYPE table OF (QUERY_TABLE).

ASSIGN tabDREF->* TO <tab>.

SELECT single * UP TO p_recs ROWS FROM (QUERY_TABLE) INTO <struc> .

append <struc> to <tab>.

Read only

Former Member
0 Likes
877

Hi senthil,

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.

select * from (iname)

into table <dyntable>.

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.

Read only

Laxmana_Appana_
Active Contributor
0 Likes
877

Hi,

Check this code , this program display the output in ALV for the entered table name (any), also fetchs the records based on the entered number of rows on the selection screen. you can give where condition also, based on where condition it will bring the rows from the table.

REPORT Y_Dynamic_Table LINE-SIZE 250 .

TYPE-POOLS: slis. " ALV Global Types

DATA: BEGIN OF ty_work ,

buffer(30000),

END OF ty_work.

DATA : work LIKE ty_work OCCURS 0 WITH HEADER LINE,

ws_rec LIKE sy-tabix,

ws_repname LIKE tbprogref-progname,

ws_tabname LIKE dd03l-tabname,

i_fields LIKE dd03l OCCURS 0 WITH HEADER LINE,

ws_flag(1) TYPE c.

FIELD-SYMBOLS <d>.

ASSIGN COMPONENT 0 OF STRUCTURE work TO <d>.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME.

PARAMETERS : p_mandt LIKE t000-mandt,

p_rows LIKE rseumod-tbmaxsel DEFAULT 100.

SELECTION-SCREEN END OF BLOCK b2.

SELECTION-SCREEN: FUNCTION KEY 1.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME.

PARAMETERS : p_tab LIKE dd03l-tabname OBLIGATORY MEMORY ID dtb,

p_opt LIKE rfc_db_opt-text.

SELECTION-SCREEN END OF BLOCK b1.

FIELD-SYMBOLS :

<lt_data> TYPE table. " Data to display

DATA:

lp_table TYPE REF TO data,

ls_layout TYPE slis_layout_alv.

FIELD-SYMBOLS: <wa> TYPE ANY, <comp> TYPE ANY.

ASSIGN work TO <wa> CASTING TYPE (p_tab).

  • Create internal table

CREATE DATA lp_table TYPE STANDARD TABLE OF (p_tab)

WITH NON-UNIQUE DEFAULT KEY.

ASSIGN lp_table->* TO <lt_data>.

START-OF-SELECTION.

TRANSLATE p_opt TO UPPER CASE. "#EC SYNTCHAR

  • Read data

SELECT * FROM (p_tab)

CLIENT SPECIFIED

INTO CORRESPONDING FIELDS OF TABLE <lt_data>

UP TO p_rows ROWS

WHERE mandt = p_mandt

AND (p_opt)

ORDER BY PRIMARY KEY.

DESCRIBE TABLE <lt_data> LINES ws_rec.

ls_layout-zebra = 'X'.

ls_layout-colwidth_optimize = 'X'.

CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'

EXPORTING

i_structure_name = p_tab

is_layout = ls_layout

TABLES

t_outtab = <lt_data>.

Regards

Appana

*Reward points for useful answers