Ireport[resolvido]

prezados amigos alguem poderia me informar uma apostila ou tutorial do ireport que ensina como filtrar um relatorio nele porque eu to parada com um projeto a um tempo ja…ja postei codigos aqui mais ninguem respondeu se puderem ajudar eu agradeco obrigada.

Ola, primeiramente temos que definir umas variaveis:
suponho que esteja usando banco de dados;
para seu relatorio, quer trazer estes dados do banco com o proprio ireport, ou atraves de sua aplicação?
dependendo de qual for o contexto muda completamente.

Oi, boa tarde!

Este aqui é muito legal:

http://www.k19.com.br/artigos/relatorios-em-java-jasperreports-e-irepor/

Abraço,

entao estou chamando meu relatorio atraves da minha aplicacao java na query do relatorio esta algo assim

select * from Date(data) = $P{data}

o codigo de chamada de relatorio esta assim que faz a conexao essa e a classe ai tem o botao do filtro que vai gerar o relatorio que o codigo esta logo abaixo

[code]
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;

import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import Modelo.Cliente;

public class RelatorioCliente
{
Connection con;

private String converteData(Calendar data) {   
    // TODO Auto-generated method stub   
    return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());   
}   
 private static EntityManagerFactory fabricaDeEntidades = null;     
   
 private static EntityManager gerenciador = null;     

public JasperPrint gerarRelatorioCliente()   
throws Exception   
{   
    JasperPrint rel=null;   
   
String url = "jdbc:postgresql://localhost:5432/TurmaN40";   
   
  try {   
    Class.forName("org.postgresql.Driver");   
} catch(java.lang.ClassNotFoundException e1) {   
    System.err.print("ClassNotFoundException: ");   
    System.err.println(e1.getMessage());   
}   
try {   
    con = DriverManager.getConnection(url,"postgres", "postgres");   
} catch(SQLException ex) {   
    System.err.print("SQLException: ");   
    System.err.println(ex.getMessage());   

}   

try { // Connection con = Conexao.criaConexao();   
HashMap<String, JasperPrint> map= new HashMap<String, JasperPrint>();   
Cliente sb = new Cliente();   
map.put("data: " + converteData(sb.getData()) +"\n",rel);   
System.out.println("imprimi data"+map);   
String arquivoJasper= "C:\\vidracaria\\RelatorioCliente.jasper";   
rel=JasperFillManager.fillReport(arquivoJasper,map,con);   
con.close();   
   
}   
catch (JRException e)   
{ e.printStackTrace();   
}   
return rel;   
}   

} [/code]

codigo do botao do filtro este botao ele faz a chamada do relatorio junto com aquela conexao.

[code]botao1.addActionListener(new ActionListener() {

        public void actionPerformed(ActionEvent e) {     
              RelatorioCliente rep = new RelatorioCliente();     
              JasperPrint relat;     
              Cliente f = new Cliente();   
              try {     
                    f.setData(b.getSelectedDate());   
                  relat = rep.gerarRelatorioCliente();     
                  JasperViewer.viewReport(relat, false);     
              } catch (Exception e1) {     
                  e1.printStackTrace();     
              }     

//
}
}); [/code]

No seu código, aqui:

 map.put("data: " + converteData(sb.getData()) +"\n",rel); 

você tá passando como parâmetro uma data que tá vindo do seu objeto Cliente. Imagino que queira que seu relatório mostre dados referentes a essa data. Mas nesse método, ele vai retornar a data atual, não é isso ?

 private String converteData(Calendar data) {     
         // TODO Auto-generated method stub     
         return new SimpleDateFormat("dd/MM/yyyy").format(new Date().getTime());     
     }    

Outro detalhe a verificar: o parâmetro $P{data} que você criou dentro do report está como tipo Date ? É importante checar que o tipo de dado do parâmetro seja o mesmo do valor que você tá passando pra ele quando chama o relatório. E na query do relatório SE precisar dar cast, que seja no campo e no parâmetro, ficando assim:

select * from Date(data) = Date($P{data}) 

isso mesmo quero que ele mostre dados da data so que realmente esta me trazendo a data atual = null nao sei o que posso mudar no codigo para que isso nao aconteca mais…ja tentei varias coisas
mais nao consegui quando deixo apenas map.put(“data”,rel) apenas aparece a data como null o q posso mudar no codigo pra que isso nao aconteca mais
as variaveis data esta como calendar nao sei se com date e possivel que ele faca a consulta pois uso calendario para gravar no banco ou seja datechoosercombo ai fica do tipo calendar.

e nao sei da onde esta vindo este valor nulo caso coloque map.put(“data”,rel) ele vai entrar nulo o certo seria imprimir a data no map quando chamar o relatorio acho.

Olhando com mais atenção percebi outra coisa que não tinha me ligado antes. Sua passagem de parâmetros tem problema:

map.put("data: " + converteData(sb.getData()) +"\n",rel); 

Está concatenando a String “data :” com o valor da data que seu método retorna. E está passando esse rel que é um JasperPrint que poucas linhas acima está null. Você tem que passar o nome do parâmetro(igualzinho o que tá na query do seu report) e o valor que vai pra ele. Ficaria isso:

map.put("data", converteData(sb.getData())); 

E verifique atentamente essa conversão de data.

Não importa de onde você tá pegando a data no momento de gravar no banco… se estiver definido na tabela que o campo é do tipo Date ele entra lá como Date ou não entra.

map.put("data", converteData(sb.getData())); 

quando coloco esta linha sem o rel da erro

Poste os erros … vamos resolver isso!!

map.put("data", converteData(sb.getData()));

pronto olha o erro que da compilando com esta linha de erro.

Exception in thread “AWT-EventQueue-0” java.lang.Error: Unresolved compilation problem:
The method put(String, JasperPrint) in the type HashMap<String,JasperPrint> is not applicable for the arguments (String, String)

at RelatorioCliente.gerarRelatorioCliente(RelatorioCliente.java:55)
at JanelaCliente$9.actionPerformed(JanelaCliente.java:554)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

percebi que esta string ai por isso o erro porem nao sei o que mudar para conseguir compilar esse relatorio.

Sim, você tem razão. Agora troque essa linha

HashMap<String, JasperPrint> map= new HashMap<String, JasperPrint>();

por isso:

HashMap map = new HashMap();

Isso vai resolver seu erro de compilação. Agora voltando à query do report, execute-a direto no banco e poste o formato em que as datas aparecem pra você

minhas datas estao assim 2012-06-16 neste formato

tem outro problema quando coloco no sql do banco isso aqui select * from cliente where data diretao pra ver se ele me tras a data
fala que argumento where tem que ser do tipo boolean nao date…eu uso o postgresql ele pelo jeito é diferente d outros bancos.

mais o formato dele é esse mesmo…que te falei…ai acima

ta dando um erro quando clico no botao do relatorio este aqui

net.sf.jasperreports.engine.JRException: Incompatible java.lang.String value assigned to parameter data in the RelatorioCliente dataset.
at net.sf.jasperreports.engine.fill.JRFillDataset.setParameter(JRFillDataset.java:895)
at net.sf.jasperreports.engine.fill.JRFillDataset.setFillParameterValues(JRFillDataset.java:652)
at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:603)
at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:891)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:716)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:669)
at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:63)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:402)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:234)
at RelatorioCliente.gerarRelatorioCliente(RelatorioCliente.java:58)
at FiltroCliente$1.actionPerformed(FiltroCliente.java:83)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

A variável data que você crio no relatório esta recebendo um valor não compatível !!! Você ta passando o conteúdo para o relatório da aplicação java ou faz o relatório dar select em algum banco ?

é que no where você tem que aplicar uma comparação, não apenas jogar o parâmetro lá. Isso não funcionaria em banco nenhum. Amanhã vou acordar com uma pequena ressaca mas vou subir um postgresql aqui e fazer uns testes pra te ajudar a encontrar isso

ele da select no banco postgree o pior que ja olhei a query do relatorio e vi se nao estava string pior que nao ta o codigo tem algo que esta passando string acho no codigo do relatorio cliente
as variaveis de data esta date…ta bem ademilton mto obrigada por estar me ajudando nisso eu pensei que fosse mais facil filtra o relatorio.