A ideia desse exemplo, além de testar o formato das postagens para o blog, é construir um relatório simples. Não chega a ser o relatório mais simples que podemos escrever com o VRX, mas é um exemplo prático para ter uma noção geral do funcionamento dos objetos que o componente disponibiliza.
Nesse exemplo vou descrever como construir uma listagem de uma tabela de banco de dados usando o banco de exemplo do MS Access que é enviado no pacote de exemplos do componente.
Primeiro, vou mostrar a estrutura da tabela no banco para sabermos como desenhar o relatório.
 |
Figura 1 - O banco de dados |
Da tabela de "Estados", vamos imprimir uma listagem com os atributos "Estado" e "Nome".
Para isso, abrimos um novo projeto no VB, adicionamos as referências para a OCX do componente e para o ADO.
Depois inserimos um formulário em branco com o nome "SampleReport", onde desenhamos o relatório seguindo o layout abaixo. Para desenhar, pode arrastar os objetos a partir da barra de ferramentas. A atenção é apenas com os objetos
ReportField porque eles precisam ser colocados dentro das seções (objeto
ReportSection). A melhora sequência para desenhar é inserir um
ReportMain, em seguida os objetos do tipo
ReportSection e no final os objetos do tipo
ReportField.
 |
Figura 2 - O desenho do relatório |
Para criar esse formulário, adicionamos o objeto do
ReportMain, definimos a propriedade
Name para "Relatório", a propriedade
Titulo para "Exemplo", ligamos a propriedade
Regua e definimos a propriedade
Divisao para 10. Depois inserimos 3 objetos do tipo
ReportSection, definindo para cada um, a propriedade
Tipo como
secCabecalho,
secDetalhe e
secRodape respectivamente. Depois inserimos 3 objetos do tipo
ReportField na seção de cabeçalho, programando a propriedade
Caption com os textos de acordo com a Figura 2. Em seguida, adicionamos mais 2 objetos do tipo
ReportField na seção de detalhe programando a propriedade
Campo de acordo com o nome do atributo da tabela "Estados".
Agora, escrevemos o código do formulário do relatório conforme a figura abaixo:
 |
Figura 3 - O código do relatório |
No formulário, criamos um método público para que possa ser chamado por alguma rotina ou tela do sistema, onde esse método pode ter um filtro, se necessário ou outras opções do relatório.
Normalmente deixamos o código que tem relação com o relatório encapsulado no próprio formulário, assim podemos levar o formulário inteiro para outro projeto, se necessário. É possível até definir as propriedades e executar o relatório a partir de outra parte do sistema. Tudo depende de como o sistema está desenhado. A única restrição aqui é que o relatório não pode ser chamado a partir de um formulário que está sendo exibido de forma modal.
Na Figura 3, destaquei a propriedade
Recordset porque através dela, dizemos ao componente qual a fonte de dados. Podemos usar um objeto recordset do ADO ou mesmo do DAO/RDO caso o sistema acesse banco de dados com esses engine. Como ela é uma propriedade do objeto
ReportMain, no código que escrevermos nos eventos, que são disparados pelo componente durante a execução, podemos usar essa propriedade para acessar os valores dos campos do registro que estiver corrente, mover o registro para frente para pular alguma parte ou mesmo mover para trás para repetir a impressão de um registro.
Outra parte importante é o método
Ativar que inicia a execução do relatório, e ao terminar, tendo o usuário impresso, fechado ou apenas visualizado, o controle volta ao código e fechamos o recordset.
Ao terminar a execução, como o formulário que desenhamos é apenas um
container para o desenho do relatório, fazemos o
Unload para que ele não fique ocupando memória.
Para executar esse relatório, criamos um formulário simples com um botão e uma caixa de parâmetros que usamos como filtro, e fazemos a chamada do método
Config do formulário do relatório, conforme mostra a figura abaixo:
 |
Figura 4 - O formulário de execução |
Em seguida, executamos o projeto, e clicamos no botão "Ativar Relatório". Como deixamos as propriedades padrão do
ReportMain, onde temos a propriedade
Visualizar ligada, o componente irá exibir a tela do visualizador com a execução do relatório. Ao visualizar é mostrada a tela a seguir:
 |
Figura 5 - A visualização do relatório |
O componente irá funcionar da seguinte forma:
- Primeiro todos os objetos da seção de cabeçalho são impressos.
- Em seguida, todos os registros do recordset são percorridos, e para cada um, são impressos os objetos da seção de detalhe, buscando o conteúdo de cada atributo do recordset pelo nome que foi colocado na propriedade Campo do ReportField. O componente irá imprimir cada seção de detalhe até que chegue ao final da página.
- Quando atingir o final, caso ainda existam registros para imprimir, é iniciada uma nova página e o processo é repetido, até que chegue ao final do recordset, imprimindo a seção de rodapé ao final de cada página.
Assim que terminam os registros do recordset, o visualizador fica em estado de espera para o usuário efetuar as ações. Nesse momento o usuário pode enviar para impressora, salvar o relatório em arquivo, modificar o tamanho de página, ampliar ou reduzir a visualização, enviar o relatório por email, dentre outras funções.
O mecanismo de navegação das páginas é liberado assim que a primeira página é gerada internamente. Assim, quando relatórios mais complexos ou de muitas páginas são gerados, o usuário pode visualizar as páginas já construídas enquanto as restantes são geradas internamente.
Esse é o processo básico. A ideia desse post e dar uma noção básica do mecanismo de forma que possam ser explicadas as outras propriedades, métodos e eventos de cada objeto.