O Report Manager é um gerador de relatórios open source e será o novo gerador de relatórios oficial da KS Sistemas. Este tutorial tem o objetivo de fazer uma introdução aos conceitos e recursos utilizados na construção de relatórios utilizando esta poderosa ferramenta.
Esse guia irá te auxiliar a montar um relatório no Report Manager com exercícios práticos.
A documentação oficial do Report Manager pode ser encontrada em:
O Report Manager pode estabelecer conexão com praticamente todos os bancos de dados existentes, permitindo inclusive estabelecer conexões simultâneas com bancos diferentes através de algumas configurações que serão apresentadas a seguir:
Para iniciar, um novo relatório, acesse em Arquivo → Novo
Todas as configurações de acesso a dados devem ser feitas no menu Relatório → Configuração de acesso a Dados.
Para criar uma nova conexão, siga os seguintes passos.
Para estabelecer uma conexão com bancos utilizando a tecnologia BDE é necessário utilizar a opção Borland Database Engine.
As conexões via ODBC, utilizam o driver Microsoft DAO e a conexão pode ser estabelecida baseada em um conection string.
É possível criar inúmeros datasets por relatório e criar relacionamentos entre eles. Todos os dados apresentados em um relatório desenvolvido no Report Manager provem de um DataSet, ou seja, um DataSet é o quem providencia dados para o relatório.
Os DataSets são criados na aba Tabelas do Relatório, na mesma tela de criação de conexão.
Para criar um novo DataSet siga os seguintes passos
Após a criação dos DataSets é hora de montar a apresentação do Relatório.
Para criar cabeçalhos de relatórios é necessário criar uma Subseção no Sub-relatório criado. Para isso, vá na aba Structure na janela principal.
Clique na opção Adiciona uma seção no sub-relatório selecionado e depois clique no tipo cabeçalho de pagina
Para que os dados dos DataSets sejam apresentados é necessário especificar no sub-relatório qual é o seu DataSet através da propriedade Tabela Principal, que é apresentada na tela quando um Sub-relatório é selecionado.
É possível criar textos independentes dos valores contidos nos datasets afim de criar legendas para campos, títulos de relatórios, áreas de assinaturas, etc., ou também, condicionar estes textos a determinados valores contidos nos DataSet.
Para criar um Label basta clicar no botão 'Insere um texto estático' na barra de ferramentas superior.
Feito isso, o cursor irá assumir modo de inserção de objetos na tela, bastando clicar e arrastar o mouse para criar o label. Após o Label ter sido criado suas propriedades podem ser modificadas nas abas de propriedades que ficam na lateral esquerda da tela.
Geralmente é necessário incluir linhas verticais / horizontais, círculos, etc. a um documento, no caso do Report Manager temos o objeto Shape, que na verdade é um objeto que lhe permite determinar sua forma, se vai ser um circulo, uma linha, um quadrado, etc. A ferramenta de desenhos pode ser acessada através do botão Insere um desenho simples, na barra de ferramentas superior.
Após você determinar a área que a ser ocupada por esse desenho você pode acessar a propriedade Forma que fica na aba Shape e alterar o desenho.
Expressões são utilizadas para concatenar textos, exibir mensagens de acordo com valores dos datasets, apresentar resultado de cálculos, etc. O Processo para criar a expressão é o mesmo da criação do label, bastando clicar no botão 'Insere uma expressão'
Para determinar a expressão, basta clicar na opção Expressão da aba Expression das abas de opções da lateral esquerda. Ao clicar nessa opção, a seguinte tela será apresentada
Existe uma série de variáveis e funções prontas do próprio Report Manager, como por exemplo, o número da página, total de páginas, remoção de espaços desnecessários, converter caracteres para maiúsculo ou minúsculo, operações matemáticas, etc.
Como já demonstrado anteriormente, todos os campos dos datasets ficam disponíveis na aba Data no menu esquerdo, sempre separados pelo nome do DataSet.
Para adicionar os campos no relatório basta selecionar o campo desejado e arrastar o mesmo para a tela, feito isso você pode editar a formatação do objeto resultante da maneira que bem desejar.
Criar um relatório que liste uma relação de funcionários (baseados na tabela paradox apresentada a seguir) com o título Listagem de Funcionários Ativos, com uma legenda superior para cada campo inserido no relatório, data e hora da geração e número de página corrente.
Dando continuidade ao exercício proposto, agora iremos formatar a apresentação do campo Salário na tela, para que fica 'R$XXX,XX'
Toda variável que provem de um dataSet, na verdade é uma expressão, e que, também pode ser alterada. Vamos alterar a expressão do campo de Salario.
Feitas essas alterações, o valor do salário dos funcionários já será apresentado com o R$ como prefixo e com 2 casas decimais fixas.
Agora iremos utilizar uma condicional para dizer se o salário do funcionário esta acima ou abaixo de R$300,00. Faremos de duas formar diferentes, começando pela mais simples, utilizando IF em expressão.
Primeiro adicione um objeto do tipo expressão na areá de detalhes do relatório, depois em sua expressão utilize o comando:
Onde o primeiro parâmetro corresponde a comparação, o segundo corresponde a resposta em caso de resultado afirmativo e o terceiro e último corresponde a resposta em caso de resultado negativo.
Outra forma de fazer permitiria formatações diferentes para cada condição. Essa forma consiste na utilização da propriedade Condição de impressão. Basicamente serão adicionados dois Labels exatamente no mesmo lugar, um com o texto 'Acima' e a fonte Azul, e o outro com o texto 'Abaixo' e a fonte vermelha, a condição de apresentação de um vai ser o inverso do outro.
Adicione um Label e preencha as seguintes propriedades com os valores aqui especificados
Repita o processo (inclusive deixando um label sobre o outro),
Caso seja necessário alterar a query por algum motivo (ex: gerar o dataSet ordenado por ordem alfabética) e os campos não sejam alterados, não é necessário alterar nenhuma condicional nem a disposição dos campos na tela.
Ainda seguindo com a tabela de funcionários, criaremos mais duas tabelas, uma para armazenar dados da empresa que esta trabalhando com o sistema e outra para setores de funcionários.
Vamos acrescentar pequenas modificações no relatório de funcionários ativos.
Note que, não foi necessário criar outro sub-relatório nem especificar esse novo dataSet como tabela principal de um sub-relatório, isso porque, quando você se referencia a um dataSet dentro de um sub-relatório sem especificar que esse dataSet é sua tabela principal, o sub-relatório só carrega o primeiro registro do dataSet.
Para o exemplo de relatório mestre / detalhe iremos criar um relatório novo, porém baseado no primeiro.
Utilizando a variável :id_setor e indicando que a tabela mestra é a tbl_setores, esta é a configuração principal do nosso mestre / detalhe. Com isso estamos dizendo que a cada registro do dataSet tbl_setores iremos recarregar o dataSet tbl_funcionarios, trazendo somente os funcionários que tenham o valor do campo setor igual ao campo id do registro carregado do dataSet tbl_setores.
Após todos os dataSets terem sido criados, é o momento de criar a parte visual do relatório.
O rodapé não foi apresentado, porém foi impresso normal.
Para chamadas externas e atualização dinâmica do relatório, são utilizados Parâmetros. Esses parâmetros geralmente são vinculados aos valores do Where das querys. A criação de parâmetros é através da tela de conexão e criação de dataSets
Na criação do parâmetro basta você informar seu nome, valor inicial e tabela associada. Crie um parâmetro com as seguintes propriedades:
Feito isso, já é possível utilizar o parâmetro recém criado nas querys. Altere a query do dataSet tbl_funcionarios para:
Dessa forma serão somente apresentados os funcionários com o Salario maior do que R$400,00.
Esse valor default do parâmetro pode ser alterado. Como já dito anteriormente em tempo de execução do relatório, o valor dos parâmetros podem ser modificados, fazendo com que o relatório seja carregado novamente porém de forma mais rápida. Para alterar um parâmetro ou mais com o relatório já carregado, basta pressionar a tecla F12, ou clicar no botão Exibir uma janela de parâmetros do usuário.
Todos os parâmetros serão apresentados, possibilitando a alteração.
É comum nos relatórios querermos fazer um campo que calcule um determinado campo. Para isso, as Expressões possuem uma propriedade chamada Agregar. Nela você pode agregar expressões ao sub-relatório inteiro, à página ou à um grupo. Feito isso, ainda existe uma propriedade chamada “Ag. Tipo” (Tipo de Agregação). Nela existem as expressões Soma (para a soma dos campos), Min (o valor mínimo daquela seqüência de registros), Max (maior valor daquela seqüência de registros), Média (a média daquela seqüência de registros) e Std. Desv. (Desvio padrão estatístico daquela sequência de registros).
Caso: Queremos calcular o total do salário de todos os funcionários.
Com isso o valor daquela expressão será agregado à cada novo registro exibido no seu sub-relatório. No nosso caso ele irá incrementar o valor da soma de todos os salários de cada setor sempre que cada novo registro de setor for exibido, mantendo o filtro.
Existe algumas forma de definir a formatação de um campo, porem a mais prática e recomendada é através da propriedade Formato de Exibição, está propriedade pode ser utilizada como a propriedade Edit Mask de um MaskEdit no Delphi, pois, nesta propriedade é definida a mascara de exibição do campo.
Para definir um formato de exibição para campos que deveram apresentar valores monetários, a propriedade devera ser preenchida com R$ 0.00 por exemplo. Note que o caracter utilizado para separação decimal é o ponto.
É comum surgir a necessidade de se referenciar ao resultado de uma expressão criada, em uma outra expressão qualquer, como por exemplo, montar um calculo de diferença em um totalizador. Para que isso seja possível, existe a propriedade Identificador nas expressões, o uso desta propriedade faz com que seja criada uma variável com o nome definido na propriedade e que passa a ter o acesso liberado em todo relatório. Valor desta variável é sempre o resultado da expressão que contem o identificador.
Os detalhes possuem a propriedade Desp. Horz.. Essa propriedade determina se o detalhe irá aparecer do lado de outro detalhe se sobrar espaço.
Isso pode ser útil para, por exemplo, imprimir etiquetas.
Neste exemplo temos uma tabela de produtos, com vários registros. O nome do DataSet dessa tabela é PRODUTO
Deverá ter aparecido algo assim
| Item 1 | Item 2 |
| Item 3 | Item 4 |