09-19-2007 11:08 AM
Hi ,
Iam going to retreive different fields from different table and displaying it in an ALV format.
do we have to declare an internal table for each table and atlast move all the fields to a final table. from the final table we can display the results in ALV.Is this the only we can do or
can we use one internal table alone to select different fields from different table and to display it in ALV.If it is possible could you please explain me how to do it.
Thanks,
Phyrose.
09-19-2007 11:10 AM
Hi
retrieve data from different tables and populate final internal table which contains all data .
This can be done using inner joins or for all entries.
Now u can display this internal table ( final) using ALV.
Sample code for ALV
REPORT ZALV .
TABLES : VBAP.
TYPE-POOLS : SLIS.
DATA : BEGIN OF ITAB OCCURS 0,
VBELN LIKE VBAP-VBELN,
POSNR LIKE VBAP-POSNR,
ERNAM LIKE VBAP-ERNAM,
ERDAT LIKE VBAP-ERDAT.
DATA : END OF ITAB.
DATA : IT_FIELDCAT TYPE SLIS_T_FIELDCAT_ALV,
WA_FIELDCAT TYPE SLIS_FIELDCAT_ALV.
DATA : WA_LAYOUT TYPE SLIS_LAYOUT_ALV.
SELECT-OPTIONS : S_VBELN FOR VBAP-VBELN.
START-OF-SELECTION.
SELECT VBELN
POSNR
ERNAM
ERDAT
FROM VBAP
INTO CORRESPONDING FIELDS OF TABLE ITAB
WHERE VBELN IN S_VBELN.
PERFORM MODIFY_CAT.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
I_INTERFACE_CHECK = ' '
I_BYPASSING_BUFFER = ' '
I_BUFFER_ACTIVE = ' '
I_CALLBACK_PROGRAM = ' '
I_CALLBACK_PF_STATUS_SET = ' '
I_CALLBACK_USER_COMMAND = ' '
I_CALLBACK_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_TOP_OF_PAGE = ' '
I_CALLBACK_HTML_END_OF_LIST = ' '
I_STRUCTURE_NAME =
I_BACKGROUND_ID = ' '
I_GRID_TITLE =
I_GRID_SETTINGS =
IS_LAYOUT = WA_LAYOUT
IT_FIELDCAT = IT_FIELDCAT
IT_EXCLUDING =
IT_SPECIAL_GROUPS =
IT_SORT =
IT_FILTER =
IS_SEL_HIDE =
I_DEFAULT = 'X'
I_SAVE = ' '
IS_VARIANT =
IT_EVENTS =
IT_EVENT_EXIT =
IS_PRINT =
IS_REPREP_ID =
I_SCREEN_START_COLUMN = 0
I_SCREEN_START_LINE = 0
I_SCREEN_END_COLUMN = 0
I_SCREEN_END_LINE = 0
IT_ALV_GRAPHICS =
IT_HYPERLINK =
IT_ADD_FIELDCAT =
IT_EXCEPT_QINFO =
I_HTML_HEIGHT_TOP =
I_HTML_HEIGHT_END =
IMPORTING
E_EXIT_CAUSED_BY_CALLER =
ES_EXIT_CAUSED_BY_USER =
TABLES
T_OUTTAB = ITAB
EXCEPTIONS
PROGRAM_ERROR = 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.
*END-OF-SELECTION.
*LOOP AT ITAB.
*WRITE : / ITAB-VBELN,
ITAB-POSNR,
ITAB-ERNAM,
ITAB-ERDAT.
*ENDLOOP.
&----
*& Form MODIFY_CAT
&----
text
----
--> p1 text
<-- p2 text
----
FORM MODIFY_CAT .
WA_FIELDCAT-TABNAME = 'ITAB'..
WA_FIELDCAT-FIELDNAME = 'VBELN'.
WA_FIELDCAT-SELTEXT_L = 'SALES DOC'.
WA_FIELDCAT-COL_POS = 1.
WA_FIELDCAT-OUTPUTLEN = 10.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-TABNAME = 'ITAB'..
WA_FIELDCAT-FIELDNAME = 'POSNR'.
WA_FIELDCAT-SELTEXT_L = 'ITEM'.
WA_FIELDCAT-COL_POS = 2.
WA_FIELDCAT-OUTPUTLEN = 6.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-TABNAME = 'ITAB'..
WA_FIELDCAT-FIELDNAME = 'ERNAM'.
WA_FIELDCAT-SELTEXT_L = 'PERSON NAME'.
WA_FIELDCAT-COL_POS = 3.
WA_FIELDCAT-OUTPUTLEN = 12.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_FIELDCAT-TABNAME = 'ITAB'..
WA_FIELDCAT-FIELDNAME = 'ERDAT'.
WA_FIELDCAT-SELTEXT_L = 'DATE'.
WA_FIELDCAT-COL_POS = 4.
WA_FIELDCAT-OUTPUTLEN = 8.
APPEND WA_FIELDCAT TO IT_FIELDCAT.
CLEAR WA_FIELDCAT.
WA_LAYOUT-ZEBRA = 'X'.
*WA_LAYOUT-INFO_FIELDNAME = 'COLOR'.
ENDFORM. " MODIFY_CAT
Regards
vasu
09-19-2007 11:11 AM
HI
U can decalre one final internal table
and use join stt while selecting the data from different tables
regards
sandhya
09-19-2007 11:13 AM
hi camila,
it depends up on the req and the tables & fields the functional people mantioned uin the FS.
if all the fields are coming from 2-3 tables and these 3 tables have key fields to get the combination of data from them then no need to go for another int table declaration.
if it is not like that acoording to the req.
we have to declare tp fetch the req data from different tables and finally populate them into one final internal table .
using that final internal table build the field catelog and popuplate it in ALV fms...
<b>Reward points if useful</b>
09-19-2007 11:18 AM
Hi,
You can follow any of the following steps to display the otuput in ALV.
i) Declare a single internal table(containing fields from different tables), and query a join based on the tables only if it satisfies the following conditions.
a) Fields are to be selected from not more than three tables and
b) Ensure that there are common fields present in all the tables to per form a join.
NOTE: Join on more no of tables will be performance intensive.
ii) Declare any no of internal tables to select the fields from different tables. Declare a final internal table with all the fields that needs to be displayed in ALV.
Move the final data into Final internal table and display it in ALV.
You can follow any of the above steps, depending on the requirement.
Hope this gives some information about selection from different tables.
Regards,
Dilli