2008 Sep 26 11:14 AM
Hi All,
Please help me to resolve this Issue.
Internal table - IT which has table name like
KOTH600
KOTH601
KOTH602
KOTH603 , All these table has field KNUMH.
Loop at IT into WA. ( which has table name in it )
select * from (WA-TABNAME) into (New_WA)
where KNUMH = '100010'.
write:/ New_WA - NAME.
Endloop.
Here issue is table name is dynamic and depending upon this New_WA will change. How can I give both table name and work-area dynamic. ( I do not wish to define 4 new work-area, one for each to handle this situation as number of tables will increase going further ).
Thanks in advance,
Regards,
Mayank Rajguru.
Hi All,
Please help me to resolve this Issue.
Internal table - IT which has table name like
KOTH600
KOTH601
KOTH602
KOTH603 , All these table has field KNUMH.
Loop at IT into WA. ( which has table name in it )
select * from (WA-TABNAME) into (New_WA)
where KNUMH = '100010'.
write:/ New_WA - NAME.
Endloop.
Here issue is table name is dynamic and depending upon this New_WA will change. How can I give both table name and work-area dynamic. ( I do not wish to define 4 new work-area, one for each to handle this situation as number of tables will increase going further ).
Thanks in advance,
Regards,
Mayank Rajguru.
2008 Sep 26 12:31 PM
In this example you have what you are looking for. Create dinamyc tables.
REPORT Z_DUMMY_ATG NO STANDARD PAGE HEADING MESSAGE-ID SAPLWOSA.
*=======================================================================
Variables*
*=======================================================================
DATA DESCR_STRUCT_REF TYPE REF TO CL_ABAP_STRUCTDESCR.
DATA WA_FCAT TYPE LVC_S_FCAT.
DATA IT_FIELDCATALOG TYPE LVC_T_FCAT.
DATA DATAREF TYPE REF TO DATA.
DATA: ONE LIKE PCFILE-DRIVE,
TWO LIKE PCFILE-PATH,
LONG TYPE I,
FLAG TYPE C,
FILEPATH(128) TYPE C,
FILE_TAB TYPE STRING,
TABNAME LIKE DD02L-TABNAME.
*=======================================================================
Field-Symbols.*
*=======================================================================
FIELD-SYMBOLS:
<ROW> TYPE ANY TABLE,
<TABLE> TYPE STANDARD TABLE,
<COMPONENT> TYPE ABAP_COMPDESCR,
<FS> TYPE ANY.
*=======================================================================
Selection screen*
*=======================================================================
SELECTION-SCREEN BEGIN OF BLOCK DATA WITH FRAME TITLE TEXT-T01.
PARAMETERS:
TABNAM(128) TYPE C,
FUNCTION(1) TYPE C OBLIGATORY,
LISTNAME LIKE RLGRAP-FILENAME.
SELECTION-SCREEN END OF BLOCK DATA.
*=======================================================================
At Selection screen*
*=======================================================================
AT SELECTION-SCREEN ON VALUE-REQUEST FOR LISTNAME.
PERFORM GET_FILENAME CHANGING LISTNAME.
*=======================================================================
Start-of-selection*
*=======================================================================
START-OF-SELECTION.
CLEAR FLAG.
PERFORM LOAD_DATA USING TABNAM.
PERFORM VERIFY_TABLE USING TABNAM CHANGING FLAG.
IF FLAG NE 'X'.
IF FUNCTION EQ 'D'.
PERFORM CREATE_TABLE USING TABNAM.
PERFORM DOWNLOAD_TABLE USING TABNAM.
ELSE.
PERFORM CREATE_TABLE USING TABNAM.
PERFORM UPLOAD_TABLE USING TABNAM.
ENDIF.
ELSE.
MESSAGE S000 WITH 'The proposed table doesn''t exist.'.
ENDIF.
*----
FORM GET_FILENAME **
*----
Name of the directory.*
*----
FORM GET_FILENAME CHANGING LISTNAME.
CALL FUNCTION 'WS_FILENAME_GET'
EXPORTING
DEF_FILENAME = LISTNAME
DEF_PATH = 'C:\downloads\list'
MASK = ',.,.. '
MODE = 'S'
TITLE = 'Save as'
IMPORTING
FILENAME = LISTNAME
EXCEPTIONS
INV_WINSYS = 1
NO_BATCH = 2
SELECTION_CANCEL = 3
SELECTION_ERROR = 4
OTHERS = 5.
ENDFORM.
*----
FORM LOAD_DATA **
*----
Specifies the path and table name*
*----
FORM LOAD_DATA USING MY_TAB.
DATA: W_FILE LIKE PCFILE-PATH.
W_FILE = LISTNAME.
CALL FUNCTION 'PC_SPLIT_COMPLETE_FILENAME'
EXPORTING
COMPLETE_FILENAME = W_FILE
IMPORTING
DRIVE = ONE
PATH = TWO
EXCEPTIONS
INVALID_DRIVE = 1
INVALID_EXTENSION = 2
INVALID_NAME = 3
INVALID_PATH = 4
OTHERS = 5.
CONCATENATE ONE ':' TWO INTO FILEPATH.
CONCATENATE FILEPATH MY_TAB '.txt' INTO FILE_TAB.
ENDFORM.
*----
FORM DOWNLOAD_TABLE **
*----
Downloads the table data.*
*----
FORM DOWNLOAD_TABLE USING MY_TAB.
*SELECT **
INTO TABLE <ROW>
FROM (MY_TAB).
ASSIGN <ROW> TO <TABLE>.
CALL FUNCTION 'GUI_DOWNLOAD'
EXPORTING
FILENAME = FILE_TAB
FILETYPE = 'ASC'
TABLES
DATA_TAB = <TABLE>
EXCEPTIONS
FILE_WRITE_ERROR = 1
NO_BATCH = 2
GUI_REFUSE_FILETRANSFER = 3
INVALID_TYPE = 4
NO_AUTHORITY = 5
UNKNOWN_ERROR = 6.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Successful Download'
TXT1 = 'All the data from the table'
TXT2 = 'was correctly downloaded.'.
ELSE.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Download Error!'
TXT1 = 'The data of the table'
TXT2 = 'couldn''t be downloaded.'.
ENDIF.
ENDFORM.
*----
FORM UPLOAD_TABLE **
*----
Table Upload.*
*----
FORM UPLOAD_TABLE USING MY_TAB.
ASSIGN <ROW> TO <TABLE>.
CALL FUNCTION 'GUI_UPLOAD'
EXPORTING
FILENAME = FILE_TAB
FILETYPE = 'ASC'
IMPORTING
FILELENGTH = LONG
TABLES
DATA_TAB = <TABLE>
EXCEPTIONS
FILE_OPEN_ERROR = 1
FILE_READ_ERROR = 2
NO_BATCH = 3
GUI_REFUSE_FILETRANSFER = 4
INVALID_TYPE = 5
NO_AUTHORITY = 6
UNKNOWN_ERROR = 7.
MODIFY (MY_TAB) FROM TABLE <TABLE>.
IF SY-SUBRC EQ 0.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Successful Upload'
TXT1 = 'All the data from the table'
TXT2 = 'was correctly uploaded.'.
ELSE.
CALL FUNCTION 'POPUP_TO_INFORM'
EXPORTING
TITEL = 'Upload Error!'
TXT1 = 'The data of the table'
TXT2 = 'couldn''t be uploaded.'.
ENDIF.
ENDFORM.
*----
FORM CREATE_TABLE **
*----
Creates a dynamic internal table.*
*----
FORM CREATE_TABLE USING MY_TAB.
CREATE DATA DATAREF TYPE (MY_TAB).
ASSIGN DATAREF-> TO <FS>.*
DESCR_STRUCT_REF ?= CL_ABAP_TYPEDESCR=>DESCRIBE_BY_DATA( <FS> ).
LOOP AT DESCR_STRUCT_REF->COMPONENTS ASSIGNING <COMPONENT>.
WA_FCAT-FIELDNAME = <COMPONENT>-NAME.
WA_FCAT-REF_TABLE = MY_TAB.
WA_FCAT-REF_FIELD = <COMPONENT>-NAME.
APPEND WA_FCAT TO IT_FIELDCATALOG.
ENDLOOP.
CALL METHOD CL_ALV_TABLE_CREATE=>CREATE_DYNAMIC_TABLE
EXPORTING
IT_FIELDCATALOG = IT_FIELDCATALOG
IMPORTING
EP_TABLE = DATAREF
EXCEPTIONS
GENERATE_SUBPOOL_DIR_FULL = 1
OTHERS = 2.
ASSIGN DATAREF-> TO <ROW>.*
ENDFORM.
*&----
*& Form VERIFY_TABLE
*&----
The table must exist!*
*----
FORM VERIFY_TABLE USING TABNAM CHANGING FLAG.
SELECT SINGLE TABNAME
INTO (TABNAME)
FROM DD02L
WHERE TABNAME EQ TABNAM.
IF SY-SUBRC NE 0.
FLAG = 'X'.
ENDIF.
ENDFORM.
2008 Sep 26 12:37 PM
Hi,
you can determine both internal table and workarea during runtime. If you give any database table as input it will retrieve all record of it.
Check this code
REPORT Z_RTTC.
PARAMETERS:
p_tab TYPE dd02l-tabname . " Input data table name
FIELD-SYMBOLS:
<fsym_itab> TYPE ANY TABLE, " Field symbol for internal table
<fsym_warea> TYPE ANY, " Field symbol for work area
<fsym_field> TYPE ANY. " Field symbol for field value
DATA:
ref_rowtype
TYPE REF TO cl_abap_structdescr, " Rowtype ref to RTTS
ref_tabletype
TYPE REF TO cl_abap_tabledescr. " Internal table type ref to RTTS
DATA:
ref_wa TYPE REF TO data, " Declaration of work area instance
ref_itab TYPE REF TO data. " Declaration of internal table instance
*"---------------------------------------------------------------------
* START-OF-SELECTION
*"---------------------------------------------------------------------
START-OF-SELECTION.
* Create row type and tabletype by RTTC technique
ref_rowtype ?= cl_abap_typedescr=>describe_by_name( p_tab ).
ref_tabletype = cl_abap_tabledescr=>create( p_line_type = ref_rowtype).
* Object type created by RTTC.
CREATE DATA ref_itab TYPE HANDLE ref_tabletype.
CREATE DATA ref_wa TYPE HANDLE ref_rowtype.
*Type assignment
ASSIGN ref_itab->* TO <fsym_itab>.
ASSIGN ref_wa->* TO <fsym_warea>.
* Value assignment to the internal table
SELECT *
FROM (p_tab)
INTO TABLE <fsym_itab>.
* Display Output
LOOP AT <fsym_itab> INTO <fsym_warea>.
DO.
ASSIGN COMPONENT sy-index OF STRUCTURE <fsym_warea> TO
<fsym_field>.
IF sy-subrc NE 0.
NEW-LINE. " Shift Cursor to next line
EXIT. " EXIT to next work area
ENDIF. " IF sy-subrc NE 0.
WRITE <fsym_field>.
ENDDO.
ENDLOOP. " LOOP AT <fsym_itab> INTO <fsym_warea>.Regards,
Anirban
2008 Sep 30 10:33 PM
Check this out: [Dynamic Internal Table Creation and selection|http://help-abap.blogspot.com/2008/09/dynamic-internal-table-creation.html]
Regards,
Naimesh Patel
| User | Count |
|---|---|
| 3 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |