QR Dinâmico c/ agrupamento
Olá pessoal
Tenho um RxMemoryData assim:
Campo1 Campo2
Descrição1 20
Descrição1 30
Descrição1 40
Descrição2 25
Descrição2 35
Descrição2 40
Descrição2 45
Descrição1 12
E preciso de um relatório assim:
Descrição1
20 30 40 12
Descrição2
25 35 40 45
Como só conseguir fazer relatório de grupo no QR e D7 com DataSet local, coloquei outro RX no QR, segue código:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
iLinha, iColuna, iBase, iLargura: Integer;
vLabel: TQRLabel;
sDescricao : String;
begin
Screen.Cursor := crHourGlass;
QuickReport1 := TQuickReport1.Create(Self);
QuickReport1.QrRx.SortOnFields(´Descricao´);
QuickReport1.QrRx.Open;
RxMemoryData.First;
while not RxMemoryData.Eof do
begin
QuickReport1.QrRx.Append;
QuickReport1.QrRxDescricao.AsString := RxMemoryDataDescricao.AsString;
QuickReport1.QrRxValor.AsFloat := RxMemoryDataValor.AsFloat;
QuickReport1.QrRx.Post;
RxMemoryData.Next;
end;
iLargura := 77;
iLinha := 0;
iColuna := 0;
iBase := 0;
QuickReport1.QrRx.First;
sDescricao := QuickReport1.QrRxDescricao.AsString;
while not QuickReport1.QrRx.Eof do
begin
// if sDescricao <> QuickReport1.QrRxDescricao.AsString then
// begin
sDescricao := QuickReport1.QrRxDescricao.AsString;
// Next;
// Continue;
// end;
vLabel := TQRLabel.Create(QuickReport1);
vLabel.Name := ´vLabel´ + IntToStr(QuickReport1.QrRx.RecNo);
vLabel.Left := (iLargura * iColuna);
vLabel.Top := (21 * iLinha) + 4;
vLabel.Width := iLargura;
vLabel.Alignment := taRightJustify;
vLabel.Caption := FormatFloat(´,#0.00´, QuickReport1.QrRxValor.AsFloat);
vLabel.Parent := QuickReport1.DetailBand1;
iBase := 1;
inc(iColuna);
if QuickReport1.QrRx.RecNo mod 9 = 0 then
begin
inc(iLinha);
iColuna := 0;
iBase := 0;
end;
QuickReport1.QrRx.Next;
end;
QuickReport1.DetailBand1.Height := (21 * (iLinha + iBase)) + 4;
Screen.Cursor := crDefault;
QuickReport1.Preview;
QuickReport1.Free;
end;
Tenho um RxMemoryData assim:
Campo1 Campo2
Descrição1 20
Descrição1 30
Descrição1 40
Descrição2 25
Descrição2 35
Descrição2 40
Descrição2 45
Descrição1 12
E preciso de um relatório assim:
Descrição1
20 30 40 12
Descrição2
25 35 40 45
Como só conseguir fazer relatório de grupo no QR e D7 com DataSet local, coloquei outro RX no QR, segue código:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
iLinha, iColuna, iBase, iLargura: Integer;
vLabel: TQRLabel;
sDescricao : String;
begin
Screen.Cursor := crHourGlass;
QuickReport1 := TQuickReport1.Create(Self);
QuickReport1.QrRx.SortOnFields(´Descricao´);
QuickReport1.QrRx.Open;
RxMemoryData.First;
while not RxMemoryData.Eof do
begin
QuickReport1.QrRx.Append;
QuickReport1.QrRxDescricao.AsString := RxMemoryDataDescricao.AsString;
QuickReport1.QrRxValor.AsFloat := RxMemoryDataValor.AsFloat;
QuickReport1.QrRx.Post;
RxMemoryData.Next;
end;
iLargura := 77;
iLinha := 0;
iColuna := 0;
iBase := 0;
QuickReport1.QrRx.First;
sDescricao := QuickReport1.QrRxDescricao.AsString;
while not QuickReport1.QrRx.Eof do
begin
// if sDescricao <> QuickReport1.QrRxDescricao.AsString then
// begin
sDescricao := QuickReport1.QrRxDescricao.AsString;
// Next;
// Continue;
// end;
vLabel := TQRLabel.Create(QuickReport1);
vLabel.Name := ´vLabel´ + IntToStr(QuickReport1.QrRx.RecNo);
vLabel.Left := (iLargura * iColuna);
vLabel.Top := (21 * iLinha) + 4;
vLabel.Width := iLargura;
vLabel.Alignment := taRightJustify;
vLabel.Caption := FormatFloat(´,#0.00´, QuickReport1.QrRxValor.AsFloat);
vLabel.Parent := QuickReport1.DetailBand1;
iBase := 1;
inc(iColuna);
if QuickReport1.QrRx.RecNo mod 9 = 0 then
begin
inc(iLinha);
iColuna := 0;
iBase := 0;
end;
QuickReport1.QrRx.Next;
end;
QuickReport1.DetailBand1.Height := (21 * (iLinha + iBase)) + 4;
Screen.Cursor := crDefault;
QuickReport1.Preview;
QuickReport1.Free;
end;
Nigro
Curtidas 0
Respostas
Nigro
25/10/2006
up
GOSTEI 0
Nigro
25/10/2006
Obrigado mesmo assim, fiz o relatório cross tab no qr, na mão mesmo
GOSTEI 0
Motta
25/10/2006
atrasado .....
Uma vez isto gerando uma function (no bd) que retorna a lista requerida numa string.
gero um cursor
do tipo select campo2 from tabela where campo1 = ....
concateno cada linha do cursor numa string até o fim dste
a funtion retorna esta string
mas o bd deve suportar functions
Uma vez isto gerando uma function (no bd) que retorna a lista requerida numa string.
gero um cursor
do tipo select campo2 from tabela where campo1 = ....
concateno cada linha do cursor numa string até o fim dste
a funtion retorna esta string
mas o bd deve suportar functions
GOSTEI 0
Motta
25/10/2006
atrasado .....
Uma vez isto gerando uma function (no bd) que retorna a lista requerida numa string.
gero um cursor
do tipo select campo2 from tabela where campo1 = ....
concateno cada linha do cursor numa string até o fim dste
a funtion retorna esta string
mas o bd deve suportar functions
Uma vez isto gerando uma function (no bd) que retorna a lista requerida numa string.
gero um cursor
do tipo select campo2 from tabela where campo1 = ....
concateno cada linha do cursor numa string até o fim dste
a funtion retorna esta string
mas o bd deve suportar functions
GOSTEI 0
Nigro
25/10/2006
Valeu pela atenção Motta, mas Paradox é assim mesmo...
(eca..)
Ai o pessoal fala: ´Credo Nigro... Trabalhando com Paradox...´, pois é... Vai dizer para o cara da lojinha, do consultório, da papelaria, do acçougue, ou seja todo esse pessoal que só tem um micro, que ele tem que colocar um servidor dedicado ou comprar um micro mais rápido, só por causa do banco...
é a vida...
(eca..)
Ai o pessoal fala: ´Credo Nigro... Trabalhando com Paradox...´, pois é... Vai dizer para o cara da lojinha, do consultório, da papelaria, do acçougue, ou seja todo esse pessoal que só tem um micro, que ele tem que colocar um servidor dedicado ou comprar um micro mais rápido, só por causa do banco...
é a vida...
GOSTEI 0