Access - Suma selectiva de campos Access 2010

 
Vista:
sin imagen de perfil

Suma selectiva de campos Access 2010

Publicado por Arturo (8 intervenciones) el 08/06/2017 17:36:20
Tengo un formulario principal, con tres subformularios, 1.- Detalle, 2.- Totales, 3.- Informacion gnal, en el subformulario detalle esta integrado por una tabla la cual es filtrada por una instruccion e SQL, en el formulario ppal, tengo un cuadro combinado con los siguientes datos ejemplo(1A,1B ...etc) a cada dato selecionado le asigno un valor en un cuadro de texto, quiero sumar todos los 1A, al hacer el filtro en l tabla y uso la formula =DSuma("[Al_in]","Datos_does","[Gro]= '1A'"), pero me suma todos los 1A de la tabla y solo necesito que me sume los que se filtran desde esl formulario principal. ojala y em puedan ayudar.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Suma selectiva de campos Access 2010

Publicado por Anonimo (3312 intervenciones) el 09/06/2017 08:44:06
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)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Suma selectiva de campos Access 2010

Publicado por Arturo (8 intervenciones) el 09/06/2017 17:33:16
Muchas gracias por tu respuesta!

1.- Esta es la consulta que hago para seleccionar el Ct de mi tabla detalle
Me.Datos_does.Form.RecordSource = "select....from datos_does where CT like '" & Me.Texto0.Text & "*'"

La primer formula quedaria asi..
=DSuma("[Al_in]","Datos_does"," [CT] =Formularios![Formulario1]![Texto0] and [Gro]= '1A'")
Pero no me funciona :-/

2- La funcion con =Suma([Al_In]*Abs("[Gro]='1A'"))
me da error
la funcion suma con ABS solo me ha funcionado asi =Suma(Abs([Gro]="1A")), pero es parte de otro porceso que hago...

El punto de partida del sistema es el primer filtro, ya que de la tabla detalle voy a los registros que necesito, por tal motivo es fundamental siempre filtrar
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma selectiva de campos Access 2010

Publicado por Anonimo (3312 intervenciones) el 09/06/2017 21:38:27
Al aplicar la función, no se tiene en cuenta que Access no evaluara lo que este escrito entre comillas (generalmente la parte constante) y en ella se define un campo asi:

"," [CT] =Formularios![Formulario1]![Texto0] and [Gro]= '1A'")

Eso es correcto en castellano, pero irreconocible en VBA (el motor de Access 'habla' en ingles), lo correcto seria asi:

"," [CT] =Forms![Formulario1]![Texto0] and [Gro]= '1A'")

Al respecto de que no funcione SUM, .... es un claro error por mi parte al intentar ser fiel a los datos aportados (utilizar un copy&paste)

Puedes intentarlo asi:
=Suma([Al_In]*Abs([Gro]= "1A"))

Cuidado con .TEXT, esa propiedad solo la tiene el campo activo y contiene lo que se esta escribiendo 'en tiempo de ejecucion', el valor que tendrá en cualquier otro caso será .Value o no poner nada, ya que value es la opción que toma por defecto.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Suma selectiva de campos Access 2010

Publicado por Arturo (8 intervenciones) el 09/06/2017 22:20:12
Me sigue presentando error en: =DSuma("[Al_ins]","Datos_does"," [CT] =" & [Formularios]![Formulario1]![Texto0])
No me deja poner forms, cambia directo a fomularios, tal vez es por la version de mi office..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma selectiva de campos Access 2010

Publicado por Anonimo (3312 intervenciones) el 09/06/2017 23:22:15
Yo aprecio algunas diferencias entre las versiones de lo que creas, en una (la primera y por lo que considere que necesitabas 'Foms') es porque estaba entre comillas dobles TODA la expresión:

primer formula quedaria asi..
=DSuma("[Al_in]","Datos_does"," [CT] =Formularios![Formulario1]![Texto0] and [Gro]= '1A'")
Pero no me funciona :-/


En la segunda es normal que no permita FORMS (bueno, permitir si lo permite, reconoce y traduce), pero lo puede hacer y lo hace porque NO ESTA dentro de una expresión de texto, sino 'afuera' y concatenado con '&':
=DSuma("[Al_ins]","Datos_does"," [CT] =" & [Formularios]![Formulario1]![Texto0])

Asumo que es complicado lo de en cristiano o en guiri, pero asume que es similar a :
En casa ==> en zapatillas
Fuera de casa ==> con zapatos

Solo hay que tener consciencia de donde se esta para utilizar el calzado correcto

Crea una condición SIN VARIABLES (datos fijos) que te de resultados correctos y tras ello se le repondrán las variables.

Otras opción:
Crea una CONSULTA de selección que te de esos resultados, (los elementos a sumar) ponla en modo 'VISTA SQL' y observa que es lo que hay detrás del WHERE que es donde comienza el filtro.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma selectiva de campos Access 2010

Publicado por Arturo (8 intervenciones) el 10/06/2017 02:22:15
La formula sigue dando error, aun filtrando
=DSuma("[Al_ins]","Datos_does"," [CT] =" & [Formularios]![Formulario1]![Texto0]) y [Gro]= '1A'")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Suma selectiva de campos Access 2010

Publicado por Anonimo (3312 intervenciones) el 11/06/2017 00:35:27
En el propio formulario:
=DSuma("[Al_ins]";"Datos_does";" [CT] ='" & [Texto0] & "' and [Gro]= '1A'")

En cualquiera otro (con la condición de que este abierto el formulario de referencia).;
=DSuma("[Al_ins]";"Datos_does";" [CT] ='" & [Formularios].[formulario1].[Texto0] & "' and [Gro]= '1A'")

Si la configuración regional no fuera española, se aplicara el separador adecuado al idioma (generalmente la coma simple en lugar del punto coma)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar