2006 Jan 12 11:11 PM
Hi
I have assigned to write a program, which reads the payroll data on the basis of screen input date. I know we have to incorporate HR cluster PCL1 and PCL2 but I remember therere some macros as well as we have to includes some of SAP standard includes which store the information about cluster and also have the result table information ( RU ) with different wage types. Can some body mail me the code or step how to start program?
Thanks
Bye
2006 Jan 12 11:16 PM
Look at the sample program: The logical database used for this is PNPCE.
REPORT z_payroll_results MESSAGE-ID hrpbsus NO STANDARD PAGE HEADING
LINE-SIZE 130
LINE-COUNT 65(3) .
TABLES: pernr,pcl1, " HR Cluster
pcl2 . " HR Cluster.
NODES : person, peras.
INFOTYPES: 0006, 0000, 0001, 0002.
***********************************************************************
Clusters, Buffers
***********************************************************************
INCLUDE rpc2cd09. " cluster CD DATA-Defenition
INCLUDE rpc2ca00. " cluster CA DATA-Defenition
INCLUDE rpc2ruu0. " cluster RU DATA-Defenition
INCLUDE rpc2rx09. " cluster RU DATA-Defenition internat.part
INCLUDE rpppxd00. " DATA definition buffer PCL1/PCL2
INCLUDE rpppxd10. " common part buffer PCL1/PCL2
INCLUDE rpppxm00. " buffer handling routine
DATA: BEGIN OF i_datatab OCCURS 0,
name(32) TYPE c, " Employee Name
pernr LIKE pernr-pernr, " Employee Number
pay_period(7) TYPE c, " Pay Period
pay_srt_date(10) TYPE c, " PayPeriod Start Date
pay_end_date(10) TYPE c, " PayPeriod End Date
cent_value(2) TYPE p, " Actual Cent value
hours_period(3) TYPE p DECIMALS 2, " Hours Per Period
amount(4) TYPE p DECIMALS 2, " Calculated Amount
END OF i_datatab.
START-OF-SELECTION.
GET person.
GET peras.
rp_provide_from_last p0006 '1' pn-begda pn-endda.
rp_provide_from_last p0000 space pn-begda pn-endda.
rp_provide_from_last p0001 space pn-begda pn-endda.
rp_provide_from_last p0002 space pn-begda pn-endda.
CHECK pernr-pernr IN pnppernr. " Checking Employee Number
MOVE p0002-vorna TO i_datatab-name.
MOVE pernr-pernr TO i_datatab-pernr.
PERFORM pay_results.
APPEND i_datatab.
CLEAR i_datatab.
&----
*& Form pay_results
&----
text
----
--> p1 text
<-- p2 text
----
FORM pay_results .
DATA: l_tabix TYPE sy-tabix.
Reading Payroll Cluster and getting the Payroll results
cd-key-pernr = pernr-pernr.
rp-imp-c2-cu.
IF rp-imp-cd-subrc EQ 0.
LOOP AT rgdir where srtza = 'A' and fpend between
pn-begda and pn-endda.
SORT rgdir BY srtza seqnr DESCENDING.
LOOP AT rgdir WHERE srtza = 'A'.
l_tabix = l_tabix + 1.
IF l_tabix > 2.
EXIT.
ENDIF.
rx-key-pernr = pernr-pernr.
UNPACK rgdir-seqnr TO rx-key-seqno.
rp-imp-c2-ru.
IF sy-subrc EQ 0.
LOOP AT rt.
ENDLOOP.
ENDIF.
CONCATENATE rgdir-fpper4(2) rgdir-fpper0(4)
INTO i_datatab-pay_period SEPARATED BY space.
MOVE rgdir-fpbeg TO i_datatab-pay_srt_date.
MOVE rgdir-fpend TO i_datatab-pay_end_date.
i_datatab-amount =
( i_datatab-cent_value * i_datatab-hours_period ) / 100.
ENDLOOP.
ENDIF.
ENDFORM. " pay_results
END-OF-SELECTION.
LOOP AT i_datatab.
WRITE:/ i_datatab-name,
i_datatab-pernr,
i_datatab-pay_period,
i_datatab-pay_srt_date,
i_datatab-pay_end_date.
ENDLOOP.
Good luck.
Please close the issue with appropriate points if helpful.
Venu
Hi,
You have to check program RPCLSTRU and RPCLSTB2 and include the same include as there is in these progs.
to import payroll Macro to use is:
*Standard Payroll Routines and Data Definitions
INCLUDE RPC2CD09.
INCLUDE RPC2RUU0.
INCLUDE RPC2RX09.
INCLUDE RPPPXD00.
INCLUDE RPPPXD10.
INCLUDE RPPPXM00.
Then...
FORM IMPORT_PAYROLL_RESULT.
DATA: MED_AMT LIKE RT-BETRG.
DATA: DAY_AMT LIKE RT-BETRG.
*TRMAC macro to import US Payroll results from PCL2(RU)
RP-IMP-C2-RU.
*check RC
IF RP-IMP-RU-SUBRC = 0.
IF RU-VERSION-NUMBER NE ORU-VERSION-NUMBER.
STOP.
SY-SUBRC = 4.
ELSE.
SY-SUBRC = 0.
ENDIF.
ELSE.
SY-SUBRC = 8.
ENDIF.
CHECK SY-SUBRC = 0.
*get $amount from required wagetype in required result table
DATA: CONT_AMNT(15).
LOOP AT RT.
CASE RT-LGART.
WHEN 'XXXX'.
CONT_AMNT = RT-BETRG.
C_OUTFL-1ST_CONT_AMNT = CONT_AMNT+8(7) + C_OUTFL-1ST_CONT_AMNT.
ENDCASE.
ENDLOOP.
ENDFORM. " IMPORT_PAYROLL_RESULT
This form is used here in the form that reads the different payrolls:
FORM GET_RGDIR_CD.
CD-KEY-PERNR = PERNR-PERNR.
SY-SUBRC = 0.
*call TRMAC macro to retrieve cluster directory
RP-IMP-C2-CU.
*look for actual result
LOOP AT RGDIR WHERE FPBEG LE PN-ENDDA
AND FPEND GE PN-BEGDA
AND SRTZA = 'A'
AND VOID = SPACE.
MOVE PERNR-PERNR TO RX-KEY-PERNR.
UNPACK RGDIR-SEQNR TO RX-KEY-SEQNO.
PERFORM IMPORT_PAYROLL_RESULT.
CLEAR: RX-KEY-PERNR,
RX-KEY-SEQNO.
ENDLOOP.
ENDFORM. " GET_RGDIR_CD
RP-IMP-C2-RU to import the payroll of the cluster RU BUT Pay attention !!! RGDIR contains
2006 Jan 12 11:16 PM
Look at the sample program: The logical database used for this is PNPCE.
REPORT z_payroll_results MESSAGE-ID hrpbsus NO STANDARD PAGE HEADING
LINE-SIZE 130
LINE-COUNT 65(3) .
TABLES: pernr,pcl1, " HR Cluster
pcl2 . " HR Cluster.
NODES : person, peras.
INFOTYPES: 0006, 0000, 0001, 0002.
***********************************************************************
Clusters, Buffers
***********************************************************************
INCLUDE rpc2cd09. " cluster CD DATA-Defenition
INCLUDE rpc2ca00. " cluster CA DATA-Defenition
INCLUDE rpc2ruu0. " cluster RU DATA-Defenition
INCLUDE rpc2rx09. " cluster RU DATA-Defenition internat.part
INCLUDE rpppxd00. " DATA definition buffer PCL1/PCL2
INCLUDE rpppxd10. " common part buffer PCL1/PCL2
INCLUDE rpppxm00. " buffer handling routine
DATA: BEGIN OF i_datatab OCCURS 0,
name(32) TYPE c, " Employee Name
pernr LIKE pernr-pernr, " Employee Number
pay_period(7) TYPE c, " Pay Period
pay_srt_date(10) TYPE c, " PayPeriod Start Date
pay_end_date(10) TYPE c, " PayPeriod End Date
cent_value(2) TYPE p, " Actual Cent value
hours_period(3) TYPE p DECIMALS 2, " Hours Per Period
amount(4) TYPE p DECIMALS 2, " Calculated Amount
END OF i_datatab.
START-OF-SELECTION.
GET person.
GET peras.
rp_provide_from_last p0006 '1' pn-begda pn-endda.
rp_provide_from_last p0000 space pn-begda pn-endda.
rp_provide_from_last p0001 space pn-begda pn-endda.
rp_provide_from_last p0002 space pn-begda pn-endda.
CHECK pernr-pernr IN pnppernr. " Checking Employee Number
MOVE p0002-vorna TO i_datatab-name.
MOVE pernr-pernr TO i_datatab-pernr.
PERFORM pay_results.
APPEND i_datatab.
CLEAR i_datatab.
&----
*& Form pay_results
&----
text
----
--> p1 text
<-- p2 text
----
FORM pay_results .
DATA: l_tabix TYPE sy-tabix.
Reading Payroll Cluster and getting the Payroll results
cd-key-pernr = pernr-pernr.
rp-imp-c2-cu.
IF rp-imp-cd-subrc EQ 0.
LOOP AT rgdir where srtza = 'A' and fpend between
pn-begda and pn-endda.
SORT rgdir BY srtza seqnr DESCENDING.
LOOP AT rgdir WHERE srtza = 'A'.
l_tabix = l_tabix + 1.
IF l_tabix > 2.
EXIT.
ENDIF.
rx-key-pernr = pernr-pernr.
UNPACK rgdir-seqnr TO rx-key-seqno.
rp-imp-c2-ru.
IF sy-subrc EQ 0.
LOOP AT rt.
ENDLOOP.
ENDIF.
CONCATENATE rgdir-fpper4(2) rgdir-fpper0(4)
INTO i_datatab-pay_period SEPARATED BY space.
MOVE rgdir-fpbeg TO i_datatab-pay_srt_date.
MOVE rgdir-fpend TO i_datatab-pay_end_date.
i_datatab-amount =
( i_datatab-cent_value * i_datatab-hours_period ) / 100.
ENDLOOP.
ENDIF.
ENDFORM. " pay_results
END-OF-SELECTION.
LOOP AT i_datatab.
WRITE:/ i_datatab-name,
i_datatab-pernr,
i_datatab-pay_period,
i_datatab-pay_srt_date,
i_datatab-pay_end_date.
ENDLOOP.
Good luck.
Please close the issue with appropriate points if helpful.
Venu
2006 Jan 12 11:18 PM
Hi Suleman,
here is a sample.. this one reads the Co code from WPBP.. but in the RGDIR loop all the internal tables liek RT<CRT<BT<TCRT etc are available for evaluation...
report zppayresult.
.
data: t_rgdir like pc261 occurs 0 with header line.
include: rpcccd09, "constants for cluster CD/CU
rpc2rx00, "Definition cluster RX (I)
rpppxd00, "Buffer definition (I)
rpc2ruu0. "US cluster
data: begin of common part buffer.
include: rpppxd10. "Buffer definition (II)
data: end of common part buffer.
tables: pcl1, pcl2.
include rpppxm00.
start-of-selection.
call function 'CU_READ_RGDIR'
exporting
persnr = '00007519'
tables
in_rgdir = t_rgdir.
if sy-subrc eq 0.
loop at t_rgdir where seqnr = '00057'.
rx-key-pernr = '00007519'.
unpack t_rgdir-seqnr to rx-key-seqno.
*Import data from PCL2
rp-imp-c2-ru.
read table wpbp index 1.
if sy-subrc eq 0.
write:/ wpbp-bukrs.
endif.
endloop.
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
endif.
There are other ways too like using the GET PAYROLL event in PNP or standard function calls like HR_GET_PAYROLL_RESULTS etc..
Regards,
Suresh Datti
2006 Jan 12 11:28 PM
2006 Jan 12 11:30 PM
2006 Jan 12 11:26 PM
Hi,
You have to check program RPCLSTRU and RPCLSTB2 and include the same include as there is in these progs.
to import payroll Macro to use is:
*Standard Payroll Routines and Data Definitions
INCLUDE RPC2CD09.
INCLUDE RPC2RUU0.
INCLUDE RPC2RX09.
INCLUDE RPPPXD00.
INCLUDE RPPPXD10.
INCLUDE RPPPXM00.
Then...
FORM IMPORT_PAYROLL_RESULT.
DATA: MED_AMT LIKE RT-BETRG.
DATA: DAY_AMT LIKE RT-BETRG.
*TRMAC macro to import US Payroll results from PCL2(RU)
RP-IMP-C2-RU.
*check RC
IF RP-IMP-RU-SUBRC = 0.
IF RU-VERSION-NUMBER NE ORU-VERSION-NUMBER.
STOP.
SY-SUBRC = 4.
ELSE.
SY-SUBRC = 0.
ENDIF.
ELSE.
SY-SUBRC = 8.
ENDIF.
CHECK SY-SUBRC = 0.
*get $amount from required wagetype in required result table
DATA: CONT_AMNT(15).
LOOP AT RT.
CASE RT-LGART.
WHEN 'XXXX'.
CONT_AMNT = RT-BETRG.
C_OUTFL-1ST_CONT_AMNT = CONT_AMNT+8(7) + C_OUTFL-1ST_CONT_AMNT.
ENDCASE.
ENDLOOP.
ENDFORM. " IMPORT_PAYROLL_RESULT
This form is used here in the form that reads the different payrolls:
FORM GET_RGDIR_CD.
CD-KEY-PERNR = PERNR-PERNR.
SY-SUBRC = 0.
*call TRMAC macro to retrieve cluster directory
RP-IMP-C2-CU.
*look for actual result
LOOP AT RGDIR WHERE FPBEG LE PN-ENDDA
AND FPEND GE PN-BEGDA
AND SRTZA = 'A'
AND VOID = SPACE.
MOVE PERNR-PERNR TO RX-KEY-PERNR.
UNPACK RGDIR-SEQNR TO RX-KEY-SEQNO.
PERFORM IMPORT_PAYROLL_RESULT.
CLEAR: RX-KEY-PERNR,
RX-KEY-SEQNO.
ENDLOOP.
ENDFORM. " GET_RGDIR_CD
RP-IMP-C2-RU to import the payroll of the cluster RU BUT Pay attention !!! RGDIR contains
| User | Count |
|---|---|
| 6 | |
| 2 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 | |
| 1 |