*-----------------------------------------------------------------------
* P A R A M E T E R S & S E L E C T - O P T I O N S
*-----------------------------------------------------------------------
*-> Material Number
SELECT-OPTIONS s_matnr FOR wk_matnr.
*-> Plant
SELECT-OPTIONS s_plant FOR wk_plant.
*-----------------------------------------------------------------------
* S T A R T - O F - S E L E C T I O N
*-----------------------------------------------------------------------
START-OF-SELECTION.
*-> Get data
PERFORM get_data
USING s_matnr[]
s_plant[]
CHANGING tbl_alv.
*-----------------------------------------------------------------------
* E N D - O F - S E L E C T I O N
*-----------------------------------------------------------------------
END-OF-SELECTION.
*-> Output ALV data
PERFORM output_alv_data
USING tbl_alv.
*---------------------------------------------------------------------*
* CLASS lcl_handle_events IMPLEMENTATION
*---------------------------------------------------------------------*
* Implement the events for handling the events of cl_salv_table
*---------------------------------------------------------------------*
CLASS lcl_handle_events IMPLEMENTATION.
METHOD on_user_command.
IF sy-ucomm = 'RESET'.
MESSAGE 'You clicked the RESET button' TYPE cns_msgty.
ENDIF.
ENDMETHOD. "on_user_command
METHOD double_click.
* Show the ROW number
MOVE row TO wk_row.
CONDENSE wk_row.
CONCATENATE 'You double clicked line'
wk_row
INTO wk_msgtxt
SEPARATED BY space.
MESSAGE wk_msgtxt TYPE cns_msgty.
ENDMETHOD. "double_click
ENDCLASS. "lcl_handle_events IMPLEMENTATION
*&---------------------------------------------------------------------*
*& Form GET_DATA
*&---------------------------------------------------------------------*
* Get data
*----------------------------------------------------------------------*
* --> fu_rng_matnr Material Number
* --> fu_rng_sdate Plant
* <-- fc_tbl_data ALV data
*----------------------------------------------------------------------*
FORM get_data
USING fu_rng_matnr TYPE typ_rng_matnr
fu_rng_werks TYPE typ_rng_werks
CHANGING fc_tbl_alv TYPE typ_tbl_alv.
*-> Local data
DATA l_h_tbl_color TYPE lvc_s_scol.
*-> Get data
SELECT matnr
werks
pstat
lvorm
bwtty
xchar
mmsta
mmstd
maabc
kzkri
ekgrp
ausme
dispr
dismm
dispo
kzdie
plifz
webaz
perkz
ausss
disls
beskz
sobsl
minbe
eisbe
INTO CORRESPONDING FIELDS OF TABLE tbl_alv
FROM marc
WHERE matnr IN fu_rng_matnr
AND werks IN fu_rng_werks.
IF sy-subrc = 0.
SORT tbl_alv BY matnr ASCENDING
werks ASCENDING.
*-> Set color form field plant
LOOP AT tbl_alv INTO h_tbl_alv.
IF sy-tabix < 10.
h_tbl_alv-dmbtr = '100.28'.
h_tbl_alv-waers = 'RMB'.
h_tbl_alv-ordate = '20090728'.
ELSEif sy-tabix > 10 AND sy-tabix < 15 .
h_tbl_alv-dmbtr = '101.280'.
h_tbl_alv-waers = 'JPY'.
h_tbl_alv-ordate = '20090729'.
ELSEif sy-tabix > 15 AND sy-tabix < 20 .
h_tbl_alv-dmbtr = '101.280'.
h_tbl_alv-waers = 'RMB'.
h_tbl_alv-ordate = '20090729'.
ELSE.
h_tbl_alv-dmbtr = '110.28'.
h_tbl_alv-waers = 'RMB'.
h_tbl_alv-ordate = '20090730'.
ENDIF.
IF h_tbl_alv-werks = 'CPF4'.
l_h_tbl_color-fname = 'WERKS'.
l_h_tbl_color-color-col = col_group.
l_h_tbl_color-color-int = 1.
APPEND l_h_tbl_color TO h_tbl_alv-tbl_colors.
ENDIF.
IF h_tbl_alv-werks = 'CPF1'.
CLEAR l_h_tbl_color.
l_h_tbl_color-color-col = col_heading.
l_h_tbl_color-color-int = 1.
APPEND l_h_tbl_color TO h_tbl_alv-tbl_colors.
ENDIF.
MODIFY tbl_alv FROM h_tbl_alv TRANSPORTING tbl_colors
dmbtr waers ordate.
ENDLOOP.
ENDIF.
ENDFORM. " GET_DATA
*&---------------------------------------------------------------------*
*& Form OUTPUT_ALV_DATA
*&---------------------------------------------------------------------*
* Output ALV data
*----------------------------------------------------------------------*
* --> fu_tbl_data ALV data
*----------------------------------------------------------------------*
FORM output_alv_data
USING fu_tbl_data TYPE typ_tbl_alv.
*-> Local data
DATA: l_wcl_events TYPE REF TO cl_salv_events_table,"Register events
l_wcl_columns TYPE REF TO cl_salv_columns_table,"ALV columns
l_wcl_column TYPE REF TO cl_salv_column_table, "ALV column
l_wcl_display TYPE REF TO cl_salv_display_settings,"Display
l_wcl_grid TYPE REF TO cl_salv_form_layout_grid,"Grid table
l_wcl_selections TYPE REF TO cl_salv_selections,"Selection
l_wcl_aggregs TYPE REF TO cl_salv_aggregations,
l_wcl_aggreg TYPE REF TO cl_salv_aggregation,
l_wcl_sorts TYPE REF TO cl_salv_sorts,
l_wcl_sort TYPE REF TO cl_salv_sort,
l_wk_title TYPE lvc_title,
l_wk_color TYPE lvc_s_colo,
l_wk_text TYPE char255.
CREATE OBJECT l_wcl_grid.
*-> Set ALV commission list data
TRY .
CALL METHOD cl_salv_table=>factory
IMPORTING
r_salv_table = wcl_alv
CHANGING
t_table = fu_tbl_data.
CATCH cx_salv_msg.
ENDTRY.
*-> Set Title Information of TOP OF PAGE
l_wcl_grid->create_header_information(
row = 1
column = 1
text = cns_pm ).
*-> Set title bar
l_wcl_display = wcl_alv->get_display_settings( ).
l_wk_title = 'Advanced ALV'.
l_wcl_display->set_list_header( value = l_wk_title ).
l_wcl_display->set_list_header_size(
value = cl_salv_display_settings=>c_header_size_large ).
*-> Set Header Data(Top of page)
*-> Line 1(Material Number)
l_wcl_grid->create_text(
row = 2
column = 1
text = cns_matnr ).
CONCATENATE s_matnr-low cns_sep s_matnr-high
INTO l_wk_text SEPARATED BY space.
l_wcl_grid->create_text(
row = 2
column = 2
text = l_wk_text ).
*-> Line 2(Plant)
l_wcl_grid->create_text(
row = 3
column = 1
text = cns_plant ).
CONCATENATE s_plant-low cns_sep s_plant-high
INTO l_wk_text SEPARATED BY space.
l_wcl_grid->create_text(
row = 3
column = 2
text = l_wk_text ).
wcl_alv->set_top_of_list( l_wcl_grid ).
*-> Set optimize columns width
l_wcl_columns = wcl_alv->get_columns( ).
l_wcl_columns->set_optimize( ).
*-> Set ALV striped pattern
l_wcl_display = wcl_alv->get_display_settings( ).
l_wcl_display->set_striped_pattern( value = abap_true ).
*-> Set Selection Mode
l_wcl_selections = wcl_alv->get_selections( ).
l_wcl_selections->set_selection_mode(
value = if_salv_c_selection_mode=>cell ).
*-> Set GUI status
wcl_alv->set_screen_status(
pfstatus = cns_gui_status
report = sy-repid
set_functions = wcl_alv->c_functions_all ).
*-> Set title text
TRY.
l_wcl_column ?= l_wcl_columns->get_column( columnname = 'MATNR' ).
CATCH cx_salv_not_found .
ENDTRY.
l_wcl_column->set_long_text( 'My Material Number' ).
l_wcl_column->set_medium_text( 'Material Number' ).
l_wcl_column->set_short_text( 'Material' ).
*-> Set Color for column dismm(MRP Type)
TRY.
l_wcl_column ?= l_wcl_columns->get_column( columnname = 'DISMM' ).
CATCH cx_salv_not_found .
ENDTRY.
l_wk_color-col = '6'.
l_wk_color-int = '1'.
l_wk_color-inv = '0'.
l_wcl_column->set_color( l_wk_color ).
*-> Set color for Colum Plant
l_wcl_columns = wcl_alv->get_columns( ).
* set cell color
TRY.
l_wcl_columns->set_color_column( value = 'TBL_COLORS' ).
CATCH cx_salv_data_error.
ENDTRY.
* get sorts object
l_wcl_sorts = wcl_alv->get_sorts( ).
* set sort order
TRY.
l_wcl_sorts->set_group_active( ).
l_wcl_sorts->add_sort(
columnname = 'ORDATE'
group = if_salv_c_sort=>group_with_newpage ).
l_wcl_sort = l_wcl_sorts->get_sort( 'ORDATE' ).
l_wcl_sort->set_sequence( value = if_salv_c_sort=>sort_up ).
l_wcl_sort->set_subtotal( ).
CATCH: cx_salv_data_error,
cx_salv_existing,
cx_salv_not_found.
ENDTRY.
*-> set aggregation
l_wcl_aggregs = wcl_alv->get_aggregations( ).
* add an aggregation
TRY.
l_wcl_aggregs->add_aggregation(
columnname = 'DMBTR'
aggregation = if_salv_c_aggregation=>total ).
CATCH: cx_salv_not_found,
cx_salv_existing,
cx_salv_data_error.
ENDTRY.
*-> Set Checkbox
l_wcl_columns = wcl_alv->get_columns( ).
TRY.
l_wcl_column ?= l_wcl_columns->get_column( columnname = 'CHECK' ).
CATCH cx_salv_not_found.
ENDTRY.
l_wcl_column->set_cell_type( value =
if_salv_c_cell_type=>checkbox_hotspot ).
*-> Set Currency
l_wcl_columns = wcl_alv->get_columns( ).
TRY.
l_wcl_column ?= l_wcl_columns->get_column( columnname = 'DMBTR' ).
CATCH cx_salv_not_found.
ENDTRY.
TRY.
l_wcl_column->set_currency_column( value = 'WAERS' ).
CATCH: cx_salv_not_found,
cx_salv_data_error.
ENDTRY.
*-> Get events
l_wcl_events = wcl_alv->get_event( ).
CREATE OBJECT wcl_events.
*-> Register to the event USER_COMMAND
SET HANDLER wcl_events->on_user_command FOR l_wcl_events.
SET HANDLER wcl_events->double_click FOR l_wcl_events.
* display ALV list
wcl_alv->display( ).
ENDFORM. " OUTPUT_ALV_DATA