Suma selectiva de campos Access 2010
Partiremos de que el contenido del subformulario tiene este origen de datos (extraído de la exposición inicial):
..... en el subformulario detalle esta integrado por una tabla la cual es filtrada por una instruccion e SQL, ...
Una SQL de selección consta por lo menos de tres partes:
.- La relación de datos a devolver (los campos)
.- El origen de datos que contiene al conjunto (Tabla generalmente)
.- Las condiciones a cumplir (normalmente lo que viene detrás del 'Where')
En la función DSum, su tercer parámetro (...","[Gro]= '1A'" ...) es la condición actual, pero como DSum trabaja con todos los datos (la tabla), se tendría que aplicar TAMBIEN el filtro que limita los datos del subformulario, esto es:
DSum tiene que cumplir las dos condiciones, una que solo afecte a los datos del subformulario (el actual filtro de su origen de datos) mas la otra, que esos datos cumplan con ([Gro]= '1A')
En la practica:
Si el origen de datos fuera algo como:
Select Campo1, Campo2, Campo3 Form Tabla_22 Where CampoZ = 'Rojo'
El DSum tendría que unir ambas condiciones en una sola:
Actual ==> DSuma("[Al_in]","Datos_does","[Gro]= '1A'")
Corregida ==> DSuma("[Al_in]","Datos_does","CampoZ = 'Rojo' And [Gro]= '1A'")
Propongo una alternativa matemática:
.- sumar solo los datos del formulario en base a que en si ya son un conjunto,
(esto tiene un inconveniente y es que la función SUM no admite la aplicación de filtros, y es la parte en la que las matemáticas básicas entran a funcionar.)
Nos basaremos en que:
XX * 1 = XX
XX * 0 = 0
- En Access True = -1, False = 0
- La función ABS nos devuelve valores absolutos (sin signo)
= SUMA ([Al_in] * ABS("[Gro]= '1A'"))
(por cierto, funciona en cualquier versión de Access, no solo A'2010)