Pessoal estou fazendo um sistema para gerencia orçamentos na parte de relatórios vai ter os filtros tipo por data por vendedor orçamento fechado esse tipo de opções a minha dúvida é se eu monto a estrutura de pesquisa do sql para cada tipo de pesquisa e conforme as opções eu passo para o irreport ow eu eu gero os arquivos do relatorio para cada opões de pesquisa para gerar relatório…
Relatorios Ireport
10 Respostas
Oi Tiago, não sei se entendi a sua dúvida. Você quer permitir que seus parâmetros de filtro para gerar o relatório possam ser nulos?
Se for essa a dúvida, uma opção seria você enviar nulo para o parâmetro, e tratar na SQL.
[]'s
Oi Tiago, não sei se entendi a sua dúvida. Você quer permitir que seus parâmetros de filtro para gerar o relatório possam ser nulos?
Se for essa a dúvida, uma opção seria você enviar nulo para o parâmetro, e tratar na SQL.[]'s
não…
É assim eu vou fazer uma janela de relatorio, e nessa janela eu quero coloca a opção da pessoa gerar por ex. o relatório de orçamento de todos os vendedores ou de um especifico, para gerar os orçamentos de tal data a tal data esses tipo de coisa , conforme a pessoa vai usa o filtro a sintaxe do sql vai mudar, ae vem minha dúvida de como fazer esse tipo de filtros com o irreport se nele eu deixo ele para receber uma variavel e passo o codigo sql da minha aplicação pra ele.
Ah tah…entendi agora…vc quer gerar SQL dinamicamente…
Tenta dar uma olhada neste tipo de parâmetro $P!
“$P!{name_parameter} It is a special syntax used in the report SQL query to
indicate that the parameter does not have to be dealt
as a value to transfer to a Prepared Statement, but
that it represents a little piece of the query.”
Ao invés de valor, ele espera uma sentença SQL. Assim vc monta seu where conforme a opção que o usuário marcar…no caso de uma anulação…vc pode mandar “1 = 1”, ai não haverá erros na contrução da SQL.
[]'s
Ah tah…entendi agora…vc quer gerar SQL dinamicamente…
Tenta dar uma olhada neste tipo de parâmetro $P!“$P!{name_parameter} It is a special syntax used in the report SQL query to
indicate that the parameter does not have to be dealt
as a value to transfer to a Prepared Statement, but
that it represents a little piece of the query.”Ao invés de valor, ele espera uma sentença SQL. Assim vc monta seu where conforme a opção que o usuário marcar…no caso de uma anulação…vc pode mandar “1 = 1”, ai não haverá erros na contrução da SQL.
[]'s
no caso quando eu não quiser usar a clausula eu passo o valor para ela?
Isso, para anular passe algo que não interfira na montagem da SQL.
Por exemplo:
…
AND
$P!{variavel}
AND
…
Assim vai estar na SQL do ireport. Se vc quiser anular com “1 = 1”, a variavel é passada como uma String lá da aplicação. Ficaria assim:
…
AND
1 = 1
AND
…
Ou um código de restrição para a consulta:
“TB_NOTA_CAB.COD_NOTA_CAB = TB_NOTA_ITEM.COD_NOTA_CAB”
Ficaria assim:
…
AND
TB_NOTA_CAB.COD_NOTA_CAB = TB_NOTA_ITEM.COD_NOTA_CAB
AND
…
Essa substituição o irepot faz, diferente de um parametro ($P{}) normal que somente espera um valor.
Qualquer bloco SQL você pode enviar como String para esse parâmetro ($P!{}), ai fica conforme a regra que está utilizando.
[]'s
Neste caso eu acho melhor adquirir os dados no java e não usar o esquema de consultas do iReport. Use o iReport apenas para criar o layout do relatório. Então você pode usar a classe JRBeanCollectionDataSource para passar uma Collection dos resultados da sua consulta.
Faz uma busca no forum ou no google que vc acha um monte de tutorial.
Até.
Neste caso eu acho melhor adquirir os dados no java e não usar o esquema de consultas do iReport. Use o iReport apenas para criar o layout do relatório. Então você pode usar a classe JRBeanCollectionDataSource para passar uma Collection dos resultados da sua consulta.Faz uma busca no forum ou no google que vc acha um monte de tutorial.
Até.
Concordo. Se quiser usar este exemplo q mostra como setar o classpath com os arquivo .class dos seus javabeans(olhar ultimo post) ou esse q explica melhor a ideia q o nosso colega postou logo acima.
segui esse tutorial so que na classe inicio ta dando erro na linha
http://www.furutani.eti.br:8080/MostrarArtigo.action?codigo=5
impressao = JasperFillManager.fillReport(arquivoJasper, parametros, ds);
segui esse tutorial so que na classe inicio ta dando erro na linha
http://www.furutani.eti.br:8080/MostrarArtigo.action?codigo=5
impressao = JasperFillManager.fillReport(arquivoJasper, parametros, ds);
Qual erro ocorre? deu uma olhada nos tutoriais que te passei acima?
segui esse tutorial so que na classe inicio ta dando erro na linha
http://www.furutani.eti.br:8080/MostrarArtigo.action?codigo=5
impressao = JasperFillManager.fillReport(arquivoJasper, parametros, ds);Qual erro ocorre? deu uma olhada nos tutoriais que te passei acima?
net.sf.jasperreports.engine.JRException: Error loading object from InputStream
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:196)
at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:580)
at exemplo.Inicio.exibirRelatorio(Inicio.java:44)
at exemplo.Inicio.main(Inicio.java:96)
Caused by: java.io.InvalidClassException: net.sf.jasperreports.engine.base.JRBaseReport; local class incompatible: stream classdesc serialVersionUID = 10101, local class serialVersionUID = 10200
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:562)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at net.sf.jasperreports.engine.util.JRLoader.loadObject(JRLoader.java:192)
... 3 more