Relatorio ireport , não consigo carregar os subreport na aplicação java

17 respostas
M

Fiz um relatório IReport que tem 3 Sub Relatórios no IReport funcionam tudo certo, mas, quando puxo o IReportprincipal pelo Java ele não carrega os Sub Relatórios só o principal?

17 Respostas

S

como você está passando a conexão para os sub-Relatórios?

qual a fonte de dados dos sub-relatórios? está passando via parametro?

poste o código fonte da chamada do relatório.

M

esse é o codigo que chama o relatorio , muito obrigado pela ajuda.

try {

conexao con  = new conexao();

con.conectar(jdbc:mysql://localhost:3306/caixa?zeroDateTimeBehavior=convertToNull”,“root”,“evolution”);

String venda = CODVEND.getText();

String sql = select * from vendas where COD_VENDA =’”+CODVEND.getText()+"’" ;

con.ExecutaSQL(sql);

JRResultSetDataSource relatresult = new JRResultSetDataSource(con.resultset);

HashMap parametros = new HashMap();

parametros.put(CODVENDA, Integer.parseInt(CODVEND.getText()));

JasperPrint jpPrint = JasperFillManager.fillReport(src\relatorios\relatoriovenda.jasper,parametros,relatresult );
JasperViewer jv = new JasperViewer(jpPrint,false); 
     
        jv.setVisible(true);
        
    } catch (JRException e) {
        JOptionPane.showMessageDialog(rootPane, "erro ao chamar relatorio"+e);
  }
M
try {

conexao con  = new conexao();

con.conectar(jdbc:mysql://localhost:3306/caixa?zeroDateTimeBehavior=convertToNull”,“root”,“evolution”);

String venda = CODVEND.getText();

String sql = select * from vendas where COD_VENDA =’”+CODVEND.getText()+"’" ;

con.ExecutaSQL(sql);

JRResultSetDataSource relatresult = new JRResultSetDataSource(con.resultset);

HashMap parametros = new HashMap();

parametros.put(CODVENDA, Integer.parseInt(CODVEND.getText()));

JasperPrint jpPrint = JasperFillManager.fillReport(src\relatorios\relatoriovenda.jasper,parametros,relatresult );
JasperViewer jv = new JasperViewer(jpPrint,false); 
     
        jv.setVisible(true);
        
    } catch (JRException e) {
        JOptionPane.showMessageDialog(rootPane, "erro ao chamar relatorio"+e);
  }<blockquote><div class="quote-author">"Sandro_Machado:</div>

como você está passando a conexão para os sub-Relatórios?

qual a fonte de dados dos sub-relatórios? está passando via parametro?

poste o código fonte da chamada do relatório.

esse é o codigo que chama o relatorio sandro muito obrigado por ajudar , estudo sozinho é complicado

M

eu acabei de modificar o codigo passando o caminho do sub relatorio como parametro para o SUBREPORT_DIR
mas mesmo assim nao me trouxe o sub so o principal ,se alguem puder ajudar ai e deixar skype sei la muito obrigado a todos

S

manda o codigo que passa o caminho do subrelatorio.

como você está passando a conexão para os subrelatórios?

assim?

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource()

como você passa as informações para popular os fields dos subrelatórios?

M

isso que nao sei fazer passar a conexao para os subrelatorios

M
try {

conexao con = new conexao();

con.conectar(jdbc:mysql://localhost:3306/caixa?zeroDateTimeBehavior=convertToNull”,“root”,“evolution”);

String sql = select * from vendas where COD_VENDA =’”+CODVEND.getText()+"’" ;

con.ExecutaSQL(sql);

JRResultSetDataSource relatresult = new JRResultSetDataSource(con.resultset);

HashMap parametros = new HashMap();

parametros.put(CODVEND,Integer.parseInt(CODVEND.getText()));

parametros.put(SUBREPORT_DIR, src\relatorios\”);

//teste para popular subrelatorio

String sqlsub = select * from servicos where COD_VENDA =’”+CODVEND.getText()+"’" ;

con.ExecutaSQL(sql);

JRResultSetDataSource subvendas = new JRResultSetDataSource(con.resultset);

parametros.put(REPORT_CONNECTION ,con.resultset) ;

//teste para popular subrelatorio
JasperPrint jpPrint = JasperFillManager.fillReport("src\\relatorios\\relatoriovenda.jasper",parametros,relatresult);
    
        JasperViewer jv = new JasperViewer(jpPrint,false); 
     
        jv.setVisible(true);
        
    } catch (JRException e) {
        JOptionPane.showMessageDialog(rootPane, "erro ao chamar relatorio"+e);
  }

tentei fazer assim agora , mas nao sei se é o jeito certo de popular o sub relatorio, se puder me ajudar agreço muito

M

sandro vc tem skype ?
então eu achei que so passando o parametro para o formulario principal ja ia dar certo.
nãos sabia que precisava passar pela aplicação tambem ,
eu não usei
new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource()
como faço para poder popular os subrelatorios pelo java ?

S

estou meio confuso, você está passando para o subrelatório o mesmo resultSet do relatório principal?

não seria outras informações?

outra coisa no ireport você tem que definir como o subrelatório vai receber as informações, confira isto.

eu passo uma List por parametro

parametros.put("listaEmpresa", listEmpresa);

e no ireport eu crio um novo parametro $P{listEmpresa}

com isso defino no source Expression do subrelatório

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listEmpresa})

M

vou procurar pra ver como se usa o new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listEmpresa})
nunca usei ele é a primeira vez que faço relatórios desculpa a ignorância .

M
assim estaria certo sandro

String sqlsub = select * from servicos where COD_VENDA =’”+CODVEND.getText()+"’" ;

con.ExecutaSQL(sqlsub);

parametros.put(“REPORT_CONNECTION” ,con.resultset) ;
S

passa o resultSet pra uma List, então pega essa lista e passa por parametro parametros.put("listaServico", sualistaAqui);, onde listaServico voce tem que criar um
parametro no ireport com exatamente o mesmo nome.

e nas propriedades do subrelatório, no Data source Expression você coloca

new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($P{listaServico})

M

blz vou tentar aqui qualquer coisa volto a te perguntar vleww muito obrigadooo to revirando a net aqui , mas acho que vai dar certo vo tentar aqui !

M

kkkkk cara de tanto revirar eu sei todos os campos que vc me falou pra altera , ja deixei tudo no jeito como faço pra passar o resultset da minha sql em uma list ? (dai ja era) kkkk

S

tem que passar por um for e ir adicionando a Lis conforme for passando pelo rs.next()

abaixo um exemplo pra você ter uma ideia

ArrayList<Usuarios> listaUsuarios;

try {
        s.execute("SELECT * FROM USUARIOS ORDER BY IDUSUARIO");
        ResultSet rs = s.getResultSet();
        while (rs.next()) {
            listaUsuarios.add(new Usuarios(Integer.parseInt(rs.getString("IDUSUARIO")), rs.getString("NOMEUSUARIO"), rs.getString("NICKUSUARIO"), rs.getString("SENHAUSUARIO")));
        }
    } catch (SQLException ex) {
        Logger.getLogger(CadastroEmpresa.class.getName()).log(Level.SEVERE, null, ex);
    }
M

blz ja tive uma ideia vou fazer aqui e te falo o resultado muito obrigado mesmo

M

ai sandrao hj eu entendi a desse codigooo kkkkkkk
hj to passando o sub relatorio certinho conforme a venda , lembrei desse codigo ja ta dando certo aqui kkk vlew

Criado 31 de agosto de 2016
Ultima resposta 3 de set. de 2016
Respostas 17
Participantes 2