Monday, March 21, 2011

Calculate EMI (Equated Monthly Instalments) in Infotype 0045

Write your coding in user Exit : PBAS0001 , FM - EXIT_SAPFP50M_002 in the
Include ZXPADU02.

From Indian payroll view , there was a difference in calculation of EMI
amounts , the amount calculated in system differs from the ones calculated
in EXCEL sheet.
The below coding solves the problem.(Same as EXCEL calculation)

EMI Calculation Courtesy Link


*&---------------------------------------------------------------------*
*& Include ZXPADU02
*&---------------------------------------------------------------------*

DATA : i0045 LIKE p0045.
DATA : v_durn TYPE pea_scrmm.
DATA : p_durn(6) TYPE n,
p_intr TYPE p DECIMALS 5,
p_loan TYPE p DECIMALS 2,
v_emi TYPE p DECIMALS 2,
v_dltyp TYPE dltyp.

CHECK sy-tcode = 'PA30'.

CLEAR : p_durn , v_durn , v_emi , p_loan , p_intr , i0045 , v_dltyp.

CASE: innnn-infty.

WHEN '0045'.

SELECT SINGLE dltyp
FROM t506a
INTO v_dltyp
WHERE dlart EQ innnn-subty.

IF innnn-endda = '99991231'.
MESSAGE e208(00) WITH 'Determine end date'.
EXIT.
ENDIF.

CALL METHOD cl_hr_pnnnn_type_cast=>prelp_to_pnnnn
EXPORTING
prelp = innnn
IMPORTING
pnnnn = i0045.

CALL FUNCTION 'HR_HK_DIFF_BT_2_DATES'
EXPORTING
date1 = i0045-endda
date2 = i0045-tilbg
output_format = '04'
IMPORTING
* YEARS =
months = v_durn
* DAYS =
EXCEPTIONS
invalid_dates_specified = 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.

p_durn = v_durn.

*--Interest rate
p_intr = i0045-indin / 1200 .
p_loan = i0045-darbt.

v_emi = ( ( ( 1 + p_intr ) ** p_durn ) - 1 ).

IF v_emi IS NOT INITIAL.
*--Calculate EMI

IF v_dltyp = 'A'.
i0045-anrte = ( p_loan * p_intr ) *
( ( ( 1 + p_intr ) ** p_durn ) /
( ( ( 1 + p_intr ) ** p_durn ) - 1 ) ).
ELSEIF v_dltyp = 'I'.
i0045-tilbt = ( p_loan * p_intr ) *
( ( ( 1 + p_intr ) ** p_durn ) /
( ( ( 1 + p_intr ) ** p_durn ) - 1 ) ).
ENDIF.

ENDIF.

CALL METHOD cl_hr_pnnnn_type_cast=>pnnnn_to_prelp
EXPORTING
pnnnn = i0045
IMPORTING
prelp = innnn.

ENDCASE.

No comments:

Post a Comment