Boa Tarde.
Estou terminando minha aplicação e estou montando os relatórios pelo iReport. fiz um relatório chamar "orcamento.jasper" e outro chamado "orcamentopacotes.jasper". Dentro do "orcamento.jasper", incluir o subrelatório.
Na parte de codificação em java, segue abaixo a minha classe completa.
try{
conexao.abrir();
BufferedImage slogan = ImageIO.read(new File("imagens/slogan.jpg"));
URL url = getClass().getResource("orcamento.jasper");
URL url1 = getClass().getResource("orcamento_subreport0.jasper");
if (url == null || url1 == null)
JOptionPane.showMessageDialog(null,"Arquivo não encontrado");
InputStream is = url.openStream();
JasperReport relatorioJasper = (JasperReport)JRLoader.loadObject(url);
JasperReport subrelatorioJasper = (JasperReport)JRLoader.loadObject(url1);
HashMap parameters = new HashMap();
Statement stm = conexao.conexao.createStatement();
String sql = "SELECT RTRIM(CNPJ) AS CNPJ, RTRIM(IE) AS IE, RTRIM(NOME) AS NOME,RTRIM(CIDADE) AS CIDADE,RTRIM(ENDERECO) AS ENDERECO,RTRIM(NUMERO) AS NUMERO,RTRIM(COMPLEMENTO) AS COMPLEMENTO,RTRIM(BAIRRO) AS BAIRRO,RTRIM(CEP) AS CEP,RTRIM(UF) AS UF,RTRIM(TEL) AS TEL,RTRIM(WEB_SITE) AS WEB_SITE,RTRIM(E_MAIL) AS E_MAIL FROM EMPRESA WHERE COD_EMPRESA='1'";
ResultSet rs = stm.executeQuery(sql);
while(rs.next()){
parameters.put("cnpj", rs.getString("CNPJ"));
parameters.put("ie", rs.getString("IE"));
parameters.put("empresa", String.valueOf(rs.getString("NOME")));
parameters.put("endereco", String.valueOf(rs.getString("ENDERECO")+", "+rs.getString("NUMERO")+" "+rs.getString("COMPLEMENTO")+" - "+rs.getString("BAIRRO")+" - "+rs.getString("CEP")+" - "+rs.getString("CIDADE")+" - "+rs.getString("UF")));
parameters.put("telefone", String.valueOf(rs.getString("TEL")));
parameters.put("website", String.valueOf(rs.getString("WEB_SITE")));
parameters.put("email", String.valueOf(rs.getString("E_MAIL")));
break;
}
parameters.put("slogan",slogan);
parameters.put("vendedor", String.valueOf(sVendedor));
parameters.put("total_mo", "R$ "+duasCasas.format(dValorMO));
parameters.put("total_ac", "R$ "+duasCasas.format(dValorAC));
parameters.put("total_pc","R$ "+duasCasas.format(dValorPC));
parameters.put("total_geral", "R$ "+duasCasas.format(dValorTotal));
parameters.put("total_geral","R$ "+duasCasas.format(dValorTotal));
PreparedStatement pstmt = conexao.conexao.prepareStatement("SELECT CODIGO_AC,NOME_AC,VALOR_MO,DESCONTO_PC_MO,VALOR_AC,DESCONTO_PC_AC,TIPO FROM ORCAMENTO_ACESSORIO WHERE TIPO='A'");
ResultSet rs1 = pstmt.executeQuery();
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs1 );
JasperPrint jp = JasperFillManager.fillReport(is, parameters,jrRS);
JasperViewer.viewReport(jp, false);
Statement stm1 = conexao.conexao.createStatement();
String sql1 = "DELETE FROM ORCAMENTO_ACESSORIO";
stm1.executeUpdate(sql1);
Statement stm2 = conexao.conexao.createStatement();
String sql2 = "DELETE FROM ORCAMENTO_PACOTE";
stm2.executeUpdate(sql2);
conexao.fechar();
}
catch(SQLException e){
JOptionPane.showMessageDialog(null,e.getMessage());
}
catch(JRException e){
JOptionPane.showMessageDialog(null,e.getMessage());
}
catch(Exception ex) {
ex.printStackTrace();
}
Quando eu rodo pelo java, ele imprime o relatório principal porém, o subrealtório não sai no relatório principal e dá o seguinte erro
23/03/2009 18:53:34 net.sf.jasperreports.engine.query.JRJdbcQueryExecuter
WARNING: The supplied java.sql.Connection object is null.
já pesquisei em vários lugares e não consigo identificar esse erro. Por favor, quem souber, posta aqui para eu poder encerrar a aplicação e entregar ao cliente.
Desde já, agradeço e conto com a ajuda de todos.
Daniel M. Vergani