
Ayuda con TStringGrid. Ventas por mes y año
Publicado por J. Arturo (2 intervenciones) el 23/01/2014 15:32:55
Mi problema es el siguiente, tengo tres tablas que son, Articulos, Facturas, Facturadt. Quiero mostrar en un StringGrid de un articulo en consulta, las cantidades vendidas por mes-año, esto con el objetivo de poder ver de impacto las ventas y poder tomar una mejor decición en los pedidos. El procedimiento que tengo es el siguiente:
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;
Y cuando lo corro me da un error con el mensale "Attempt to execute an unprepared dynamic SQL statement"
No se donde puedo tener el problema.
Por favor si me pueden ayudar, o replantear el procedimiento.
Gracias
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;
Y cuando lo corro me da un error con el mensale "Attempt to execute an unprepared dynamic SQL statement"
No se donde puedo tener el problema.
Por favor si me pueden ayudar, o replantear el procedimiento.
Gracias
Valora esta pregunta


0