[RESOLVIDO]Filtro de data no iReport

24 respostas
jeandonato

Ola pessoal, tenho meu relatorio que é da seguinte forma:
foi feito toda sua estrutura no iReport 3.0…ai tenho uma classe que trata do jasper…
ai eu só chamo o relatorio quando eu quero;

Jasper jasper = new Jasper(); jasper.GerarRelat("", "/sistemas/relatorios/Contas_Pagar.jasper", rsRelatorios);
funciona numa boa…
Queria filtrar por data o mesmo agora…antes de chamar o relat agora tenho dois campos que o usuario vai informar
o periodo desejado…
Porem nao faço a menor ideia do que fazer agora…aonde vou tratar meu sql,como vou tratar, etc
se alguem puder da uma força!
agradeço desde ja.
Uso NetBeans 6.5 e iReport 3.0

24 Respostas

Paezani

Bom colega, eu faço da seguinte forma, pego as datas informadas pelo usuário, passo para o formato yyyy-mm-dd e mando como parametro para o ireport, onde coloco na query…funciona!

Entendeu? Fico no aguardo…

[]s.

jeandonato

ta, eu vou formatar a data para yyyy-MM-dd --> OK
Mandar como parametro para o iReport–>como seria +o- p/ criar esse parametro?
ai depois no sql dentro do iReport vou setar o Parametro?
[]'ss

Paezani

Bom, na sua classe java vc vai passar o parametro para o relatório:

Map parametros = new HashMap();
parametros.put("dt1", " '"+dtini+"' " );//onde dt1 é o nome do parametro criado no ireport em seu relatório, dtini é a data inicial entre aspas para a consulta
 parametros.put("dt2", " '"+dtfim+"' " );

fico no aguardo

Paezani

Para criar os parametros em seu relatório, vá no menu Visualizar -> Parametros do relatório . Abre uma nova janela, botão novo -> vc informa o nome do parametro(detalhe: tem que ser gual ao nome passado em sua classe java, no caso dt1), Tipo da classe do parametro: java.lang.String e marque o check “Usar como uma sugestão”, pronto foi criado um parametro… faça o mesmo para o dt2.

Paezani

E no sql vc seta o parametro:

select *
from tabela
where data between $P!{dt1} and $P!{dt2} //nomes de cada parameto

jeandonato
Ola, fiz tudo isso...mas nao deu certo ainda... da uma olhada:
public void GerarRelat(String Titulo, String NomeArq,final ResultSet rs) throws IOException {
        Map parameters = new HashMap();
        File reportFile = new File(NomeArq);
        
        parameters.put("BaseDir", reportFile.getParentFile()); 
        parameters.put("dt1", " '"+Util.formatToJDBC(txtDataInic.getText())+"' ");
        parameters.put("dt2", " '"+Util.formatToJDBC(txtDataFin.getText())+"' " );

            try {
                
                JasperReport jasperReport;
                JasperPrint jasperPrint;
                jasperReport = (JasperReport) JRLoader.loadObject(reportFile.getAbsolutePath());
                jasperPrint = JasperFillManager.fillReport(jasperReport, parameters, new JRResultSetDataSource(rs));
                if (jasperPrint != null && !jasperPrint.getPages().isEmpty()) {
                    //JImprimirViewer.viewReport(jasperPrint,false);
                    JasperViewer viewer = new JasperViewer(jasperPrint, false);
                    viewer.setVisible(true);
                } 
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    private void btnGerarRelatActionPerformed(java.awt.event.ActionEvent evt) {                                              
        try {
            Relatorios();
            
            GerarRelat("", "/sistemas/relatorios/CP.jasper", rsRelatorios);
           
              } catch (Exception e) {
            e.printStackTrace();
        }
}
Paezani

O Relatório funcionou no Ireport, com os parametros? O código acima parece ok…

jeandonato

Tb nao…na hora que mando gerar aparece o primeiro parametro…eu informo a data ai ele fica em um loop infinito …e la em baixo fica processando relatorio…mas nada!
até que eu finalizo o “processando relatorio” ai sim aparece o segundo parametro…informo a data…mas nda tambem.

Paezani

Bom vc está colocando as datas no formato yyyy-MM-dd ao executar o relatório? Lembre-se de colocar os aspas simples no parâmtro! ‘2009-06-29’, pode ser que seja isso… E a query está ok? fico no aguardo.

jeandonato
Paezaniera alguma coisa que tinha no meu iReportmas esta ok agora

estou conseguindo gerar pelo iReport

 falta na aplicacao agorata quase laa!

Eu informo o periodomando gerar ai ele da erro:

net.sf.jasperreports.engine.JRException: Incompatible java.lang.String value assigned to parameter dataini in the classic dataset.

at net.sf.jasperreports.engine.fill.JRFillDataset.setParameter(JRFillDataset.java:869)

at net.sf.jasperreports.engine.fill.JRFillDataset.setFillParameterValues(JRFillDataset.java:626)

at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:577)

at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1195)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:833)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:801)

at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:89)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:601)
no iReport os parametros estao como java.lang.Date

Tentei tb passar o parametro na mao:

parameters.put(dataini,  “‘2009/06/01’”);2009-06-01 ; 2009.06.01 ; 01.06.2009 (tentei de varias formas)

parameters.put(datafim,  “‘2009/06/20’”);

sempre da o msmo erro.

agradeço pela paciencia ae!

[]'s
Paezani

Bom altere o tipo dos parametros que recebem a data para java.lang.String, que é pra funcionar…Use o traço ao invés da barra…

parameters.put(“dataini”, “‘2009-06-01’”);
parameters.put(“datafim”, “‘2009-06-20’”);

Fico no aguardo…

jeandonato

Alterando para java.lang.String no iReport da erro
net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. Cannot cast from Date to String value = (java.lang.String)(((java.sql.Date)field_DATAVENC.getValue()));//$JR_EXPR_ID=0$ <------------------------------------------------------------> 2. Cannot cast from Date to String value = (java.lang.String)(((java.sql.Date)field_DATAVENC.getValue()));//$JR_EXPR_ID=1$ <------------------------------------------------------------> 3. Cannot cast from Date to String value = (java.lang.String)(((java.sql.Date)field_DATAVENC.getOldValue()));//$JR_EXPR_ID=0$ <---------------------------------------------------------------> 4. Cannot cast from Date to String value = (java.lang.String)(((java.sql.Date)field_DATAVENC.getOldValue()));//$JR_EXPR_ID=1$ <---------------------------------------------------------------> 5. Cannot cast from Date to String value = (java.lang.String)(((java.sql.Date)field_DATAVENC.getValue()));//$JR_EXPR_ID=0$ <------------------------------------------------------------> 6. Cannot cast from Date to String value = (java.lang.String)(((java.sql.Date)field_DATAVENC.getValue()));//$JR_EXPR_ID=1$ <------------------------------------------------------------>

Paezani

Nossa que estranho, aqui funciona! A sua query esta ok?
O valor de suas datas está assim 2009-07-02?

Fico no aguardo

jeandonato

Entao…ta sinistro o negocio aqui!A query esta ok sim…
só daquela forma que funciona msmo (java.lang.Date.) só que porem da o erro na aplicação la…

Paezani

Bom donatoinfo tem como vc colocar seu arquivo do ireport pra download pramim ver se fuciona aqui?
Falando sem analisar o relatório eu não sei mais o q possa ser.

Fico no aguardo

jeandonato

Me passa seu email que eu te mando por email!
[]'s

Paezani

jeandonato

Beleza…enviado
[]'s

jeandonato

Rapaiz…funcionou aqui =DD
O que estava acontecendo era que na hr que eu mandava gerar o relatorio a aplicacao executava meu ResultSet que tinha o sql: select * from tabela…
anulando os parametros…
ai coloquei na query do relatorio select * from tabela…
e na do meu Rs (“select * from contas_pagar cp where cp.dataVenc between “+”’”+Util.formatToJDBC(txtDataInic.getText())+"’"+" and “+”’"+Util.formatToJDBC(txtDataFin.getText())+"’");
Esta funcionando beleza agora!
Obrigado pela paciencia ae
[]'s

brunosales85

Qual foi a query que vc colocou no seu relatório no IReport ?
Tipo, a query que foi setada no ireport que vale ? ou é a que é passada na aplicação do resultset ?

jeandonato

No iReport ficou :
select * from contas_pagar
naoo…ai a do iReport ficou só pra trazer todos os registros…com os parametros la e tudo mais!
A que ta fazendo a filtragem é a da aplicação

Augusto_Cesar

Bom dia GUJIANOS,

Gostaria de uma ajuda no filtro de data, eu to usando a ferramenta para fazer os relatório sem o uso de classes java.

Dentro do campo filed eu coloquei diretamente o campo que vem a data, no caso “data_nasc”. Mas o animal que fez o programa não pensou que a data “0000-00-00” não é uma data de nascimento válida. O problema maior que estou tendo é que o IReport da problema quando essa data(0000-00-00) vem e ele da um erro e não gera o relatório. Tentei fazer várias validações mas nenhuma delas funciona, todas indicam erro, pra que está lendo esse post segue o código que estou colocando dentro do campo de field:

$F{data_nac} = ‘0000-00-00’ ? “teste” : “teste2”

o erro descreve: “Invalid character constant”.

tentei também:

$F{data_nac}.equals(“0000-00-00”) ? “teste” : “teste2”

o erro descreve: “Cannot cast String to Date”

fiz outras tentativas ainda mas não obtive sucesso.

A idéia é mostrar simplesmente que a data que está cadastrada é inválida.
Alguém pode me ajudar?

Obrigado pela atenção!

Augusto_Cesar

Já resolvi =)
Esse tipo de problema da pra resolver dando o TYPECAST na query e gerar um string para comparar com outra:

Query:
CAST(cli.data_nac AS Char)

Field:
$F{CAST(cli.data_nac AS Char)}.equals(“0000-00-00”) ? “Data de nascimento é inválida, altere no sistema e tente novamente.” : $F{CAST(cli.data_nac AS Char)}

=) :twisted:

R

Olá amigos!

bom já faz um tempinho pelo que vi a data deste tópico mas já procurei em varios lugares e ainda não consegui resolver o problema de filtros por data no meu reatório e gostaria de se possivel a ajuda dos mais experientes.

tenho uma tabela que tem um campo data e gostaria de gerar meu relatório da seguinte maneira o usuario filtra a dada tipo 01/01/2011 a 31/01/2011 e clica em filtrar depois ele coloca o tipo de material que ele quer visualizar no relatório tipo gasolina e assim por diante, no meu ralatório no ireport criei os parametros $P{nNOME} E também criei os parametros $P{DATA_INICIO} E ${DATA_FIM} no ireporter ele depois de muito quebrar a cabeça está funcionando do geito que quero, mas na minha aplicação ele da um erro e não mostra o relatório.

segue o código no ireport

where data_abastecimento between $P{DATA_INICIO} and $P{DATA_FIM} and
tipo_combustivel_veiculo = $P{NOME}

na minha aplicação fiz assim:

SimpleDateFormat formato = new SimpleDateFormat("dd/MM/yyyy");

        java.util.Date ini = null;
        java.util.Date fim = null;

        try {
            ini = formato.parse(Datainicio.getText());
            fim = formato.parse(Datafim.getText());
        } catch (Exception e) {
            e.printStackTrace();
        }

        Datainicio.setText("");
        Datafim.setText("");

        query = entityManager.createNamedQuery("GuiaAbastecimento.findBetweeninicio");
        query.setParameter("dataIni", ini);
        query.setParameter("dataFim", fim);

        java.util.Collection dadosResposta = query.getResultList();
        list.clear();
        list.addAll(dadosResposta);


        try {
            Connection con = (Connection) new ConexaoMsql().getConnection();
            HashMap parametros = new HashMap();
            parametros.put("COMBUSTIVEL" ,tf_Pesquisa.getText());
            parametros.put("DATA_INICIO", Datainicio.getText());
            parametros.put("DATA_FIM", Datafim.getText());
            JasperPrint jp = JasperFillManager.fillReport("C:/Siscor/Relatórios/RelGuiaAbastecimento.jasper", parametros, con);
            JasperViewer jrv = new JasperViewer(jp);
            JasperViewer.viewReport(jp, false);// fechar apenas o relatório


        } catch (Exception e) {
            e.printStackTrace();

        }

e o erro que gera ao tentar compilar o relatório pela minha aplicação segue abaixo:

log4j:WARN No appenders could be found for logger (net.sf.jasperreports.extensions.ExtensionsEnvironment).
log4j:WARN Please initialize the log4j system properly.
net.sf.jasperreports.engine.JRException: Incompatible java.lang.String value assigned to parameter DATA_INICIO in the RelGuiaAbastecimento dataset.
        at net.sf.jasperreports.engine.fill.JRFillDataset.setParameter(JRFillDataset.java:903)
        at net.sf.jasperreports.engine.fill.JRFillDataset.setFillParameterValues(JRFillDataset.java:642)
        at net.sf.jasperreports.engine.fill.JRFillDataset.setParameterValues(JRFillDataset.java:585)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.setParameters(JRBaseFiller.java:1280)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:901)
        at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:845)
        at net.sf.jasperreports.engine.fill.JRFiller.fillReport(JRFiller.java:58)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:417)
        at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:247)

bom já tentei colocar getValue e nada, não to conseguindo resolver esse problema e agradeço aos amigos em me auxiliar nesta resolução do problema.

fico no aguardo da ajuda dos amigos deste forum.

Criado 26 de junho de 2009
Ultima resposta 13 de mai. de 2011
Respostas 24
Participantes 5