Olá pessoal,
estou desenvolvendo um relatorio principal que contem dois sub-relatorios dentro dele, porem esses dois sub-relatorios estão sendo duplicados na hora da visualização, se transformando em 4. Na configuração dos meus sub-relatorios do Ireport estou utilizando a seguinte configuração:
“subReport expression” = $P{caminho_sub_entrada}
“Data source expression” = new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listaEntradas})
Os subrelatorios estão sendo preenchidos com uma list carregada e passada por parametro para os sub-relatorios, segue o codigo fonte:
File relatorioPrincipal = new File("Relatorios"+File.separator+"fechamento_caixa.jrxml");
File relatorioSaidas = new File("Relatorios"+File.separator+"fechamento_caixa_saidas.jasper");
File relatorioentradas = new File("Relatorios"+File.separator+"fechamento_caixa_entrada.jasper");
HashMap<String, Object> mapa = new HashMap<String, Object>();
mapa.put("dataInicio", dataInicial);
mapa.put("dataFim", dataFinal);
mapa.put("totalEntrada", totalEntrada);
mapa.put("totalSaida", totalSaida);
mapa.put("saldo", saldo);
mapa.put("usuario", usuario.getNome());
mapa.put("lista", listaDados);
mapa.put("listaEntradas", listaDadosEntrada);
mapa.put("SUBREPORT_DIR", relatorioSaidas.getAbsolutePath().toString());
mapa.put("caminho_sub_entrada", relatorioentradas.getAbsolutePath().toString());
try {
//neste ponto com a lista preenchida vc cria um data source para o relatorio
JRDataSource jrds = new JRBeanCollectionDataSource(listaDados); //a lista que vc carregou vai servir de data source para o relatorio
//Desenha o relatorio
JasperDesign desenho = JRXmlLoader.load(relatorioPrincipal.getAbsolutePath());
//compila o relatorio
JasperReport relatorio = JasperCompileManager.compileReport(desenho);
//Chama a impressao do relatorio passando o layout, os parametroe e o resultset carregado
JasperPrint print = JasperFillManager.fillReport(relatorio, mapa, jrds); //new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource(listaDados)
//Cria janela de visualização para o relatorio
//opção false significa que ao fechar o relatorio a aplicação continuara aberta
JasperViewer visualizacao = new JasperViewer(print, false);
//Apresenta o relatorio na tela
visualizacao.show();