Application Development and Automation Discussions
Join the discussions or start your own on all things application development, including tools and APIs, programming models, and keeping your skills sharp.
cancel
Showing results for 
Search instead for 
Did you mean: 
Read only

hr abap

Former Member
0 Likes
1,184

hi friends,

plz, send me abap-hr sample programs on payroll,time mngt,wages and personal administration which helps me for food practice and i hope.

thank u,

1 ACCEPTED SOLUTION
Read only

Former Member
0 Likes
1,085

Hi,

Please check this link for HR sample programs.

http://www.sapdevelopment.co.uk/hr/hrhome.htm

Regards,

Ferry Lianto

hi friends,

plz, send me abap-hr sample programs on payroll,time mngt,wages and personal administration which helps me for food practice and i hope.

thank u,

3 REPLIES 3
Read only

Former Member
0 Likes
1,085

Hi

HR:

HR deals with the INFOTYPES which are similar to Tables in General ABAP.

There are different ways of fetching data from these infotypes.

There are different areas in HR LIKE Personal Admn, Orgn Management, Benefits, Time amangement, Event Management, Payroll etc

Infotypes for these areas are different from one another area.

storing of records data in each type of area is different

LDBS like PNP are used in HR programing.

Instead of Select.. we use some ROUTINES and PROVIDE..ENDPROVIDE.. etc

and in the case of Pay roll we use Clusters and we Import and Export them for data fetching.

On the whole Normal ABAP is different from HR abap.

For Personal Admn the Infotypes start with PA0000 to PA1999

Time Related Infotypes start with PA2000 to PA2999.

Orgn related Infotypes start with HRP1000 to HRP1999.

All custom developed infotypes stsrat with PA9000 onwards.

In payroll processing we use Clusters like PCL1,2,3 and 4.

Instead of Select query we use PROVIDE and ENDPROVIDE..

You have to assign a Logical Database in the attributes PNP.

Go through the SAp doc for HR programming and start doing.

http://www.sapdevelopment.co.uk/hr/hrhome.htm

See:

http://help.sap.com/saphelp_46c/helpdata/en/4f/d5268a575e11d189270000e8322f96/content.htm

PAYROLL REPORT

report zovertime

line-size 252

line-count 60(1)

no standard page heading

message-id zndc.

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

  • Database Tables & Infotypes

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

tables: pcl1, " HR Cluster1

pcl2, " HR Cluster1

pa0003, " Master data - Payroll Status

cskt, " Cost Center Texts

t528t, " Positions Texts

t513s, " Job Titles

pernr, " Logical PNP

t001p, " Personnel Subarea

t500p, " Personnel Area

t501, " Employee Group

t503k, " Employee Subgroup

csks. " Cost Center

infotypes:0000,0001.

*include rpclst00.

include rpc2rx00.

include rpc2rxx0.

include rpc2cd00.

*include rpc2ps00.

*include rpc2pt00.

*include rpcfvp00.

*include rpcfdc10.

*include rpcfdc00.

include rpppxd00.

include rpppxd10.

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

  • Declaration of Internal Tables

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

  • Internal Table for Output Data

data: begin of rep_tab occurs 0,

kostl like pa0001-kostl, " Cost Center

pernr like pa0001-pernr, " Personal Number

ename like pa0001-ename, " Employee Name

ctext like cskt-ltext, " Cost Center Text

ptext like t528t-plstx, " Position Text

ot1 type p decimals 2, " Jan OT Amount

ot2 type p decimals 2, " Feb OT Amount

ot3 type p decimals 2, " Mar OT Amount

ot4 type p decimals 2, " Apr OT Amount

ot5 type p decimals 2, " May OT Amount

ot6 type p decimals 2, " Jun OT Amount

ot7 type p decimals 2, " Jul OT Amount

ot8 type p decimals 2, " Aug OT Amount

ot9 type p decimals 2, " Sep OT Amount

ot10 type p decimals 2, " Oct OT Amount

ot11 type p decimals 2, " Nov OT Amount

ot12 type p decimals 2, " Dec OT Amount

ott type p decimals 2, " Total OT Amount

end of rep_tab.

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

  • Declaration of Variables

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

data: v_mon(2) type n, " Month

v_no type i, " Data Lines

v_year(4) type c, " Year

v_date like sy-datum, " Date

v_date1 like sy-datum, " Date

v_seqnr like pc261-seqnr. " Sequence No.

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

  • Declaration of Constants

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

data: c_type like hrp1001-otype value 'S', " Object Type

c_kokrs like cskt-kokrs value '1000', " Controlling Area

c_date1 like sy-datum value '18000101', " Date

c_date2 like sy-datum value '99991231', " Date

c_x type c value 'X', " Sign

  • c_mon(2) type c value '01', " Month

c_val1(2) type c value '31', " Date

c_val2(2) type c value '12', " Month Type

c_val like p0041-dar01 value '01', " Date Type

c_lgart1 like p0008-lga01 value '0722', " Wage Type

c_lgart2 like p0008-lga01 value '0723', " Wage Type

c_1(2) type n value '01', " Month1

c_2(2) type n value '02', " Month2

c_3(2) type n value '03', " Month3

c_4(2) type n value '04', " Month4

c_5(2) type n value '05', " Month5

c_6(2) type n value '06', " Month6

c_7(2) type n value '07', " Month7

c_8(2) type n value '08', " Month8

c_9(2) type n value '09', " Month9

c_10(2) type n value '10', " Month10

c_11(2) type n value '11', " Month11

c_12(2) type n value '12'. " Month12

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

  • Selection-screen

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

parameters:

p_year like pc2b0-pabrj obligatory. " Payroll Year

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

  • At selection-screen

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

at selection-screen.

  • Validate the Selection Screen fields

perform validate_screen.

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

  • Start-of-Selection

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

start-of-selection.

  • Selection of Period

perform get_period.

  • Get PERNR from LDB

get pernr.

  • Get the Master data from infotype 0001

perform get_master_data.

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

  • Top-of-page

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

top-of-page.

  • Write the Report and Column Headings

perform top_of_page.

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

  • End-of-Page

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

end-of-page.

write /1(252) sy-uline.

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

  • End-of-Selection

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

end-of-selection.

  • Display the Output Report.

perform display_report.

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

  • Form-Routines

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

&----


*& Form validate_screen

&----


  • Validation of selection Screen fields

----


form validate_screen.

  • Validation of Cost Center

clear csks.

if not pnpkostl[] is initial.

select single kostl

into csks-kostl

from csks

where kostl in pnpkostl.

if sy-subrc <> 0.

message e999 with 'Invalid Cost Center'(003).

endif.

endif.

  • Validation of Personnel Number

clear pa0003.

if not pnppernr[] is initial.

select pernr

from pa0003 up to 1 rows

into pa0003-pernr

where pernr in pnppernr.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Personal Number Entered'(002).

endif.

endif.

  • Validation of Personnel Area

clear t500p.

if not pnpwerks[] is initial.

select persa

from t500p up to 1 rows

into t500p-persa

where persa in pnpwerks.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Personnel Area Entered'(001).

endif.

endif.

  • Validation of Personnel Sub Area

clear t001p.

if not pnpbtrtl[] is initial.

select btrtl

from t001p up to 1 rows

into t001p-btrtl

where btrtl in pnpbtrtl.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Personnel Sub Area Entered'(037).

endif.

endif.

  • Validation of Employee Group

clear t501.

if not pnppersg[] is initial.

select persg

from t501 up to 1 rows

into t501-persg

where persg in pnppersg.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Employee Group Entered'(038).

endif.

endif.

  • Validation of Employee Sub Group

clear t503k.

if not pnppersk[] is initial.

select persk

from t503k up to 1 rows

into t503k-persk

where persk in pnppersk.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Employee Sub Group Entered'(039).

endif.

endif.

endform. "validate_screen

&----


*& Form get_period

&----


  • Get the Correct Period based on Selection screen selection

----


form get_period.

clear: v_year,v_mon, v_date, v_date1.

v_year = sy-datum+0(4).

v_mon = sy-datum+4(2).

if pnptimr1 = c_x. " Current Date

pnpbegda = sy-datum.

pnpendda = sy-datum.

elseif pnptimr2 = c_x. " Current Month

concatenate v_year v_mon c_val into v_date.

concatenate v_year v_mon c_val1 into v_date1.

pnpbegda = v_date.

pnpendda = v_date1.

elseif pnptimr3 = c_x. " Current Year

concatenate v_year c_val c_val into v_date.

concatenate v_year c_val2 c_val1 into v_date1.

pnpbegda = v_date.

pnpendda = v_date1.

elseif pnptimr4 = c_x. " Upto Today

pnpbegda = c_date1.

pnpendda = sy-datum.

elseif pnptimr5 = c_x. " From Today

pnpbegda = sy-datum.

pnpendda = c_date2.

else.

if ( pnpbegda is initial and pnpendda is initial ).

pnpbegda = c_date1.

pnpendda = c_date2.

elseif pnpbegda is initial and not pnpendda is initial.

pnpbegda = c_date1.

pnpendda = pnpendda.

elseif not ( pnpbegda is initial and pnpendda is initial ).

pnpbegda = pnpbegda.

pnpendda = pnpendda.

endif.

endif.

endform. "get_period

&----


*& Form get_master_data

&----


  • Get the Master Data from Database Tables PA0001,0002,0003

*----


form get_master_data.

  • Get data from Respective Infotypes

rp_provide_from_last p0001 space pnpbegda pnpendda.

if p0001-kostl in pnpkostl.

rep_tab-kostl = p0001-kostl.

rep_tab-pernr = p0001-pernr.

rep_tab-ename = p0001-ename.

  • Get the Position Text

clear t528t-plstx.

select single plstx into t528t-plstx from t528t

where plans = p0001-plans and

otype = c_type and

sprsl = sy-langu.

if sy-subrc = 0.

rep_tab-ptext = t528t-plstx.

endif.

  • Get the Cost Center Text

clear cskt-ltext.

select single ltext into cskt-ltext from cskt

where spras = sy-langu and

kokrs = c_kokrs and

kostl = p0001-kostl.

if sy-subrc = 0.

rep_tab-ctext = cskt-ltext.

endif.

  • Get the Overtime Payment Data

perform get_ot_data.

rep_tab-ott = rep_tab-ot1 + rep_tab-ot2 + rep_tab-ot3 +

rep_tab-ot4 + rep_tab-ot5 + rep_tab-ot6 +

rep_tab-ot7 + rep_tab-ot8 + rep_tab-ot9 +

rep_tab-ot10 + rep_tab-ot11 + rep_tab-ot12.

append rep_tab.

clear rep_tab.

endif.

sort rep_tab by kostl pernr.

delete rep_tab where kostl = ' '.

delete rep_tab where ott = 0.

endform. "get_master_data

&----


*& Form get_ot_data

&----


  • Get the Overtime Payment Data

*----


form get_ot_data.

cd-key = pernr-pernr.

rp-imp-c2-cd.

sort rgdir by seqnr.

  • To get sequence number for the payroll period

loop at rgdir where void is initial

and reversal is initial

and outofseq is initial

and srtza eq 'A'.

if rgdir-fpper+0(4) = p_year.

  • To consider offcycle run data

if not rgdir-ocrsn is initial.

v_seqnr = rgdir-seqnr.

exit.

endif.

v_seqnr = rgdir-seqnr.

endif.

if not v_seqnr is initial.

perform import_rx.

endif.

perform process_wagetypes.

endloop.

endform. "get_ot_data

include rpppxm00.

&----


*& Form Import_rx

&----


  • Import the RX data from Clusters

----


form import_rx.

rx-key-pernr = cd-key-pernr.

rx-key-seqno = v_seqnr.

rp-init-buffer.

rp-imp-c2-rx.

endform. " Import_rx

&----


*& Form Process_wagetypes

&----


  • Calculate the Overtime Amount based on Wage types

----


form process_wagetypes.

loop at rt.

if rt-lgart = c_lgart1 or rt-lgart = c_lgart2.

if rgdir-fpper+0(4) = p_year.

v_mon = rgdir-fpper+4(2).

case v_mon .

when c_1.

rep_tab-ot1 = rep_tab-ot1 + rt-betrg.

when c_2.

rep_tab-ot2 = rep_tab-ot2 + rt-betrg.

when c_3.

rep_tab-ot3 = rep_tab-ot3 + rt-betrg.

when c_4.

rep_tab-ot4 = rep_tab-ot4 + rt-betrg.

when c_5.

rep_tab-ot5 = rep_tab-ot5 + rt-betrg.

when c_6.

rep_tab-ot6 = rep_tab-ot6 + rt-betrg.

when c_7.

rep_tab-ot7 = rep_tab-ot7 + rt-betrg.

when c_8.

rep_tab-ot8 = rep_tab-ot8 + rt-betrg.

when c_9.

rep_tab-ot9 = rep_tab-ot9 + rt-betrg.

when c_10.

rep_tab-ot10 = rep_tab-ot10 + rt-betrg.

when c_11.

rep_tab-ot11 = rep_tab-ot11 + rt-betrg.

when c_12.

rep_tab-ot12 = rep_tab-ot12 + rt-betrg.

endcase.

endif.

endif.

endloop.

endform. "process_wagetypes

&----


*& Form top_of_page

&----


  • Write the Report and Column Headings

----


form top_of_page.

format color col_heading on.

write: /1(252) 'NATIONAL DRILLING COMPANY'(010) centered,

/1(252) 'Overtime Payments Details'(011) centered.

format color off.

if pnptimr1 = c_x. " Current Date

write: /2 'Period From :'(036), sy-datum, 'To:'(006), sy-datum.

elseif pnptimr2 = c_x. " Current Month

write: /2 'Period From :'(036), v_date, 'To:'(006), v_date1.

elseif pnptimr3 = c_x. " Current Year

write: /2 'Period From :'(036), v_date, 'To:'(006), v_date1.

elseif pnptimr4 = c_x. " Upto Today

write: /2 'Period From :'(036), c_date1, 'To:'(006), sy-datum.

elseif pnptimr5 = c_x. " From Today

write: /2 'Period From :'(036), sy-datum, 'To:'(006), c_date2.

else.

if ( pnpbegda is initial and pnpendda is initial ).

write: /2 'Period From :'(036), c_date1, 'To:'(006), c_date2.

elseif pnpbegda is initial and not pnpendda is initial.

write: /2 'Period From :'(036), c_date1, 'To:'(006), pnpendda.

elseif not ( pnpbegda is initial and pnpendda is initial ).

write: /2 'Period From :'(036), pnpbegda,

'To:'(006), pnpendda.

endif.

endif.

write: 219 'Report Run Date:'(018), sy-datum.

if not pnpkostl[] is initial.

if pnpkostl-high is initial.

write: /2 'Cost Center :'(004), pnpkostl-low,

219 'Time :'(020), sy-uzeit.

else.

write: /2 'Cost Center From:'(005), pnpkostl-low+7(3),

'To:'(006), pnpkostl-high,

219 'Time :'(020), sy-uzeit.

endif.

else.

write: /219 'Time :'(020), sy-uzeit.

endif.

if not pnppernr[] is initial.

if pnppernr-high is initial.

write: /2 'Personal Number :'(007), pnppernr-low,

219 'User :'(021), sy-uname.

else.

write: /2 'Personal No.From:'(008), pnppernr-low,

'To:'(006), pnppernr-high,

219 'User :'(021), sy-uname.

endif.

else.

write: /219 'User :'(021), sy-uname.

endif.

write: /219 'Page No :'(022), sy-pagno.

format color col_heading.

write /1(252) sy-uline.

write:/1 sy-vline, 10 sy-vline,

41 sy-vline,

67 sy-vline, 68(167) 'Overtime Payments(Dirhams)'(013) centered,

235 sy-vline,252 sy-vline.

format color col_heading.

write:/1 sy-vline, 2(8) 'Emp #'(019) centered,

10 sy-vline, 11(30) 'Employee Name'(012) centered,

41 sy-vline, 42(25) 'Position'(014) centered,

67 sy-vline, 68(167) sy-uline,

235 sy-vline,236(16) 'Total'(017) centered,

252 sy-vline.

write:/1 sy-vline, 10 sy-vline,

41 sy-vline,

67 sy-vline, 68(13) 'JANUARY'(024) centered,

81 sy-vline, 82(13) 'FEBRUARY'(025) centered,

95 sy-vline, 96(13) 'MARCH'(026) centered,

109 sy-vline,110(13) 'APRIL'(027) centered,

123 sy-vline,124(13) 'MAY'(028) centered,

137 sy-vline,138(13) 'JUNE'(029) centered,

151 sy-vline,152(13) 'JULY'(030) centered,

165 sy-vline,166(13) 'AUGUST'(031) centered,

179 sy-vline,180(13) 'SEPTEMBER'(032) centered,

193 sy-vline,194(13) 'OCTOBER'(033) centered,

207 sy-vline,208(13) 'NOVEMBER'(034) centered,

221 sy-vline,222(13) 'DECEMBER'(035) centered,

235 sy-vline,252 sy-vline.

format color off.

write /1(252) sy-uline.

endform. "top_of_page

&----


*& Form Display_report

&----


  • Write the Report Output

----


form display_report.

clear v_no.

describe table rep_tab lines v_no.

if v_no = 0.

message i999 with

'No Data found for the entered Selection'(015).

endif.

loop at rep_tab.

format color 3.

at new kostl.

read table rep_tab index sy-tabix.

write:/1 sy-vline, 2(12) 'Cost Center:'(009),

14(10) rep_tab-kostl,

25(30) rep_tab-ctext,

252 sy-vline.

format color off.

write /1(252) sy-uline.

endat.

format color col_normal.

write: /1 sy-vline, 2(8) rep_tab-pernr,

10 sy-vline, 11(30) rep_tab-ename,

41 sy-vline, 42(25) rep_tab-ptext,

67 sy-vline, 68(13) rep_tab-ot1 no-zero,

81 sy-vline, 82(13) rep_tab-ot2 no-zero,

95 sy-vline, 96(13) rep_tab-ot3 no-zero,

109 sy-vline,110(13) rep_tab-ot4 no-zero,

123 sy-vline,124(13) rep_tab-ot5 no-zero,

137 sy-vline,138(13) rep_tab-ot6 no-zero,

151 sy-vline,152(13) rep_tab-ot7 no-zero,

165 sy-vline,166(13) rep_tab-ot8 no-zero,

179 sy-vline,180(13) rep_tab-ot9 no-zero,

193 sy-vline,194(13) rep_tab-ot10 no-zero,

207 sy-vline,208(13) rep_tab-ot11 no-zero,

221 sy-vline,222(13) rep_tab-ot12 no-zero,

235 sy-vline,236(16) rep_tab-ott no-zero,

252 sy-vline.

at end of kostl.

write /1(252) sy-uline.

endat.

format color off.

at last.

sum.

format color 1.

write: /1 sy-vline,

10 sy-vline, 11(30) 'Total'(017) centered,

41 sy-vline,

67 sy-vline, 68(13) rep_tab-ot1 no-zero,

81 sy-vline, 82(13) rep_tab-ot2 no-zero,

95 sy-vline, 96(13) rep_tab-ot3 no-zero,

109 sy-vline,110(13) rep_tab-ot4 no-zero,

123 sy-vline,124(13) rep_tab-ot5 no-zero,

137 sy-vline,138(13) rep_tab-ot6 no-zero,

151 sy-vline,152(13) rep_tab-ot7 no-zero,

165 sy-vline,166(13) rep_tab-ot8 no-zero,

179 sy-vline,180(13) rep_tab-ot9 no-zero,

193 sy-vline,194(13) rep_tab-ot10 no-zero,

207 sy-vline,208(13) rep_tab-ot11 no-zero,

221 sy-vline,222(13) rep_tab-ot12 no-zero,

235 sy-vline,236(16) rep_tab-ott no-zero,

252 sy-vline.

write /1(252) sy-uline.

endat.

format color off.

endloop.

endform. "display_report

TIME MANAGEMENT

REPORT zh_absence_quota

NO STANDARD PAGE HEADING

MESSAGE-ID zh_msg

LINE-SIZE 169

LINE-COUNT 60(1).

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

  • T A B L E S D E C L A R A T I O N S

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

TABLES: pernr, " Logical PNP

t001p, " Personnel Subarea

t529u, " Employment Status

t500p, " Personnel Area

t501, " Employee Group

t503k, " Employee Subgroup

t549a, " Payroll Area

t554s, " Absence Type

t554t, " Absence Type Texts

t556a, " Quota Type

t527x, " Orgn. Unit

t556b, " Quota Type Text

pa0003. " Payroll Status

INFOTYPES:

0000, " Actions

0001, " Organizational Assignment

2006, " Absence Quota

2001. " Absences

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

  • T Y P E S D E C L A R A T I O N S

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

  • Employee Absence Structure

TYPES: BEGIN OF s_2001,

pernr TYPE persno, " Personal Number

awart TYPE awart, " Absence Type

subty TYPE subty, " Sub Type

endda TYPE endda, " End date

begda TYPE begda, " Begin date

abrtg TYPE abrtg, " Absence days

ename TYPE emnam, " employee Name

atext TYPE abwtxt, " Absence Type Text

END OF s_2001.

  • Employee Absence Quota Structure

TYPES: BEGIN OF s_2006,

pernr TYPE persno, " Personal Number

ktart TYPE abwko, " Absence Quota Type

year(4) TYPE n, " Year

subty TYPE subty, " Sub Type

endda TYPE endda, " End date

begda TYPE begda, " Begin date

anzhl TYPE ptm_quonum, " Absence Entitlement days

ename TYPE emnam, " employee Name

ktext TYPE kotxt, " Absence Type Text

kverb TYPE kverb, " Deduction Quota days

anzhb TYPE ptm_quonum, " Balance days

END OF s_2006.

  • Combined Employee Absence and Quota Structure

TYPES: BEGIN OF s_rep,

pernr TYPE persno, " Personal Number

ktart TYPE abwko, " Absence Quota Type

year(4) TYPE n, " Year

anzhl TYPE ptm_quonum, " Absence Entitlement days

kverb TYPE kverb, " Deduction Quota days

anzhb TYPE ptm_quonum, " Balance days

ktext TYPE kotxt, " Quota Type Text

awart TYPE awart, " Absence Type

abrtg TYPE abrtg, " Absence days

ename TYPE emnam, " employee Name

atext TYPE abwtxt, " Absence Type Text

endda TYPE endda, " End date

begda TYPE begda, " Begin date

END OF s_rep.

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

  • Declaration of Variables

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

DATA : gv_atext TYPE abwtxt, " Absence Type Text

gv_ktext TYPE kotxt, " Absence Type Text

gv_title1 TYPE sylisel, " Report title

gv_year(4) TYPE c, " Year

gv_mon(2) TYPE c, " Month

gv_hrs TYPE abwtg, " Hours

gv_date TYPE sydatum, " Date

gv_date1 TYPE sydatum, " Date

gv_dial. " Color flag

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

  • Declaration of Constants

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

CONSTANTS :

c_x TYPE c VALUE 'X', " Sign

c_1 TYPE persg VALUE '1', " Emp Group

c_pernr(8) TYPE n VALUE '00000000', " Pernr

c_moabw TYPE moabw VALUE '01', " Per SA Grouping

c_mozko TYPE mozko VALUE '01', " Per SA Grouping

c_mopgk TYPE mopgk VALUE '1', " Emp SGrp Grouping

c_endda TYPE sydatum VALUE '99991231', " End Date

c_val1(2) TYPE c VALUE '31', " Date Type

c_val2(2) TYPE c VALUE '12', " Date Type

c_val LIKE p0041-dar01 VALUE '01', " Date Type

c_date1 LIKE sy-datum VALUE '18000101'. " Date

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

  • I N T E R N A L T A B L E S D E C L A R A T I O N S

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

DATA: i_2001 TYPE STANDARD TABLE OF s_2001 WITH HEADER LINE,

i_2006 TYPE STANDARD TABLE OF s_2006 WITH HEADER LINE,

i_rep1 TYPE STANDARD TABLE OF s_2006 WITH HEADER LINE,

i_rep TYPE STANDARD TABLE OF s_rep WITH HEADER LINE.

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

  • S E L E C T I O N S C R E E N

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

SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-001.

SELECT-OPTIONS: s_ktart FOR t556a-ktart, " Absence Quota Type

s_awart FOR t554s-subty. " Absence Type

SELECTION-SCREEN END OF BLOCK b1.

SELECTION-SCREEN BEGIN OF BLOCK b2 WITH FRAME TITLE text-002.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(33) text-003. " Quota & Absence

PARAMETERS: p_qa RADIOBUTTON GROUP rb1.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(33) text-004. " Quota

PARAMETERS: p_q RADIOBUTTON GROUP rb1.

SELECTION-SCREEN END OF LINE.

SELECTION-SCREEN BEGIN OF LINE.

SELECTION-SCREEN COMMENT 1(33) text-005. " Absence

PARAMETERS: p_a RADIOBUTTON GROUP rb1.

SELECTION-SCREEN END OF LINE.SELECTION-SCREEN END OF BLOCK b2.

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

  • I N I T I A L I Z A T I O N *

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

INITIALIZATION.

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

  • A T S E L E C T I O N - S C R E E N *

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

AT SELECTION-SCREEN.

  • Validate the screen fields

PERFORM validate_screen.

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

  • S T A R T - O F - S E L E C T I O N *

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

START-OF-SELECTION.

  • Selection of Period

PERFORM get_period.

  • Get PERNR from LDB

GET pernr.

IF p0000-stat2 <> '0'.

  • Get the data from PA0001,PA2001, PA2006

PERFORM get_pers_data.

ENDIF.

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

  • T O P - O F - P A G E *

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

TOP-OF-PAGE.

  • Header of the List

PERFORM header.

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

  • E N D - O F - P A G E *

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

  • Footer

END-OF-PAGE.

IF p_qa = c_x.

  • Display both Absence and Quota Data

WRITE /1(188) sy-uline.

ELSEIF p_q = c_x.

  • Display only Quota Data

WRITE /1(114) sy-uline.

ELSEIF p_a = c_x.

  • Display only Absence Data

WRITE /1(125) sy-uline.

ENDIF.

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

  • E N D - O F - S E L E C T I O N *

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

END-OF-SELECTION.

  • Combine the Absence and Quota Data

PERFORM append_data.

IF p_qa = c_x.

  • Display both Absence and Quota Data

PERFORM display_qa_data.

ELSEIF p_q = c_x.

  • Display only Quota Data

PERFORM display_q_data.

ELSEIF p_a = c_x.

  • Display only Absence Data

PERFORM display_a_data.

ENDIF.

&----


*& Form validate_screen

&----


  • Validation of Selection Screen fields

----


FORM validate_screen .

  • Validation of Personnel Number

CLEAR pa0003.

IF NOT pnppernr[] IS INITIAL.

SELECT pernr

FROM pa0003 UP TO 1 ROWS

INTO pa0003-pernr

WHERE pernr IN pnppernr.

ENDSELECT.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Incorrect Personnel Number'(006).

ENDIF.

ENDIF.

  • Validation of Employee Status

CLEAR t529u.

IF NOT pnpstat2[] IS INITIAL.

SELECT SINGLE statv

INTO t529u-statv

FROM t529u

WHERE statv IN pnpstat2 AND

statn = '2' AND

sprsl = sy-langu.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Invalid Employee Status'(007).

ENDIF.

ENDIF.

  • Validation of Personnel Area

CLEAR t500p.

IF NOT pnpwerks[] IS INITIAL.

SELECT persa

FROM t500p UP TO 1 ROWS

INTO t500p-persa

WHERE persa IN pnpwerks.

ENDSELECT.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Incorrect Personnel Area'(008).

ENDIF.

ENDIF.

  • Validation of Personnel Sub Area

CLEAR t001p.

IF NOT pnpbtrtl[] IS INITIAL.

SELECT btrtl

FROM t001p UP TO 1 ROWS

INTO t001p-btrtl

WHERE btrtl IN pnpbtrtl.

ENDSELECT.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Incorrect Personnel Sub Area'(009).

ENDIF.

ENDIF.

  • Validation of Employee Group

CLEAR t501.

IF NOT pnppersg[] IS INITIAL.

SELECT persg

FROM t501 UP TO 1 ROWS

INTO t501-persg

WHERE persg IN pnppersg.

ENDSELECT.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Incorrect Employee Group'(010).

ENDIF.

ENDIF.

  • Validation of Employee Sub Group

CLEAR t503k.

IF NOT pnppersk[] IS INITIAL.

SELECT persk

FROM t503k UP TO 1 ROWS

INTO t503k-persk

WHERE persk IN pnppersk.

ENDSELECT.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Incorrect Employee Sub Group'(011).

ENDIF.

ENDIF.

  • Validation of Payroll Area

CLEAR t549a.

IF NOT pnpabkrs[] IS INITIAL.

SELECT abkrs

FROM t549a UP TO 1 ROWS

INTO t549a-abkrs

WHERE abkrs IN pnpabkrs.

ENDSELECT.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Incorrect Employee Payroll Area'(026).

ENDIF.

ENDIF.

  • Validation of Absence Type

CLEAR t554s.

IF NOT s_awart[] IS INITIAL.

SELECT subty

FROM t554s UP TO 1 ROWS

INTO t554s-subty

WHERE subty IN s_awart AND

moabw EQ c_moabw AND

endda EQ c_endda.

ENDSELECT.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Incorrect Employee Absence Type'(012).

ENDIF.

ENDIF.

  • Validation of Absence Quota Type

CLEAR t556a.

IF NOT s_ktart[] IS INITIAL.

SELECT ktart

FROM t556a UP TO 1 ROWS

INTO t556a-ktart

WHERE ktart IN s_ktart AND

mopgk EQ c_mopgk AND

mozko EQ c_mozko AND

endda EQ c_endda.

ENDSELECT.

IF sy-subrc <> 0.

MESSAGE e999 WITH 'Incorrect Employee Quota Type'(013).

ENDIF.

ENDIF.

ENDFORM. "validate_screen

&----


*& Form get_period

&----


  • Get the Correct Period based on Selection screen selection

----


FORM get_period.

CLEAR: gv_year,gv_mon, gv_date, gv_date1.

gv_year = sy-datum+0(4).

gv_mon = sy-datum+4(2).

IF pnptimr1 = c_x. " Current Date

pnpbegda = sy-datum.

pnpendda = sy-datum.

ELSEIF pnptimr2 = c_x. " Current Month

CONCATENATE gv_year gv_mon c_val INTO gv_date.

CONCATENATE gv_year gv_mon c_val1 INTO gv_date1.

pnpbegda = gv_date.

pnpendda = gv_date1.

ELSEIF pnptimr3 = c_x. " Current Year

CONCATENATE gv_year c_val c_val INTO gv_date.

CONCATENATE gv_year c_val2 c_val1 INTO gv_date1.

pnpbegda = gv_date.

pnpendda = gv_date1.

ELSEIF pnptimr4 = c_x. " Upto Today

pnpbegda = c_date1.

pnpendda = sy-datum.

ELSEIF pnptimr5 = c_x. " From Today

pnpbegda = sy-datum.

pnpendda = c_endda.

ELSE.

IF ( pnpbegda IS INITIAL AND pnpendda IS INITIAL ).

pnpbegda = c_date1.

pnpendda = c_endda.

ELSEIF pnpbegda IS INITIAL AND NOT pnpendda IS INITIAL.

pnpbegda = c_date1.

pnpendda = pnpendda.

ELSEIF NOT ( pnpbegda IS INITIAL AND pnpendda IS INITIAL ).

pnpbegda = pnpbegda.

pnpendda = pnpendda.

ENDIF.

ENDIF.

ENDFORM. "get_period

&----


*& Form get_pers_data

&----


  • Get the Absence and Quota Data from PA0001,PA2001,PA2006

----


FORM get_pers_data.

DATA: lv_year1(4) TYPE n,

lv_year2(4) TYPE n,

lv_date1 TYPE sydatum,

lv_date2 TYPE sydatum,

lv_anzhb TYPE ptm_quonum. " Last Year Balance days

  • Get data from Respective Infotypes

rp_provide_from_last p0001 space pnpbegda pnpendda.

  • Absence Data

LOOP AT p2001 WHERE pernr = pernr-pernr AND

begda GE pnpbegda AND

endda LE pnpendda.

IF p2001-awart IN s_awart.

i_2001-pernr = pernr-pernr.

i_2001-subty = p2001-subty.

i_2001-awart = p2001-awart.

i_2001-abrtg = p2001-abrtg.

i_2001-begda = p2001-begda.

i_2001-endda = p2001-endda.

READ TABLE p0001 WITH KEY pernr = p2001-pernr.

i_2001-ename = p0001-ename.

  • Get the Absence Type Text

CLEAR gv_atext.

SELECT SINGLE atext INTO gv_atext FROM t554t

WHERE sprsl = sy-langu AND

moabw = c_moabw AND

awart = p2001-awart.

IF sy-subrc = 0.

i_2001-atext = gv_atext.

ENDIF.

APPEND i_2001.

CLEAR i_2001.

ENDIF.

ENDLOOP.

  • Quota Data

LOOP AT p2006 WHERE pernr = pernr-pernr AND

begda GE pnpbegda AND

endda LE pnpendda.

IF p2006-ktart IN s_ktart.

i_2006-pernr = pernr-pernr.

i_2006-subty = p2006-subty.

i_2006-begda = p2006-begda.

i_2006-endda = p2006-endda.

i_2006-year = p2006-endda+0(4).

i_2006-ktart = p2006-ktart.

i_2006-anzhl = p2006-anzhl.

i_2006-kverb = p2006-kverb.

i_2006-anzhb = p2006-anzhl - p2006-kverb.

READ TABLE p0001 WITH KEY pernr = p2001-pernr.

i_2006-ename = p0001-ename.

  • Get the Quota Type Text

CLEAR gv_ktext.

SELECT SINGLE ktext INTO gv_ktext FROM t556b

WHERE sprsl = sy-langu AND

mopgk = c_mopgk AND

mozko = c_mozko AND

ktart = p2006-ktart.

IF sy-subrc = 0.

i_2006-ktext = gv_ktext.

ENDIF.

APPEND i_2006.

CLEAR i_2006.

ENDIF.

ENDLOOP.

  • For Vacation Quota (80) get the Balance of the Last Year and

  • add to the Current Year Quota

LOOP AT i_2006.

IF i_2006-ktart = '80'.

lv_year1 = i_2006-endda+0(4).

lv_year2 = lv_year1 - 1.

CONCATENATE lv_year2 '01' '01' INTO lv_date1.

CONCATENATE lv_year2 '12' '31' INTO lv_date2.

LOOP AT p2006 WHERE pernr = i_2006-pernr AND

begda GE lv_date1 AND

endda LE lv_date2 AND

ktart = '80'.

lv_anzhb = p2006-anzhl - p2006-kverb.

i_rep1-pernr = i_2006-pernr.

i_rep1-ktext = i_2006-ktext.

i_rep1-anzhl = p2006-anzhl.

i_rep1-kverb = p2006-kverb.

i_rep1-ename = i_2006-ename.

i_rep1-begda = p2006-begda.

i_rep1-endda = p2006-endda.

i_rep1-anzhb = lv_anzhb.

i_rep1-ktart = '80'.

i_rep1-year = lv_year2.

APPEND i_rep1.

CLEAR: i_rep1.

ENDLOOP.

ENDIF.

CLEAR: lv_year1, lv_year2,

lv_date1, lv_date2,lv_anzhb.

ENDLOOP.

SORT i_rep1 BY pernr ktart.

ENDFORM. "get_pers_data

&----


*& Form append_data

&----


  • Put the Absence and Quota Data into one Report Int Table

----


FORM append_data.

CLEAR: i_rep.

REFRESH: i_rep.

SORT i_2001 BY pernr awart.

SORT i_2006 BY pernr ktart year.

  • Move I_REP1 data into i_2006

LOOP AT i_rep1.

MOVE-CORRESPONDING i_rep1 TO i_2006.

APPEND i_2006.

CLEAR i_2006.

ENDLOOP.

  • Move the Absence and Quota Data into a final Int Table

LOOP AT i_2006.

i_rep-pernr = i_2006-pernr.

i_rep-ename = i_2006-ename.

i_rep-ktart = i_2006-ktart.

i_rep-anzhl = i_2006-anzhl.

i_rep-kverb = i_2006-kverb.

i_rep-ktext = i_2006-ktext.

i_rep-anzhb = i_2006-anzhb.

i_rep-year = i_2006-year.

CLEAR i_2001.

CASE i_2006-ktart.

WHEN '81'.

PERFORM get_2001 USING i_2006-pernr '1000' i_2006-year.

WHEN '50'.

PERFORM get_2001 USING i_2006-pernr '1002' i_2006-year.

WHEN '80'.

PERFORM get_2001 USING i_2006-pernr '1001' i_2006-year.

WHEN '56'.

PERFORM get_2001 USING i_2006-pernr '1003' i_2006-year.

WHEN '51'.

PERFORM get_2001 USING i_2006-pernr '1004' i_2006-year.

WHEN '52'.

PERFORM get_2001 USING i_2006-pernr '1005' i_2006-year.

WHEN '54'.

PERFORM get_2001 USING i_2006-pernr '1006' i_2006-year.

WHEN '53'.

PERFORM get_2001 USING i_2006-pernr '1007' i_2006-year.

WHEN '55'.

PERFORM get_2001 USING i_2006-pernr '1008' i_2006-year.

WHEN '57'.

PERFORM get_2001 USING i_2006-pernr '1009' i_2006-year.

WHEN '90'.

PERFORM get_2001 USING i_2006-pernr '2000' i_2006-year.

WHEN '58'.

PERFORM get_2001 USING i_2006-pernr '2001' i_2006-year.

WHEN '59'.

PERFORM get_2001 USING i_2006-pernr '2002' i_2006-year.

WHEN '91'.

PERFORM get_2001 USING i_2006-pernr '2003' i_2006-year.

ENDCASE.

IF sy-subrc <> 0.

APPEND i_rep.

ENDIF.

CLEAR i_rep.

ENDLOOP.

SORT i_rep BY pernr ktart year.

DELETE i_rep WHERE pernr = ' '.

ENDFORM. " append_data

&----


*& Form display_qa_data

&----


  • Display the Absence and Quota Data

----


FORM display_qa_data.

DATA: lv_flag, " New Flag

lv_tot2 TYPE ptm_quonum. " Absence Balance days

IF i_rep[] IS INITIAL.

MESSAGE i000 WITH 'No Data found'(014).

ELSE.

LOOP AT i_rep.

  • toggle color

PERFORM toggle_color.

IF lv_flag <> space.

NEW-LINE.

ENDIF.

AT NEW pernr.

READ TABLE i_rep INDEX sy-tabix.

WRITE:/1 sy-vline,2(8) i_rep-pernr,

10 sy-vline,11(40) i_rep-ename.

ENDAT.

AT NEW ktart.

READ TABLE i_rep INDEX sy-tabix.

WRITE: 1 sy-vline, 10 sy-vline,

51 sy-vline,52(25) i_rep-ktext.

ENDAT.

AT NEW year.

READ TABLE i_rep INDEX sy-tabix.

WRITE: 1 sy-vline, 10 sy-vline,

51 sy-vline,

77 sy-vline, 78(4) i_rep-year,

82 sy-vline, 83(11) i_rep-anzhl,

94 sy-vline, 95(25) i_rep-atext,

120 sy-vline,133 sy-vline,

144 sy-vline,

155 sy-vline,156(13) i_rep-anzhb,

169 sy-vline.

lv_tot2 = lv_tot2 + i_rep-anzhb.

ENDAT.

WRITE: 1 sy-vline, 10 sy-vline,

51 sy-vline, 77 sy-vline,

82 sy-vline, 94 sy-vline,

120 sy-vline,121(12) i_rep-abrtg NO-ZERO,

133 sy-vline,134(10) i_rep-begda NO-ZERO,

144 sy-vline,145(10) i_rep-endda NO-ZERO,

155 sy-vline,169 sy-vline.

NEW-LINE.

AT END OF pernr.

WRITE : /1(169) sy-uline.

SUM.

FORMAT COLOR 3.

WRITE:/1 sy-vline, 10 sy-vline,

51 sy-vline, 77 sy-vline,

82 sy-vline, 94 sy-vline,

120 sy-vline,121(12) i_rep-abrtg,

133 sy-vline,144 sy-vline,

155 sy-vline, 156(13) lv_tot2,

169 sy-vline.

FORMAT COLOR OFF.

WRITE : /1(169) sy-uline.

CLEAR lv_tot2.

ENDAT.

ENDLOOP.

ENDIF.

ENDFORM. " display_qa_data

&----


*& Form display_q_data

&----


  • Display only the Quota Data

----


FORM display_q_data.

DATA: lv_flag. " New Flag

SORT i_2006 BY pernr ktart year.

IF i_2006[] IS INITIAL.

MESSAGE i000 WITH 'No Data found'(014).

ELSE.

LOOP AT i_2006.

  • Toggle Color

PERFORM toggle_color.

IF lv_flag <> space.

NEW-LINE.

ENDIF.

AT NEW pernr.

READ TABLE i_2006 INDEX sy-tabix.

WRITE: /1 sy-vline, 2(8) i_2006-pernr,

10 sy-vline,11(40) i_2006-ename.

ENDAT.

AT NEW ktart.

READ TABLE i_2006 INDEX sy-tabix.

WRITE: 1 sy-vline,10 sy-vline,

51 sy-vline,52(25) i_2006-ktext.

ENDAT.

AT NEW year.

READ TABLE i_2006 INDEX sy-tabix.

WRITE: 1 sy-vline, 10 sy-vline,

51 sy-vline,

77 sy-vline,78(4) i_2006-year,

82 sy-vline,83(11) i_2006-anzhl,

94 sy-vline,95(13) i_2006-anzhb,

108 sy-vline.

NEW-LINE.

ENDAT.

AT END OF pernr.

WRITE : /1(108) sy-uline.

SUM.

FORMAT COLOR 3.

WRITE: /1 sy-vline, 10 sy-vline,

51 sy-vline,

77 sy-vline, 82 sy-vline,

94 sy-vline, 95(13) i_2006-anzhb,

108 sy-vline.

FORMAT COLOR OFF.

WRITE : /1(108) sy-uline.

ENDAT.

ENDLOOP.

ENDIF.

ENDFORM. " display_q_data

&----


*& Form display_a_data

&----


  • Display Only the Absence Quota

----


FORM display_a_data.

DATA: lv_flag. " New Flag

SORT i_2001 BY pernr awart.

IF i_2001[] IS INITIAL.

MESSAGE i000 WITH 'No Data found'(014).

ELSE.

LOOP AT i_2001.

  • Toggle Color

PERFORM toggle_color.

IF lv_flag <> space.

NEW-LINE.

ENDIF.

AT NEW pernr.

READ TABLE i_2001 INDEX sy-tabix.

WRITE: /1 sy-vline, 2(10) i_2001-pernr,

10 sy-vline,11(40) i_2001-ename.

ENDAT.

WRITE: 1 sy-vline, 10 sy-vline,

51 sy-vline,52(25) i_2001-atext,

77 sy-vline,78(12) i_2001-abrtg,

90 sy-vline,91(10) i_2001-begda,

101 sy-vline,102(10) i_2001-endda,

112 sy-vline.

NEW-LINE.

AT END OF pernr.

WRITE : /1(112) sy-uline.

SUM.

FORMAT COLOR 3.

WRITE: /1 sy-vline, 10 sy-vline,

51 sy-vline,

77 sy-vline,78(12) i_2001-abrtg,

90 sy-vline,101 sy-vline,

112 sy-vline.

FORMAT COLOR OFF.

WRITE : /1(112) sy-uline.

ENDAT.

ENDLOOP.

ENDIF.

ENDFORM. " display_a_data

&----


*& Form header

&----


  • Write the Report Header

----


FORM header .

data : lv_pers type pbtxt,

lv_orgn type orgtx.

gv_title1 = sy-title. " Set List Header

IF p_qa = c_x.

NEW-PAGE LINE-SIZE 193.

ELSEIF p_a = c_x.

NEW-PAGE LINE-SIZE 125.

ELSEIF p_q = c_x.

NEW-PAGE LINE-SIZE 119.

ENDIF.

  • Standard header

FORMAT RESET.

CALL FUNCTION 'Z_STANDARD_HEADER'

EXPORTING

title1 = gv_title1.

  • Get the Personal Area and Org.Unit Texts

clear : lv_pers,lv_orgn.

select single name1 into lv_pers

from t500p where persa = pnpwerks-low.

select single orgtx into lv_orgn

from t527x where sprsl = sy-langu and

orgeh = pnporgeh-low and

endda = c_endda.

if not lv_pers is initial.

write : /2 'Personal Area:'(017), 17(25) lv_pers color 7.

endif.

if not lv_orgn is initial.

write : /2 'Organization Unit:'(021), 20(25) lv_orgn color 3.

endif.

IF p_qa = c_x.

FORMAT COLOR COL_HEADING.

WRITE : /1(169) sy-uline.

WRITE:/1 sy-vline,2(8) 'Emp.No'(015) CENTERED,

10 sy-vline,11(40) 'Employee Name'(016) CENTERED,

51 sy-vline,52(25) 'Quota Description'(018) CENTERED,

77 sy-vline,78(4) 'Year'(027),

82 sy-vline,83(11) 'Entitlement'(019),

94 sy-vline,95(25) 'Absence Description'(022) CENTERED,

120 sy-vline,121(12) 'Absence days'(023),

133 sy-vline,134(10) 'From Date'(024),

144 sy-vline,145(10) 'To Date'(025),

155 sy-vline,156(13) 'Quota Balance'(020),

169 sy-vline.

WRITE : /1(169) sy-uline.

ELSEIF p_q = c_x.

FORMAT COLOR COL_HEADING.

WRITE : /1(108) sy-uline.

WRITE:/1 sy-vline,2(8) 'Emp.No'(015) CENTERED,

10 sy-vline,11(40) 'Employee Name'(016) CENTERED,

51 sy-vline,52(25) 'Quota Description'(018) CENTERED,

77 sy-vline,78(4) 'Year'(027),

82 sy-vline,83(11) 'Entitlement'(019),

94 sy-vline,95(13) 'Quota Balance'(020),

108 sy-vline.

WRITE : /1(108) sy-uline.

ELSEIF p_a = c_x.

FORMAT COLOR COL_HEADING.

WRITE : /1(112) sy-uline.

WRITE:/1 sy-vline,2(8) 'Emp.No'(015) CENTERED,

10 sy-vline,11(40) 'Employee Name'(016) CENTERED,

51 sy-vline,52(25) 'Absence Description'(022) CENTERED,

77 sy-vline,78(12) 'Absence days'(023),

90 sy-vline,91(10) 'From Date'(024),

101 sy-vline,102(10) 'To Date'(025),

112 sy-vline.

WRITE : /1(112) sy-uline.

ENDIF.

ENDFORM. " header

&----


*& Form toggle_color

&----


  • This routine alters the color of the records in the list

----


FORM toggle_color.

IF gv_dial = space.

FORMAT COLOR COL_NORMAL INTENSIFIED OFF.

gv_dial = c_x.

ELSE.

FORMAT COLOR 1 INTENSIFIED OFF.

CLEAR gv_dial.

ENDIF.

ENDFORM. " toggle_color

&----


*& Form get_2001

&----


  • Get the ABsence type for each Quota type

----


FORM get_2001 USING p_pernr TYPE persno

p_value TYPE awart

p_year.

LOOP AT i_2001 WHERE pernr = p_pernr AND

awart = p_value AND

endda+0(4) = p_year.

i_rep-awart = i_2001-awart.

i_rep-abrtg = i_2001-abrtg.

i_rep-atext = i_2001-atext.

i_rep-begda = i_2001-begda.

i_rep-endda = i_2001-endda.

APPEND i_rep.

ENDLOOP.

ENDFORM. " get_2001

PERSONAL ADMN

report zporgr0030

line-size 193

line-count 60(1)

no standard page heading

message-id zndc.

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

  • Database Tables

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

tables: pernr, " Logical PNP

t001p, " Personnel Subarea

t005t, " Country Descriptions

t500p, " Personnel Area

t501, " Employee Group

t503k, " Employee Subgroup

csks, " Cost Centers

cskt, " Cost Center Texts

t513c, " Job (Previous) Texts

t513s, " Job Titles

t517t, " Edn Est.Text

t518b, " Discipline Text

t519t, " Certificate Text

t528t, " Positions Texts

t538t, " Unit Text

pa0003. " Payroll Status

infotypes:

0000, " Actions

0001, " Organizational Assignment

0002, " Personal Data

0007, " Planned working time

0008, " Payroll Data

0022, " Education Data

0023, " Previous Employer data

0025, " Performance Appraisal Data

0041, " Date Spcifications

2001. " Absences

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

  • Declaration of Internal Tables

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

  • Internal Table for Personal Data

data: begin of pers_tab occurs 0,

pernr like pa0001-pernr, " Personal Number

ename like pa0001-ename, " Employee Name

trfgr like pa0008-trfgr, " Grade

natio like pa0002-natio, " Nationality

hdate like pa0041-dat01, " Hire Date

gbdat like pa0002-gbdat, " Birth Date

plans like pa0001-plans, " Position

werks like pa0001-werks, " Pers.Area

kostl like pa0001-kostl, " Cost Center

ctext(40), " Cost Center Text

ptext(25), " Position Text

ntext(15), " Nation Text

name1(23), " Location

end of pers_tab.

  • Internal Table for Payroll Data

data: begin of pay_tab occurs 0,

pernr like pa0008-pernr, " Personal Number

waers like pbwla-waers, " Grade

basic like pa0008-bet01, " Basic Pay

hra_allow like pa0008-bet01, " Housing Allowance

sup_allow like pa0008-bet01, " Supp. Allowance

soc_allow like pa0008-bet01, " Social Allowance

chl_allow like pa0008-bet01, " Child Allowance

fix_allow like pa0008-bet01, " Fixed Overtime

ra_allow like pa0008-bet01, " RA Allowance

per_allow like pa0008-bet01, " Perform. Allowance

pen_allow like pa0008-bet01, " Pension Allowance

oth_allow like pa0008-bet01, " Other Allowances

tot_allow like pa0008-bet01, " Total Allowances

end of pay_tab.

  • Internal Table for Educational Data

data: begin of edn_tab occurs 0,

pernr like pa0022-pernr, " Personal Number

ausbi like pa0022-ausbi, " Discipline Name

slart like pa0022-slart, " Edn Establishment

insti like pa0022-insti, " Institute

sland like pa0022-sland, " Country

slabs like pa0022-slabs, " Certificate

anzkl like pa0022-anzkl, " Duration

anzeh like pa0022-anzeh, " Unit for Duration

atext like t518b-atext, " Discipline Text

stext like t517t-stext, " Edn Est.Text

landx like t005t-landx, " Country Text

ctext like t519t-stext, " Certificate Text

etext like t538t-etext, " Unit Text

end of edn_tab.

  • Internal Table for Previous Employment Data

data: begin of pemp_tab occurs 0,

pernr like pa0023-pernr, " Personal Number

arbgb like pa0023-arbgb, " Previous Employer

begda like pa0023-begda, " Start Date

endda like pa0023-endda, " End Date

taete like pa0023-taete, " Last Position

land1 like pa0023-land1, " Country

stltx like t513s-stltx, " Position Text

landx like t005t-landx, " Country Text

end of pemp_tab.

  • Internal Table for Job History Data

data: begin of job_tab occurs 0,

pernr like pa0001-pernr, " Personal Number

begda like pa0001-begda, " Promotion Date

plans like pa0001-plans, " Position

stell like pa0001-stell, " Job Key

stltx like t513s-stltx, " Job Text

ptext like t528t-plstx, " Position Text

end of job_tab.

  • Internal Table for Performance Appraisal Data

data: begin of app_tab occurs 0,

pernr like pa0001-pernr, " Personal Number

year(4) type c, " Current Year

appr(35) type c, " C Y Appraisal

  • year1(4) type c, " Last Year

  • appr1(35) type c, " Last Year Appraisal

  • year2(4) type c,

  • appr2(35) type c,

  • year3(4) type c,

  • appr3(35) type c,

  • year4(4) type c,

  • appr4(35) type c,

end of app_tab.

  • Internal Table for Performance Appraisal Data

data: begin of app1_tab occurs 0,

year(4) type c, " Year

appr(35) type c, " Appraisal

end of app1_tab.

  • Internal Table to get the Payroll Amounts

data wage_tab like pbwla occurs 0 with header line.

  • Internal table for retreiving Employee Appraisals

data app_in_tab like hrsobid occurs 0 with header line .

data app_out_tab like hrpe_profa occurs 0 with header line .

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

  • Declaration of Variables

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

data : v_year(4) type c,

v_ayear(4) type c,

v_cyear(4) type c,

v_year1(4) type c,

v_year2(4) type c,

v_year3(4) type c,

v_year4(4) type c,

v_year5(4) type c,

v_year6(4) type c,

v_mon(2) type c,

v_date2 like sy-datum,

v_date3 like sy-datum,

v_date like sy-datum,

v_date1 like sy-datum.

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

  • Declaration of Constants

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

constants : c_x type c value 'X', " Sign

c_pernr(8) type n value '00000000', " Pernr

c_p like hrp1007-otype value 'P', " Object Type

c_01 like hrp1001-plvar value '01', " Version

c_val1(2) type c value '31', " Date Type

c_val2(2) type c value '12', " Date Type

c_val like p0041-dar01 value '01', " Date Type

c_1 like pernr-persg value '1', " Emp Group

c_type like hrp1001-otype value 'S', " Object Type

c_date1 like sy-datum value '18000101', " Date

c_date2 like sy-datum value '99991231', " Date

c_lga01 like pa0008-lga01 value '0101', " Wage Type

c_lga02 like pa0008-lga01 value '0102', " Wage Type

c_lga03 like pa0008-lga01 value '0103', " Wage Type

c_lga04 like pa0008-lga01 value '0105', " Wage Type

c_lga05 like pa0008-lga01 value '0109', " Wage Type

c_lga06 like pa0008-lga01 value '0110', " Wage Type

c_lga07 like pa0008-lga01 value '0114', " Wage Type

c_lga08 like pa0008-lga01 value '0116', " Wage Type

c_lga09 like pa0008-lga01 value '0267', " Wage Type

c_kokrs like cskt-kokrs value '1000'. " Controlling Area

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

  • Selection Screen

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

selection-screen begin of block b1 with frame title text-003.

selection-screen begin of line.

selection-screen comment 1(33) text-060.

parameters: r_all radiobutton group rb1.

selection-screen end of line.

selection-screen begin of line.

selection-screen comment 1(33) text-020.

parameters: r_per radiobutton group rb1.

selection-screen end of line.

selection-screen begin of line.

selection-screen comment 1(33) text-021.

parameters: r_pay radiobutton group rb1.

selection-screen end of line.

selection-screen begin of line.

selection-screen comment 1(33) text-022.

parameters: r_edn radiobutton group rb1.

selection-screen end of line.

selection-screen begin of line.

selection-screen comment 1(33) text-023.

parameters: r_pemp radiobutton group rb1.

selection-screen end of line.

selection-screen begin of line.

selection-screen comment 1(33) text-024.

parameters: r_job radiobutton group rb1.

selection-screen end of line.

selection-screen begin of line.

selection-screen comment 1(33) text-025.

parameters: r_app radiobutton group rb1.

selection-screen end of line.

selection-screen end of block b1.

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

  • At selection-screen

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

at selection-screen.

  • Validate the Selection Screen fields

perform validate_screen.

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

  • Start-of-Selection

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

start-of-selection.

  • Selection of Period

perform get_period.

  • Get PERNR from LDB

get pernr.

if pernr-persg eq c_1 or pernr-pernr ne c_pernr.

if r_all eq c_x.

  • Get the Personal data from PA0001,PA0002, PA0008, PA0041

perform get_pers_data.

  • Get the Payroll data from PA0008

perform get_pay_data.

  • Get the Education data from PA0022

perform get_edn_data.

  • Get the Previous Employment data from PA0023

perform get_pemp_data.

  • Get the Job History data

perform get_job_data.

  • Get the Performance Appraisal data

perform get_app_data.

elseif r_per eq c_x.

  • Get the Personal data from PA0001,PA0002, PA0008, PA0041

perform get_pers_data.

elseif r_pay eq c_x.

  • Get the Payroll data from PA0008

perform get_pay_data.

elseif r_edn eq c_x.

  • Get the Education data from PA0022

perform get_edn_data.

elseif r_pemp eq c_x.

  • Get the Previous Employment data from PA0023

perform get_pemp_data.

elseif r_job eq c_x.

  • Get the Job History data

perform get_job_data.

elseif r_app eq c_x.

  • Get the Performance Appraisal data

perform get_app_data.

endif.

endif.

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

  • Top-of-page

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

top-of-page.

  • Write the Report and Column Headings

perform top_of_page.

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

  • End-of-Page

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

end-of-page.

perform end_of_page.

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

  • End-of-Selection

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

end-of-selection.

  • Display the Output Report.

perform display_report.

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

  • Form-Routines

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

&----


*& Form validate_screen

&----


  • Validation of selection Screen fields

----


form validate_screen.

  • Validation of Personnel Number

clear pa0003.

if not pnppernr[] is initial.

select pernr

from pa0003 up to 1 rows

into pa0003-pernr

where pernr in pnppernr.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Personnel Number Entered'(001).

endif.

endif.

  • Validation of Cost Center

clear csks.

if not pnpkostl[] is initial.

select single kostl

into csks-kostl

from csks

where kostl in pnpkostl.

if sy-subrc <> 0.

message e999 with 'Invalid Cost Center'(002).

endif.

endif.

  • Validation of Personnel Area

clear t500p.

if not pnpwerks[] is initial.

select persa

from t500p up to 1 rows

into t500p-persa

where persa in pnpwerks.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Personnel Area Entered'(004).

endif.

endif.

  • Validation of Personnel Sub Area

clear t001p.

if not pnpbtrtl[] is initial.

select btrtl

from t001p up to 1 rows

into t001p-btrtl

where btrtl in pnpbtrtl.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Personnel Sub Area Entered'(005).

endif.

endif.

  • Validation of Employee Group

clear t501.

if not pnppersg[] is initial.

select persg

from t501 up to 1 rows

into t501-persg

where persg in pnppersg.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Employee Group Entered'(006).

endif.

endif.

  • Validation of Employee Sub Group

clear t503k.

if not pnppersk[] is initial.

select persk

from t503k up to 1 rows

into t503k-persk

where persk in pnppersk.

endselect.

if sy-subrc <> 0.

message e999 with 'Incorrect Employee Sub Group Entered'(007).

endif.

endif.

endform. "validate_screen

&----


*& Form get_period

&----


  • Get the Correct Period based on Selection screen selection

----


form get_period.

clear: v_year,v_mon, v_date, v_date1.

v_year = sy-datum+0(4).

v_mon = sy-datum+4(2).

if pnptimr1 = c_x. " Current Date

pnpbegda = sy-datum.

pnpendda = sy-datum.

elseif pnptimr2 = c_x. " Current Month

concatenate v_year v_mon c_val into v_date.

concatenate v_year v_mon c_val1 into v_date1.

pnpbegda = v_date.

pnpendda = v_date1.

elseif pnptimr3 = c_x. " Current Year

concatenate v_year c_val c_val into v_date.

concatenate v_year c_val2 c_val1 into v_date1.

pnpbegda = v_date.

pnpendda = v_date1.

elseif pnptimr4 = c_x. " Upto Today

pnpbegda = c_date1.

pnpendda = sy-datum.

elseif pnptimr5 = c_x. " From Today

pnpbegda = sy-datum.

pnpendda = c_date2.

else.

if ( pnpbegda is initial and pnpendda is initial ).

pnpbegda = c_date1.

pnpendda = c_date2.

elseif pnpbegda is initial and not pnpendda is initial.

pnpbegda = c_date1.

pnpendda = pnpendda.

elseif not ( pnpbegda is initial and pnpendda is initial ).

pnpbegda = pnpbegda.

pnpendda = pnpendda.

endif.

endif.

endform. "get_period

&----


*& Form get_pers_data

&----


  • Get the Personal Data from PA0001,PA0002,PA0008, PA0041

----


form get_pers_data.

  • Get data from Respective Infotypes

rp_provide_from_last p0001 space pnpbegda pnpendda.

rp_provide_from_last p0002 space pnpbegda pnpendda.

rp_provide_from_last p0008 space pnpbegda pnpendda.

rp_provide_from_last p0041 space pnpbegda pnpendda.

pers_tab-pernr = p0001-pernr.

pers_tab-ename = p0001-ename.

pers_tab-werks = p0001-werks.

pers_tab-plans = p0001-plans.

pers_tab-kostl = p0001-kostl.

pers_tab-gbdat = p0002-gbdat.

pers_tab-trfgr = p0008-trfgr.

  • Get the Engaged Date

read table p0041 with key dar01 = c_val.

if sy-subrc = 0.

pers_tab-hdate = p0041-dat01.

endif.

  • Get the Cost Center Text

clear cskt-ltext.

select single ltext into cskt-ltext from cskt

where spras = sy-langu and

kokrs = c_kokrs and

kostl = p0001-kostl.

if sy-subrc = 0.

pers_tab-ctext = cskt-ltext.

endif.

  • Get the Position Text

clear t528t-plstx.

select single plstx into t528t-plstx from t528t

where plans = p0001-plans and

otype = c_type and

sprsl = sy-langu.

if sy-subrc = 0.

pers_tab-ptext = t528t-plstx.

endif.

  • Get the Nationality

clear t005t-natio.

select single natio into t005t-natio from t005t

where spras = sy-langu and

land1 = p0002-natio.

if sy-subrc = 0.

pers_tab-ntext = t005t-natio.

endif.

  • Get the Location (Personal Area) Text

clear t500p-name1.

select single name1 into t500p-name1 from t500p

where persa = p0001-werks.

if sy-subrc = 0.

pers_tab-name1 = t500p-name1.

endif.

append pers_tab.

clear pers_tab.

sort pers_tab by pernr.

endform. "get_pers_data

&----


*& Form get_pay_data

&----


  • Get the Payroll Data from Infotype 0008

----


form get_pay_data.

  • Get the Payroll data from Respective Infotypes

rp_provide_from_last p0008 space pnpbegda pnpendda.

pay_tab-pernr = pernr-pernr.

call function 'RP_FILL_WAGE_TYPE_TABLE_EXT'

exporting

appli = 'E'

begda = p0008-begda

endda = p0008-endda

infty = '0008'

objps = ' '

tclas = 'A'

pernr = pernr-pernr

seqnr = ' '

subty = '0 '

dlspl = 'X'

msgflg = ''

nordct = ''

tables

pp0001 = p0001

pp0007 = p0007

pp0008 = p0008

ppbwla = wage_tab

  • PP0230 =

  • PP0014 =

  • PP0015 =

  • PP0052 =

  • EXCEPTIONS

  • ERROR_AT_INDIRECT_EVALUATION = 1

  • OTHERS = 2

.

if sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

endif.

loop at wage_tab.

pay_tab-waers = wage_tab-waers.

case wage_tab-lgart.

when c_lga01.

pay_tab-basic = wage_tab-betrg.

when c_lga02.

pay_tab-sup_allow = wage_tab-betrg.

when c_lga03.

pay_tab-hra_allow = wage_tab-betrg.

when c_lga04.

pay_tab-chl_allow = wage_tab-betrg.

when c_lga05.

pay_tab-soc_allow = wage_tab-betrg.

when c_lga06.

pay_tab-fix_allow = wage_tab-betrg.

when c_lga07.

pay_tab-ra_allow = wage_tab-betrg.

when c_lga08.

pay_tab-per_allow = wage_tab-betrg.

when c_lga09.

pay_tab-pen_allow = wage_tab-betrg.

when others.

pay_tab-oth_allow = pay_tab-oth_allow + wage_tab-betrg.

endcase.

pay_tab-tot_allow = pay_tab-basic + pay_tab-sup_allow +

pay_tab-hra_allow + pay_tab-chl_allow +

pay_tab-soc_allow + pay_tab-fix_allow +

pay_tab-ra_allow + pay_tab-per_allow +

pay_tab-oth_allow - pay_tab-pen_allow.

endloop.

append pay_tab.

clear pay_tab.

endform. "get_pay_data

&----


*& Form get_edn_data

&----


  • Get the Education Data from Infotype 0022

----


form get_edn_data.

  • Get the Education data from Respective Infotypes

loop at p0022 where pernr = pernr-pernr.

edn_tab-pernr = pernr-pernr.

edn_tab-ausbi = p0022-ausbi.

edn_tab-slart = p0022-slart.

edn_tab-insti = p0022-insti.

edn_tab-sland = p0022-sland.

edn_tab-slabs = p0022-slabs.

edn_tab-anzkl = p0022-anzkl.

edn_tab-anzeh = p0022-anzeh.

  • Get the Discipline Text

clear t518b-atext.

select single atext into t518b-atext from t518b

where langu = sy-langu and

ausbi = p0022-ausbi.

if sy-subrc = 0.

edn_tab-atext = t518b-atext.

endif.

  • Get the Edn Establishment Text

clear t517t-stext.

select single stext into t517t-stext from t517t

where slart = p0022-slart and

sprsl = sy-langu.

if sy-subrc = 0.

edn_tab-stext = t517t-stext.

endif.

  • Get the Certificate Text

clear t519t-stext.

select single stext into t519t-stext from t519t

where slabs = p0022-slabs and

sprsl = sy-langu.

if sy-subrc = 0.

edn_tab-ctext = t519t-stext.

endif.

  • Get the Unit Text

clear t538t-etext.

select single etext into t538t-etext from t538t

where zeinh = p0022-anzeh and

sprsl = sy-langu.

if sy-subrc = 0.

edn_tab-etext = t538t-etext.

endif.

  • Get the Country Description

clear t005t-landx.

select single landx into t005t-landx from t005t

where spras = sy-langu and

land1 = p0022-sland.

if sy-subrc = 0.

edn_tab-landx = t005t-landx.

endif.

append edn_tab.

clear edn_tab.

endloop.

endform. "edn_data

&----


*& Form get_pemp_data

&----


  • Get the Previous Employment Data from Infotype 0023

----


form get_pemp_data.

  • Get the Previous Employment data from Respective Infotypes

loop at p0023 where pernr = pernr-pernr.

pemp_tab-pernr = pernr-pernr.

pemp_tab-arbgb = p0023-arbgb.

pemp_tab-begda = p0023-begda.

pemp_tab-endda = p0023-endda.

pemp_tab-taete = p0023-taete.

pemp_tab-land1 = p0023-land1.

  • Get the Last Job Text

clear t513c-ltext.

select single ltext into t513c-ltext from t513c

where taete = pemp_tab-taete and

spras = sy-langu.

if sy-subrc = 0.

pemp_tab-stltx = t513c-ltext.

endif.

  • Get the Country Description

clear t005t-landx.

select single landx into t005t-landx from t005t

where spras = sy-langu and

land1 = pemp_tab-land1.

if sy-subrc = 0.

pemp_tab-landx = t005t-landx.

endif.

append pemp_tab.

clear pemp_tab.

endloop.

sort pemp_tab by pernr.

endform. "pemp_data

&----


*& Form get_job_data

&----


  • Get the Job History Data from Infotype

----


form get_job_data.

  • Get the Job History data from Respective Infotypes

loop at p0001 where pernr = pernr-pernr.

job_tab-pernr = pernr-pernr.

job_tab-begda = p0001-begda.

job_tab-plans = p0001-plans.

job_tab-stell = p0001-stell.

  • Get the Last Job Text

clear t513s-stltx.

select single stltx into t513s-stltx from t513s

where stell = job_tab-stell and

sprsl = sy-langu.

if sy-subrc = 0.

job_tab-stltx = t513s-stltx.

endif.

  • Get the Position Text

clear t528t-plstx.

select single plstx into t528t-plstx from t528t

where plans = job_tab-plans and

otype = c_type and

sprsl = sy-langu.

if sy-subrc = 0.

job_tab-ptext = t528t-plstx.

endif.

append job_tab.

clear job_tab.

endloop.

sort job_tab by pernr.

endform. "get_job_data

&----


*& Form get_app_data

&----


  • Get the Performance Appraisal Data from Infotype

----


form get_app_data.

clear: v_cyear, v_year1, v_year2, v_year3, v_year4,

v_year5, v_year6, v_ayear, v_date2, v_date3.

v_cyear = sy-datum+0(4) - 1.

v_year1 = v_cyear - 1.

v_year2 = v_cyear - 2.

v_year3 = v_cyear - 3.

v_year4 = v_cyear - 4.

v_year5 = v_cyear - 5.

v_year6 = v_cyear - 6.

concatenate v_cyear c_date2+4(4) into v_date2.

concatenate v_year6 c_date1+4(4) into v_date3.

clear: app_in_tab, app_out_tab.

refresh: app_in_tab, app_out_tab.

app_in_tab-plvar = c_01.

app_in_tab-otype = c_p.

app_in_tab-sobid = pernr-pernr.

append app_in_tab.

  • Get Appraisals data from Respective Infotypes

call function 'RHPA_APPRAISEES_APP_READ'

exporting

begda = v_date3

endda = v_date2

  • WITH_STEXT = 'X'

  • WITH_ADD_INFO = 'X'

tables

appraisees = app_in_tab

appraisals = app_out_tab

exceptions

no_authority = 1

undefined = 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.

sort app_out_tab by sobid vbegd vendd appraisal_adate descending .

delete adjacent duplicates from app_out_tab

comparing sobid vbegd vendd.

loop at app_out_tab where appraisal_histo = 'X' .

condense app_out_tab-appraisal_result.

app1_tab-year = app_out_tab-vendd+0(4).

app1_tab-appr = app_out_tab-appraisal_result_text.

append app1_tab.

clear app1_tab.

endloop.

sort app1_tab by year descending.

loop at app1_tab.

app_tab-pernr = pernr-pernr.

move-corresponding app1_tab to app_tab.

append app_tab.

clear: app1_tab, app_tab.

endloop.

refresh app1_tab.

sort app_tab by pernr.

delete app_tab where year = ' ' and appr = ' ' .

endform. "get_app_data

&----


*& Form top_of_page

&----


  • Write the Report and Column Headings

----


form top_of_page.

skip.

format color col_heading on.

if r_all eq c_x.

write: /1(193) 'NATIONAL DRILLING COMPANY'(009) centered,

/1(193) 'Employee Details Report'(066) centered.

elseif r_per eq c_x.

write: /1(193) 'NATIONAL DRILLING COMPANY'(009) centered,

/1(193) 'Employee Details - Personal Data'(010)

centered.

elseif r_pay eq c_x.

write: /1(172) 'NATIONAL DRILLING COMPANY'(009) centered,

/1(172) 'Employee Details - Payroll Data'(027)

centered.

elseif r_edn eq c_x.

write: /1(172) 'NATIONAL DRILLING COMPANY'(009) centered,

/1(172) 'Employee Details - Education Data'(028)

centered.

elseif r_pemp eq c_x.

write: /1(97) 'NATIONAL DRILLING COMPANY'(009) centered,

/1(97) 'Employee Details - Previous Employment Data'(029)

centered.

elseif r_job eq c_x.

write: /1(75) 'NATIONAL DRILLING COMPANY'(009) centered,

/1(75) 'Employee Details - Job History Data'(030)

centered.

elseif r_app eq c_x.

write: /1(192) 'NATIONAL DRILLING COMPANY'(009) centered,

/1(192) 'Employee Details - Performance Appraisal Data'(031)

centered.

endif.

format color off.

if pnptimr1 = c_x. " Current Date

write: /2 'Period From :'(008), sy-datum,

'To:'(019), sy-datum.

elseif pnptimr2 = c_x. " Current Month

write: /2 'Period From :'(008), v_date, 'To:'(019), v_date1.

elseif pnptimr3 = c_x. " Current Year

write: /2 'Period From :'(008), v_date, 'To:'(019), v_date1.

elseif pnptimr4 = c_x. " Upto Today

write: /2 'Period From :'(008), c_date1, 'To:'(019), sy-datum.

elseif pnptimr5 = c_x. " From Today

write: /2 'Period From :'(008), sy-datum, 'To:'(019), c_date2.

else.

if ( pnpbegda is initial and pnpendda is initial ).

write: /2 'Period From :'(008), c_date1, 'To:'(019), c_date2.

elseif pnpbegda is initial and not pnpendda is initial.

write: /2 'Period From :'(008), c_date1, 'To:'(019), pnpendda.

elseif not ( pnpbegda is initial and pnpendda is initial ).

write: /2 'Period From :'(008), pnpbegda,

'To:'(019), pnpendda.

endif.

endif.

if not ( r_pemp eq c_x or r_job eq c_x ).

write: 140 'Report Run Date:'(073), sy-datum.

if not pnpkostl[] is initial.

if pnpkostl-high is initial.

write: /2 'Cost Center :'(074), pnpkostl-low,

125 'Time :'(075), sy-uzeit.

else.

write: /2 'Cost Center From:'(076), pnpkostl-low+7(3),

'To:'(019), pnpkostl-high,

140 'Time :'(075), sy-uzeit.

endif.

else.

write: /140 'Time :'(075), sy-uzeit.

endif.

if not pnppernr[] is initial.

if pnppernr-high is initial.

write: /2 'Personal Number :'(077), pnppernr-low,

140 'User :'(078), sy-uname.

else.

write: /2 'Personal No.From:'(079), pnppernr-low,

'To:'(019), pnppernr-high,

140 'User :'(078), sy-uname.

endif.

else.

write: /140 'User :'(078), sy-uname.

endif.

write: /140 'Page No :'(080), sy-pagno.

else.

write: 48 'Report Run Date:'(073), sy-datum.

if not pnpkostl[] is initial.

if pnpkostl-high is initial.

write: /2 'Cost Center :'(074), pnpkostl-low,

48 'Time :'(075), sy-uzeit.

else.

write: /2 'Cost Center From:'(076), pnpkostl-low+7(3),

'To:'(019), pnpkostl-high,

48 'Time :'(075), sy-uzeit.

endif.

else.

write: /48 'Time :'(075), sy-uzeit.

endif.

if not pnppernr[] is initial.

if pnppernr-high is initial.

write: /2 'Personal Number :'(077), pnppernr-low,

48 'User :'(078), sy-uname.

else.

write: /2 'Personal No.From:'(079), pnppernr-low,

'To:'(019), pnppernr-high,

48 'User :'(078), sy-uname.

endif.

else.

write: /48 'User :'(078), sy-uname.

endif.

write: /48 'Page No :'(080), sy-pagno.

endif.

skip.

if r_per eq c_x.

write /1(193) sy-uline.

format color col_heading on.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(40) 'Name'(012) centered,

53 sy-vline, 54(8) 'Grade'(013) centered,

62 sy-vline, 63(15) 'Nationality'(017) centered,

78 sy-vline, 79(10) 'Eng.Date'(014) centered,

89 sy-vline, 90(10) 'Birth Date'(016) centered,

100 sy-vline,101(25) 'Location'(026) centered,

126 sy-vline,127(25) 'Position'(015) centered,

152 sy-vline,153(40) 'Division'(018) centered,

193 sy-vline.

format color off.

write /1(193) sy-uline.

elseif r_pay eq c_x.

write /1(188) sy-uline.

format color col_heading on.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(15) 'Basic'(033) centered,

28 sy-vline, 29(15) 'Housing Allow.'(034) centered,

44 sy-vline, 45(15) 'Sup.Allow.'(035) centered,

60 sy-vline, 61(15) 'Social Allow.'(036) centered,

76 sy-vline, 77(15) 'Child Allow.'(037) centered,

92 sy-vline, 93(15) 'Fixed Overtime'(038) centered,

108 sy-vline,109(15) 'R.A.Allow.'(041) centered,

124 sy-vline,125(15) 'Perform.Allow.'(039) centered,

140 sy-vline,141(15) 'Pension.Allow.'(059) centered,

156 sy-vline,157(15) 'Others'(040) centered,

172 sy-vline,173(15) 'Total'(042) centered,

188 sy-vline.

format color off.

write /1(188) sy-uline.

elseif r_edn eq c_x.

write /1(172) sy-uline.

format color col_heading on.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(25) 'Discipline'(043) centered,

38 sy-vline, 39(20) 'Edu.Establishment'(044) centered,

59 sy-vline, 60(45) 'Institute'(045) centered,

105 sy-vline,106(15) 'Country'(046) centered,

121 sy-vline,122(30) 'Certificate'(047) centered,

152 sy-vline,153(19) 'Duration of Course'(048) centered,

172 sy-vline.

format color off.

write /1(172) sy-uline.

elseif r_pemp eq c_x.

write /1(97) sy-uline.

format color col_heading on.

write:/1 sy-vline, 12 sy-vline,

33 sy-vline, 34(21) 'Employment Period'(055) centered,

55 sy-vline, 81 sy-vline,

97 sy-vline.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(20) 'Employer'(049) centered,

33 sy-vline, 34(10) 'From'(050) centered,

44 sy-vline, 45(10) 'To'(051) centered,

55 sy-vline, 56(25) 'Last Position'(052) centered,

81 sy-vline, 82(15) 'Country'(053) centered,

97 sy-vline.

format color off.

write /1(97) sy-uline.

elseif r_job eq c_x.

write /1(75) sy-uline.

format color col_heading on.

write:/1 sy-vline,

12 sy-vline,13(10) 'Date of'(054) centered,

23 sy-vline,49 sy-vline,

75 sy-vline.

write:/1 sy-vline,2(10) 'Employee #'(011),

12 sy-vline,13(10) 'Upgrading/'(058) centered,

23 sy-vline,24(25) 'Position'(015) centered,

49 sy-vline,50(25) 'Job'(056) centered,

75 sy-vline.

write:/1 sy-vline, 12 sy-vline,

13(10) 'Promotion'(057) centered,

23 sy-vline, 49 sy-vline,

75 sy-vline.

format color off.

write /1(75) sy-uline.

elseif r_app eq c_x.

format color col_heading on.

write: /1 sy-vline,2(56) sy-uline, 58 sy-vline,

/1 sy-vline, 2(56) text-025 centered color 3, 58 sy-vline.

write /1(58) sy-uline.

format color col_heading on.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(4) 'Year'(067),

17 sy-vline, 18(40) 'Appraisal Text'(068) centered,

58 sy-vline.

format color off.

write /1(58) sy-uline.

endif.

endform. "top_of_page

&----


*& Form end_of_page

&----


  • Write the Page footers

----


form end_of_page.

if r_per eq c_x.

write : /(193) sy-uline.

elseif r_pay eq c_x.

write : /(188) sy-uline.

elseif r_edn eq c_x.

write : /(172) sy-uline.

elseif r_pemp eq c_x.

write /1(97) sy-uline.

elseif r_job eq c_x.

write /1(75) sy-uline.

elseif r_app eq c_x.

write /1(217) sy-uline.

endif.

endform. "end_of_page

&----


*& Form Display_report

&----


  • Write the Report Output

----


form display_report.

if r_all eq c_x.

if pers_tab[] is initial.

message i999 with

'No Personal Data found'(061).

else.

write: /1 sy-vline,2(51) sy-uline, 53 sy-vline,

/1 sy-vline, 2(50) text-020 centered color 3, 53 sy-vline.

write /1(193) sy-uline.

format color col_heading on.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(40) 'Name'(012) centered,

53 sy-vline, 54(8) 'Grade'(013) centered,

62 sy-vline, 63(15) 'Nationality'(017) centered,

78 sy-vline, 79(10) 'Eng.Date'(014) centered,

89 sy-vline, 90(10) 'Birth Date'(016) centered,

100 sy-vline,101(25) 'Location'(026) centered,

126 sy-vline,127(25) 'Position'(015) centered,

152 sy-vline,153(40) 'Division'(018) centered,

193 sy-vline.

format color off.

write /1(193) sy-uline.

sort pers_tab by pernr.

loop at pers_tab.

format color col_normal.

write:/1 sy-vline, 2(10) pers_tab-pernr,

12 sy-vline, 13(40) pers_tab-ename,

53 sy-vline, 56(6) pers_tab-trfgr,

62 sy-vline, 63(15) pers_tab-ntext,

78 sy-vline, 79(10) pers_tab-hdate,

89 sy-vline, 90(10) pers_tab-gbdat,

100 sy-vline,101(25) pers_tab-name1,

126 sy-vline,127(25) pers_tab-ptext,

152 sy-vline,153(40) pers_tab-ctext,

193 sy-vline.

endloop.

write /1(193) sy-uline.

endif.

skip 3.

if pay_tab[] is initial.

message i999 with

'No Standard Pay Data found'(062).

else.

write: /1 sy-vline,2(42) sy-uline, 44 sy-vline,

/1 sy-vline, 2(42) text-021 centered color 3, 44 sy-vline.

format color col_heading on.

write /1(188) sy-uline.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(15) 'Basic'(033) centered,

28 sy-vline, 29(15) 'Housing Allow.'(034) centered,

44 sy-vline, 45(15) 'Sup.Allow.'(035) centered,

60 sy-vline, 61(15) 'Social Allow.'(036) centered,

76 sy-vline, 77(15) 'Child Allow.'(037) centered,

92 sy-vline, 93(15) 'Fixed Overtime'(038) centered,

108 sy-vline,109(15) 'R.A.Allow.'(041) centered,

124 sy-vline,125(15) 'Perform.Allow.'(039) centered,

140 sy-vline,141(15) 'Pension.Allow.'(059) centered,

156 sy-vline,157(15) 'Others'(040) centered,

172 sy-vline,173(15) 'Total'(042) centered,

188 sy-vline.

format color off.

write /1(188) sy-uline.

sort pay_tab by pernr.

loop at pay_tab.

format color col_normal.

write:/1 sy-vline, 2(10) pay_tab-pernr,

12 sy-vline,

13(15) pay_tab-basic currency pay_tab-waers no-zero,

28 sy-vline,

29(15) pay_tab-hra_allow currency pay_tab-waers no-zero,

44 sy-vline,

45(15) pay_tab-sup_allow currency pay_tab-waers no-zero,

60 sy-vline,

61(15) pay_tab-soc_allow currency pay_tab-waers no-zero,

76 sy-vline,

77(15) pay_tab-chl_allow currency pay_tab-waers no-zero,

92 sy-vline,

93(15) pay_tab-fix_allow currency pay_tab-waers no-zero,

108 sy-vline,

109(15) pay_tab-ra_allow currency pay_tab-waers no-zero,

124 sy-vline,

125(15) pay_tab-per_allow currency pay_tab-waers no-zero,

140 sy-vline.

pay_tab-pen_allow = pay_tab-pen_allow * -1.

write: 141(15) pay_tab-pen_allow currency pay_tab-waers no-zero,

156 sy-vline,

157(15) pay_tab-oth_allow currency pay_tab-waers no-zero,

172 sy-vline,

173(15) pay_tab-tot_allow currency pay_tab-waers no-zero,

188 sy-vline.

endloop.

write /1(188) sy-uline.

endif.

skip 3.

if edn_tab[] is initial.

message i999 with

'No Educational Data found'(063).

else.

write: /1 sy-vline,2(36) sy-uline, 38 sy-vline,

/1 sy-vline, 2(36) text-022 centered color 3, 38 sy-vline.

format color col_heading on.

write /1(172) sy-uline.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(25) 'Discipline'(043) centered,

38 sy-vline, 39(20) 'Edu.Establishment'(044) centered,

59 sy-vline, 60(45) 'Institute'(045) centered,

105 sy-vline,106(15) 'Country'(046) centered,

121 sy-vline,122(30) 'Certificate'(047) centered,

152 sy-vline,153(19) 'Duration of Course'(048) centered,

172 sy-vline.

format color off.

write /1(172) sy-uline.

sort edn_tab by pernr.

loop at edn_tab.

format color col_normal.

write:/1 sy-vline, 2(10) edn_tab-pernr,

12 sy-vline, 13(25) edn_tab-atext,

38 sy-vline, 39(20) edn_tab-stext,

59 sy-vline, 60(45) edn_tab-insti,

105 sy-vline,106(15) edn_tab-landx,

121 sy-vline,122(30) edn_tab-ctext,

152 sy-vline,153(4) edn_tab-anzkl,

157(10) edn_tab-etext,

172 sy-vline.

endloop.

write /1(172) sy-uline.

endif.

skip 3.

if pemp_tab[] is initial.

message i999 with

'No Previous Employment Data found'(064).

else.

write: /1 sy-vline,2(53) sy-uline, 55 sy-vline,

/1 sy-vline, 2(53) text-023 centered color 3, 55 sy-vline.

write /1(97) sy-uline.

format color col_heading on.

write:/1 sy-vline, 12 sy-vline,

33 sy-vline, 34(21) 'Employment Period'(055) centered,

55 sy-vline, 81 sy-vline,

97 sy-vline.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(20) 'Employer'(049) centered,

33 sy-vline, 34(10) 'From'(050) centered,

44 sy-vline, 45(10) 'To'(051) centered,

55 sy-vline, 56(25) 'Last Position'(052) centered,

81 sy-vline, 82(15) 'Country'(053) centered,

97 sy-vline.

format color off.

write /1(97) sy-uline.

sort pemp_tab by pernr.

loop at pemp_tab.

format color col_normal.

write:/1 sy-vline, 2(10) pemp_tab-pernr,

12 sy-vline, 13(20) pemp_tab-arbgb,

33 sy-vline, 34(10) pemp_tab-begda,

44 sy-vline, 45(10) pemp_tab-endda,

55 sy-vline, 56(25) pemp_tab-stltx,

81 sy-vline, 82(15) pemp_tab-landx,

97 sy-vline.

endloop.

write /1(97) sy-uline.

endif.

skip 2.

new-page.

if job_tab[] is initial.

message i999 with

'No Job History Data found'(065).

else.

write: /1 sy-vline,2(47) sy-uline, 49 sy-vline,

/1 sy-vline, 2(47) text-024 centered color 3, 49 sy-vline.

format color col_heading on.

write /1(75) sy-uline.

write:/1 sy-vline,

12 sy-vline,13(10) 'Date of'(054) centered,

23 sy-vline,49 sy-vline,

75 sy-vline.

write:/1 sy-vline,2(10) 'Employee #'(011),

12 sy-vline,13(10) 'Upgrading/'(058) centered,

23 sy-vline,24(25) 'Position'(015) centered,

49 sy-vline,50(25) 'Job'(056) centered,

75 sy-vline.

write:/1 sy-vline, 12 sy-vline,

13(10) 'Promotion'(057) centered,

23 sy-vline, 49 sy-vline,

75 sy-vline.

format color off.

write /1(75) sy-uline.

sort job_tab by pernr.

loop at job_tab.

format color col_normal.

at new pernr.

write:/1 sy-vline, 2(10) job_tab-pernr.

endat.

write: 1 sy-vline, 12 sy-vline,

13(10) job_tab-begda,

23 sy-vline,24(25) job_tab-ptext,

49 sy-vline,50(25) job_tab-stltx,

75 sy-vline.

new-line.

endloop.

write /1(75) sy-uline.

endif.

skip 3.

if app_tab[] is initial.

message i999 with

'No Performance Appraisal Data found'(072).

else.

write: /1 sy-vline,2(56) sy-uline, 58 sy-vline,

/1 sy-vline, 2(56) text-025 centered color 3, 58 sy-vline.

write /1(58) sy-uline.

format color col_heading on.

write:/1 sy-vline, 2(10) 'Employee #'(011),

12 sy-vline, 13(4) 'Year'(067),

17 sy-vline, 18(40) 'Appraisal Text'(068) centered,

58 sy-vline.

format color off.

write /1(58) sy-uline.

sort app_tab by pernr.

loop at app_tab.

format color col_normal.

write:/1 sy-vline, 2(10) app_tab-pernr,

12 sy-vline, 13(4) app_tab-year,

17 sy-vline, 18(40) app_tab-appr,

58 sy-vline.

endloop.

write /1(58) sy-uline.

endif.

skip 2.

elseif r_per eq c_x.

if pers_tab[] is initial.

message i999 with

'No Data found for the entered Selection'(032).

else.

sort pers_tab by pernr.

loop at pers_tab.

format color col_normal.

write:/1 sy-vline, 2(10) pers_tab-pernr,

12 sy-vline, 13(40) pers_tab-ename,

53 sy-vline, 56(6) pers_tab-trfgr,

62 sy-vline, 63(15) pers_tab-ntext,

78 sy-vline, 79(10) pers_tab-hdate,

89 sy-vline, 90(10) pers_tab-gbdat,

100 sy-vline,101(25) pers_tab-name1,

126 sy-vline,127(25) pers_tab-ptext,

152 sy-vline,153(40) pers_tab-ctext,

193 sy-vline.

endloop.

write /1(193) sy-uline.

endif.

elseif r_pay eq c_x.

if pay_tab[] is initial.

message i999 with

'No Data found for the entered Selection'(032).

else.

sort pay_tab by pernr.

loop at pay_tab.

format color col_normal.

write:/1 sy-vline, 2(10) pay_tab-pernr,

12 sy-vline,

13(15) pay_tab-basic currency pay_tab-waers no-zero,

28 sy-vline,

29(15) pay_tab-hra_allow currency pay_tab-waers no-zero,

44 sy-vline,

45(15) pay_tab-sup_allow currency pay_tab-waers no-zero,

60 sy-vline,

61(15) pay_tab-soc_allow currency pay_tab-waers no-zero,

76 sy-vline,

77(15) pay_tab-chl_allow currency pay_tab-waers no-zero,

92 sy-vline,

93(15) pay_tab-fix_allow currency pay_tab-waers no-zero,

108 sy-vline,

109(15) pay_tab-ra_allow currency pay_tab-waers no-zero,

124 sy-vline,

125(15) pay_tab-per_allow currency pay_tab-waers no-zero,

140 sy-vline.

pay_tab-pen_allow = pay_tab-pen_allow * -1.

write: 141(15) pay_tab-pen_allow currency pay_tab-waers no-zero,

156 sy-vline,

157(15) pay_tab-oth_allow currency pay_tab-waers no-zero,

172 sy-vline,

173(15) pay_tab-tot_allow currency pay_tab-waers no-zero,

188 sy-vline.

endloop.

write /1(188) sy-uline.

endif.

elseif r_edn eq c_x.

if edn_tab[] is initial.

message i999 with

'No Data found for the entered Selection'(032).

else.

sort edn_tab by pernr.

loop at edn_tab.

format color col_normal.

write:/1 sy-vline, 2(10) edn_tab-pernr,

12 sy-vline, 13(25) edn_tab-atext,

38 sy-vline, 39(20) edn_tab-stext,

59 sy-vline, 60(45) edn_tab-insti,

105 sy-vline,106(15) edn_tab-landx,

121 sy-vline,122(30) edn_tab-ctext,

152 sy-vline,153(4) edn_tab-anzkl,

157(10) edn_tab-etext,

172 sy-vline.

endloop.

write /1(172) sy-uline.

endif.

elseif r_pemp eq c_x.

if pemp_tab[] is initial.

message i999 with

'No Data found for the entered Selection'(032).

else.

sort pemp_tab by pernr.

loop at pemp_tab.

format color col_normal.

write:/1 sy-vline, 2(10) pemp_tab-pernr,

12 sy-vline, 13(20) pemp_tab-arbgb,

33 sy-vline, 34(10) pemp_tab-begda,

44 sy-vline, 45(10) pemp_tab-endda,

55 sy-vline, 56(25) pemp_tab-stltx,

81 sy-vline, 82(15) pemp_tab-landx,

97 sy-vline.

endloop.

write /1(97) sy-uline.

endif.

elseif r_job eq c_x.

if job_tab[] is initial.

message i999 with

'No Data found for the entered Selection'(032).

else.

sort job_tab by pernr.

loop at job_tab.

format color col_normal.

at new pernr.

write:/1 sy-vline, 2(10) job_tab-pernr.

endat.

write: 1 sy-vline, 12 sy-vline,

13(10) job_tab-begda,

23 sy-vline,24(25) job_tab-ptext,

49 sy-vline,50(25) job_tab-stltx,

75 sy-vline.

new-line.

endloop.

write /1(75) sy-uline.

endif.

elseif r_app eq c_x.

if app_tab[] is initial.

message i999 with

'No Data found for the entered Selection'(032).

else.

sort app_tab by pernr.

loop at app_tab.

format color col_normal.

write:/1 sy-vline, 2(10) app_tab-pernr,

12 sy-vline, 13(4) app_tab-year,

17 sy-vline, 18(40) app_tab-appr,

58 sy-vline.

endloop.

write /1(58) sy-uline.

endif.

endif.

endform. " Display_report

<b>Reward points for useful answers without fail</b>Regards

Anji

Read only

Former Member
0 Likes
1,086

Hi,

Please check this link for HR sample programs.

http://www.sapdevelopment.co.uk/hr/hrhome.htm

Regards,

Ferry Lianto

Read only

amit_khare
Active Contributor
0 Likes
1,085

Pick the programs in SE38 with name RP*

Regards,

Amit

Reward all helpful replies.