Question:
HAI,
WE ARE USING A FEAUTURE VAC25 . WE HAVE WRITTEN A CUSTOM PROGRAM TO CALCULATE THE LEAVE ENTITLEMENT (IT0005) .IT WILL CALUCULATE THE NO.LEAVES BASED ON EMP. YEARS OF SERVICE.
IT WAS WORKING IN 4.0B VERSION. NOW WE HAVE TRANSFERRED THAT PROGRAM TO 4.6C AS PART OF OUR UPGRADATION. BUT THE SAME PROGRAM GIVING ERROR.
FOLLOWING IS THE PROGRAM.ERROR IS CALLING PROGRAM IS HAVING MORE PARAMETERS.BUT OUR PROGRAM IS HANDLING TWO PARAMETERS.
WE ASSIGNED THIS PROGRAM IN PE03 TRANSACTION.
ATTRIBUTES OF EDIT FEATURE ARE :
000010 ---- &LVNUM(ZHRVAC25), NEXTR A
000020 &LVTYP=01,
WHATS THE FUNCTION EXT_CALL_F ??
IS IT A USER EXIT..?ARE WHERES THIS PROGRAM (OUR CUSTOM PROGRAM) IS CALLED BY TRANSACTION PA30..?
CAN ANYBODY HELP ME..?
REGARDS
DURGAA
nOTE : BELOW IS THE PROGRAM CODE.
TABLES: PME03, P0041, P0001.
*---------------------------------------------------------------------*
* FORM EXT_CALL_F *
*---------------------------------------------------------------------*
* called by feature VAC25 to compute leave entitlement based on *
* date joined and employee subgroup. *
*---------------------------------------------------------------------*
* --> BACK : return computed leave entitlement in text form *
* --> STATUS : 0 - ok (default) *
* 2 - error (same as operation ERROR in decision tree *
*---------------------------------------------------------------------*
FORM EXT_CALL_F USING VAC25 BACK STATUS .
DATA: JOIN-DD TYPE I, "joined day
JOIN-MM TYPE I, "joined month
JOIN-YYYY TYPE I, "joined year
ENTITLE1 TYPE P DECIMALS 2, "ent from 1 Jan to 1 day b4 anniv
ENTITLE2 TYPE P DECIMALS 2, "ent from annv. date to year end
ENTITLE TYPE P DECIMALS 2, "total entitlement
ENTITLEX(7), "entitlement in character form
LEN_OF_SERV1 TYPE I, "entitlem yr - joined yr - 1
LEN_OF_SERV2 TYPE I, "entitlem yr - joined yr.
FYE1 TYPE I, "full yr entitlem for len_of_serv1
FYE2 TYPE I, "full yr entitlem for len_of_serv2
LEAPYR TYPE I. "check for leap year
DATA: DAY-IN-MTH-TAB(24) VALUE '312831303130313130313031',
DAY-IN-MTH TYPE I,
TAB-OFFSET TYPE I.
*-------------------------------------------------------------------
* Set initial value to some of the fields for computation
*-------------------------------------------------------------------
IF NOT P0041-DAT01 IS INITIAL.
JOIN-MM = P0041-DAT01+4(2). "get joined date from
JOIN-DD = P0041-DAT01+6(2). "infotype 0041.
JOIN-YYYY = P0041-DAT01+0(4).
ELSE.
JOIN-MM = 12.
JOIN-DD = 31.
JOIN-YYYY = SY-DATUM+0(4).
ENDIF.
LEAPYR = PME03-BEGDA+0(4) MOD 4.
IF LEAPYR = 0. "check leap year for
DAY-IN-MTH-TAB+2(2) = '29'. "Feburary month
ENDIF.
TAB-OFFSET = ( JOIN-MM - 1 ) * 2. "get number of days
DAY-IN-MTH = DAY-IN-MTH-TAB+TAB-OFFSET(2). "for joined month
LEN_OF_SERV1 = PME03-BEGDA+0(4) - JOIN-YYYY.
LEN_OF_SERV2 = LEN_OF_SERV1 + 1.
IF PME03-BEGDA+0(4) >= '2001'.
IF P0001-STELL = '10016986'. "sr captain grade 3.
PME03-PERSK = 'SH'.
ELSEIF P0001-STELL = '10017306'. "chief captain
PME03-PERSK = 'SG'.
ENDIF.
PERFORM GET-FULL-YEAR-ENTITLEM2 USING: LEN_OF_SERV1 FYE1,
LEN_OF_SERV2 FYE2.
ELSE.
PERFORM GET-FULL-YEAR-ENTITLEM USING: LEN_OF_SERV1 FYE1,
LEN_OF_SERV2 FYE2.
ENDIF.
*-------------------------------------------------------------------
* Compute entitlement from 1st Jan to 1 day before anniversary day
* (entitle1) and from anniversary day to year end (entitle2).
* Add entitle1 and entitle2 to get total entitlement.
*-------------------------------------------------------------------
ENTITLE1 = ( ( JOIN-MM - 1 ) + ( ( JOIN-DD - 1 ) / DAY-IN-MTH ) )
* ( FYE1 / 12 ).
ENTITLE2 = ( ( 12 - JOIN-MM ) +
( ( DAY-IN-MTH - JOIN-DD + 1 ) / DAY-IN-MTH ) ) * ( FYE2 / 12 ).
ENTITLE = ENTITLE1 + ENTITLE2.
ENTITLEX = ENTITLE. " convert result to character format
BACK = ENTITLEX. " store in BACK for passing back to VAC25
ENDFORM.
*---------------------------------------------------------------------*
* FORM GET-FULL-YEAR-ENTITLEM *
*---------------------------------------------------------------------*
* Get full year entitlement base on length of service *
*---------------------------------------------------------------------*
* --> LEN_OF_SERV : length of service (pass in) *
* --> FYE : Full Year Entitlement (return) *
* for leave entitlement year 2000 and below
*---------------------------------------------------------------------*
FORM GET-FULL-YEAR-ENTITLEM USING LEN_OF_SERV FYE.
CASE PME03-PERSK.
WHEN 'SA'. "EVP & above
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN OTHERS. FYE = 28.
ENDCASE.
WHEN 'SB' OR 'SC' OR 'SX' OR 'SY'. "AVP to SVP
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2. FYE = 21.
WHEN 3. FYE = 22.
WHEN 4. FYE = 23.
WHEN OTHERS. FYE = 24.
ENDCASE.
WHEN 'SD'. "AM and Mgr
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2. FYE = 18.
WHEN 3. FYE = 21.
WHEN 4. FYE = 22.
WHEN 5. FYE = 23.
WHEN OTHERS. FYE = 24.
ENDCASE.
WHEN 'SE' OR 'SZ'. "Exe. and Senior Exe
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2. FYE = 18.
WHEN 3. FYE = 19.
WHEN 4. FYE = 20.
WHEN 5 OR 6 OR 7 OR 8 OR 9. FYE = 21.
WHEN OTHERS. FYE = 24.
ENDCASE.
* when 'SF' or 'SG'. "Senior Supervisor & Sup
WHEN 'SF' OR 'SG' OR 'SW'. "Senior Supervisor & Sup & Confid. staf
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2 OR 3 OR 4. FYE = 14.
WHEN 5 OR 6 OR 7 OR 8 OR 9. FYE = 19.
WHEN OTHERS. FYE = 21.
ENDCASE.
* when 'SG'. "Supervisor
* case len_of_serv.
* when 0. fye = 00.
* when 1 or 2 or 3 or 4. fye = 14.
* when 5. fye = 15.
* when 6. fye = 16.
* when 7. fye = 17.
* when 8. fye = 18.
* when 9. fye = 19.
* when 10. fye = 20.
* when others. fye = 21.
* endcase.
WHEN 'SH'. "Asst Sup
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
* when 1 or 2 or 3 or 4. fye = 10.
WHEN 1 OR 2 OR 3 OR 4. FYE = 12.
* when 5 or 6 or 7 or 8 or 9. fye = 14.
WHEN 5 OR 6 OR 7 OR 8 OR 9. FYE = 15.
WHEN 10 OR 11 OR 12 OR 13 OR 14. FYE = 18.
WHEN OTHERS. FYE = 21.
ENDCASE.
WHEN 'SI' OR 'SJ' OR 'SK' OR 'SL' OR 'SM' OR 'SQ' OR 'ST'. "junior
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2 OR 3 OR 4. FYE = 10.
WHEN 5 OR 6. FYE = 12.
WHEN 7 OR 8 OR 9. FYE = 14.
WHEN 10 OR 11 OR 12. FYE = 16.
WHEN 13 OR 14. FYE = 18.
WHEN OTHERS. FYE = 20.
ENDCASE.
WHEN OTHERS. "none of the above
FYE = 00.
ENDCASE.
ENDFORM.
*---------------------------------------------------------------------*
* FORM GET-FULL-YEAR-ENTITLEM2 *
*---------------------------------------------------------------------*
* --> LEN_OF_SERV *
* --> FYE *
* for leave year 2001 and above (CA2000)
*---------------------------------------------------------------------*
FORM GET-FULL-YEAR-ENTITLEM2 USING LEN_OF_SERV FYE.
CASE PME03-PERSK.
WHEN 'SA'. "EVP & above
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN OTHERS. FYE = 28.
ENDCASE.
WHEN 'SB' OR 'SC' OR 'SX' OR 'SY'. "AVP to SVP
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2. FYE = 21.
WHEN 3. FYE = 22.
WHEN 4. FYE = 23.
WHEN OTHERS. FYE = 24.
ENDCASE.
WHEN 'SD'. "AM and Mgr
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2. FYE = 18.
WHEN 3. FYE = 21.
WHEN 4. FYE = 22.
WHEN 5. FYE = 23.
WHEN OTHERS. FYE = 24.
ENDCASE.
WHEN 'SE' OR 'SZ'. "Exe. and Senior Exe
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2. FYE = 18.
WHEN 3. FYE = 19.
WHEN 4. FYE = 20.
WHEN 5 OR 6 OR 7 OR 8 OR 9. FYE = 21.
WHEN OTHERS. FYE = 24.
ENDCASE.
WHEN 'SF' OR 'SG' OR 'SW'. "Senior Supervisor & Sup & Confid. staf
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2 OR 3 OR 4. FYE = 14.
WHEN 5 OR 6 OR 7 OR 8 OR 9. FYE = 19.
WHEN OTHERS. FYE = 21.
ENDCASE.
WHEN 'SH'. "Asst Sup
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2 OR 3 OR 4. FYE = 13.
WHEN 5 OR 6 OR 7 OR 8 OR 9. FYE = 16.
WHEN 10 OR 11 OR 12 OR 13 OR 14. FYE = 19.
WHEN OTHERS. FYE = 21.
ENDCASE.
WHEN 'SI' OR 'SJ' OR 'SK' OR 'SL' OR 'SM' OR 'SQ' OR 'ST'. "junior
CASE LEN_OF_SERV.
WHEN 0. FYE = 00.
WHEN 1 OR 2 OR 3 OR 4. FYE = 12.
WHEN 5 OR 6 OR 7 OR 8 OR 9. FYE = 15.
WHEN 10 OR 11 OR 12 OR 13 OR 14. FYE = 18.
WHEN OTHERS. FYE = 20.
ENDCASE.
WHEN OTHERS. "none of the above
FYE = 00.
ENDCASE.
_________________
Durgaa
Answer:
Why are you still using I0005 in 4.6c ? AFAIK it is not supported in that version. Even if it is, you'll definitely need to move to I2006 once the next upgrade comes around.
_________________
--------------------
Jeremy
Answer:
It's highly recommended not to use IT0005 within 4.6c. You should transfer all entitlements to IT2006 with RPTLEACONV. Try automatic quota accrual through time evaluation or report RPTQTA00. Refer to the appropriate sector of IMG. You may calculate previous employement by entering a dummy date at IT0041 and grant entitlements based on this date. It's not so painful, but if you want to adjust manually the proposed entitlements be careful once the system locks them if you produce them automatically. Good luck!