Welcome To My BLOG

This site is to give a brief idea for the abap learners who are looking for some real time programs .It consists of collection of programs from my side . I hope these programs are very much used for all of the learners. Please check the links for any information in ABAP.
Please vote for my Blog. And please input me on this mail addrssess.Email me

Share this link with your friends

http://www.rebtel.com/u/15163104576

For every friend who signs up using this link and makes a payment, we'll give you 8 €!


Thursday, May 10, 2012

SALV Program


SALV Output.

REPORT  zmae_check MESSAGE-ID yp.

TYPE-POOLS: abap, col, icon, sym.

TABLES: yylm, yylp, yylp_fz, yylp_azt, yyll, y9l68, aufk, tka02, y9l01.

DATA: datv TYPE d,
      datb 
TYPE d.
CONSTANTS con_min TYPE meinh VALUE 'MIN'.
*----------------------------------------------------------------------*
* SELECTION-SCREEN                                                     *
*----------------------------------------------------------------------*
SELECTION-
SCREENBEGIN OF BLOCK b1 WITH FRAME.
SELECT-OPTIONS: s_date FOR sy-datum DEFAULT datv TO datb NO-EXTENSION.
PARAMETER: p_bukrs LIKE yr90a-bukrs.
SELECT-OPTIONS s_zpern FOR yylp-zpern.
SELECTION-
SCREENSKIP.
PARAMETERS: p_verper DEFAULT 'X' TYPE c RADIOBUTTON GROUP ver,
            p_detail             
TYPE c RADIOBUTTON GROUP ver.
SELECTION-
SCREENEND OF BLOCK b1.
*----------------------------------------------------------------------*
* Data                                                                 *
*----------------------------------------------------------------------*
DATA: ws_ucomm LIKE sy-ucomm.

DATA: auth_missing TYPE c VALUE ''.

DATA: qvk  TYPE yyorges,
      qnk  
TYPE yyorges,
      n    
TYPE i.

DATA: fwpid TYPE yst_mlsk_rep_fwp_id,
      fwpstd 
TYPE yst_mlsk_rep_fwp_std,
      t_gesstd 
TYPE y_tab_mlsk_rep_fwp_std,
      t_fwpstd 
TYPE y_tab_mlsk_rep_fwp_std.

DATA:
    
BEGIN OF s_out.
INCLUDE TYPE yst_mlsk_rep_fwp_std.
DATA:
    exception(
1TYPE n,
    diffstd      
TYPE yynveze,
    
icon(4)      TYPE c,  "icon_d,
  
END OF s_out,

  t_out 
LIKE STANDARD TABLE OF s_out.

DATA: t_y9l68 TYPE y9l68 OCCURS 0 WITH HEADER LINE.

DATA: t_zpern TYPE TABLE OF yypern WITH HEADER LINE.

DATA: gr_table TYPE REF TO cl_salv_table.

*----------------------------------------------------------------------*
* LOAD-OF-PROGRAM                                                      *
*----------------------------------------------------------------------*
LOAD-OF-PROGRAM.
  datv = sy-datum.
  datv+
6(2) = '01'.
  
SUBTRACT 1 FROM datv.
  datb = datv.
  datv+
6(2) = '01'.


AT SELECTION-SCREEN.
  ws_ucomm = sy-ucomm.
  
CASE ws_ucomm.
    
WHEN '&BACK'.
      
SET SCREEN 0.
      
EXIT.
    
WHEN '&EXIT'.
      
SET SCREEN 0.
      
EXIT.
    
WHEN '&CANC'.
      
SET SCREEN 0.
      
LEAVE TO SCREEN 0.
  
ENDCASE.
*----------------------------------------------------------------------*
* START-OF-SELECTION                                                   *
*----------------------------------------------------------------------*
START-
OF-SELECTION.

  
PERFORM get_data.

  
PERFORM display_fullscreen.

  
IF auth_missing = 'X' .
    
MESSAGE s144(kb) .
  
ENDIF .
*&---------------------------------------------------------------------*
*&      Form  display_fullscreen
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM display_fullscreen .

  
TRY.
      cl_salv_table=>factory(
        
IMPORTING
          r_salv_table = gr_table
        
CHANGING
          t_table      = t_out ).
    
CATCH cx_salv_msg.
  
ENDTRY.

  
PERFORM set_metadata.

  gr_table->display( ).

ENDFORM.                    "display_fullscreen

*&---------------------------------------------------------------------*
*&      Form  set_metadata
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_metadata .

  
PERFORM set_functions.
  
PERFORM set_layout_settings.
  
PERFORM set_header.
  
PERFORM set_display_settings.
  
PERFORM set_columns.
  
PERFORM set_sort.
  
PERFORM set_aggregations.
  
PERFORM set_filter.

ENDFORM.                    "set_metadata
*&---------------------------------------------------------------------*
*&      Form  set_display_settings
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
FORM set_display_settings.

  
DATA:
    ls_display 
TYPE REF TO cl_salv_display_settings.

  ls_display = gr_table->get_display_settings( ).

  
TRY.
      ls_display->set_list_header( 
text-001 ).
      ls_display->set_vertical_lines( abap_false ).
      ls_display->set_horizontal_lines( abap_false ).
      ls_display->set_striped_pattern( abap_true ).
      ls_display->set_list_header_size( cl_salv_display_settings=>c_header_size_small ).
      ls_display->set_suppress_empty_data( abap_true ).

    
CATCH cx_no_check.
  
ENDTRY.

ENDFORM.                    "set_display_settings

*&--------------------------------------------------------------------*
*&      Form  set_columns
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM set_columns.


  
DATA:
    lr_columns 
TYPE REF TO cl_salv_columns_table,
    lr_column  
TYPE REF TO cl_salv_column_table.

  lr_columns = gr_table->get_columns( ).

  lr_columns->set_optimize( abap_true ).


*  TRY.
*      lr_columns->set_exception_column( 'EXCEPTION' ).
*    CATCH cx_salv_data_error.
*  ENDTRY.

  
TRY.
      lr_column ?= lr_columns->get_column( 
'ICON' ).
      lr_column->set_icon( if_salv_c_bool_sap=>true ).
      lr_column->set_long_text( 
'Status' ).
      lr_column->set_medium_text( 
'Status' ).
      lr_column->set_short_text( 
'Status' ).
    
CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  
ENDTRY.

  
TRY.
      lr_column ?= lr_columns->get_column( 
'AUFNR' ).
      lr_column->set_technical( abap_true ).
      lr_column ?= lr_columns->get_column( 
'ARBB' ).
      lr_column->set_technical( abap_true ).

    
CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  
ENDTRY.

  
TRY.
      
IF p_detail IS INITIAL.
        lr_column ?= lr_columns->get_column( 
'TAG' ).
        lr_column->set_visible( abap_false ).
      
ENDIF.
    
CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  
ENDTRY.

  
DATA:
    ls_color 
TYPE lvc_s_colo.

  
TRY.
      ls_color-col = col_key.
      lr_column ?= lr_columns->get_column( 
'KTOAN' ).
      lr_column->set_color( ls_color ).
      lr_column ?= lr_columns->get_column( 
'JAHR' ).
      lr_column->set_color( ls_color ).
      lr_column ?= lr_columns->get_column( 
'MONAT' ).
      lr_column->set_color( ls_color ).
      lr_column ?= lr_columns->get_column( 
'TAG' ).
      lr_column->set_color( ls_color ).
    
CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  
ENDTRY.

  
TRY.
      lr_column ?= lr_columns->get_column( 
'DIFFSTD' ).

      ls_color-col = col_key .
      ls_color-int = 
1.

      lr_column->set_color( ls_color ).
    
CATCH cx_salv_not_found.                            "#EC NO_HANDLER
  
ENDTRY.

ENDFORM.                    "set_columns

*&--------------------------------------------------------------------*
*&      Form  set_sort
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM set_sort.

  
DATA:
    lr_sorts 
TYPE REF TO cl_salv_sorts.   "sort information

  lr_sorts = gr_table->get_sorts( ).

  lr_sorts->clear( ).                         
"remove all existing sort setings

  
TRY.
      lr_sorts->add_sort(
        columnname = 
'KTOAN'
        
position   = 1
        sequence   = if_salv_c_sort=>sort_up ).
      lr_sorts->add_sort(
        columnname = 
'JAHR'
        
position   = 2
        sequence   = if_salv_c_sort=>sort_up ).
      lr_sorts->add_sort(
        columnname = 
'MONAT'
        
position   = 3
        subtotal   = abap_true
        sequence   = if_salv_c_sort=>sort_up ).
      
IF NOT p_detail IS INITIAL.
        lr_sorts->add_sort(
          columnname = 
'TAG'
          
position   = 4
          sequence   = if_salv_c_sort=>sort_down ).
      
ENDIF.
    
CATCH cx_salv_not_found cx_salv_existing cx_salv_data_error."#EC NO_HANDLER
  
ENDTRY.


ENDFORM.                    "set_sort

*&--------------------------------------------------------------------*
*&      Form  set_aggregations
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM set_aggregations.

  
DATA:
    lr_aggregations 
TYPE REF TO cl_salv_aggregations.

  lr_aggregations = gr_table->get_aggregations( ).

  lr_aggregations->clear( ).

  
TRY.
      lr_aggregations->add_aggregation( columnname = 
'LSTD_FWP' ).
      lr_aggregations->add_aggregation( columnname = 
'LSTD_KU' ).
      lr_aggregations->add_aggregation( columnname = 
'LSTD_ANW' ).
      lr_aggregations->add_aggregation( columnname = 
'LSTD_SP' ).
      lr_aggregations->add_aggregation( columnname = 
'DIFFSTD' ).
    
CATCH cx_salv_not_found cx_salv_data_error cx_salv_existing."#EC NO_HANDLER
  
ENDTRY.

ENDFORM.                    "set_aggregations

*&--------------------------------------------------------------------*
*&      Form  set_filter
*&--------------------------------------------------------------------*
*       text
*---------------------------------------------------------------------*
FORM set_filter.

  
DATA:
    lr_filters 
TYPE REF TO cl_salv_filters.

  lr_filters = gr_table->get_filters( ).

  lr_filters->clear( ).

  
TRY.
*      lr_filters->add_filter(
*        columnname = ''
*        low        = '' ).
    
CATCH cx_salv_not_found cx_salv_data_error cx_salv_existing."#EC NO_HANDLER
  
ENDTRY.

ENDFORM.                    "set_filter

*&---------------------------------------------------------------------*
*&      Form  ULTIMO
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_YYLL_DAZUB  text
*----------------------------------------------------------------------*
FORM ultimo  USING    p_dat TYPE d.
  p_dat+
6(2) = '28'.
  
ADD 4 TO p_dat.
  p_dat+
6(2) = '01'.
  
SUBTRACT 1 FROM p_dat.
ENDFORM.                    " ULTIMO
*&---------------------------------------------------------------------*
*&      Form  GET_DATA
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM get_data .

  
DATA: l_tol_neg       LIKE yyll-versu ,
        l_tol_pos       
LIKE yyll-versu ,
        l_proz          
LIKE yyll-versu .

  
PERFORM get_param_y9l01  USING p_bukrs
                                 
'PROZ_TOL'
                                 l_tol_pos .
  l_tol_neg = l_tol_pos * -
1 .

  
SELECT * FROM y9l68 INTO TABLE t_y9l68
     
WHERE datab <= s_date-low
       
AND datbi >= s_date-high.

  
SELECT zpern FROM yylp INTO TABLE t_zpern
          
WHERE bukrs = p_bukrs
          
AND zpern IN s_zpern.


  
CHECK sy-subrc = 0.

  
CLEAR: t_gesstd[].

  
LOOP AT t_zpern.


    
SELECT SINGLE * FROM yylm WHERE ktonr = t_zpern.
    
CHECK sy-subrc = 0.
    
SELECT SINGLE * FROM yylp WHERE zpern = yylm-pernr.
    
CHECK sy-subrc = 0.

*... Berechtigungsprüfung
    AUTHORITY-
CHECK OBJECT 'Z:Y-ZEIT'
           
ID 'ACTVT' FIELD '03'
           
ID 'BUKRS' DUMMY
           
ID 'KOSTL' FIELD yylp-zkost.

*... Keine Berechtigung zum Anzeigen der Daten
    
IF sy-subrc <> 0 .
      auth_missing = 
'X'.
      
CONTINUE.
    
ENDIF .

    fwpid-bukrs = yylm-bukrs.
    fwpid-ktonr = yylm-ktonr.
    fwpid-zpern = yylp-zpern.
    fwpid-znam1 = yylp-znam1.
    fwpid-znam2 = yylp-znam2.
    fwpid-zkost = yylp-zkost.
    
CASE yylp-zdire.
      
WHEN '1'.
        fwpid-zdire = 
'LE'.
      
WHEN '2'.
        fwpid-zdire = 
'GE'.
    
ENDCASE.

    
SELECT * FROM yyll
      
WHERE ktoan = yylm-ktonr
        
AND dazub IN s_date.

      fwpstd-ktoan = yyll-ktoan.

      
IF p_detail IS INITIAL.
        
PERFORM ultimo USING yyll-dazub.
      
ENDIF.
      fwpstd-jahr  = yyll-dazub+
0(4).
      fwpstd-monat = yyll-dazub+
4(2).
      fwpstd-tag   = yyll-dazub+
6(2).
      fwpstd-lstde = 
'STD'.
      fwpstd-lstd_fwp = 
0.
      fwpstd-lstd_ku = 
0.
      fwpstd-lstd_anw = 
0.
      
fwpstd-lstd_sp = 0.

      
READ TABLE t_y9l68 WITH KEY aufnr = yyll-aufnr TRANSPORTING NO FIELDS.
      
IF sy-subrc = 0.
        
COMPUTE fwpstd-lstd_fwp = yyll-orges / 60.
      
ELSE.
        
COMPUTE fwpstd-lstd_sp = yyll-orges / 60.
      
ENDIF.

      
COLLECT fwpstd INTO t_gesstd.

    
ENDSELECT.

    
CLEAR fwpstd.
*... Summe der Anwesenheits Zeiten ermitteln
    
SELECT * FROM yylp_azt
            
WHERE zpern =  yylm-pernr
              
AND bukrs =  yylm-bukrs
              
AND datum IN s_date
       
ORDER BY datum.

      fwpstd-ktoan = yylm-ktonr.
      
IF p_detail IS INITIAL.
        
PERFORM ultimo USING yylp_azt-datum.
      
ENDIF.
      fwpstd-jahr  = yylp_azt-datum+
0(4).
      fwpstd-monat = yylp_azt-datum+
4(2).
      fwpstd-tag   = yylp_azt-datum+
6(2).
*    fwpstd-lstde = yylp_azt-aeinh.
      fwpstd-lstde = 
'STD'.
      fwpstd-lstd_fwp = 
0.
      fwpstd-lstd_sp = 
0.
      fwpstd-lstd_ku = 
0.

      qvk = 
TRUNC( yylp_azt-anwzt ).
      qnk = 
FRAC( yylp_azt-anwzt ).
      
COMPUTE n = qnk / '0.05'.
      
COMPUTE fwpstd-lstd_anw = qvk + ( n * '0.05' ).

      
COLLECT fwpstd INTO t_gesstd.
    
ENDSELECT.

*    SORT t_gesstd.
    
CLEAR fwpstd.
*... Summe der Anwesenheits Zeiten ermitteln
    
SELECT * FROM yylp_fz
            
WHERE zpern =  yylm-pernr
              
AND bukrs =  yylm-bukrs
              
AND datum IN s_date.

      
fwpstd-ktoan = yylm-ktonr.
      
IF p_detail IS INITIAL.
        
PERFORM ultimo USING yylp_fz-datum.
      
ENDIF.
      fwpstd-jahr  = yylp_fz-datum+
0(4).
      fwpstd-monat = yylp_fz-datum+
4(2).
      fwpstd-tag   = yylp_fz-datum+
6(2).
      fwpstd-lstde = 
'STD'.
      fwpstd-lstd_fwp = 
0.
      fwpstd-lstd_sp = 
0.
      fwpstd-lstd_ku = 
0.
      fwpstd-lstd_anw = 
0.

      
CASE yylp_fz-lsttyp.
        
WHEN 'K' OR 'U'.
          
IF yylp_fz-meinh = con_min.
            
COMPUTE fwpstd-lstd_ku = yylp_fz-orges / 60.
          
ELSE.
            
COMPUTE fwpstd-lstd_ku = yylp_fz-orges .
          
ENDIF.
      
ENDCASE.

      
COLLECT fwpstd INTO t_gesstd.
    
ENDSELECT.

  
ENDLOOP.
  
CLEAR: s_out, t_out[].

  
LOOP AT t_gesstd INTO fwpstd.

    
MOVE-CORRESPONDING fwpstd TO s_out.
    s_out-diffstd = s_out-lstd_anw - s_out-lstd_fwp - s_out-lstd_sp.

    
IF s_out-lstd_anw  <> 0 .
      l_proz = s_out-diffstd  / s_out-lstd_anw * 
100 .
    
ELSE .
      
IF s_out-diffstd = 0.
        l_proz = 
0 .
      
ELSE.
        l_proz = -
100 .
      
ENDIF.
    
ENDIF .

    
IF l_proz > l_tol_neg AND l_proz < l_tol_pos .
      s_out-
icon   = icon_green_light.
    
ELSEIF l_proz > l_tol_pos .
      s_out-
icon   = icon_yellow_light.
    
ELSEIF l_proz < l_tol_neg .
      s_out-
icon   = icon_red_light.
    
ENDIF .

    
APPEND s_out TO t_out.
  
ENDLOOP.

ENDFORM.                    " GET_DATA
*&---------------------------------------------------------------------*
*&      Form  SET_LAYOUT_SETTINGS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_layout_settings .

  
DATA: lr_layout TYPE REF TO cl_salv_layout,
        ls_key    
TYPE salv_s_layout_key.

  lr_layout = gr_table->get_layout( ).

  ls_key-
report = sy-repid.
  lr_layout->set_key( ls_key ).
  lr_layout->set_save_restriction( if_salv_c_layout=>restrict_none ).

  
IF p_detail IS INITIAL.
    lr_layout->set_initial_layout( 
'/SUM' ).
  
ELSE.
    lr_layout->set_initial_layout( 
'/STD' ).
  
ENDIF.

ENDFORM.                    " SET_LAYOUT_SETTINGS
*&---------------------------------------------------------------------*
*&      Form  SET_FUNCTIONS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_functions .

  
DATA: lr_functions TYPE REF TO cl_salv_functions_list.

  lr_functions = gr_table->get_functions( ).
  lr_functions->set_default( ).

ENDFORM.                    " SET_FUNCTIONS
*&---------------------------------------------------------------------*
*&      Form  SET_HEADER
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM set_header .
*... TOP_OF_LIST
  
DATA: lr_header TYPE REF TO cl_salv_form_header_info.

  
DATA: txt(100TYPE c,
        datv(
10TYPE c,
        datb(
10TYPE c.

  
WRITE: s_date-low TO datv.
  
WRITE: s_date-high TO datb.
  
CONCATENATE 'FWP: gebuchte Stunden Zeitraum'(002) datv ' - ' datb INTO txt SEPARATED BY space.

  
CREATE OBJECT lr_header
    
EXPORTING
      
text = txt.
  gr_table->set_top_of_list( lr_header ).

ENDFORM.                    " SET_HEADER
*&---------------------------------------------------------------------*
*&      Form  get_param_y9l01
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_BUKRS    text
*      -->P_PSCHL    text
*      -->P_PWERT    text
*----------------------------------------------------------------------*
FORM get_param_y9l01 USING    p_bukrs                       "CON-TR-09
                              p_pschl
                              p_pwert.

  
SELECT SINGLE * FROM y9l01
                  
WHERE bukrs = p_bukrs
                    
AND pschl = p_pschl .

*... Parameter nicht vorhanden
  
IF sy-subrc NE 0.
    
MESSAGE e124 WITH p_pschl   .
*...  Parameter vorhanden
  
ELSE.
    p_pwert = y9l01-pwert.
  
ENDIF.

ENDFORM.                    "get_param_y9l01

No comments: