Suma de valores con condicionales: subformulario access

La cosa es que tengo un subformulario con dos columnas

Columna 1: tarjetas (se ingresan repetidas)

Columna 2: saldo disponible

Lo que necesito es que dentro de un campo independiente (saldo total) sume el saldo de todas las tarjetas que no se repiten.

Ejemplo:

Tarjetas Saldo disponible

12345        $100

87658        $50

12345       $100

87658        $50

Saldo total: $150

1 respuesta

Respuesta
2

Te aconsejaría otra cosa, si no te convence me lo dices y te lo pongo como quieres, pero creo que es mejor. Si tengo una tabla Tabla1

En un formulario, pongo como subformulario Tabla1 y a medida que vayas poniendo datos, en SaldoAcumulado te va poniendo el saldo "total" en ese momento, de esa tarjeta.

El código del evento Después de actualizar del cuadro de texto Saldo es

¿Qué luego quieres saber directamente el saldo acumulado de una tarjeta sin tener que ir al último registro? Puedes, por ejemplo, poner un combinado con las tarjetas y o bien, en un cuadro de texto o bien en un mensaje, usar lo de

textoX=dlast("saldocumulado","tabla1","numtarjeta=" & me.nombredelcombo & "")

Hola Icue, muchas en verdad muchas gracias por tu atención.

El funcionamiento del como lo requiero es por que después necesito realizar operaciones con este salto total, esto es solo la primera parte.

No me sirve si sumo los valores de las tarjetas que se repiten, la cosa es que tengo un formulario y dentro de este un subformulario tabla, cuando ingreso un caso nuevo en el formulario principal el usuario tiene que ingresar los números de tarjetas en el subformulario (estos form están ligados con un campo clave), estas tarjetas se repiten (esto no puedo cambiarlo) y obviamente el saldo también, lo que necesito es realizar la suma solo de la tarjetas únicas de ese caso, dado el proceso no le puedo indicar al usuario que registre solo una vez la tarjeta, si pudiera hacer esto no habría problema ya que lo solucionaríamos con una simple suma de la columna. 

He leído que puede quedar con algo de SQL o no se, la cosa es que no me queda la sintaxis.

Ojala y me este dando a entender y puedas ayudarme, y  unas vez mas gracias.

Vamos a ver si lo he entendido. Supongamos que tengo la tabla

Como puedes ver las cuentas que no se repiten son la 3333 y la 5555. Construyo una consulta con el diseño

Que me queda

Entonces, en el formulario, como no sé cuando lo vas a calcular, le pongo el código en el evento Al recibir el enfoque del cuadro de texto Texto 5

Que es la suma de 80+111, cuentas que no se repiten. El código es

Texto5 = DSum("suma", "consulta1")

Mil disculpas, por favor intentemos una vez mas.

Los saldos de las tarjetas repetidas siempre serán los mismos lo que necesito hacer es que la suma solo las considere una vez aun que el valor se duplique varias veces. No quiero omitir la suma de los valores repetidos lo que requiero es que en la suma se les considere solo una vez.

utilizare tu ejemplo indicando el valor que requiero (los saldos de las tarjetas que se repiten siempre serán los mismos por definición, y en la suma solo debo considerar uno ):

NumTarjeta  - Saldo

1234               100,00 (como el valor se repite solo se suma una vez)

1234               100,00 (ya no se debería considerar)

2222               75,00 (como el valor se repite solo se suma una vez)

3333               80,00 (incluido en la suma)

2222               75,00 (ya no se debería considerar)

5555               111,00  (incluido en la suma)

el valor que requiero de esto es : 366,00

Te comento que he conseguido hacer algo, pero no es optimo ni muy funcional.

en el subformulario, en el campo saldo he colocado una validación del registro anterior (Dlast)en el evento al perder enfoque , si es igual al nuevo registro entonces mando a poner un cero en una nueva columna añadida, si son diferentes entonces mando el valor del saldo a esta columna, y al final aplico suma de esta columna y me sale el resultado esperado, PEROOOO esto implica indicarle al usuario que antes de ingresar los datos agrupe las tarjetas para que la validación del campo funcione, y no puedo indicarle eso al usuario, la otra desventaja es que si el usuario regresar a la fila anterior , pone foco en el campo saldo y luego sale, el valor de la suma se altera .

Si esto queda voy a españa(o adonde sea) y nos tomamos algo , y si no , ps tambien. jeje, muchas gracias por tu apoyo.

Supongamos que tenemos la tabla

Con ella haces la consulta y en sus propiedades le pones que muestre sólo Valores únicos, o sea que no se repitan los duplicados

Con lo que sólo mostrará

Y en el formulario, en el evento Al cargar le pones 

Texto5=dsum("saldo","cosnulta1")

Y si vas a usar el formulario para ir poniendo datos, te aconsejaría que en el evento después de actualizar del cuadro de texto saldo pusieras

me.parent!texto5=dsum("saldo","consulta1"), y así si rellenas un nuevo registro

Listo ya casi queda. , y discúlpame por favor por no ser lo suficientemente claro, Solo que lo anterior calcula la suma de todos los valores de la tabla, se va acumulando y no requiero eso.

Cada registro en el formulario principal es un caso nuevo,  cada caso tiene una serie de tarjetas, lo que requiero es que la suma se muestre y guarde sobre ese caso y no sobre el total de registros de la tabla.

El formulario que tengo tiene un buscador y busca por numero de caso, entonces la suma debe realizarse con los valores (saldos) de ese caso, las operaciones que necesito realizar después deben calcularse sobre la suma del saldo total de ese caso.

Mil gracias por tu atención a esta problemática.

Como en la pregunta, en ningún momento has mencionado eso del número de caso, no lo he puesto. Todas las funciones Dsum, Dcount, Dlookup, Dmin, etc tiene una tercera parte que es la que diferencia sobre que registros o valores se va a aplicar esa función, Por ejemplo,

Texto8=Dsum("importe","ventas,"pais=""alemania""") es decir suma los importes de la tabla Ventas en que el campo Pais sea alemania.

En tu caso añádele a la consulta ese campo NumCaso y en el formulario, cambia lo que hay por

Texto5=Dsum("saldo","Consulta1","numcaso=" & me.numcaso & "")

Y si es en el subformulario sería

me.parent!texto5=dsum("saldo","consulta1","numcaso=" & me.parent!numcaso & """)

Lo entiendo parece que va a funcionar, sin embargo realice un ejemplo en mi computadora personal y no en la del trabajo en donde tengo el proyecto y me arroja un error, 

Se ha producido el error "2471" en tiempo de ejecución:

La expresión que ha especificado como parámetro de la consulta produjo el error "Caso1".

Option Compare Database

Private Sub Form_Load()
Texto15 = DSum("saldo", "Consulta1", "caso = " & Me.caso & "")
End Sub

Quedo atento a tu amable respuesta.

Cuando una variable es numérica( que es lo que he supuesto al llamarse el campo Num de caso), las expresiones se tienen que poner

......."caso=" & me.caso & "")

Si la variable es texto se pone

........"caso='" & me.caso & "'")

O sea, apostrofe comillas & y cierra comillas apostrofe comillas

Si la variable fuera de fecha sería

........."caso=#" & me.caso & "#")

Excelente a si es, ya quedo,  ahora sabes como le hago para que el valor de la suma se actualice de inmediato ?

por ejemplo cuando abro el formulario sale un valor que nada que ver con el registro actual, tengo que entrar y reescribir los saldos nuevamente para que la suma se actualice, luego si es un nuevo caso al estar ingresando las tarjetas y saldo no calcula la suma hasta ingresar otra tarjeta, pero esta ultima no la considera en el suma hasta ingresar otro registro.

no se si me di a entender... muchas gracias por todo.

Al no saber como tienes construido el formulario, tengo que suponerlo. Como el cursor no sale en las imágenes le he puesto que si el campo tiene el foco se ponga de color. Si tengo el formulario así

Cuando añado un numtarjeta y una cantidad(el cursor todavía está en el control saldo donde he escrito 400. Si pulso Enter

Automáticamente me "actualiza" la suma. Por eso te decía que si ibas a escribir en el propio formulario, pusieras tambien el código en el evento Después de actualizar del control Saldo.

Mira, creo que lo mejor es que si quieres, repito, si quieres hagas una copia con datos inventados de tu tabla y el formulario y me la mandas a [email protected] y la miro.

Si lo haces, en el asunto del mensaje pon tu alias, desde luego no anónimo, ya que si no sé quien me escribe no los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas