Artigo Java Magazine 38 - Mais relatórios Passo a Passo

Artigo publicado pela Java Magazine 38.

Esse artigo faz parte da revista Java Magazine edição 38. Clique aqui para ler todos os artigos desta edição

 

Clique aqui para ler todos os artigos desta edição

Mais relatórios Passo a Passo

Totalizações e gráficos com iReport e JasperReports

Aprenda como definir agrupamento e calcular totais em vários níveis em um relatório mestre-detalhe, e veja como criar um gráfico de resumo no final do relatório

No artigo “Relatórios na Web Passo a Passo”, na edição anterior, apresentamos o JasperReports e o iReport e mostramos como criar um relatório mestre-detalhe completo, que lista detalhes dos pedidos de clientes. Neste artigo, vamos incrementar o relatório definindo grupos e acrescentando diversas totalizações. Também vamos mostrar como criar e configurar gráficos no relatório

Sobre o projeto de exemplo

O projeto utilizado neste artigo permite a execução de um relatório a partir de uma aplicação web. Ele é baseado em quatro entidades principais: pedidos, itens de pedido, clientes e produtos. Os dados do relatório são obtidos a partir de um banco MySQL, e o modelo de dados é mostrado na Figura 1.

 

Figura 1. Modelo de dados do projeto de exemplo.

 

A Figura 2 representa o resultado final desse relatório. O quadro “Como criar o relatório inicial” resume os passos para a criação. O projeto completo, com todas as classes necessárias, os templates de relatório .jrxml e o script para criação do banco de dados, está disponível no site da Java Magazine. Os leitores que não acompanharam o artigo na edição anterior poderão obter esse exemplo pronto, e partir dele para realizar as mudanças detalhadas aqui. Será disponibilizado no download tanto o projeto inicial, como o projeto final, resultado das alterações feitas neste artigo.

 

RelatorioPedidos.jrxml

RelatorioItens.jrxml

Figura 2. Relatório e sub-relatório iniciais (como criados na edição anterior), e resultado da execução do relatório

 

Agrupando pedidos por cliente

Repare na Figura 2 que, quando um cliente tem diversos pedidos, os dados do cliente (no caso, o nome) aparecem repetidos para cada pedido. Vamos melhorar o relatório, agrupando todos os pedidos de um cliente e imprimindo somente uma vez os seus dados. Para isso precismos definir um grupo para fazer quebra de pedidos por cliente.

Quando um grupo é criado no JasperReports, automaticamente são criadas duas novas bandas: nomegrupoHeader e nomegrupoFooter (por exemplo, clienteHeader e clienteFooter para um grupo com nome cliente). Colocamos nestas bandas as informações associadas ao grupo, que neste caso são o nome do cliente e o valor total do cliente; já os dados de cada item do grupo permanecem na banda detail, que são os pedidos e itens de pedido do cliente.

Também é preciso definir uma expressão de agrupamento utilizada pelo JasperReports para fazer a quebra do grupo. Usamos o nome do cliente. Para que os grupos sejam apresentados da maneira esperada, é preciso que a fonte de dados também esteja ordenada corretamente, ou seja, a consulta SQL deve ter a cláusula “order by” (ou se for usado um datasource de JavaBeans, deve-se passar uma coleção com os objetos já ordenados de forma compatível com os grupos desejados, neste caso o nome do cliente)." [...] continue lendo...

Artigos relacionados