Vous êtes sur la page 1sur 16

2

More

Next Blog

This site uses cookies from Google to deliver its services, to personalise ads and to analyse traffic. Information
about your use of this site is shared with Google. By using this site, you agree to its use of cookies.

Create Blog
LEARN MORE

Sign In

GOT IT

Java sem caf.!

"Feliz aquele que transfere o que sabe e aprende o que ensina!" Cora Coralina
Incio

Nvel: Iniciante

Nvel: Intermedirio

Nvel: Avanado

Pesquisar

4 de junho de 2011

Newsletter
Email address...

Submit

JasperReports 4.0.1: Utilizando Subreports e parmetros


Para esta no ser uma postagem muito extensa, irei utilizar o mesmo projeto e o mesmo relatrio criado na postagem:
agrupando de dados com JasperReports. Para completar esse projeto, logo abaixo do agrupamento eu vou listar os dados
dos cliente, ou seja, terei um relatrio de clientes embutido no relatrio de pedidos (claro que pode ser feito outras coisas,
este apenas um exemplo)
Comeando...
Ento l no projeto Pedidos (link acima), dentro do pacote pedidos.dao, vamos criar uma classe Java como o nome de
ClienteDAO, seguindo a mesma linha da classe PedidoDAO, temos:

Desde 08/2010

6 3 8 7 0 4
Arquivos
2010 (18)
2011 (35)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

public class ClienteDAO {


EntityManagerFactory emf = Persistence.createEntityManagerFactory("PedidosPU");
EntityManager em = emf.createEntityManager();

public List<Cliente> listarClientes() {


List<Cliente> clientes = null;
try {
Query query = em.createQuery("Select c from Cliente c order by c.nome");
clientes = query.getResultList();
} catch (Exception e) {
e.printStackTrace();
} finally {
em.close();
}
return clientes;
}

No iReport, vamos editar o relatrio pedidos.jrxml, criando tambm no link da postagem acima.
Para comear no relatrio vamos adicionar a band Summary:

Janeiro 2011 (3)


Fevereiro 2011 (3)

Convertido de w eb en PDF con http://www.htmlapdf.com!

Plus500 Online
trading
Stocks/Forex/Gold. No
Commissions! CFD serviceYour capital is at risk

Maro 2011 (8)


Abril 2011 (2)
Maio 2011 (13)
Junho 2011 (5)
JSF 2.0:
Componentes
PrimeFaces
2.2.1 - Parte 4
JasperReports
4.0.1:
Agrupando
dados
JasperReports
4.0.1: Utilizando
Subreports e
parm...

BuscaP / Bondfaro

Precisamos criar um parmetro que ser enviado pelo projeto, para isso no Report Inspector, clique com o boto direito
em Parameters, e em Adicionar Parameter:

JSF 2.0:
Componentes
PrimeFaces
2.2.1 - Parte 5

Lomadee, uma nova espc ie na web. A


maior plataforma de afiliados da Amric a
Latina.

XStream: Criando
e lendo
arquivos XML

Lomadee

Agosto 2011 (1)


2012 (4)
2013 (1)

M ais vistos na semana


JSF 2.0: Template em Facelets
com Layout do PrimeFaces 3.0
Login customizado com Spring
Security 3.1.4
JasperReports 4.0.1: Utilizando
Subreports e parmetros

Lomadee, uma nova espc ie na web. A


maior plataforma de afiliados da Amric a
Latina.

Selecione o parameter1 e v nas propriedades para configur-lo, altere o nome para listaClientes e o Parameter class
para java.util.List, pois passaremos por parmetro uma lista de clientes:

JPA 2.0: Utilizando os


NamedQuery
JavaEE 5: CRUD com JSP e
Servlet - Parte I

teis

Convertido de w eb en PDF con http://www.htmlapdf.com!

Edson Gonalves
Java Anywhere
JavaRequest

Na paleta procure pelo elemento Subreport, arraste-o para a band Summary, a partir de agora siga as imagens abaixo:

krams::
Loiane Groner
Rafael Ponte

Tags
Componentes CRUD
HelloWorld Jasper Reports

JavaEE

JavaEE 5
JavaSE JPA

JavaEE 6
2.0 JSF1.2 JSF2.0

JSP

MySQL

PrimeFaces
Servlet

Clique em prximo, na janela abaixo selecione o tipo Blank A4:

Convertido de w eb en PDF con http://www.htmlapdf.com!

Clique em prximo novamente, como estamos usando JavaBean datasource, e no utilizamos datasource, configure como
na imagem:

Avance de novo:

Convertido de w eb en PDF con http://www.htmlapdf.com!

Mais uma vez:

Na janela abaixo informe o nome do Subreport, nesse caso ser chamado de pedidos_subreport:

Convertido de w eb en PDF con http://www.htmlapdf.com!

No passo 7, habilite a opo "Use a JRDatasource expression", e clique no boto do lado da caixa de texto, a seguinte
janela aparecer, nela ns convertemos a listaClientes em um JRBeanCollectionDataSource :

Ao clicar em Apply voltamos para a seguinte janela:

Convertido de w eb en PDF con http://www.htmlapdf.com!

E aqui basta finalizar...


No relatrio que foi criado, deixe apenas as bands - Title, Column Header e Detail 1:

Como ser uma lista de clientes, precisamos pegar da classe Cliente os seguintes fields - codigo, nome e
limiteCredito... para isso em Report Query, na aba JavaBean Datasource:

Convertido de w eb en PDF con http://www.htmlapdf.com!

Feito isso...
Como visto em postagens anteriores, estruture o relatrio para que fique assim:

Ah, lembre-se de nas propriedades do relatrio alterar a linguagem para Java, j que estamos usando JavaBean
datasource:

Depois disto basta compilar nosso subreport, para poder gerar o pedidos_subreport.jasper
Voltamos ao pedidos.jrxml, e vamos fazer umas ultimas configuraes, temos este resultado:

Convertido de w eb en PDF con http://www.htmlapdf.com!

Precisamos criar mais um parmetro que ser uma String com o caminho de onde encontrar o pedidos_subreport.jasper,
repita o mesmo passo que foi feito para criar o listaClientes, mas dessa vez use as seguintes propriedades:

Agora precisamos set-lo no lugar certo... para isso: veja que na band Summary tem um elemento que representa o
subreport, clique nele e v nas propriedades, procure por Subreport Expression, e configure-o assim:

Feito todos esses passos, pode compilar novamente o relatrio principal (pedidos)...
Caso no ocorra nenhum erro, voltamos ao projeto Pedidos no NetBeans.
No projeto..
No pacote pedidos,controle.relatorios, substitua o pedidos,jasper pelo que foi compilado agora, e adicione o
pedidos_subreport.jasper, ficando assim:

Convertido de w eb en PDF con http://www.htmlapdf.com!

Para finalizar de vez, precisamos fazer algumas alteraes no mtodo gerarRelatorio() da classe PedidoControle.java:
1
2
3
4
5
6
7
8
9
10
11
12
13

public void gerarRelatorio() {


String arquivo = "src/pedidos/controle/relatorios/pedidos.jasper";

pedidoDAO = new PedidoDAO();


clienteDAO = new ClienteDAO();
Map parametros = new HashMap();
parametros.put("localizacaoPedidosSubreport", "src/pedidos/controle/relatorios/pedidos_subreport.jasper"
parametros.put("listaClientes", clienteDAO.listarClientes());

JRDataSource jrds = new JRBeanCollectionDataSource(pedidoDAO.listarPedidos());


gerarRelatorioDesktop(jrds, parametros, arquivo);

No comeo da classe lembre-se de adicionar a declarao do ClienteDAO, assim como foi feito para PedidoDAO...
Vamos ver o que foi alterado no mtodo...
Primeiro, depois de declarado o atributo clienteDAO no inicio da classe, na linha 5 estamos inicializando-o.
Da linha 7 a 9, criamos um Map, com os parmetros que criamos l no iReport... e por fim... na linha 12, passvamos o
parmetro como null, agora este substitudo e passamos o Map parametros por parmetro.
Assim podemos executar nosso projeto e ver o seguinte resultado:

Convertido de w eb en PDF con http://www.htmlapdf.com!

Por aqui ficamos... admito que tive alguns probleminhas ao conseguir utilizar o JavaBean datasource no subreport, o que
me levou a pedir um help no Twitter onde o @altitdb me ajudou! por isso deixo os devidos crditos ele :)
Crditos da postagem: Altieres de Matos, pois ele salvou minha aula sobre Subrepot hehe (pois , tive problemas ao
usar Subreport com JavaBean datasource)
Postado por andii.brunetta s 22:16

+2 Recomende isto no Google

Marcadores: Jasper Reports, JavaSE

23 comentrios:
Matheus Virtudes 29 de set de 2011 15:07:00
Andii, primeiramente parabens pelos tutoriais. Segue a risca seu tutorial sobre subreports, mas no consigo gerar
o
relatorio
com
o
subrelatorio.
Primeiro
da
o
seguinte
erro:
new
net.nf.jasperreports.engine.data.JRBeanCollectionDataSource cannot be resolved to a type. Ento mudei o nf por
sf e o erro sumiu.
Porem quando tento compilar novamente o erro a seguir dado:
Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@1f9fb0c
net.sf.jasperreports.engine.JRException: An error has accurred compiling the subreport: C:\Users\PimentaAgro\Do
wnloads\iReport-4.0.1\ireport\fonts. No sei onde est o erro.
Responder
Respostas
Evandro Araujo de Abreu 12 de jun de 2013 09:52:00
Conseguiu resolver ?? estou com o mesmo problema

josias 23 de ago de 2013 11:16:00


clica nas propriedades do subreport vai em subreport Expression e concatena o seu arquivo jasper
$P{caminhoSubReport1} + "reportPay_subreport1.jasper"
Responder

Convertido de w eb en PDF con http://www.htmlapdf.com!

rickgallagher 25 de dez de 2011 16:51:00


O meu est dando o mesmo erro, Matheus Virtudes.
Ele diz ainda: "Access Denied" apontado o caminho: c:\..\ireport\fonts.
Se algum souber o que pode ser, por favor de um help!
Responder

andii.brunetta

31 de dez de 2011 16:11:00

Ol! J tive o mesmo problema, mas recompilando ele, resolveu.


Responder

Lucas Duzo 29 de jan de 2012 10:48:00


ol....
sabe o motivo do relatrio no encontrar o sub-relatrio no .jar da aplicao ?
obrigado?
Responder

andii.brunetta

30 de jan de 2012 23:19:00

Ol Lucas, tambm tive problemas desse tipo ao fazer testes mais a fundo com a parte de Desktop, acredito que
tenha algum cdigo que d o caminho exato de dentro do .jar, mas at eu descobrir isso, a soluo mais vivel foi
jogar os relatrios dentro de uma pasta no C:/ por exemplo, claro, essa no a melhor soluo, mas como mecho
pouco com a parte Desktop acredito que no poderei te ajudar muito quanto a esse problema :(
Responder

Sopiseiro 10 de jun de 2012 21:06:00


Amigo como faco para passar um array list q eu mesmo estou populando...
List v = new ArrayList();
v.add(new vencimentos("20/04/2012", "30/12/2012"));
v.add(new vencimentos("20/04/2012", "30/12/2012") );
JRDataSource deps = new JRBeanCollectionDataSource(v);
p.put("subVencimento",deps);
mas gera um erro e nao sei como seguir se puder me ajudar fico grato
Responder
Respostas

Convertido de w eb en PDF con http://www.htmlapdf.com!

andii.brunetta

22 de jul de 2012 22:36:00

Vc criou o parmetro com o nome "subVencimento"?


Responder

Clayton Quintiliano 21 de nov de 2012 11:36:00


Muito bacana suas explicaes, mas tenho uma duvida posso passar nois parametros do visual para o Relatorio
tipo
parametros.put( "data_inicio", campoFiltro.getText() );
parametros.put( "data_final", campoFiltro.getText() );
e tenho outra duvida no consigo passar uma data como parametro no sei como devo escrever.
se puder me ajudar agradeo
Clayton
Responder
Respostas
andii.brunetta

21 de nov de 2012 11:46:00

Clayton... vc vai precisar criar no relatrio parametros com o mesmo nome dos parametros que vc
estiver passando. Caso vc crie um parametro com o nome data_inicio do tipo Date, a vc precisa passar
um parametro com data_inicio do tipo Date tambm.

Clayton Quintiliano 21 de nov de 2012 12:01:00


Andi eu criei o parametro no relatorio do tipo Date, mas por exemplo no codigo mesmo parametros.put(
"data_final", campoFiltro.getText() );
no pode ser ".getText" ele da erro. voc tem algum exemplo que pode me ajudar? pois necessito
demais disto para voc ter ideia preciso apresentar isto hoje a noite e este parametro o unico que no
consigo fazer.

andii.brunetta

21 de nov de 2012 12:15:00

Clayton, quando vc d um getText() ele retorna apenas uma string, vc precisa transformar isso num
Date.
SimpleDateFormat formatador = new SimpleDateFormat("dd/MM/yyyy");
Date data = formatador.parse(campoFiltro.getText());

Clayton Quintiliano 21 de nov de 2012 12:19:00


Andi, no parametros.put( "data_final", campoFiltro.getText() ); vou passar assim parametros.put(

Convertido de w eb en PDF con http://www.htmlapdf.com!

"data_final", data ); ?

andii.brunetta

21 de nov de 2012 12:27:00

Isso

Clayton Quintiliano 21 de nov de 2012 12:30:00

Clayton Quintiliano 21 de nov de 2012 12:43:00


Andi vou testar aqui, mas de qualquer forma muito obrigado pela sua ateno. tenha uma boa tarde.
Responder

Rodrigo Valentim 8 de abr de 2013 15:31:00


Apenas uma sugesto.
Em vez de passar a lista por parametro, passa por JRBeanCollectionDataSource.
Todas as outras etapas funcionam normalmente.
Obrigado, com sua ideia, consegui resolver outra situao.
Abrao!
Responder

Samuel 26 de abr de 2013 17:14:00


Pessoal to com um problemao aqui ve se alguem consegue me ajudar...
tenho o seguinte cenario...
uma lavanderia quand vai fazer uma receita de lavagem (uma receita Contem varias lavagens) e cada lavagem seu
array de materia prima que e utilizado.
resumindo tenho um array de lavagems e dentro de cada lavagem um array de materia prima...
estou passand um array de lavagems para o Report porem nao estou conseguindo passar o array de materia
prima pro subreport...
alguem pode me ajudar pelo amor de deus ? ><
Responder

Vinicius Araujo 29 de jan de 2014 18:41:00

Convertido de w eb en PDF con http://www.htmlapdf.com!

Boa tarde pessoal, alguem sabe como manter o SubReport com tamanho esttico? ou seja quando atinge o
numero de registros dentro da banda Detail do subreport, ele no sobrepor os componentes a baixo, e listar o
restante em uma nova pagina.
Responder

Vanilson Manuel 11 de dez de 2014 12:22:00


excelente tutorial, foi de grande ajuda para min. muito obrigado.
Responder

Augusto Bustos 5 de nov de 2015 18:37:00


Como anda? Muy buen aporte, pero tengo un problema. Puedo cargar el subreporte y no el reporte principal desde
mi aplicacion.
Responder

Camila L. 20 de nov de 2015 13:57:00


O seu tutorial me ajudou muito!
Consegui achar como corrigir o erro do subreport.
Nas propriedades do subreport no summary, em Subreport Expression ao invs de colocar apenas
$P{LocalizacaoPedidosSubreport}, coloque $P{LocalizacaoPedidosSubreport} + "pedidos_subreport.jasper".
A no mtodo gerarRelatrio deixe apenas o path da pasta em que est o .jasper do subrelatrio.
(src/pedidos/controle/relatorios/)
Responder

Digite seu comentrio...

Comentar como:

Publicar

Selecionar perfil...

Visualizar

Deixe seu comentrio... ;)

Convertido de w eb en PDF con http://www.htmlapdf.com!

Postagem mais recente

Pgina inicial

Postagem mais antiga

Assinar: Postar comentrios (Atom)

andii brunetta. Modelo Awesome Inc.. Imagens de modelo por borchee. Tecnologia do Blogger.

Convertido de w eb en PDF con http://www.htmlapdf.com!

Vous aimerez peut-être aussi