ABAP--HR的工资计算样例代码

原创 2007年09月21日 10:21:00

report zporgr0030 line-size 193 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) ' COMPANY'(009) centered,
    /1(193) 'Employee Details Report'(066) centered.

  elseif r_per eq c_x.
    write: /1(193) ' COMPANY'(009) centered,
    /1(193) 'Employee Details - Personal Data'(010)
    centered.
  elseif r_pay eq c_x.
    write: /1(172) 'COMPANY'(009) centered,
    /1(172) 'Employee Details - Payroll Data'(027)
    centered.
  elseif r_edn eq c_x.
    write: /1(172) 'COMPANY'(009) centered,
    /1(172) 'Employee Details - Education Data'(028)
    centered.
  elseif r_pemp eq c_x.
    write: /1(97) 'ABC'(009) centered,
    /1(97) 'Employee Details - Previous Employment Data'(029)
    centered.
  elseif r_job eq c_x.
    write: /1(75) 'ABC'(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 

*DATA: myseqnr LIKE hrpy_rgdir-seqnr.
*DATA : mypy TYPE payin_result.
*DATA : myrt LIKE TABLE OF pc207 WITH HEADER LINE.
*
*SELECT SINGLE seqnr FROM hrpy_rgdir
*INTO myseqnr
*WHERE pernr = mypernr
*AND fpper = '200409'
*AND srtza = 'A'.
*
*IF sy-subrc = 0.
*
*CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
*EXPORTING
*clusterid = 'IN'
*employeenumber = mypernr
*sequencenumber = myseqnr
*CHANGING
*payroll_result = mypy
*EXCEPTIONS
*illegal_isocode_or_clusterid = 1
*error_generating_import = 2
*import_mismatch_error = 3
*subpool_dir_full = 4
*no_read_authority = 5
*no_record_found = 6
*versions_do_not_match = 7
*error_reading_archive = 8
*error_reading_relid = 9
*OTHERS = 10.
*
*myrt[] = mypy-inter-rt.
*
*READ TABLE myrt WITH KEY lgart = '1899'.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

ABAP--HR的工资计算样例代码

 ABAP--HR的工资计算样例代码 2007-12-14 17:06 77人阅读 评论(0) 收藏 举报 dateradiobuttonvalidationperform...

ABAP--HR的工资计算样例代码

*********************************************************************** * Database Tables ********...

ABAP--一个读取EXCEL单元格的内容超过256个字符的代码样例

我们在sap上限初期经常会将EXCEL数据倒入到SAP,sap也为此封装了许多的函数,但是这些函数都有单元文本长度限制。具体介绍如下: 1、 'TEXT_CONVERT_XLS_TO_SAP'单...

oracle hr样例数据库经典查询语句

1.查询工资大于12000的员工姓名和工资 Select initcap(concat(last_name,first_name)) "姓名",salary from employees whe...

SAP HR Schema 详解(三)工资核算基础

1 工资项(wage type)的分类 1.1  主要工资项 Primary wage tapes 主要工资项也称为对话工资项由用户前台手工输入,或通过系统设定的时间来产生。通过复制系统标准的技术...

SAP HR获取工资结果

SAP HR 获取工资核算结果的例子程序 EXAMPLE_PNP_GET_PAYROLL。很实用,稍微加工下就可以打印工资单 标准程序源代码摘抄如下: *****************...

HR 开发技术(abap 转载)

HR学习资料   1.    纲要... 1 2.    具体内容... 2 2.1.     在VB和Notes中调用BAPI2 2.1.1.      BAPI2 2.2.  ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ABAP--HR的工资计算样例代码
举报原因:
原因补充:

(最多只允许输入30个字)