Creación de registro histórico en una tabla.

En un formulario basado en una tabla necesito crear un sistema de cálculo automático para los contratos de clientes.

Estos clientes, al principio del contrato pagan una cantidad x, digamos $100. Este pago es válido por un año. Transcurrido el primer año el cliente paga el costo inicial del contrato ($100) más el 10% del mismo, o sea $110. Al 2do año paga el costo anterior, es decir, $110 * 10% = $121. Al tercer año: $121 * 10% = $133.10. Y así sucesivamente.

Por lo tanto, en mi formulario "frmCalculo_Contrato" basado en la tabla tblContratos, ya tengo los campos:

IDContrato   = Autonumérico
IDCliente    = Número. Relacionado con la tabla tblClientes.
FContrato    = Fecha. Fecha de inicio del contrato.
CostoInicial = Moneda. Costo inicial del contrato: $100. (Esta cantidad es fija)
CostoAnt     = Moneda. Costo anterior pagado por el cliente.
PorcAumento  = Porciento. 10% de recargo al costo del contrato. (Esta cantidad es fija)
CostoAct     = Moneda. Campo calculado: ([CostoAnt]*[PorcAumento])+[CostoAnt]

Hasta ahi todo más o menos bien (realmente no tengo muy claro todo aún). El problema me radica en que CostoAnt debería automáticamente tomar el valor como de una especie de campo histórico que exista en la tabla. Este "campo histórico" debería, a su vez, tomar el valor del resutado del cálculo del campo: CostoAct.
Con un ejemplo: Este año el costo del contrato para un cliente fue: $110 (Valor del cálculo realizado por el campo CostoAct)
Este valor debería almacenarse en la tabla (campo histórico) para que al cabo de un año aparezca como valor del campo CostoAnterior (o CostoAnt) y que pueda ser usado como base del cálculo del campo calculado: CostoAct.

No sé cómo hacer eso. No sé cómo hacer que el resultado de CostoAct se almacene automáticamente en la tabla, ni cómo hacer que el campo CostoAnterior tome ese valor automáticamente el próximo año.

¿Alguién se le ocurre cómo? ¿O quizás una forma más eficiente de realizar esto?

1 respuesta

Respuesta
2

Por partes:

1º No es necesario el campo Histórico. En el evento Al recibir el enfoque del cuadro de texto Costo Inicial puedes poner

If IsNull([CostoInicial]) Then
CostoInicial = Nz(DLast("costoact", "contratos", "idcliente=" & Me.Idcliente & " and not isnull([costoact])"))
End If

O sea, que al recibir el enfoque el cuadro de texto es nulo, que coja el último valor no nulo de Costo Actual, Con lo cual, e el primer registro tendrás que poner tu el valor de Costo Inicial.

Y en el evento Al recibir el enfoque del cuadro de texto Costo Actual pon

DoCmd. RunCommand acCmdSaveRecord
CostoAct = CostoInicial + (CostoInicial * PorcentajeAumento / 100)

O sea, al recibir el enfoque guarda los valores anteriores y haz el cálculo

¡Gracias! 

Lo apliqué más o menos rápido y parece funcionar. No puedo verlo con detenimiento, porque estoy fuera y regreso tarde. Mañana al regresar del trabajo lo miro con más atención y te comento. ¿OK?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas