Saldo por registro acumulado

Quizás lo que yo necesito es muy sencillo, pero no lo puedo lograr. Tengo una base de datos tipo libro banco, donde tengo los campos entrada, salida, saldo, saldo total.
La cuestión es la siguiente el campo saldo es para ver el saldo de una fecha, donde hago una resta del campo entrada - salida y me da bien el saldo. Ahora cuando quiero mostrar el saldo total, es decir el arrastre de todo lo acumulado, no puedo lograr que me muestre cuanto llevo hasta la fecha. Ej: esto es lo que yo quisiera
Entrada ($20), Salida ($0), Saldo ($20), Saldo Total ($20)
Entrada ($50), Salida ($0), Saldo ($50), Saldo Total ($70)
Entrada (0), Salida ($40), Saldo ($-40), Saldo Total ($30),
Solo que me muestra cuanto saldo Total tengo por registro.

1 respuesta

Respuesta
4
El problema que tienes es que, desde el formulario, no puedes realizar los cálculos necesarios para determinar el Saldo Total a través de un campo calculado. Para ello puedes recurrir a código.
Además, si me dices que el campo Saldo en tu formulario es un campo calculado (Entrada-Salida) en tu tabla no se debe guardar ese valor. Es decir, lo puedes ver en el formulario pero en la tabla no se te muestra.
Voy a ponerte un ejemplo para hacer lo que quieres que se activará después de que introduzcas o bien la cantidad de entrada o bien la cantidad de salida. Voy a suponer que la tabla, a la que llamaré "TDatos", tiene los campos que me has puesto en tu ejemplo. Si los nombres de campos no son iguales tú tendrás que cambiarlos en el código por los correctos. El proceso te rellena los campos Saldo y Saldo Total directamente en la tabla.
Vámonos...
1.- Abre la BD y pulsa la combinación de teclas ALT+F11. Se te abrirá el editor de VB. Te vas a Menú Insertar->Módulo
2.- Te aparecerá el Módulo1, con una o dos líneas ya escritas. Justo debajo de la línea o líneas que te salgan escribes el siguiente código:
...
Public Sub calculaSaldo()
'Creamos las variables necesarias y el recordset
Dim sdoInicio As Integer, vSaldo As Integer
Dim vE As Integer, vS As Integer
Dim rst As Recordset
sdoInicio = 0
Set rst = CurrentDb.OpenRecordset("TDatos")
'Guardamos el registro para que TDatos no esté vacío
DoCmd. RunCommand acCmdSaveRecord
'Nos movemos al primer registro
Rst. MoveFirst
'Iniciamos el proceso de cálculo
Do Until rst.EOF
'Cogemos los valores de entrada y salida y calculamos el acumulado
vE = Nz(rst.Fields("Entrada").Value, 0)
vS = Nz(rst.Fields("Salida").Value, 0)
vSaldo = sdoInicio + vE - vS
With rst
.Edit
'Rellenamos el campo Saldo
.Fields("Saldo").Value = vE - vS
'Rellenamos el campo Saldo Total
.Fields("Saldo Total").Value = vSaldo
.Update
End With
'Arrastramos el acumulado a través de sdoInicio
sdoInicio = rst.Fields("Saldo Total").Value
'Nos movemos al siguiente registro
rst.MoveNext
Loop
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing
End Sub
...
3.- Ahora, en tu formulario de trabajo en vista diseño, sacas las propiedades del campo Entrada y te vas a la pestaña Eventos->Después de actualizar. Si te sitúas en el espacio en blanco que hay a su derecha verás que te aparece un botoncito con puntos suspensivos. Si haces click sobre él te aparecerá una nueva pantalla. Le dices que quieres generar código.
4.- Se te abrirá el editor de VB, con dos líneas por defecto (Private Sub... y End Sub). Esas líneas no debes tocarlas. Entre ellas escribes el siguiente código
...
Private Sub ...
Call calculaSaldo
End Sub
...
5.- Ahora haces lo mismo, pero con el campo Salida, de manera que el código te quede exactamente igual que en el punto anterior.
Y eso es todo. Ahora, cuando introduzcas un valor en Entrada o Salida, automáticamente te calculará los saldos y te rellenará la tabla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas