Bom dia.
Tenho um relatório no iReport, e no meu programinha java, ele envia 3 parâmetros: Data 1 e Data 2 (intervalo - obrigatórios), Representante de Vendas (opcional) e um outro que sempre vai o mesmo.
O detalhe é, que se eu deixo o campo que é opcional em branco, ele da aquela mensagem “o documento não possui páginas”.
No iReport coloquei assim meus parâmetros:
Pelo que eu vi em alguns posts aqui no Guj, tendo o “!” ele seria tipo um opcional, correto?
Ma snão dá certo!
Aguém sabe me dizer onde estou errando?
Desde já obrigada.
caso nao seja informado ai vc passa 1 = 1 ou CO.SalesRep_ID = CO.SalesRep_ID
catia.alessandra
Desulpa, mas não entendi… O que vem a ser o AND $P!{SQL} ???
eu coloco ele assim mesmo??? :oops:
rafaelviny
vc tem na aplicação algo como
parametro.put("SQL",valor);
vc poderia passar a condição correspondente ao AND CO.SalesRep_ID = $P!{SalesRep_ID} como uma sql que seria algo assim AND CO.SalesRep_ID =1
catia.alessandra
É que na verdade, não é de um aplicativo java que eu desenvolvi, é do ADempiere… aí não mexo no código rpa esse relatório… Eu só crio o rel no jasper e crio um processo no ADempiere pra chamar esse relatório, passando os mesmos parâmetros. Aí que complica. :oops:
rafaelviny
a explicação de cima funciona quando vc tem o codigo
esta aqui nao faço ideia
tente algo assim.
no seu parametro da para fazer um if
($P!{SalesRep_ID}?0:"1=1")
mas nao sei se vai funcionar.
o foda que se o relatorio estiver esperando um integer e receber uma string vai dar erro
Ae, no java, na passagem de parametros, passe a condicao inteira, e nao so o valor:
if(espeficiarVendedor()){param.put("SalesRep_ID"," AND salesrep_id = "+ID_DO_REPRESENTANTE);}
rafaelviny
kenneth
ela nao tem acesso ao fonte:(
tem que ser resolvido dentro do ireport
senao iria ser facil
PS: sua explicação é a mesma que a minha
catia.alessandra
[quote=rafaelviny]no seu parametro da para fazer um if
($P!{SalesRep_ID}?0:"1=1")
onde eu coloco isso? na query ou no parâmetr em si?
rafaelviny
no parametro, so que nao tenho certeza que funcione
catia.alessandra
Da essa mensagem:
org.xml.sax.SAXParseException: Element type "parameter" must be followed by either attribute specifications, ">" or "/>".
rafaelviny
foi bem o que falei, ele ta esperando um integer…
Catia, vou descer na cantina comer alguma coisa aqui na empresa
depois eu subo e tento te ajudar ok:?
rafaelviny
Catia…
como vc pega os valores da sua aplicação para mandar para o ireport?
PS: sinceramente não sei como te ajudar, mas vamos tentar
catia.alessandra
Ele tem uma tela, onde coloco a data/escolho representante.
Segue imagem em anexo.
Se eu escolho o representante, ele manda certinho. Só não funciona se eu deixar em branco. :?
rafaelviny
isso acontece pq a ultima condição não é resolvida…
não tem como vc criar uma interface entre essa aplicação e o ireport?
tipo uma classe DAO?
catia.alessandra
Teria, mas seria muito mais complicado…
Eu abri um tópico lá no fórum da Kenos, quem sabe eles entendam melhor, já que é um fórum do ADempiere.
Mas muito obrigada pela ajuda
rafaelviny
provavelmente eles consigam resolver…
aqui no forum é um pouco complicado já que nao conheço a app, não tem fontes nem erros
é o mesmo que tentar montar um quebra cabeça com os olhos vendados
qualquer coisa posta aqui no topico que volta e meia irei passar por aqui
catia.alessandra
Me sugeriram fazer algo semelhante ao que vc me sujeriu rafaelviny.
Criar uma variável SalesRep_for_query, e no valor padrão da expressão trazer o seguinte $P{SalesRep_ID}==null? " true": “SalesRep_ID=”.concat($P{SalesRep_ID}.toString())
bom, se eu deixo nulo, ele traz resultados. Mas agora o problema é quando seleciono algum dado. Como ele pede que eu retorne um boolean, quando seleciono um valor ele retorna um inteiro, dando erro. :?
kenneth
Enquanto eu estava digitando, voce respondeu
hehehehe
catia, uma ideia que surgiu agora mas NUNCA tentei.
seu parametros tem um tipo ne? ex: string, int, boolean, etc.
se não me engano no ireport mais novo tem o tipo Object, nao posso dar certeza pq nao estou com o ireport aqui
verifica isso para mim, se tem o tipo Object disponivel, dai vc trabalha todos os dados como objects para e faz o cast manual
catia.alessandra
Na verdade a solução foi bem simples, e foi resolvida na query:
Obrigado a todos que tentaram ajudar.
rafaelviny
que cabeçudo eu sou…
fiquei tão focado em fazer isso no parametro que esqueci da query :shock: