PDA

Ver la Versión Completa : Informe de QuickReport en Ejecucion


rosodo1
05-01-2007, 02:49:27
Estoy creando un informe de QuickReport 3.0.9 en Ejecucion en el cual voy introduciendo los campos que me convienen en cada momento con TQRDBText en un TQRBand-Detail y el titulo del campo con un TQRLabel en un TQRBand-Column Header . El problema es que solo veo el titulo del informe pero no aparecen ni los titulos de los campos ni el contenido.

El codigo seria algo asi:
begin
columnas := Grid.Columns.Count;
SetLength(Etiquetas, columnas);
SetLength(Campos, columnas);
For ite := 0 to columnas - 1 do
begin
Etiquetas[ite] := TQRLabel.Create(Q2Cap);
Campos[ite] := TQRDBText.Create(Q2Detalle);
//Etiquetas
Etiquetas[ite] := QRLabel1;
Etiquetas[ite].Caption := Grid.Columns[ite].Title.Caption;
Etiquetas[ite].Width := Grid.Columns[ite].Field.DataSize;
//Etiquetas[ite].Top := QRLabel1.Top;
Etiquetas[ite].Transparent := false;
//Etiquetas[ite].Enabled := True;
//Etiquetas[ite].Frame := QRLabel1.Frame;
//Etiquetas[ite].Height := QRLabel1.Height;
//Etiquetas[ite].Font := QRLabel1.Font;
//Etiquetas[ite].Size := QRLabel1.Size;
If ite > 0 then
Etiquetas[ite].Left := Etiquetas[ite-1].Left + Etiquetas[ite-1].Width + 20
else
Etiquetas[ite].Left := 0;
//Campos
Campos[ite] := QRDBText1;
Campos[ite].DataSet := DM.QInforme;
Campos[ite].DataField := DM.QInforme.FieldList.Fields[ite].FieldName;
Campos[ite].Width := Etiquetas[ite].Width;
//Campos[ite].Top := 0;
Campos[ite].Left := Etiquetas[ite].Left;
Campos[ite].Visible := true;
Campos[ite].Transparent := False;
end;
DM.QInforme.Active:=True;
end;


¿Sabeis que falta o donde esta el error?

Gracias

AzidRain
05-01-2007, 03:41:57
¿Esta Abierto el dataset?? Si es un query, ¿Devuelve algo? Lo que te sale es debido a que el dataset no contiene nada..

Lepe
05-01-2007, 09:28:39
Veo 2 errores:

Etiquetas[ite] := TQRLabel.Create(Q2Cap);
Campos[ite] := TQRDBText.Create(Q2Detalle);
//Etiquetas
Etiquetas[ite] := QRLabel1;


O sea, primero en etiquetas[ite] creas un qrlabel, y después dices etiquetas[ite]:= qrlabel1... pues te acabas de cargar la etiqueta que creaste antes. Bueno en realidad no, la etiqueta que creaste al principio, se quedará en memoria, pero no podrás acceder a ella para asignarle las propiedades.

cuando a continuación haces:
Etiquetas[ite].Caption := Grid.Columns[ite].Title.Caption;
Etiquetas[ite].Width := Grid.Columns[ite].Field.DataSize;
realmente estas cambiando las propiedades al QRLabel1 no al que creaste anteriormente!!!.

Por otra parte no veo que asignes el Parent de los controles que creas en ejecución, así que no aparecen jamás en la banda detalle.

Busca por el foro, hay mucho código sobre eso.

Saludos

rosodo1
05-01-2007, 13:54:37
Gracias por las rapidas respuestas. Aunque os comento:

El dataset esta abierto y contiene varios registros. Lo visualizo antes en un DBGrid.

Etiquetas[ite] := TQRLabel.Create(Q2Cap);
Campos[ite] := TQRDBText.Create(Q2Detalle);
//Etiquetas
Etiquetas[ite] := QRLabel1;

Tienes razon, pero fue la ultima prueba que hice, realmente el codigo era sin la ultima linea, pero probe eso simplemente para comprobar que al menos visualizaba algo en ese QRLabel ya creado en vista diseño.
En cuanto al parent, ¿No se lo estoy asignando en el create?
TQRLabel.Create(Q2Cap)Mirare en los foros aunque la verdad es que no encontre nada que me ayudara.

Gracias de nuevo.

Lepe
05-01-2007, 20:32:37
No. Lo que asignas es el AOwner (quien destruirá el componente), pero no dices donde se ha de situar ese qrLabel (sobre el Quickreport, sobre la banda cabecera, sobre la banda detalle....).


Etiquetas[ite] := TQRLabel.Create(Q2Cap);
Etiquetas[ite].Parent := banda detalle


Saludos

rosodo1
05-01-2007, 22:01:45
:o Jojo, ahora si. Que burro. Convencido que era el parent lo que le asignaba en el creador. Perfecto, millones de gracias a todos.

Seguimos por aqui.

fjcg02
08-01-2007, 23:33:21
Te paso un código que escribí con inestimable colaboración del foro.

Genera cualquier reporte con la llamada a la función generarlistado. El origen de los datos es una query , cualquiera.
Para utilizarlo, descomprime los archivos y añadelos a tu proyecto. Desde donde quieras imprimir llama a la función con los parametros requeridos.

Espero que te sea de ayuda.

Un saludo

rosodo1
09-01-2007, 02:03:50
Ok, probare tu solucion aunque ya me funciona. Gracias.