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.