Você está na página 1de 39

*&---------------------------------------------------------------------* *&Report Annual Salary Report *&Purpose : Generate a list of employees and their details * for Merit Increase

program on annual basis * Provide functionality to show the statistics * EEO Statistics are shown as second level of ALV * Output * Program Name : ZPAR_ANNUAL_SALARY * Category : Report * Business Analyst : Eric Crank * Developed By : Mitul Dalia * Start Date : 08/11/2010 * End Date : 09/11/2010 * Trans. Req. No. : DRAK907086 *&---------------------------------------------------------------------* REPORT zpar_annual_salary MESSAGE-ID zmecm LINE-COUNT 65 LINE-SIZE 132. ************************************************************************ * TABLES ************************************************************************ TABLES: pernr. ************************************************************************ * INFOTYPES ************************************************************************ INFOTYPES: 0000, 0001, 0002, 0008, 0025, 0077, 0759. * CONSTANTS CONSTANTS : c_formname TYPE tdsfname VALUE 'ZPAS_ORG_STRUCTURE'. ************************************************************************ * VARIABLES & WORK AREAS ************************************************************************ * data definitions for ALV function TYPES alv_item. INCLUDE zpan_alvdata.

DATA:wa_fieldcat TYPE slis_fieldcat_alv. DATA : v_fm_name TYPE rs38l_fnam. TYPES: BEGIN OF ty_final, pernr TYPE pa0001-pernr,"Employee Number ename TYPE pa0001-ename,"Full name vdsk1 TYPE pa0001-vdsk1,"organisational key status(20) TYPE c," Status Description cosbu TYPE string, "CO/SBU divison TYPE stext,"Division Code branch TYPE stext,"Branch code dept TYPE stext,"Dept Code

section TYPE stext, "Section code workloc TYPE pa0001-btrtl, over40 TYPE char10, gender TYPE char10,"Gender minor TYPE char10, exempt TYPE char10, trfar TYPE pa0008-trfar,"PaySCale type trfgr TYPE pa0008-trfgr, "Pay scale group/Pay Grade basesalary TYPE pa0008-ansal,"Annual Salary prevmid TYPE t510n-grmin, prevcompa TYPE ecm_cprat, krt01 TYPE pa0025-krt01,"Appraisal Criteria currcompa TYPE ecm_cprat, meritper TYPE pa0759-cppct, meritamt TYPE pa0759-cpamt, comp_amt TYPE pa0759-cpamt, comp_per TYPE pa0759-cppct, newsalary TYPE pa0759-bssal , currmid TYPE t510n-grmin, newcompa TYPE string, "t510n-grmin, END OF ty_final. TYPES: BEGIN OF ty_pernr, pernr TYPE pa0001-pernr, END OF ty_pernr. TYPES : BEGIN OF ty_t71adm09t, citem TYPE ecm_citem, ltext TYPE text20, END OF ty_t71adm09t. TYPES: BEGIN OF ty_summary, rating TYPE zpat_meritplan-perfrating, emp TYPE num5, avgper TYPE zpat_meritplan-forecast_pct, male TYPE num5, avgper_male TYPE num5, female TYPE num5, avgper_female TYPE num5, minority TYPE num5, avgper_min TYPE num5, nonminority TYPE num5, avgper_nonmin TYPE num5, o40 TYPE num5, avgper_o40 TYPE num5, u40 TYPE num5, avgper_u40 TYPE num5, exempt TYPE num5, avgper_exempt TYPE num5,

nexempt TYPE num5, avgper_nexempt TYPE num5, END OF ty_summary. TYPES: BEGIN OF ty_eeostat, desc TYPE char20, dp_emp TYPE num5, dp_avgper TYPE pa0759-cppct, sp_emp TYPE num5, sp_avgper TYPE pa0759-cppct, fs_emp TYPE num5, fs_avgper TYPE pa0759-cppct, ni_emp TYPE num5, ni_avgper TYPE pa0759-cppct, un_emp TYPE num5, un_avgper TYPE pa0759-cppct, nr_emp TYPE num5, nr_avgper TYPE pa0759-cppct, END OF ty_eeostat. TYPES: BEGIN OF ty_ex_nex_tab, desc TYPE char20, ex_val TYPE p LENGTH 12 DECIMALS 2, nex_val TYPE p LENGTH 12 DECIMALS 2, ex_nex_tot TYPE p LENGTH 12 DECIMALS 2, END OF ty_ex_nex_tab. DATA : it_final TYPE ty_final OCCURS 0, wa_final TYPE ty_final, it_sortcat TYPE slis_t_sortinfo_alv WITH HEADER LINE, it_eventcat TYPE slis_t_event WITH HEADER LINE, it_fieldcat TYPE slis_t_fieldcat_alv WITH HEADER LINE, it_header_alv TYPE slis_t_listheader, wa_header_alv TYPE slis_t_listheader WITH HEADER LINE, wa_t71adm10 TYPE t71adm10, it_pernr TYPE TABLE OF ty_pernr, wa_pernr TYPE ty_pernr, it_alv TYPE TABLE OF ty_eeostat, wa_alv TYPE ty_eeostat, it_summary TYPE TABLE OF ty_summary, wa_summary TYPE ty_summary, wa_print_param TYPE slis_print_alv, wa_layout TYPE slis_layout_alv, it_ex_nex_tab TYPE TABLE OF ty_ex_nex_tab, wa_ex_nex_tab TYPE ty_ex_nex_tab, wa_final_dp TYPE ty_summary, wa_final_sp TYPE ty_summary, wa_final_fs TYPE ty_summary, wa_final_ni TYPE ty_summary,

wa_final_un TYPE ty_summary, wa_final_nr TYPE ty_summary. DATA : it_t500p TYPE TABLE OF t500p, wa_t500p TYPE t500p. DATA : g_year TYPE string, g_cb_ex TYPE p LENGTH 12 DECIMALS 2, g_mb_ex TYPE p LENGTH 12 DECIMALS 2, g_ma_ex TYPE p LENGTH 12 DECIMALS 2, g_nb_ex TYPE p LENGTH 12 DECIMALS 2, g_cb_nex TYPE p LENGTH 12 DECIMALS 2, g_mb_nex TYPE p LENGTH 12 DECIMALS 2, g_ma_nex TYPE p LENGTH 12 DECIMALS 2, g_nb_nex TYPE p LENGTH 12 DECIMALS 2, g_compa_120 TYPE i, g_compa_80 TYPE i, g_total_emp TYPE i. DATA : it_t71adm09 TYPE STANDARD TABLE OF ty_t71adm09t, wa_t71adm09 TYPE ty_t71adm09t. SELECTION-SCREEN BEGIN OF BLOCK comp_sel WITH FRAME TITLE text-p02. PARAMETERS: p_citem TYPE ecm_citem OBLIGATORY. SELECTION-SCREEN END OF BLOCK comp_sel. SELECTION-SCREEN BEGIN OF BLOCK pdf WITH FRAME TITLE text-p03. PARAMETERS gpdf_flg AS CHECKBOX. SELECTION-SCREEN END OF BLOCK pdf. ************************************************************************ * INITIALIZATION ************************************************************************ INITIALIZATION. * Initialize the possible Review Item Drop Down Values REFRESH it_t71adm09. SELECT t09t~citem t09t~ltext FROM t71adm09t AS t09t INNER JOIN t71adm09 AS t09 ON t09t~citem = t09~citem INTO TABLE it_t71adm09 WHERE t09t~langu = sy-langu AND ( t09~cplan = 'UMEM' OR t09~cplan = 'UMEX' OR t09~cplan = 'UMNE' ). IF sy-subrc <> 0. REFRESH it_t71adm09[]. MESSAGE e121. ENDIF.

*&---------------------------------------------------------------------* *& At Selection Screen Value-Request. *&---------------------------------------------------------------------* AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_citem. CALL FUNCTION 'F4IF_INT_TABLE_VALUE_REQUEST' EXPORTING retfield = 'CITEM' dynpprog = sy-repid dynpnr = sy-dynnr dynprofield = 'P_CITEM' value_org = 'S' TABLES value_tab = it_t71adm09 EXCEPTIONS parameter_error = 1 no_values_found = 2 OTHERS = 3. IF sy-subrc <> 0. ENDIF. *&---------------------------------------------------------------------* *& At Selection-Screen. *&---------------------------------------------------------------------* AT SELECTION-SCREEN. CLEAR wa_t71adm09. READ TABLE it_t71adm09 INTO wa_t71adm09 WITH KEY citem = p_citem. IF sy-subrc <> 0. MESSAGE e090 WITH text-e03. ENDIF. START-OF-SELECTION. * Filter the List of PERNRs since only selected review item related * reporting is required SELECT * FROM t71adm10 INTO wa_t71adm10 WHERE citem = p_citem. IF wa_t71adm10-effdt+0(4) = pn-begda+0(4). EXIT. ENDIF. ENDSELECT. IF wa_t71adm10 IS INITIAL. MESSAGE e090 WITH text-e04. ENDIF.

SELECT pernr FROM pa0759 INTO TABLE it_pernr WHERE pernr IN pnppernr AND carea = 'US' AND citem = p_citem AND endda >= wa_t71adm10-effdt AND begda <= wa_t71adm10-effdt. IF sy-subrc <> 0. MESSAGE e090 WITH text-e05. ELSE. REFRESH pnppernr. CLEAR pnppernr. LOOP AT it_pernr INTO wa_pernr. pnppernr-sign = 'I'. pnppernr-option = 'EQ'. pnppernr-low = wa_pernr-pernr. APPEND pnppernr. CLEAR: wa_pernr, pnppernr. ENDLOOP. ENDIF. PERFORM load_tables. ************************************************************************ * GET PERNR ************************************************************************ GET pernr. rp-provide-from-last p0000 space pn-begda pn-endda. rp-provide-from-last p0001 space pn-begda pn-endda. rp-provide-from-last p0002 space pn-begda pn-endda. LOOP AT p0759 WHERE begda+0(4) = pn-begda+0(4) AND carea = 'US' AND citem = p_citem. EXIT. ENDLOOP. PERFORM build_emprec. ************************************************************************ * END OF SELECTION ************************************************************************ END-OF-SELECTION. * PDF DISPLAY IF gpdf_flg EQ 'X'. PERFORM display_pdf. ENDIF.

* ALV DISPLAY PERFORM display_report. ************************************************************************ * FORMS *********************************************************************** *---------------------------------------------------------------------* * FORM SET_STATUS * *---------------------------------------------------------------------* * to get all functionality of the list viewer copy * * the status STANDARD from program SAPLSALV * *---------------------------------------------------------------------* FORM set_status USING extab TYPE slis_t_extab. SET PF-STATUS 'ALVSTATUS'. ENDFORM. "set_status *&---------------------------------------------------------------------* *& Form USER_COMMAND *&---------------------------------------------------------------------* * Performed from ALV function. *----------------------------------------------------------------------* FORM user_command USING r_ucomm LIKE sy-ucomm rs_selfield TYPE slis_selfield. CASE r_ucomm. * Display summary list WHEN 'DISPEMP'. PERFORM display_eeostat. WHEN 'EXNEXTAB'. PERFORM display_exnextab. ENDCASE. ENDFORM. " USER_COMMAND *&---------------------------------------------------------------------* *& Form load_tables *&---------------------------------------------------------------------* * Load internal tables *----------------------------------------------------------------------* FORM load_tables. * load personnel areas SELECT * FROM t500p INTO TABLE it_t500p. SORT it_t500p BY persa. ENDFORM. " load_tables

*&---------------------------------------------------------------------* *& Form build_emprec *&---------------------------------------------------------------------* * Build employee record *----------------------------------------------------------------------* FORM build_emprec. DATA: l_age TYPE i, l_year(4) TYPE n, l_tempdate1 TYPE d, l_tempdate2 TYPE d, l_prev_salary TYPE pa0008-ansal, l_prev_date TYPE d, l_bsgrd TYPE pa0008-bsgrd, l_prev_compa TYPE t510n-grmin, l_prev_midpoint TYPE t510n-grmin, l_current_salary TYPE pa0008-ansal, l_curr_date TYPE d, l_curr_compa TYPE t510n-grmin, l_curr_midpoint TYPE t510n-grmin, l_new_salary TYPE pa0008-ansal, l_new_date TYPE d, l_new_compa TYPE t510n-grmin, l_prev_p0008 TYPE TABLE OF p0008 WITH HEADER LINE, l_curr_p0008 TYPE TABLE OF p0008 WITH HEADER LINE, l_new_p0008 TYPE TABLE OF p0008 WITH HEADER LINE, l_molga TYPE molga, l_str(6) TYPE c, l_xdfam l_xdfpc l_xdfnu l_dfamt l_dfpct l_dfnum TYPE TYPE TYPE TYPE TYPE TYPE ecm_xdfam, ecm_xdfpc, ecm_xdfnu, ecm_dfamt, ecm_cppct, ecm_cpnum,

l_isok TYPE boole_d, l_msg_handler TYPE REF TO cl_hrpa_message_list, l_tmp_amt TYPE pc207-betrg. CREATE OBJECT l_msg_handler. CLEAR wa_final. wa_final-pernr = p0001-pernr. wa_final-ename = p0001-ename.

wa_final-vdsk1 = ''. " Left Blank since the source is not known * translate status CASE p0000-stat2. WHEN '0'. wa_final-status WHEN '1'. wa_final-status WHEN '2'. wa_final-status WHEN '3'. wa_final-status ENDCASE. PERFORM

= = = =

'Withdrawn'. 'Inactive'. 'Retired'. 'Active'.

get_orgstructure CHANGING wa_final-cosbu wa_final-divison wa_final-branch wa_final-dept wa_final-section. wa_final-workloc = p0001-btrtl. wa_final-trfar = p0008-trfar. wa_final-trfgr = p0008-trfgr. CALL FUNCTION 'COMPUTE_YEARS_BETWEEN_DATES' EXPORTING first_date = p0002-gbdat second_date = pn-begda IMPORTING years_between_dates = l_age EXCEPTIONS sequence_of_dates_not_valid = 1 OTHERS = 2. * Set over 40 indicator IF l_age > 40. wa_final-over40 = 'TRUE'. ELSE. wa_final-over40 = 'FALSE'. ENDIF. rp-provide-from-last p0077 space pn-begda pn-endda. IF pnp-sw-found NE 0. IF p0077-racky = '01'. wa_final-minor = 'FALSE'. ELSE. wa_final-minor = 'TRUE'. ENDIF. ENDIF. * Set exempt flag based on grade IF p0008-trfgr BETWEEN '77' AND '99'. wa_final-exempt = 'Exempt'. ELSE.

wa_final-exempt = 'NonExempt'. ENDIF. IF p0002-gesch = '1'. wa_final-gender = 'Male'. ELSE. wa_final-gender = 'Female'. ENDIF. * Get performance appraisal in previous year. l_year = pn-begda+0(4) - 1. CONCATENATE l_year '0101' INTO l_tempdate1. CONCATENATE l_year '1231' INTO l_tempdate2. rp-provide-from-last p0025 space l_tempdate1 l_tempdate2. IF pnp-sw-found = 0. wa_final-krt01 = 'NR'. ELSE. wa_final-krt01 = p0025-krt01. ENDIF. * Round off the ANSAL to NEAREST $5 l_tmp_amt = p0759-bssal. CALL FUNCTION 'HR_IN_ROUND_AMT' EXPORTING amount = l_tmp_amt rndoff = '500' rndlmt = 'N' IMPORTING retamt = l_tmp_amt. IF sy-subrc = 0. wa_final-basesalary = l_tmp_amt. ENDIF. READ TABLE it_t500p INTO wa_t500p WITH KEY persa = p0001-werks BINARY SEARCH. IF sy-subrc = 0. l_molga = wa_t500p-molga. ENDIF. * compute prev compa ratio l_year = p0759-begda+0(4) - 1. CONCATENATE l_year wa_t71adm10-bsedt+4(2) wa_t71adm10-bsedt+6(2) INTO l_prev_date. l_prev_salary = wa_final-basesalary.

rp-provide-from-last p0008 space l_prev_date l_prev_date. l_bsgrd = '100.00'. CALL FUNCTION 'ZHR_COMPA_RATIO_CALC' EXPORTING molga = l_molga trfar = p0008-trfar trfst = p0008-trfst trfgb = p0008-trfgb trfgr = p0008-trfgr date = l_prev_date bsgrd = l_bsgrd ansal = l_prev_salary IMPORTING compa = l_prev_compa midpoint = l_prev_midpoint EXCEPTIONS paygradenotfound = 1 OTHERS = 2. IF sy-subrc <> 0. CLEAR: l_prev_compa, l_prev_midpoint. ELSE. wa_final-prevmid = l_prev_midpoint. wa_final-prevcompa = l_prev_compa / 100. ENDIF. * Calculate Current Compa Ratio l_current_salary = wa_final-basesalary. l_curr_date = wa_t71adm10-bsedt. rp-provide-from-last p0008 space l_curr_date l_curr_date. CALL FUNCTION 'ZHR_COMPA_RATIO_CALC' EXPORTING molga = l_molga trfar = p0008-trfar trfst = p0008-trfst trfgb = p0008-trfgb trfgr = p0008-trfgr date = l_curr_date bsgrd = l_bsgrd ansal = l_current_salary IMPORTING compa = l_curr_compa midpoint = l_curr_midpoint EXCEPTIONS paygradenotfound = 1 OTHERS = 2. IF sy-subrc <> 0. CLEAR: l_curr_compa, l_curr_midpoint. ELSE.

wa_final-currmid = l_curr_midpoint. "e.g. 2010 mid point wa_final-currcompa = l_curr_compa / 100. " e.g. 2010 compa ENDIF. * Calculate New Compa ratio l_new_salary = p0759-cpamt + p0759-bssal. * Round off the NEW ANSAL to NEAREST $5 CLEAR l_tmp_amt. l_tmp_amt = l_new_salary. CALL FUNCTION 'HR_IN_ROUND_AMT' EXPORTING amount = l_tmp_amt rndoff = '500' rndlmt = 'N' IMPORTING retamt = l_tmp_amt. IF sy-subrc = 0. l_new_salary = l_tmp_amt. ENDIF. l_new_date = wa_t71adm10-effdt.

rp-provide-from-last p0008 space l_new_date l_new_date. CALL FUNCTION 'ZHR_COMPA_RATIO_CALC' EXPORTING molga = l_molga trfar = p0008-trfar trfst = p0008-trfst trfgb = p0008-trfgb trfgr = p0008-trfgr date = l_new_date bsgrd = l_bsgrd ansal = l_new_salary IMPORTING compa = l_new_compa EXCEPTIONS paygradenotfound = 1 OTHERS = 2. IF sy-subrc <> 0. CLEAR: l_new_compa. ELSE. CLEAR l_str. l_str = l_new_compa. CONCATENATE l_str '%' INTO wa_final-newcompa. * Calculate total employees with new compa > 120 % * & employees with new compa < 80 % IF l_new_compa > '120.0'. g_compa_120 = g_compa_120 + 1.

ELSEIF l_new_compa < '80.0'. g_compa_80 = g_compa_80 + 1. ENDIF. ENDIF. wa_final-newsalary = l_new_salary. * Merit amount and Merit Percent CLEAR l_isok. CALL FUNCTION 'HR_ECM_APPLY_GUIDELINE' EXPORTING pernr = p0759-pernr citem = p0759-citem carea = p0759-carea begda = p0759-begda curre = p0759-curre stkun = p0759-stkun xhour = p0759-xhour message_handler = l_msg_handler IMPORTING xdfam = l_xdfam xdfpc = l_xdfpc xdfnu = l_xdfnu dfamt = l_dfamt dfpct = l_dfpct dfnum = l_dfnum is_ok = l_isok. IF l_isok = 'X'. wa_final-meritper = l_dfpct. wa_final-meritamt = ( l_dfpct * p0759-bssal ) / 100 . ENDIF. wa_final-comp_amt = p0759-cpamt. wa_final-comp_per = p0759-cppct. * Sum the values for the Statistics related table display * This table requires segregation as per Exempt or Non-Exempt. IF wa_final-exempt = 'Exempt'. g_cb_ex = g_cb_ex + wa_final-basesalary."Current Base g_mb_ex = g_mb_ex + wa_final-meritamt. "Merit Budget g_ma_ex = g_ma_ex + wa_final-comp_amt. "Merit Actual g_nb_ex = g_nb_ex + wa_final-newsalary. "New Base ELSE. g_cb_nex = g_cb_nex + wa_final-basesalary."Current Base g_mb_nex = g_mb_nex + wa_final-meritamt. "Merit Budget g_ma_nex = g_ma_nex + wa_final-comp_amt. "Merit Actual g_nb_nex = g_nb_nex + wa_final-newsalary. "New Base ENDIF.

APPEND wa_final TO it_final. ENDFORM. " build_emprec

*&---------------------------------------------------------------------* *& Form display_report *&---------------------------------------------------------------------* * Display report using ALV *----------------------------------------------------------------------* FORM display_report. layout-group_change_edit = 'X'. "user can chg subtotal formats

PERFORM create_fieldcatalog . PERFORM build_eventcat. PERFORM create_sortcat USING 'IT_FINAL' . * Function for display CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid i_callback_pf_status_set = 'SET_STATUS' i_callback_user_command = 'USER_COMMAND' is_layout = layout it_fieldcat = fieldcat[] it_events = eventcat[] it_sort = sortcat[] i_save = 'A' is_variant = variant TABLES t_outtab = it_final[] EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc NE 0. MESSAGE e090 WITH text-e01 sy-subrc. LEAVE. ENDIF. ENDFORM. " display_report *&---------------------------------------------------------------------* *& Form BUILD_EVENTCAT *&---------------------------------------------------------------------* * Build events table for alv function *----------------------------------------------------------------------* FORM build_eventcat. eventcat-name = 'TOP_OF_PAGE'. eventcat-form = 'TOP_OF_PAGE'.

APPEND eventcat. ENDFORM.

" BUILD_EVENTCAT

*&---------------------------------------------------------------------* *& Form TOP_OF_PAGE *&---------------------------------------------------------------------* * top of page form referenced in ALV function. *----------------------------------------------------------------------* FORM top_of_page. CLEAR header_alv_wa. REFRESH header_alv. CLEAR header_alv_wa. header_alv_wa-typ = header_alv_wa-key = WRITE 'Annual Salary APPEND header_alv_wa

'H'. 'Header'. Report' TO header_alv_wa-info. TO header_alv.

* effective date CLEAR header_alv_wa. header_alv_wa-typ = 'S'. header_alv_wa-key = 'Effective date:'. WRITE pn-begda TO header_alv_wa-info(10) MM/DD/YYYY. APPEND header_alv_wa TO header_alv. * Write the header information to the output CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = header_alv. ENDFORM. "TOP_OF_PAGE

*&---------------------------------------------------------------------* *& Form CREATE_SORTCAT *&---------------------------------------------------------------------* * Define sort and subtotals in sort catalog for ALV. *----------------------------------------------------------------------* FORM create_sortcat USING tbl. REFRESH sortcat. * sort/subtotal on exempt flag sortcat-spos = '1'. sortcat-fieldname = 'EXEMPT'. sortcat-tabname = tbl. sortcat-up = 'X'. sortcat-down = space. sortcat-subtot = 'X'. sortcat-group = space.

APPEND sortcat. ENDFORM. " CREATE_SORTCAT

*&---------------------------------------------------------------------* *& Form get_orgstructure *&---------------------------------------------------------------------* * Get SBU and division from org structure above an employee. *----------------------------------------------------------------------* FORM get_orgstructure CHANGING p_sbu p_divison p_branch p_dept p_section. * table to store flattened org structure for one position STATICS: itflatorg TYPE STANDARD TABLE OF zpas_flatorgstruc WITH HEADER LINE. CALL FUNCTION EXPORTING p_plans p_datum TABLES itflatorg 'Z_HR_GET_FLATORGSTRUC' = p0001-plans = pn-endda = itflatorg.

IF sy-subrc = 0. * translate table to fields LOOP AT itflatorg. CASE sy-tabix. WHEN 2. "SBU p_sbu = itflatorg-orgtext. WHEN 3. "Division p_divison = itflatorg-orgtext. WHEN 4. "Branch p_branch = itflatorg-orgtext. WHEN 5. "Dept p_dept = itflatorg-orgtext. WHEN 6. "Section p_section = itflatorg-orgtext. ENDCASE. ENDLOOP. "itflatorg ENDIF. ENDFORM. " get_orgstructure *&---------------------------------------------------------------------* *& Form DISPLAY_PDF *&---------------------------------------------------------------------* * Display PDF

*----------------------------------------------------------------------* FORM display_pdf . g_year = pn-begda+0(4).

DATA : st_job_output_info st_control_parameters DATA: st_job_output_options1 DATA: vlines TYPE i.

TYPE ssfcrescl, TYPE ssfctrlop. TYPE ssfcompop.

DATA:c_acrobat_reader_key(64) TYPE c VALUE 'SOFTWARE\ADOBE\ACROBAT\EXE'. st_control_parameters-no_dialog = 'X'. st_control_parameters-getotf = 'X'. IF it_final[] IS NOT INITIAL. DESCRIBE TABLE it_final LINES vlines. CLEAR wa_final. LOOP AT it_final INTO wa_final. IF vlines GT 1. st_control_parameters-no_open = 'X'. st_control_parameters-no_close = 'X'. AT FIRST. st_control_parameters-no_open = space. st_control_parameters-no_close = 'X'. ENDAT. AT LAST. st_control_parameters-no_open = 'X'. st_control_parameters-no_close = space. ENDAT. ENDIF. CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME' EXPORTING formname = c_formname IMPORTING fm_name = v_fm_name EXCEPTIONS no_form = 1 no_function_module = 2 OTHERS = 3. IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL FUNCTION v_fm_name EXPORTING control_parameters = st_control_parameters output_options = st_job_output_options1 ename = wa_final-ename pernr = wa_final-pernr sbu = wa_final-cosbu grade = wa_final-trfgr new_midpoint = wa_final-currmid basesalary = wa_final-basesalary newbasesalary = wa_final-newsalary forecast_increas = wa_final-comp_amt forecast_pct = wa_final-comp_per p_year = g_year IMPORTING job_output_info = st_job_output_info EXCEPTIONS formatting_error = 1 internal_error = 2 send_error = 3 user_canceled = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. ENDLOOP. DATA : l_reg_value(128), l_path(200), l_filename TYPE string. * set download filename PERFORM get_pc_working_directory CHANGING l_path. CONCATENATE l_path 'ANNUAL_SALARAY_REPORT.PDF' INTO l_filename.

* See if adobe on machine. CALL FUNCTION 'REGISTRY_GET' EXPORTING key = c_acrobat_reader_key IMPORTING value = l_reg_value.

IF l_reg_value IS INITIAL. WRITE: / 'Error: Acrobat Not registered on machine'. EXIT. ENDIF. DATA : lt_lines TYPE TABLE OF tline, l_pdf_len TYPE i. CALL FUNCTION 'CONVERT_OTF' EXPORTING format = 'PDF' IMPORTING bin_filesize = l_pdf_len TABLES otf = st_job_output_info-otfdata lines = lt_lines EXCEPTIONS err_max_linewidth = 1 err_format = 2 err_conv_not_possible = 3 err_bad_otf = 4 OTHERS = 5. IF sy-subrc <> 0. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. ENDIF. CALL FUNCTION 'GUI_DOWNLOAD' EXPORTING bin_filesize = filename = filetype = TABLES data_tab = EXCEPTIONS file_write_error = no_batch = gui_refuse_filetransfer = invalid_type = no_authority = unknown_error = header_not_allowed = separator_not_allowed = filesize_not_allowed = header_too_long = dp_error_create = dp_error_send = dp_error_write = unknown_dp_error =

' ' l_filename 'BIN' lt_lines 1 2 3 4 5 6 7 8 9 10 11 12 13 14

access_denied = 15 dp_out_of_memory = 16 disk_full = 17 dp_timeout = 18 file_not_found = 19 dataprovider_exception = 20 control_flush_error = 21 OTHERS = 22. CALL FUNCTION 'WS_EXECUTE' EXPORTING program = l_filename. IF sy-subrc <> 0. ENDIF. ENDIF. ENDFORM. " DISPLAY_PDF *&---------------------------------------------------------------------* *& Form CREATE_FIELDCATALOG *&---------------------------------------------------------------------* * Create Field catalog *----------------------------------------------------------------------* FORM create_fieldcatalog . DATA: l_prevyear(4) TYPE n, l_curryear(4) TYPE n, l_str(30) TYPE c. l_curryear = pn-begda+0(4). l_prevyear = l_curryear - 1. CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'PERNR'. wa_fieldcat-seltext_m = 'EMPLOYEE NO.'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'ENAME'. wa_fieldcat-seltext_m = 'EMPLOYEE NAME'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'VDSK1'. wa_fieldcat-seltext_m = 'HRBP'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'STATUS'. wa_fieldcat-seltext_m = 'STATUS'. wa_fieldcat-seltext_l = 'RESULTING STATUS DESC'. APPEND wa_fieldcat TO fieldcat .

CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'COSBU'. wa_fieldcat-seltext_m = 'CO/SBU'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'DIVISON'. wa_fieldcat-seltext_m = 'DIVISON CODE'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'BRANCH'. wa_fieldcat-seltext_m = 'BRANCH'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'DEPT'. wa_fieldcat-seltext_m = 'DEPARTMENT'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'SECTION'. wa_fieldcat-seltext_m = 'SECTION'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'WORKLOC'. wa_fieldcat-seltext_m = 'WORK LOCATION'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'OVER40'. wa_fieldcat-seltext_m = 'OVER40'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'GENDER'. wa_fieldcat-seltext_m = 'GENDER'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'MINOR'. wa_fieldcat-seltext_m = 'MINORITY'. APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname wa_fieldcat-seltext_m

= 'EXEMPT'. = 'EXEMPT/NON-EXEMPT'.

APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'TRFAR'. wa_fieldcat-seltext_m = 'PAY TYPE' . APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'TRFGR'. wa_fieldcat-seltext_m = 'PAY GRADE' . APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'BASESALARY'. wa_fieldcat-seltext_m = 'CURRENT BASE SALARY' . APPEND wa_fieldcat TO fieldcat . CLEAR wa_fieldcat. wa_fieldcat-fieldname = 'PREVMID'. CONCATENATE l_prevyear ' MID POINT' INTO l_str. wa_fieldcat-seltext_m = l_str. APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat, l_str. wa_fieldcat-fieldname = 'PREVCOMPA'. CONCATENATE l_prevyear ' COMPA RATIO' INTO l_str. wa_fieldcat-seltext_m = l_str. wa_fieldcat-seltext_l = l_str. APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat. wa_fieldcat-fieldname = 'KRT01'. wa_fieldcat-seltext_m = 'PERF RATING' . wa_fieldcat-seltext_l = 'PERFORMANCE RATING' . APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat, l_str. wa_fieldcat-fieldname = 'CURRCOMPA'. CONCATENATE l_curryear ' COMPA RATIO' INTO l_str. wa_fieldcat-seltext_m = l_str. wa_fieldcat-seltext_l = l_str. APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat. wa_fieldcat-fieldname = 'MERITPER'. wa_fieldcat-seltext_m = 'Merit Budget %' . APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat.

wa_fieldcat-fieldname = 'MERITAMT'. wa_fieldcat-seltext_m = 'MERIT BUDGET AMT' . wa_fieldcat-seltext_l = 'MERIT BUDGET AMOUNT' . APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat. wa_fieldcat-fieldname = 'COMP_AMT'. wa_fieldcat-seltext_m = 'ANNUAL INC AMT' . wa_fieldcat-seltext_l = 'ANNUAL INCREASE AMOUNT'. APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat. wa_fieldcat-fieldname = 'COMP_PER'. wa_fieldcat-seltext_m = 'MERIT INC %' . wa_fieldcat-seltext_l = 'MERIT INCREASE %AGE'. APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat. wa_fieldcat-fieldname = 'NEWSALARY'. wa_fieldcat-seltext_m = 'NEW BASE SALARY' . APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat, l_str. wa_fieldcat-fieldname = 'CURRMID'. CONCATENATE l_curryear ' MID POINT' INTO l_str. wa_fieldcat-seltext_m = l_str. wa_fieldcat-seltext_l = l_str. APPEND wa_fieldcat TO fieldcat . CLEAR: wa_fieldcat. wa_fieldcat-fieldname = 'NEWCOMPA'. wa_fieldcat-seltext_m = 'NEW COMPA RATIO' . APPEND wa_fieldcat TO fieldcat . ENDFORM. " CREATE_FIELDCATALOG *&---------------------------------------------------------------------* *& Form GET_PC_WORKING_DIRECTORY *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * <--P_L_PATH text *----------------------------------------------------------------------* FORM get_pc_working_directory CHANGING down_load_path TYPE c. DATA: zeichen(01) TYPE c. CALL FUNCTION 'WS_QUERY' EXPORTING environment = 'TEMP'

query IMPORTING return EXCEPTIONS inv_query no_batch frontend_error OTHERS

= 'EN' = down_load_path = = = = 1 2 3 4.

IF sy-subrc <> 0. CALL FUNCTION 'WS_QUERY' EXPORTING environment = 'TMP' query = 'EN' IMPORTING return = down_load_path EXCEPTIONS inv_query = 1 no_batch = 2 frontend_error = 3 OTHERS = 4. IF sy-subrc <> 0. CLEAR down_load_path. ENDIF. ENDIF. DATA len LIKE sy-fdpos. len = STRLEN( down_load_path ). zeichen = down_load_path+len(1). IF zeichen <> '\'. CONCATENATE down_load_path '\' INTO down_load_path. ENDIF. ENDFORM. " GET_PC_WORKING_DIRECTORY *&---------------------------------------------------------------------* *& Form TOP_OF_PAGE *&---------------------------------------------------------------------* * top of page form referenced in ALV function. *----------------------------------------------------------------------* FORM top_of_page1. CLEAR wa_header_alv. REFRESH it_header_alv. wa_header_alv-typ = 'H'. wa_header_alv-key = 'Header'. wa_header_alv-info = 'EEO Statistics'. APPEND wa_header_alv TO it_header_alv. CLEAR wa_header_alv.

wa_header_alv-typ = 'S'. CONCATENATE 'DP' '' INTO wa_header_alv-key SEPARATED BY space. WRITE 'Distinguished Performance' TO wa_header_alv-info(30). APPEND wa_header_alv TO it_header_alv. CLEAR wa_header_alv. wa_header_alv-typ = 'S'. CONCATENATE 'SP' '' INTO wa_header_alv-key SEPARATED BY space. WRITE 'Superior Performance' TO wa_header_alv-info(30). APPEND wa_header_alv TO it_header_alv. CLEAR wa_header_alv. wa_header_alv-typ = 'S'. CONCATENATE 'FS' '' INTO wa_header_alv-key SEPARATED BY space. WRITE 'Fully Successful' TO wa_header_alv-info(30). APPEND wa_header_alv TO it_header_alv. CLEAR wa_header_alv. wa_header_alv-typ = 'S'. CONCATENATE 'NI' '' INTO wa_header_alv-key SEPARATED BY space. WRITE 'Needs Improvement' TO wa_header_alv-info(30). APPEND wa_header_alv TO it_header_alv. CLEAR wa_header_alv. wa_header_alv-typ = 'S'. CONCATENATE 'U' '' INTO wa_header_alv-key SEPARATED BY space. WRITE 'Unsatisfactory' TO wa_header_alv-info(30). APPEND wa_header_alv TO it_header_alv. CLEAR wa_header_alv. wa_header_alv-typ = 'S'. CONCATENATE 'NR' '' INTO wa_header_alv-key SEPARATED BY space. WRITE 'No Rating' TO wa_header_alv-info(30). APPEND wa_header_alv TO it_header_alv. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = it_header_alv i_end_of_list_grid = 'X'. ENDFORM. "TOP_OF_PAGE *&---------------------------------------------------------------------* *& Form TOP_OF_PAGE2 *&---------------------------------------------------------------------* * Top of page form for exempt non-exempt related values *----------------------------------------------------------------------* FORM top_of_page2. DATA: l_tmp_str TYPE string,

L_CTEXT TYPE STRING, L_CPLAN TYPE ECM_CPLAN. * GET THE COMPENSATION PLAN NAME FROM THE COMP REVIEW ITEM SELECTED SELECT SINGLE CPLAN FROM T71ADM09 INTO L_CPLAN WHERE CITEM = P_CITEM. IF SY-SUBRC = 0. SELECT SINGLE ltext FROM T71ADM02T INTO L_CTEXT WHERE LANGU = 'E' AND CPLAN = L_CPLAN . IF SY-SUBRC <> 0. CLEAR L_CTEXT. ENDIF. ENDIF.

CLEAR wa_header_alv. REFRESH it_header_alv. wa_header_alv-typ = 'H'. wa_header_alv-key = 'Header'. CONCATENATE 'Statistics for -' l_ctext into wa_header_alv-info SEPARATED BY space. APPEND wa_header_alv TO it_header_alv. CLEAR: wa_header_alv,l_tmp_str. wa_header_alv-typ = 'S'. * CONCATENATE 'EMP' '' INTO wa_header_alv-key SEPARATED BY space. MOVE g_compa_120 TO l_tmp_str. CONDENSE l_tmp_str. CONCATENATE '# of Employees > 120 % of Grade:' l_tmp_str INTO l_tmp_str SEPARATED BY space. WRITE l_tmp_str TO wa_header_alv-info(45). APPEND wa_header_alv TO it_header_alv. CLEAR: wa_header_alv, l_tmp_str. wa_header_alv-typ = 'S'. * CONCATENATE 'EMP2' '' INTO wa_header_alv-key SEPARATED BY space. MOVE g_compa_80 TO l_tmp_str. CONDENSE l_tmp_str. CONCATENATE '# of Employees < 80 % of Grade:' l_tmp_str INTO l_tmp_str SEPARATED BY space. WRITE l_tmp_str TO wa_header_alv-info(45). APPEND wa_header_alv TO it_header_alv. CLEAR: wa_header_alv, l_tmp_str. wa_header_alv-typ = 'S'. * CONCATENATE 'EMP3' '' INTO wa_header_alv-key SEPARATED BY space. MOVE g_total_emp TO l_tmp_str.

CONDENSE l_tmp_str. CONCATENATE '# of Employees Total:' l_tmp_str INTO l_tmp_str SEPARATED BY space. WRITE l_tmp_str TO wa_header_alv-info(35). APPEND wa_header_alv TO it_header_alv. CALL FUNCTION 'REUSE_ALV_COMMENTARY_WRITE' EXPORTING it_list_commentary = it_header_alv i_end_of_list_grid = 'X'. ENDFORM. "TOP_OF_PAGE2 *&---------------------------------------------------------------------* *& Form DISPLAY_EEOSTAT *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM display_eeostat . REFRESH it_alv[]. CLEAR it_alv. PERFORM summary_details. * define print settings wa_print_param-no_print_listinfos = 'X'. PERFORM build_eventcat_sum. PERFORM create_fieldcat_summary. * Function for display CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid is_layout = wa_layout it_fieldcat = it_fieldcat[] i_save = 'A' is_print = wa_print_param it_events = it_eventcat[] TABLES t_outtab = it_alv EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc NE 0. LEAVE. ENDIF. ENDFORM. " DISPLAY_EEOSTAT

*&---------------------------------------------------------------------* *& Form DISPLAY_EXNEXTAB *&---------------------------------------------------------------------* * Display Merit Statistics *----------------------------------------------------------------------* FORM display_exnextab . * Get total number of employees DESCRIBE TABLE it_final LINES g_total_emp. REFRESH it_ex_nex_tab[]. CLEAR it_ex_nex_tab. PERFORM build_meritstat. * define print settings wa_print_param-no_print_listinfos = 'X'. PERFORM build_eventcat_meritstat. PERFORM create_fieldcat_meritstat. * Function for display CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_callback_program = sy-repid is_layout = wa_layout it_fieldcat = it_fieldcat[] i_save = 'A' is_print = wa_print_param it_events = it_eventcat[] TABLES t_outtab = it_ex_nex_tab EXCEPTIONS program_error = 1 OTHERS = 2. IF sy-subrc NE 0. LEAVE. ENDIF. ENDFORM. " DISPLAY_MERITSTAT *&---------------------------------------------------------------------* *& Form SUMMARY_DETAILS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * --> p1 text * <-- p2 text *----------------------------------------------------------------------* FORM summary_details .

* Get data based upon performance rating. SORT it_final BY krt01. PERFORM get_rating_details USING 'DP'. PERFORM get_rating_details USING 'SP'. PERFORM get_rating_details USING 'FS'. PERFORM get_rating_details USING 'NI'. PERFORM get_rating_details USING 'U'. PERFORM get_rating_details USING 'NR'. * Build the base table READ TABLE it_summary READ TABLE it_summary READ TABLE it_summary READ TABLE it_summary READ TABLE it_summary READ TABLE it_summary

INTO INTO INTO INTO INTO INTO

wa_final_dp wa_final_sp wa_final_fs wa_final_ni wa_final_un wa_final_nr

WITH WITH WITH WITH WITH WITH

KEY KEY KEY KEY KEY KEY

rating rating rating rating rating rating

= = = = = =

'DP'. 'SP'. 'FS'. 'NI'. 'U'. 'NR'.

wa_alv-desc = 'TOTAL'. PERFORM append_alv USING wa_final_dp-emp wa_final_dp-avgper wa_final_sp-emp wa_final_sp-avgper wa_final_fs-emp wa_final_fs-avgper wa_final_ni-emp wa_final_ni-avgper wa_final_un-emp wa_final_un-avgper wa_final_nr-emp wa_final_nr-avgper. wa_alv-desc = 'MALE'. PERFORM append_alv USING wa_final_dp-male wa_final_dp-avgper_male wa_final_sp-male wa_final_sp-avgper_male wa_final_fs-male wa_final_fs-avgper_male wa_final_ni-male wa_final_ni-avgper_male wa_final_un-male wa_final_un-avgper_male wa_final_nr-male wa_final_nr-avgper_male. wa_alv-desc = 'FEMALE'. PERFORM append_alv USING wa_final_dp-female

wa_final_dp-avgper_female wa_final_sp-female wa_final_sp-avgper_female wa_final_fs-female wa_final_fs-avgper_female wa_final_ni-female wa_final_ni-avgper_female wa_final_un-female wa_final_un-avgper_female wa_final_nr-female wa_final_nr-avgper_female. wa_alv-desc = 'NON-MINORITY'. PERFORM append_alv USING wa_final_dp-nonminority wa_final_dp-avgper_nonmin wa_final_sp-nonminority wa_final_sp-avgper_nonmin wa_final_fs-nonminority wa_final_fs-avgper_nonmin wa_final_ni-nonminority wa_final_ni-avgper_nonmin wa_final_un-nonminority wa_final_un-avgper_nonmin wa_final_nr-nonminority wa_final_nr-avgper_nonmin. wa_alv-desc = 'MINORITY'. PERFORM append_alv USING wa_final_dp-minority wa_final_dp-avgper_min wa_final_sp-minority wa_final_sp-avgper_min wa_final_fs-minority wa_final_fs-avgper_min wa_final_ni-minority wa_final_ni-avgper_min wa_final_un-minority wa_final_un-avgper_min wa_final_nr-minority wa_final_nr-avgper_min. wa_alv-desc = 'OVER 40'. PERFORM append_alv USING wa_final_dp-o40 wa_final_dp-avgper_o40 wa_final_sp-o40 wa_final_sp-avgper_o40 wa_final_fs-o40 wa_final_fs-avgper_o40

wa_final_ni-o40 wa_final_ni-avgper_o40 wa_final_un-o40 wa_final_un-avgper_o40 wa_final_nr-o40 wa_final_nr-avgper_o40. wa_alv-desc = 'UNDER 40'. PERFORM append_alv USING wa_final_dp-u40 wa_final_dp-avgper_u40 wa_final_sp-u40 wa_final_sp-avgper_u40 wa_final_fs-u40 wa_final_fs-avgper_u40 wa_final_ni-u40 wa_final_ni-avgper_u40 wa_final_un-u40 wa_final_un-avgper_u40 wa_final_nr-u40 wa_final_nr-avgper_u40. wa_alv-desc = 'EXEMPT'. PERFORM append_alv USING wa_final_dp-exempt wa_final_dp-avgper_exempt wa_final_sp-exempt wa_final_sp-avgper_exempt wa_final_fs-exempt wa_final_fs-avgper_exempt wa_final_ni-exempt wa_final_ni-avgper_exempt wa_final_un-exempt wa_final_un-avgper_exempt wa_final_nr-exempt wa_final_nr-avgper_exempt. wa_alv-desc = 'NONEXEMPT'. PERFORM append_alv USING wa_final_dp-nexempt wa_final_dp-avgper_nexempt wa_final_sp-nexempt wa_final_sp-avgper_nexempt wa_final_fs-nexempt wa_final_fs-avgper_nexempt wa_final_ni-nexempt wa_final_ni-avgper_nexempt wa_final_un-nexempt wa_final_un-avgper_nexempt

ENDFORM.

wa_final_nr-nexempt wa_final_nr-avgper_nexempt. " SUMMARY_DETAILS

*&---------------------------------------------------------------------* *& Form GET_RATING_DETAILS *&---------------------------------------------------------------------* * text *----------------------------------------------------------------------* * -->P_2312 text *----------------------------------------------------------------------* FORM get_rating_details USING l_v. LOOP AT it_final INTO wa_final WHERE krt01 = l_v. wa_summary-rating = l_v. wa_summary-emp = wa_summary-emp + 1. wa_summary-avgper = wa_summary-avgper + wa_final-comp_per. IF wa_final-gender = 'M'. wa_summary-male = wa_summary-male + 1. wa_summary-avgper_male = wa_summary-avgper_male + wa_final-comp_per. ELSE. wa_summary-female = wa_summary-female + 1. wa_summary-avgper_female = wa_summary-avgper_female + wa_final-comp_per. ENDIF. IF wa_final-minor = 'TRUE'. wa_summary-minority = wa_summary-minority + 1 . wa_summary-avgper_min = wa_summary-avgper_min + wa_final-comp_per. ELSE. wa_summary-nonminority = wa_summary-nonminority + 1. wa_summary-avgper_nonmin = wa_summary-avgper_nonmin + wa_final-comp_per. ENDIF. IF wa_final-over40 = 'X'. wa_summary-o40 = wa_summary-o40 + 1. wa_summary-avgper_o40 = wa_summary-avgper_o40 + wa_final-comp_per. ELSE. wa_summary-u40 = wa_summary-u40 + 1. wa_summary-avgper_u40 = wa_summary-avgper_u40 + wa_final-comp_per. ENDIF. IF wa_final-exempt = 'TRUE'. wa_summary-exempt = wa_summary-exempt + 1. wa_summary-avgper_exempt = wa_summary-avgper_exempt + wa_final-comp_per. ELSE. wa_summary-nexempt = wa_summary-nexempt + 1. wa_summary-avgper_nexempt = wa_summary-avgper_nexempt + wa_final-comp_per.

ENDIF. ENDLOOP. IF sy-subrc = 0. APPEND wa_summary TO it_summary. CLEAR wa_summary. ELSE. CLEAR wa_summary. wa_summary-rating = l_v. APPEND wa_summary TO it_summary. ENDIF. ENDFORM. " GET_RATING_DETAILS *&---------------------------------------------------------------------* *& Form APPEND_ALV *&---------------------------------------------------------------------* * Append output to the ALV *----------------------------------------------------------------------* * -->P_WA_FINAL_DP_EMP text * -->P_WA_FINAL_DP_AVGPER text * -->P_WA_FINAL_SP_EMP text * -->P_WA_FINAL_SP_AVGPER text * -->P_WA_FINAL_FS_EMP text * -->P_WA_FINAL_FS_AVGPER text * -->P_WA_FINAL_NI_EMP text * -->P_WA_FINAL_NI_AVGPER text * -->P_WA_FINAL_UN_EMP text * -->P_WA_FINAL_UN_AVGPER text * -->P_WA_FINAL_NR_EMP text * -->P_WA_FINAL_NR_AVGPER text *----------------------------------------------------------------------* FORM append_alv USING p_wa_final_dp_emp p_wa_final_dp_avgper p_wa_final_sp_emp p_wa_final_sp_avgper p_wa_final_fs_emp p_wa_final_fs_avgper p_wa_final_ni_emp p_wa_final_ni_avgper p_wa_final_un_emp p_wa_final_un_avgper p_wa_final_nr_emp p_wa_final_nr_avgper. wa_alv-dp_emp = p_wa_final_dp_emp. IF p_wa_final_dp_emp > 0. wa_alv-dp_avgper = p_wa_final_dp_avgper / p_wa_final_dp_emp. ENDIF. wa_alv-sp_emp = p_wa_final_sp_emp.

IF p_wa_final_sp_emp > 0. wa_alv-sp_avgper = p_wa_final_sp_avgper / p_wa_final_sp_emp. ENDIF. wa_alv-fs_emp = p_wa_final_fs_emp. IF p_wa_final_fs_emp > 0. wa_alv-fs_avgper = p_wa_final_fs_avgper / p_wa_final_fs_emp. ENDIF. wa_alv-ni_emp = p_wa_final_ni_emp. IF p_wa_final_ni_emp > 0. wa_alv-ni_avgper = p_wa_final_ni_avgper / p_wa_final_ni_emp. ENDIF. wa_alv-un_emp = p_wa_final_un_emp. IF p_wa_final_un_emp > 0. wa_alv-un_avgper = p_wa_final_un_avgper / p_wa_final_un_emp. ENDIF. wa_alv-nr_emp = p_wa_final_nr_emp. IF p_wa_final_nr_emp > 0. wa_alv-nr_avgper = p_wa_final_nr_avgper / p_wa_final_nr_emp. ENDIF. APPEND wa_alv TO it_alv. ENDFORM. " APPEND_ALV *&---------------------------------------------------------------------* *& Form BUILD_EVENTCAT_SUM *&---------------------------------------------------------------------* * Event Catalog for EEO Statistics *----------------------------------------------------------------------* FORM build_eventcat_sum . REFRESH it_eventcat. clear it_eventcat. it_eventcat-name = 'TOP_OF_PAGE'. it_eventcat-form = 'TOP_OF_PAGE1'. APPEND it_eventcat. ENDFORM. " BUILD_EVENTCAT_SUM *&---------------------------------------------------------------------* *& Form CREATE_FIELDCAT_SUMMARY *&---------------------------------------------------------------------* * Build Field Catalog *----------------------------------------------------------------------* FORM create_fieldcat_summary .

REFRESH it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname = 'DESC'. it_fieldcat-seltext_m = ''. it_fieldcat-outputlen = 20. APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat.

= = = =

'DP_EMP'. 'DP-No Of Employee'. 'DP-No Of Employee'. 20.

= = = =

'DP_AVGPER'. 'DP-Average % Increase'. 'DP-Average % Increase'. 20.

clear it_fieldcat. it_fieldcat-fieldname = 'SP_EMP'. it_fieldcat-seltext_m = 'SP - No Of Employee'. it_fieldcat-outputlen = 20. APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen

= = = =

'SP_AVGPER'. 'SP-Average % Increase'. 'SP-Average % Increase'. 20.

= = = =

'FS_EMP'. 'FS-No Of Employee'. 'FS-No Of Employee'. 20.

= = = =

'FS_AVGPER'. 'FS-Average % Increase'. 'FS-Average % Increase'. 20.

APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname it_fieldcat-seltext_m it_fieldcat-seltext_l it_fieldcat-outputlen APPEND it_fieldcat.

= = = =

'NI_EMP'. 'NI-No Of Employee'. 'NI-No Of Employee'. 20.

= = = =

'NI_AVGPER'. 'NI-Average % Increase'. 'NI-Average % Increase'. 20.

= = = =

'NR_EMP'. 'NR-No Of Employee'. 'NR-No Of Employee'. 20.

= = = =

'NR_AVGPER'. 'NR-Average % Increase'. 'NR-Average % Increase'. 20.

= = = =

'UN_EMP'. 'U-No of Employee'. 'U-No of Employee'. 20.

clear it_fieldcat. it_fieldcat-fieldname = 'UN_AVGPER'. it_fieldcat-seltext_m = 'U-Average % Increase'. it_fieldcat-seltext_l = 'U-Average % Increase'. it_fieldcat-outputlen = 20. APPEND it_fieldcat. ENDFORM. " CREATE_FIELDCAT_SUMMARY *&---------------------------------------------------------------------* *& Form BUILD_MERITSTAT *&---------------------------------------------------------------------* * Build Merit Statistics

*----------------------------------------------------------------------* FORM build_meritstat . DATA: l_total TYPE p LENGTH 12 DECIMALS 2, l_avg TYPE p LENGTH 3 DECIMALS 2, l_tmp1 TYPE p LENGTH 12 DECIMALS 2, l_tmp2 TYPE p LENGTH 12 DECIMALS 2 . * Build First Row for Current BASE *CURRENT BASE For Exempt, Non Exempt & Total CLEAR: wa_ex_nex_tab, l_total. MOVE 'CURRENT BASE' TO wa_ex_nex_tab-desc. MOVE g_cb_ex TO wa_ex_nex_tab-ex_val. MOVE g_cb_nex TO wa_ex_nex_tab-nex_val. l_total = g_cb_ex + g_cb_nex. MOVE l_total TO wa_ex_nex_tab-ex_nex_tot. APPEND wa_ex_nex_tab TO it_ex_nex_tab. * Build Second Row for Merit Budget * MERIT BUDGET For Exempt, Non Exempt & Total CLEAR: wa_ex_nex_tab, l_total. MOVE 'MERIT BUDGET' TO wa_ex_nex_tab-desc. MOVE g_mb_ex TO wa_ex_nex_tab-ex_val. MOVE g_mb_nex TO wa_ex_nex_tab-nex_val. l_total = g_mb_ex + g_mb_nex. MOVE l_total TO wa_ex_nex_tab-ex_nex_tot. APPEND wa_ex_nex_tab TO it_ex_nex_tab. * Build Third Row for Merit Actual * MERIT ACTUAL For Exempt, Non Exempt & Total CLEAR: wa_ex_nex_tab, l_total. MOVE 'MERIT ACTUAL' TO wa_ex_nex_tab-desc. MOVE g_ma_ex TO wa_ex_nex_tab-ex_val. MOVE g_ma_nex TO wa_ex_nex_tab-nex_val. l_total = g_ma_ex + g_ma_nex. MOVE l_total TO wa_ex_nex_tab-ex_nex_tot. APPEND wa_ex_nex_tab TO it_ex_nex_tab. * Build Fourth Row for New BASE * NEW BASE For Exempt, Non Exempt & Total CLEAR: wa_ex_nex_tab, l_total. MOVE 'NEW BASE' TO wa_ex_nex_tab-desc. MOVE g_nb_ex TO wa_ex_nex_tab-ex_val. MOVE g_nb_nex TO wa_ex_nex_tab-nex_val. l_total = g_nb_ex + g_nb_nex. MOVE l_total TO wa_ex_nex_tab-ex_nex_tot. APPEND wa_ex_nex_tab TO it_ex_nex_tab.

* Build Fifth Row for Average %age increse * AVG INC % For Exempt, Non Exempt & Total CLEAR: wa_ex_nex_tab, l_total. MOVE 'AVG % INCR' TO wa_ex_nex_tab-desc. IF g_cb_ex IS NOT INITIAL. l_avg = ( g_nb_ex - g_cb_ex ) / g_cb_ex * 100. MOVE l_avg TO wa_ex_nex_tab-ex_val. ENDIF. CLEAR l_avg. IF g_cb_nex IS NOT INITIAL. l_avg = ( g_nb_nex - g_cb_nex ) / g_cb_nex * 100. MOVE l_avg TO wa_ex_nex_tab-nex_val. ENDIF. l_tmp1 = g_cb_ex + g_cb_nex. l_tmp2 = g_nb_ex + g_nb_nex. IF l_tmp1 IS NOT INITIAL. l_avg = ( l_tmp2 - l_tmp1 ) / l_tmp1 * 100. MOVE l_avg TO wa_ex_nex_tab-ex_nex_tot. ENDIF. APPEND wa_ex_nex_tab TO it_ex_nex_tab. * Build Sixth Row for Balance * BALANCE For Exempt, Non Exempt & Total CLEAR: wa_ex_nex_tab, l_total. MOVE 'BALANCE' TO wa_ex_nex_tab-desc. clear: l_tmp1. l_tmp1 = g_mb_ex - g_ma_ex. move l_tmp1 to wa_ex_nex_tab-ex_val. clear: l_tmp1, l_tmp2. l_tmp1 = g_mb_nex - g_ma_nex. move l_tmp1 to wa_ex_nex_tab-nex_val. clear: l_tmp1, l_tmp2. l_tmp1 = g_mb_ex + g_mb_nex. l_tmp2 = g_ma_ex + g_ma_nex. l_tmp1 = l_tmp1 - l_tmp2. MOVE l_tmp1 TO wa_ex_nex_tab-ex_nex_tot. APPEND wa_ex_nex_tab TO it_ex_nex_tab. ENDFORM. " BUILD_MERITSTAT *&---------------------------------------------------------------------* *& Form BUILD_EVENTCAT_MERITSTAT *&---------------------------------------------------------------------* * Merit Statistics Table display, Event handling *----------------------------------------------------------------------*

FORM build_eventcat_meritstat . REFRESH it_eventcat. clear it_eventcat. it_eventcat-name = 'TOP_OF_PAGE'. it_eventcat-form = 'TOP_OF_PAGE2'. APPEND it_eventcat. ENDFORM. " BUILD_EVENTCAT_MERITSTAT *&---------------------------------------------------------------------* *& Form CREATE_FIELDCAT_MERITSTAT *&---------------------------------------------------------------------* * Field Catalog for Merit Statistics Table Display *----------------------------------------------------------------------* FORM create_fieldcat_meritstat . REFRESH it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname = 'DESC'. it_fieldcat-seltext_m = 'REPORTING FOR'. it_fieldcat-outputlen = 20. APPEND it_fieldcat. * * * * * * * * * * * clear it_fieldcat. it_fieldcat-fieldname = 'EX_VAL'. it_fieldcat-seltext_m = 'EXEMPT'. it_fieldcat-outputlen = 20. APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname = 'NEX_VAL'. it_fieldcat-seltext_m = 'NON-EXEMPT'. it_fieldcat-outputlen = 20. APPEND it_fieldcat. clear it_fieldcat. it_fieldcat-fieldname = 'EX_NEX_TOT'. it_fieldcat-seltext_m = 'STATISTICS'. it_fieldcat-outputlen = 20. APPEND it_fieldcat. ENDFORM. " CREATE_FIELDCAT_MERITSTAT

Você também pode gostar