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.
|