Ver la Versión Completa : FI Funcion para calcular TIR.
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.
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
Wow, Excelente aporte, y sin duda me ha simplificado muchisimo mi busca para el calculo del CAT!!
Gracias !!
www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web