Read last period of infotype without logical database
Hi,
I'm looking for a FM that retrieves last period of one infotype without using logical database pnp, so rp-provide-from-last isn't a solution
Now, I'm using a home made solucion:
First I use HR_READ_INFOTYPE function to read all periods of infotype, then I sort the table by endda (descending) and get first register of table.
But I really prefer using a SAP function module.
Thanks in advance
Hi,
You can use the same FM "HR_READ_INFOTYPE" & pass begda = sy-datum and endda = '12/31/9999'.
You will get only one record i.e. latest one.
Hope this helps.
Thanks,
Sarika.
Similar Messages
-
HR - Programming without Logical database
Hi All
I have some doubts, I am mainly using Logical database while creting Reports in HR, if I want to use HR function modules and BAPI do they use logical database,
question is when we have to do HR programming with Logical database and when without Logical database.
cheers
AJHi Srinivas
If I am doing some Enhancement on ESS/ MSS , using Webdypros, I cant define Logical database anywhere, so I have to use Function modules or BAPIs ........???
But usually in Reporting you can define the Logical database in the Program attributes.........so I think Logical database can only be used when it can be defined in the program attributes........if you have any other scenarios........please let me know
regards
AJ -
Is it possible to assign custom infotype to Logical database ?
Hi All ,
Is it possible to assgin a custom infotype to the logical database ?
I mean if we use GET PERNR in the pgm it has to bring the data for this custom infotype also .... is it possible ? If yes, Please explain me clearly ....
Thanks & Regards,
Anil Kumar.Thanks for u r response.
U mean If we mention that infotype in INFOTYPES stmt and use GET PERNR that particular structure will have the data right ? and the rp-provide stmt also wroks for it.
am i correct ...... ?
Thanks & Regards,
Anil Kumar.
<b>Points are Awarded.</b> -
To make selection period mandatory in Logical Database Report
Hi All,
My report is using customized HR Report Category with selection period as Key Date.
My requirement is to make Key Date as mandatory field and with default value as sydatum.
Pls help .
Regards,
NibhaHello,
Although the selection screen will appear from the logical database you define, you can add your validation check at the event 'At selection-screen' to check if particular field is initial or not and give proper error message.
Other way would be at the initialisation event use the following :
loop at screen.
if screen-name = 'P_NAME'.
screen-input = '1'.
endif.
modify screen.
endloop.
Also at initialisation
s_date = sy-datum.
Regards,
Mansi. -
Not getting fields in logical database of infotypes
Hi All,
I have created Infotype(9xxx) through PM01, and also maintained the screen for this with 6 feilds..
BEGDA, ENDDA, SUBTY, OBJPS, Zxxx1, Zxxx2
every thing is going fine but when im creating logical database for that infotype,
im getting only 3 feilds there
PERNR
Zxxx1
Zxxx2
I need to take all the fields there.. please suggest how to do this?
Regards
Neha GuptaSolved on own.
-
How to link Infotype Table Data to Logical Database
We have historical data in one of our system brought by using diret insert queries on Infotype tables. Now, we are facing a problem that this data is not visible from PA20/PA30. Also, while using Logical Database in programs, we are not able to extract data from Infotypes using GET events.
Does anybody have any idea/solution to this kind of problem?What made you to take decision to make direct table updates? I am not sure if this was the correct way. Anyway, whether all the module pool programs are in place foe these custom infotypes. You dont have to do anything else to have logical database program to fetch data for custom infotypes. Check if eveything in PM01 is configured correctly.
-
Reading previous period value is logic
Hi,
There's a need to read previous period value is logic for some processing, can you please help me out how this can be achieved. I have a selection for time in the package called %TIME_DIM% and I am running for the current period. I have tried following options
First
*WHEN XYZ
*IS "ABC"
*REC = (FACTOR=GET(TIME=PRIOR), SOMEDIM=VALUE)
*ENDWHEN
When above code executed with current period (no record exists for current period) nothing is read.
Second
*XDIMMEBERSET TIME = PRIOR, %TIME_DIM%
*WHEN XYZ
*IS "ABC"
*REC = (FACTOR=GET(TIME=PRIOR), SOMEDIM=VALUE)
*ENDWHEN
In the above case no record is selected and surprisingly the select statement fired (got it form the log) is for the last time period maintained in the system - 1. So if I have time dimension members till 2020.DEC this picks up 2020.NOV. I didn't understand why?
Would appreciate help on this.
ThanksAnand,
It is not very clear what you are trying to achieve here.
Perhaps you already have this, but below some explanation about special time selections that you can use in SQL logic.
The time shift instructions
To simplify the calculation of leads and lags in financial reporting applications, the following new instructions have been implemented for SQL-based logics:
PRIOR
NEXT
BASE
FIRST
The instructions PRIOR and NEXT support an optional numeric parameter. This parameter represents the number of time periods by which the current period must be shifted. If omitted, the functions will assume a time shift of 1 period (forward or backwards). Negative values are accepted (A negative value for a NEXT function corresponds to a positive value for a PRIOR function and vice-versa).
Examples:
TIME=NEXT // In a monthly application this means next month
TIME=PRIOR(3) // Three periods backwards
TIME=NEXT(-3) // Same as PRIOR(3)
The keyword BASE always represents the last period of prior fiscal year. When the fiscal year is a normal calendar year and the frequency is monthly, the base period of 2004.JUN is 2003.DEC.
The instruction BASE can be useful in YTD applications, where the opening balances need to be retrieved from the last period of prior year.
The keyword FIRST always represents the first period of the current fiscal year. When the fiscal year is a normal calendar year and the frequency is monthly, the base period of 2004.JUN is 2004.JAN.
In case the time shift goes past the boundaries of the TIME dimension, these time shift functions will return no period.
These functions can be used in four ways:
- To re-direct the destination period in a *REC statement
Example 1: *REC(TIME=NEXT)
Example 2: *REC(TIME=BASE)
- To retrieve a value from a different period in a *REC statement
Example 1: *REC(FACTOR=GET(TIME=PRIOR(3))
Example 2: *REC(FACTOR=GET(TIME=BASE)
- To add periods to the selected data region in a XDIM_MEMBERSET statement
Example: *XDIM_MEMBERSET TIME=PRIOR, %TIME_SET%
In this example, if the first modified period is 2004.APR, the instruction PRIOR will add 2004.MAR to the region to process).
- When the keywords PRIOR, FIRST or BASE are added to a XDIM_MEMBERSET instruction, the time period PRIOR, FIRST or BASE can be also evaluated in a WHEN / ENDWHEN structure, like in the following example:
*WHEN TIME
*IS PRIOR
// ignore
*ELSE
*REC(u2026)
*ENDWNHEN
In presence of an XDIM_MEMBERSET containing the PRIOR keyword, like in the above example, the WHEN structure here shown will recognize 2004.MAR as PRIOR period.
Following is an example of logic that performs a carry-forward of account ACCREC, while adding to it the periodic amount from EXTSALES.
*XDIM_MEMBERSET TIME=PRIOR,%SET%,%PREFIX%.DEC
*CALC_EACH_PERIOD
*WHEN TIME
*IS PRIOR
*WHEN ACCOUNT
*IS ACCREC
*REC(ACCOUNT=u201DOPEACCRECu201D,TIME=NEXT)
*ENDWHEN
*ELSE
*WHEN ACCOUNT
*IS EXTSALES
*REC(FACTOR=-1,ACCOUNT="OPEACCREC",TIME=NEXT)
*REC(FACTOR=-1,ACCOUNT="ACCREC")
*IS OPEACCREC
*REC(ACCOUNT=u201DACCRECu201D)
*REC(ACCOUNT=u201DACCRECu201D,TIME=NEXT)
*ENDWHEN
*ENDWHEN
Hope this helps,
Alwin -
Logical database PNP not retrieving data for custom infotypes.
Hi all,
I am using logical database PNP in a program. I have declared infotypes as follows:
INFOTYPES: 0001, 0002, 0041, 9801, 9840.
The problem is that the logical database is retrieving data for the standard infotypes but not for the custom infotypes. Any explanation as to why data for custom infotypes is not being retireved and how this can be solved will be greatly appreciated.
regards,
Hamzasolved
-
Add new field infotype "z" in logical database selection screen pnp
Can add new field infotype "z" in logical database selection screen pnp
I could explain how to realize
ThanksIn case to somebody it interests to him: TO EXTEND SCREEN OF SELECTION WITH OPTIONAL DELIMITERS The case that can be given in a screen of selection of a logical data base it does not appear a certain field that we need in the filter, the steps that will be due to follow are the following:
u2022 To create a view of selection in agreement with the fields that we want to show To review the following Link http://help.sap.com/saphelp_46c/helpdata/es/6e/6ed638e70ef679e10000000a114084/content.htm u2022 To assign the view of selection to a class of report
u2022 In the code of report to create select option in the selection screen that allows to introduce imput to leak and after start-of-selection to put the following code,
"Allocation operative area to optional delimiter
IF NOT p_aroper IS INITIAL.
DATA: lt_texpr TYPE rsds_expr OCCURS 0 WITH HEADER LINE,
wa_texpr TYPE rsds_expr,
lt_rsds_expr_tab LIKE rsdsexpr OCCURS 10 WITH HEADER LINE,
wa_rsds_expr_tab LIKE rsdsexpr.
REFRESH lt_rsds_expr_tab.
wa_rsds_expr_tab-arity = '0'.
wa_rsds_expr_tab-fieldname = 'OBJID'.
wa_rsds_expr_tab-option = 'EQ'.
wa_rsds_expr_tab-low = p_aroper.
wa_rsds_expr_tab-high = '00000000'.
MOVE-CORRESPONDING wa_rsds_expr_tab TO lt_rsds_expr_tab.
APPEND lt_rsds_expr_tab.
REFRESH lt_texpr.
wa_texpr-tablename = 'PA9004'.
wa_texpr-expr_tab[] = lt_rsds_expr_tab[].
MOVE-CORRESPONDING wa_texpr TO lt_texpr.
APPEND lt_texpr.
pnpdynse[] = lt_texpr[].
ENDIF.
English is the forum language.
Edited by: Rob Burbank on May 18, 2011 11:41 AM -
How to read data from Logical Database ADA for more than one financia year
Hi,
I need to read data from ADA logical database and ANLCV node for current financial year 2007 and for the next 3 years 2008, 2009, 2010. When I do this using program attached below, I receive only data for one year, which is entered at the selection screen in the field BERDATUM. How should I modify my program to read ANLCV node for more then one year ? Could anybody help me ?
Kind regards,
Zbigniew Debowski
REPORT ZWRZD075.
NODES: anlav, anlcv.
START-OF-SELECTION.
GET anlav.
WRITE:/ anlav-anln1, ' ', anlav-anln2.
GET anlcv.
WRITE:/ anlcv-kansw, ' ', anlcv-knafa, ' ', anlcv-gjahr.Hi!
Have you already tried your luck in Java Programming forum?
Regards,
Thomas -
Hr programming - logical database - macro
Hi everyone !
I use pnp logical database.
Now how the program familiar the macro RP-PROVIDE-FROM-FIRST
from table trmac ? ?
i know that macro can be familiar from the program between lines:
define .......
end-of-definition.
someone can explain to me ?Hi
See this sample program for using the LDB PNP and the MAcros
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 in -
HR Reporing Payroll using Logical Database PNPCE
Hi ALL
Can any body explain me how can we do HR Payroll reporing using logical database PNPCE.
In the program attibutes as mentioned we need to scee 900 for payroll reporting, but when I use PNPCE I cant see that screen in the Dropdown.
can any body help me with this.
regards
AJcheck this program..
REPORT ZHR_PAYROLL_EX1
MESSAGE-ID ZZ
LINE-SIZE 132
LINE-COUNT 64(2)
NO STANDARD PAGE HEADING .
T A B L E S *
TABLES : PA0001 , "Infotype 0001
PCL1, "HR Cluster 1
PCL2, "HR Cluster 2
T549A, "Payroll Accounting Areas
T549Q. "Payroll Periods
I N C L U D E S *
*--Standard Include for US Payroll
INCLUDE RPC2RUU0. "Cluster RD data definition
INCLUDE RPC2CD00. "Cluster CD Data-Definition
INCLUDE RPC2CA00. "Cluster CA Data-Definition
INCLUDE RPC2RX00. "Cluster RF data definition internat. part
INCLUDE RPPPXD00. "Data definition buffer PCL1/PCL2
INCLUDE RPPPXD10. "Common part buffer PCL1/PCL2
INCLUDE RPPPXM00. "Buffer handling routine
INTERNAL TABLES
*Internal Table to Hold data from PA0001
DATA : BEGIN OF I_0001 OCCURS 0,
PERNR LIKE PA0001-PERNR, "Personnel Number
END OF I_0001.
*Internal Table to Hold data from PA0001
DATA : BEGIN OF I_FINAL OCCURS 0,
PERNR LIKE PA0001-PERNR, "Personnel Number
GAMNT LIKE PC207-BETRG, "Gross Amount
NTAMT LIKE PC207-BETRG, "Net Amount
PAYDT LIKE PC261-PAYDT, "Pay Date
RUNDT LIKE PC261-RUNDT, "Run Date
VORNA LIKE PA0002-VORNA, "First Name
NACHN LIKE PA0002-NACHN, "Last Name
END OF I_FINAL.
*Internal Table to Hold data from PA0002
DATA : BEGIN OF I_0002 OCCURS 0,
PERNR LIKE PA0002-PERNR, "Personnel Number
VORNA LIKE PA0002-VORNA, "First Name
NACHN LIKE PA0002-NACHN, "Last Name
END OF I_0002.
Control record type
TYPES : BEGIN OF T_T569V,
ABKRS LIKE T569V-ABKRS, "Personnel Area
PABRJ LIKE T569V-PABRJ, "Accounting year
PABRP LIKE T569V-PABRP, "Accounting period
STATE LIKE T569V-STATE, "Status of Control Record
ADRUN LIKE T569V-ADRUN, "HR: Special payroll run
END OF T_T569V.
STRUCTURES
DATA : WA_T569V TYPE T_T569V. " Work area for t569v
DATA
DATA : V_PABRJ LIKE T569V-PABRJ, "Accounting year
V_PABRP LIKE T569V-PABRP, "Accounting period
V_BEGDA LIKE SY-DATUM, "Begin Date
V_ENDDA LIKE SY-DATUM, "End Date
V_FPPER(6) TYPE C, "For Period
V_SEQNR LIKE PC261-SEQNR. "Sequence Number
SELECTION SCREEN
Selectio Screen Block for Employee Selection.
SELECTION-SCREEN BEGIN OF BLOCK B1 WITH FRAME TITLE TEXT-001.
SELECT-OPTIONS : S_PERNR FOR PA0001-PERNR, "Pernr
S_DATE FOR SY-DATUM. "Date
SELECTION-SCREEN END OF BLOCK B1.
START-OF-SELECTION
START-OF-SELECTION.
*Get Data from pa0001
PERFORM GET_DATA_FROM_0001.
*Get Data from pa0001
PERFORM GET_DATA_FROM_0002.
*Get CHAD Details
PERFORM GET_PAYDATA.
END-OF-SELECTION
END-OF-SELECTION.
IF NOT I_FINAL[] IS INITIAL.
*Print the Final Report.
PERFORM PRINT_REPORT.
ENDIF.
T O P O F P A G E
TOP-OF-PAGE.
Display Header
PERFORM DISPLAY_HEADER.
S U B - R O U T I N E S
*& Form get_data_from_0001
Get Data from 0001
FORM GET_DATA_FROM_0001.
SELECT PERNR "Personnel Number
FROM PA0001
INTO TABLE I_0001
WHERE PERNR IN S_PERNR AND
ENDDA >= S_DATE-LOW AND
BEGDA <= S_DATE-HIGH .
IF SY-SUBRC = 0.
SORT I_0001 BY PERNR.
ENDIF.
ENDFORM. " get_data_from_0001
*& Form get_data_from_0002
Get Data from 0002
FORM GET_DATA_FROM_0002.
SELECT PERNR "Personnel Number
VORNA
NACHN
FROM PA0002
INTO TABLE I_0002
WHERE PERNR IN S_PERNR AND
ENDDA >= S_DATE-LOW AND
BEGDA <= S_DATE-HIGH .
IF SY-SUBRC = 0.
SORT I_0002 BY PERNR.
ENDIF.
ENDFORM. " get_data_from_0002
*& Form populate_chad_coinage_table
text
FORM GET_PAYDATA.
LOOP AT I_0001.
READ TABLE I_0002 WITH KEY PERNR = I_0001-PERNR BINARY SEARCH.
IF SY-SUBRC = 0.
I_FINAL-VORNA = I_0002-VORNA.
I_FINAL-NACHN = I_0002-NACHN.
ENDIF.
Read Result Directory for Payroll Results for a Employee.
PERFORM CU_READ_RGDIR.
Get Sequence Number & Associated Payroll Results.
PERFORM GET_PAYROLL_RESULTS.
ENDLOOP.
ENDFORM. " get_paydata
*& Form cu_read_rgdir
Reag rgdir to get the results with conty grouping 'TD'
FORM CU_READ_RGDIR.
DATA : V_MOLGA LIKE T500L-MOLGA ."Country Grouping
*Call function module to get Results
CALL FUNCTION 'CU_READ_RGDIR'
EXPORTING
PERSNR = I_0001-PERNR
IMPORTING
MOLGA = V_MOLGA
TABLES
IN_RGDIR = RGDIR
EXCEPTIONS
NO_RECORD_FOUND = 1
OTHERS = 2.
SORT RGDIR BY SEQNR.
ENDFORM. " cu_read_rgdir
*& Form get_payroll_results
Get Sequence number
FORM GET_PAYROLL_RESULTS.
LOOP AT RGDIR WHERE SRTZA = 'A' AND
VOID IS INITIAL AND
REVERSAL IS INITIAL AND
OUTOFSEQ IS INITIAL AND
PAYDT IN S_DATE.
V_SEQNR = RGDIR-SEQNR.
*-- Macro Call for Germany
RP-INIT-BUFFER.
RX-KEY-PERNR = I_0001-PERNR.
RX-KEY-SEQNO = V_SEQNR.
RP-IMP-C2-RU.
LOOP AT RT WHERE LGART = '/559'.
I_FINAL-PERNR = I_0001-PERNR.
I_FINAL-GAMNT = RT-BETRG.
I_FINAL-PAYDT = RGDIR-PAYDT.
I_FINAL-RUNDT = RGDIR-RUNDT.
APPEND I_FINAL.
CLEAR I_FINAL.
ENDLOOP.
ENDLOOP.
ENDFORM. "get_payroll_results
*& Form display_header
Display Header
FORM DISPLAY_HEADER .
FORMAT COLOR 1.
ULINE.
WRITE:/1 SY-VLINE,
(15) 'Empl Number',
SY-VLINE,
(20) 'First Name',
SY-VLINE,
(20) 'Last Name',
SY-VLINE,
(15) 'Pay Date',
SY-VLINE,
(15) 'Run Date',
SY-VLINE,
(25) 'Gross Amount',
132 SY-VLINE.
ULINE.
FORMAT COLOR OFF.
ENDFORM. " display_header
*& Form print_report
Display Report
FORM PRINT_REPORT .
LOOP AT I_FINAL.
WRITE:/1 SY-VLINE,
(15) I_FINAL-PERNR,
SY-VLINE,
(20) I_FINAL-VORNA,
SY-VLINE,
(20) I_FINAL-NACHN,
SY-VLINE,
(15) I_FINAL-PAYDT,
SY-VLINE,
(15) I_FINAL-RUNDT,
SY-VLINE,
(25) I_FINAL-GAMNT,
132 SY-VLINE.
ULINE.
ENDLOOP.
SKIP 2.
WRITE:/1 'Period Begin Date:',(25) V_BEGDA.
WRITE:/1 'Period End Date:',(25) V_ENDDA.
ENDFORM. " print_report -
Advise me on logical databases
hi experts,
I am working with BSEG table now .It is time consuming for me .i have followed all the instructions for using a cluster table but still it is taking time for execution.
how can i apply logical database concepts here.
send some example codes for using LDB.
Regards,
ManikandanHi,
To read data from a database tables we use logical database. A logical database provides read-only access to a group of related tables to an ABAP/4 program.
Advantages: i)check functions which check that user input is complete, correct,and plausible. ii)Meaningful data selection. iii)central authorization checks for database accesses. iv)good read access performance while retaining the hierarchical data view determined by the application logic.
dis advantages: i)If you donot specify a logical database in the program attributes,the GET events never occur. ii)There is no ENDGET command,so the code block associated with an event ends with the next event statement (such as another GET or an END-OF-SELECTION).
If you need to find the logical database for a table name, you can used SE36 - Logical Database Bulider.
Steps :-
Go to transaction SE36
Click Extras -> Table usage
Supply the Table name and hit enter.
A Display Logical Database will be shown on a pop-up windows.
http://help.sap.com/saphelp_46c/helpdata/EN/9f/db9b5e35c111d1829f0000e829fbfe/content.htm
http://www.thespot4sap.com/Articles/SAP_ABAP_Queries_FunctionalAreas_LogicalDB.asp
Main Functions of the logical database
Standard Selection screen
Data Retrieval
Authorization check
To use logical database PNP in your program, specify in your program attributes.
Standard Selection Screen
Date selection
Date selection delimits the time period for which data is evaluated. GET PERNR retrieves all records of the relevant infotypes from the database. When you enter a date selection period, the PROVIDE loop retrieves the infotype records whose validity period overlaps with at least one day of this period.
Person selection
Person selection is the 'true' selection of choosing a group of employees for whom the report is to run.
Sorting Data
· The standard sort sequence lists personnel numbers in ascending order.
· SORT function allows you to sort the report data otherwise. All the sorting fields are from infotype 0001.
Report Class
· You can suppress input fields which are not used on the selection screen by assigning a report class to your program.
· If SAP standard delivered report classes do not satisfy your requirements, you can create your own report class through the IMG.
Data Retrieval from LDB
1. Create data structures for infotypes.
INFOTYPES: 0001, "ORG ASSIGNMENT
0002, "PERSONAL DATA
0008. "BASIC PAY
2. Fill data structures with the infotype records.
Start-of-selection.
GET PERNR.
End-0f-selection.
Read Master Data
Infotype structures (after GET PERNR) are internal tables loaded with data.
The infotype records (selected within the period) are processed sequentially by the PROVIDE - ENDPROVIDE loop.
GET PERNR.
PROVIDE * FROM Pnnnn BETWEEN PN/BEGDA AND PN/ENDDA
If Pnnnn-XXXX = ' '. write:/ Pnnnn-XXXX. endif.
ENDPROVIDE.
Period-Related Data
All infotype records are time stamped.
IT0006 (Address infotype)
01/01/1990 12/31/9999 present
Which record to be read depends on the date selection period specified on the
selection screen. PN/BEGDA PN/ENDDA.
Current Data
IT0006 Address - 01/01/1990 12/31/9999 present
RP-PROVIDE-FROM-LAST retrieves the record which is valid in the data selection period.
For example, pn/begda = '19990931' pn/endda = '99991231'
IT0006 subtype 1 is resident address
RP-PROVIDE-FROM-LAST P0006 1 PN/BEGDA PN/ENDDA.
Tables used LDB are in hierarchial structure.
Mainly we used LDBs in HR Abap Programming.
Where all tables are highly inter related so LDBs can optimize the performance there.
Check this Document. All abt LDB's
https://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.highlightedcontent?documenturi=%2flibrary%2fabap%2fabap-code-samples%2fldb+browser.doc
GO THROUGH LINKS -
http://www.sap-basis-abap.com/saptab.htm
http://help.sap.com/saphelp_nw04/helpdata/en/9f/db9bfa35c111d1829f0000e829fbfe/content.htm
http://help.sap.com/saphelp_nw04/helpdata/en/9f/db9b5e35c111d1829f0000e829fbfe/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/c6/8a15381b80436ce10000009b38f8cf/frameset.htm
/people/srivijaya.gutala/blog/2007/03/05/why-not-logical-databases
www.sapbrain.com/FAQs/TECHNICAL/SAP_ABAP_Logical_Database_FAQ.html
www.sap-img.com/abap/abap-interview-question.htm
www.sap-img.com/abap/quick-note-on-design-of-secondary-database-indexes-and-logical-databases.htm
http://help.sap.com/saphelp_nw04/helpdata/en/9f/db9b5e35c111d1829f0000e829fbfe/content.htm
http://help.sap.com/saphelp_nw2004s/helpdata/en/9f/db9bb935c111d1829f0000e829fbfe/content.htm
Gothru the blog which provides info on LDB's:
/people/srivijaya.gutala/blog/2007/03/05/why-not-logical-databases
Sample code
TABLES: SPFLI,
SFLIGHT,
SBOOK,
SCARR.
START-OF-SELECTION.
GET SPFLI.
WRITE:/ SPFLI: , SPFLI-CARRID, SPFLI-CONNID,
SPFLI-AIRPFROM, SPFLI-AIRPTO.
GET SFLIGHT.
WRITE:/ SFLIGHT: , SFLIGHT-CARRID, SFLIGHT-CONNID, SFLIGHT-FLDATE.
GET SBOOK.
WRITE:/ SBOOK: , SBOOK-CARRID, SBOOK-CONNID,
SBOOK-FLDATE, SBOOK-BOOKID.
GET SFLIGHT LATE.
WRITE:/ GET SFLIGHT LATE: , SFLIGHT-FLDATE.
<REMOVED BY MODERATOR>
Cheers,
Chandra Sekhar.
Edited by: Alvaro Tejada Galindo on Feb 22, 2008 6:04 PM -
"PERNR" is not defined for the current logical database.
Hi Experts,
I have developed a program for HR salary variance but when i execute i getting error in the line " get PERNR"
the "PERNR" is not defined for the current logical database. so plz suggest me to avoid this issue.
Thanks,
Rajeshthe codes are has below,
*& Report ZHRSAL_COMP
REPORT ZHRSAL_COMP.
tables: pernr,
t512t. "Wage type texts
infotypes: 0001. "Organizational Assignment
*Tables data containing directory to PCL2 payroll results file.
data: begin of rgdir occurs 100.
include structure pc261.
data: end of rgdir.
data: result type pay99_result.
data: rt_header type line of hrpay99_rt.
data: country like t001p-molga,
number like pc261-seqnr. "Number of last payroll result
types :begin of struc_p0001,
pernr type p0001-pernr,
ename type p0001-ename,
werks type p0001-werks,
btrtl type p0001-btrtl,
end of struc_p0001.
data : gtab_p0001 type table of struc_p0001,
gwa_p0001 type struc_p0001.
types : begin of struc_payroll,
text(10) type c,
date type dats,
month(2) type c,
year(4) type c,
abkrs(2) type c,
end of struc_payroll.
data : gtab_payroll type table of struc_payroll,
gwa_payroll type struc_payroll.
types : begin of struc_result,
lgart type lgart,
lgtxt type t512t-lgtxt,
betrg type betrg,
end of struc_result.
data : gtab_result type table of struc_result,
gwa_result type struc_result.
get pernr.
rp_provide_from_last p0001 space pn-begda pn-endda.
call function 'CU_READ_RGDIR'
exporting
pernr = p0001-pernr
importing
molga = country
tables
in_rgdir = rgdir
exceptions
no_record_found = 1
others = 2.
if sy-subrc = 1.
write: / 'No records found for '(001), pernr-pernr.
endif.
call function 'CD_READ_LAST'
exporting
begin_date = pn-begda
end_date = SY-DATUM
importing
out_seqnr = number
tables
rgdir = rgdir
exceptions
no_record_found = 1
others = 2.
if sy-subrc = 1.
write: / 'No payroll result found for'(002), pn-paper.
else.
call function 'PYXX_READ_PAYROLL_RESULT'
exporting
clusterid = 'RX'
employeenumber = p0001-pernr
sequencenumber = number
READ_ONLY_BUFFER = ' '
READ_ONLY_INTERNATIONAL = ' '
CHECK_READ_AUTHORITY = 'X'
IMPORTING
VERSION_NUMBER_PAYVN =
VERSION_NUMBER_PCL2 =
changing
payroll_result = result
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
others = 8.
if sy-subrc = 0.
perform print_rx.
else.
write: / 'Result could not be read (003)'.
endif.
endif.
FORM PRINT_RX *
Print Payroll Result *
form print_rx.
format intensified on.
write: / p0001-pernr,
p0001-ename(15),
p0001-werks,
p0001-btrtl.
format intensified off.
skip 1.
move p0001-pernr to gwa_p0001-pernr.
move p0001-ename(15) to gwa_p0001-ename.
move p0001-werks to gwa_p0001-werks.
move p0001-btrtl to gwa_p0001-btrtl.
append gwa_p0001 to gtab_p0001.
write: / 'For period/payroll area: '(004),
30 result-inter-versc-fpper+4(2),
result-inter-versc-fpper+0(4),
result-inter-versc-abkrs,
/ 'In-period/payroll area: '(005),
30 result-inter-versc-inper+4(2),
result-inter-versc-inper+0(4),
result-inter-versc-iabkrs.
skip 1.
gwa_payroll-text = 'For'.
move result-inter-versc-fpper to gwa_payroll-date.
move result-inter-versc-fpper+4(2) to gwa_payroll-month.
move result-inter-versc-fpper+0(4) to gwa_payroll-year.
move result-inter-versc-abkrs to gwa_payroll-abkrs.
append gwa_payroll to gtab_payroll.
gwa_payroll-text = 'In'.
move result-inter-versc-fpper to gwa_payroll-date.
move result-inter-versc-inper+4(2) to gwa_payroll-month.
move result-inter-versc-inper+0(4) to gwa_payroll-year.
move result-inter-versc-iabkrs to gwa_payroll-abkrs.
append gwa_payroll to gtab_payroll.
write: 'Results table: '(006).
skip 1.
loop at result-inter-rt into rt_header.
perform re512t using result-inter-versc-molga
rt_header-lgart.
write: / rt_header-lgart,
t512t-lgtxt,
rt_header-betrg currency rt_header-amt_curr.
move rt_header-lgart to gwa_result-lgart.
move t512t-lgtxt to gwa_result-lgtxt.
move rt_header-betrg to gwa_result-betrg.
append gwa_result to gtab_result.
endloop.
endform. "print_rx
FORM RE512T *
Read Wage Type Texts
form re512t using value(country_grouping)
value(wtype).
check t512t-sprsl ne sy-langu
or t512t-molga ne country_grouping
or t512t-lgart ne wtype.
select single * from t512t
where sprsl eq sy-langu
and molga eq country_grouping
and lgart eq wtype.
if sy-subrc ne 0.
clear t512t.
endif.
endform. "re512t -
How to use a Logical Database in Function Module.
Hi Experts,
I want to use a logical database in a Function Module to fetch data from a standard SAP table into a Internal table for certain filter conditions.
How can I get get this done????
I called LDB_PROCESS FM in my FM, but I could not figure out how to store the extract in my IT table since we cant use GET in FM.
Please provide me a sample code if possible.
Thanks in Advance,
Alex.Hi,
i had an example program like this ,in this i want to get the data using pnp logical database with 5 fields in an interface program.
data: begin of it_final occurs 0,
pernr like pa0002-pernr,
vorna like pa0002-vorna,
nachn like pa0002-nachn,
usrid like pa0105-usrid,
usrid_long like pa0105-usrid_long,
end of it_final.
get pernr.
clear : p0000,p0002,p0105.
rp-provide-from-last p0000 space p_date p_date.
if p0000-stat2 = '3'.
v_pernr = pnppernr-low.
else.
reject.
endif.
*---Get employee pernr, First name ,Last name into final table
rp-provide-from-last p0002 space p_date p_date.
if pnp-sw-found = '1'.
it_final-pernr = p0002-pernr.
it_final-vorna = p0002-vorna.
it_final-nachn = p0002-nachn.
else.
*---Error message if not infotype 0002 maintained
T_ERROR-PERNR = pnppernr-low.
CONCATENATE TEXT-EMI '0002'
INTO T_ERROR-MESSAGE SEPARATED BY SPACE.
APPEND T_ERROR.
CLEAR T_ERROR.
endif.
**--Get SYSTEM USERNAME to final table
rp-provide-from-last p0105 0001 p_date p_date.
if pnp-sw-found = '1'.
it_final-usrid = p0105-usrid.
else.
*---Error message if not SYSTEM USERNAME maintained
T_ERROR-PERNR = pnppernr-low.
CONCATENATE TEXT-003 '0105'
INTO T_ERROR-MESSAGE SEPARATED BY SPACE.
APPEND T_ERROR.
CLEAR T_ERROR.
endif.
**--Get Email ID to final table
rp-provide-from-last p0105 0010 p_date p_date.
if pnp-sw-found = '1'.
it_final-usrid_long = p0105-usrid_long.
else.
*---Error message if not Email ID maintained
T_ERROR-PERNR = pnppernr-low.
CONCATENATE TEXT-004 '0105'
INTO T_ERROR-MESSAGE SEPARATED BY SPACE.
APPEND T_ERROR.
CLEAR T_ERROR.
endif.
append it_final.
clear it_final.
reward points if useful,
venkat.
Maybe you are looking for
-
I turned my iphone4 off and now it won't restart, how do i fix this?
I turned my iphone4 off because it had no service and it wouldn't get service, so i turned it off and tried to restart it and it will not quit blinking the apple logo homescreen and it won't go away, how do i fix this?
-
Graphical Message mapping complexity in SAP PI 7.31 single stack
Hi All, I have a source structure 1..unbounded <Material> <row> 1....unbounded <Mat_ID>123<Mat_ID> <Desc><text</Desc> <uom>EA</uom> <plant>AB</plant> <org>XY</org> </row> <row> <Mat_ID>123<Mat_ID> <Desc><text</Desc> <uom>ST</uom> <plant>CD</plant>
-
I have my MBP hooked up to my LCD tv via VGA port I have found the best resolution is 1024x768 at 60hz however the tv is capable of 1366x768 but in displays it does not give this as an option it gives you alot of options even ones that a beyond the l
-
TS1702 Can't find the tv show I purchased
Where does the file appear?
-
Capture SOAP Traffic in Webcenter Spaces
Dear All, I am trying to solve a problem regarding a portlet that is deployed in my spaces. I'd like to capture the SOAP traffic between my portlet and the response from the server but I am unable to get it. I am trying a tool called wireshark but it