‎2009 Mar 05 3:18 PM
Hello Friends,
I am having requirement of ALV objects to display report in ALV format.
I have created executable program in se38, in that I am having one internal table , I want to display that
table in ALV grid format by using ALV OOPS concept. I also have to show some of the data in header part.
This is not a modulle pool report.
so please suggest, or send me some sample code for ALV OOPS without module pool.
Thanks
‎2009 Mar 05 4:00 PM
Use:CL_SALV* classes here you dont have to use Module pool.
[CL_SALV|https://wiki.sdn.sap.com/wiki/display/Snippets/displayinghotspotinalvwithclasscl_salv_table]
[CL_SALV FOR HEADER AND FOOTER|https://wiki.sdn.sap.com/wiki/display/Snippets/TOPOFPAGEANDENDOFPAGEINCLASS+cl_salv_table]
Or,
Use: FM--> REUSE_ALV_GRID_DISPLAY_LVC
This function module internally uses classes.
Regards,
Gurpreet
‎2009 Mar 05 4:08 PM
There are many standard demo program in SAP. Check into the system :
BCALV_GRID_01
BCALV_GRID_02
BCALV_GRID_03
BCALV_GRID_04 ...... many more..
Kuntal
‎2009 Mar 06 7:16 AM
Hi Vinod,
Below is the executable report u can paste it in editor and see the output ...
REPORT z_ALV_OOPS.
tables: MARA.
data: begin of it_tab occurs 0,
matnr like mara-matnr,
ersda like mara-ersda, "creation date
ernam like mara-ernam, "person created
pstat like mara-pstat, "maint stat
lvorm like mara-lvorm, "flg for deletion
mtart like mara-mtart, "mat type
meins like mara-meins, "uom
end of it_tab.
data: wa_it_tab like line of it_tab.
CLASS lcl_events_d0100 DEFINITION DEFERRED.
DATA: event_receiver1 TYPE REF TO lcl_events_d0100.
----
CLASS lcl_events_d0100 DEFINITION
----
CLASS lcl_events_d0100 DEFINITION.
PUBLIC SECTION.
METHODS:
*
*double_click FOR EVENT double_click
OF cl_gui_alv_grid
IMPORTING e_row
e_column.
*
METHODS
handle_hotspot_click
FOR EVENT hotspot_click OF cl_gui_alv_grid
IMPORTING
e_row_id
e_column_id
es_row_no
sender.
*---code addition for ALV pushbuttons
*--for placing buttons
METHODS handle_toolbar_set
FOR EVENT toolbar OF cl_gui_alv_grid
IMPORTING
e_object
e_interactive.
*---user command on clicking a button
METHODS handle_user_command
FOR EVENT user_command OF cl_gui_alv_grid
IMPORTING
e_ucomm.
ENDCLASS. "lcl_events_d0100 DEFINITION
TYPE-POOLS cndp.
----
LOCAL VARIABLE
----
DATA ok_code TYPE sy-ucomm.
----
FOR VARIANT
----
DATA st_var TYPE disvariant .
DATA save TYPE c.
st_var-report = 'YKC_ALV_OOPS'.
save = 'A'.
----
FOR LAYOUT
----
DATA loyo TYPE lvc_s_layo.
loyo-zebra = 'X'.
loyo-detailinit = 'X'.
loyo-info_fname = 'RED'.
----
FOR FIELD CATALOG
----
DATA fcat TYPE lvc_t_fcat.
DATA wa_fcat LIKE LINE OF fcat.
*--Declaration for toolbar buttons
DATA : ty_toolbar TYPE stb_button.
DATA : e_object TYPE REF TO cl_alv_event_toolbar_set,
io_alv_toolbar TYPE REF TO cl_alv_event_toolbar_set.
*---custom container
DATA container TYPE REF TO cl_gui_custom_container.
DATA ref_grid TYPE REF TO cl_gui_alv_grid.
CREATE OBJECT container
EXPORTING
container_name = 'CONTAINER'."name of container in module pool
CREATE OBJECT ref_grid
EXPORTING
i_parent = container.
----
CLASS lcl_events_d0100 IMPLEMENTATION
----
CLASS lcl_events_d0100 IMPLEMENTATION.
----
METHOD double_click *
----
........ *
----
METHOD double_click.
*
PERFORM d0100_event_double_click USING e_row
e_column .
**---remember when using double click hotspot will not work
*
ENDMETHOD. "double_click
*
*---method for hotspot
METHOD handle_hotspot_click.
DATA:ls_col_id TYPE lvc_s_col.
READ TABLE it_tab INTO wa_it_tab
INDEX e_row_id-index.
IF sy-subrc = 0.
CHECK ( wa_it_tab-matnr IS NOT INITIAL ).
CASE e_column_id-fieldname.
WHEN 'MATNR'.
leave program.
WHEN OTHERS.
do nothing
ENDCASE.
CALL METHOD ref_grid->set_current_cell_via_id
EXPORTING
is_row_id = e_row_id
is_column_id = ls_col_id.
ENDIF.
ENDMETHOD. "handle_hotspot_click
*
**---method for handling toolbar
METHOD handle_toolbar_set.
CLEAR ty_toolbar.
ty_toolbar-function = 'LEAVE'. "name of btn to catch click
ty_toolbar-butn_type = 0.
ty_toolbar-text = 'LEAVE'.
APPEND ty_toolbar TO e_object->mt_toolbar.
ENDMETHOD. "handle_toolbar_set
*
METHOD handle_user_command.
DATA: wr_data_changed TYPE REF TO cl_alv_changed_data_protocol.
DATA: lt_rows TYPE lvc_t_row,
lt_index TYPE lvc_s_row-index.
CASE e_ucomm.
WHEN 'LEAVE'.
leave program.
ENDCASE.
ENDMETHOD. "handle_user_command
ENDCLASS. "lcl_events_d0100 IMPLEMENTATION
START-OF-SELECTION.
PERFORM get_data.
PERFORM field_catalog.
&----
*& Form get_data
&----
text : getting data into internal table
----
--> p1 text
<-- p2 text
----
form get_data .
*select matnr ersda ernam pstat lvorm mtart meins
into table it_tab
from mara
where lvorm = 'X'.
it_tab-matnr = '000000000000000001'.
it_tab-ersda = 'asd' .
it_tab-ernam = 'asd'.
it_tab-pstat = 'sd'.
it_tab-lvorm = fdf'.
it_tab-mtart = 'we'.
it_tab-meins = 'lb'.
append it_tab.
clear it_tab.
it_tab-matnr = '99999'.
it_tab-ersda = 'asd' .
it_tab-ernam = 'asd'.
it_tab-pstat = 'sd'.
it_tab-lvorm = fdf'.
it_tab-mtart = 'we'.
it_tab-meins = 'lb'.
append it_tab.
clear it_tab.
it_tab-matnr = '77777'.
it_tab-ersda = 'asd' .
it_tab-ernam = 'asd'.
it_tab-pstat = 'sd'.
it_tab-lvorm = fdf'.
it_tab-mtart = 'we'.
it_tab-meins = 'lb'.
append it_tab.
clear it_tab.
endform. " get_data
&----
*& Form field_catalog
&----
text
----
--> p1 text
<-- p2 text
----
form field_catalog .
REFRESH fcat.
DATA: lv_pos TYPE i.
lv_pos = lv_pos + 1.
wa_fcat-fieldname = 'MATNR'.
wa_fcat-coltext = 'Material No'.
wa_fcat-col_pos = lv_pos.
wa_fcat-hotspot = 'X'.
wa_fcat-outputlen = 18.
APPEND wa_fcat TO fcat.
CLEAR wa_fcat.
lv_pos = lv_pos + 1.
wa_fcat-fieldname = 'ERSDA'.
wa_fcat-coltext = 'Creation Date'.
wa_fcat-col_pos = lv_pos.
wa_fcat-outputlen = 18.
APPEND wa_fcat TO fcat.
CLEAR wa_fcat.
lv_pos = lv_pos + 1.
wa_fcat-fieldname = 'ERNAM'.
wa_fcat-coltext = 'Person Created'.
wa_fcat-col_pos = lv_pos.
wa_fcat-outputlen = 18.
APPEND wa_fcat TO fcat.
CLEAR wa_fcat.
lv_pos = lv_pos + 1.
wa_fcat-fieldname = 'PSTAT'.
wa_fcat-coltext = 'Maint Stat'.
wa_fcat-col_pos = lv_pos.
wa_fcat-outputlen = 18.
APPEND wa_fcat TO fcat.
CLEAR wa_fcat.
lv_pos = lv_pos + 1.
wa_fcat-fieldname = 'LVORM'.
wa_fcat-coltext = 'Flag For Deletion'.
wa_fcat-col_pos = lv_pos.
wa_fcat-outputlen = 18.
APPEND wa_fcat TO fcat.
CLEAR wa_fcat.
lv_pos = lv_pos + 1.
wa_fcat-fieldname = 'MTART'.
wa_fcat-coltext = 'Material Type'.
wa_fcat-col_pos = lv_pos.
wa_fcat-outputlen = 18.
APPEND wa_fcat TO fcat.
CLEAR wa_fcat.
lv_pos = lv_pos + 1.
wa_fcat-fieldname = 'MEINS'.
wa_fcat-coltext = 'UOM'.
wa_fcat-col_pos = lv_pos.
wa_fcat-outputlen = 18.
APPEND wa_fcat TO fcat.
CLEAR wa_fcat.
CREATE OBJECT gr_events_d0100.
SET HANDLER gr_events_d0100->double_click FOR ref_grid.
CREATE OBJECT event_receiver1.
*---setting event handlers
SET HANDLER event_receiver1->handle_toolbar_set FOR ref_grid.
SET HANDLER event_receiver1->handle_user_command FOR ref_grid.
SET HANDLER event_receiver1->handle_hotspot_click FOR ref_grid.
----
ALV GRID DISPLAY
----
CALL METHOD ref_grid->set_table_for_first_display
EXPORTING
is_variant = st_var
i_save = save
is_layout = loyo
CHANGING
it_outtab = it_tab[]
it_fieldcatalog = fcat.
CALL SCREEN 100.
endform. " field_catalog
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
module STATUS_0100 output.
CREATE OBJECT gr_events_d0100.
*
SET HANDLER gr_events_d0100->double_click
*
FOR ref_grid.
SET PF-STATUS 'S100'.
SET TITLEBAR 'XXX'.
create the custom container
CREATE OBJECT container
EXPORTING
container_name = 'CONTAINER'. "'CUSTOM'.
*CALL METHOD cl_gui_cfw=>flush
EXCEPTIONS
cntl_system_error = 1
cntl_error = 2.
IF sy-subrc <> 0.
error handling
ENDIF.
endmodule. " STATUS_0100 OUTPUT
&----
*& Module exit INPUT
&----
text
----
module exit input.
CASE ok_code.
WHEN 'EXI' .
CLEAR ok_code.
LEAVE PROGRAM.
ENDCASE.
endmodule. " exit INPUT
Thanks & Regards,
Ruchi Tiwari
‎2009 Mar 06 7:29 AM
Hi,
Try this code.Hope it Helps!!!!!!!!!
************************************************************************
internal tables
************************************************************************
TYPES : BEGIN OF t_output,
matnr TYPE mara-matnr,
meins TYPE mara-meins,
END OF t_output.
DATA: i_output TYPE STANDARD TABLE OF t_output,
wa_output LIKE LINE OF i_output.
************************************************************************
internal data fields
************************************************************************
DATA: grid_layout TYPE lvc_s_layo,
i_fieldcat TYPE STANDARD TABLE OF lvc_s_fcat,
wa_fieldcat LIKE LINE OF i_fieldcat,
grid1 TYPE REF TO cl_gui_alv_grid ,
g_custom_container TYPE REF TO cl_gui_custom_container,
g_variant TYPE disvariant.
CONSTANTS : c_container_name TYPE scrfname " Container name
VALUE 'ALV_CONTROL'.
************************************************************************
START-OF-SELECTION.
PERFORM get_data.
PERFORM build_catalogue.
PERFORM display_data.
************************************************************************
&----
*& Form GET_DATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM get_data .
Get the data from the tables and prepare an output table which you want to display
wa_output-matnr = '0020100300'.
wa_output-meins = 'PC'.
APPEND wa_output TO i_output.
ENDFORM. " GET_DATA
&----
*& Form BUILD_CATALOGUE
&----
text
----
--> p1 text
<-- p2 text
----
FORM build_catalogue .
Build catologue
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MATNR'. "(Pass the name of the database field that you want to display)
wa_fieldcat-tabname = 'I_OUTPUT'.
wa_fieldcat-coltext = 'Material'.
wa_fieldcat-fix_column = 'X'.
wa_fieldcat-edit = 'X'.
wa_fieldcat-col_pos = '1'.
APPEND wa_fieldcat TO i_fieldcat.
CLEAR wa_fieldcat.
wa_fieldcat-fieldname = 'MEINS'."(Pass the name of the database field that you want to display)
wa_fieldcat-tabname = 'I_OUTPUT'.
wa_fieldcat-coltext = 'Unit'.
wa_fieldcat-fix_column = 'X'.
wa_fieldcat-edit = 'X'.
wa_fieldcat-col_pos = '2'.
APPEND wa_fieldcat TO i_fieldcat.
ENDFORM. " BUILD_CATALOGUE
&----
*& Form DISPLAY_DATA
&----
text
----
--> p1 text
<-- p2 text
----
FORM display_data .
CALL SCREEN 30.
*Click on the '30', it will prompt you to create a screen, give appropriate name to the screen,
*Click on the LAYOUT tab and create a container on the screen (Use Custom Control).
*Give appropriate name to the container it should be same as declared by the constant
*c_container_name TYPE scrfname.In this code it is named as ALV_CONTROL
*Once screen is created and activated double click on it it will take you to PBO and PAI modules.
*create these modules.
ENDFORM. " DISPLAY_DATA
&----
*& Module STATUS_0030 OUTPUT
&----
text
----
MODULE status_0030 OUTPUT.
SET PF-STATUS '030'. "(Create PF status by double clicking on that
SET TITLEBAR '030'.
*Standard toolbar options like BACK, SAVE , CANCEL can be added in toolbar using PF-STATUS
You need to add these buttons in function keys
IF g_custom_container IS INITIAL .
CREATE OBJECT g_custom_container
EXPORTING
container_name = c_container_name.
CREATE OBJECT grid1
EXPORTING
i_parent = g_custom_container.
ELSE.
CALL METHOD grid1->free.
CALL METHOD g_custom_container->free.
CREATE OBJECT g_custom_container
EXPORTING
container_name = c_container_name.
CREATE OBJECT grid1
EXPORTING
i_parent = g_custom_container.
ENDIF.
g_variant = sy-repid.
CALL METHOD grid1->set_table_for_first_display
EXPORTING
is_layout = grid_layout
is_variant = g_variant
i_save = 'A'
CHANGING
it_outtab = i_output[] "pass output table here
it_fieldcatalog = i_fieldcat.
ENDMODULE. " STATUS_0030 OUTPUT
&----
*& Module USER_COMMAND_0030 INPUT
&----
text
----
MODULE user_command_0030 INPUT.
The code that needs to be handled after output is displayed needs to be written
CASE sy-ucomm.
WHEN 'BACK' OR 'CANCEL'.
CALL METHOD g_custom_container->free.
CALL METHOD cl_gui_cfw=>flush.
SET SCREEN 0.
LEAVE SCREEN.
ENDCASE.
ENDMODULE. " USER_COMMAND_0030 INPUT
By Tejaswini Khante
‎2009 Mar 07 1:51 PM
hi look at the programs------->
BCALV* -
> for object oriented programs
SALV* -
> for new object OO model