QReport XML

Delphi

19/08/2005

[b:b57bd0714e]Ola Pessoal!

Quero fazer um relatório no QReport a partir de uma base de dados XML.
Mostrando o relatorio nesse formato:[/b:b57bd0714e]
   Relatorio de Clientes
----------------------------------------
Nome: JOAO SANTOS
Endereco: RUA TAL  Numero: 10
Bairro: CENTRO     Estado: PR
Cidade: MARINGÁ    Pais: Brasil
Cnpj: 000000000000 Status: Ativo
----------------------------------------
Nome: JOAO SANTOS
Endereco: RUA TAL  Numero: 10
Bairro: CENTRO     Estado: PR
Cidade: MARINGÁ    Pais: Brasil
Cnpj: 000000000000 Status: Ativo
----------------------------------------
Nome: JOAO SANTOS
Endereco: RUA TAL  Numero: 10
Bairro: CENTRO     Estado: PR
Cidade: MARINGÁ    Pais: Brasil
Cnpj: 000000000000 Status: Ativo
----------------------------------------

[color=green:b57bd0714e]
[b:b57bd0714e]Coloquei esse código na Detail, queria que ele mostrasse desse jeito, sem ter que colocar varias bands...[/b:b57bd0714e][/color:b57bd0714e]

procedure TFQR.Imprime(XMLDocument :TXMLDocument);
var
    Clientes : IXMLClientesType;
    Cliente  : IXMLClienteType;
    i : Integer;
begin
  Clientes:= GetClientes(XMLDocument);
  for  i:=0 to  Clientes.Count-1 do
   begin
    Cliente := Clientes.Cliente[i]; 
    QRLabel1.Caption := Cliente.Nome;
    QRLabel2.Caption := Cliente.Endereco;
    QRLabel3.Caption := IntToStr(Cliente.No);
    QRLabel4.Caption := Cliente.Bairro;
    QRLabel5.Caption := Cliente.Cidade;
    QRLabel6.Caption := Cliente.Pais;
    QRLabel7.Caption := Cliente.Cnpj;
    QRLabel8.Caption := Cliente.Status;
  end;
  QuickRep1.Preview;
end;


[b:b57bd0714e]Pensei em algo no beforePrint da banda, [color=orange:b57bd0714e]Alguma idéia?[/color:b57bd0714e][/b:b57bd0714e]


Michelli88

Michelli88

Curtidas 0

Respostas

Michelli88

Michelli88

19/08/2005

Oi pessoas... ninguem respondeu minha pergunta, mas eu achei um tutorial sobre QReport que me deu uma luz.

Entao, usei a StringsBand, e o QRExpr para imprimir.

Coloca o [b:021c75e392]QRExpr [/b:021c75e392]dentro do [b:021c75e392]StringsBand[/b:021c75e392], e na propriedade ´Expression´ do QRExpr, coloca o nome do StringBand.

A StringBand imprime o que armazenamos na propriedade items.

Por exemplo: Maria, João, José, Carlos

Porem eu precisava de imprimir varias listas e não uma só.

Para resolver isso, eu mandei imprimir uma lista, a de nome por exemplo. E no evento beforePrint da StringBand, eu mandei os outros QrLabels receber o dado desejado... Deu certo!

[b:021c75e392]o código ficou assim: [/b:021c75e392]


procedure TFQR.FormCreate(Sender: TObject);
var
  lista : TStringList;
  i     : Integer;
begin
  lista:=TStringList.Create;
  Clientes:= GetClientes(XMLDocument1);
    for i := 0 to Clientes.Count-1 do begin
      Cliente := Clientes.Cliente[i];
      //aqui adicionei os itens da lista
      lista.Add(Cliente.Nome);
      QRStringsBand1.Items:=lista;
    end;
  lista.Free;
end;



procedure TFQR.QRStringsBand1BeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
    QRLabel1.Caption := Cliente.Nome;
    QRLabel2.Caption := Cliente.Endereco;
    QRLabel3.Caption := IntToStr(Cliente.No);
    QRLabel4.Caption := Cliente.Bairro;
    QRLabel5.Caption := Cliente.Cidade;
    QRLabel6.Caption := Cliente.Pais;
    QRLabel7.Caption := Cliente.Cnpj;
    QRLabel8.Caption := Cliente.Status; 
end;



[color=violet:021c75e392][b:021c75e392][size=18:021c75e392]No fim, o resultado foi exatamente o desejado:[/size:021c75e392][/b:021c75e392]
[/color:021c75e392]
Relatorio de Clientes ---------------------------------------- Nome: JOAO SANTOS Endereco: RUA TAL Numero: 10 Bairro: CENTRO Estado: PR Cidade: MARINGÁ Pais: Brasil Cnpj: 000000000000 Status: Ativo ---------------------------------------- Nome: JOAO SANTOS Endereco: RUA TAL Numero: 10 Bairro: CENTRO Estado: PR Cidade: MARINGÁ Pais: Brasil Cnpj: 000000000000 Status: Ativo ---------------------------------------- Nome: JOAO SANTOS Endereco: RUA TAL Numero: 10 Bairro: CENTRO Estado: PR Cidade: MARINGÁ Pais: Brasil Cnpj: 000000000000 Status: Ativo ----------------------------------------


[size=18:021c75e392][color=blue:021c75e392]Quer quizer o tutorial que usei está neste link: [/color:021c75e392][url=https://www.devmedia.com.br/curso/relatorios/moduloIresumo.pdf] Tutorial do Quick Report[/url][/size:021c75e392]


GOSTEI 0
Michelli88

Michelli88

19/08/2005

Correçao no código:
procedure TFQR.FormCreate;
var
  i     : Integer;
begin
  Clientes:= GetClientes(XMLDocument1);
    for i := 0 to Clientes.Count-1 do begin
      StringBand.Items.Add(InttoStr(i));
    end;
end;

procedure TFQR.StringbandBeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  LNome.Caption    :=Clientes.Cliente[StrToInt(StringBand.Item)].Nome;
  LEndereco.Caption:=Clientes.Cliente[StrToInt(StringBand.Item)].Endereco;
  LBairro.Caption  :=Clientes.Cliente[StrToInt(StringBand.Item)].Bairro;
  LCidade.Caption  :=Clientes.Cliente[StrToInt(StringBand.Item)].Cidade;
  LCpf.Caption     :=Clientes.Cliente[StrToInt(StringBand.Item)].Cnpj;
  LNo.Caption      :=Clientes.Cliente[StrToInt(StringBand.Item)].Estado;
  LPais.Caption    :=Clientes.Cliente[StrToInt(StringBand.Item)].Pais;
  LStatus.Caption  :=Clientes.Cliente[StrToInt(StringBand.Item)].Status;
end;



GOSTEI 0
Martins

Martins

19/08/2005

É possível fazer isso com uma tabela do Paradox, Interbase, SQL-Server?

Muda muita coisa.

Valew!!!


GOSTEI 0
Michelli88

Michelli88

19/08/2005

Bom, eu não testei mas, acho q se vc fizer assim funciona:

inves de colocar assim:
procedure TForm1.StringbandBeforePrint(Sender: TQRCustomBand; var PrintBand: Boolean); begin LNome.Caption :=[b:12fcbf5061]Clientes.Cliente[StrToInt(StringBand.Item)].Nome[/b:12fcbf5061];


coloque direto da query:
procedure TForm1.StringbandBeforePrint(Sender: TQRCustomBand;
  var PrintBand: Boolean);
begin
  LNome.Caption := QueryNome.AsString;



GOSTEI 0
Martins

Martins

19/08/2005

Já resolvi o meu problema, mudei um pouco o meu relatório e ficou com os resultados que eu quero, um layout diferente, mas funcional e legivel.

[b:0caa9ac57b] Moderadores e administradores[/b:0caa9ac57b] podem fechar o tópico.

Martins


GOSTEI 0
Martins

Martins

19/08/2005

[size=26:36c3173bd5]
Desculpe Michelli, postei a mensagem no link errado
[/size:36c3173bd5]


GOSTEI 0
POSTAR