Ver Mensaje Individual
  #3  
Antiguo 21-05-2003
jsanchez jsanchez is offline
Miembro
 
Registrado: may 2003
Posts: 90
Reputación: 21
jsanchez Va por buen camino
Tienes razón, debería haber puesto el código.

Sería este. (más o menos)



AssignFILE(F,'Com1');
ReWrite(F);
Write(F, CHR(27) + CHR(64));
Writeln(F,' Reporte de Ventas');
Writeln(F,' Fecha: '+DateToStr(Date));
Writeln(F,'Del día: '+ EFecha1.Text+' al día: '+EFecha2.Text);

Writeln(F, Espacios(20, 'Producto', 0)+Espacios(10, 'Cantidad'), 0));

DMModuloDatos.QVentas.First; // aquí están los datos de la consulta

Total:=0;

while (not DMModuloDatos.QVentas.eof) do
begin
writeln(F,
Espacios(20, DBGVentas.DataSource.DataSet.FieldByName(['Producto']).AsString, 0)+
Espacios(20, DBGVentas.DataSource.DataSet.FieldByName(['Cantidad']).AsString, 0))
Total:=Total+DBGVentas.DataSource.DataSet.FieldByName(['Cantidad']).AsFloat;
DMModuloDatos.QVentas.next;
end;
Writeln(F,'__________________________________________');
Writeln(F,Espacios(20,'Total: ', 1)+Espacios(10,FloatToStr(Total),1);

Write(F,#12);
System.CloseFile(F);
End;

Basicamente, lo que hace esto es recorrer el grid donde está la consulta y va llenando el Archivo F, al final lo cierra, y se imprime.

Este código funciona perfectamente cuando la consulta tiene menos de unos 50 registros, pero cuando el resultado es más grande, hay problemas y no se imprime correctamente. No guarda la estructura en columnas que siguen los datos anteriores, y termina antes de tiempo.

Por qué puede ser?

Si abro y cierro el archivo en cada vuelta del ciclo, mejoraría? Esto no lo he probado, porque se me ha ocurrido ahora y estoy bien lejos de donde tengo el programa y mi ordenata.


Muchas gracias por todo.
Responder Con Cita