Então está correto, afinal é assim que o IN
funciona. Quando você fala me de todos os registros que um atributo consta nesta lista vazia é igual a não me retorne nada… O contrário seria utilizar um NOT IN
. Este é o comportamento esperado.
Agora, já que você está passando tudo já concatenado em uma String só separado por vírgula, você pode mudar a String deste parâmetro no código antes de enviar para o Report?
Você poderia verificar se não tem nenhum código para ir dentro do IN
e então enviar um parâmetro vazio, e se tiver algum código pra enviar você envia a cláusula IN
inteira e utiliza o texto puro do parâmetro, com a sintaxe que você já utilizou anteriormente $P!{parametro}
com o sinal !
.
Então se tiver códigos para a lista você manda o parâmetro:
" and b8_produto in (seus_codigos_separados_por_virgula) "
E se não tiver você manda uma String vazia.
daniel eu nao tenho codigo que chama o relatorio, a chamada dele é so configurada no configurador do prohteus, so a chamada no menu, e mais nada, quando faço da maneira q vc me passou ai, da certo, ele só nao da certo quando eu deixo o parametro vazio, nao estou achando uma maneira de conseguir evitar esse erro… te colocar os exemplos aqui pra vc entender melhor.
quando coloco assim and (b8_produto in ($P!{iest001-01}) or $P{iest001-01} is null)
e informo os produtos funciona perfeito. mas se eu deixar vazio o parametro ele da erro.
quando coloco assim and $P{iest001-01} is null e deixo sem informacao no parametro ele funciona normal. nao da erro nenhum
quando coloco assim and b8_produto in ($P!{iest001-01}) e informo parametro tb funciona normal, mas se eu nao coloco parametro ja da erro tambem.
ok, obrigado
Não seria pelo retorno quando não tem códigos?
O que ele retorna quando não tem códigos, null ou uma string vazia?
nulo ou vazio, de toda maneira da o erro , mas aparentemente é nulo, pq quando uso so ele com nulo traz certo
$P{iest001-01} is null , ele traz todos os produtos, usando so ele.
Então você poderia criar outro parâmetro que referencia o primeiro verificando se é null no seu Default Value Expression
, e colocar esse novo parâmetro criado com o texto puro substituindo a cláusula IN diretamente na query.
Por exemplo, no novo parâmetro o defaultValueExpression seria:
$P{iest001-01} != null ? " and b8_produto in (" + $P{iest001-01} + ") " : ""
E então na Query colocar o Texto do novo parâmetro:
substituindo isto:
(b8_produto in ($P!{iest001-01}) or $P{iest001-01} is null)
por isso:
$P!{CLAUSULA_IN}
DANIEL estamos quase la, rsss, aqui quando faço no ireport da certo, quando chamo pelo protheus da esse erro, mesmo passando o parametro sem nada
Estranho esse erro aí… Pode ser algum campo faltando aspas, um printWhenExpression que não retorna um boolean ou até a versão que você está utilizando…
Tenta colocar um toString no parâmetro ou algo que vc tenha alterado:
$P{param}.toString()
Cara, teria que pesquisar o que é este erro aí e ir tentando resolver, pode ser pela versão que você está usando ou algo do tipo… Já que você disse que está compilando normal pelo JasperSoft Studio.
Ja fiz muitos relatórios dessa forma. Seguinte, cria um parâmetro (com o nome Where por exemplo), desmarque a opção is for prompting e põe no default Value Expression assim:
$P{iest001-01} == null || $P{iest001-01}.trim().length == 0? "": " AND b8_produto IN ("+$P{iest001-01}") "
E na sql coloque assim:
… $P!{Where} …
Andrauss bom dia, do jeito q vc passou nao deu certo nao, tem algum erro de sintaxe ai, mas ate ja deu certo da maneira que o daniel me passou ai, o problema agora é na hora de executar do protheus, hora que chama da os erros q passei ai acima, se puder me ajudar agradeço, obrigado. a maneira q deu certo que o daniel passou foi essa.
$P{iest001-01} != null ? " and b8_produto in (" + $P{iest001-01} + ") " : “”
andrauss corrigi os erros de sintaxe que avia no seu codigo, mas mesmo assim nao deu certo, deu o mesmo erro.
pessoal descobri uma coisa, nao tem nada haver esse erro ai, tirei todos os parametros do relatorio, e continua o mesmo erro. nem usando parametro eu to mais, vejam ai
muito estranho nao to usando mais parametro nenhum, nem na query, e esta dando esse erro, e outros relatorios nao dao erro.
Me parece que deve haver algum parâmetro do tipo: com.jaspersoft.jasperserver.api.metadata.user.domain.client.UserImpl, remova esse parâmetro e tente novamente
O sistema lê o aqrquivo em que formato? .jasper ou .jrxml? Se você tiver que compilar (.jasper) o .jar do Jasper com a clesse com.jaspersoft.jasperserver.api.metadata.user.domain.client.UserImpl deve estar presente no seu classpath. Caso o sistema leia o arquivo no formato .jrxml você provavelmente está usando uma versão do jasper incompatível com a do sistema.