Suma continua en formularios

Access te da automáticamente la opción de suma continua en informes de tal forma que por esa vía uno puede manjar por ejemplo un estado de cuentas con entradas, salidas y saldos, ¿la pregunta es si mediante algún código puede hacerse esto mismo en un formulario o en una consulta? En es caso al modificar una entrada o salida debiera cambiar automáticamente el saldo.

1 Respuesta

Respuesta
1
otra vez, Fernando!   ;)
Si no te importa te contesto empezando con un poquito de teoría porque me gusta que la gente entienda el por qué de unas cosas y no de otras.
El informe te da esa opción porque parte de una "foto fija". Es decir, los registros están "cerrados" y así es fácil coger la información, la sumo y te la muestro.
Si estás en un formulario esa información es dinámica, los registros no están "cerrados" y estás operando con ellos, o bien modificándolos o bien añadiendo de nuevos. Y claro, por eso no hay una opción preestablecida para conseguir lo que quieres.
Efectivamente lo que comentas se podría hacer a través de código. De todas maneras te lo explicaré utilizando consultas y código y así podrás ver más cosas ;)
Doy por supuesto que controlas el tema de las consultas, así que te lo comento un poco en abstracto y a través de un ejemplo (de todas maneras, si tienes problemas para hacerlo, me lo comentas y te lo explico con más detalle):
Opción 1: una única tabla nos recoge las entradas y las salidas
Hacemos una consulta con los campos que queramos de esa tabla y, lógicamente, añadimos los campos "Entrada" y "Salida". En una nueva columna (a la derecha del último campo añadido al grid de la consulta) escribimos:
Saldo: Entradas-Salidas
Convertimos esa consulta en una consulta de totales y agrupamos "Entrada", "Salida" y "Saldo" por suma (y la llamamos, por ejemplo, CEntradasSalidas)
(Y ahora saltamos un poco más abajo en este mensaje, al apartado PASOS COMUNES)
Opción 2: una tabla nos recoge las entradas y otra las salidas
Hacemos una consulta basada en la tabla de entradas y la convertimos en una consulta de totales (llamada, por ejemplo, CEntradas). Agrupamos "Entrada" por suma
Hacemos una consulta basada en la tabla de salidas y la convertimos en una consulta de totales (llamada, por ejemplo, CSalidas). Agrupamos "Salida" por suma
Hacemos una tercera consulta basada en las dos anteriores (evidentemente tenemos algún campo que nos relaciona ambas) y en una nueva columna del grid de esa consulta escribimos:
Saldo: SumaDeEntrada-SumaDeSalida
Guardamos la consulta con el nombre de CEntradasSalidas
PASOS COMUNES
Nota: Doy por supuesto que las anteriores consultas sólo van a dar una línea de información (un solo registro), porque si no no tendría sentido hacer lo que estamos haciendo

Abrimos el formulario en vista diseño y en la cabecera añadimos un textbox, al que llamaremos de titulo Saldo y de nombre txtSaldo.
Cogemos el campo "Entrada" y el campo "Salida" (si operamos con ambos. Si sólo operamos con uno pues cogemos el que tengamos) y en sus propiedades, en el evento "Después de actualizar", le copiamos el siguiente código:
---
Private Sub Entrada_AfterUpdate()
    Dim dbs As DAO.Database
    Dim rst As DAO.Recordset
    Dim valorSaldo As Variant
        'Creamos el recordset
    Set dbs = CurrentDb
    Set rst = dbs.OpenRecordset("CEntradasSalidas")
        'Cogemos el valor del saldo devuelto
        'por la consulta
    valorSaldo = rst.Fields("Saldo").Value
        'Si el valor es nulo nos lanza un aviso
        'y sale del procedimiento
    If IsNull(valorSaldo) Then
        MsgBox "No existe ningún valor en el saldo"
        Exit Sub
    End If
        'Asignamos el valor del saldo al textbox del
        'formulario
    Me.txtSaldo.Value = valorSaldo
        'Cerramos conexiones y liberamos memoria
    Rst. Close
    Dbs. Close
    Set rst = Nothing
    Set dbs = Nothing
End Sub
---
Si queremos que al abrir el formulario también nos lo muestre deberíamos copiar el mismo código en el evento de formulario "Al abrir"
Si entiendes la mecánica no deberías tener problemas para adaptar el código si quisieras añadir tres txtbox en el formulario, uno para entradas. Otro para salidas y otro para saldo. Simplemente deberías definir dos variables más (valorEntrada y valorSalida), coger el valor de los rst correspondientes (valorEntrada= rst. Fields("SumaDeEntrada").Value) y asignarlos al text box (Me.txtEntrada.Value = valorEntrada), y lo mismo para el de salida.
Y eso es todo ;)
Si tienes algún problema o duda me lo comentas. A ver si puedes hacerlo funcionar.
Bueno creo que la cosa no es tan sencilla, de hecho en mi consulta base cada registro además de lo que entra o sale y del saldo hay otros campos (código, producto, fecha, bodega de origen, bodega final), yo todo ya lo tengo armado en un informe, si quieres te mando una imagen del mismo para que te hagas a la idea, necesitaría tu correo.
Gracias
Fernando
No problem. Es [email protected]
Ya me dirás  ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas