Error while running Payroll process:
Object Code error : file '/psoft/psofthrf/hr/psbdl90/cblbin/GPPUACCM.gnt'
error code: 153, pc=0, call=1, seg=0
153 Subscript out of range (in GPCCMSGS.cbl, line 34)Cause
The error occurs on the following line in GPCUMSGS:
"IF NOT PYE-CALC-STAT-BYPASS-PMT OF DPDM(L-PMT-PTR)"
Either the array(L-PMT-DATA) holding PYE-CALC-STAT-BYPASS-PMT count is less than L-PMT-PTR value OR L-PMT-PTR is passed as zero.
GPCDPDM(L-PMT-DATA) refreshes at Payee level and 200 is the default value. This array holds the number of segments processed for a single payee including retro, current + one history row.
Tables:
GP_PYE_PRC_STAT
GP_PYE_SEG_STAT
An array with a refresh level of "Payee" will have its size tested by the most complex Payee encountered; the number of payees processed does not matter.
Typically, the most challenging Payee will be the one with the most retro periods and/or payee data such as PI. These are usually the most difficult arrays to predict.
Assuming the calendar in question is processing Retro as well. Occurs and Max size of L-PMT-MAX & L-PMT-DATA in GPCDPDM increased to 50000, but payroll process run to same error which meant the L-PMT-PTR is not the culprit.
On analyzing trace:
— Last SQL statement GPPUACCM_S_GETACTB [SELECT A.PIN_NUM ,A.PIN_MBR_NUM ,A.BGN_DT ,A.END_DT ,A.ACM_SIGN ,A.ENTRY_TYPE_PCT ,A.PCT_TO_ACM ,A.PIN_PCT_NUM ,B.ACM_TIMING_OPTN FROM PS_GP_ACM_MBR A, PS_GP_ACCUMULATOR B, PS_GP_PIN C WHERE A.PIN_NUM = B.PIN_NUM AND B.ACM_TIMING_OPTN <> '2' AND A.PIN_NUM = C.PIN_NUM AND C.PIN_NUM < 50000000 AND (C.USED_BY = 'A' OR C.COUNTRY = :1) AND EXISTS (SELECT D.PIN_NUM FROM PS_GP_PIN D WHERE A.PIN_MBR_NUM = D.PIN_NUM AND (D.USED_BY = 'A' OR D.COUNTRY = :2) ) ORDER BY A.PIN_MBR_NUM, B.ACM_TIMING_OPTN, A.PIN_NUM] is aborting after fetching 13000 rows repeatedly.
— Checked COBOL DEFINITIONS FOR PS_GP_ACM_MBR in GPPUACCM.cbl.
— Copy book cobol for 'GPPUACCM_S_GETACTB' stored statement is GPCUACTB.
— In copy book cobol file GPCUACTB array ACTB-CNT has been defined with Occurs and Max value as 13000.
Solution
1. Open GPCUACTB.cbl file in edit mode.
2. Increase the MAX and OCCURS value of ACTB-CNT array from 13000 to 50000 in GPCUACTB.cbl file.
3. Save the GPCUACTB.cbl file.
4. Recompile all cobol file.