5 de octubre de 2011

Crear tabla de Amortización (método francés)


/***********************************************************************************************
Objetivo: Crear tabla de amortizacion método francés
Fecha: 20/Julio/2011
exec sp_AmortizacionFrances 25000,12,0.85
************************************************************************************************/
Alter Procedure sp_AmortizacionFrances 
 @Prestamo float
,@Periodos smallint
,@Tasa float
As

-- 0. Declara variables

Declare @TasaMens float
Declare @TasaT1 float
Declare @CuotaC1 float
Declare @CuotaC1mT1 float
Declare @Amortizacion float
Declare @UltAmortizado float
Declare @TotAmortizado float
Declare @Cuota float
Declare @Total float
Declare @Interes float
Declare @Contador smallint

-- 1. Crear tabla amortización

If object_id('tempdb..#Amortizacion') is not null drop table #Amortizacion
Create table #Amortizacion (
 Mes smallint
,Total float
,Interes float
,Cuota float
,Amortizacion float
,Amortizado float
)

-- 2. Asignacion valores

-- Set @Prestamo=500
-- Set @Periodos=5
-- Set @Tasa=0.10
Set @TasaMens=@Tasa/12
Set @TasaT1=@Prestamo*@TasaMens
Set @CuotaC1=@Prestamo*((power(1+@TasaMens,@Periodos)*@TasaMens)/(power(1+@TasaMens,@Periodos)-1))
Set @CuotaC1mT1=@CuotaC1-@TasaT1

-- 3. Calcula primera Amortizacion

Insert into #Amortizacion values(1,@Prestamo,@TasaT1,@CuotaC1,@CuotaC1-@TasaT1,@CuotaC1-@TasaT1)


-- 4. Calculo antes ciclo

Set @Amortizacion=@CuotaC1-@TasaT1
Set @UltAmortizado=@CuotaC1-@TasaT1
Set @Total=@Prestamo-@Amortizacion

Set @Contador=2
While @Contador <= @Periodos
Begin
Set @Interes=(@Prestamo-@CuotaC1mT1*(power(1+@TasaMens,@Contador-1)-1)/@TasaMens)*@TasaMens
Set @Cuota=@Prestamo*((power(1+@TasaMens,@Periodos)*@TasaMens)/(power(1+@TasaMens,@Periodos)-1))
Set @Amortizacion=@Cuota-@Interes
Set @TotAmortizado=@Amortizacion+@UltAmortizado
--Amortizacion n
Insert into #Amortizacion values
(@Contador,@Total,@Interes,@Cuota,@Amortizacion,@TotAmortizado)
Set @UltAmortizado=@Amortizacion+@UltAmortizado
Set @Total=@Total-@Amortizacion

Set @Contador=@Contador+1
End

--5. Resultado

Select * from #Amortizacion 
compute sum(interes),sum(Amortizacion),sum(cuota)

8 comentarios:

  1. Excelente trabajo. Gracias!!!!

    ResponderEliminar
  2. me da el siguiente error cuando lo ejecuto: Msg 156, Level 15, State 1, Procedure sp_AmortizacionFrances, Line 77
    Incorrect syntax near the keyword 'compute'.

    ResponderEliminar
  3. delete compute sum(interes),sum(Amortizacion),sum(cuota)
    this is all!

    ResponderEliminar