Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Consulta Datos Parciales sql

Hola
Estoy trabajando mucho......

Estoy tratando de hacer una consulta que me regrese la suma de los totales de las piezas que fabrico, pero esta consulta la ejecuto en un reporte.
La consulta funciona, pero no me da los datos parciales, solo los totales.
Esta es:
Código SQL [-]
SELECT DISTINCT OrdenProdItem.CodParte,
Articulos.Descripcion|| ' ' ||Categoria|| ' ' ||SubCategoria AS Descr, SerieMaterial.CodMaterial,
Materiales.Descripcion, Materiales.Unidad, sum(SerieMaterial.Cantidad) AS Cantidad,
max(Materiales.Costo) AS Costo, max(SerieMaterial.CostoALaFecha) AS CostoALaFecha,
(SELECT Count(*) FROM OrdenProdItem)
FROM Articulos RIGHT JOIN (OrdenProdItem INNER JOIN (Materiales RIGHT JOIN SerieMaterial
ON Materiales.CodMaterial = SerieMaterial.CodMaterial) ON OrdenProdItem.NumSerie = SerieMaterial.NumSerie)
ON Articulos.CodParte = OrdenProdItem.CodParte
WHERE OrdenProdItem.FinProd >= :f1 AND OrdenProdItem.FinProd <= :f2 +1
GROUP BY OrdenProdItem.CodParte
Articulos.Descripcion|| ' ' ||Categoria|| ' ' ||SubCategoria, SerieMaterial.CodMaterial, 
Materiales.Descripcion, Materiales.Unidad
Si teneis alguna idea os lo agradezco.
A mi no se me enciende el.....
Saludos
__________________
Siempre Novato

Última edición por Caral fecha: 22-07-2010 a las 03:46:52.
Responder Con Cita
  #2  
Antiguo 22-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Para ampliar un poco mas los datos:
Asi es como llamo al qreport:
Como veis divido la consulta sacando el where y el group by, lo típico nada mas.
Código Delphi [-]
 try
         QRProduccionTerminadasPiezas:=TQRProduccionTerminadasPiezas.Create(self);
         QRProduccionTerminadasPiezas.ADOQuery1.SQL.Add(' WHERE OrdenProdItem.FinProd >= :f1 AND OrdenProdItem.FinProd <= :f2 +1');
         QRProduccionTerminadasPiezas.ADOQuery1.SQL.Add(' GROUP BY OrdenProdItem.CodParte, '+
         ' Articulos.Descripcion|| '' '' ||Categoria|| '' '' ||SubCategoria, SerieMaterial.CodMaterial, '+
         ' Materiales.Descripcion, Materiales.Unidad ');
         QRProduccionTerminadasPiezas.ADOQuery1.Params[0].Value:= DateToStr(DTP1.Date);
         QRProduccionTerminadasPiezas.ADOQuery1.Params[1].Value:= DateToStr(DTP2.Date);

         QRProduccionTerminadasPiezas.ADOQuery1.Open;
         QRProduccionTerminadasPiezas.QRLblDesde.Caption := DateToStr(DTP1.Date);
         QRProduccionTerminadasPiezas.QRLblHasta.Caption := DateToStr(DTP2.Date);
         If RadioGroup1.ItemIndex = 0 then QRProduccionTerminadasPiezas.Print
         else QRProduccionTerminadasPiezas.Preview;
      finally
         QRProduccionTerminadasPiezas.Free;
      end; //try
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 22-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Amplio aun mas esto:
El reporte genera los datos de las piezas que he fabricado, lo que hace es sumar los datos de acuerdo al tipo de pieza mostrando los materiales y las cantidades de estos.
Este es el actual; genera la cantidad de piezas total, en este caso 22.



El asunto es que como es un reporte en el que suma las cantidades contrae todo.
Lo que busco es la suma parcial de las piezas por modelo asi:.



Si se os ocurre como hacerlo por aqui estoy.
Gracias de antemano.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 22-07-2010
Avatar de guillotmarc
guillotmarc guillotmarc is offline
Miembro
 
Registrado: may 2003
Ubicación: Huelva
Posts: 2.638
Poder: 24
guillotmarc Va por buen camino
Hola.

Esto me parece que no hay ninguna necesidad de calcularlo en una consulta (puesto que entonces necesitarías dos consultas, una para calcular los datos, y otra para calcular los subtotales).

Lo habitual es solo tener la consulta de los datos a mostrar, y añadir una banda de agrupación en el informe, con el sumatorio de las unidades dentro de la agrupación.

Yo lo hago continuamente en Fast-Reports y funciona muy bien.

En todo caso, si lo quieres calcular en una consulta, ya vas bien encaminado, se trata de un consulta de sumatorio con group by.
__________________
Marc Guillot (Hi ha 10 tipus de persones, els que saben binari i els que no).
Responder Con Cita
  #5  
Antiguo 22-07-2010
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.282
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
No estoy mucho en tema de reportes, pero iba a sugerir algo parecido a lo que comenta guillotmarc; Me da la impresión de que esos totales deben poder calcularse desde el report mejor que desde la consulta.

De todas formas, ya te digo Carlos, que en esto de Reports no estoy nada al día.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 23-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Gracias amigos, esto es mas dificil de lo que parece.
No quiere caminar, ni por sql ni por el reporte que seria lo mas sencillo.
Sigo buscando.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #7  
Antiguo 23-07-2010
Avatar de Jac fcc
Jac fcc Jac fcc is offline
Miembro
 
Registrado: ene 2010
Posts: 33
Poder: 0
Jac fcc Va por buen camino
Hace poco estuve batallando con ese mismo inconveniente.

como indica guillotmarc, yo tambien lo solucioné en el form del QReport, En algun momento se asigna a una banda un campo de la consulta (por codigo o en las propiedades de la banda)

por ejemplo crear una banda tipo TQRGroup llamada TQRPiezas y en su propiedad 'Expresion' colocar el campo por el cual se quiere agrupar, en este caso el campo de Tipopiezas. tambien ayuda que se cree una variable para los datos parciales y en el evento OnPrint del campo que se imprime se inicie a cero la variable que muestra los datos parciales. en un campo 'numpiezas' se estarian sumando los valores.

Algo que me dejó dudando (hasta ahora no se porque); la consulta se ordena como le indiquemos pero asi como se obtiene se agrupa, no lo hace de forma global. me explico con un ejemplo:
si por alguna razon mi consulta la ordeno por el numero de piezas me resulta:

clave descripcion grupos num piezas
torn01 descripcion tornillo accesorios 10
torn02 descripcion tornillo 02 accesorios 20
pin01 descripcion pinzas 01 herramientas 30
torn03 descripcion tornilo 03 accesorios 40

el Qreport hará tres grupos; los primeros 2 tornillos, la pinza y el utlimo tornillo.
por que esa es la forma en la que encuentra los datos al consultar.
independientemente de que los tres tornillos pertenezcan a accesorios y lo correcto sea crear solo dos agrupaciones.

lo digo por que eso me dió varios dolores de cabeza y espero que no te este sucediendo.
consulta los datos en codigo SQl para ver como regresan las consultas y si es necesario cambia la manera de ordenarlos.

__________________
Para una vida sana hay que ocupar 30 de 24hrs diarias...Ups!
Responder Con Cita
  #8  
Antiguo 24-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Gracias por vuestros consejos.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #9  
Antiguo 30-07-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Hoy he terminado de resolver este problema, os cuento.
Queria que me salieran los datos parciales, pero, el problema era que dependia del dato que suministraba el query que esta en el reporte, osea, como sacar ese dato si cuando lo captura, lo muestra inmediatamente?.
Bien, lo solucione, después de romperme la cabeza, usando el evento AfterScroll del query.
Ahi es donde hago el codigo (en un query independiente) para que me muestre el dato.
Osea, el reporte ahora tiene dos query y en el unit del reporte coloco el codigo que en realidad es sencillo.
Código Delphi [-]
procedure TQRProduccionTerminadasPiezas.ADOQuery1AfterScroll(
  DataSet: TDataSet);
begin
   AQTemp.Close;
   AQTemp.SQL.Text:= 'select count(*) from OrdenProdItem Where OrdenProdItem.CodParte = :cod'+
           ' and OrdenProdItem.FinProd >= :f1 AND OrdenProdItem.FinProd <= :f2 +1';
   AQTemp.Params[0].Value:= ADOQuery1CODPARTE.AsString;
   AQTemp.Open;
end;

El codigo de la pieza lo saca del adoquery1 y las fechas las saca del form que lo llama.

Bueno, lo importante:
Gracias a todos por vuestros consejos.
Tal vez a alguien mas le suceda algo así y sabrá como resolverlo.
Saludos
__________________
Siempre Novato
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Calcular Saldos parciales analia1979 SQL 2 01-06-2008 16:38:48
Obtener datos consulta SQL adrall SQL 1 04-03-2008 19:16:42
Filtros y zeos en busquedas parciales ancara SQL 7 04-05-2007 20:13:47
¿Cómo calcular saldos parciales? jorge82 Conexión con bases de datos 2 02-09-2005 04:49:50
Saldos parciales Juanito-Kun SQL 3 26-08-2005 20:31:29


La franja horaria es GMT +2. Ahora son las 05:35:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi