SlideShare a Scribd company logo
1 of 12
*&---------------------------------------------------------------------*
*& 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
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.
*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
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
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.
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.
*    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,
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 ).
lf_column = lf_cols->get_column( 'ZZCUSTOMER'(020) ).
        lf_column->set_long_text( 'Muhatap/Organizasyon Adý'(021) ).
        lf_column->set_medium_text( 'Muhatap/Org.Adý'(022) ).
        lf_column->set_short_text( 'Muhatap/Org.Adý'(023) ).

        lf_column = lf_cols->get_column( 'HERST'(013) ).
        lf_column->set_long_text( 'Üretici-Marka'(014) ).
        lf_column->set_medium_text( 'Üretici-Marka'(016) ).
        lf_column->set_short_text( 'Üretici-Marka'(017) ).

        lf_column = lf_cols->get_column( 'OSB_GROUP_T'(013) ).
        lf_column->set_long_text( 'Endeks Tipi'(014) ).
        lf_column->set_medium_text( 'Endeks Tipi'(016) ).
        lf_column->set_short_text( 'Endeks Tipi'(017) ).

        lf_column = lf_cols->get_column( 'GERAET'(013) ).
        lf_column->set_long_text( 'Cihaz Seri No'(014) ).
        lf_column->set_medium_text( 'Chz.SeriNo'(016) ).
        lf_column->set_short_text( 'SeriNo'(017) ).

        lf_column = lf_cols->get_column( 'AB'(013) ).
        lf_column->set_long_text( 'Ýlk Okuma Tarihi'(014) ).
        lf_column->set_medium_text( 'ÝlkOk.Trh.'(016) ).
        lf_column->set_short_text( 'ÝlkOk.Trh.'(017) ).

        lf_column = lf_cols->get_column( 'BIS'(013) ).
        lf_column->set_long_text( 'Son Okuma Tarihi'(014) ).
        lf_column->set_medium_text( 'SonOk.Trh.'(016) ).
        lf_column->set_short_text( 'SonOk.Trh.'(017) ).

        lf_column = lf_cols->get_column( 'I_ZWSTVOR'(013) ).
        lf_column->set_long_text( 'Ýlk Endeks'(014) ).
        lf_column->set_medium_text( 'Ýlk Endeks'(016) ).
        lf_column->set_short_text( 'ÝlkEnd.'(017) ).

        lf_column = lf_cols->get_column( 'I_ZWSTNDAB'(013) ).
        lf_column->set_long_text( 'Son Endeks'(014) ).
        lf_column->set_medium_text( 'Son Endeks'(016) ).
        lf_column->set_short_text( 'SonEnd.'(017) ).

        lf_column = lf_cols->get_column( 'UMWFAKT'(013) ).
        lf_column->set_long_text( 'Çarpan'(014) ).
        lf_column->set_medium_text( 'Çarpan'(016) ).
        lf_column->set_short_text( 'Çarpan'(017) ).

        lf_column = lf_cols->get_column( 'I_ABRMENGE'(013) ).
        lf_column->set_long_text( 'Tüketim-KWH'(014) ).
        lf_column->set_medium_text( 'Tüketim-KWH'(016) ).
        lf_column->set_short_text( 'Tük.-KWH'(017) ).

        lf_column = lf_cols->get_column( 'ISTYPE'(013) ).
        lf_column->set_long_text( 'Sektör'(014) ).
        lf_column->set_medium_text( 'Sektör'(016) ).
        lf_column->set_short_text( 'Sektör'(017) ).

        lf_column = lf_cols->get_column( 'KONDIGR_T'(013) ).
        lf_column->set_long_text( 'Abone/Müþteri Grubu'(014) ).
        lf_column->set_medium_text( 'Abone/Müþt.Grb.'(016) ).
        lf_column->set_short_text( 'Abone/Müþt.Grb.'(017) ).

*--Set the output length for field
*    lf_column->set_output_length( 13 ).
      CATCH cx_root.                                     "#EC CATCH_ALL
    ENDTRY.
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.
*    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,
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

More Related Content

Featured

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024Neil Kimberley
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)contently
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024Albert Qian
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsKurio // The Social Media Age(ncy)
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Search Engine Journal
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summarySpeakerHub
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next Tessa Mero
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentLily Ray
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best PracticesVit Horky
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project managementMindGenius
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...RachelPearson36
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Applitools
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at WorkGetSmarter
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...DevGAMM Conference
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationErica Santiago
 

Featured (20)

PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
Unlocking the Power of ChatGPT and AI in Testing - A Real-World Look, present...
 
12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work12 Ways to Increase Your Influence at Work
12 Ways to Increase Your Influence at Work
 
ChatGPT webinar slides
ChatGPT webinar slidesChatGPT webinar slides
ChatGPT webinar slides
 
More than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike RoutesMore than Just Lines on a Map: Best Practices for U.S Bike Routes
More than Just Lines on a Map: Best Practices for U.S Bike Routes
 
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
Ride the Storm: Navigating Through Unstable Periods / Katerina Rudko (Belka G...
 
Barbie - Brand Strategy Presentation
Barbie - Brand Strategy PresentationBarbie - Brand Strategy Presentation
Barbie - Brand Strategy Presentation
 

11.04.2013

  • 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 ).
  • 9. lf_column = lf_cols->get_column( 'ZZCUSTOMER'(020) ). lf_column->set_long_text( 'Muhatap/Organizasyon Adý'(021) ). lf_column->set_medium_text( 'Muhatap/Org.Adý'(022) ). lf_column->set_short_text( 'Muhatap/Org.Adý'(023) ). lf_column = lf_cols->get_column( 'HERST'(013) ). lf_column->set_long_text( 'Üretici-Marka'(014) ). lf_column->set_medium_text( 'Üretici-Marka'(016) ). lf_column->set_short_text( 'Üretici-Marka'(017) ). lf_column = lf_cols->get_column( 'OSB_GROUP_T'(013) ). lf_column->set_long_text( 'Endeks Tipi'(014) ). lf_column->set_medium_text( 'Endeks Tipi'(016) ). lf_column->set_short_text( 'Endeks Tipi'(017) ). lf_column = lf_cols->get_column( 'GERAET'(013) ). lf_column->set_long_text( 'Cihaz Seri No'(014) ). lf_column->set_medium_text( 'Chz.SeriNo'(016) ). lf_column->set_short_text( 'SeriNo'(017) ). lf_column = lf_cols->get_column( 'AB'(013) ). lf_column->set_long_text( 'Ýlk Okuma Tarihi'(014) ). lf_column->set_medium_text( 'ÝlkOk.Trh.'(016) ). lf_column->set_short_text( 'ÝlkOk.Trh.'(017) ). lf_column = lf_cols->get_column( 'BIS'(013) ). lf_column->set_long_text( 'Son Okuma Tarihi'(014) ). lf_column->set_medium_text( 'SonOk.Trh.'(016) ). lf_column->set_short_text( 'SonOk.Trh.'(017) ). lf_column = lf_cols->get_column( 'I_ZWSTVOR'(013) ). lf_column->set_long_text( 'Ýlk Endeks'(014) ). lf_column->set_medium_text( 'Ýlk Endeks'(016) ). lf_column->set_short_text( 'ÝlkEnd.'(017) ). lf_column = lf_cols->get_column( 'I_ZWSTNDAB'(013) ). lf_column->set_long_text( 'Son Endeks'(014) ). lf_column->set_medium_text( 'Son Endeks'(016) ). lf_column->set_short_text( 'SonEnd.'(017) ). lf_column = lf_cols->get_column( 'UMWFAKT'(013) ). lf_column->set_long_text( 'Çarpan'(014) ). lf_column->set_medium_text( 'Çarpan'(016) ). lf_column->set_short_text( 'Çarpan'(017) ). lf_column = lf_cols->get_column( 'I_ABRMENGE'(013) ). lf_column->set_long_text( 'Tüketim-KWH'(014) ). lf_column->set_medium_text( 'Tüketim-KWH'(016) ). lf_column->set_short_text( 'Tük.-KWH'(017) ). lf_column = lf_cols->get_column( 'ISTYPE'(013) ). lf_column->set_long_text( 'Sektör'(014) ). lf_column->set_medium_text( 'Sektör'(016) ). lf_column->set_short_text( 'Sektör'(017) ). lf_column = lf_cols->get_column( 'KONDIGR_T'(013) ). lf_column->set_long_text( 'Abone/Müþteri Grubu'(014) ). lf_column->set_medium_text( 'Abone/Müþt.Grb.'(016) ). lf_column->set_short_text( 'Abone/Müþt.Grb.'(017) ). *--Set the output length for field * lf_column->set_output_length( 13 ). CATCH cx_root. "#EC CATCH_ALL ENDTRY.
  • 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