terça-feira, 24 de janeiro de 2012

Delphi - ReportBuilder – Conhecendo os Recursos deste Gerador de Relatórios



Nesta matéria iremos conhecer este poderoso gerador de relatório denominado ReportBuilder. Ele se diferencia da forma de trabalhar dos outros geradores de relatório como o Quick Report, ou até mesmo o Fortes Report. Vale salientar a imensa quantidade de recursos e a facilidade de construir relatórios possuindo algumas características importantes que vale salientar, como:
A fácil instalação e manuseio dos componentes, sua utilização difere muito do Quick Report, ou seja não precisa de muito adaptação do programador.

Procurarei abordar os principais componentes e demonstrar seu poderio seguido de uns exemplos bem simples de sua utilização.

Entendendo o Funcionamento

Observe na Figura 01 o esquema de como é o funcionamento do ReportBuilder.

Figura 01. Equação do ReportBuilder.

Em seguida irei dar uma breve explicação da dita “Equação do ReportBuilder”.

Data Access: Acesso aos dados, seria a recuperação dos dados de uma base de dados qualquer, seja por tabelas ou outra série de dados de forma organizada.

Data Process: Processamento dos dados, camada intermediária para o processamento dos dados.

Report Layout: Layout do relatório, é a disposição e o comportamento dos componentes dentro do relatório.

Report Output: Saída do relatório, ou seja o resultado final para o usuário.

A instalação

Infelizmente ele não é gratuito, mas possui uma versão trial no seguinte site http://www.digital-metaphors.com/ que iremos desfrutá-lo neste artigo. Utilizaremos a versão Server ( a mais completa), para isto entre no site acima e através da aba Download escolha “Server 10.06 for Delphi 7” e em seguida baixe o seu instalador. A instalação é bem simples, feche o Delphi 7 e dê um duplo clique em seu arquivo de instalação. Leia atentamente sua Licença (lembrando que estamos utilizando uma versão demo) e em seguida clique em next. Aparecerá algumas janelas para escolher o diretório de instalação, entre outras configurações. Instale tudo como padrão.

Conhecendo os componentes

Abra o Delphi 7 e localize a paleta chamada RBuilder, veja a Figura 02.

Figura 02. Paleta de componentes.

Irei dar uma breve explicação dos principais componentes encontrados nesta paleta.

ppDBPipeline: Utilizado para acesso aos dados. Componente compatível com Tdataset. O ppDBPipeline é conectado através da propriedade Datasource.

ppBDEPipeline: Utilizado especificamente para acesso aos dados utilizando o BDE. As características são as mesmas no descrito acima.

ppTextPipeline: Utilizado para acessar arquivos textos. As características são parecidas com os descritos acima.

ppJITPipeline: Quando ligado a propriedade DataPipeline de qualquer componente de relatório Data-Aware, esse componente pode ser usado para acessar dados armazenados em objetos do Delphi.

ppReport: O principal componente do ReportBuilder. Ao clicar com o botão direito escolhendo Report Designer... é possível verificar o layout do relatório.

ppViewer: É um objeto pouco utilizado, útil para que você possa substituir o formulário padrão utilizado pelo ReportBuilder para visualização e impressão de relatórios por formulários criados.

ppArchiveReader: Componente utilizado para ler relatórios salvos com extensão (.raf)

ppDBArchiveReader: Componente utilizado para manipular relatórios salvos em tabelas do Banco de Dados.

ppDesigner: Utilizado para que os usuários finais possam customizar seus relatórios junto com sua aplicação.

ppReportExplorer: Permite que os usuários finais salve e organize seus relatórios em uma estrutura de diretórios.

ppDataDictionary: É possível controlar as tabelas e campos que o usuário pode ver, como também fornece relacionamentos default entre tabelas.

Neste momento iremos conhecer alguns dos principais recursos deste gerador de relatórios para adiante montarmos um exemplo simples. Para isto abra o Delphi 7 e coloque no formulário um componente chamado ppReport e em seguida dê um duplo clique. Aparecerá uma mensagem indicando que se trata de uma cópia Demo e mais algumas informações relevantes para poder obter o produto completo. Veja a Figura 03 o layout.

Figura 03. Design do ReportBuilder.

Logo abaixo irei explicar e apresentar alguns dos principais recursos desta ferramenta.

Figura 04. Barra de Ferramentas.

A barra de ferramentas é dividida em três segmentos:

Na parte esquerda da barra encontram-se os componentes de interface, na região central os componentes ditos Data-Awares e na direita os relacionados aos tipos de bandas.

 Label, Memo e Richtext: A mesma funcionalidade dos componentes da própria IDE do Delphi.

System Variable: Recursos do sistema. Interessante, permite colocar a data atual, data e hora atual, nome do documento, número de páginas entre outras coisas.
Poderá  ser alterado através da propriedade VarType e seu formato é controlado pela propriedade DisplayFormat, veja Figura 05 abaixo:

Figura 05. System Variable.

Shape: Permite colocar figuras geométricas no relatório como (quadrados, retângulos, círculos, elipses).

Lines: Inserir linhas, útil para fazer divisões entre os campos ou entre as bandas do relatório.

Barcode e 2DBarcode: Código de barras, recurso muito interessante em se tratando de geradores de relatórios, um exemplo disto é o Quick Report, é necessário componentes de terceiros para obter este recurso.

CheckBox: Possibilidade da utilização do checkBox dentro do relatório.

Chart: Criação de gráficos.

Os recursos apresentados na região central da barra de tarefas possuem quase a mesma finalidade, a diferença é que eles têm vínculo ao Banco de Dados.

Region: Define uma área especifica do relatório para ser controlada.

Subreport: Utilizado para criar relatórios do tipo mestre-detalhe, possibilitando criar várias abas dividindo-o em várias partes. A propriedade PrintBehavior determina o tipo de banda a ser criada.

Page Break: Como o próprio nome diz, serve para fazer quebra de páginas.

Crosstab: Componente útil para fazer relatórios com referência cruzada.

É importante ressaltar que o ReportBuilder possui Eventos para serem utilizados nas bandas, mas especificamente nesta matéria não utilizaremos nenhum evento.

Montando um projeto de exemplo

Depois de aprendermos e conhecermos um pouquinho sobre os recursos, iremos a partir daqui montar um exemplo simples de relatório do tipo Mestre-detalhe.
Abra o Delphi 7 vá em File/New/Application e adicione no formulário um componente SqlConnection. Vale ressaltar que estaremos utilizando o Firebird 1.54 e seu Banco de Dados padrão (EMPLOYEE.FDB), para quem não sabe ele encontra-se na seguinte pasta C:\Arquivos de programas\Firebird\Firebird_1_5\examples\EMPLOYEE.FDB.

Pegue um SqlDataset altere seu nome para SqlDepartment e ligue-o ao Sqlconnection através de sua propriedade Sqlconnection.
Em sua propriedade CommandText iremos colocar a instrução SQL para obter os campos da tabela Department. Veja abaixo:

SELECT DEPT_NO, DEPARTMENT, LOCATION FROM DEPARTMENT

Neste momento colocaremos um componente Datasetprovider e ligaremos a propriedade Dataset ao SqlDepartment e em seguida coloque um Clientdataset, nomeie para ClientDepartment e coloque em sua propriedade Providername como Datasetprovider1.
Coloque mais um componente Sqldataset e o nomeie para SqlEmployee, ligue sua propriedade Sqlconnection para Sqlconnection1 e em sua propriedade CommandText coloque o seguinte código SQL:

SELECT FIRST_NAME, LAST_NAME, HIRE_DATE, DEPT_NO FROM EMPLOYEE WHERE DEPT_NO = :DEPT_NO

Em seguida deveremos ligar este SqlDepartment com o SqlEmployee e será feito isto através de um datasource. Coloque no formulário um componente Datasource e dê o nome de DSDepEmp. Em sua propriedade dataset coloque como SqlDepartment, no SqlEmployee coloque a propriedade Datasource para DSDepEmp. Coloque mais um componente Clientdataset e altere seu nome para ClientEmployee.
Adicione os Fields tanto nos componentes SqlDatasets quanto nos ClientDatasets. Não esqueça de setar a propriedade DataSetField do ClientEmployee para ClientDepartmentSQLEmployee. Veja a Figura 06 como está ficando nosso formulário. 


Figura 06. Mestre Detalhe.

Criamos apenas um relacionamento entre estas duas tabelas. Adicione mais dois Datasources os renomeie para DSDepartment e DSEmployee e ligue-os aos respectivos Clientdatasets.

Agora iremos utilizar os componentes do ReportBuilder. Coloque um componente ppDBPipeline (utilizado para acesso aos dados) e o nomeie para ppDBDepartment e coloque na propriedade Datasource para DSDepartment. Após isto coloque mais um componente ppDBPipeline e o nomeie para ppDBEmployee ligando ao Datasource DSEmployee e a propriedade MasterDataPipeline deixe como ppDBDepartment (seria a tabela mestre).
Por último coloque um componente ppReport e ligue sua propriedade Datapipeline para ppDBDepartment.

Veja na Figura 07 como está ficando nosso exemplo.

Figura 07. Mestre Detalhe

Para visualizarmos os dados insira nos formulários dois Dbgrids e altere suas propriedades Datasource respectivamente para DSDepartment e  DSEmployee e finalmente iremos inserir uma botão para chamar nosso relatório. Veja abaixo o código e a Figura 08.

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  ppReport1.Print;
end;

Figura 08. Configuração dos Componentes.

Montando o relatório

Dê um duplo clique sobre o componente ppReport para abrir o Report Designer. Por padrão ele vem com as bandas Header, Detail e Footer. Adicione na banda Header um componente Label com o nome de “Exemplo – Mestre Detalhe” e um System variable para podermos pegar a data atual. Em seguida na banda Detail coloque mais 2 Labels e 2 Dbtext para pegar os seguintes campos da tabela Department: Dept_No e Department, nomeie os Labels e ligue os Dbtexts com respectivos campos. Veja abaixo a Figura 09 como está ficando nosso relatório.

Figura 09. Montando o relatório.

Adicione na banda Detail um componente Subreport e ligue-o à tabela Employee. Percebam que foi criado uma aba na região inferior da tela chamada Subreport1:Dbemployee, é através desta aba que iremos configurar a outra parte do nosso relatório. Clique nesta aba e coloque mais 3 Labels  e 3 Dbtexts, com os seguintes nomes First_Name, Last_Name e Hiredate e ligandos os Dbtexts aos seguintes campos: Fisrt_name, Last_Name e Hiredate respectivamente.

Para completar nosso exemplo insira um componente System Variable, altere sua propriedade vartype para vtPageSetDesc (serve para ter uma contagem do tipo: página atual por total de páginas) e o coloque no formulário principal na banda Footer.
Rode nosso exemplo, clique no botão Preview e teremos como resultado nosso relatório parecido com a Figura 10.

Figura 10. Exemplo Pronto.

Conclusão

Montamos nesta matéria sem muito esforço, um exemplo simples com este gerador de relatórios. Procurei explorar e demonstrar poucos dos muitos recursos encontrados nele. Espero que tenham gostado e até a próxima.   

Nenhum comentário:

Postar um comentário