1. *&---------------------------------------------------------------------*
*& Report ZZ_TEST3
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zz_test3 LINE-SIZE 255.
*&---------------------------------------------------------------------*
*& DATA
*&---------------------------------------------------------------------*
TYPES: BEGIN OF gty_out,
opbel TYPE erdk-opbel, "Fatura No
erchbelnr TYPE erdz-erchbelnr, "Tahakkuk Belge No
belegart_t TYPE te093t-text30, "Belge Türü
belzart_t TYPE zbi_line_item-a4text, "Enerji Tipi
vertrag TYPE ever-vertrag, "Sözleþme
ableinh TYPE eanlh-ableinh, "Sayaç Okuma Birimi
address TYPE string, "Fatura Adresi
partner TYPE erdk-partner, "Muhatap No
zzcustomer TYPE erdk-zzcustomer, "Muhatap/Organizasyon Adý
osb_group_t TYPE string, "Endeks Tipi
herst TYPE equi-herst, "Üretici-Marka
geraet TYPE erdz-geraet, "Cihaz Seri No
ab TYPE erdz-ab, "Ýlk Okuma Tarihi
bis TYPE erdz-bis, "Son Okuma Tarihi
i_zwstvor TYPE zbi_cons_amount2, "Ýlk Endeks
i_zwstndab TYPE zbi_cons_amount2, "Son Endeks
umwfakt TYPE zbi_cons_amount2, "Çarpan
i_abrmenge TYPE zbi_cons_amount2, "Tüketim-KWH
istype TYPE eanlh-istype, "Sektör
kondigr_t TYPE te067t-text30, "Abone/Müþteri Grubu
"Hidden fields
END OF gty_out.
DATA: gt_out TYPE TABLE OF gty_out.
*----------------------------------------------------------------------*
* CLASS lcl_salv_common DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_salv_common DEFINITION.
PUBLIC SECTION.
DATA: wf_alv TYPE REF TO cl_salv_table.
METHODS:constructor.
METHODS:get.
METHODS:show.
METHODS:f4_layout.
PRIVATE SECTION.
TYPES: BEGIN OF gty_out,
opbel TYPE erdk-opbel, "Fatura No
erchbelnr TYPE erdz-erchbelnr, "Tahakkuk Belge No
belegart_t TYPE te093t-text30, "Belge Türü
belzart_t TYPE zbi_line_item-a4text, "Enerji Tipi
vertrag TYPE ever-vertrag, "Sözleþme
ableinh TYPE eanlh-ableinh, "Sayaç Okuma Birimi
address TYPE string, "Fatura Adresi
partner TYPE erdk-partner, "Muhatap No
zzcustomer TYPE erdk-zzcustomer, "Muhatap/Organizasyon Adý
osb_group_t TYPE string, "Endeks Tipi
herst TYPE equi-herst, "Üretici-Marka
2. geraet TYPE erdz-geraet, "Cihaz Seri No
ab TYPE erdz-ab, "Ýlk Okuma Tarihi
bis TYPE erdz-bis, "Son Okuma Tarihi
i_zwstvor TYPE zbi_cons_amount2, "Ýlk Endeks
i_zwstndab TYPE zbi_cons_amount2, "Son Endeks
umwfakt TYPE zbi_cons_amount2, "Çarpan
i_abrmenge TYPE zbi_cons_amount2, "Tüketim-KWH
istype TYPE eanlh-istype, "Sektör
kondigr_t TYPE te067t-text30, "Abone/Müþteri Grubu
"Hidden fields
END OF gty_out,
BEGIN OF type_show,
opbel TYPE erdk-opbel, "Fatura No
erchbelnr TYPE erdz-erchbelnr, "Tahakkuk Belge No
belegart_t TYPE te093t-text30, "Belge Türü
belzart_t TYPE zbi_line_item-a4text, "Enerji Tipi
vertrag TYPE ever-vertrag, "Sözleþme
ableinh TYPE eanlh-ableinh, "Sayaç Okuma Birimi
address TYPE string, "Fatura Adresi
partner TYPE erdk-partner, "Muhatap No
zzcustomer TYPE erdk-zzcustomer, "Muhatap/Organizasyon Adý
osb_group_t TYPE string, "Endeks Tipi
herst TYPE equi-herst, "Üretici-Marka
geraet TYPE erdz-geraet, "Cihaz Seri No
ab TYPE erdz-ab, "Ýlk Okuma Tarihi
bis TYPE erdz-bis, "Son Okuma Tarihi
i_zwstvor TYPE zbi_cons_amount2, "Ýlk Endeks
i_zwstndab TYPE zbi_cons_amount2, "Son Endeks
umwfakt TYPE zbi_cons_amount2, "Çarpan
i_abrmenge TYPE zbi_cons_amount2, "Tüketim-KWH
istype TYPE eanlh-istype, "Sektör
kondigr_t TYPE te067t-text30, "Abone/Müþteri Grubu
t_color TYPE lvc_t_scol,
END OF type_show.
DATA:i_out TYPE STANDARD TABLE OF gty_out,
i_show TYPE TABLE OF type_show.
TYPES:type_t_out TYPE STANDARD TABLE OF gty_out.
METHODS:pf_status CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:top_of_page CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:end_of_page CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:set_columns CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:disp_setting CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:hotspot CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:colors CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:totals CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:layout_set CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:sort CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:click CHANGING pc_alv TYPE REF TO cl_salv_table.
METHODS:hotspot_click FOR EVENT link_click OF cl_salv_events_table
IMPORTING row column.
METHODS:double_click FOR EVENT double_click OF cl_salv_events_table
IMPORTING row column.
ENDCLASS. "lcl_salv_common DEFINITION
DATA:lf_report TYPE REF TO lcl_salv_common.
DATA: wf_anlage TYPE ever-anlage,
wf_budat TYPE erdk-budat.
*DATA:wf_ebeln TYPE ekpo-ebeln,
* wf_bukrs TYPE ekpo-bukrs.
**--Inputs
SELECT-OPTIONS: s_budat FOR wf_budat.
*SELECT-OPTIONS:s_ebeln FOR wf_ebeln,
* s_bukrs FOR wf_bukrs.
**--Layout
PARAMETER p_anlage TYPE slis_vari.
3. *PARAMETERS p_lay TYPE slis_vari.
AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_anlage.
*AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_lay.
CREATE OBJECT lf_report.
*--Dispaly the saved layout in f4 help
lf_report->f4_layout( ).
START-OF-SELECTION.
IF lf_report IS INITIAL.
CREATE OBJECT lf_report.
ENDIF.
lf_report->get( ).
lf_report->show( ).
*----------------------------------------------------------------------*
* CLASS lcl_salv_common IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_salv_common IMPLEMENTATION.
METHOD constructor.
CLEAR: i_out[],i_show[].
TRY.
cl_salv_table=>factory( IMPORTING r_salv_table = wf_alv
CHANGING t_table = i_show ).
CATCH cx_salv_msg. "#EC NO_HANDLER
ENDTRY.
ENDMETHOD. "constructor
METHOD get.
TYPES: BEGIN OF lty_ever,
vertrag TYPE ever-vertrag,
vkonto TYPE ever-vkonto,
osb_group TYPE ever-osb_group,
END OF lty_ever.
DATA: lt_ever TYPE HASHED TABLE OF lty_ever
WITH UNIQUE KEY vertrag,
lt_erdk TYPE TABLE OF erdk,
lt_a4text TYPE HASHED TABLE OF zbi_line_item
WITH UNIQUE KEY belzart,
lt_ettifn TYPE SORTED TABLE OF ettifn
WITH NON-UNIQUE KEY ab,
lt_eanlh TYPE SORTED TABLE OF eanlh
WITH NON-UNIQUE KEY ab,
lt_erdz TYPE TABLE OF erdz,
lt_erch TYPE HASHED TABLE OF erch
WITH UNIQUE KEY belnr,
lt_dberchu TYPE SORTED TABLE OF dberchu
WITH NON-UNIQUE KEY belnr belzeile,
lt_equi TYPE HASHED TABLE OF equi
WITH UNIQUE KEY equnr,
ls_out TYPE gty_out.
FIELD-SYMBOLS: <ls_ever> TYPE lty_ever,
<ls_erdk> TYPE erdk,
<ls_ettifn> TYPE ettifn,
<ls_eanlh> TYPE eanlh,
<ls_erch> TYPE erch,
<ls_dberchu> TYPE dberchu,
<ls_equi> TYPE equi,
<ls_erdz> TYPE erdz,
<ls_a4text> TYPE zbi_line_item.
*--------------------------------------------------------------------*
* Find all contracts and contract accounts for the installation
4. SELECT vertrag vkonto osb_group
FROM ever
INTO TABLE lt_ever
WHERE anlage EQ p_anlage.
CHECK sy-subrc EQ 0.
* Find invoices of those contract accounts, excluding reversed ones
SELECT * FROM erdk
INTO TABLE lt_erdk
FOR ALL ENTRIES IN lt_ever
WHERE budat IN s_budat
AND vkont EQ lt_ever-vkonto
AND invoiced EQ 'X'
AND intopbel EQ space.
CHECK sy-subrc EQ 0.
* Get list of line item types to report
SELECT * FROM zbi_line_item
INTO TABLE lt_a4text
WHERE sort EQ '99'.
* Customer group
SELECT * FROM ettifn
INTO TABLE lt_ettifn
WHERE anlage EQ p_anlage
AND operand EQ 'ABONEGRUBU'
AND mauszug EQ space.
* Industry System
SELECT * FROM eanlh
INTO TABLE lt_eanlh
WHERE anlage EQ p_anlage.
*--------------------------------------------------------------------*
* Process each invoice
LOOP AT lt_erdk ASSIGNING <ls_erdk>.
* Get invoice details
CALL FUNCTION 'ISU_DB_ERDZ_SELECT_DOC'
EXPORTING
x_opbel = <ls_erdk>-opbel
TABLES
yt_erdz = lt_erdz
EXCEPTIONS
not_found = 1
not_qualified = 2
system_error = 3
OTHERS = 4.
IF sy-subrc NE 0.
CONTINUE.
ENDIF.
* Read billing doc headers
SELECT * FROM erch
INTO TABLE lt_erch
FOR ALL ENTRIES IN lt_erdz
WHERE belnr EQ lt_erdz-erchbelnr.
* Read billing factors
SELECT * FROM dberchu
INTO TABLE lt_dberchu
5. FOR ALL ENTRIES IN lt_erdz
WHERE belnr EQ lt_erdz-erchbelnr.
* Equipment
SELECT * FROM equi
INTO TABLE lt_equi
FOR ALL ENTRIES IN lt_erdz
WHERE equnr EQ lt_erdz-equnr.
DATA: lt_bi_line_item TYPE HASHED TABLE OF zbi_line_item
WITH UNIQUE KEY belzart.
SELECT * FROM zbi_line_item INTO TABLE lt_bi_line_item
WHERE belzart EQ 'ZT0' OR belzart EQ 'ZR'.
*--------------------------------------------------------------------*
* Process items
LOOP AT lt_erdz ASSIGNING <ls_erdz>.
* Take only the contracts related to the installation.
READ TABLE lt_ever ASSIGNING <ls_ever>
WITH TABLE KEY vertrag = <ls_erdz>-vertrag.
CHECK sy-subrc EQ 0.
IF <ls_erdz>-stattart CS 'OL'.
IF ( <ls_erdz>-belzart EQ 'ZT0' ) OR ( <ls_erdz>-belzart EQ 'ZR' ).
READ TABLE lt_bi_line_item ASSIGNING <ls_a4text>
WITH TABLE KEY belzart = <ls_erdz>-
belzart.
ELSE.
CONTINUE.
ENDIF.
ELSE.
* Item must be listed in the item texts table
READ TABLE lt_a4text ASSIGNING <ls_a4text>
WITH TABLE KEY belzart = <ls_erdz>-belzart.
CHECK sy-subrc EQ 0.
ENDIF.
* Prepare output
CLEAR ls_out.
ls_out-opbel = <ls_erdk>-opbel.
ls_out-erchbelnr = <ls_erdz>-erchbelnr.
ls_out-belzart_t = <ls_a4text>-a4text.
ls_out-vertrag = <ls_erdz>-vertrag.
ls_out-partner = <ls_erdk>-partner.
ls_out-zzcustomer = <ls_erdk>-zzcustomer.
ls_out-geraet = <ls_erdz>-geraet.
ls_out-ab = <ls_erdz>-ab.
ls_out-bis = <ls_erdz>-bis.
ls_out-i_zwstvor = <ls_erdz>-i_zwstvor.
ls_out-i_zwstndab = <ls_erdz>-i_zwstndab.
ls_out-i_abrmenge = <ls_erdz>-i_abrmenge.
CONCATENATE <ls_erdk>-zzaddress1 <ls_erdk>-zzaddress2
INTO ls_out-address SEPARATED BY space.
* Document type
READ TABLE lt_erch ASSIGNING <ls_erch>
WITH TABLE KEY belnr = <ls_erdz>-erchbelnr.
6. SELECT SINGLE text30 INTO ls_out-belegart_t
FROM te093t
WHERE spras EQ sy-langu
AND belegart EQ <ls_erch>-belegart.
* Meter reading unit & Industry System
LOOP AT lt_eanlh ASSIGNING <ls_eanlh> WHERE ab LE <ls_erdz>-bis
AND bis GE <ls_erdz>-bis.
ls_out-ableinh = <ls_eanlh>-ableinh.
ls_out-istype = <ls_eanlh>-istype.
EXIT.
ENDLOOP.
* Determine index type from the contract
IF <ls_ever>-osb_group IS INITIAL.
"Manuel
ls_out-osb_group_t = text-002.
ELSE.
"Endeksör / Field
ls_out-osb_group_t = text-003.
ENDIF.
* Equipment
READ TABLE lt_equi ASSIGNING <ls_equi>
WITH TABLE KEY equnr = <ls_erdz>-equnr.
IF sy-subrc EQ 0.
ls_out-herst = <ls_equi>-herst.
ENDIF.
* Billing factor
READ TABLE lt_dberchu ASSIGNING <ls_dberchu>
WITH TABLE KEY belnr = <ls_erdz>-
erchbelnr
belzeile = <ls_erdz>-
erchzbelzeile.
IF sy-subrc EQ 0.
ls_out-umwfakt = <ls_dberchu>-umwfakt.
ELSE.
ls_out-umwfakt = 1.
ENDIF.
* Customer group
LOOP AT lt_ettifn ASSIGNING <ls_ettifn> WHERE ab LE <ls_erdz>-bis
AND bis GE <ls_erdz>-bis.
SELECT SINGLE text30 INTO ls_out-kondigr_t
FROM te067t
WHERE spras EQ sy-langu
AND kondigr EQ <ls_ettifn>-kondigr.
EXIT.
ENDLOOP.
APPEND ls_out TO gt_out.
ENDLOOP. "lt_erdz
ENDLOOP. "lt_erdk
* DATA:la_show TYPE type_show,
* la_ekko TYPE type_ekpo.
* SELECT ebeln ebelp menge matnr netpr
* INTO TABLE i_ekko FROM ekpo
* WHERE ebeln IN s_ebeln AND
* bukrs IN s_bukrs.
7. * IF sy-subrc = 0.
* LOOP AT i_ekko INTO la_ekko.
* MOVE-CORRESPONDING la_ekko TO la_show.
* APPEND la_show TO i_show.
* ENDLOOP.
* ENDIF.
ENDMETHOD. "get
METHOD show.
*--Set GUI Status
CALL METHOD pf_status
CHANGING
pc_alv = wf_alv.
*--Set Top of page
CALL METHOD top_of_page
CHANGING
pc_alv = wf_alv.
*--Set End of List
CALL METHOD end_of_page
CHANGING
pc_alv = wf_alv.
*--Set column properties
CALL METHOD set_columns
CHANGING
pc_alv = wf_alv.
*--Set Hotspot
CALL METHOD hotspot
CHANGING
pc_alv = wf_alv.
*--Set display properties
CALL METHOD disp_setting
CHANGING
pc_alv = wf_alv.
*--Set colors
CALL METHOD colors
CHANGING
pc_alv = wf_alv.
*--Set totals and subtotals
CALL METHOD totals
CHANGING
pc_alv = wf_alv.
*--Set layout for display
CALL METHOD layout_set
CHANGING
pc_alv = wf_alv.
*--Apply sorts
CALL METHOD sort
CHANGING
pc_alv = wf_alv.
*--Event double click on alv
CALL METHOD click
CHANGING
pc_alv = wf_alv.
wf_alv->display( ).
ENDMETHOD. "SHOW
METHOD pf_status.
DATA: lf_functions TYPE REF TO cl_salv_functions_list.
lf_functions = pc_alv->get_functions( ).
*--Display all functions
lf_functions->set_all( abap_true ).
ENDMETHOD. "pf_status
METHOD top_of_page.
DATA: lf_header TYPE REF TO cl_salv_form_layout_grid,
lf_h_label TYPE REF TO cl_salv_form_label,
lf_h_text TYPE REF TO cl_salv_form_text,
8. lf_logo TYPE REF TO cl_salv_form_layout_logo.
DATA:lf_string TYPE char50.
CREATE OBJECT lf_header.
*--Build the text for top of page
lf_h_label = lf_header->create_label( row = 1 column = 1 colspan = 6 ).
lf_h_label->set_text( 'Program for SALV'(001) ).
lf_h_label = lf_header->create_label( row = 3 column = 1 ).
lf_h_label->set_text( 'System'(060) ).
CLEAR lf_string.
*--System/Client
CONCATENATE sy-sysid '/' sy-mandt INTO lf_string SEPARATED BY space.
lf_h_text = lf_header->create_text( row = 3 column = 2 ).
lf_h_text->set_text( lf_string ).
*--User name
lf_h_label = lf_header->create_label( row = 4 column = 1 ).
lf_h_label->set_text( 'User ID:'(061) ).
lf_h_text = lf_header->create_text( row = 4 column = 2 ).
lf_h_text->set_text( sy-uname ).
*--Program
lf_h_label = lf_header->create_label( row = 5 column = 1 ).
lf_h_label->set_text( 'Program:'(062) ).
lf_h_text = lf_header->create_text( row = 5 column = 2 ).
lf_h_text->set_text( sy-repid ).
*--Date&Time
lf_h_label = lf_header->create_label( row = 6 column = 1 ).
lf_h_label->set_text( 'Date & Time:'(063) ).
CLEAR lf_string.
CONCATENATE sy-datum+4(2) '/' sy-datum+6(2) '/' sy-datum(4)
'-' sy-uzeit(2) ':' sy-uzeit+2(2) ':'
sy-uzeit+4(2) INTO lf_string.
lf_h_text = lf_header->create_text( row = 6 column = 2 ).
lf_h_text->set_text( lf_string ).
*--Display Logo & text in Top of page
CREATE OBJECT lf_logo.
lf_logo->set_left_content( lf_header ).
lf_logo->set_right_logo( 'ZLOGO_YEDAS' ).
pc_alv->set_top_of_list( lf_logo ).
ENDMETHOD. "top_of_page
METHOD set_columns.
DATA: lf_cols TYPE REF TO cl_salv_columns.
DATA: lf_column TYPE REF TO cl_salv_column.
lf_cols = pc_alv->get_columns( ).
*--Optimize column width
lf_cols->set_optimize( abap_true ).
*--Field Headings
TRY.
lf_column = lf_cols->get_column( 'BELEGART_T'(015) ).
lf_column->set_long_text( 'Belge Türü'(002) ).
lf_column->set_medium_text( 'Belge Türü'(003) ).
lf_column->set_short_text( 'BT'(004) ).
*--Set the output length for field
* lf_column->set_output_length( 15 ).
lf_column = lf_cols->get_column( 'BELZART_T'(008) ).
lf_column->set_long_text( 'Enerji Tipi'(007) ).
lf_column->set_medium_text( 'Enerji Tipi'(005) ).
lf_column->set_short_text( 'Enerji Tipi'(006) ).
*--Set the output length for field
* lf_column->set_output_length( 12 ).
lf_column = lf_cols->get_column( 'ADDRESS'(009) ).
lf_column->set_long_text( 'Adresi'(010) ).
lf_column->set_medium_text( 'Adresi'(011) ).
lf_column->set_short_text( 'Adresi'(012) ).
*--Set the output length for field
* lf_column->set_output_length( 13 ).
10. ENDMETHOD. "set_columns
METHOD disp_setting.
DATA: lf_display TYPE REF TO cl_salv_display_settings.
*--Set the layout settings
lf_display = pc_alv->get_display_settings( ).
*--Zebra pattern
lf_display->set_striped_pattern( abap_true ).
ENDMETHOD. "disp_setting
METHOD hotspot.
DATA: lf_cols_tab TYPE REF TO cl_salv_columns_table,
lf_col_tab TYPE REF TO cl_salv_column_table.
DATA: lf_events TYPE REF TO cl_salv_events_table.
lf_cols_tab = pc_alv->get_columns( ).
TRY.
lf_col_tab ?= lf_cols_tab->get_column( 'OPBEL' ).
CATCH cx_salv_not_found.
ENDTRY.
TRY.
CALL METHOD lf_col_tab->set_cell_type
EXPORTING
value = if_salv_c_cell_type=>hotspot. "5-stands for hot spot
CATCH cx_salv_data_error .
ENDTRY.
lf_events = pc_alv->get_event( ).
*--Set event handler for hotpsot
SET HANDLER lf_report->hotspot_click FOR lf_events.
ENDMETHOD. "hotspot
METHOD hotspot_click.
DATA:la_show TYPE type_show.
*--Read the internal table using the captured row index
READ TABLE lf_report->i_show INTO la_show INDEX row.
CHECK sy-subrc = 0.
*--Check if the clicked column is EBELN
CHECK column = 'OPBEL'.
* SET PARAMETER ID 'BES' FIELD la_show-opbel.
* CALL TRANSACTION 'ME23N' AND SKIP FIRST SCREEN.
ENDMETHOD. "on_link_click
METHOD click.
DATA: lf_cols_tab TYPE REF TO cl_salv_columns_table,
lf_col_tab TYPE REF TO cl_salv_column_table.
DATA: lf_events TYPE REF TO cl_salv_events_table.
lf_cols_tab = pc_alv->get_columns( ).
TRY.
lf_col_tab ?= lf_cols_tab->get_column( 'OPBEL' ).
CATCH cx_salv_not_found.
ENDTRY.
TRY.
CALL METHOD lf_col_tab->set_cell_type
EXPORTING
value = if_salv_c_cell_type=>text. "0-stands for text
CATCH cx_salv_data_error .
ENDTRY.
lf_events = pc_alv->get_event( ).
*--Set event handler for hotpsot
SET HANDLER lf_report->double_click FOR lf_events.
ENDMETHOD. "hotspot
METHOD double_click.
DATA:la_show TYPE type_show.
*--Read the internal table using the captured row index
READ TABLE lf_report->i_show INTO la_show INDEX row.
CHECK sy-subrc = 0.
*--Check if the clicked column is EBELN
CHECK column = 'ANLAGE'.
* SET PARAMETER ID 'MAT' FIELD la_ekpo-matnr.
11. * CALL TRANSACTION 'MM03' AND SKIP FIRST SCREEN.
ENDMETHOD. "on_link_click
METHOD end_of_page.
DATA:lf_lines TYPE sy-tfill.
DATA: lf_footer TYPE REF TO cl_salv_form_layout_grid,
lf_label TYPE REF TO cl_salv_form_label,
lf_flow TYPE REF TO cl_salv_form_layout_flow.
CREATE OBJECT lf_footer.
*--get total lines in internal table
lf_lines = lines( lf_report->i_out ).
lf_label = lf_footer->create_label( row = 1 column = 1 ).
lf_label->set_text( 'Information:'(019) ).
lf_flow = lf_footer->create_flow( row = 2 column = 1 ).
lf_flow->create_text( text = 'Total Number of Entries'(018) ).
lf_flow = lf_footer->create_flow( row = 2 column = 2 ).
lf_flow->create_text( text = lf_lines ).
wf_alv->set_end_of_list( lf_footer ).
ENDMETHOD. "end_of_page
METHOD colors.
INCLUDE <color>.
DATA: lf_cols_tab TYPE REF TO cl_salv_columns_table,
lf_col_tab TYPE REF TO cl_salv_column_table.
DATA: la_color TYPE lvc_s_colo.
DATA: la_show TYPE type_show.
DATA: i_s_color TYPE lvc_t_scol,
la_s_color TYPE lvc_s_scol.
lf_cols_tab = pc_alv->get_columns( ).
*--Colouring a particular column only
TRY.
lf_col_tab ?= lf_cols_tab->get_column( 'I_ABRMENGE' ).
la_color-col = col_total.
lf_col_tab->set_color( la_color ).
CATCH cx_salv_not_found.
ENDTRY.
*--Colouring a praticular cell/row if required
LOOP AT i_show INTO la_show.
*--Colour if the line item is 0001
IF la_show-opbel = '00001'.
la_s_color-color-col = col_positive.
la_s_color-color-int = 0.
la_s_color-color-inv = 0.
APPEND la_s_color TO i_s_color.
la_show-t_color = i_s_color.
MODIFY i_show FROM la_show.
CLEAR :la_s_color,i_s_color.
ENDIF.
ENDLOOP.
ENDMETHOD. "end_of_page
METHOD totals.
DATA: lf_agg TYPE REF TO cl_salv_aggregations.
lf_agg = pc_alv->get_aggregations( ).
TRY.
CALL METHOD lf_agg->add_aggregation
EXPORTING
columnname = 'I_ABRMENGE'
aggregation = if_salv_c_aggregation=>total.
CATCH cx_salv_data_error . "#EC NO_HANDLER
CATCH cx_salv_not_found . "#EC NO_HANDLER
CATCH cx_salv_existing . "#EC NO_HANDLER
ENDTRY.
ENDMETHOD. "total
METHOD f4_layout.
DATA:lf_layout TYPE REF TO cl_salv_layout,
lf_layout_key TYPE salv_s_layout_key,
12. la_layout TYPE salv_s_layout,
i_layout_info TYPE salv_t_layout_info.
lf_layout_key-report = sy-repid.
lf_layout = wf_alv->get_layout( ).
lf_layout->set_key( lf_layout_key ).
i_layout_info = lf_layout->get_layouts( ).
CHECK i_layout_info[] IS NOT INITIAL.
la_layout = lf_layout->f4_layouts( ).
p_anlage = la_layout-layout.
ENDMETHOD. "f4_layout
METHOD layout_set.
DATA:lf_layout TYPE REF TO cl_salv_layout,
lf_layout_key TYPE salv_s_layout_key.
lf_layout = pc_alv->get_layout( ).
lf_layout_key-report = sy-repid.
lf_layout->set_key( lf_layout_key ).
lf_layout->set_save_restriction( 3 ). "RESTRICT_NONE
IF p_anlage IS NOT INITIAL.
lf_layout->set_initial_layout( p_anlage ).
ELSE.
lf_layout->set_default( abap_true ).
ENDIF.
ENDMETHOD. "layout_set
METHOD sort.
DATA:lf_sort TYPE REF TO cl_salv_sorts.
lf_sort = pc_alv->get_sorts( ).
TRY.
lf_sort->add_sort( columnname = 'OPBEL'
sequence = '1' "SORT_UP
subtotal = abap_true ).
CATCH cx_salv_not_found .
CATCH cx_salv_existing .
CATCH cx_salv_data_error .
ENDTRY.
ENDMETHOD. "sort
ENDCLASS. "lcl_salv_common IMPLELEMTATION