Filtro com clausula In

176 views
Skip to first unread message

Robson

unread,
Mar 2, 2015, 2:32:34 PM3/2/15
to jasperreports-...@googlegroups.com
Prezados boa tarde

Estou utilizando uma Query Nativa, minha consulta necessita que seja passado uma lista , lista dos Id´s ( campos do tipo int ) das Notas Fiscais o comando abaixo foi o que eu coloquei na consulta do relatório contudo o parametro passado não esta sendo aceito como uma lista e vem sempre o primeiro registro

Select *
From Notas AS N
Where
  N.id_notafiscal IN ($P!{Plista_notas})  

Ou seja se eu informo 30,31,32,33,34,35  vem apenas os dados do Id 30, tentei passar desta forma '30','31','32','33','34' o que também não resultou em nada alem do que na construção da query o editor indica que existe um erro que só sai se eu colocar aspas simples dentro do parentesis N.id_notafiscal IN ('$P!{Plista_notas}')   
contudo desta forma o que ocorre é outro erro que indica que não pode converter o valor String para Inteiro que é o tipo de dado do campo

Alguem sabe como resolver esta bronca?
  

Denis Alves

unread,
Mar 2, 2015, 5:50:30 PM3/2/15
to jasperreports-...@googlegroups.com

Ola poderia explicar mais detalhadamente o cenario, Esses ids são todos notas fiscais ? Ou itens de uma nota fiscal ?

--
Você recebeu essa mensagem porque está inscrito no grupo "JasperReports / iReport Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para jasperreports-irepor...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Robson

unread,
Mar 2, 2015, 7:52:22 PM3/2/15
to jasperreports-...@googlegroups.com
Olá Denis boa noite!

São os id´s das notas, o cenário é o seguinte, é uma rotina para emissão de notas em lote, o usuário processa dados de contratos com vencimentos em determinada data, o processamento cria as notas, o financeiro etc... e ao final deste processo a rotina tem uma lista de todos os id´s das notas que foram geradas sendo necessário agora gerar os pdf´s e "imprimi-los" ou digamos apresentar estes dados na tela.

a consulta feita diretamento no banco teria a clausula where desta forma
select * from 
Select *
From Notas AS N
Where N.id_notafiscal IN (33,34,35,36,37,38,39,40)
 

Denis Alves

unread,
Mar 3, 2015, 6:58:02 AM3/3/15
to jasperreports-...@googlegroups.com

Bom dia

 

A clasula IN necessita de um List, ai pergunto seu Parametro é um List?  Se for acredito que  esteja esperando um Long ou String se for alpha numerico. Poderia confirmar o tipo do parametro e o tipo do dado que esta informando para ele ?

--

Robson

unread,
Mar 3, 2015, 8:37:31 AM3/3/15
to jasperreports-...@googlegroups.com
Olá bom dia!

Então meu caro, a consulta é em SQL Nativo, então a lista que eu vou passar é uma lista identica a como se eu estivesse na ferramenta de administração do banco ou seja

a clausula where terá a seguinte "lista" como exemplo

Where  N.id_notafiscal IN (  10, 11, 12, 13 )

e neste caso o parâmetro que será passado será uma String

Denis Alves

unread,
Mar 3, 2015, 8:56:40 AM3/3/15
to jasperreports-...@googlegroups.com

Então vou assumir que o seu parametro dentro do jasper é do tipo String.

 

No caso  do exemplo que nos mostra a baixo, esta informando inteiros no argumento e não string, numeros sem aspas são inteiros certo ?.

 

|Where  N.id_notafiscal IN (  10, 11, 12, 13 )| != |Where  N.id_notafiscal IN (  ‘10’, ‘11’, ‘12’, ‘13 )|

 

 

Então se usa o console para informar dentro do jasper quando usa o parametro ele converte para String. Tem de dar uma olhada na sua entrada de dados, como ela esta chegando para sua query. Jasper não emite nem um erro ?

 

Vale lembrar que quando usa a exclamação assim ($P!{Plista_notas} em um parametro esta informando uma pesquisa dinamica, ou seja ele so vai realizar a validação por no final. Acredito que neste seu caso não seja necessario;

 

 

From: jasperreports-...@googlegroups.com [mailto:jasperreports-...@googlegroups.com] On Behalf Of Robson
Sent: terça-feira, 3 de março de 2015 10:38
To: jasperreports-...@googlegroups.com
Subject: Re: [JasperReports / iReport Brasil] Filtro com clausula In

 

Olá bom dia!

--

Robson

unread,
Mar 3, 2015, 9:44:06 AM3/3/15
to jasperreports-...@googlegroups.com
Olá bom dia!

Então são inteiros mesmo porque tenho que passar o parâmetro da mesma forma como eu executaria no banco, isto porque minha consulta é nativa ou seja SQL Puro, mais eu consegui resolver , segue as imagens em anexo.

Como eu estou usando no parâmetro a exclamação isto quer dizer que em run-time o jasper irá concatenar o conteúdo passado com a consulta então eu devo na minha aplicação passar para o jasper o parâmetro desta forma, exemplificando se eu processei as notas de id´s 30,31,32,33 e 34 que eu devo criar uma variável e concatenar o seguinte conteudo: 
var1 = "Where N.id_notafiscal IN (30,31,32,33,34) And N.nf_dtcancel Is Null"

esta var1 que será passada para o meu parâmetro Plista_notas o lance é no meu aplicativo eu montar a string que irá na var1 

Funcionou blz

Parametros.jpg
SQL Query.jpg

Denis Alves

unread,
Mar 3, 2015, 9:50:26 AM3/3/15
to jasperreports-...@googlegroups.com


Sent: terça-feira, 3 de março de 2015 11:44
To: jasperreports-...@googlegroups.com

--

Reply all
Reply to author
Forward
0 new messages