Não consigo carregar o SubRelatório pela aplicação

23 respostas
E

Gente, não estou conseguindo resolver esse problema. Sempre da o erro:

no relatório, a expressão do subreport esta $P{SUBREPORT_DIR} + "CapaRCDA_subreport1.jasper"

mesmo assim, ele não encontra e eles estão no mesmo diretório…

Me ajudem, por favor… T-T

23 Respostas

A

Boa tarde ElesisLink…

Vocês está passando algum parametro para o $P{SUBREPORT_DIR} de sua aplicação?

Se não está, qual o valor Default que vc está setando?

att,
Ávila

A

Se estiver vazio tenta coloca uma / antes do nome do sub…

$P{SUBREPORT_DIR} + “/CapaRCDA_subreport1.jasper”

ou

$P{SUBREPORT_DIR} + “\CapaRCDA_subreport1.jasper”

E

Você esta falando disso

que esta no XML ou disso:

que foi gerado pelo IReport?

Eu não passo parâmetro para o relatório

A

Falo o que foi gerado pelo IReport…

No campo Subreport Expression onde vc passa $P{SUBREPORT_DIR} + “CapaRCDA_subreport1.jasper”… tenta colocar 2 barras no inicio da String com o nome do subrelatorio…
Ficaria assim:

$P{SUBREPORT_DIR} + "\\CapaRCDA_subreport1.jasper"

deixa o valor do PARAMETRO SUBREPORT_DIR vazio ou com “”

o XML ele ficaria assim:

<defaultValueExpression ><![CDATA[""]]></defaultValueExpression>

Ávila

E

Cara, eu fiz do jeitinho que você falou, mas o erro persiste.

Seu eu removo os subrelatórios do Relatório principal, ele executa normalmente pela aplicação JAVA.

É só colocá-los que o erro ocorre, por favor alguém me ajuda, estou entrando em desespero… :cry:

A

No seu subreport (CapaRCDA_subreport1.jasper) você executa alguma query?

se não executa, tenta rodar algo do tipo…

SELECT SYSDATE FROM DUAL

sql para ORACLE

e tenta rodar o relatório principal com o subrelatório…

att,
Ávila

E

Sim, o subrelatório possui uma query, cujo parametro vem do relatório principal.

A

Você comentou que se remover os subrelatorios do principal funciona na aplicação…
Se você remover somente este que parece não estar encontrando deixando os outros subs…funciona?

Ávila

E

É que possui 2 subRelatórios… se remover um, da erro no outro, o mesmo erro…

Agora, se removo todos os sub, ele executa…

A

Sei que parece meio óbvio o que vou perguntar, mas tu colocou os subs .jasper na tua aplicação?
pois umas versões mais antigas do IReport ele compilava os .jasper dentro da pasta onde fica instalado o IReport…mesmo os arquivos jrxml estando dentro da aplicação…

outro teste q podes estar fazendo seria criar um sub simples, com um texto estático e uma query qualquer e tentar estar rodando para ver se vai dar certo de abrir subs no seu relatorio principal…

Ávila

E

os .jaspers estão na pasta dos relatórios, eu estou usando a versão 3.0.0. Os compilados vão para a pasta dos relatórios…

A

E se passar o caminho completo do dos relatórios executa?

tipo, $P{SUBREPORT_DIR}: “C:…\relatorios”

Ávila

E

Eu não tentei isso ainda, como eu faço?

A

Copie o caminho completo no Windows Explorer no casa de utilizar windows…e cole como default no $P{SUBREPORT_DIR}
mas coloque 2 contra barras em cada contra barra

ex.:

C:\\Users\\Fulano\\workspace\\sistemas\\WebContent\\relatorios\\

e no subreport tu aponta assim:

$P{SUBREPORT_DIR} + "CapaRCDA_subreport1.jasper"

Ávila

E

Cara eu uso Linux, e não estou conseguindo colocar o caminho. Quando eu o coloco, ele da um erro no relatório, ainda no IReport …

Eu to setando assim:

HashMap parametermap = new HashMap(); parametermap.put("SUBREPORT_DIR","\\home\\usuario\\workspace\\Relatórios\\relatorios\\");

Ta dando mais trabalho para funcionar do que fazê-lo…

A

acho que o caminho no linux ficaria com a barra normal /

HashMap parametermap = new HashMap();  
parametermap.put("SUBREPORT_DIR","/home/usuario/workspace/Relatórios/relatorios/");

mas dá uma olhada neste link que pode ajudar…

http://www.guj.com.br/java/276641-resolvido-chamar-sub-relatorio-em-classe-java

Ávila

G

Vamos caçar esse problema então…

  • Cara, você tem um “sub relatório” que chame outro “sub relatório” ou é só o principal e o sub mesmo?
  • Tentou com / ao invés de \?
  • Tira um pouco a chamada desse sub relatório que ta dando problema e coloca um field do relatório principal mostrando o valor do parâmetro “SUBREPORT_DIR”
E

Então, man, desculpa ficar te enchendo a paciência toda hora, mas ainda não esta 100% resolvido.

Em relação ao Linux, dei uma paradinha, para ver se conseguia resolver o problema no Windows 1º.

Eu coloquei os caminhos, do jeito que vc falou e, depois de muito sofrimento e exaustão, consegui mostrar o relatório,

no entanto, um novo erro aparece:

O que será isso agora ?

<edit> Não, eu tenho só um principal, que chama outros 2 subrelatórios;
com / ao invés de || parece que funcionou no LINUX, pois eu consegui chamar o relatório no Linux, mas deu o mesmo problema do WIndows agora

O Sub não aparece, mas no Linux não escreveu nada…

G

Quanto a esse erro, algum lugar não ta recebendo conexão, provavelmente esse tal de subreport1…
Seguinte, abre teu relatório principal no IReport e clica do sub relatório, nas propriedades dele, vamos conferir 2 opções:
“Connection type”: Use a connection expression
"Connection Expression": $P{REPORT_CONNECTION}

Isso deve funcionar :smiley:

E

Ele já esta configurado dessa maneira, para usa a conexão de relatório e o parâmetro, mas o erro ainda continua.

E

Aqui está o código que executo no teste, que estou fazendo no Windows

import java.sql.*;
import java.util.HashMap;

//classes necessárias para gerar este relatório
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JRResultSetDataSource;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.view.JRDesignViewer;
import net.sf.jasperreports.view.JasperViewer;

public class Relatorio{
  public static void main(String[] args){      

   //controla e executa uma instruçao sql
   Statement meustate;
   
   //conjunto de dados retornado por uma consulta sql
   ResultSet resultset;

   //instancia o objeto conex da classe Conexao
   Conexao conex = new Conexao();     

     String sql = "SELECT " +
     		"tbcliente.`id` AS tbcliente_id, " +
     		"tbcliente.`nome` AS tbcliente_nome " +
     		"FROM " +
     		"`tbcliente` tbcliente";
           
          conex.conecta();          
          
          try{            
             
             meustate = Conexao.connection.createStatement();
             resultset = meustate.executeQuery(sql);             

             // para compilar o relatório
             JasperReport r = JasperCompileManager.compileReport("Relatórios/relTeste.jrxml");
             
             //objeto para colocar no jasper report o resultado retornado
             JRResultSetDataSource jrresultado = new JRResultSetDataSource(resultset);
             
             //para passar parâmetros para o relatório
             HashMap parametermap = new HashMap();
             //parametermap.put("SUBREPORT_DIR", "C:/Users/Guga/workspace/prjRelatorio/Relatórios/");
             
             
             //chama o fill report
             JasperPrint jp = JasperFillManager.fillReport(r,parametermap,jrresultado);
             
             //para gerar relatório em pdf
			 JasperExportManager.exportReportToPdfFile(jp,"Relatórios/rel_geral_tbcli.pdf");			 
			 
			 //para exibição do relatório
			 JasperViewer js = new JasperViewer(jp, false);

				int janelaRelat = js.getExtendedState();
				
				janelaRelat = js.MAXIMIZED_BOTH;
				
				js.setExtendedState(janelaRelat);
				js.setVisible(true);
				
          }//fim do try
          
          catch(SQLException erro){
            System.out.println("Relatório não encontrado");
          }
          
          catch (JRException e) {				
				conex.fecha();
				e.printStackTrace();
		  }
          
          conex.fecha(); 
   
}//final método principal
}//final da classe

Espero que ajude a encontrar o erro...

A

Boa tarde ElesisLink

da uma lida nesse link:

http://www.guj.com.br/java/208859-resolvido-subrelatorio-no-ireport

acho que o problema que está acontecendo na sua aplicação é o mesmo deste post…

Ávila

L

Boa noite!

eu tive esse problema que o amigo mencionou

0 [relTeste_subreport1.jasper subreport filler] WARN query.JRJdbcQueryExecuteer  - The supplied java.sql.Connection object is null.
consegui resolver ... fiz o seguinte informei para o parâmetro REPORT_CONNECTION a minha conexão como segue o código abaixo:
import java.sql.Connection;
        Connection con = null;
        try
        {
           con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/MEUBANCO","postgres","minhasenha");
        }
        catch(SQLException erro)
        {
            
        }

          Map parametros = new HashMap();
          parametros.put("REPORT_CONNECTION",con);
        
          JasperPrint jasperPrint = JasperFillManager.fillReport(
          "src/br/com/jotacont/Seguranca/Teste.jasper", parametros,new JRBeanCollectionDataSource(lista));
        
          JasperViewer visualiza = new JasperViewer(jasperPrint,false);
ta aí o link de onde peguei a informação.. http://www.guj.com.br/java/285686-subrelatorio-ireport-por-aplicacaoresolvido#1607353

espero ajudar quem ainda tiver o problema! um abraço...

Criado 31 de outubro de 2012
Ultima resposta 16 de jul. de 2013
Respostas 23
Participantes 4