** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Consulta Agrupada
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Consulta Agrupada

 Responder Responder Página  12>
Autor
Mensaje
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Sherezade81 Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Consulta Agrupada
    Enviado: 16/Febrero/2019 a las 17:45
Buenas tardes!
He creado una consulta como origen a un formulario donde me sale un detalle de las facturas, con el fin de que me salga los totales de las facturas.
La consulta me funciona si no tengo portes y abonos en la misma factura. Si lo tengo me salen unas cantidades que no tengo ni idea de donde salen, creo que me duplica cantidades y al sumarlas sale desproporcionado el resultado
Intento explicarme... Tengo las tablas: facturas (campo IDFACTURA común), expediciones (campo portes es el que sumo), cargosabonos(importe) y almacenaje(importe).
¿Saben por qué me pasa esto?
Gracias por adelantado.
Saludos 

SELECT Sum(IIf([SEGURO]<>0,[PORTES]*(1+[SEGURO]/100),[PORTES])) AS SUMPORTES, IIf([SUMPORTES] Is Not Null,[SUMPORTES],0) AS TOTAL_PORTES, Factura.FECHAFACTURA, Factura.IDFACTURA, Sum(IIf(ALMACENAJE.IMPORTE Is Not Null,ALMACENAJE.IMPORTE,0)) AS TOTAL_ALMACENAJE, Sum(IIf(CARGOSABONOS.IMPORTE Is Not Null,CARGOSABONOS.IMPORTE,0)) AS TOTAL_CARGOS, [TOTAL_BASEIMPONIBLE]*(1+[factura].[tipo_iva]) AS TOTAL_FACTURA, Factura.IDCLIENTE, Factura.FECHA_VENCIMIENTO, Factura.PAGADA, Factura.tipo_iva, ([TOTAL_PORTES]+[TOTAL_ALMACENAJE]+[TOTAL_CARGOS]) AS TOTAL_BASEIMPONIBLE
FROM CargosAbonos RIGHT JOIN ((Expedicion RIGHT JOIN Factura ON Expedicion.IDFACTURA=Factura.IDFACTURA) LEFT JOIN Almacenaje ON Factura.IDFACTURA=Almacenaje.NFACTURA) ON CargosAbonos.NFACTURA=Factura.IDFACTURA
GROUP BY Factura.FECHAFACTURA, Factura.IDFACTURA, Factura.IDCLIENTE, Factura.FECHA_VENCIMIENTO, Factura.PAGADA, Factura.tipo_iva;
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 895
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 17/Febrero/2019 a las 18:49
Es difícil indicar una causa en concreto:

- Las relaciones creadas en la consulta pueden duplicar registros.
- Los grupos pueden alterar los resultados.
- En la consulta no filtras por factura. Entiendo que el formulario tendrá algún tipo de filtro, o estarás sumando todas las facturas.
- Los cálculos que haces en los Sum den resultados erróneos.

Cuando una consulta hace "cosas raras", lo mejor es empezar de nuevo, y poco a poco:

- Agregar las tablas de 1 en 1 con las relaciones y comprobar los registros que devuelven.
- Agregar los grupos y las sumas poco a poco.
- Comprobar que los filtros funcionan bien.
- Usar Nz en vez del Iif:

Sum(Nz(ALMACENAJE.IMPORTE,0)) AS TOTAL_ALMACENAJE En vez de
Sum(IIf(ALMACENAJE.IMPORTE Is Not Null,ALMACENAJE.IMPORTE,0)) AS TOTAL_ALMACENAJE
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Sherezade81 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Febrero/2019 a las 12:52
Buenos días,
Ante todo gracias Pitxiku por tu ayuda. He estado trabajando en ello, pero sin resultados... positivos, vamos.
El filtro lo aplico después. Inicialmente cargo todas las facturas.
He modificado Iif por Nz, como seguía dando resultados erróneos he empezado de 0 como sugeriste.
Funciona correctamente con la tabla Facturas y Expediciones, me suma correctamente. Al meter la de CargosAbonos ya provoca que me sume mal el campo portes de la tabla Expediciones que inicialmente funcionaba bien y tb el campo importe de CargosAbonos.
También si solo trabajo con Facturas, Expediciones y Almacenaje, no me sale correcto porque no me salen todas las facturas (me salen todas las que tienen almacenaje solo y encima cantidades que no corresponden)
He mirado el campo IDFACTURA/N FACTURA y en todos los casos tengo guardado como Texto.., longitud 50.
¿Alguna idea?
Gracias,
Saludos,


Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 895
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Febrero/2019 a las 19:37
Si esa consulta va a mostrar resultados para una única factura, yo filtraria desde el principio; en teoría, con menos registros es más sencillo ver los fallos y la ejecución es más rápida.

Entiendo que la tabla facturas es la "principal", y las otras tienen datos para alguna factura, no para todas.

Si es así, en una consulta nueva coloca primero la tabla de facturas, y después la de cargosabonos, asustando la relación para tener todas las facturas y los cargos y abonos relacionados. Así, tienes los registros bien?

Si sigue dando problemas, hay más posibilidades:

- usar una función tipo DLookup o DSum para calcular los datos, o
- usar subconsultas para cada uno de los cálculos.
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Sherezade81 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 19/Febrero/2019 a las 21:59
Buenas, 
 Quizá no me he explicado bien, lo que pretendo  con esta consulta es ponerla como origen de un subformulario en un formulario para filtrar las facturas.
Inicialmente, no tiene filtro, para que me muestre un resumen (ID FACTURA, CLIENTE, IMPORTE_TOTAL_FACTURA) de todas las facturas. Estas facturas pueden estar formadas por solo portes (Expediciciones), solo cargos/abonos, solo almacenaje o un conjunto de ellos. Es cuando las facturas están formadas por varios conceptos distintos (portes y abonos por ejemplo), que el total me sale descontrolado.

Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 895
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Febrero/2019 a las 14:49
Yo había entendido mal. Pensaba que el formulario principal mostraba una factura, y el subformulario datos de esa factura.

Si se duplican registros cuando agregas todas las tablas,y las relaciones están bien, tal vez te interesen las subconsultas: tener sólo la tabla e facturas en la consulta"principal", y usar sentencias SQL como origen de los campos donde haces las sumas. Algo así:

SELECT Facturas.IdFactura,
(SUM(T1.UnCampo) FROM TablaComprss AS T1 WHERE T1.IdFactura = Facturas.IdFactura) AS TotalCompras
FROM Facturas;

Nota: cada subconsulta debe estar delimitada por paréntesis, o Access se quejará.

Editado por pitxiku - 20/Febrero/2019 a las 14:50
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Sherezade81 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Febrero/2019 a las 19:57
Buenas... por decir algo que me estoy volviendo loca.
He probado como me comentaste, aplicándolo de momento a una sola tabla y me da error:
SELECT Factura.IDFACTURA, (SUM(CA.IMPORTE) FROM CargosAbonos AS CA WHERE CA.NFACTURA=Factura.IDFactura) as TotalCargosAbonos
FROM FACTURA ;

Error de Sintaxis (Falta Operador) en la expresión de consulta 'SUM(CA.IMPORTE) From CargosAbonos AS CA WHERE CA.NFACTURA=Factura.IDFACTURA)

¿Sabeis donde puede estar el error?

Por otro lado... He probado... aunque dado el resultado supongo sea una burrada...  a hacer una consulta por cada tabla sumando los importes y poniendo el campo idfactura de cada una de ellas y después una consulta con la tabla factura y las 3 consultas...  pero el resultado no es correcto.. me da solo 4 facturas y hay muchísimas más...


Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 895
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 20/Febrero/2019 a las 21:52
Perdón, me comí un "Select":

SELECT Factura.IDFACTURA, (SELECT SUM(CA.IMPORTE) FROM CargosAbonos AS CA WHERE CA.NFACTURA=Factura.IDFactura) as TotalCargosAbonos
FROM FACTURA ;
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Sherezade81 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 21/Febrero/2019 a las 21:27
Muchas gracias! Me funciona pero a medias:
SELECT Factura.IDFACTURA, ( SELECT SUM(Nz(CA.IMPORTE,0)) FROM CargosAbonos AS CA WHERE CA.NFACTURA=Factura.IDFactura) AS TotalCargosAbonos, ( SELECT SUM(Nz(Al.IMPORTE,0)) FROM Almacenaje AS Al WHERE Al.NFACTURA=Factura.IDFactura) AS TotalAlmacenaje, ( SELECT Sum(Nz(IIf([SEGURO]<>0,[PORTES]*(1+[SEGURO]/100),[PORTES]),0)) FROM EXPEDICION WHERE EXPEDICION.IDFACTURA=FACTURA.IDFACTURA) AS SUMPORTES, [TOTAL_BASEIMPONIBLE]*(1+[factura].[tipo_iva]) AS TOTAL_FACTURA, Factura.IDCLIENTE, Factura.FECHA_VENCIMIENTO, Factura.PAGADA, Factura.tipo_iva, ([SUMPORTES]+[TotalAlmacenaje]+[TotalCargosAbonos]) AS TOTAL_BASEIMPONIBLE
FROM FACTURA;

Se me acaba bloqueando la consulta pensando... Pero más de media hora o así.... me da las sumas bien, pero no así los totales. Solo me suma los totales cuando las facturas tienen los 3 campos. Pese al Nz, no me pone valor 0 y no me calcula ni la base imponible ni lógicamente el total factura.
Sigo intentando a ver... con lo rápida que era la otra no entiendo porque se vuelve loca... está como yo ya... Se agradece cualquier sugerencia... a ver si salgo del embrollo.
Saludos

Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 895
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita pitxiku Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 21/Febrero/2019 a las 23:52
Lo que ocurre es que para cada registro se ejecutan todas las subconsultas, por eso tarda tanto.

Y la mala suma de totales, es porque cuando no tienes registros relacionados, ese total devuelve un valor nulo. Donde haces las sumas, tienes que usar nz para cada uno de los campos.

Si quieres, puedes preparar una copia con las tablas afectadas, e intento algo este fin de semana. Si hay datos sensibles, modificalos o crea tus propios datos imaginarios.
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Sherezade81 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Febrero/2019 a las 00:02
Bueno... ya me he dado cuenta de que debo cambiar el orden de Nz y ponerlo antes de sum... pero sigue siendo lentísima la consulta... 
No sé si me podríais sugerir otra forma para agilizar la consulta?
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4891
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita emiliove Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Febrero/2019 a las 00:12
Como te dice Pitxiku, si puedes preparar una base yo también me apunto y la miro para ver si puede mejorar el tiempo.

Saludos.
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Sherezade81 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Febrero/2019 a las 16:52
Muchísimas gracias, no sé ni qué decir, se agradece enormemente.... Disculpa pitxiku que te había pisado.
Os lo envío
Arriba
Sherezade81 Ver desplegable
Habitual
Habitual


Unido: 14/Septiembre/2011
Localización: España
Estado: Sin conexión
Puntos: 84
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita Sherezade81 Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Febrero/2019 a las 18:21
https://1drv.ms/u/s!AqfqmDRxLYCZgVNetHakgHbEx3Qj
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4891
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita emiliove Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 22/Febrero/2019 a las 18:55
No abre la consulta dejaste una tabla vinculada Expedición

Saludos.
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable