Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Ventas por mes

Hola a todos los Amigos de este Foro. Tengo la siguiente situación, y es que quiero obtener las ventas realizadas por mes de los productos. Esto de acuerdo a un parámetro de fecha dado.
Tengo el siguiente query, pero no se como realizar las sumas por cada mes, ya que ne da un error en la suma. Si alguien me puede ayudar, por favor.

Código Delphi [-]
begin
    IBQuery4.Close;
    IBQuery4.SQL.Clear;
    IBQuery4.SQL.Add('select extract(year from fafch) anio1, extract(month from fafch) meses1, sum(facantidad) as total_mes'+

                       'from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID) '+
                       'inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> '''+estado1+''') and (c.FAFCH between '''+fecha1+''' and '''+fecha2+''') '+
                       'where a.ARCODIGO = '''+Codigo_Prod.Text+''' group by 1, 2'+
                       'order by 1, 2');

    IBQuery4.Open;
end;

Última edición por Casimiro Notevi fecha: 14-01-2014 a las 20:34:01.
Responder Con Cita
  #2  
Antiguo 14-01-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
A qué te refieres con:
Cita:
ya que ne da un error en la suma
  • ¿El valor es incorrecto?
  • ¿El SQL devuelve un error?
  • ¿Otra cosa?

Si el valor es incorrecto, revisa lo que devuelve en SQL si hacer el GROUP BY y quitando "SUM(" para ver todos los valores que entran en la suma.
Si el SQL devuelve un error, sería necesario que nos dijeras el mensaje exacto, sin traducir.
Si es otra cosa, deberás explicarte un poco mejor.
Responder Con Cita
  #3  
Antiguo 14-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Gracias DUILIOISOLA por el interés.

El mensaje de error que me da es el siguiente: Attempt to execute an unprepared dynamic SQL statement. Si le quito al query el as total_mes, no me da el error, pero necesito cargar la variable, ya que lo despliego en un TStrinGrid el resultado de las ventas por mes y año.

Gracias de nuevo
Responder Con Cita
  #4  
Antiguo 14-01-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Este error no tiene que ver con el SQL, sinó que tiene que ver con el componente.
Supongo que antes de ejecutar el SQL debes "preparalo".
Supongo que al ser un Query dinámico (creas el SQL a medida que ejecutas el programa) el componente necesita que se prepare para saber qué parámetros necesita, que campos devolverá, su tipo, estructura y demás.

Prueba con esto:
Código Delphi [-]
  IBQuery4.Prepare;
  IBQuery4.Open;
end;
Responder Con Cita
  #5  
Antiguo 14-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Amigo, disculpe y en que parte del código pongo el IBQuery4.Prepare; y el IBQuery4.Open;
Responder Con Cita
  #6  
Antiguo 14-01-2014
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por Jorge Orozco Ver Mensaje
Hola a todos los Amigos de este Foro. Tengo la siguiente situación, y es que quiero obtener las ventas realizadas por mes de los productos. Esto de acuerdo a un parámetro de fecha dado.
Tengo el siguiente query, pero no se como realizar las sumas por cada mes, ya que ne da un error en la suma. Si alguien me puede ayudar, por favor.

begin

IBQuery4.Close;
IBQuery4.SQL.Clear;
IBQuery4.SQL.Add('select extract(year from fafch) anio1, extract(month from fafch) meses1, sum(facantidad) as total_mes'+

'from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID) '+
'inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> '''+estado1+''') and (c.FAFCH between '''+fecha1+''' and '''+fecha2+''') '+
'where a.ARCODIGO = '''+Codigo_Prod.Text+''' group by 1, 2'+
'order by 1, 2');

IBQuery4.Open;
end;

Código Delphi [-]
 With IBQuery4 do
 begin
  Close;
  SQL.Clear;
  SQL.Add('select extract(year from fafch) anio1, extract(month from fafch) meses1, sum(facantidad) as total_mes');
  SQL.Add('from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID) ');
  SQL.Add('inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> :estado) and (c.FAFCH between :fecha1 and :fecha2) ');
  SQL.Add('where a.ARCODIGO = :cod group by 1, 2');
  SQL.Add('order by 1, 2');
  ParamByname('cod').asString :=  Codigo_Prod.Text;
  ParamByname('estado').asString := 'A'; /// estado, no se cual es 
  ParamByname('fecha1').AsDate := dtp1.Date;  /// DateTymePicker fecha desde
  ParamByname('fecha2').AsDate := dtp2.Date; /// DateTymePicker fecha hasta
Prepare;
  Open;
 end;
__________________
all your base are belong to us
Responder Con Cita
  #7  
Antiguo 14-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Hola look, me funciona bien en el sentido que no me da ningún error, pero a la hora de cargar las celdas del TStringGrid, me las carga vacias. Ejemplo de la carga:

Código Delphi [-]
  for i := 1 to conte  do
    begin
      begin
         sg1.Cells[1+c1,3] := IBQuery4.FieldByName('meses1').AsString+'-'+IBQuery4.FieldByName('anio1').AsString;

        sg1.Cells[2+c1,3] := IBQuery4.FidByName('total_mes').AsString;

      c1 := c1+2;
      end;
    IBQuery4.Next;
    end;

Gracias por la ayuda

Última edición por Casimiro Notevi fecha: 14-01-2014 a las 23:58:00.
Responder Con Cita
  #8  
Antiguo 14-01-2014
Avatar de duilioisola
[duilioisola] duilioisola is offline
Miembro Premium
 
Registrado: ago 2007
Ubicación: Barcelona, España
Posts: 1.732
Poder: 20
duilioisola Es un diamante en brutoduilioisola Es un diamante en brutoduilioisola Es un diamante en bruto
Antes que nada pon el código entre las etiquetas [ delphi ] y [ /delphi ]

Verifica cuantas veces pasa por el bucle.
No especificas como se carga la variable CONTE que determina la cantidad de veces que se realiza el bucle.
Tampoco inicializas la variable C1.

Normalmente se utiliza un bucle WHILE para estas cosas:
Código Delphi [-]
c1 := 0;
IBQuery4.First;
while (not IBQuery4.EOF) do
begin
      begin
         sg1.Cells[1+c1,3] := IBQuery4.FieldByName('meses1').AsString+'-'+IBQuery4.FieldByName('anio1').AsString;
         sg1.Cells[2+c1,3] := IBQuery4.FidByName('total_mes').AsString;
         c1 := c1+2;
      end;
      IBQuery4.Next;
end;
Responder Con Cita
  #9  
Antiguo 14-01-2014
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por Jorge Orozco Ver Mensaje
Hola look, me funciona bien en el sentido que no me da ningún error, pero a la hora de cargar las celdas del TStringGrid, me las carga vacias. Ejemplo de la carga:
Hola, ¿verificaste si la consulta te devuelve registros?, ¿Porque no utilizas mejor un DBGrid?.
No se que delphi estas usando pero eso te lo ahorrarias con el LiveBindings.
__________________
all your base are belong to us
Responder Con Cita
  #10  
Antiguo 14-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Utilizo el Embarcadero RAD Studio 2010. Nunca he utilizado el DBGrid. Y en este caso no se como cargarlo.
Responder Con Cita
  #11  
Antiguo 14-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Look, la consulta si me devuelve registros. No se que podrá ser, ya que no me carga la información en el TStringGrid???????????????
Responder Con Cita
  #12  
Antiguo 15-01-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por Jorge Orozco Ver Mensaje
Utilizo el Embarcadero RAD Studio 2010. Nunca he utilizado el DBGrid. Y en este caso no se como cargarlo.
Hola Jorge.
  1. Agrega un TDBGrid (pestaña Data Controls).
  2. Agrega un componente TDataSource (pestaña Data Access) y en su propiedad DataSet seleccióna "IBQuery4".
  3. En la propiedad DataSource del DBGrid selecciona el nombre del DataSource anterior.
Y listo. Si "IBQuery4" está abierto, ya tendrías que estar viendo los datos en el TDBGrid .

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 15-01-2014 a las 00:11:00.
Responder Con Cita
  #13  
Antiguo 16-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Amigos he intentado todo para poder mostrar las ventas por mes y año y no me lo muestra. Aquí les dejo el procedimiento completo, para ver en que me pueden ayudar. Se los agradezco, ya que he hecho lo que esta a mi alcance y no he podido.


procedure TMovimiento_Pedidos.desglose_articulo_ventas;
var conte, i, c1 : integer;
compras3, estado1 : string;
fecha1, fecha2 : string; //TdateTime;
begin
estado1 := 'ANULADO';
fecha1 := datetostr(fechaini.DateTime);
fecha2 := datetostr(fechafin.DateTime);
c1 := 0;

IBQuery4.Close;
IBQuery4.SQL.Clear;
IBQuery4.SQL.Add('select count(*) as entradas from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID) '+
'inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> '''+estado1+''') and (c.FAFCH between '''+fecha1+''' and '''+fecha2+''') '+
' where a.ARCODIGO = '''+Codigo_Prod.Text+'''');

IBQuery4.Prepare;
IBQuery4.Open;
begin
conte := IBQuery4.FieldByName('entradas').AsInteger;


IBQuery4.Close;
IBQuery4.SQL.Clear;
IBQuery4.SQL.Add('select extract(year from fafch) anio1, extract(month from fafch) meses1, sum(facantidad) as ventas_mes'+
'from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID) '+
'inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> '''+estado1+''') and (c.FAFCH between '''+fecha1+''' and '''+fecha2+''') '+
'where a.ARCODIGO = '''+Codigo_Prod.Text+''' group by 1, 2'+
'order by 1, 2');

IBQuery4.Prepare;
IBQuery4.Open;
end;

for i := 1 to conte do
begin
begin
sg1.Cells[1+c1,3] := IBQuery4.FieldByName('meses1').AsString+'-'+IBQuery4.FieldByName('anio1').AsString;
sg1.Cells[2+c1,3] := IBQuery4.FieldByName('ventas_mes').AsString;

c1 := c1+2;
end;
IBQuery4.Next;
end;

end;
Responder Con Cita
  #14  
Antiguo 16-01-2014
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por Jorge Orozco Ver Mensaje
Amigos he intentado todo para poder mostrar las ventas por mes y año y no me lo muestra. Aquí les dejo el procedimiento completo, para ver en que me pueden ayudar. Se los agradezco, ya que he hecho lo que esta a mi alcance y no he podido.


procedure TMovimiento_Pedidos.desglose_articulo_ventas;
var conte, i, c1 : integer;
compras3, estado1 : string;
fecha1, fecha2 : string; //TdateTime;
begin
estado1 := 'ANULADO';
fecha1 := datetostr(fechaini.DateTime);
fecha2 := datetostr(fechafin.DateTime);
c1 := 0;

IBQuery4.Close;
IBQuery4.SQL.Clear;
IBQuery4.SQL.Add('select count(*) as entradas from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID) '+
'inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> '''+estado1+''') and (c.FAFCH between '''+fecha1+''' and '''+fecha2+''') '+
' where a.ARCODIGO = '''+Codigo_Prod.Text+'''');

IBQuery4.Prepare;
IBQuery4.Open;
begin
conte := IBQuery4.FieldByName('entradas').AsInteger;


IBQuery4.Close;
IBQuery4.SQL.Clear;
IBQuery4.SQL.Add('select extract(year from fafch) anio1, extract(month from fafch) meses1, sum(facantidad) as ventas_mes'+
'from ARTICULOS a inner join FACTURADT b on (b.FAARID = a.ARID) '+
'inner join FACTURAS c on (c.FAID = b.FAID) and (c.FAESTADO <> '''+estado1+''') and (c.FAFCH between '''+fecha1+''' and '''+fecha2+''') '+
'where a.ARCODIGO = '''+Codigo_Prod.Text+''' group by 1, 2'+
'order by 1, 2');

IBQuery4.Prepare;
IBQuery4.Open;
end;

for i := 1 to conte do
begin
begin
sg1.Cells[1+c1,3] := IBQuery4.FieldByName('meses1').AsString+'-'+IBQuery4.FieldByName('anio1').AsString;
sg1.Cells[2+c1,3] := IBQuery4.FieldByName('ventas_mes').AsString;

c1 := c1+2;
end;
IBQuery4.Next;
end;

end;
No veo nada de lo que te recomendamos aqui.... ¡facepalm!
__________________
all your base are belong to us
Responder Con Cita
  #15  
Antiguo 16-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Amigo si lo hice, pero tampoco me funciono, entonces le estoy pasando el procedimiento desde el principio. Inente hacerlo en DBGrid, pero es lo mismo, no me carga las celdas ono se sihice algo malo. La base de datos que uso es SQL Server 2008, y la comunicación con la base de datos lo hago por medio del IBQuery y el IBTransaction.

Gracias
Responder Con Cita
  #16  
Antiguo 16-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Amigo si lo hice, pero tampoco me funciono, entonces le estoy pasando el procedimiento desde el principio. Intente hacerlo en el DBGrid, pero es lo mismo, no me carga las celdas pero no se si hice algo malo. La base de datos que uso es SQL Server 2008, y la comunicación con la base de datos lo hago por medio del IBQuery y el IBTransaction.

Gracias
Responder Con Cita
  #17  
Antiguo 16-01-2014
Avatar de look
look look is offline
Miembro
 
Registrado: sep 2007
Ubicación: The Shire
Posts: 656
Poder: 17
look Va camino a la fama
Cita:
Empezado por Jorge Orozco Ver Mensaje
Amigo si lo hice, pero tampoco me funciono, entonces le estoy pasando el procedimiento desde el principio. Inente hacerlo en DBGrid, pero es lo mismo, no me carga las celdas ono se sihice algo malo. La base de datos que uso es SQL Server 2008, y la comunicación con la base de datos lo hago por medio del IBQuery y el IBTransaction.

Gracias
IBQuery, IBTransaction, SQL Server 2008?, creo que estas algo confundido, si no me equivoco esos son componentes para Firebird o Interbase
__________________
all your base are belong to us
Responder Con Cita
  #18  
Antiguo 16-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Correcto son para Firebird, la base de datos esta en otro lado.
Responder Con Cita
  #19  
Antiguo 16-01-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola Jorge.

Si el gestor de base de datos que usas es MS SQLServer 2008, podrías usar por ejemplo ADO o dbExpress para conectarte (revisa: dbExpress Driver for SQL Server) . Pero como te comenta look mas arriba, no lo vas a lograr usando los componentes IBXpress.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #20  
Antiguo 16-01-2014
Jorge Orozco Jorge Orozco is offline
Miembro
NULL
 
Registrado: abr 2011
Posts: 25
Poder: 0
Jorge Orozco Va por buen camino
Hola Amigos.

Sinceramente no creo que sea tan difícil o dificilisimo, hacer un procedimiento para obtener las ventas por mes y año y mostrarlo en un TStringGrid, como lo detalle a continuación.

Mes/Año Cant Mes/Año Cant Mes Año Cant
FACTURADO 01/2012 5 02/2012 10 04/2014 25

No se que es lo que estoy haciendo mal, que he intentado por todos los medios y no me funcione. He hecho varias consultas a GOOGLE y nada.

Por Favor Ayuda.

Gracias Amigos.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
estadistica de ventas DOS Varios 3 02-01-2013 17:52:51
Programa de ventas epenor Conexión con bases de datos 19 22-09-2008 22:30:19
Estadisticas de Ventas CoCaInE Varios 5 04-01-2007 14:56:25
Contar ventas. Producto77 SQL 5 20-07-2006 20:51:56
Ventas de PC con Linux. REHome Linux 4 03-05-2004 16:52:23


La franja horaria es GMT +2. Ahora son las 03:41:47.


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