‎2006 Aug 18 9:48 AM
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.
‎2006 Aug 18 9:54 AM
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
‎2006 Aug 18 10:09 AM
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
‎2006 Aug 18 10:27 AM
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
‎2006 Aug 18 11:27 AM
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>.
‎2006 Aug 18 11:37 AM
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.
‎2006 Aug 18 12:11 PM
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