Como chamar subreport JasperIreport [RESOLVIDO] + EXEMPLO feito por marciofermino

5 respostas
K45T

olá galera, espero que vcs estejam de bom humor hoje.
pois faz dois dias que eu estou a procura dessa solução.
o problema é o seguinte…
eu construi direitinho o relatório no iReport e funciona
mais quando eu chamo pela classe da erro.

a classe que eu chamo o é essa:

public class CriaRelatorio {
    
    Conexao con = new Conexao();
      
    public CriaRelatorio() {
  
          
            con.conecta();
            
 con.executaSQL( "select nota.*, cli.* from notafiscaldevenda nota, cliente cli where nota.cliente = cli.codigo" );
            
            JRResultSetDataSource jrRS = new JRResultSetDataSource( con.resultSet );
            
           try { 
            JasperPrint jasperPrint = JasperFillManager.fillReport(  
                    "C:/Estoque/Relatorio/ProdutosMaster.jasper", new HashMap(), jrRS);
            
            
            JasperViewer.viewReport(jasperPrint);
           
        } catch ( Exception erro) {
            JOptionPane.showMessageDialog(null, erro ); 
 
          }
    
    
    }
    
    public static void main( String args[] ){
        
        new CriaRelatorio();
        
     }

}

o relatório imprime mais o subrelatorio não queria saber como enviar os parametros necessários

5 Respostas

marciofermino

Amigo vou colocar um exemplo, senão conseguir.. dou curso tb

try
        {
                /* CONEX��O COM O BANCO DE DADOS MySql*/
                Class.forName("com.mysql.jdbc.Driver");
                Connection ConectaNoBanco =
                (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/bd","root","");
                Statement stmt = (Statement) ConectaNoBanco.createStatement();
           
                HashMap parameters = new HashMap();
                              parameters.put("","");
           
           
                JasperPrint print = JasperFillManager.fillReport("C:/x/classic.jasper",parameters,ConectaNoBanco); //new HashMap(),new JRDataSource());
                
                //JasperPrintManager.printReport("C:/Arquivos de programas/Programa/Meval/src/Meval/Relatorio/Relatorio_Os.jasper",true);
                //JasperExportManager.exportReportToPdfFile( "C:/Relatorio_Os.jrprint" ); 
                //JasperViewer.viewReport( "C:/Relatorio_Os.pdf", false );    
                JasperViewer jrviewer = new JasperViewer(print,false);
                jrviewer.setTitle("RELATÓRIO MEVAL - MEC - VALMET LTDA.");
                //jrviewer.setIconImage(new ImageIcon("C:/Arquivos de programas/Programa/Meval/Aplicativos/Icones/MEVAL.png").getImage());
                jrviewer.setVisible(true);
            
        }
                catch(JRException jre)
        {
                jre.printStackTrace();
            
                JOptionPane.showMessageDialog(null,"ARQUIVO NÃO ENCONTRADO!!!!!!!","FORMULARIO PESQUISA",3);
        }
                 catch(SQLException e)
        {
                JOptionPane.showMessageDialog(this,"ERRO NO COMANDO SQL" + e.getMessage());
        }
                catch(ClassNotFoundException e)
        {
                JOptionPane.showMessageDialog(this,"DRIVE NAO ENCONTRADO");
        }


SUB-RELATORIOS


try
        {
             
                Class.forName("com.mysql.jdbc.Driver");
                Connection ConectaNoBanco =
                (Connection) DriverManager.getConnection("jdbc:mysql://localhost:3306/bd","root","");
                Statement stmt = (Statement) ConectaNoBanco.createStatement();
           
                HashMap parameters = new HashMap();
                              parameters.put("SUBREPORT_DIR","c:/X/");
           
           
                JasperPrint print = JasperFillManager.fillReport("C:/x/classic.jasper",parameters,ConectaNoBanco); //new HashMap(),new JRDataSource());
                
                //JasperPrintManager.printReport("C:/Arquivos de programas/Programa/Meval/src/Meval/Relatorio/Relatorio_Os.jasper",true);
                //JasperExportManager.exportReportToPdfFile( "C:/Relatorio_Os.jrprint" ); 
                //JasperViewer.viewReport( "C:/Relatorio_Os.pdf", false );    
                JasperViewer jrviewer = new JasperViewer(print,false);
                jrviewer.setTitle("RELATÓRIO MEVAL - MEC - VALMET LTDA.");
                //jrviewer.setIconImage(new ImageIcon("C:/Arquivos de programas/Programa/Meval/Aplicativos/Icones/MEVAL.png").getImage());
                jrviewer.setVisible(true);
            
        }
                catch(JRException jre)
        {
                jre.printStackTrace();
            
                JOptionPane.showMessageDialog(null,"ARQUIVO NÃO ENCONTRADO!!!!!!!","FORMULARIO PESQUISA",3);
        }
                 catch(SQLException e)
        {
                JOptionPane.showMessageDialog(this,"ERRO NO COMANDO SQL" + e.getMessage());
        }
                catch(ClassNotFoundException e)
        {
                JOptionPane.showMessageDialog(this,"DRIVE NAO ENCONTRADO");
        }
CarlosEduardoDantas

olá… acho que a primeira coisa que precisamos avaliar é se você criou o parametro SUBREPORT_DIR quando fez o sub-relatorio… esse parametro é mto importante pra nao deixar seu relatorio engessado… la no iReport, o valor default dessa parametro pode ser “/” caso o .jasper do subrelatorio esteja no mesmo .jasper do relatorio mestre

feito isso, no seu codigo fonte, o parametro SUBREPORT_DIR será alimentado por:

String arquivo = System.getProperty(“user.dir”) + “pacotes+subrelatorio.jasper”;

K45T

Opa muito obrigado por me ajudarem.
garanto que não conseguiria sozinho…

mais ainda tenho muitas dúvidas quanto a passar parametros para o xml
por exemplo
no meu subrelátório recebe um parametro do relatório principal (assim te digo)
na query

assim:

<queryString><![CDATA[select * from produtosvenda
where codigoDaVenda = $P{NOTAFISCAL}]]></queryString>

sabendo que $P{NOTAFISCAL} é um parametro do relatório principal
como eu passaria para para o SubRelátório ?

HashMap parameters = new HashMap();   
           parameters.put("NOTAFISCAL","numeronf" );

sabendo que numeronf é um dos campos do relatório principal e assim não está dando certo
pois está me retornando esse erro:

net.sf.jasperreports.engine.JRException: Error preparing statement for executing the report query : 

select * from produtosvenda
where codigonf = ?

é realmente estou prescisando de u curso pois miha cabeça não é mais aquela de 5 anos atrás.
mais me deem uma luz que eu procuro entender.

CarlosEduardoDantas

clique com o botao direito do mouse no subrelatorio e clique em properties. Na opcao subreport (other), em subreport parameters, clique em add…

subreport parameter name é o nome do parametro lá no subrelatorio e default value expression é o valor que voce deseja que vá para o subrelatorio

K45T

marciofermino;
valew seu codigo foi muito útel para que eu entendesse
eu estava fazendo uma chamada… rsss

caduengenheiro;

valew kra já tinha feito mais estava com erro;
acho que era por isso que não tinha funcionado

obrigada a todos do GUJ

Criado 11 de novembro de 2008
Ultima resposta 12 de nov. de 2008
Respostas 5
Participantes 3