‎2008 Oct 30 10:06 AM
Hi Friends,
I want to display the report in ALV using oops.
My Customer wants output like reuse_alv_list_display.
please let me know if any one knows.
regrds,
vijay
‎2008 Oct 30 10:08 AM
Check examples : BCALV_GRID_01 to BCALV_GRID_11 in package SLIS.
regards,
Advait
‎2008 Oct 30 10:08 AM
Check examples : BCALV_GRID_01 to BCALV_GRID_11 in package SLIS.
regards,
Advait
‎2008 Oct 30 10:10 AM
Hi
you need to use the method set_table_for_first_display.
Like
call method w_alv1->set_table_for_first_display
exporting
is_layout = s_layout
is_variant = s_disvariant
i_save = 'U'
it_toolbar_excluding = lt_toolbar_excluding[]
changing
it_outtab = t_print_rep1
it_fieldcatalog = t_fieldcat[]
exceptions
invalid_parameter_combination = 1
program_error = 2
too_many_lines = 3
others = 4.
regards,
Ramya
‎2008 Oct 30 10:12 AM
Hi Vijay,
Check out the ALV Sample program in oops.
*&---------------------------------------------------------------------*
*& Report ZCC_OOPS_ALV_EDITABLE
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ZCC_OOPS_ALV_EDITABLE.
tables sflight.
data: begin of gt_outtab occurs 0. "with header line
include structure sflight.
data: celltab type lvc_t_styl.
data: end of gt_outtab.
data: gt_fieldcat type lvc_t_fcat.
data: g_carrid like sflight-carrid,
g_connid like sflight-connid.
data: gs_spfli type spfli. "#EC NEEDED
data: g_custom_container type ref to cl_gui_custom_container.
data: g_container type scrfname value 'BCALV_GRID_DEMO_0100_CONT1'.
data: g_grid type ref to cl_gui_alv_grid.
data: wa_outtab like gt_outtab.
*---------------------------------------------------------------------*
* CLASS lcl_event_receiver DEFINITION
*---------------------------------------------------------------------*
* ........ *
*---------------------------------------------------------------------*
class lcl_event_receiver definition.
*.............
public section.
types: begin of sflight_key.
types: carrid type s_carr_id.
types: connid type s_conn_id.
types: fldate type s_date.
types: end of sflight_key.
types: sflight_keys type standard table of sflight_key,
sflight_table type standard table of sflight.
methods:
handle_data_changed
for event data_changed of cl_gui_alv_grid
importing er_data_changed.
methods:
get_inserted_rows
exporting
inserted_rows type sflight_keys.
methods:
get_deleted_rows
exporting
deleted_rows type sflight_table.
methods:
refresh_delta_tables.
methods: set_table_is_initial.
methods: set_table_is_not_initial.
methods: table_is_initial
returning value(initial) type char01.
*..............
private section.
* §4.Define internal tables to remember inserted and deleted lines,
* thus the delta between input made after the last saving.
data: inserted_rows type sflight_keys,
deleted_rows type standard table of sflight.
* This flag is set if any error occured in one of the
* following methods:
data: error_in_data type c.
* This flag signals that no records were read for the flight
* table initially:
data: initial_table type c.
** Methods to modularize event handler method HANDLE_DATA_CHANGED:
*
methods:
check_double_entries
importing
pr_data_changed type ref to cl_alv_changed_data_protocol.
methods:
update_delta_tables
importing
pr_data_changed type ref to cl_alv_changed_data_protocol.
methods:
perform_semantic_checks
importing
pr_data_changed type ref to cl_alv_changed_data_protocol.
methods:
get_cell_values
importing
row_id type int4
pr_data_changed type ref to cl_alv_changed_data_protocol
exporting
key type sflight_key.
endclass. "lcl_event_receiver DEFINITION
**---------------------------------------------------------
class lcl_event_receiver implementation.
method handle_data_changed.
*
* data: ls_good type lvc_s_modi,
* l_price type s_price,
* ls_new type lvc_s_moce.
*
* error_in_data = space.
*
** check if there exist double entries
* call method check_double_entries( er_data_changed ).
*
** remember new or deleted lines for saving
* call method update_delta_tables( er_data_changed ).
*
** check mt_good_cells semantically
* call method perform_semantic_checks( er_data_changed ).
*
* if error_in_data = 'X'.
* call method er_data_changed->display_protocol.
* endif.
endmethod. "handle_data_changed
*-----------------------------------------------------------------------
method check_double_entries.
data: lt_good_cells type lvc_t_modi,
ls_good type lvc_s_modi,
ls_key type sflight_key,
ls_sflight type sflight,
l_flightdate like gt_outtab-fldate,
l_del_row type lvc_s_moce,
ls_outtab like line of gt_outtab,
l_reentered type c.
* §5.Check if there exist already other records with equal key fields.
*.............................................
* Check if the user has entered two new lines where the key fields
* are equal.
*.............................................
* Since CARRID and CONNID are read only, the check is restrained
* to field FLDATE.
*
* Algorithm: Copy all entries in MT_GOOD_CELLS to a dummy table.
* During the copying procedure check if there exists
* already a line with the same Flight date.
*
* loop at pr_data_changed->mt_good_cells into ls_good.
* case ls_good-fieldname.
* when 'FLDATE'.
*
* call method pr_data_changed->get_cell_value
* exporting
* i_row_id = ls_good-row_id
* i_fieldname = ls_good-fieldname
* importing e_value = l_flightdate.
*
* read table lt_good_cells with key
* value = l_flightdate
* transporting no fields.
* if sy-subrc = 0.
** There exists already a line with the same flight date!
* call method pr_data_changed->add_protocol_entry
* exporting
* i_msgid = '0K' i_msgno = '000' i_msgty = 'E'
* i_msgv1 = text-m01
* i_fieldname = ls_good-fieldname
* i_row_id = ls_good-row_id.
*
* error_in_data = 'X'.
* else.
* ls_good-value = l_flightdate.
* append ls_good to lt_good_cells.
* endif.
* endcase.
*
* endloop.
*
**.........................
** Check if any new entries already exist in gt_outtab.
** At this point, lt_good_cells contains only lines with
** FIELDNAME = 'FLDATE'.
**........................
* loop at lt_good_cells into ls_good.
* l_flightdate = ls_good-value. "flightdate, see above
* read table gt_outtab with key
* carrid = g_carrid
* connid = g_connid
* fldate = l_flightdate
* transporting no fields.
*
* if sy-subrc = 0.
** Check if this entry was deleted before, i.e. it is in the table
** of deleted rows. If so, the entry does not exist twice. The user
** has deleted a line and then reentered it.
* l_reentered = space.
*
* loop at pr_data_changed->mt_deleted_rows into l_del_row.
* read table gt_outtab into ls_outtab index l_del_row-row_id.
* if sy-subrc ne 0.
* message i000(0k) with text-e01."Fehler beim Löschen
* elseif
* ls_outtab-carrid eq g_carrid
* and ls_outtab-connid eq g_connid
* and ls_outtab-fldate eq ls_good-value.
* l_reentered = 'X'.
* endif.
* endloop.
*
* if l_reentered ne 'X'.
* call method pr_data_changed->add_protocol_entry
* exporting
* i_msgid = '0K' i_msgno = '000' i_msgty = 'E'
* i_msgv1 = text-m01
* i_fieldname = ls_good-fieldname
* i_row_id = ls_good-row_id.
*
* error_in_data = 'X'.
* endif.
* endif.
* endloop.
*
** In this demo report you may prevent the selection
** of data by setting parameter 'p_ds'.
** If this is done, the next check is required:
* if me->table_is_initial( ) eq 'X'.
* call method get_cell_values
* exporting row_id = 1
* pr_data_changed = pr_data_changed
* importing key = ls_key.
*
* select single * from sflight into ls_sflight
* where carrid = ls_key-carrid
* and connid = ls_key-connid
* and fldate = ls_key-fldate.
*
* if sy-subrc = 0.
* call method pr_data_changed->add_protocol_entry
* exporting
* i_msgid = '0K' i_msgno = '000' i_msgty = 'E'
* i_msgv1 = text-m01
* i_fieldname = 'FLDATE'
* i_row_id = 1.
*
* error_in_data = 'X'.
* endif.
** flag initial_table is reset in method 'update_delta_tables'
* endif.
endmethod. "check_double_entries
*-------------------------------------------------------
method update_delta_tables.
* data: l_ins_row type lvc_s_moce,
* l_del_row type lvc_s_moce,
* ls_key type sflight_key,
* ls_sflight type sflight,
* ls_outtab like line of gt_outtab.
*
** §6.Use protocol attributes MT_DELETED_ROWS and MT_INSERTED_ROWS
** to remember which lines where deleted or inserted. Save this
** information in your internal tables.
*
**..........
** deleted rows
**.............
* loop at pr_data_changed->mt_deleted_rows into l_del_row.
* read table gt_outtab into ls_outtab index l_del_row-row_id.
* if sy-subrc ne 0.
* message i000(0k) with text-e01."Fehler beim Löschen
* else.
* move-corresponding ls_outtab to ls_sflight.
** It should no be possible that the same line is deleted twice,
** so we just add the new key line to 'deleted_rows'.
* append ls_sflight to deleted_rows.
** If this line was inserted just before it is deleted:
* delete me->inserted_rows
* where carrid = ls_outtab-carrid
* and connid = ls_outtab-connid
* and fldate = ls_outtab-fldate.
* endif.
* endloop.
*
**..........
** inserted rows
** At this point ALV has not added new lines
** to gt_outtab, so you can not access their values
** by reading gt_outtab.
** Table MT_GOOD_CELLS holds new values that can be
** referenced using the ROW_ID.
**..........
* if me->table_is_initial( ) eq 'X'.
** No flights were selected initially. This is the first new line.
* call method get_cell_values
* exporting row_id = 1
* pr_data_changed = pr_data_changed
* importing key = ls_key.
*
* append ls_key to inserted_rows.
* call method me->set_table_is_not_initial.
* endif.
*
* loop at pr_data_changed->mt_inserted_rows into l_ins_row.
* call method get_cell_values
* exporting row_id = l_ins_row-row_id
* pr_data_changed = pr_data_changed
* importing key = ls_key.
** READ TABLE gt_outtab INTO ls_outtab INDEX l_ins_row-row_id.
*
** Just insert the new row regardless if the input is wrong
* append ls_key to inserted_rows.
* endloop.
*
endmethod. "update_delta_tables
*---------------------------------------------------------
method get_cell_values.
* get values of key cells of row ROW_ID
** CARRIER
* call method pr_data_changed->get_cell_value
* exporting
* i_row_id = row_id
* i_fieldname = 'CARRID'
* importing
* e_value = key-carrid.
*
* if sy-subrc ne 0.
* message i000(0k) with text-e02. "Fehler beim Einfügen
* endif.
** CONNID
* call method pr_data_changed->get_cell_value
* exporting
* i_row_id = row_id
* i_fieldname = 'CONNID'
* importing
* e_value = key-connid.
*
* if sy-subrc ne 0.
* message i000(0k) with text-e02. "Fehler beim Einfügen
* endif.
*
** FLDATE
* call method pr_data_changed->get_cell_value
* exporting
* i_row_id = row_id
* i_fieldname = 'FLDATE'
* importing
* e_value = key-fldate.
*
* if sy-subrc ne 0.
* message i000(0k) with text-e02. "Fehler beim Einfügen
* endif.
endmethod. "get_cell_values
*---------------------------------------------------------
method perform_semantic_checks.
* data: ls_good type lvc_s_modi,
* l_planetype type s_planetye,
* l_seatsmax type s_seatsmax.
*
* loop at pr_data_changed->mt_good_cells into ls_good.
* case ls_good-fieldname.
* when 'PLANETYPE'.
* call method pr_data_changed->get_cell_value
* exporting
* i_row_id = ls_good-row_id
* i_fieldname = ls_good-fieldname
* importing
* e_value = l_planetype.
*
* select single seatsmax from saplane into l_seatsmax
* where planetype = l_planetype.
*
* if sy-subrc ne 0.
* call method pr_data_changed->add_protocol_entry
* exporting
* i_msgid = '0K' i_msgno = '000' i_msgty = 'E'
* i_msgv1 = text-m02
* i_fieldname = ls_good-fieldname
* i_row_id = ls_good-row_id.
*
* error_in_data = 'X'.
* else.
*
*
* call method pr_data_changed->modify_cell
* exporting i_row_id = ls_good-row_id
* i_fieldname = 'SEATSMAX'
* i_value = l_seatsmax.
* endif.
* endcase.
* endloop.
endmethod. "perform_semantic_checks
*------------------------------------------------------
method get_inserted_rows.
* inserted_rows = me->inserted_rows.
endmethod. "get_inserted_rows
*------------------------------------------------------
method get_deleted_rows.
* deleted_rows = me->deleted_rows.
endmethod. "get_deleted_rows
*------------------------------------------------------
method refresh_delta_tables.
* clear me->inserted_rows[].
* clear me->deleted_rows[].
endmethod. "refresh_delta_tables
*------------------------------------------------------
method set_table_is_initial.
* initial_table = 'X'.
endmethod. "set_table_is_initial
*------------------------------------------------------
method set_table_is_not_initial.
* initial_table = space.
endmethod. "set_table_is_not_initial
*------------------------------------------------------
method table_is_initial.
* if initial_table = 'X'.
* initial = 'X'.
* else.
* initial = space.
* endif.
endmethod. "table_is_initial
endclass. "lcl_event_receiver IMPLEMENTATION
data: g_verifier type ref to lcl_event_receiver.
data: g_max type i value 100.
data: gs_layout type lvc_s_layo.
data: ok_code like sy-ucomm,
save_ok like sy-ucomm.
parameters: p_ds type c as checkbox. "delete selection
select-options s_carrid for sflight-carrid
no intervals no-extension default 'LH'.
select-options s_connid for sflight-connid
no intervals no-extension default '0400'.
start-of-selection.
g_carrid = s_carrid-low.
g_connid = s_connid-low.
* first check airline and connection
select single * from spfli into gs_spfli
where carrid = g_carrid
and connid = g_connid.
call screen 100.
*&---------------------------------------------------------------------*
*& Module STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module status_0100 output.
set pf-status 'MAIN100'.
set titlebar 'MAIN100'.
if g_custom_container is initial.
perform create_and_init_alv changing gt_outtab[]
gt_fieldcat.
endif.
endmodule. " STATUS_0100 OUTPUT
*&---------------------------------------------------------------------*
*& Form create_and_init_alv
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_OUTTAB[] text
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
form create_and_init_alv changing pt_outtab like gt_outtab[]
pt_fieldcat type lvc_t_fcat.
data: lt_exclude type ui_functions.
create object g_custom_container
exporting container_name = g_container.
create object g_grid
exporting i_parent = g_custom_container.
* Create Objekt to verify input values.
* (This object is already needed in form SELECT_DATA).
create object g_verifier.
* SET HANDLER g_verifier->handle_data_changed FOR g_grid.
perform select_data changing pt_outtab[].
perform build_fieldcat changing pt_fieldcat.
perform exclude_tb_functions changing lt_exclude.
gs_layout-stylefname = 'CELLTAB'.
call method g_grid->set_table_for_first_display
exporting
it_toolbar_excluding = lt_exclude
is_layout = gs_layout
changing
it_fieldcatalog = pt_fieldcat
it_outtab = pt_outtab[].
* Set editable cells to ready for input initially
call method g_grid->set_ready_for_input
exporting
i_ready_for_input = 1.
endform. " create_and_init_alv
*&---------------------------------------------------------------------*
*& Form select_data
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_OUTTAB text
*----------------------------------------------------------------------*
form select_data changing pt_outtab like gt_outtab[].
data: lt_sflight type table of sflight,
ls_sflight type sflight,
ls_outtab like line of gt_outtab,
l_index type i,
ls_spfli type spfli, "#EC NEEDED
lt_celltab type lvc_t_styl.
* Check parameter 'p_ds'=>optionally select no data
if p_ds is initial.
* Select data from sflight
select * from sflight into table lt_sflight up to g_max rows
where carrid = g_carrid
and connid = g_connid.
endif.
if sy-subrc ne 0 or not p_ds is initial.
* no flights were found!
* We provide some default values for the first line that is entered:
ls_outtab-carrid = g_carrid.
ls_outtab-connid = g_connid.
case g_carrid.
when 'LH'.
ls_outtab-currency = 'DEM'.
when others.
ls_outtab-currency = 'US'.
endcase.
ls_outtab-seatsocc = 0.
ls_outtab-paymentsum = 0.
* set fields FLDATE, PRICE and PLANETYPE to editable
perform fill_celltab using 'RW'
changing lt_celltab.
insert lines of lt_celltab into table ls_outtab-celltab.
append ls_outtab to pt_outtab.
* Tell Verify-Objekt that the table was initial
call method g_verifier->set_table_is_initial.
else.
call method g_verifier->set_table_is_not_initial.
* move corresponding fields from lt_sflight to gt_outtab
loop at lt_sflight into ls_sflight.
move-corresponding ls_sflight to ls_outtab.
append ls_outtab to pt_outtab.
endloop.
* §3.Set all cells of the table non-editable by using the style table.
loop at pt_outtab into ls_outtab.
l_index = sy-tabix.
refresh lt_celltab.
perform fill_celltab using 'RO'
changing lt_celltab.
* Copy your celltab to the celltab of the current row of gt_outtab.
insert lines of lt_celltab into table ls_outtab-celltab.
modify pt_outtab from ls_outtab index l_index.
endloop.
endif.
endform. " select_data
*&---------------------------------------------------------------------*
*& Form fill_celltab
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->VALUE(P_MODE) text
* -->PT_CELLTAB text
*----------------------------------------------------------------------*
form fill_celltab using value(p_mode)
changing pt_celltab type lvc_t_styl.
data: ls_celltab type lvc_s_styl,
l_mode type raw4.
* This forms sets the style of columns 'PRICE', FLDATE and PLANETYPE
* editable
if p_mode eq 'RW'.
l_mode = cl_gui_alv_grid=>mc_style_enabled.
else. "p_mode eq 'RO'
l_mode = cl_gui_alv_grid=>mc_style_disabled.
endif.
ls_celltab-fieldname = 'FLDATE'.
ls_celltab-style = l_mode.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PRICE'.
ls_celltab-style = l_mode.
insert ls_celltab into table pt_celltab.
ls_celltab-fieldname = 'PLANETYPE'.
ls_celltab-style = l_mode.
insert ls_celltab into table pt_celltab.
endform. " FILL_CELLTAB
*&---------------------------------------------------------------------*
*& Form BUILD_FIELDCAT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_GT_FIELDCAT text
*----------------------------------------------------------------------*
form build_fieldcat changing pt_fieldcat type lvc_t_fcat.
data ls_fcat type lvc_s_fcat.
call function 'LVC_FIELDCATALOG_MERGE'
exporting
i_structure_name = 'SFLIGHT'
changing
ct_fieldcat = pt_fieldcat.
loop at pt_fieldcat into ls_fcat.
if ls_fcat-fieldname eq 'PRICE'
or ls_fcat-fieldname eq 'PLANETYPE'
or ls_fcat-fieldname eq 'FLDATE'.
* §1.Set status of columns FLDATA, PRICE and PLANETYPE to editable.
* Since all cells are set to non-editable (see step 3) the cells
* of this columns will only be editable for new lines.
ls_fcat-edit = 'X'.
* Field 'checktable' is set to avoid shortdumps that are caused
* by inconsistend data in check tables. You may comment this out
* when the test data of the flight model is consistent in your system.
ls_fcat-checktable = '!'. "do not check foreign keys
modify pt_fieldcat from ls_fcat.
elseif ls_fcat-fieldname = 'CARRID'
or ls_fcat-fieldname = 'CONNID'
or ls_fcat-fieldname = 'CURRENCY'.
* §2.Use field AUTO_VALUE of the fieldcatalog to preset values when new
* lines are added.
ls_fcat-auto_value = 'X'.
ls_fcat-checktable = '!'. "do not check foreign key relations
modify pt_fieldcat from ls_fcat.
endif.
endloop.
endform. "build_fieldcat
*&---------------------------------------------------------------------*
*& Form exclude_tb_functions
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* <--P_LT_EXCLUDE text
*----------------------------------------------------------------------*
*---------------------------------------------
form exclude_tb_functions changing pt_exclude type ui_functions.
*
data ls_exclude type ui_func.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_insert_row.
append ls_exclude to pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_undo.
append ls_exclude to pt_exclude.
ls_exclude = cl_gui_alv_grid=>mc_fc_loc_copy_row.
append ls_exclude to pt_exclude.
endform. " EXCLUDE_TB_FUNCTIONS
*&---------------------------------------------------------------------*
*& Module USER_COMMAND_0100 INPUT
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
module user_command_0100 input.
save_ok = sy-ucomm.
clear ok_code.
case save_ok.
when 'SAVE'.
* perform save_data.
when 'BACK'.
* §10.Unlock your database table.
* perform unlock_sflight.
leave to screen 0.
when 'EXIT'.
perform exit_program.
when 'ADD'.
perform add_line_item.
when others.
* do nothing
endcase.
endmodule. " USER_COMMAND_0100 INPUT
*---------------------------------------------------------------------*
* FORM EXIT_PROGRAM *
*---------------------------------------------------------------------*
form exit_program.
leave program.
endform. "exit_program
*&---------------------------------------------------------------------*
*& Form ADD_LINE_ITEM
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* --> p1 text
* <-- p2 text
*----------------------------------------------------------------------*
form add_line_item .
data: lt_rows type lvc_t_row.
data: wa_rows type lvc_t_row with header line.
data: tabix type sy-tabix.
*&Find the row ( index ) number
call method g_grid->get_selected_rows
importing et_index_rows = lt_rows.
call method cl_gui_cfw=>flush.
read table lt_rows into wa_rows index 1.
tabix = wa_rows-index .
insert gt_outtab index tabix.
*REFRESH_TABLE_DISPLAY
call method g_grid->refresh_table_display
* EXPORTING
* IS_STABLE =
* I_SOFT_REFRESH =
* EXCEPTIONS
* FINISHED = 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. " ADD_LINE_ITEM
Thanks,
Chidanand
‎2008 Oct 30 10:15 AM
Hi Vijay,
You can find a sample code for ALV using OOPS at this link.
[http://saptechnical.com/Tutorials/ALV/Interactive/oops.htm]
Regards,
Amit.
‎2008 Oct 30 10:15 AM
Hi,
U can use SALV....this is the best for reporting.....
DATA: gr_table TYPE REF TO cl_salv_table,
gr_functions TYPE REF TO cl_salv_functions,
gr_layout TYPE REF TO cl_salv_layout,
gr_column TYPE REF TO cl_salv_column_table,
gr_columns TYPE REF TO cl_salv_columns_table,
gr_display TYPE REF TO cl_salv_display_settings,
gr_selections TYPE REF TO cl_salv_selections,
gr_agg TYPE REF TO cl_salv_aggregations,
key TYPE salv_s_layout_key VALUE sy-repid.
"Required------------------------------------------------
*&--Display the ALV
cl_salv_table=>factory( IMPORTING r_salv_table = gr_table CHANGING t_table = it_mseg_mat ).
"Optional------------------------------------------------
*---Setting the ALV toolbar
gr_functions = gr_table->get_functions( ).
gr_functions->set_all( abap_true ).
*---Setting the Layout Save property
gr_layout = gr_table->get_layout( ).
gr_layout->set_key( key ).
gr_layout->set_save_restriction( cl_salv_layout=>restrict_none ).
*---Setting the list header
gr_display = gr_table->get_display_settings( ).
gr_display->set_list_header( header ).
"Optional------------------------------------------------
*---Setting the Columns/Layout
gr_columns = gr_table->get_columns( ).
gr_columns->set_key_fixation( abap_true ).
gr_columns->set_color_column( 'COLOR' ).
*---Setting the key columns
gr_column ?= gr_columns->get_column( 'MBLNR' ).
gr_column->set_key( if_salv_c_bool_sap=>true ).
*---Setting the Selection mode
gr_selections = gr_table->get_selections( ).
gr_selections->set_selection_mode( 1 ).
*---Setting the Aggregate/Sum columns
gr_agg = gr_table->get_aggregations( ).
gr_agg->add_aggregation( 'MENGE' ).
gr_agg->add_aggregation( 'DMBTR' ).
"Required------------------------------------------------
*---Displaying the ALV
gr_table->display( ).
Search SCN for SALV....
regards
Sukriti...
‎2008 Oct 30 10:31 AM
Use this sample code....
&----
*& REPORT ysample
*&
&----
report ysample.
*CLASS cl_gui_alv_grid DEFINITION LOAD.
types : begin of ty_output,
locid type /sapapo/locid,
locno type /sapapo/locno,
tzone type tznzone,
adrnummer type ad_addrnum,
end of ty_output.
data : t_output type table of ty_output,
l_output like line of t_output,
t_output1 type table of ty_output,
l_output1 like line of t_output1.
data : ref_container type ref to cl_gui_custom_container,
ref_alv type ref to cl_gui_alv_grid,
ref_container1 type ref to cl_gui_custom_container,
ref_alv1 type ref to cl_gui_alv_grid.
data : w_fcat type lvc_s_fcat,
w_layout type lvc_s_layo,
i_fcat type lvc_t_fcat,
i_fcat1 type lvc_t_fcat.
data : g_variant type disvariant,
g_save type flag,
i_sort type lvc_t_sort ,
w_sort type lvc_s_sort.
----
CLASS lcl_toolbar_event_receiver DEFINITION
----
*
----
class lcl_toolbar_event_receiver definition.
public section.
methods: on_double_click
for event double_click of cl_gui_alv_grid
importing e_row
e_column
es_row_no.
endclass. "lcl_toolbar_event_receiver DEFINITION
----
CLASS lcl_toolbar_event_receiver IMPLEMENTATION
----
*
----
class lcl_toolbar_event_receiver implementation.
method on_double_click.
read table t_output into l_output index e_row.
if sy-subrc = 0.
l_output1-locid = l_output-locid.
append l_output1 to t_output1.
clear l_output1.
endif.
call screen 200 starting at 10 5 .
endmethod. "on_double_click
endclass. "lcl_toolbar_event_receiver IMPLEMENTATION
data : event_receiver type ref to lcl_toolbar_event_receiver.
start-of-selection.
select locid locno tzone adrnummer
from /sapapo/loc
into table t_output.
end-of-selection.
call screen 100.
&----
*& Form fcat
&----
text
----
--> p1 text
<-- p2 text
----
form fcat .
CLEAR w_fcat .
w_fcat-col_pos = 1.
w_fcat-fieldname = 'LOCID'.
w_fcat-coltext = 'LOCATIONID'.
w_fcat-ref_table = 'T_OUTPUT'.
APPEND w_fcat TO i_fcat.
clear w_fcat .
w_fcat-col_pos = 2.
w_fcat-fieldname = 'LOCNO'.
w_fcat-coltext = 'LOCATION'.
w_fcat-ref_table = 'T_OUTPUT'.
append w_fcat to i_fcat.
clear w_fcat .
w_fcat-col_pos = 3.
w_fcat-fieldname = 'TZONE'.
w_fcat-coltext = 'TIME-ZONE'.
w_fcat-ref_table = 'T_OUTPUT'.
append w_fcat to i_fcat.
clear w_fcat .
w_fcat-col_pos = 4.
w_fcat-fieldname = 'ADRNUMMER'.
w_fcat-coltext = 'ADDR-NO'.
w_fcat-ref_table = 'T_OUTPUT'.
append w_fcat to i_fcat.
endform. " fcat
&----
*& Form flayout
&----
text
----
--> p1 text
<-- p2 text
----
form flayout .
w_layout-zebra = 'X'.
w_layout-cwidth_opt = 'X'.
w_layout-grid_title = 'Sample Program using ABAP Objects'.
endform. " flayout
&----
*& Form sort
&----
text
----
--> p1 text
<-- p2 text
----
form sort .
w_sort-fieldname = 'LOCNO'.
w_sort-subtot = 'X'.
append w_sort to i_sort.
clear w_sort.
endform. " sort
&----
*& Form fcat1
&----
text
----
--> p1 text
<-- p2 text
----
form fcat1 .
clear w_fcat .
w_fcat-col_pos = 1.
w_fcat-fieldname = 'LOCID'.
w_fcat-coltext = 'LOCATIONID'.
w_fcat-ref_table = 'T_OUTPUT'.
append w_fcat to i_fcat1.
endform. "fcat1
&----
*& Module STATUS_0100 OUTPUT
&----
text
----
module status_0100 output.
set pf-status 'SAMPLE-TT'.
set titlebar 'TT'.
if ref_container is initial.
create object ref_container
exporting
container_name = 'CONTROL1'
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
others = 6.
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 ref_alv
exporting
i_parent = ref_container
exceptions
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others = 5.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
perform fcat.
perform flayout.
perform sort.
g_variant = sy-repid.
g_save = 'A'.
call method ref_alv->set_table_for_first_display
exporting
is_layout = w_layout
is_variant = g_variant
i_save = g_save
changing
it_outtab = t_output
it_fieldcatalog = i_fcat
it_sort = i_sort
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 cl_gui_control=>set_focus exporting control = ref_container.
create object event_receiver.
set handler event_receiver->on_double_click for ref_alv.
else.
call method ref_alv->refresh_table_display.
endif.
endmodule. " STATUS_0100 OUTPUT
&----
*& Module USER_COMMAND_0100 INPUT
&----
text
----
module user_command_0100 input.
case sy-ucomm.
when 'EXIT' or 'BACK' .
call method ref_alv->free.
leave program.
when 'CANC'.
call method ref_container->free.
IF NOT ref_container1 IS INITIAL.
CALL METHOD ref_container1->free.
ENDIF.
call method cl_gui_cfw=>flush.
endcase.
endmodule. " USER_COMMAND_0100 INPUT
&----
*& Module STATUS_0200 OUTPUT
&----
text
----
module status_0200 output.
set pf-status 'SAMPLE-TT'.
set titlebar 'TT'.
if ref_container1 is initial.
create object ref_container1
exporting
container_name = 'CONTROL2'
exceptions
cntl_error = 1
cntl_system_error = 2
create_error = 3
lifetime_error = 4
lifetime_dynpro_dynpro_link = 5
others = 6.
if sy-subrc ne 0.
add your handling, for example
call function 'POPUP_TO_INFORM'
exporting
titel = sy-repid
txt2 = sy-subrc
txt1 = 'The control could not be created'(510).
endif.
create object ref_alv1
exporting
i_parent = ref_container1
exceptions
error_cntl_create = 1
error_cntl_init = 2
error_cntl_link = 3
error_dp_create = 4
others = 5.
if sy-subrc <> 0.
message id sy-msgid type sy-msgty number sy-msgno
with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
endif.
perform fcat1.
perform flayout.
g_variant = sy-repid.
g_save = 'A'.
call method ref_alv1->set_table_for_first_display
exporting
is_layout = w_layout
is_variant = g_variant
i_save = g_save
changing
it_outtab = t_output1
it_fieldcatalog = i_fcat1
it_sort = i_sort1
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.
else.
call method ref_alv1->refresh_table_display.
endif.
endmodule. " STATUS_0200 OUTPUT
&----
*& Module USER_COMMAND_0200 INPUT
&----
text
----
module user_command_0200 input.
case sy-ucomm.
when 'EXIT' or 'BACK' .
CALL METHOD ref_alv1->free.
when 'CANC'.
*call method ref_container->free.
IF NOT ref_container1 IS INITIAL.
CALL METHOD ref_container1->free.
ENDIF.
CALL METHOD cl_gui_cfw=>flush.
endcase.
clear t_output1[].
leave to screen 0.
endmodule. " USER_COMMAND_0200 INPUT
CREATE 2 SCREENS 100 & 200 with custom controls in them
Regards,
SAPient