2008 Apr 18 12:39 PM
Create an interactive alv grid display report
i.e
suppose the program is using two internal table
data: begin of first_list,
F1 like ..
F2 like ..
F3 like .
.
.
.
End of first_list.
Data: begin of second_list,
F1 like ..
F2 like ..
F3 like .
F4 like .
F5 like
.
.
.
End of second_list.
I have to display data on second list using field F1, F2, F3.
Ex. Select * from . Into table second_list from
Where F1 = first_list-F1
And F2 = first_list-F2
And F3 = first_list-F3.
please reply with some example
2008 Apr 18 12:44 PM
Hi,
just observe this and see the link.
&----
*& Report z_tcoderefresh *
*& Author : Swarna.S. *
Published at SAPTechnical.COM
&----
*& AS : ALV report displaying all the transaction codes in SAP
*& User can click any tcode on ALV and go to the same .The ALV displays
*& first 25 records and on refreshing displays the next set
*& of 25 records and so on
*& *
&----
TYPE-POOLS: slis.*structure declaration for tstc table
TYPES : BEGIN OF ty_tstc,
tcode TYPE tcode,
pgmna TYPE program_id,
dypno TYPE dynpronr,
END OF ty_tstc.* Internal table and workarea declarations for tstc
DATA: it_tstc TYPE STANDARD TABLE OF ty_tstc,
wa_tstc TYPE ty_tstc.*data declarations for ALV
DATA: it_layout TYPE slis_layout_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_fieldcat TYPE slis_t_fieldcat_alv,
it_eventexit TYPE slis_t_event_exit,
wa_eventexit TYPE slis_event_exit.*initialisation event
INITIALIZATION.*start of selection event
START-OF-SELECTION.*subroutine to fetch data from the db table
PERFORM fetch_data.*subroutine for output display
PERFORM alv_output.&----
*& Form fetch_data
&----
*subroutine to fetch data from the db table
----
FORM fetch_data.*Internal table and work area declaratin for TSTC (local tables)
DATA : lt_tstc TYPE STANDARD TABLE OF ty_tstc,
ls_tstc TYPE ty_tstc.*Static field definition
*Reads the last tcode and stores it in l_tstc that on refresh further data
*beyond this value is fetched
STATICS l_tstc TYPE tcode.
Selection from the tstc table
*we select till 25 rows and on further refresh next 25 are selected
*we select transactions having screen numbers only
SELECT tcode
pgmna
dypno
FROM tstc
INTO CORRESPONDING FIELDS OF TABLE lt_tstc
UP TO 25 ROWS
WHERE tcode GT l_tstc
AND dypno NE '0000'.* Code for transferring the values of local table to output table
for 25 rows as sy-tfill is 25.
*In case there are no records a message pops up.
IF sy-subrc EQ 0.
DESCRIBE TABLE it_tstc.
READ TABLE lt_tstc INTO ls_tstc INDEX sy-tfill.
l_tstc = ls_tstc-tcode.
it_tstc[] = lt_tstc[].
ELSE.
MESSAGE 'No Records found ' TYPE 'i'.
ENDIF.
ENDFORM. "read_data&----
*& Form alv_output
&----
text
----
FORM alv_output.*subroutine to refresh alv
PERFORM event_exits.
*field catalogue
PERFORM build_fieldcat.
*Layout for alv
PERFORM build_layout.
*output display
PERFORM alv_display.ENDFORM. "alv_output&----
*& Form event_exits
&----
text
----
*subroutine to refresh alvFORM event_exits. CLEAR wa_eventexit.
wa_eventexit-ucomm = '&REFRESH'. " Refresh
wa_eventexit-after = 'X'.
APPEND wa_eventexit TO it_eventexit.ENDFORM. "event_exits&----
*& Form build_fieldcat
&----
text
----
*Field catalogue
FORM build_fieldcat. CLEAR wa_fieldcat.
wa_fieldcat-row_pos = '1'.
wa_fieldcat-col_pos = '1'.
wa_fieldcat-fieldname = 'TCODE'.
wa_fieldcat-tabname = 'it_tstc'.
wa_fieldcat-seltext_m = 'TRANSACTION'.
APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat.
wa_fieldcat-row_pos = '1'.
wa_fieldcat-col_pos = '2'.
wa_fieldcat-fieldname = 'PGMNA'.
wa_fieldcat-tabname = 'it_tstc'.
wa_fieldcat-seltext_m = 'PROGRAM'.
APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat.
wa_fieldcat-row_pos = '1'.
wa_fieldcat-col_pos = '3'.
wa_fieldcat-fieldname = 'DYPNO'.
wa_fieldcat-tabname = 'it_tstc'.
wa_fieldcat-seltext_m = 'SCREEN'.
APPEND wa_fieldcat TO it_fieldcat.ENDFORM. "build_fieldcat&----
*& Form build_layout
&----
text
----
*Layout
FORM build_layout. it_layout-zebra = 'X'.
it_layout-colwidth_optimize = 'X'.ENDFORM. "build_layout&----
*& Form alv_display
&----
text
----
*ALV output
FORM alv_display. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'PFSTATUS'
it_fieldcat = it_fieldcat
is_layout = it_layout
it_event_exit = it_eventexit
i_screen_start_column = 10
i_screen_start_line = 20
i_screen_end_column = 70
i_screen_end_line = 45
i_grid_title = 'Call Tcode Refresh ALV'
TABLES
t_outtab = it_tstc.ENDFORM. "alv_display
&----
*& Form user_command
&----
text
----
*User actions on ALV
FORM user_command USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield. CASE r_ucomm.*User clicks a transaction code and that tcode is called from ALV
WHEN '&IC1'.
READ TABLE it_tstc INDEX rs_selfield-tabindex INTO wa_tstc.
IF sy-subrc = 0.
CALL TRANSACTION wa_tstc-tcode.
ENDIF.*user clicks the refresh button and the next 25 records are displayed
WHEN '&REFRESH'.
PERFORM fetch_data.
rs_selfield-refresh = 'X'.
rs_selfield-col_stable = 'X' .
rs_selfield-row_stable = 'X' .
ENDCASE.ENDFORM. "user_command----
FORM PFSTATUS *
----
*Form for settings the pf status to the alv
FORM pfstatus USING ut_extab TYPE slis_t_extab. SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'.ENDFORM.
and
http://www.saptechnical.com/Tutorials/ALV/Interactive/demo.htm
Regards,
SHIVA(reward if helpful).
2008 Apr 18 12:44 PM
Hi,
just observe this and see the link.
&----
*& Report z_tcoderefresh *
*& Author : Swarna.S. *
Published at SAPTechnical.COM
&----
*& AS : ALV report displaying all the transaction codes in SAP
*& User can click any tcode on ALV and go to the same .The ALV displays
*& first 25 records and on refreshing displays the next set
*& of 25 records and so on
*& *
&----
TYPE-POOLS: slis.*structure declaration for tstc table
TYPES : BEGIN OF ty_tstc,
tcode TYPE tcode,
pgmna TYPE program_id,
dypno TYPE dynpronr,
END OF ty_tstc.* Internal table and workarea declarations for tstc
DATA: it_tstc TYPE STANDARD TABLE OF ty_tstc,
wa_tstc TYPE ty_tstc.*data declarations for ALV
DATA: it_layout TYPE slis_layout_alv,
wa_fieldcat TYPE slis_fieldcat_alv,
it_fieldcat TYPE slis_t_fieldcat_alv,
it_eventexit TYPE slis_t_event_exit,
wa_eventexit TYPE slis_event_exit.*initialisation event
INITIALIZATION.*start of selection event
START-OF-SELECTION.*subroutine to fetch data from the db table
PERFORM fetch_data.*subroutine for output display
PERFORM alv_output.&----
*& Form fetch_data
&----
*subroutine to fetch data from the db table
----
FORM fetch_data.*Internal table and work area declaratin for TSTC (local tables)
DATA : lt_tstc TYPE STANDARD TABLE OF ty_tstc,
ls_tstc TYPE ty_tstc.*Static field definition
*Reads the last tcode and stores it in l_tstc that on refresh further data
*beyond this value is fetched
STATICS l_tstc TYPE tcode.
Selection from the tstc table
*we select till 25 rows and on further refresh next 25 are selected
*we select transactions having screen numbers only
SELECT tcode
pgmna
dypno
FROM tstc
INTO CORRESPONDING FIELDS OF TABLE lt_tstc
UP TO 25 ROWS
WHERE tcode GT l_tstc
AND dypno NE '0000'.* Code for transferring the values of local table to output table
for 25 rows as sy-tfill is 25.
*In case there are no records a message pops up.
IF sy-subrc EQ 0.
DESCRIBE TABLE it_tstc.
READ TABLE lt_tstc INTO ls_tstc INDEX sy-tfill.
l_tstc = ls_tstc-tcode.
it_tstc[] = lt_tstc[].
ELSE.
MESSAGE 'No Records found ' TYPE 'i'.
ENDIF.
ENDFORM. "read_data&----
*& Form alv_output
&----
text
----
FORM alv_output.*subroutine to refresh alv
PERFORM event_exits.
*field catalogue
PERFORM build_fieldcat.
*Layout for alv
PERFORM build_layout.
*output display
PERFORM alv_display.ENDFORM. "alv_output&----
*& Form event_exits
&----
text
----
*subroutine to refresh alvFORM event_exits. CLEAR wa_eventexit.
wa_eventexit-ucomm = '&REFRESH'. " Refresh
wa_eventexit-after = 'X'.
APPEND wa_eventexit TO it_eventexit.ENDFORM. "event_exits&----
*& Form build_fieldcat
&----
text
----
*Field catalogue
FORM build_fieldcat. CLEAR wa_fieldcat.
wa_fieldcat-row_pos = '1'.
wa_fieldcat-col_pos = '1'.
wa_fieldcat-fieldname = 'TCODE'.
wa_fieldcat-tabname = 'it_tstc'.
wa_fieldcat-seltext_m = 'TRANSACTION'.
APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat.
wa_fieldcat-row_pos = '1'.
wa_fieldcat-col_pos = '2'.
wa_fieldcat-fieldname = 'PGMNA'.
wa_fieldcat-tabname = 'it_tstc'.
wa_fieldcat-seltext_m = 'PROGRAM'.
APPEND wa_fieldcat TO it_fieldcat. CLEAR wa_fieldcat.
wa_fieldcat-row_pos = '1'.
wa_fieldcat-col_pos = '3'.
wa_fieldcat-fieldname = 'DYPNO'.
wa_fieldcat-tabname = 'it_tstc'.
wa_fieldcat-seltext_m = 'SCREEN'.
APPEND wa_fieldcat TO it_fieldcat.ENDFORM. "build_fieldcat&----
*& Form build_layout
&----
text
----
*Layout
FORM build_layout. it_layout-zebra = 'X'.
it_layout-colwidth_optimize = 'X'.ENDFORM. "build_layout&----
*& Form alv_display
&----
text
----
*ALV output
FORM alv_display. CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = sy-repid
i_callback_user_command = 'USER_COMMAND'
i_callback_pf_status_set = 'PFSTATUS'
it_fieldcat = it_fieldcat
is_layout = it_layout
it_event_exit = it_eventexit
i_screen_start_column = 10
i_screen_start_line = 20
i_screen_end_column = 70
i_screen_end_line = 45
i_grid_title = 'Call Tcode Refresh ALV'
TABLES
t_outtab = it_tstc.ENDFORM. "alv_display
&----
*& Form user_command
&----
text
----
*User actions on ALV
FORM user_command USING r_ucomm TYPE sy-ucomm
rs_selfield TYPE slis_selfield. CASE r_ucomm.*User clicks a transaction code and that tcode is called from ALV
WHEN '&IC1'.
READ TABLE it_tstc INDEX rs_selfield-tabindex INTO wa_tstc.
IF sy-subrc = 0.
CALL TRANSACTION wa_tstc-tcode.
ENDIF.*user clicks the refresh button and the next 25 records are displayed
WHEN '&REFRESH'.
PERFORM fetch_data.
rs_selfield-refresh = 'X'.
rs_selfield-col_stable = 'X' .
rs_selfield-row_stable = 'X' .
ENDCASE.ENDFORM. "user_command----
FORM PFSTATUS *
----
*Form for settings the pf status to the alv
FORM pfstatus USING ut_extab TYPE slis_t_extab. SET PF-STATUS 'STANDARD_FULLSCREEN' OF PROGRAM 'SAPLKKBL'.ENDFORM.
and
http://www.saptechnical.com/Tutorials/ALV/Interactive/demo.htm
Regards,
SHIVA(reward if helpful).
2008 Apr 21 3:29 AM
Hi Yogesh,
Check the sample program. It works fine. Just execute and check the secondary list by double clicking.
I hope that it helps u.
Regards,
Venkat.O
REPORT zvenkat_alv_grid_interactive.
*&---------------------------------------------------------------------*
"Variables declarations
*&---------------------------------------------------------------------*
TYPES:
BEGIN OF t_f_list,
f1 TYPE i,
f2 TYPE char5,
f3 TYPE char5,
f4 TYPE char5,
END OF t_f_list,
BEGIN OF t_s_list,
f1 TYPE i,
f5 TYPE char5,
f6 TYPE char5,
f7 TYPE char5,
END OF t_s_list.
DATA:
w_f_list TYPE t_f_list,
w_s_list TYPE t_s_list.
DATA:
i_f_list TYPE STANDARD TABLE OF t_f_list,
i_s_list TYPE STANDARD TABLE OF t_s_list.
*&---------------------------------------------------------------------*
" ALV Declarations
*----------------------------------------------------------------------*
* Types Pools
TYPE-POOLS:
slis.
* Types
TYPES:
t_fieldcat TYPE slis_fieldcat_alv,
t_events TYPE slis_alv_event,
t_layout TYPE slis_layout_alv.
* Workareas
DATA:
w_fieldcat TYPE t_fieldcat,
w_events TYPE t_events,
w_layout TYPE t_layout.
* Internal Tables
DATA:
i_fieldcat TYPE STANDARD TABLE OF t_fieldcat,
i_fieldcat1 TYPE STANDARD TABLE OF t_fieldcat,
i_events TYPE STANDARD TABLE OF t_events.
START-OF-SELECTION.
PERFORM get_data.
END-OF-SELECTION.
PERFORM build_fieldcat.
PERFORM build_layout.
PERFORM build_events.
PERFORM display_data.
*&---------------------------------------------------------------------*
*& Form get_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM get_data.
DO 10 TIMES.
w_f_list-f1 = sy-index.
w_f_list-f2 = 'Char1'.
w_f_list-f3 = 'Char2'.
w_f_list-f4 = 'Char3'.
APPEND w_f_list TO i_f_list.
CLEAR w_f_list.
ENDDO.
ENDFORM. "get_data
*&---------------------------------------------------------------------*
*& Form build_fieldcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_fieldcat.
CLEAR :w_fieldcat, i_fieldcat[].
PERFORM build_fcat USING:
'F1' 'I_F_LIST' 'F1',
'F2' 'I_F_LIST' 'F2',
'F3' 'I_F_LIST' 'F3',
'F4' 'I_F_LIST' 'F4'.
ENDFORM. "build_fieldcat
*&---------------------------------------------------------------------*
*& Form build_layout
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM build_layout.
CLEAR:
w_layout.
w_layout-colwidth_optimize = 'X'.
ENDFORM. "build_layout
*&---------------------------------------------------------------------*
*& Form build_events
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM build_events .
CLEAR :
w_events,i_events.
w_events-name = 'TOP_OF_PAGE'.
w_events-form = 'TOP_OF_PAGE'.
APPEND w_events TO i_events.
CLEAR w_events.
w_events-name = 'USER_COMMAND'.
w_events-form = 'USER_COMMAND'.
APPEND w_events TO i_events.
CLEAR w_events.
ENDFORM. " build_events
*&---------------------------------------------------------------------*
*& Form display_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM display_data.
DATA:
l_program TYPE sy-repid VALUE sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = l_program
is_layout = w_layout
it_fieldcat = i_fieldcat
it_events = i_events
TABLES
t_outtab = i_f_list
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.
ENDFORM. "display_data
*&---------------------------------------------------------------------*
*& Form build_fcat
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0153 text
* -->P_0154 text
* -->P_0155 text
*----------------------------------------------------------------------*
FORM build_fcat USING l_field l_tab l_text.
w_fieldcat-fieldname = l_field.
w_fieldcat-tabname = l_tab.
w_fieldcat-seltext_m = l_text.
APPEND w_fieldcat TO i_fieldcat.
CLEAR w_fieldcat.
ENDFORM. " build_fcat
*&---------------------------------------------------------------------*
*& Form top_of_page
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM top_of_page.
DATA :
i_header TYPE slis_t_listheader,
w_header LIKE LINE OF i_header.
DATA:l_date1 TYPE datum,
l_date2 TYPE datum.
w_header-typ = 'S'.
w_header-info = sy-title.
APPEND w_header TO i_header.
CLEAR w_header.
w_header-typ = 'H'.
w_header-info = sy-repid.
APPEND w_header TO i_header.
CLEAR w_header.
CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE'
EXPORTING
it_list_commentary = i_header
i_logo = 'ENJOYSAP_LOGO'.
ENDFORM. "top_of_page
*&---------------------------------------------------------------------*
*& Form user_command
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
FORM user_command USING ucomm TYPE sy-ucomm selfield TYPE slis_selfield.
IF ucomm = '&IC1'. "When u double click on perticular record.
PERFORM get_data1.
READ TABLE i_f_list INTO w_f_list INDEX selfield-tabindex.
IF sy-subrc = 0.
DELETE i_s_list WHERE f1 <> w_f_list-f1.
CLEAR i_fieldcat1[].
PERFORM build_fcat1 USING:
'F1' 'I_S_LIST' 'F1',
'F5' 'I_S_LIST' 'F5',
'F6' 'I_S_LIST' 'F6',
'F7' 'I_S_LIST' 'F7'.
PERFORM display_data1.
ENDIF.
ENDIF..
ENDFORM. "user_command
*&---------------------------------------------------------------------*
*& Form build_fcat1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->P_0153 text
* -->P_0154 text
* -->P_0155 text
*----------------------------------------------------------------------*
FORM build_fcat1 USING l_field l_tab l_text.
w_fieldcat-fieldname = l_field.
w_fieldcat-tabname = l_tab.
w_fieldcat-seltext_m = l_text.
APPEND w_fieldcat TO i_fieldcat1.
CLEAR w_fieldcat.
ENDFORM. " build_fcat1
*&---------------------------------------------------------------------*
*& Form display_data1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM display_data1 .
DATA:
l_program TYPE sy-repid VALUE sy-repid.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_callback_program = l_program
is_layout = w_layout
it_fieldcat = i_fieldcat1
TABLES
t_outtab = i_s_list
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.
ENDFORM. " display_data1
*&---------------------------------------------------------------------*
*& Form get_data1
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
FORM get_data1 .
DO 10 TIMES.
w_s_list-f1 = sy-index.
w_s_list-f5 = 'Char5'.
w_s_list-f6 = 'Char6'.
w_s_list-f7 = 'Char7'.
APPEND w_s_list TO i_s_list.
CLEAR w_s_list.
ENDDO.
ENDFORM. " get_data1