0% found this document useful (0 votes)
17 views11 pages

Payroll Data Listing Program in SAP

The document outlines two example programs for reading payroll data using ABAP. The first program, ZHR_LIST_RT, retrieves payroll information from the RT table and validates payroll areas, while the second program, ZR_H113_PAYROLL, processes payroll results and displays employee information. Both programs utilize SAP function modules for accessing payroll data and include various data declarations and selection screens.

Uploaded by

praveenram20795
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
17 views11 pages

Payroll Data Listing Program in SAP

The document outlines two example programs for reading payroll data using ABAP. The first program, ZHR_LIST_RT, retrieves payroll information from the RT table and validates payroll areas, while the second program, ZR_H113_PAYROLL, processes payroll results and displays employee information. Both programs utilize SAP function modules for accessing payroll data and include various data declarations and selection screens.

Uploaded by

praveenram20795
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOC, PDF, TXT or read online on Scribd

1.

Program to read Payroll data


By Vamshidhar Naini, YASH Technologies

*& This is an Example Program to List the Payroll data( Reading RT


table
* from cluster PCL2 ) Using the Function module
* ‘PYXX_READ_PAYROLL_RESULT’.
*&--------------------------------------------------------------------
-*
*& Program Name : ZHR_LIST_RT
*& Application : HR
*& Published at [Link]
*& Description : Listing of Payroll Data
*&--------------------------------------------------------------------
-
REPORT ZHR_LIST_RT.
TYPE-POOLS:slis.
TABLES:pa0001.
**********************************************************************
*
* Types Declaration
*
**********************************************************************
*
TYPES: BEGIN OF ty_pa0001,
pernr TYPE pa0001-pernr,
begda TYPE pa0001-begda,
orgeh TYPE pa0001-orgeh,
ename TYPE pa0001-ename,
END OF ty_pa0001.
TYPES: BEGIN OF ty_output,
sno TYPE i,
orgeh TYPE pa0001-orgeh,
orgtx TYPE t527x-orgtx,
pernr TYPE pa0001-pernr,
ename TYPE pa0001-ename,
lgart TYPE pa0008-lga01,
betrg TYPE netwr,
END OF ty_output.
**********************************************************************
*
* Internal Tables Declaration
*
**********************************************************************
*
DATA i_pa0001 TYPE STANDARD TABLE OF ty_pa0001.
DATA: it_rgdir TYPE STANDARD TABLE OF pc261.
DATA: i_rgdir TYPE STANDARD TABLE OF pc261.
DATA i_output TYPE STANDARD TABLE OF ty_output.
*& Header structure declaration
DATA fs_pa0001 TYPE ty_pa0001.
DATA: fs_rgdir TYPE pc261.
**********************************************************************
*
* Variable Declaration
*
**********************************************************************
*
DATA:
v_begda TYPE begda,
v_endda TYPE endda,
v_atext TYPE t549t-atext,
v_error TYPE c.
DATA: v_mname(15).
DATA: v_mname2(20).
**********************************************************************
*
* Constants Declaration
*
**********************************************************************
*
CONSTANTS:
c_x TYPE c VALUE 'X'.
**********************************************************************
*
* SELECTION SCREEN
*
**********************************************************************
*
SELECTION-SCREEN BEGIN OF BLOCK b1 WITH FRAME TITLE text-t01.
PARAMETERS: p_abkrs TYPE pa0001-abkrs OBLIGATORY.
SELECTION-SCREEN BEGIN OF LINE.
SELECTION-SCREEN COMMENT 01(20) text-t02 FOR FIELD p_month1.
SELECTION-SCREEN POSITION 33.
PARAMETER : p_month1(2) TYPE n OBLIGATORY,
: p_fyear1(4) TYPE n OBLIGATORY .
SELECTION-SCREEN END OF LINE.
SELECTION-SCREEN END OF BLOCK b1.
**********************************************************************
* AT SELECTION-SCREEN ON FIELD
*
**********************************************************************
*
AT SELECTION-SCREEN ON p_month1.
IF p_month1 GT '12'.
MESSAGE e531(0u) WITH 'Enter a Valid Period'.
ENDIF.
AT SELECTION-SCREEN ON p_abkrs.
* Validating the Payroll Area.
PERFORM validate_payroll_area.
**********************************************************************
*
* START-OF-SELECTION EVENT
*
**********************************************************************
*
START-OF-SELECTION.
* Getting the starting and ending date of the period.
PERFORM get_period.
*& Select the Employees.
PERFORM get_pernrs.
END-OF-SELECTION.
*&--------------------------------------------------------------------
-*
*& Form get_pernrs
*&--------------------------------------------------------------------
-*
* This subroutine is used to get the amount to pay.
*---------------------------------------------------------------------
-*
* There are no interface parameters are there to pass
*---------------------------------------------------------------------
-*
FORM get_pernrs .
FIELD-SYMBOLS:
<payresult> TYPE ANY,
<lv_payresult> TYPE h99_clst_s_payresult,
<lv_versc> TYPE pc202,
<li_rt> TYPE hrpay99_rt,
<li_ddntk> TYPE hrpay99_ddntk.
DATA: lfs_rt TYPE pc207.
DATA: lfs_ddntk TYPE pc23e.
DATA: lv_relid TYPE t500l-relid.
DATA: lv_type TYPE t52relid-typename.
DATA: lv_typename TYPE hrpclx_type.
DATA: ref_payresult TYPE REF TO data.
DATA: lv_molga TYPE molga.
DATA: lv_type_1 TYPE tadir-obj_name.
DATA: lv_tadir TYPE tadir-obj_name.
DATA: lv_unpaid TYPE ktsol.
DATA: lv_paid TYPE ktsol.
*& Reading all the Personnel Numbers
SELECT pernr
begda
orgeh
ename
FROM pa0001
INTO TABLE i_pa0001
WHERE endda GE v_begda
AND begda LE v_endda
AND abkrs EQ p_abkrs.
IF sy-subrc NE 0.
MESSAGE s531(0u) WITH 'No active Employees found for the
selection'.
v_error = c_x.
STOP.
ENDIF. " IF sy-subrc NE 0.
SORT i_pa0001 BY pernr begda DESCENDING.
DELETE ADJACENT DUPLICATES FROM i_pa0001 COMPARING pernr.
SORT i_pa0001 BY orgeh pernr.
LOOP AT i_pa0001 INTO fs_pa0001.
*& Reading of the Payresult for all the Periods
REFRESH:
it_rgdir,
i_rgdir.
CLEAR:fs_rgdir.
CALL FUNCTION 'CU_READ_RGDIR'
EXPORTING
persnr = fs_pa0001-pernr
TABLES
in_rgdir = it_rgdir
EXCEPTIONS
no_record_found = 1
OTHERS = 2.
IF sy-subrc = 0.
CALL FUNCTION 'PYXX_GET_RELID_FROM_PERNR'
EXPORTING
employee = fs_pa0001-pernr
IMPORTING
relid = lv_relid
molga = lv_molga
EXCEPTIONS
error_reading_infotype_0001 = 1
error_reading_molga = 2
error_reading_relid = 3
OTHERS = 4.
IF sy-subrc NE 0.
ENDIF.
SELECT SINGLE typename
FROM t52relid
INTO lv_type
WHERE relid EQ lv_relid
AND tabname = 'PCL2'.
IF sy-subrc NE 0.
lv_relid = 'IN'.
lv_type = 'PAYIN_RESULT'.
ENDIF.
lv_typename = lv_type.
CREATE DATA ref_payresult TYPE (lv_typename).
ASSIGN ref_payresult->* TO <payresult>.
* SRTZA--Status Of records.
* SRTZA = 'A' --Current Result.
DELETE it_rgdir WHERE srtza NE 'A'.
* PAYTY --> Payment Type ( Regular or Bonus)
* PAYTY = SPACE --'Regular Payroll'.
* PAYTY = 'B' --> 'Bonus'.
LOOP AT it_rgdir INTO fs_rgdir WHERE payty = ''
AND fpbeg GE v_begda
AND fpend LE v_endda.
APPEND fs_rgdir TO i_rgdir.
ENDLOOP. " LOOP AT it_rgdir
SORT i_rgdir BY seqnr DESCENDING.
CLEAR: lv_unpaid,lv_paid.
LOOP AT i_rgdir INTO fs_rgdir.
CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'
EXPORTING
clusterid = lv_relid
employeenumber = fs_pa0001-pernr
sequencenumber = fs_rgdir-seqnr
CHANGING
payroll_result = <payresult>
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.
IF sy-subrc EQ 0.
ASSIGN COMPONENT 'INTER-RT' OF STRUCTURE <payresult> TO
<li_rt>.
write /: fs_pa0001-pernr.
skip 2.
LOOP AT <li_rt> INTO lfs_rt.
write:/ lfs_rt-lgart,30 lfs_rt-betrg.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDIF.
ENDLOOP.
ENDFORM. "get_pernrs
*&--------------------------------------------------------------------
-*
*& Form get_period
*&--------------------------------------------------------------------
-*
* This subroutine is used to calculate the period range
*---------------------------------------------------------------------
-*
* There are no interface parameters are there to pass
*---------------------------------------------------------------------
-*
FORM get_period .
SELECT SINGLE begda
endda
INTO (v_begda,
v_endda)
FROM t549q
WHERE permo = '01'
AND pabrj = p_fyear1
AND pabrp = p_month1.
IF sy-subrc NE 0.
MESSAGE s531(0u) WITH 'Error in Period calculation- table T549Q'.
v_error = 'X'.
STOP.
ENDIF.
ENDFORM. " Get_period
*&--------------------------------------------------------------------
-*
*& Form validate_payroll_area
*&--------------------------------------------------------------------
-*
* This Subroutine is used to validate the payroll area
*---------------------------------------------------------------------
-*
* There are no Parameters to pass this subroutine
*---------------------------------------------------------------------
-*
FORM validate_payroll_area .
DATA: lv_abkrs TYPE t549a-abkrs.
SELECT SINGLE abkrs " Payroll Area
FROM t549a
INTO lv_abkrs
WHERE abkrs EQ p_abkrs.
IF sy-subrc NE 0.
MESSAGE e531(0u) WITH 'Enter a valid Payroll Area'.
ENDIF. " IF sy-subrc NE 0.
ENDFORM. " Validate_payroll_area

Regular Payroll Processing In ABAP


2.

HR
* Example Program On Payroll in HR-ABAP *

REPORT ZR_H113_PAYROLL LINE-SIZE 200.

TABLES PERNR.

INFOTYPES: 0000,0008.

DATA ITAB TYPE PC261 OCCURS 0 WITH HEADER LINE.

DATA G_SEQNR LIKE PC261-SEQNR.

DATA IT_RESULTS TYPE PAYIN_RESULT.

DATA WA_RT TYPE PC207.

DATA WA_BT TYPE PC209.


DATA: VAR1 TYPE T512T-LGTXT.

DATA: BEGIN OF IT_T549T OCCURS 0,

ABKRS TYPE T549T-ABKRS,

ATEXT TYPE T549T-ATEXT,

END OF IT_T549T.

DATA: BEGIN OF IT_T512T OCCURS 0,

LGART TYPE T512T-LGART,

LGTXT TYPE T512T-LGTXT,

END OF IT_T512T.

DATA: BEGIN OF ITAB1 OCCURS 0,

LGTXT TYPE T512T-LGTXT,

END OF ITAB1.

START-OF-SELECTION.

SELECT ABKRS

ATEXT FROM T549T INTO TABLE IT_T549T

WHERE SPRSL = SY-LANGU.

SELECT LGART

LGTXT FROM T512T INTO TABLE IT_T512T

WHERE SPRSL = SY-LANGU.


GET PERNR.

CALL FUNCTION 'CU_READ_RGDIR'

EXPORTING

PERSNR = PERNR-PERNR

* BUFFER =

* NO_AUTHORITY_CHECK = ' '

* IMPORTING

* MOLGA =

TABLES

IN_RGDIR = ITAB

* EXCEPTIONS

* NO_RECORD_FOUND = 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.

CALL FUNCTION 'CD_READ_LAST'

EXPORTING

BEGIN_DATE = PN-BEGDA

END_DATE = PN-ENDDA

IMPORTING

OUT_SEQNR = G_SEQNR

TABLES
RGDIR = ITAB

* EXCEPTIONS

* NO_RECORD_FOUND = 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.

CALL FUNCTION 'PYXX_READ_PAYROLL_RESULT'

EXPORTING

* CLUSTERID =

EMPLOYEENUMBER = PERNR-PERNR

SEQUENCENUMBER = G_SEQNR

* READ_ONLY_BUFFER = ' '

* READ_ONLY_INTERNATIONAL = ' '

* ARC_GROUP = ' '

* CHECK_READ_AUTHORITY = 'X'

* FILTER_CUMULATIONS = 'X'

* CLIENT =

* IMPORTING

* VERSION_NUMBER_PAYVN =

* VERSION_NUMBER_PCL2 =

CHANGING

PAYROLL_RESULT = IT_RESULTS

* 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

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 P0000.

READ TABLE IT_T549T WITH KEY ABKRS = PERNR-ABKRS.

WRITE:/ PERNR-PERNR, PERNR-ENAME,P0000-BEGDA,IT_T549T-ABKRS,IT_T549T-


ATEXT.

ENDLOOP.

LOOP AT IT_T512T WHERE LGART ='/460'.

MOVE IT_T512T-LGTXT TO ITAB1-LGTXT.

APPEND ITAB1.

ENDLOOP.

READ TABLE ITAB1 INDEX 11.


MOVE ITAB1-LGTXT TO VAR1.

LOOP AT IT_RESULTS-INTER-RT INTO WA_RT.

READ TABLE IT_T512T WITH KEY LGART = WA_RT-LGART.

IF WA_RT-LGART = '/101'.

WRITE:/ WA_RT-LGART,IT_T512T-LGTXT,WA_RT-BETRG.

ELSEIF WA_RT-LGART = '/460'.

WRITE:/ WA_RT-LGART,VAR1,WA_RT-BETRG.

ENDIF.

ENDLOOP.

LOOP AT IT_RESULTS-INTER-BT INTO WA_BT.

READ TABLE IT_T512T WITH KEY LGART = '/559'.

WRITE:/ WA_BT-BANKL,WA_BT-BANKN,WA_BT-LGART,IT_T512T-LGTXT,WA_BT-BETRG.

ENDLOOP.

Posted by ABAP WITH HR at 01:53

Email ThisBlogThis!Share to TwitterShare to FacebookShare to Pinterest

Labels: HR-ABAP

Newer Post
3.

You might also like