Relatório aparece em Branco

Olá a Todos,

Estou com um problema que não estou consigo resolver desde ontem, se alguém poder ajudar desde já agradeço muito.

O plugin do Ireport instalado no netbeans, clico preview ele chama o relatório com dados do select e tudo aparece ok.

Quando chamo pela classe java , o relatório vem com os campos estáticos + data + números de página,
porém sem os dados do select.

Me ajudem pessoal estou precisando disso urgente.

O relatório abre?
se sim provavelmente o erro ta no seu select que vc ta passando pelo o código
da uma verificada nisso, pq um espaço que esteja faltando no seu sql já vai da erro
mas da um verificada nisso
e qualquer coisa cola seu código aqui!

[code]
private void btnGerarActionPerformed(java.awt.event.ActionEvent evt) {
verificaBusca();
parametrosSubRelatorio();
}

private void formWindowActivated(java.awt.event.WindowEvent evt) {
limparComboNomeProduto();
populaComboNomeProduto();

}

public void populaComboNomeProduto()
{
ctrProduto = new CTR_ManterProduto();
produtos = ctrProduto.listarProdutos(“codigoProduto”);
comboNomeProduto.addItem(" – Selecione – ");
comboNomeProduto.addItem(“Todos”);
for (Produto listaProdutos: produtos)
{
comboNomeProduto.addItem((Produto) listaProdutos);
}
}

public void limparComboNomeProduto()
{
comboNomeProduto.removeAllItems();
}

private void verificaBusca()
{
if (comboNomeProduto.getSelectedItem().equals(" – Selecione – "))
{
JOptionPane.showMessageDialog(this,“Selecione o Produto para visualizar o relatório!”,“Informação…”,JOptionPane.INFORMATION_MESSAGE);
auxValor = 0;
}
if (comboNomeProduto.getSelectedItem().equals(“Todos”))

{
   auxValor = 1;
}else
{
    auxValor = 2;
}    

}

private boolean casosErro()
{
if (((auxValor == 1) || (auxValor == 2)) && vetorEstoque.size() == 0)
{
JOptionPane.showMessageDialog(this,“Este Produto não consta em Estoque!”,“Informação”,JOptionPane.INFORMATION_MESSAGE);
return true;
}

// if ((auxValor == 3) && (vetorEstoque.size() == 0))
// {
// JOptionPane.showMessageDialog(this,“Este Loja não tem Produtos em Estoque!”,“Informação”,JOptionPane.INFORMATION_MESSAGE);
// return true;
// }
//
return false;
}

private void parametrosSubRelatorio()
{
// busca um produto de cada vez
produtoAux = new Produto();
ctrProduto = new CTR_ManterProduto();
vetorEstoque = new ArrayList();

   if (auxValor == 2){


   Produto produtoAux1 = (Produto) comboNomeProduto.getSelectedItem();
   produtoaux2 = ctrProduto.carregarProdutoCodigoProduto(produtoAux1.getCodigoProduto());
   vetorEstoque.add(produtoaux2);

   if ((casosErro() == false) && (auxValor == 2))
   {
      diretorio = dir1;
      mapeiaParametros();
   try
      {
        auxRelatorio.geraRelatorio(nomeRelatorio, auxRelatorio.getReport(diretorio), parameters);
      }
      catch (Exception ex)
      {
        Logger logAux = Logger.getLogger(formRelatorioProduto.class);
        mensagemErro = "Erro gerado pelo sistema: "+ex;
        log.gerarLog(logAux, mensagemErro);
      }
   }
   }

}

private void mapeiaParametros()
{
try
{
parameters = new HashMap();
parameters.put(“codigoProduto”,produtoaux2.getCodigoProduto());
parameters.put(“imagem”, auxRelatorio.getImagem(imagemCaminho));
}
catch (Exception e)
{
Logger logAux = Logger.getLogger(formRelatorioProduto.class);
mensagemErro = "Erro gerado pelo sistema: "+e;
log.gerarLog(logAux, mensagemErro);
}
}[/code]

Alguém pode me dar apoio aqui?

Fala ai Galera dêem uma ajuda ai, estou precisando muito resolver isso!

Agradeço pela atenção!

Bom eu não encontrei no seu código em lugar algum onde
vc faz a chamada do relatório com o resultSet.
Eu queria ver essa parte!

Bom dia Vinny,

Eu estou usando Hibernate.
Este são as variaveis que eu declarei:

public class formRelatorioProduto extends javax.swing.JFrame { private String dir1 = "relatorioProduto"; private String dir2 = "relatorioProdutoTodos"; private String diretorio; private CTR_ManterProduto ctrProduto; private CTR_ManterItemPedido ctrItemPedido; private HashMap parameters; private Produto produtoAux ; private List<Produto> produtos; private ArrayList<Produto> vetorEstoque; private Produto produtoaux2; private PedidoVO pedidoAux; private int auxValorCombo = 0; private Loja lojaAux; private int auxValor = 0; private GeraIreport auxRelatorio = new GeraIreport(); private String nomeRelatorio = "Relatorio de Produtos"; private GeraLog log = new GeraLog(); private String mensagemErro; private String imagemCaminho = "toporelatorio";

Sim… Mas onde você passa o código da consulta, ou alguma informação para a informação ser gerada no relatório???

Att. Jonas

tem que existir algum tipo de filtro, para o SQL ser executado.

" Select * from table where X = ? "

onde esta esse " ? " no seu programa que vc envia para o relatório?

public class formRelatorioProduto extends javax.swing.JFrame  
{  
    private String                             dir1 = "relatorioProduto";  
    private String                            dir2 = "relatorioProdutoTodos";  
    private String                            diretorio;  
    private CTR_ManterProduto        ctrProduto;  
    private CTR_ManterItemPedido   ctrItemPedido;  
    private HashMap                        parameters;  
    private Produto                         produtoAux ;  
    private List<Produto>               produtos;  
    private ArrayList<Produto>       vetorEstoque;  
    private  Produto                       produtoaux2;  
    private PedidoVO                     pedidoAux;  
    private int                               auxValorCombo = 0;  
    private Loja                            lojaAux;  
    private int                              auxValor = 0;  
    private GeraIreport                 auxRelatorio = new GeraIreport();  
    private String                         nomeRelatorio = "Relatorio de Produtos";  
    private GeraLog                     log = new GeraLog();  
    private String                         mensagemErro;  
    private String                           imagemCaminho = "toporelatorio";  
      
private void btnGerarActionPerformed(java.awt.event.ActionEvent evt) {                                           
    verificaBusca();  
    parametrosSubRelatorio();  
}                                          
  
private void formWindowActivated(java.awt.event.WindowEvent evt) {                                       
limparComboNomeProduto();  
populaComboNomeProduto();  
  
}                                      
  
public void populaComboNomeProduto()  
{  
    ctrProduto = new CTR_ManterProduto();  
    produtos = ctrProduto.listarProdutos("codigoProduto");  
    comboNomeProduto.addItem(" -- Selecione -- ");  
    comboNomeProduto.addItem("Todos");  
    for (Produto listaProdutos: produtos)  
    {  
       comboNomeProduto.addItem((Produto) listaProdutos);   
    }    
}  
  
public void limparComboNomeProduto()  
{  
    comboNomeProduto.removeAllItems();  
}  
  
  
private void verificaBusca()  
{  
    if (comboNomeProduto.getSelectedItem().equals(" -- Selecione -- "))  
    {  
       JOptionPane.showMessageDialog(this,"Selecione o Produto para visualizar o relatório!","Informação..",JOptionPane.INFORMATION_MESSAGE);  
       auxValor = 0;  
    }  
    if (comboNomeProduto.getSelectedItem().equals("Todos"))  
       
    {  
       auxValor = 1;  
    }else  
    {  
        auxValor = 2;  
    }      
}  
  
private boolean casosErro()  
{  
    if (((auxValor == 1) || (auxValor == 2)) && vetorEstoque.size() == 0)  
    {  
       JOptionPane.showMessageDialog(this,"Este Produto não consta em Estoque!","Informação",JOptionPane.INFORMATION_MESSAGE);    
       return true;  
    }    
      
//    if ((auxValor == 3) && (vetorEstoque.size() == 0))  
//    {  
//       JOptionPane.showMessageDialog(this,"Este Loja não tem Produtos em Estoque!","Informação",JOptionPane.INFORMATION_MESSAGE);  
//       return true;  
//    }  
//      
    return false;  
}          
  
  
  
private void  parametrosSubRelatorio()  
{  
   // busca um produto de cada vez   
   produtoAux = new Produto();    
   ctrProduto = new CTR_ManterProduto();  
   vetorEstoque = new ArrayList<Produto>();  
  
  
       if (auxValor == 2){  
  
  
       Produto produtoAux1 = (Produto) comboNomeProduto.getSelectedItem();  
       produtoaux2 = ctrProduto.carregarProdutoCodigoProduto(produtoAux1.getCodigoProduto());  
       vetorEstoque.add(produtoaux2);  
  
       if ((casosErro() == false) && (auxValor == 2))  
       {  
          diretorio = dir1;  
          mapeiaParametros();  
       try  
          {  
            auxRelatorio.geraRelatorio(nomeRelatorio, auxRelatorio.getReport(diretorio), parameters);  
          }  
          catch (Exception ex)  
          {  
            Logger logAux = Logger.getLogger(formRelatorioProduto.class);  
            mensagemErro = "Erro gerado pelo sistema: "+ex;  
            log.gerarLog(logAux, mensagemErro);  
          }  
       }  
       }  
}          
    
private void mapeiaParametros()   
{  
  try  
  {          
    parameters = new HashMap();  
    parameters.put("codigoProduto",produtoaux2.getCodigoProduto());  
    parameters.put("imagem", auxRelatorio.getImagem(imagemCaminho));  
  }  
  catch (Exception e)  
  {  
    Logger logAux = Logger.getLogger(formRelatorioProduto.class);  
    mensagemErro = "Erro gerado pelo sistema: "+e;  
    log.gerarLog(logAux, mensagemErro);    
  }          
}  

minha classe gerar relatório:


public class GeraIreport
{
    
    private Connection          conexao = null;
    private static String       driver = "com.mysql.jdbc.Driver";
    private static String       endereco = "jdbc:mysql://localhost/karinhaestoque";
    private static String       usuario = "root";
    private static String       senha = "";
    private static ImageIcon    iconePrincipal = new ImageIcon("Icons/logo.jpg");
  
    public GeraIreport()
    {
        super();
        conexaoBanco(); 
    }        
    
    
   /** 
    * Funcao que realiza conexao com o banco, senha 123 e usuario root
    */
   public void conexaoBanco()
   {
       try 
       {
         if (getConexao() == null) 
         {
           Class.forName(driver);
                setConexao(DriverManager.getConnection(endereco, usuario, senha));
         }
       }   
       catch (Exception e) 
       {
          System.err.println("Problemas apresentados na operação de conexão");
          e.printStackTrace();
       }
       
    } 
   
   /**  Esta funcao apenas reconhece relatorios
     *  que estiverem na pasta relatorios do sistema    *  
     */
    public InputStream getReport(String nomeRelatorio) throws Exception 
    {
        try{
       String reportPath = "/br/com/karinhaEstoque/relatorios/" + nomeRelatorio + ".jasper";  
       InputStream stream = ReportUtils.class.getResourceAsStream(reportPath);

       if (stream == null)
       {  
          throw new Exception("Relatório não encontrado: " + reportPath);  
       }  
       
       return stream;
       }catch(Exception ex){
            ex.printStackTrace();
       } 
        return null;

    }
    
    
   /**  Esta funcao apenas reconhece imagens do tipo .jpg 
     *  portanto só pode ser passado como parametro para o 
     *  relatorio imagens .jpg 
     */   
    public Image getImagem(String nomeImagem) throws Exception
    {
       String imagemPath = "/br/com/karinhaEstoque/imagens/" + nomeImagem + ".jpg";  
       ImageIcon imagem = new ImageIcon(getClass().getResource(imagemPath)); 
       
       if (imagem == null)
       {  
          throw new Exception("Imagem não encontrada: " + imagemPath);  
       }  
       
       return imagem.getImage();  
    }   
    
    
    
    /**  Esta funcao foi criada com o intuito de gerar relatorios em pdf
     *   passando como parametros o titulo do relatorio, o diretorio do relatorio
     *   e os parametros desejados.
     */   
    public String geraRelatorio(String tituloRelatorio, InputStream diretorioRelatorio, 
                                Map parametros)
    {
        /* Inicio do bloco que ira gerar os relatorios */
        try 
        {
           // criando o relatorio    
           JasperReport jrpt = (JasperReport) JRLoader.loadObject(diretorioRelatorio);
           JasperPrint print;
           print = JasperFillManager.fillReport(jrpt, parametros ,getConexao());
           // mostrando o relatorio
           JasperViewer jrviewer = new JasperViewer(print,false);
           jrviewer.setIconImage(iconePrincipal.getImage());
           jrviewer.setTitle(tituloRelatorio);
           jrviewer.setVisible(true);
           return "sucesso";
        }    
        catch (Exception e) 
        {
          e.printStackTrace();
        }
        return "falhou";
     }

     
    
    public Connection getConexao() {
        return conexao;
    }

    public void setConexao(Connection conexao) {
        this.conexao = conexao;
    }
   
    
}

Eu fiz todo sql no ireport para pegar dados do banco e exibir no relatório.
Se eu não fui claro, pode-me dizer , estou aguardando só isso.

print = JasperFillManager.fillReport(jrpt, parametros ,getConexao());

nao entendi, pelo que eu me lembro, esse 3 parametro é o SQL

só tente entender este trecho de código:

...
...
rs = stmt.executeQuery();
			try {
				JRResultSetDataSource ds = new JRResultSetDataSource(rs);
				JasperPrint jp = JasperFillManager.fillReport(caminhoJasper, hm, ds);
				JasperViewer.viewReport(jp, false);
			} catch (JRException e) {
				e.printStackTrace();
			}

Att. Jonas

Thekill,

Esse trecho do código rs = stmt.executeQuery(); ele não é só para o slq? Se eu estiver errado pode-me corrigir, pois estou usando hibernate para listar código do produto num combo, depois passo para o parâmetro o código selecionado no combo.

esse relatório é apenas para 1 codigo? tipo relatório de 1 folha?

Sim! Ele gera um produto específico que é selecionado no combo.

Entendi,

Sim, o SQL seria os resultados da consulta SQL…
no seu caso muda um pouco porque nao ta fazendo consulta SQL…

De uma pesquisada no forum, estou meio ocupado, mas tem alguns tópicos sobre isso…
Boa sorte…

Att. Jonas

Vlw Thekill

E ai galera,

Alguém tem alguma opinião para este meu problema?

Att,
Lags

no seu método geraRelatorio, de um system.out.println no objeto do parametro

e verifique se o resultado esta correto, volte ao relatório e verifique a forma com que faz a consulta no relatório.
verifique se colocou o $P{NOME-PARAMETRO} no lugar certo, PS.: nao sei como hibernate funciona.

em sql seria o exemplo: where nome = $P{NOME-PARAMETRO}

Att. Jonas

Usei sql no ireport para pegar dados, em java só passei parâmetro.

Este é meu sql:

select p.nome,p.cor,p.sexo,p.tamanho,l.nome as nomeLoja,
p.codigoProduto as codigo, f.nome as Fornecedor, p.valorCusto,
p.quantidade As QtdProduto
from produto p, fornecedor f,loja l
where p.codigo_for = f.codigo and p.codigoloja = l.codigo and
p.codigoProduto =$P{codigoProduto}
order by p.codigoProduto