PDA

Ver la Versión Completa : Cantidad de columnas variables


ingel
15-09-2005, 14:38:36
Hola a todos ..
Tengo que hacer un reporte y la cantidad de columnas puede variar entre
5 y 12 dependiendo de ciertas condiciones . Mi idea es tratar de no hacer 8 reportes :(
por lo cual mi pregunta es si puede hacer un Qreport con la cant de columnas variables ..o si alguien hizo algo parecido ..
Gracias . Saludos a todos
Ingel

ContraVeneno
15-09-2005, 16:26:33
Hace tiempo hice el reporte con las 12 columnas y cuando alguna no debería estar solamente la enviaba fuera del margen de impresión (qrdbtext.left:=5000; )

No se si sea lo más conveniente, pero por la urgencia de resolver eso fue lo que me funcionó. Igual y alguien responde algo más interesante y nos ayuda a ambos. :D

fidel
16-09-2005, 01:18:00
Hola:

Yo para imprimir en una página las fotos de un grupo que puede ser variable y llegar como máximo a 35 hice esto, no se si te puede servir.


procedure TFImpriOrla.FormCreate(Sender: TObject);
var
iFotos : integer;
begin
//contar registros
DM.IBDSAlumnos.Last;
iFotos := DM.IBDSAlumnos.RecordCount;
//reparto de fotos según número (columnas, widthBanda)
if iFotos < 16 then
//5 columnas, 3 filas
begin
QROrla.Page.Columns := 5;
QRBandFotos.Height := 232;
end
else if (iFotos > 15) and (iFotos < 19) then
//6 columnas, 3 filas
begin
QROrla.Page.Columns := 6;
QRBandFotos.Height := 232;
end
else if (iFotos > 18) and (iFotos < 22) then
//7 columnas, 3 filas
begin
QROrla.Page.Columns := 7;
QRBandFotos.Height := 232;
end
else if (iFotos > 21) and (iFotos < 25) then
//8 columnas, 3 filas
begin
QROrla.Page.Columns := 8;
QRBandFotos.Height := 232;
end
else if (iFotos > 24) and (iFotos < 29) then
//7 columnas, 4 filas
begin
QROrla.Page.Columns := 7;
QRBandFotos.Height := 178;
end
else if (iFotos > 28) and (iFotos < 33) then
//8 columnas, 4 filas
begin
QROrla.Page.Columns := 8;
QRBandFotos.Height := 178;
end
else if iFotos > 32 then
//9 columnas, 4 filas
begin
QROrla.Page.Columns := 9;
QRBandFotos.Height := 178;
end;
QROrla.Preview;
QROrla.Free;
Close;
end;

Un saludo.

sitrico
16-09-2005, 18:19:17
Yo, trabaje de otra manera:

Creo las columnas en runtime con un ciclo (for i := 0 to q.FieldsCount-1)

Este el el código base para hacerlo:


With TQRDBText.Create(AOwner) do
begin
Parent := AOwner; // el Band
Height := AltoStd;
Top := 1;
Left := PxCampo; // comienza en 0 y se incrmenta en el ancho de cada campo
ParentFont := True;
AutoSize := False;
Width := ElAncho; // definido en parametros
DataSet := Self.DataSet; // el mismo del Report
DataField := ElCampo; // Nombre del campo
Tag := ElTag; //
OnPrint := QRDBTextPrint; // no es necesario generalmente
WordWrap := False;
Alignment := Alineacion;
If Bold Then
Font.Style := [fsBold];
If DataSet.FieldByName(ElCampo) is TFloatField Then
Begin
Alignment := taRightJustify;
Mask := '#,##0.00'; // ajustar mascara numericos
End;
End;
PXCampo := PxCampo + ElAncho + Separacion; // Separacion entre columnas
end;