Skip to Content

REPORT zmmr_perf_eval_vend.

“Types Declaration
TYPES:BEGIN OF t_disp,
   lifnr
TYPE lifnr,
   name1
TYPE name1_gp,
   bedat
TYPE bedat,
   rfq 
TYPE I ,
   quot
TYPE I ,
   po  
TYPE I ,
   cont
TYPE I ,
   sch 
TYPE I ,
END OF t_disp,
BEGIN OF t_temp,
   lifnr
TYPE lifnr,
 
CNT   TYPE I ,
END OF t_temp,
BEGIN OF t_lfa1,
   lifnr
TYPE lifnr,
   name1
TYPE name1_gp,
END OF t_lfa1.

“For ALV {
DATA: “it_layout   TYPE lvc_s_layo,
       gr_table
TYPE REF TO cl_salv_table,
       gr_functions
TYPE REF TO cl_salv_functions,
       gr_columns
TYPE REF TO cl_salv_columns_table,
       gr_column
TYPE REF TO cl_salv_column_table,
       gr_display
TYPE REF TO cl_salv_display_settings,
       lr_grid
TYPE REF TO cl_salv_form_layout_grid,
       lr_gridx
TYPE REF TO cl_salv_form_layout_grid,
       lr_logo
TYPE REF TO cl_salv_form_layout_logo,
       lr_label
TYPE REF TO cl_salv_form_label,
       lr_text
TYPE REF TO cl_salv_form_text,
       lr_footer
TYPE REF TO cl_salv_form_layout_grid,
       ls_color
TYPE lvc_s_colo
     
.
” For ALV }

DATA: it_disp TYPE TABLE OF t_disp,
       wa_disp
LIKE LINE OF it_disp,
       it_temp
TYPE TABLE OF t_temp,
       wa_temp
LIKE LINE OF it_temp,
       it_lfa1
TYPE TABLE OF t_lfa1,
       wa_lfa1
LIKE LINE OF it_lfa1.

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE TEXT 001.
 
SELECT-OPTIONS : s_lifnr FOR wa_disp lifnr,
   s_bedat
FOR wa_disp bedat.
SELECTION-SCREEN END OF BLOCK b1.

*———————————————————————-*
*       CLASS lcl_Perf_Eval DEFINITION
*———————————————————————-*
*
*———————————————————————-*
CLASS lcl_perf_eval DEFINITION .
 
PUBLIC SECTION.
 
METHODS: constructor ,
   fill_disp
.
 
METHODS build_fc.
 
METHODS disp_alv.
 
METHODS set_tol.
 
METHODS end_of_page.

ENDCLASS.                   “lcl_perf_eval DEFINITION

*———————————————————————-*
*       CLASS lcl_perf_eval IMPLEMENTATION
*———————————————————————-*
*
*———————————————————————-*
CLASS lcl_perf_eval IMPLEMENTATION .
 
METHOD constructor.
   
TRY.
       cl_salv_table
=> factory( IMPORTING r_salv_table = gr_table CHANGING t_table = it_disp ). “Calling Factory Obj of Cl_ALV_TABLE
   
CATCH cx_salv_msg.
   
ENDTRY .

    IF gr_table IS INITIAL .
     
MESSAGE TEXT 002 TYPE ‘I’ DISPLAY LIKE ‘E’.
     
EXIT .
   
ENDIF .
 
ENDMETHOD.                   “constructor

  METHOD fill_disp.
   
“RFQ
   
SELECT a~lifnr COUNT( DISTINCT a~ebeln ) AS rfq FROM ekko AS a
   
JOIN ekpo AS b ON a~ ebeln = b ~ebeln
   
INTO CORRESPONDING FIELDS OF TABLE it_disp
   
WHERE a~lifnr IN s_lifnr AND bedat IN s_bedat
   
AND b~loekz NE ‘X’
   
AND a~bstyp = ‘A’
   
GROUP BY a~lifnr .

    “WRITE sy-dbcnt.
   
“Quot
   
SELECT lifnr COUNT( DISTINCT ebeln ) AS CNT FROM ekko
   
APPENDING CORRESPONDING FIELDS OF TABLE it_temp
   
WHERE lifnr IN s_lifnr AND bedat IN s_bedat
   
AND loekz EQ space
   
AND ( bstyp = ‘A’ AND statu = ‘A’ )
   
GROUP BY lifnr.

    LOOP AT it_temp INTO wa_temp .
       wa_disp
lifnr = wa_temp lifnr.
       wa_disp
quot = wa_temp CNT.
     
MODIFY it_disp FROM wa_disp TRANSPORTING lifnr quot WHERE lifnr = wa_templifnr .
     
CLEAR : wa_disp, wa_temp.
   
ENDLOOP .

    ” PO
   
REFRESH it_temp.
   
SELECT lifnr COUNT( DISTINCT a~ ebeln ) AS CNT FROM ekko AS a JOIN ekpo AS b ON a~ ebeln = b ~ebeln
   
APPENDING CORRESPONDING FIELDS OF TABLE it_temp
   
WHERE lifnr IN s_lifnr AND bedat IN s_bedat
   
AND b~loekz EQ space
   
AND bsart NE ‘UB’
   
AND ( a~ bstyp = ‘F’ )
   
GROUP BY lifnr.

    LOOP AT it_temp INTO wa_temp .
       wa_disp
lifnr = wa_temp lifnr.
       wa_disp
po = wa_temp CNT.
     
MODIFY it_disp FROM wa_disp TRANSPORTING lifnr po WHERE lifnr = wa_templifnr .
     
IF sysubrc NE 0.
       
APPEND wa_disp TO it_disp .
     
ENDIF .
     
CLEAR : wa_disp, wa_temp.
   
ENDLOOP .

    “Cont. Created
   
REFRESH it_temp.
   
SELECT lifnr COUNT( DISTINCT a~ ebeln ) AS CNT FROM ekko AS a JOIN ekpo AS b ON a~ ebeln = b ~ebeln
   
APPENDING CORRESPONDING FIELDS OF TABLE it_temp
   
WHERE lifnr IN s_lifnr AND bedat IN s_bedat
   
AND b~loekz EQ space
   
AND ( a~ bstyp = ‘K’ )
   
GROUP BY lifnr.

    LOOP AT it_temp INTO wa_temp .
       wa_disp
lifnr = wa_temp lifnr.
       wa_disp
cont = wa_temp CNT.
     
MODIFY it_disp FROM wa_disp TRANSPORTING lifnr cont WHERE lifnr = wa_templifnr .
     
IF sysubrc NE 0.
       
APPEND wa_disp TO it_disp .
     
ENDIF .
     
CLEAR : wa_disp, wa_temp.
   
ENDLOOP .

    “Sch Aggre
   
REFRESH it_temp.
   
SELECT lifnr COUNT( DISTINCT a~ ebeln ) AS CNT FROM ekko AS a JOIN ekpo AS b ON a~ ebeln = b ~ebeln
   
APPENDING CORRESPONDING FIELDS OF TABLE it_temp
   
WHERE lifnr IN s_lifnr AND bedat IN s_bedat
   
AND b~loekz EQ space
   
AND ( a~ bstyp = ‘L’ )
   
GROUP BY lifnr.

    LOOP AT it_temp INTO wa_temp .
       wa_disp
lifnr = wa_temp lifnr.
       wa_disp
sch = wa_temp CNT.
     
MODIFY it_disp FROM wa_disp TRANSPORTING lifnr sch WHERE lifnr = wa_templifnr .
     
IF sysubrc NE 0.
       
APPEND wa_disp TO it_disp .
     
ENDIF .
     
CLEAR : wa_disp, wa_temp.
   
ENDLOOP .

    SELECT lifnr name1 FROM lfa1
   
INTO CORRESPONDING FIELDS OF TABLE it_lfa1
   
FOR ALL ENTRIES IN it_disp
   
WHERE lifnr = it_disp lifnr.

    LOOP AT it_disp INTO wa_disp .
     
READ TABLE it_lfa1 INTO wa_lfa1 WITH KEY lifnr = wa_displifnr .
     
IF sysubrc EQ 0.
         wa_disp
name1 = wa_lfa1 name1.
       
MODIFY it_disp FROM wa_disp TRANSPORTING lifnr name1 WHERE lifnr = wa_disp lifnr .
     
ENDIF .
   
ENDLOOP .

    SORT it_disp BY lifnr .

  ENDMETHOD.                   “fill_disp
 
METHOD build_fc.

    INCLUDE <color>.
   
TRY.
       gr_columns
= gr_table->get_columns ( ).
       gr_columns
-> set_optimize( abap_true ).
       gr_column ?= gr_columns
-> get_column( ‘LIFNR’ ).
       ls_color
col = 3 .
       gr_column
-> set_color( ls_color ).

    CATCH cx_salv_not_found.
   
ENDTRY .

    TRY.
       gr_column ?= gr_columns
-> get_column( ‘NAME1’ ).
       gr_column
-> set_long_text(‘Vendor Name’ ).
       gr_column
-> set_short_text( ‘V.Name’ ).
       gr_column
-> set_medium_text(‘Vendor Name’ ).
       ls_color
col = 3 .
       gr_column
-> set_color( ls_color ).
   
CATCH cx_salv_not_found.
   
ENDTRY .

    TRY.
       gr_column ?= gr_columns
-> get_column( ‘BEDAT’ ).
       gr_column
-> set_visible( abap_false ).
       gr_column
-> set_technical( VALUE = if_salv_c_bool_sap=> true ).
   
CATCH cx_salv_not_found.
   
ENDTRY .

    TRY.
       gr_column ?= gr_columns
-> get_column( ‘RFQ’ ).
       gr_column
-> set_short_text( ‘RFQ’ ).
       gr_column
-> set_medium_text( ‘RFQ Created’ ).
   
CATCH cx_salv_not_found.
   
ENDTRY .

    TRY.
       gr_column ?= gr_columns
-> get_column( ‘QUOT’ ).
       gr_column
-> set_short_text( ‘Quot.’ ).
       gr_column
-> set_medium_text( ‘Quotation Maintained’ ).
   
CATCH cx_salv_not_found.
   
ENDTRY .
   
TRY.
       gr_column ?= gr_columns
-> get_column( ‘PO’ ).
       gr_column
-> set_short_text( ‘PO Created’ ).
   
CATCH cx_salv_not_found.
   
ENDTRY .

    TRY.
       gr_column ?= gr_columns
-> get_column( ‘CONT’ ).
       gr_column
-> set_short_text( ‘Cont.’ ).
       gr_column
-> set_medium_text( ‘Contract Created’ ).
   
CATCH cx_salv_not_found.
   
ENDTRY .
   
TRY.
       gr_column ?= gr_columns
-> get_column( ‘SCH’ ).
       gr_column
-> set_short_text( ‘Sch. Crea.’ ).
       gr_column
-> set_medium_text( ‘Sch. Agr. Created’ ).
       gr_column
-> set_long_text( ‘Schedule Agreement Created’ ).
   
CATCH cx_salv_not_found.
   
ENDTRY .

  ENDMETHOD.                   “build_fc

  METHOD disp_alv.

     set_tol( ).
     build_fc
( ).
     end_of_page
( ).

     gr_functions = gr_table->get_functions ( ).
     gr_functions
-> set_all( abap_true ).
     gr_table
-> set_top_of_list( lr_logo ).
     gr_table
-> set_end_of_list( lr_footer ).
     gr_display
= gr_table->get_display_settings ( ).
     gr_display
-> set_striped_pattern( cl_salv_display_settings =>true ).

     gr_table-> display( ).

  ENDMETHOD.                   “disp_alv
 
METHOD set_tol.
   
DATA : lv_text( 30) TYPE C ,
           lv_date
TYPE C LENGTH 10.

    CREATE OBJECT lr_grid.

     lr_grid-> create_header_information( row = 1 column = 1
   
TEXT = ‘MM: Vendor Evaluation’
     tooltip
= ‘MM: Vendor Evaluation’ ).

     lr_gridx = lr_grid->create_grid ( row = 2 column = 1 ).
     lr_label
= lr_gridx->create_label ( row = 2 column = 1
   
TEXT = ‘Vendor No # :’ tooltip = ‘Vendor #.’ ).

    IF s_lifnr IS NOT INITIAL .
       lv_text
= s_lifnrlow .
     
IF s_lifnrhigh IS NOT INITIAL.
       
CONCATENATE lv_text ‘ to ‘ s_lifnr high INTO lv_text SEPARATED BY space.
     
ENDIF .
   
ELSE .
       lv_text
= ‘Not Provided’.
   
ENDIF .
     lr_text
= lr_gridx->create_text ( row = 2 column = 2
   
TEXT = lv_text tooltip = lv_text ).
   
“Vendor
     lr_label
= lr_gridx->create_label ( row = 3 column = 1
   
TEXT = ‘Posting Date:’ tooltip = ‘Posting Date’ ).
   
IF s_bedat IS NOT INITIAL .
     
WRITE s_bedatlow DD/MM/YYYY TO lv_text .
     
IF s_bedathigh IS NOT INITIAL.
       
WRITE s_bedathigh DD/MM/YYYY TO lv_date.
       
CONCATENATE lv_text ‘ to ‘ lv_date INTO lv_text SEPARATED BY space.
     
ENDIF .
   
ELSE .
       lv_text
= ‘Not Provided’.
   
ENDIF .

     lr_text = lr_gridx->create_text ( row = 3 column = 2
   
TEXT = lv_text  tooltip = lv_text ).

     lr_label = lr_gridx->create_label ( row = 4 column = 1
   
TEXT = ‘Run Date:’ tooltip = ‘Run Date’ ).
     lr_text
= lr_gridx->create_text ( row = 4 column = 2
   
TEXT = sy datum tooltip = sy datum ).

     lr_label = lr_gridx->create_label ( row = 5 column = 1 ).
     lr_label
= lr_gridx->create_label ( row = 6 column = 1 ).
     lr_label
= lr_gridx->create_label ( row = 7 column = 1 ).
     lr_label
= lr_gridx->create_label ( row = 8 column = 1 ).

* Create logo layout, set grid content on left and logo image on right
   
CREATE OBJECT lr_logo.
     lr_logo
-> set_left_content( lr_grid ).
     lr_logo
-> set_right_logo( ‘ZCHEM_N_LOGO_SMALL’ ). ” Image From OAER T.code

  ENDMETHOD.                   “set_Tol

  METHOD end_of_page.

    DATA :lf_lines TYPE sytfill .

    DATA : “lr_label TYPE REF TO cl_salv_form_label,
           lf_flow
TYPE REF TO cl_salv_form_layout_flow .

    CREATE OBJECT lr_footer.
*–get total lines in internal table
     lf_lines
= LINES( it_disp ).
     lr_label
= lr_footer->create_label ( row = 1 column = 1 ).
     lr_label
-> set_text( ‘Information:’ ).
     lf_flow
= lr_footer->create_flow ( row = 2 column = 1 ).
     lf_flow
-> create_text( TEXT = ‘Total Number of Entries’ ).
     lf_flow
= lr_footer->create_flow ( row = 2 column = 2 ).
     lf_flow
-> create_text( TEXT = lf_lines ).

  ENDMETHOD.                   “end_of_page

ENDCLASS.                   “lcl_perf_eval IMPLEMENTATION

START-OF-SELECTION.
DATA : obj_rep TYPE REF TO lcl_perf_eval. ” Declaring Object for Class

CREATE OBJECT : obj_rep. ” Creating Object

obj_rep->fill_disp( ). ” Calling class Methods
obj_rep
->disp_alv( ).

To report this post you need to login first.

15 Comments

You must be Logged on to comment or reply to a post.

    1. Antonio López Sánchez Post author

      It was just one test Oleg , to check the gamification engine.  On the other hand, I think it´s nearly impossible to post something that no one had posted before when you´re writing your own blog. Most of the time you just share solutions of your daily problems, that somebody achieve before 😉

      (0) 
  1. VR V

    Hi Antonio,

    This report tells about more functionalities of ALV using OOABAP.

    But could you give me the documentation of this report so that we can figure it out what is the main objective of the report.

    (0) 
      1. Edwin Vleeshouwers

        A tip: Instead of typing SAP has adopted a cool feature from Text processing applications, where it is used frequently…

        If you first select all the code, then while it is selected, hold down the Control key (CTRL) and, while it is pressed (this part is important), press the C key, then all the selected text is copied to the computer’s memory.

        Then you can copy the text back into a SAP report program. To do this put the cursor in the first line of a new program. Then hold down the Control key (CTRL) and, while it is pressed (again this part is important), press the V key.

        In short:

        CTRL+C

        CTRL+V

        To top off this cool feature, SAP added the CTRL+Y option. This I leave to Google.

        P.S. Yes, this could have been a Wiki.

        P.P.S. Please do not take this post seriously 😉

        (0) 
  2. AMEYA KARADKHEDKAR

    Nice Program. but i have one problem in that if i do not want display one field of final internal table it_disp  but at output shows this field.suppose i do not want vendor number to display  that time this shows vendor number in output. so how can i overcome this problems?? 😕

    (0) 
    1. Antonio López Sánchez Post author

      Hi Ameya,

      if you want to hide a field on the output, just hide it modifying the layout with this code, before this line: “  ENDMETHOD.                   “build_fc

      The code:

      *********************************************************************

      TRY.

             gr_column ?= gr_columns-> get_column( ‘LIFNR’ ).

         gr_column-> set_visible( abap_false ).

          CATCH cx_salv_not_found.

          ENDTRY .

      *********************************************************************

      Best regards,

      Antonio.

      (0) 

Leave a Reply