Buscar

Dicas para quickreport

Código

{O objetivo deste exemplo é fazer um relatório que apresente uma relação um para muitos entre duas tabelas. Por exemplo:

A tabela 1 (MasterTable) possui a descrição de todos os clientes da empresa e a tabela 2 (DetailTable) possui os dados de todas as compras realizadas por cada cliente. Temos neste caso uma relação 1:N. O objetivo deste exemplo é produzir um relatório com o formato abaixo descrito:  

 Nome: Paulo Ramos

 Endereço: Rua N. S. Copacabana, 123

 Telefone: 1111-0000

 Itens comprados:

  4 pares de Sapatos

  3 calças

 Nome: Marcel Waintraub

 Endereço: Rua das Acácias 22, apto 1105

 Telefone: 0000-0000

 Itens comprados:

  1 gravata

  2 meias

A tabela MasterTable será a tabela com o nome dos clientes e a tabela DetailTable com as compras . Devemos então escolher no menu do Delphi, File/New/Forms e selecionar o formulário QuickReport Master/Detail. O formulário inicial é apresentado abaixo:

Este formulário é composto de 5 bandas, 2 componentes Table e 1 DataSource (MasterDS). Na banda Detail são colocados os componentes, por exemplo, QRDBText e QRLabel referentes a tabela MasterTable e na banda Subdetail os componentes referentes a tabela Detailtable.

É importante verificar se a propriedade DataSet do formulário foi inicializada corretamente para MasterTable . A propriedade DataSet da Banda SubDetail tem que ser alterada para DetailTable. Repare que o QuickReport inicializa erroneamente o valor desta propriedade para MasterTable.

Para cada tabela inicializa-se as propriedades DataBaseName com seu alias, a propriedade TableName com o nome das tabelas e a propriedade Active para true.

Para a tabela DetailTable estabelecemos a relação um para muitos. Para isto, devemos nos certificar que a propriedade MasterSource está atribuida com o Datasource MasterDS referente a tabela MasterTable.

Tendo feito isto é hora de se estabelecer de fato a ligação um para muitos entre as duas tabelas. Para isto, seleciona-se a tabela DetailTable e seleciona-se a propriedade MasterField (dá-se um click com o mouse no botão do lado direitro desta propriedade (...)).

Para se efetuar a ligação 1:N seleciona-se os campos de ligação entre as duas tabelas.

 Depois, coloca-se os componentes em suas respctivas bandas. Por exemplo, colocamos dois componentes QRLabel na banda Detail e alteramos as suas propriedades Caption para Nome e Endereço do cliente. A seguir, coloca-se dois componentes QRDBText logo abaixo (ou do lado) dos componentes QRLabel. Para cada um deles a propriedade DataSet é inicializada com MasterTable e a propriedade DataField com os campos da tabela Nome e Endereco.

Na banda SubDetail são colocados os itens relacionados as compras dos clientes. Coloca-se componentes QRDBText com a propriedade DataSet sendo inicializada como DetailTable e a propriedade DataField com os campos da tabela DetailTable, campo Descrição.

Ao final temos aproximadamente :

Para vizualizar de imediato o resultado deste trabalho, damos um click com a outra tecla do mouse em cima do relatório. É apresentado um menu e escolhemos a opção Preview. Que resulta em.

Quando houver necessidade de um relatório mais sofisticado, por exemplo, com várias relações 1:N, podemos partir de um relatório MasterDetail, acrescentar bandas SubDetails com suas respectivas tabelas.

Como foi visto no exemplo anterior, os cabeçalhos do banda SubDetail foram postos na banda Detail. Mas como ficaria se colocassemos mais uma banda SubDetail?

O primeiro passo é colocar uma banda (terceiro componente do QuikReport), depois estabeleça que a propriedade HeaderBand da nova banda do SubDetail seja igual ao nome desta nova banda (QRBand1). Para finalizar coloque os componentes QRLabel na banda QRBand1 para servirem como cabeçalhos do nova relação um para muito.


------------------------------------------------------------------------------------------------------

  1.Caso se queira que o relatório apresente cada cliente separadamente atribua a propriedade ForceNewPage da banda Detail para true;

  2.Para o caso de só imprimir um cliente quando ele tiver efetuado uma compra, coloca-se o seguinte código no evento BeforePrint da banda Detail}



  PrintBand:=DetailTable.RecordCount>0; {  3.Para ativar impressão do formulário a um evento OnClick, coloca-se a seguinte codificação:}


  QRMDForm.Print; {  4.Para se inicializar campos antes da apresentaçãodo formulário, coloca-se a codificação no evento ONStartPage do Formulário, Por exemplo:}

  procedure TDoseaciForm.DoseaciFormStartPage(Sender: TQuickRep);


  5. begin
  QRLabel4.Caption:=nome_serv;
  MasterTable.filter:='Id='+InttoStr(id_serv);
  MasterTable.filtered:=true;
  QRLabel18.Caption:=Form23.Edit2.text;
  QRLabel18.Left:=doseaciForm.width div 2- QRLabel18.width div 2;
  try
  QRMemo1.Lines.LoadFromFile('prelat.txt');
  QRImage1.Picture.loadfromfile(simbolo);
  finally
  end;
  end;   {  6.Para ativar o formulário a um evento OnClick, coloca-se a seguinte codificação:}

  QRMDForm.Preview;

Publicidade

Vote na dica




Quantidade de votos: 0 votos
Aceitação: 0%


Detalhes da dica

Categoria: Impressão
Adicionada dia: 12/06/03
Por: Felipe Monteiro
Visualizada: 56325 vezes

Planeta Delphi - Tudo sobre programação Delphi Planeta Delphi - www.planetadelphi.com.br - Todos os direitos reservados | Copyright 2001-2009