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 de Neckkito Nck
1
1
Neckkito Nck, Access... ser o no ser. Esa es la cuestión
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