PDA

Ver la Versión Completa : Agregar hojas en qreport


david duarte
25-10-2005, 21:17:06
Hola!!!

Alguien sabe como añadir nuevas hojas en qreport???

He escuchado algo de newpage o el needdata o algo por el estilo!!!!

Gracias.

jachguate
25-10-2005, 22:27:02
Con NewPage forzas que el siguiente detalle, si lo hay, se imprima en una nueva página. QReport imprime los pies de página correctamente al llamar al método (según recuerdo).

El OnNeedData es un evento que se utiliza cuando imprimis un reporte que no está conectado directamente a un DataSet. Valiendose de él, podrias imprimir, por ejemplo, el contenido de un string grid, o un archivo de texto.

Saludos.

Caro
26-10-2005, 16:35:19
Hola Jackguate, me podrias indicar porfavor como podria imprimir un archivo de texto con el OnNeedData del qreport

Gracias por adelantado

jachguate
26-10-2005, 17:33:36
Hola Jackguate

Hola Caro, supongo que me hablas a mi: jachguate, ¿cierto? :D

Añadí una banda de detalle al reporte, con un TQRLabel, que se llamará qrlLinea; y se implementará los métodos BeforePrint, para abrir el archivo, OnNeedData para imprimir cada línea y AfterPrint para cerrar el archivo. También añadiremos un miembro en la parte privada de la clase, de nombre FTexto y tipo TextFile

El código quedará algo asi:


procedure TQuickReport2.QuickRepBeforePrint(Sender: TCustomQuickRep;
var PrintReport: Boolean);
begin
AssignFile(FTexto, 'c:\datos.txt');
ReSet(FTexto);
end;

procedure TQuickReport2.QuickRepNeedData(Sender: TObject;
var MoreData: Boolean);
var
linea : string;
begin
MoreData := not eof(FTexto);
if MoreData then
begin
ReadLn(FTexto, Linea);
qrlLinea.caption := Linea;
end;
end;

procedure TQuickReport2.QuickRepAfterPrint(Sender: TObject);
begin
CloseFile(FTexto);
end;



No he comprobado nada, así que el código podria contener errores de sintaxis, y hasta lógicos, pero la idea es esa. Con el tema comprendido, podras corregirlos (si los hay) por tus propios medios.

Hasta luego.

;)

Caro
26-10-2005, 18:02:25
Muchisimas Gracias amigo jachguate

david duarte
27-10-2005, 15:54:16
Hola!!!!

aqui de nuevo, he estado un poco atareado con esto de los reportes, y no habia tenido tiempo de revisar esta pagina(un poco ironico, la verdad es que me urge y no me ha dado tiempo de checar) =) verdad??

Consegui lo siguiente:

encontre buscando por mucho tiempo en internet como hacerle para añadir una pagina nueva

se añade lo siguiente:
QRBand.ForceNewPage := True;

se supone que con esa linea te añade una pagina nueva, si me la añade, pero no puedo crear las labels(en tiempo de ejecucion) en esa pagina, ademas la pagina me la añade en la primera parte (la pagina que añadi, pasa a ser la primera) y en donde tenia mis datos pasa a ser la segunda.

Alguien sabe como hacere para crear las labels en la pagina nueva???

La verdad es que estoy hecho un lio con esto de qreport, pero bueno, al cliente lo que pida. jejeje
Gracias.
Cómo te sientes hoy??

jachguate
27-10-2005, 17:37:19
La verdad es que estoy hecho un lio con esto de qreport, pero bueno, al cliente lo que pida. jejeje
Gracias.
Cómo te sientes hoy??

Creo que el problema va por alli... quizas no necesitas una página nueva. Por que no mejor contas que es lo que te está pidiendo tu cliente y seguro alguien te echa un cable por aqui.

Saludos.

david duarte
27-10-2005, 17:49:37
Mira, lo que pasa es que tengo una base de datos(de el cliente) que es una empresa que hace analisis de polimero, telas, hilo.

entonces lo que quieren es que se haga un reporte con todos los analisis de las muestras.

esto es, cada muestra puede tener n analisis y a esas muestras les pueden hacer n pruebas a cada analisis, ej.

por ej, en este, son 1 muestras y se le realizaron 3 analisis y a cada analisis se le realizaron 5 pruebas

Folio Posicion Numero analisis1 analisis2 analisis 3
1 3a 01 2.25 6.25 8.45
1 2a 02 48.25 --- 98.35
1 5a 03 58.55 6.66 ---
1 6a' 04 6.45 6.56 6.94
1 4a 05 4.25 1.25 6.25
......
......
.....



pero las pruebas pueden ser desde 1 hasta n (maximo aprox 70).

Lo que hago en el qreport es crear los labels de los resultados en tiempo de ejecucion, pero si son 50 pruebas, las labels se pasan del alto de la banda de detalle....

cuando pase es ,lo que quiero es crear una nueva pagina y continuar creando los labels en esa pagina.

Espero que me haya ententido.

Gracias.

Cómo te sientes hoy??

mamp67
27-10-2005, 18:35:47
crea una banda de titulo y le cambias la propiedad en bandatype a rbcolumheader

estoy aprendiendo a programar espero eso sea lo que necesitas y disculpa por ser muy poco explicito ya me regañaron en el foro por eso soy mamp67 si me pueden ayudar con mi reporte se los agradecere

jachguate
27-10-2005, 19:58:02
Realmente no me he topado con esta necesidad antes. Creo que en casos como este, quizas valdria mas crear "n" reportes, uno con las primeras columnas, otros con las columnas restantes, y luego unirlos via qrCompositeReport.

Otra opción es no usar qReports y enviar directamente a la impresora.

Saludos.

;)

david duarte
27-10-2005, 20:31:15
Muchas Gracias. Lo probare a ver que sucede.
por lo que he leido, si se puede, pero en todos los foros que he visto y paginas que he leido, ninguno dice como se puede hacer, solamente dice como hacerle para agregar una nueva hoja y ya. Las demas personas que estan en los foros, tambien dicen lo mismo, que si se les agregan las hojas, pero que los resultados no se los muestra en la nueva hoja. Seguire intentando y voy a probar con reportes por separado y luego unirlos.

Gracias.

Cómo te sientes hoy

david duarte
27-10-2005, 20:35:01
que quieres hacer en tu reporte mamp67, disculpa, estoy un poco atareado con este proyecto, si nos comentas mas, probablemente te podemos ayudar.

Cómo te sientes hoy??

david duarte
31-10-2005, 23:12:11
Oigan!!!

Bueno, la primera cosa

Como le hago para mandar imprimir directamente a la impresora, mencionaron que si usaba el OnNeedData, podria imprimir directamente desde un grid si necesidad de tener un datasource, como le haria para que se impriman como aparecen en el grid???

Y en el caso contrario no el encuentro como crear un nuevo reporte y despues unirlos, tienen algun ejemplo, estuve viendo, pero no entiendo nada

Gracias
Cómo te sientes hoy??

jachguate
01-11-2005, 00:28:25
como crear un nuevo reporte y despues unirlos, tienen algun ejemplo, estuve viendo, pero no entiendo nada

Pues ejemplo no, pero si buscas por TQRCompositeReport, podes hallar algunos. Si no recuerdo mal, el método para agregar reportes es AddReport.

Hasta luego.

;)

david duarte
03-11-2005, 21:05:48
Oigan, ya encontre una solucion, hice unas pruebas añadiendo un qrmemo en la banda de detalle, y si son 100 le añado 100 lineas y se imprime automaticamente en la otra hoja.

Ahora lo que pasa es que cuando creo los tqrmemo en tiempo de ejecucion, si me los crea, pero no los muestra al momento de hacer el preview.

Anexo el codigo para que me ayuden a revisar mi codigo, se me hace extraño que no me las visualize, porque he creado las Labels y esas si me las muestra.

Gracias.
Cómo te sientes hoy??

complemento:

Les agrego el codigo, la verdad no entiendo porque no me los muestra

unit memos;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, qrctrls,
QuickRpt, ExtCtrls;
type
TForm1 = class(TForm)
QuickRep1: TQuickRep;
QRBand1: TQRBand;
QRBand2: TQRBand;
QRBand3: TQRBand;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure QuickRep1AfterPreview(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mem: array of TQRMemo;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject);
var
i, izq: Integer;
begin
setlength(mem,5); //asignamos el tamaño a el arreglo
izq :=0;
for i:=0 to 4 do
Begin
mem[i] := TQRMemo.Create(QRBand3);
with mem[i] do
Begin
left := izq;
autostretch := True;
color := clBlack;
izq := izq+ 40;
parent := QRBand3;
enabled := True;
visible := True;
end; // with
end; //for
end;//Begin

procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action := CaFree;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
quickrep1.Preview;
end;

procedure TForm1.QuickRep1AfterPreview(Sender: TObject);
var
i,contmem : Integer;
begin
i :=0;
for i := sizeof(mem) downto 0 do
showmessage(inttostr(i)+' memos');
end;
end.



Nueva parte

Gracias a todos lo que me ayudaron en este problemilla, Se los agradezco

ya encontre la solucion, solamente faltaba ponerle el memo[i] en el parent, ya que como nada mas tenia el parent solo, por lo que supongo es que no creo el qrmemo en donde le dije, quien sabe en donde lo habrá creado.

Simplmente le pusse
memo[i].Parent := QRBand3

y ya.

Gracias

Cómo te sientes hoy

david duarte
22-11-2005, 20:36:51
Hola!!!!

he seguido haciendo pruebas y pruebas, pero no me funciona eso de agregar paginas!!!!

Ya no se ni que hacer!!!

he checado y probablemente tenga que ver con el tamaño de la banda..

Tambien estuve leyendo y cada vez que creas un TQRDBText, se agrega una banda de detalle, y la no me sirve de nada!!! me urge!! alguien sabe porque hace esto???

o en caso de que pueda mandarlo directamente la impresora(puedo usar el NeedData)?? o cual??

Gracias
Cómo te sientes hoy??