Pessoal, esta acontecendo esse erro somente quando eu chamo o relatorio na aplicação, ao testar o relatorio no jasper funciona perfeitamente, verifiquei o nome do arquivo e esta correto, verifiquei se existe dados no banco em questao e tambem esta ok, o parametro no relatorio e no bean estão com o mesmo nome"COD_VENDA",
não sei porque começou aparecer este erro, ja é o 4 relatorio em seguida que aparece o erro abaixo;
net.sf.jasperreports.engine.JRException: Invalid page index range: 0 - -1 of 0. at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:141) at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:242) …tecnologia.bean.DuplicataBean.imprimirDuplicataPorCodigoVenda(DuplicataBean.java:263)
Bean
public void imprimirDuplicataPorCodigoVenda(ActionEvent evento) {
try {
Venda vendaSelecionada = (Venda) evento.getComponent()
.getAttributes().get("vendaSelecionada");
String caminho=Faces.getRealPath("/report/relatorioDuplicataPorCodigoVenda.jasper");
Map<String, Object> parametros = new HashMap<>();
parametros.put("COD_VENDA", vendaSelecionada.getCodigo());
// caminho e o codigo estao sendo preenchido, conferidos.
Connection conexao = HibernateUtil.getConexao();
JasperPrint relatorio = JasperFillManager.fillReport(caminho,
parametros, conexao);
JasperPrintManager.printReport(relatorio, true);
} catch (JRException erro) {
Messages.addGlobalError("Ocorreu um erro ao tentar gerar o relatório"); }
}
Vou da uma olhada no meu código, mais acho que o caminho do relatório é com duas barra //
@jallisson_jallis, tentei aqui infelizmente não tambem nao deu certo.
Criei um relatorio em branco so com COD_VENDA e continua a mesma msg.
net.sf.jasperreports.engine.JRException: Invalid page index range: 0 - -1 of 0.
at net.sf.jasperreports.engine.print.JRPrinterAWT.printPages(JRPrinterAWT.java:141)
at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:242)
at net.sf.jasperreports.engine.JasperPrintManager.print(JasperPrintManager.java:129)
at net.sf.jasperreports.engine.JasperPrintManager.printReport(JasperPrintManager.java:326)
at br.com.diftecnologia.bean.DuplicataBean.imprimirDuplicataPorCodigoVenda(DuplicataBean.java:263)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:147)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:88)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:814)
at javax.faces.component.UICommand.broadcast(UICommand.java:300)
at javax.faces.component.UIData.broadcast(UIData.java:1108)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:528)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
Na hora que você executa pelo Ireport abre normal!
Agora quando chama
Olha esse código abaixo da certo.
AcessoBD acessoBd = new AcessoBD();
if (ftfIdLote.getValue() == null){
JOptionPane.showMessageDialog(this,"Informe o ID do Lote","Erro",JOptionPane.INFORMATION_MESSAGE);
ftfIdLote.requestFocus();
}else {
JOptionPane.showMessageDialog(this,"Aguarde Enquanto é gerado","Impressão",JOptionPane.INFORMATION_MESSAGE);
try {
HashMap parametros = new HashMap();
parametros.put("ID_LOTE",ftfIdLote.getValue());
parametros.put("CAMINHO_IMAGEM1", System.getProperty("user.dir") + "\\imagem\\logocidade.jpg");
parametros.put("CAMINHO_IMAGEM2", System.getProperty("user.dir") + "\\imagem\\logoserf.jpg");
parametros.put("CAMINHO_IMAGEM3", System.getProperty("user.dir") + "\\imagem\\logoprefeitura.jpg");
JasperPrint jp = JasperFillManager.fillReport(System.getProperty("user.dir") + "\\relatorios\\DespachoLote.jasper", parametros, acessoBd.conectar());
JasperViewer.viewReport(jp, false);
//JasperPrintManager.printReport(jp, false);
//JasperPrintManager.printPage(jp,0,false);
this.dispose();
Menu.menuVisivel();
//JasperPrintManager.printReport(jp, false);
} catch (JRException ex) {
Logger.getLogger(RelatorioDespachoLoteFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
@jallisson_jallis , descobri que o erro está na query do Jasper, eu criei um relatorio somente com a tabela VENDA sem ITENSVENDA e outras, ai fiz a busca, funcionou normalmente o mesmo relatorio que esta descrito acima, porem ao inserir as tabelas ITEM_VENDA,UNIDADE_MEDIDA,PESSOA,PESSOA na query passou a dar o mesmo erro, estou ainda tentando fazer a query de forma diferente mas nao esta funcionando.
Tentei fazer outro relatorio que estava funcionando somente com uma tabela(PESSOA), mas após adicionar os inner join apareceu a mesma mensagem.
Como resolver isso?
`SELECT victoria.pessoa.nome,
victoria.pessoa.cpf,
victoria.cliente.status,
victoria.cliente.data_cadastro,
victoria.pessoa.data_nascimento,
victoria.pessoa.numero_rg,
victoria.pessoa.telefone,
victoria.pessoa.orgao_emissor,
victoria.pessoa.data_emissao_rg,
victoria.pessoa.email,
victoria.sexo.sigla,
victoria.cliente.codigo,
victoria.endereco.bairro,
victoria.endereco.cep,
victoria.endereco.complemento,
victoria.endereco.rua,
victoria.endereco.numero,
victoria.cidade.nome AS nome_cidade,
victoria.estado.sigla AS sigla_estado
FROM victoria.cliente
INNER JOIN victoria.pessoa ON
victoria.cliente.pessoa = victoria.pessoa.codigo
INNER JOIN victoria.sexo ON
victoria.pessoa.sexo_codigo = victoria.sexo.codigo
INNER JOIN victoria.endereco ON
victoria.pessoa.endereco_codigo = victoria.endereco.codigo
INNER JOIN victoria.cidade ON
victoria.endereco.cidade_codigo = victoria.cidade.codigo
INNER JOIN victoria.estado ON
victoria.cidade.estado_codigo = victoria.estado.codigo
WHERE
victoria.pessoa.cpf = $P{CPF}
@jallisson_jallis
Mudei e coloquei como o seu exemplo e continua o a msg.
envia a base de dados e o projeto ireport
@jallisson_jallis segue os arquivos em anexo …
relatorioClientePorCodigo.jrxml (17.8 KB)
relatorioClientePorCodigo.jasper (42.4 KB)
se precisar de mais é so avisar, to na area.
Testei aqui deu Certo
olha ai o codigo que usei
AcessoBD acessoBd = new AcessoBD();
if (id.getValue() == null){
JOptionPane.showMessageDialog(this,"Informe o ID do Lote","Erro",JOptionPane.INFORMATION_MESSAGE);
id.requestFocus();
}else {
JOptionPane.showMessageDialog(this,"Aguarde Enquanto é gerado","Impressão",JOptionPane.INFORMATION_MESSAGE);
try {
HashMap parametros = new HashMap();
parametros.put("COD_PESSOA",id.getValue());
//parametros.put("CAMINHO_IMAGEM", System.getProperty("user.dir") + "\\imagem\\logo.jpg");
JasperPrint jp = JasperFillManager.fillReport(System.getProperty("user.dir") + "\\relatorios\\relatorioClientePorCodigo.jasper", parametros, acessoBd.conectar());
JasperViewer.viewReport(jp, false);
//JasperPrintManager.printReport(jp, false);
//JasperPrintManager.printPage(jp,0,false);
this.dispose();
//Menu.menuVisivel();
//JasperPrintManager.printReport(jp, false);
} catch (JRException ex) {
Logger.getLogger(RelatorioAtendimentoFrame.class.getName()).log(Level.SEVERE, null, ex);
}
}
1 curtida
@jallisson_jallis desde ja agradeço a atenção, com esse codigo “System.getProperty(“user.dir”)” aparece a mensagem que o arquivo .jasper teria que estar neste caminho abaixo.
Caused by: java.io.FileNotFoundException: /home/everthon\report\relatorioClientePorCodigo.jasper
olha como ficou o codigo no bean;
Connection conexao = HibernateUtil.getConexao();
JasperPrint jp = JasperFillManager.fillReport(System.getProperty(“user.dir”) + “\report\relatorioClientePorCodigo.jasper”, parametros, conexao);
JasperViewer.viewReport(jp, false);
@jallisson_jallis, Esse foi o código que resolveu, porem não entendi porque os outros relatorios funcionaram apenas com uma barra("/") tentei novamente com 2 barras (’\’) como dito anteriormente, porem inverti elas, ai sim funcionou.
public void imprimirClientePorCodigo(ActionEvent evento) {
try {
Cliente clienteSelecionado = (Cliente) evento.getComponent().getAttributes().get(“clienteSelecionado”);
System.out.println( " getPessoa().getCodigo()…:"+ clienteSelecionado.getPessoa().getCodigo());
String caminho = Faces.getRealPath("//report//relatorioClientePorCodigo.jasper");
Map<String, Object> parametros = new HashMap<>();
parametros.put("COD_PESSOA",clienteSelecionado.getPessoa().getCodigo());
Connection conexao = HibernateUtil.getConexao();
JasperPrint jp = JasperFillManager.fillReport(caminho, parametros, conexao);
JasperViewer.viewReport(jp, false);
} catch...
testarei o outro desta forma, caso ocorra outra exception portarei aqui, grato vlw.
não conheço o método getRealPath da Classe Faces, talvez ele trabalha desse jeito com as barras invertidas diferente do string que é colocado direto System.getPropert.