PDA

Ver la Versión Completa : FI Funcion para calcular TIR.


alegg
27/08/08, 20:45:26
Estimados, acudo a su sabiduria, estoy trabajando en un reporte que debe calcular la TIR ( tasa interna de rendimiento). alguien conoce un funcion que haga este calculo?
Gracias.

cpozo
04/09/08, 19:51:07
te adjunto el codigo

FUNCTION ZCALCULATE_TIR .
*"----------------------------------------------------------------------
*"*"Interfase local
*" EXPORTING
*" VALUE(C_TIR) TYPE CHAR20
*" TABLES
*" VALORES STRUCTURE ZTIR
*"----------------------------------------------------------------------
***********************************************************************
*****
***** Tabla ZTIR con la siguientes definición:
***** Campo Clave Not Null Tipo Campo
***** ISUBN X X /AIN/DM_QUANTITY
*****
************************************************************************

DATA: R TYPE /AIN/DM_QUANTITY VALUE 1,
R0 TYPE /AIN/DM_QUANTITY VALUE 0,
R1 TYPE /AIN/DM_QUANTITY VALUE 1.

DATA: TIR TYPE /AIN/DM_ACT_QUANTITY.

R0 = ( 1 / 99999999999999 ).
TOLERANCIA = R0.
PERFORM CALC_TIR TABLES VALORES CHANGING TIR R0 R1.

*****
R0 = ( 1 / 99999999999999 ).
IF TIR = R0.
R0 = R0 * -1. " 0.00000000000001-
R1 = ( 1 - ( 1 / 10 ) ) * -1. " 0.90000000000000-
PERFORM CALC_TIR TABLES VALORES CHANGING TIR R0 R1.
ENDIF.
WRITE TIR TO C_TIR.

ENDFUNCTION.




*******Include: LZCALCULATE_TIRTOP

FUNCTION-POOL ZCALCULATE_TIR. "MESSAGE-ID ..

DATA: F_EXIT(1),
TOLERANCIA TYPE /AIN/DM_QUANTITY.




********Include: LZCALCULATE_TIRF01

*----------------------------------------------------------------------*
***INCLUDE LZCALCULATE_TIR2F01 .
*----------------------------------------------------------------------*
*&---------------------------------------------------------------------*
*& Form CALC_TIR
*&---------------------------------------------------------------------*
FORM CALC_TIR TABLES VALORES STRUCTURE ZTIR
CHANGING R
R0
R1.

DATA: EXP TYPE I.

DATA: M0 TYPE /AIN/DM_QUANTITY.
DATA: M1 TYPE /AIN/DM_QUANTITY.
DATA: DIF TYPE /AIN/DM_QUANTITY.

EXP = 0.
LOOP AT VALORES.
M0 = M0 + ( VALORES-ISUBN / ( ( 1 + R0 ) ** EXP ) ).
EXP = EXP + 1.
ENDLOOP.
M0 = ABS( M0 ).

EXP = 0.
LOOP AT VALORES.
M1 = M1 + ( VALORES-ISUBN / ( ( 1 + R1 ) ** EXP ) ).
EXP = EXP + 1.
ENDLOOP.
M1 = ABS( M1 ).

DIF = ABS( ABS( R0 ) - ABS( R1 ) ).
IF DIF > TOLERANCIA.
IF M1 < M0.
R0 = ( ( R1 - R0 ) / 3 ) + R0.
R1 = R1.
ELSE.
R1 = R1 - ( ( R1 - R0 ) / 3 ).
R0 = R0.

ENDIF.
PERFORM CALC_TIR TABLES VALORES CHANGING R R0 R1.
IF F_EXIT = 'X'.
EXIT.
ENDIF.
ELSE.
R = R0.
F_EXIT = 'X'.
ENDIF.
ENDFORM. " CALC_TIR

Jaya
28/01/11, 15:01:59
Wow, Excelente aporte, y sin duda me ha simplificado muchisimo mi busca para el calculo del CAT!!

Gracias !!