Já consigo usar o JRBeanCollectionDataSource() para geração de relatório e subrelatório no iReport. Estou com apenas um problema. Como faço para o subrelatório reconhecer quais registros devem ser impressos? Por exemplo: Estou fazendo um relatório de Ordens de Compra e o seu subrelatório são os Itens desta ordem. Para a geração de apenas uma ordem de compra não há problema, porém se no mesmo relatório eu quiser gerar com mais de uma ordem, os itens no subrelatório não saem classificados por ordem (saem todos os itens de todas as ordens na primeira ordem). Como e onde eu faço o vínculo do Código da ordem de compra do relatório principal com o Código da ordem de compra do item do subrelatório?
JRBeanCollectionDataSource()
4 Respostas
Seguinte, como esta montada a sua lista?
Trabalho com ele da seguinte forma, tenho uma lista de JavaBeans, dentro deste JavaBean tenho uma outra lista… Assim passo como fonte de dados do SubReport a lista do JavaBean corrente.
Não sei como voce esta usando o subreport, mas ele pede para voce passar ou um JRBeanCollectionDataSource ou uma conexao caso use o select dentro do Jasper.
Experimente montar uma lista de um JavaBean OrdemCompra e dentro dele uma lista de outro JavaBean ItemOrdemCompra que sera listado dentro do seu subreport.
Não sei se fui claro… mas qualquer coisa manda ae…
[]s
Lucas Balensiefer
No Connection/DataSource Expression do subrelatorio eu passo $P{ItensOrdemCompraDataSource}. A informação chega até o subrelatório sem problemas, o que eu não consigo é definir a igualdade dos campos. No caso do tutorial que tem no iReport, ele define em ‘Report SQL query’
a expressão SELECT * FROM Tabela WHERE CodOrdemCompra = $P{codOrdemCompra}. Mas como estou passando as informações por parâmetro ($P{ItensOrdemCompraDataSource}), aonde defino o ‘WHERE’ para este?
Se conseguir isto ele selecionaria os itens para cada ordem de compra ao invés de imprimir todos os itens.
Seguinte
Voce tem um JavaBean de Ordem de Compras certo?
Coloca dentro dele um atributo List, assim cada Ordem de Compra tera dentro os seus Itens tambem… assim tu vai mapear um atributo no Jasper para o “itemOrdemCompraList” e tu vai passar no DataSource assim $F{itemOrdemCompraList}. Do modo que tu esta trabalhando tu passa toda vez todas os itens pois tu tem uma lista só… deve ter varias listas de Itens, uma para cada Ordem de Compra.
Entendeu?
[]s
Lucas Balensiefer
Ok! Coloquei um List em cada Ordem de compra, fiz as outras alterações necessárias e deu certo. Muito obrigado pelas dicas. Sem esta ajuda dificilmente conseguiria resolver este problema, valeu mesmo
!!