Ver Mensaje Individual
  #4  
Antiguo 15-04-2008
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Reputación: 20
Ivanzinho Va por buen camino
No entiendo muy bien lo que hace tu código, pero te voy a explicar como lo hago yo.

El procedimiento que muestro arriba está preparado para el calculo de cuotas de amortización leasing, por lo que voy a realizar unos pequeños cambios en las formulas para acoplarlo a tus necesidades, que se tratan de la amortización de un prestamo. Para el calculo de de la cuota voy a utilizar el metodo francés, que es el más utilizado para estos casos. En caso de querer utilizar otro sólo tendrías que cambiar la formula.

Las paremetros de entrada utilizados son los siguientes :

Código Delphi [-]
  in_codben : integer, //no lo necesitas
  in_anoben : integer, //no lo necesitas
  in_importe : Double, //Importe a amortizar
  in_vresidual : numeric(15,2), //no lo necesitas
  in_interes : Double; //Interes anual del préstamo
  in_periodicidade : integer; //Periodicidad de los pagos en nº de meses : mensual(1), trimestral(3), semestral(6), anual(12), ....
  in_cuotas : integer; //nº de cuotas a amortizar
  in_fecini : date; //Fecha de primera cuota
  in_mult : integer, //no lo necesitas
  in_iso : Double//no lo necesitas

Los campos que no necesitas son utilizados para la gestión de inmovilizado y el cálculo de las cuotas fiscales.

El siguiente paso es calcular la cuota de amortización, aquí realicé unos pequeños cambios para ajustarlo a tus necesitades. El método utilizado es el método francés.

Código Delphi [-]
  //Calculamos el tipo de interés en tanto por 1 que le corresponde a
  //la periodicidad escogida
  v_int = (in_interes * in_periodicidade)/ 1200;

  //Calculamos la cuota utilizando el método francés
  ou_cuota = Redondeo(in_importe * v_int, 2);

  ou_cuota = Redondeo(ou_cuota / (1 - Exp((1 + v_int), - in_cuotas)), 2);

Una vez calculada la cuota a pagar pasamos a calcular qué parte de esa cuota corresponde a la amortización del préstamo y cuál al pago de los intereses en cada período.

Código Delphi [-]
  v_ncuota = 0;//nº de cuota
  v_acumulado = 0;//Carga finaciera acumulada
  ou_pendente = in_importe;//Importe pendiente de amortizar
  v_fecha = in_fecha //Fecha pago de la cuota 

  while (v_ncuota < in_cuotas - 1) do
    begin
      v_ncuota = v_ncuota +1;

      //Carga financiera para el período n. 
      //Aquí tendrás que distinguir si el pago es al principio del período o al final.

      //En el primero de los casos los intereses se calcularían así
      if pago = finalperiodo then
        Ou_cfin = Redondeo((ou_pendente) * v_int, 2)
      else//Y en el segundo de la siguiente manera
      Ou_cfin = Redondeo((ou_pendente - Ou_cuota) * v_int, 2);//Aquí estás pagando los interses de la cuota n+1 por anticipado,
                                                              //Puesto que al pagarse al principio del periodo la primera cuota
                                                              //no tiene intereses.

      //Intereses acumulados
      v_acumulado = Redondeo(v_acumulado + Ou_cfin, 2);

      //Importe pendiente de amortizar
      ou_pendente = Redondeo(ou_pendente - Ou_cuota + Ou_cfin, 2);

      v_fecha = SiguienteFecha(v_fecha, in_periodicidade)

      //La función redondeo redondea un número real pasado como parámetro al número de 
      //decimales también pasados com parámetro

      //La función SiguienteFecha cálcula la fecha de siguiente amortización en base 
      //a la fecha de amortización actual y la periodicidad de las amortizaciones
    end

  //Calculo de la última cuota
  v_ncuota = v_ncuota + 1;

  //Ajustamos los intereses para que la cuota quede correcta, ya que por culpa de los 
  //redondeos se pudo haber cobrado de más o de menos. También se podería dejar los intereses
  //que tocasen y ajustar en el importe de amortización, puedes encontrarte de todo, esto ya 
  //depende de como lo desee realizar a la empresa que realiza el préstamo.
  Ou_cfin = Redondeo(Ou_cuota * (v_ncuota) + in_vresidual - in_importe - v_acumulado, 2);

  //Importe pendiente de amortizar, si todo ha ido bien debería quedar cero
  Ou_pendente = Redondeo(ou_pendente - ou_cuota + Ou_cfin, 2);

Espero que te sirva

Un saúdo.
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita