Pregunta sobre lógica visual basic en formularios access. ¿Qué es mejor?

En un formulario con varios campos donde la actualización de los datos de unos afecta a otros.
¿Cuál es la mejor forma de plantearlo? La más prolija y la que sea más limpia en el código:

1. Poner que después de actualizar un campo POR el campo Y sea igual a tal cosa. Ej:
Después de actualizar campo " Cantidad "
Total = Cantidad * Precio.
Y así obtener el total.
2. Declara primero cada campo:

Total = Cantidad * Precio
Otro campo = X * Y
Luego poner que después de actualizar un campo: Haga un Requery o refresh, de todos los campos del formulario o de los campas que quiero que se actualicen:

Después de actualizar campo " Cantidad " o Después de actualizar algún campo de "Formulario"

Total. Requery
Otro campo. Requery

o

Formulario. Requery.
Espero que se entienda.. Tengo una duda en como se plantea un formulario con varios campos en los cuales se introducen datos a lo largo del tiempo y actualizado o cambiando un campo afecta a uno o varios otros campos del mismo formulario.
Tengo que empezar a escribir el código y no quiero hacerlo mal desde la estructura lógica!
Escucho sus experiencias y ayuda!

2 respuestas

Respuesta
1

Si la actualización del dato implica cálculos, como el caso de Total que planteas, yo usaría la primera opción que comentas, es decir, el evento "después de actualizar", pero siempre teniendo en cuenta los posibles valores nulos que pueda haber. Por ejemplo, en el caso de precio y cantidad para calcular un total:

Private Sub Cantidad_AfterUpdate()

Me.Total=Nz(Me.Cantidad,0)*Nz(Me.Precio,0)

End Sub

Private Sub Precio_AfterUpdate()

Cantidad_AfterUpdate

End Sub

Es decir, al actualizar el valor de cantidad, calcula el Total como el producto, pero usando la función Nz para convertir los posibles "blancos" de las casillas en un valor numérico (0 en este caso) y poder realizar la operación. Al actualizar el valor de precio, llamas al procedimiento Después de actualizar del campo Cantidad, y te evitas tener que repetir el código.

Otra opción, si tienes muchos cálculos o "actualizaciones que hacer, sería crearte un procedimiento con todas ellas y llamarlo en cada caso. Siguiendo con el ejemplo, y añadiendo cálculo de BI, Impuestos y Total, y suponiendo que tienes estos campos: Cantidad, Precio, BI (para la Base imponible), TIVA (donde escoges el % de IVA, por defecto el 21%), IVA (donde muestras el importe de IVA) y Total, que será la BI + IVA:

Private Sub Calcula()

Me.BI=Nz(Me.Cantidad,0)*Nz(Me.Precio,0)

Me.IVA=Me.BI*Nz(Me.TIVA,0.21)

Me.Total=Me.BI + Me.IVA

End Sub

Este sería el procedimiento que unifica todos los cálculos, y luego harías:

Private Sub Cantidad_AfterUpdate()

Calcula

End Sub

Private Sub Precio_AfterUpdate()

Calcula

End Sub

Private Sub TIVA_AfterUpdate()

Calcula

End Sub

Muy bueno! Excelente, solo una duda más respecto a esto:
¿Cuál seria la forma de hacer que si cualquier campo del formulario se actualiza o cambia ejecute el procedimiento "Calcula"?
Para no tener que poner el procedimiento "Calcula" en cada campo del formulario por separado.

No conozco la forma de hacer eso, tendrías que ir probando los eventos del formulario a ver si encuentras uno que te sirva (que no sé si lo habrá).

De todos modos, no es lo habitual tener que hacer esa llamada con todos los campos... o al menos, a mi nunca se me dio el caso...

Respuesta
1

Si se desea que TODAS las modificaciones de datos impliquen el cálculo yo me decantaría por el Form_AfterUpdate

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas