‎2008 Nov 08 9:22 AM
this is aprogram to demonstrate interactive alv using oops so ,when i click back from the secondary list the first list is getting overloded on the second list.
this is the code that i have written please find the mistake.
&----
*& Report ZG_ALVOOPS_INTER *
*& *
&----
*& *
*& *
&----
REPORT zg_alvoops_inter.
************************************************************************
TABLES *
************************************************************************
TABLES : vbak.
************************************************************************
TYPES *
************************************************************************
TYPES: BEGIN OF ty_vbak, "Sales Document: Header Data
vbeln TYPE vbak-vbeln, "Sales Document
erdat TYPE vbak-erdat, "Date created
audat TYPE vbak-audat, "Document date
netwr TYPE vbak-netwr, "Net Value
END OF ty_vbak,
BEGIN OF ty_vbap, "Sales Document: Item Data
vbeln TYPE vbap-vbeln, "Sales Document
posnr TYPE vbap-posnr, "Sales Document Item
matnr TYPE vbap-matnr, "Material Number
matkl TYPE vbap-matkl,
END OF ty_vbap.
************************************************************************
DATA DECLARATIONS *
************************************************************************
DATA : i_vbak TYPE TABLE OF ty_vbak, "Internal table refering vbak type
i_vbap TYPE TABLE OF ty_vbap, "Internal table refering vbap type
i_fcat TYPE lvc_t_fcat, "Internal table fro field catalog
wa_vbak TYPE ty_vbak, "Work area refering vbak types
wa_vbap TYPE ty_vbap, "Work area refering vbap types
wa_fcat TYPE lvc_s_fcat, "Work area refering fro field catalog
alvgrid TYPE REF TO cl_gui_alv_grid, "Creating an instance of a grid class
container TYPE REF TO cl_gui_custom_container, "Creating an instance of container class
************************************************************************
DATA DECLARATION FOR INTERACTIVE LIST *
************************************************************************
i_fcat1 TYPE lvc_t_fcat, "Internal table for field catalog
wa_fcat1 TYPE lvc_s_fcat, "Work area refering fro field catalog
alvgrid1 TYPE REF TO cl_gui_alv_grid, "Creating an instance of a grid class
container1 TYPE REF TO cl_gui_custom_container. "Creating an instance of container class
************************************************************************
SELECTION SCREEN *
************************************************************************
SELECT-OPTIONS s_vbeln FOR vbak-vbeln obligatory. "Creating selectuion screen fields
************************************************************************
START-OF-SELECTION *
************************************************************************
START-OF-SELECTION.
*perform selectin screen validations
perform validate_svbeln.
*fetch data into table and field characteristics
PERFORM fetch_data.
*ALV display for output
PERFORM alv_output.
CALL SCREEN 100.
end-of-selection.
&----
*& Form validate_svbeln
&----
text
----
--> p1 text
<-- p2 text
----
form validate_svbeln .
select single vbeln
into vbak-vbeln
from vbak
where vbeln in s_vbeln.
if sy-subrc ne 0.
message e000(oo) with 'NO records in the given range'.
endif.
endform. " validate_svbeln
&----
*& Form fetch_data
&----
text
----
FORM fetch_data .
SELECT vbeln
erdat
audat
netwr
FROM vbak
INTO TABLE i_vbak
WHERE vbeln IN s_vbeln.
if sy-subrc <> 0.
message i000(00) with 'no data for given selection'.
endif.
ENDFORM. " fetch_data
&----
*& Form alv_output
&----
text
----
FORM alv_output .
IF container IS INITIAL.
*Creating object of container
CREATE OBJECT container
EXPORTING
container_name = 'CONTAINER'
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*Creating object of alv
CREATE OBJECT alvgrid
EXPORTING
i_parent = container
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*alv field catalogue
PERFORM fieldcat.
*Displaying the ALV grid
CALL METHOD alvgrid->set_table_for_first_display
CHANGING
it_outtab = i_vbak[]
it_fieldcatalog = i_fcat[].
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
Create object of the event class and setting handler for double click
PERFORM register_event_handlers.
ELSE.
CALL METHOD alvgrid->refresh_table_display.
ENDIF.
ENDFORM. " alv_output
&----
*& Form FIELDCAT
&----
text
----
Field catalog creation
FORM fieldcat .
wa_fcat-col_pos = 1.
wa_fcat-fieldname = 'VBELN'.
wa_fcat-coltext = 'SALES DOCUMENT'.
APPEND wa_fcat TO i_fcat.
wa_fcat-col_pos = 2.
wa_fcat-fieldname = 'ERDAT'.
wa_fcat-coltext = 'DATE OF CREATION'.
APPEND wa_fcat TO i_fcat.
wa_fcat-col_pos = 3.
wa_fcat-fieldname = 'AUDAT'.
wa_fcat-coltext = 'DOCUMENT DATE'.
APPEND wa_fcat TO i_fcat.
wa_fcat-col_pos = 4.
wa_fcat-fieldname = 'NETWR'.
wa_fcat-coltext = 'NET VALUE'.
APPEND wa_fcat TO i_fcat.
ENDFORM. " FIELDCAT
&----
*& Module STATUS_100 OUTPUT
&----
text
----
MODULE status_100 OUTPUT.
SET PF-STATUS 'ZSTANDARD1'.
ENDMODULE. " STATUS_100 OUTPUT
&----
*& Module USER_COMMAND_100 INPUT
&----
text
----
MODULE user_command_100 INPUT.
CASE sy-ucomm.
WHEN '&F15' OR '&F12'.
SET SCREEN '0'.
WHEN '&F03'.
SET SCREEN '0'.
ENDCASE.
ENDMODULE. " USER_COMMAND_100 INPUT
----
CLASS lcl_event_receiver DEFINITION
----
CLASS lcl_gui_alv_event_receiver DEFINITION.
PUBLIC SECTION.
METHODS:
*" Double-click control
handle_double_click FOR EVENT double_click OF cl_gui_alv_grid
IMPORTING e_row e_column es_row_no.
ENDCLASS. "lcl_gui_alv_event_receiver DEFINITION
DATA : g_alv_event_ref TYPE REF TO lcl_gui_alv_event_receiver.
----
CLASS lcl_event_receiver IMPLEMENTATION
----
*Class implementation
CLASS lcl_gui_alv_event_receiver IMPLEMENTATION.
METHOD handle_double_click .
CALL METHOD alvgrid->refresh_table_display.
*here you code your desired behavior after double clicking
DATA: l_mess TYPE string,
l_row(2) TYPE c.
WRITE es_row_no-row_id TO l_row.
IF e_column EQ 'VBELN'.
READ TABLE i_vbak INTO wa_vbak INDEX l_row.
PERFORM alv_output1 USING wa_vbak-vbeln.
CALL SCREEN 101.
ENDIF.
ENDMETHOD. "handle_double_click
ENDCLASS. "lcl_gui_alv_event_receiver IMPLEMENTATION.
&----
*& Form alv_output1
&----
text
----
FORM alv_output1 USING wa_vbak-vbeln.
refresh i_vbap.
SELECT vbeln
posnr
matnr
matkl
FROM vbap
INTO TABLE i_vbap
WHERE vbeln = wa_vbak-vbeln .
if sy-subrc <> 0.
message i000(oo) with 'No item details'.
endif.
*Creating object of alv
CREATE OBJECT alvgrid1
EXPORTING
i_parent = container1
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*Creating object of container
CREATE OBJECT container
EXPORTING
container_name = 'CONTAINER1'
.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
*alv field catalogue
PERFORM fieldcat1.
*Displaying the ALV grid
CALL METHOD alvgrid1->set_table_for_first_display
CHANGING
it_outtab = i_vbap[]
it_fieldcatalog = i_fcat1[].
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. " alv_output1
&----
*& Form fieldcat1
&----
text
----
FORM fieldcat1 .
wa_fcat1-col_pos = 1.
wa_fcat1-fieldname = 'VBELN'.
wa_fcat1-coltext = 'SALES DOCUMENT'.
APPEND wa_fcat1 TO i_fcat1.
wa_fcat1-col_pos = 2.
wa_fcat1-fieldname = 'POSNR'.
wa_fcat1-coltext = 'ITEM'.
APPEND wa_fcat1 TO i_fcat1.
wa_fcat1-col_pos = 3.
wa_fcat1-fieldname = 'MATNR'.
wa_fcat1-coltext = 'MATERIALNO'.
APPEND wa_fcat1 TO i_fcat1.
wa_fcat1-col_pos = 4.
wa_fcat1-fieldname = 'MATKL'.
wa_fcat1-coltext = 'MATERIAL GROUP'.
APPEND wa_fcat1 TO i_fcat1.
ENDFORM. " fieldcat1
*SET EVENT HANDLER
FORM register_event_handlers.
CREATE OBJECT g_alv_event_ref.
SET HANDLER g_alv_event_ref->handle_double_click FOR alvgrid."g_alv_grid_ref.
ENDFORM. "register_event_handlers
&----
*& Module STATUS_0101 OUTPUT
&----
text
----
module STATUS_0101 output.
SET PF-STATUS 'ZSTANDARD1'.
SET TITLEBAR 'xxx'.
endmodule. " STATUS_0101 OUTPUT
&----
*& Module USER_COMMAND_0101 INPUT
&----
text
----
module USER_COMMAND_0101 input.
CASE sy-ucomm.
WHEN '&F15' OR '&F12'.
SET SCREEN '0'.
WHEN '&F03'.
SET SCREEN '0'.
call screen 100.
ENDCASE.
endmodule. " USER_COMMAND_0101 INPUT
Edited by: anjali b on Nov 8, 2008 11:47 AM
Edited by: anjali b on Nov 8, 2008 12:34 PM
‎2008 Nov 08 7:46 PM
Hello Anjali
If you need to have a working example have a look at my sample report ZUS_SDN_TWO_ALV_GRIDS_2SCR in thread
Regards
Uwe
‎2008 Nov 08 8:50 PM
Hi,
Try to Replace your existing Method Call for Set_table_for_first_display by
CALL METHOD alv_grid->set_table_for_first_display
EXPORTING
i_save = 'A'
is_layout = w_layo
CHANGING
it_outtab = it_data[]
it_fieldcatalog = wt_fieldcat
EXCEPTIONS
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
OTHERS = 4.
This nay work