10-10-2007 2:08 AM
How to display 2 ALV grids at the same time ie data is available in 2 internal tables..
10-10-2007 2:13 AM
Hi Renu,
Welcome to SDN
It is not possible to display two ALV at the same time but if the data is linked to each other such as master data- and its details then there are other approaches to show those data in the same ALV.
Regards,
Atish
10-10-2007 2:15 AM
Welcome to SDN
Check the sample program BALVBT01 which uses the function modules
REUSE_ALV_BLOCK_LIST_APPEND
REUSE_ALV_BLOCK_LIST_DISPLAY
Regards
Gopi
10-10-2007 5:13 AM
<b>you can check all Std ALV with BCALV* or RSDEMO* in SE38</b>
Rewards if useful.................
Minal
10-10-2007 5:15 AM
Hi,
You can use the OO alv to display the two grids..By creating two containers in the module pool screen..And create two new grids for those containers..
You can check BALVGRID* programs
Thanks
Naren
10-10-2007 5:20 AM
10-10-2007 5:26 AM
Hi
we con do it using block list display.
see this code.
REPORT ZBHALV_BLOCK_LIST.
TABLES:LFA1,EKKO.
SELECT-OPTIONS:LIFNR FOR LFA1-LIFNR.
DATA:BEGIN OF ITAB OCCURS 0,
LIFNR LIKE LFA1-LIFNR,
NAME1 LIKE LFA1-NAME1,
LAND1 LIKE LFA1-LAND1,
ORT01 LIKE LFA1-ORT01,
REGIO LIKE LFA1-REGIO,
END OF ITAB.
DATA:BEGIN OF JTAB OCCURS 0,
LIFNR LIKE EKKO-LIFNR,
EBELN LIKE EKKO-EBELN,
BUKRS LIKE EKKO-BUKRS,
BSTYP LIKE EKKO-BSTYP,
EKORG LIKE EKKO-EKORG,
BSART LIKE EKKO-BSART,
END OF JTAB.
SELECT * FROM LFA1 INTO CORRESPONDING FIELDS OF TABLE ITAB WHERE LIFNR
IN LIFNR.
SELECT * FROM EKKO INTO CORRESPONDING FIELDS OF TABLE JTAB WHERE LIFNR
IN LIFNR.
TYPE-POOLS:SLIS.
DATA:LAYOUT TYPE slis_layout_alv.
DATA:EVE TYPE slis_t_event WITH HEADER LINE.
DATA:EVE1 TYPE slis_t_event WITH HEADER LINE.
DATA:HEAD TYPE slis_t_listheader WITH HEADER LINE.
DATA:FCAT TYPE slis_t_fieldcat_alv.
DATA:FCAT1 TYPE slis_t_fieldcat_alv.
LAYOUT-ZEBRA = 'X'.
LAYOUT-colwidth_optimize = 'X'.
LAYOUT-WINDOW_TITLEBAR = 'VENDOR DETAILS SCREEN'.
EVE1-NAME = 'TOP_OF_PAGE'.
EVE1-FORM = 'TOP_OF_PAGE1'.
APPEND EVE1.
CALL FUNCTION 'REUSE_ALV_EVENTS_GET'
EXPORTING
I_LIST_TYPE = 0
IMPORTING
ET_EVENTS = EVE[]
EXCEPTIONS
LIST_TYPE_WRONG = 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.
READ TABLE EVE WITH KEY NAME = 'TOP_OF_PAGE'.
EVE-FORM = 'TOP_OF_PAGE'.
MODIFY EVE TRANSPORTING FORM WHERE NAME = 'TOP_OF_PAGE'.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
I_CALLBACK_PROGRAM = SY-REPID
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* IT_EXCLUDING =
.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = 'ITAB'
* I_STRUCTURE_NAME =
* I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = SY-REPID
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = FCAT
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FCAT
I_TABNAME = 'ITAB'
IT_EVENTS = EVE[]
* IT_SORT =
* I_TEXT = ' '
TABLES
T_OUTTAB = ITAB
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = SY-REPID
I_INTERNAL_TABNAME = 'JTAB'
* I_STRUCTURE_NAME =
* I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = SY-REPID
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
CT_FIELDCAT = FCAT1
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
IS_LAYOUT = LAYOUT
IT_FIELDCAT = FCAT1
I_TABNAME = 'JTAB'
IT_EVENTS = EVE1[]
* IT_SORT =
* I_TEXT = ' '
TABLES
T_OUTTAB = JTAB
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
* EXPORTING
* I_INTERFACE_CHECK = ' '
* IS_PRINT =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
* 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.
FORM TOP_OF_PAGE.
REFRESH HEAD.
HEAD-TYP = 'H'.
HEAD-INFO = 'VENDORS DETAILS'.
APPEND HEAD.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEAD[]
* I_LOGO =
* I_END_OF_LIST_GRID =
.
ENDFORM.
FORM TOP_OF_PAGE1.
REFRESH HEAD.
HEAD-TYP = 'H'.
HEAD-INFO = 'PURCHASE DOCCUMENTS DETAILS'.
APPEND HEAD.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
IT_LIST_COMMENTARY = HEAD[]
* I_LOGO =
* I_END_OF_LIST_GRID =
.
ENDFORM.
i am sending you a program in which
the out of the report is displayed in the 2 different table in a single screen
i think it will be very usefull for you
execute this and see how its works
tables: mara,spfli.
types: begin of ty_tab,
matnr type mara-matnr,
ernam type mara-ernam,
ersda type mara-ersda,
end of ty_tab.
DATA ITAB1 TYPE TABLE OF SPFLI.
DATA WA1 LIKE LINE OF ITAB1.
DATA IO1 TYPE SPFLI-CARRID VALUE 'AA'.
data itab type table of ty_tab.
data wa like line of itab.
DATA OK_CODE TYPE SY-UCOMM.
DATA: GRID TYPE REF TO CL_GUI_ALV_GRID,
CONT TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA: GRID1 TYPE REF TO CL_GUI_ALV_GRID,
CONTA TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
CREATE OBJECT CONT EXPORTING CONTAINER_NAME = 'CONT1' .
CREATE OBJECT GRID EXPORTING I_PARENT = CONT .
CREATE OBJECT CONTA EXPORTING CONTAINER_NAME = 'CONT2' .
CREATE OBJECT GRID1 EXPORTING I_PARENT = CONTA .
selection-screen begin of block b1 with frame title text-100.
select-options: s_matnr for mara-matnr.
selection-screen end of block b1.
select matnr ernam ersda from mara into corresponding fields of table itab up to 15 rows
where matnr in s_matnr .
call selection-screen 100.
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE USER_COMMAND_0100 INPUT.
if ok_code = 'PB1'.
leave to screen 0.
else.
leave to screen 100.
endif.
ENDMODULE. " USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
MODULE STATUS_0100 OUTPUT.
* SET PF-STATUS 'xxxxxxxx'.
* SET TITLEBAR 'xxx'.
SELECT * FROM SPFLI INTO
CORRESPONDING FIELDS OF TABLE ITAB1 WHERE CARRID = IO1.
CALL METHOD grid->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
* I_BUFFER_ACTIVE =
* I_BYPASSING_BUFFER =
* I_CONSISTENCY_CHECK =
I_STRUCTURE_NAME = 'MARA'
* IS_VARIANT =
* I_SAVE =
* I_DEFAULT = 'X'
* IS_LAYOUT =
* IS_PRINT =
* IT_SPECIAL_GROUPS =
* IT_TOOLBAR_EXCLUDING =
* IT_HYPERLINK =
* IT_ALV_GRAPHICS =
* IT_EXCEPT_QINFO =
* IR_SALV_ADAPTER =
CHANGING
IT_OUTTAB = itab.
* IT_FIELDCATALOG =
* IT_SORT =
* IT_FILTER =
* EXCEPTIONS
* INVALID_PARAMETER_COMBINATION = 1
* PROGRAM_ERROR = 2
* TOO_MANY_LINES = 3
* others = 4
.
IF SY-SUBRC <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY
EXPORTING
I_STRUCTURE_NAME = 'SPFLI'
CHANGING
IT_OUTTAB = ITAB1.
ENDMODULE. " STATUS_0100 OUTPUT
<b>You need to use the functions for Bloacked ALV.</b>
The functions generally used are
1.REUSE_ALV_BLOCK_LIST_INIT
2.REUSE_ALV_BLOCK_LIST_APPEND
3.REUSE_ALV_BLOCK_LIST_DISPLAY.
Here is a sample code which does the same
INCLUDE ZAR_ALV_BLOCK_TOP.
start-of-selection.
select matnr werks
up to 10 rows
into table it_1
from marc.
select matnr werks lgort labst
up to 10 rows
into table it_2
from mard.
*wa_cat-fieldname = 'MATNR'.
*append wa_cat to cat1..
*
*wa_cat-fieldname = 'WERKS'.
*append wa_cat to cat1..
*
*CAT2[] = CAT1[].
*wa_cat-fieldname = 'LGORT'.
*append wa_cat to cat2.
v_rep = sy-repid.
BREAK-POINT.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_rep
I_INTERNAL_TABNAME = 'IT_1'
* I_STRUCTURE_NAME =
* I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_rep
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = CAT1
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_FIELDCATALOG_MERGE'
EXPORTING
I_PROGRAM_NAME = v_rep
I_INTERNAL_TABNAME = 'IT_2'
* I_STRUCTURE_NAME =
* I_CLIENT_NEVER_DISPLAY = 'X'
I_INCLNAME = v_rep
* I_BYPASSING_BUFFER =
* I_BUFFER_ACTIVE =
CHANGING
ct_fieldcat = CAT2
* EXCEPTIONS
* INCONSISTENT_INTERFACE = 1
* PROGRAM_ERROR = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_INIT'
EXPORTING
i_callback_program = v_rep
* I_CALLBACK_PF_STATUS_SET = ' '
* I_CALLBACK_USER_COMMAND = ' '
* IT_EXCLUDING =
.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = ls_layo
it_fieldcat = cat1
i_tabname = 'table_1'
it_events = event
* IT_SORT =
* I_TEXT = ' '
tables
t_outtab = it_1
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_APPEND'
EXPORTING
is_layout = ls_layo
it_fieldcat = cat2
i_tabname = 'table_1'
it_events = event
* IT_SORT =
* I_TEXT = ' '
tables
t_outtab = it_2
* EXCEPTIONS
* PROGRAM_ERROR = 1
* MAXIMUM_OF_APPENDS_REACHED = 2
* OTHERS = 3
.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
CALL FUNCTION 'REUSE_ALV_BLOCK_LIST_DISPLAY'
* EXPORTING
* I_INTERFACE_CHECK = ' '
* IS_PRINT =
* I_SCREEN_START_COLUMN = 0
* I_SCREEN_START_LINE = 0
* I_SCREEN_END_COLUMN = 0
* I_SCREEN_END_LINE = 0
* IMPORTING
* E_EXIT_CAUSED_BY_CALLER =
* ES_EXIT_CAUSED_BY_USER =
* 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.
The code for include ZAR_ALV_BLOCK_TOP is as below
type-pools : slis.
data : Begin of it_1 occurs 0,
matnr like marc-matnr ,
werks like marc-werks ,
End of it_1.
data : Begin of it_2 occurs 0 ,
matnr like marc-matnr ,
werks like marc-werks ,
lgort like mard-lgort,
labst like mard-labst ,
End of it_2.
*Data : it_1 type table of ty_1 ,
* it_2 type table of ty_2 ,
* v_rep type sy-repid.
data : v_rep type sy-repid.
*--> Varaibles for ALV
Data : cat1 type slis_t_fieldcat_alv,
cat2 type slis_t_fieldcat_alv,
wa_cat like line of cat1,
event type SLIS_T_EVENT ,
ls_layo type slis_layout_alv.
The include is not actually required , if you are creaitng the field catalog manually.
<b>Reward if usefull</b>
10-10-2007 5:27 AM
Hi,
using OOalv(Object Oriented alv)u can display more than one grids in a screen.
DATA:t_mara TYPE TABLE OF mara.
DATA:t_lfa1 TYPE TABLE OF lfa1.
DATA:FCAT TYPE LVC_T_FCAT.
DATA:FCAT1 TYPE LVC_T_FCAT.
DATA:G_CONTAINER TYPE SCRFNAME VALUE 'TABC',"TABC is *container in screen 101
GRID TYPE REF TO CL_GUI_ALV_GRID,
G_CUSTOM_CONTAINER TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
DATA:G_CONTAINER1 TYPE SCRFNAME VALUE 'TABC1',"TABC1 is *container in screen 101
GRID1 TYPE REF TO CL_GUI_ALV_GRID,
G_CUSTOM_CONTAINER1 TYPE REF TO CL_GUI_CUSTOM_CONTAINER.
set screen 101.
MODULE STATUS_0101 output.
IF G_CUSTOM_CONTAINER IS INITIAL.
CREATE OBJECT G_CUSTOM_CONTAINER "CREATING OBJECT FOR CUSTOM *CONTAINER
EXPORTING CONTAINER_NAME = G_CONTAINER.
CREATE OBJECT GRID "CREATING GRID
EXPORTING I_PARENT = G_CUSTOM_CONTAINER.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'MARA'
CHANGING
CT_FIELDCAT = FCAT[].
SELECT * from mara into table t_mara.
CALL METHOD GRID->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_FIELDCATALOG = FCAT[]
IT_OUTTAB = t_MARA.
ENDIF.
IF G_CUSTOM_CONTAINER1 IS INITIAL.
CREATE OBJECT G_CUSTOM_CONTAINER1 "CREATING OBJECT FOR *CUSTOM CONTAINER
EXPORTING CONTAINER_NAME = G_CONTAINER1.
CREATE OBJECT GRID1 "CREATING GRID1
EXPORTING I_PARENT = G_CUSTOM_CONTAINER1.
CALL FUNCTION 'LVC_FIELDCATALOG_MERGE'
EXPORTING
I_STRUCTURE_NAME = 'LFA1'
CHANGING
CT_FIELDCAT = FCAT1[].
SELECT * from lfa1 into table t_lfa1.
CALL METHOD GRID1->SET_TABLE_FOR_FIRST_DISPLAY
CHANGING
IT_FIELDCATALOG = FCAT1[]
IT_OUTTAB = t_LFA1.
ENDIF.
ENDMODULE.
<b>
flow logic of screen 101:</b>
PROCESS BEFORE OUTPUT.
MODULE STATUS_0101.
PROCESS AFTER INPUT.
*module user_command_0101.
rgds,
bharat.