Trabajando con sumas condicionadas en pie de subformulario.

Tengo un formulario principal (FP) y dos subformularios (SF). En uno de estos SF tengo 4 campos; VALOR, D, F y V. Necesito agregar un campo calculado en el pie del formulario que solo me sume el VALOR donde se cumpla que D,F y V son verdaderos. (D, V y F) son campos Sí/No. Ejemplo:

VALOR D F V

11.00 Sí Sí Sí

13.00          Sí       Sí       Sí

15.00 Sí Sí No

TOTAL: 24.00

2 respuestas

Respuesta
1

Si son datos booleanos (Si/No...) el valor de 'NO' es cero, el de 'SÍ' (en Access: cualquiera que no sea cero) y por defecto utiliza -1.

Solo hay que aplicar la lógica, se suman los campos y si el valor es -3, se acepta como valor a sumar, quedará algo como:

 Suma (([D]+[F]+[V]) =-3 )

Se obtiene un valor negativo o un cero (SÍ = -1) y se soluciona tomando el valor absoluto de la suma o multiplicándola por otro -1

 ABS(Suma (([D]+[F]+[V]) = -3 ))

Suma (([D]+[F]+[V]) = -3 ) * -1

¿Pero cómo le digo a mi campo VALOR que asuma esa condición que me describes? ¿Cómo se escribe eso en el origen de datos de mi campo VALOR para que me muestre la suma de solo los registros que cumplan esa condición?

Como puedes ver en el ejemplo solo me suma los valores donde la moneda se acompaña de Sí, Sí, Sí y donde es Si, Si, No, no lo suma.

Ese campo TOTAL es el que necesito obtener en el pie del subformulario

Cierto, suma los registros que cumplen la condición (y lo complicado es postear códigos con soluciones)

Veamos, se obtiene si el registro cumple la condición que en el diseño del formulario se puede expresar también así: [D] Y [F] Y [V]

Esto deberá devolver (para cada registro) un false o un true, si se multiplica por el campo a sumar devolverá un cero o el campo a sumar (en negativo como efecto colateral) y es lo que se debe de sumar :

((Condición) * (campo a sumar))

Y bien con ABS o multiplicado por -1 se obtiene el valor absoluto

Es problemático postear código (la causa más probable: filtros anti-Spam)

Respuesta
1

Otra forma. Vamos a suponer que ese subformulario depende de la tabla( o consulta) Tabla2 y vamos a suponer que el nombre del cuadro de texto donde quieres que te aparezca la suma se llama TextoA. En sus propiedades-Datos-Origen del control puedes poner

=dsuma("Valor";"tabla2";"a+b+c=-3")

Sólo te sumará aquellos en que se cumpla la condición de que los tres estén marcados

Me toma los valores totales de la tabla de origen y se muestran en millones. Creo que hay que lograr que sume solo los valores del detalle del propio 2do.SF.

He intentado 6 veces ampliarte la respuesta pero esta puta página no me deja. Te decía que si el formulario y el subformulario en cuestión están relacionados por un campo común, por ejemplo IdVenta, la instrucción deberías ponerla como

-3 and Idventa=" & me.idventa & "")

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas