Access suma de campos con casilla de verificación

Estoy experimentando con Access y estoy trabado en algo quizás simple para ustedes.
Tengo un formulario en el cual quiero insertarle un cuadro de texto y darla la tarea de sumar el campo PAGO pero solo si tiene tildada la casilla de verificación de el campo FACTURADO . Tengo hecho, en este mismo formulario, también desde un cuadro de texto que cuenta todos los CLIENTES - :Cuenta(*) y otro que suma el total del campo PAGO - Suma([Pago]) . Pero no logro que sume del campo PAGO solo los que tienen tildada la casilla de verificación del campo FACTURADO. Intente con - =Suma([Pago]=0)  --  =Suma(abs([FACTURADO])) ---  y me da ERROR o que no se comunica con OLE o algo así. ACLARO que todas esas fórmulas las saque de foros y tutoriales, por lo tanto sepan entender.

2 respuestas

Respuesta
1

Lo más conveniente sería que pusieras una imagen del formulario, pero siempre podrías usar la función Dsum, por ejemplo

TextoX=Dsum("importe","ventas","facturado=true")

Hola, no se si la interprete bien. TextoX seria el cuadro de texto "importe" el campo Pago - ventas no se a que te referís. Puse
en el cuadro de texto desde el form en vista diseño =Dsum("Pago","Facturado=true") me dio ERROR

Las instrucciones tipo Dsum, Dcount, Dlookup se componen de tres partes

1º El campo que tienen que buscar, contar, sumar, etc

2º Donde tienen que buscarlo, sea tabla, consulta o formulario

Estas dos son obligatorias

3º El(los) criterio(s) que delimitan los valores a buscar, es opcional. Por ejemplo, si digo

X=Cuentame("los niños", de Alemania) me cuenta todos los niños de Alemania

Pero si digo

X:Cuentame("los niños", de Alemania, que sean rubios y que sean varones y que se llamen Lotahar") estoy delimitando la suma.

En u caso le estás diciendo que te sume el campo pago, pero al no poner donde debe buscar Access entiende que te refieres a la tabla o consulta Facturado=True y lógicamente ésta no existe.

Vamos a suponer que tengo una tabla Proveedores y una tabla Compras a ese proveedor, y con ellas hago un formulario con subformulario

Si ahora "marco" una casilla

En el cuadro de texto de arriba izquierda me va poniendo la suma acumulada

Por el contrario, si una vez marcados hago clic en el cuadro de texto OtraForma

El código del evento Después de actualizar de la casilla Contabilizar es

DoCmd.RunCommand acCmdSaveRecord
If Contabilizar = True Then
Me.Parent!UnaForma = DSum("importe", "compras", "idcompra=" & Me.IdCompra & " and contabilizar=true")
End If

Observa que en segundo lugar de Dsum le digo que busque ese campo en la tabla Compras.

Por el contrario, si se opta por la segunda opción, el código del evento Al recibir el enfoque del cuadro de texto OtraForma es

Private Sub OtraForma_GotFocus()
OtraForma = DSum("importe", "compras", "idcompra=" & Me.IdCompra & " and contabilizar=true")
End Sub

También le digo que busque en la tabla Compras

GUAUUU AMIGOOO SOS UN CAPO, pero veo que no es para mi. yo tan solo queria darle una orden a un cuadro de texto desde el mismo cuadro de texto insertado en un formulario, trato de adaptar e interpretar todo lo que me has mandado, osea puse =DSuma ( no me aparece DSum) cambio "importe" x Pago que es donde tengo los valores a sumar. Cambio "compras" x consultas_fecha que es el formulario donde me trae la consulta entre fechas. y por ultimo cambio "and contabilidad=true" por el campo que contiene la casilla de verificacion por and Facturado=true. lo paso en limpio 

=DSuma("Pago", "consultas_fechas=" & Me.consultas_fechas & " and Facturado=true")

 me sale ERROR

Vamos a hacer una cosa. Si quieres, repito, si quieres, haz una copia de la tabla con unos cuantos registros inventados, y el formulario y me lo mandas a [email protected]

Si lo haces, en el asunto del mensaje pon tu alias marc310, ya que si no sé quien me escribe ni los abro.

Respuesta
1

Si usas funciones agregadas de dominio, como DSuma() o DCuenta(), puedes añadirle condiciones para que trabajen, por ejemplo, DCuenta("*","TDatos","Facturado=-1") te contará los registros de la tabla "TDatos" cuyo campo "Facturado" sea verdadero (o esté marcado), y DSuma("Pago","TDatos","Facturado=-1") te sumará los pagos de TDatos que tengan la casilla marcada.

Puse tal cual tu opción y me da " La expresión 'Al abrir' que ha especificado como valor de la propiedad de evento produjo el error bla bla "
Quizás fui escueto en la consigna. Voy a intentar explicarlo exactamente .
Tengo una tabla Datos_Clientes la cual tiene los datos personales más campos como Pago Facturado. A todo esto hice un formulario de consulta llamado consultas por fechas que se dispara desde un formulario panel de control que tiene 2 botones Clientes y Consultas . cuando voy a Consulta se abre un ventanita donde pongo desde una fecha hasta otra fecha y me trae un formulario llamado consultas por fechas todos los clientes que vinieron entre esas fechas. Ahora bien, la info que necesito es en base a la lista de clientes que me trae la consulta. ( Ejemplo. Quiero saber cuantos cliente vinieron en enero, de cuanto fue el ingreso total y cuanto fue facturado (ya que no a todos se les hace factura) pude lograr todo menos que me sumo el importe de los FACTURADOS

Me resto aclarar que el campo FACTURADO es de casilla de verificación la cual tildo a los clientes que les facturo y son estos los que no logro que sume
Desde ya muy agradecido

Yo no te sugerí en ningún momento que pusieras nada en el evento " al cargar" ( que también se podría ...), sino que usases esas funciones en vez de Cuenta() o Suma(), pero en los cuadros de texto del formulario, tal y como haces para los totales.

Pero por lo que comentas ahora, la solución es algo más compleja, porque además del criterio de la casilla marcada, tendrás que añadir el / los filtros de fecha.

Ahora no estoy en el pc, pero mñn te amplio la respuesta, a poder sermón un ejemplo.

¡Gracias! 

te he preparado este ejemplo con varias opciones: http://www.filebig.net/files/qSFj3iuUwN 

Te explico:

Hay una tabla TDatos, con entre otros, un campo Pago (moneda) y otro Facturar (de tipo Si/No).

Sobre esta Tabla primero hago una consulta (Consulta1), en la que le pongo como criterio al campo FMovimiento Entre [Fecha Inicial] Y [Fecha Final], para que pida entre que dos fechas quieres mostrar los resultados.

Hay un formulario FMenu desde el que accedes a los distintos formularios de consulta.

Si pulsas en el botón "Consulta Fechas 1a", te preguntará por las dos fechas y te abrirá el formulario ConsultaFechas1a, que está hecho sobre Consulta1. En este formulario, en el pie tienes la cuenta total y la pago total, con =Cuenta("ID")=Suma("Pago") y la cuenta y pagos facturados, con =DCont("ID";"Consulta1";"Facturar=-1") y =DSuma("Pago";"Consulta1";"Facturar=-1") . Sin embargo, verás que estas dos últimas no funcionan porque la consulta pide los parámetros "al vuelo" y no quedan en ningún lado guardados...

Si pulsas en el botón "Consulta Fechas 1b", te preguntará por las dos fechas y te abrirá el formulario ConsultaFechas1b, que también está hecho sobre Consulta1. En este caso, verás que sí calcula los totales facturados, porque lo hago por VBA en el evento "Al cargar" del formulario, recorriendo un clon del recordset del formulario (la consulta ya filtrada)

Si las fechas las escribes en un formulario, tienes las otras dos alternativas de los otros dos botones (ConsultaFechas2 y ConsultaFechas3). Para esto tengo la Consulta2, que es igual a Consulta1 con la diferencia que el criterio está referenciado a los cuadros de texto de FMenu: Entre [Formularios]![FMenu]![Texto3] Y [Formularios]![FMenu]![Texto5].

Si rellenas los cuadros de texto y pulsas el botón "Consulta Fechas 2", te abrirá el formulario ConsultaFechas2, y en el pie del formulario tienes los 4 cálculos (aquí tuve que hacer un truquillo para que me muestre los cálculos "facturados", que no es más que pasarle el foco a esos campos por código al cargar el formulario). En este caso, los cálculos "facturados" los hago sobre la propia Consulta2, con: =DCont("ID";"Consulta2";"Facturar=-1")=DSuma("Pago";"Consulta2";"Facturar=-1")

Si pulsas el botón "Consulta Fechas 3", te abrirá el formulario ConsultaFechas3, y en el pie del formulario tienes los 4 cálculos (de nuevo con el truquillo). En este caso, los cálculos facturados los hago directamente sobre la tabla y no sobre la consulta2, con =DCont("ID";"TDatos";"Facturar=-1 AND FMovimiento Between [Formularios]![FMenu]![Texto3] AND [Formularios]![FMenu]![Texto5]")=DSuma("Pago";"TDatos";"Facturar=-1 AND FMovimiento Between [Formularios]![FMenu]![Texto3] AND [Formularios]![FMenu]![Texto5]").

GRACIAS Sveinbjorn El Rojo, pero creo que ya se cual es el problema, tengo el Access 2007 que no debe ser compatible con el que tienes vos, ya que al querer abrir tu archivo Access me puso como 10 mensajes de error antes de abrirlo y una vez abierto no puedo seguir tu explicación ya que hay funciones que no responden . QUE LIOOOOO
Perdón

Pues ese no ha de ser el problema, porque el ejemplo lo hice con access 2007...

Si quieres cuelga aquí una copia de tu BD, con la tabla, consulta y formularios y un par de datos inventados, y te digo qué hacer para tu caso concreto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas