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 |
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 |
Agora, escrevemos o código do formulário do relatório conforme a figura abaixo:
Figura 3 - O código 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 |
Figura 5 - A visualização do relatório |
- 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.
Já uso o ReportX, versão registrada, para VB6. Gostaria de saber se já existe uma versão para Visual Stúdio 2010/2012
ResponderExcluirA versão para plataforma .net está em planejamento, porém ainda não tem uma previsão para sair. Vou usar o blog também para postar as novidades desse projeto. Abs!
Excluir