[Resolvido] Parâmetro opcional no iReport

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:

[quote]AND CO.DATEPROMISED BETWEEN $P{DatePromised1} AND $P{DatePromised2}
AND CO.ISSOTRX = $P{IsSOTrx}
AND CO.SalesRep_ID = $P!{SalesRep_ID}[/quote]

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. :wink:

pelo que me lembro o ! é usado quando é passada uma SQL como parametro

Mas mesmo tirando o “!” não funciona…
E se eu escolher algum representante, que o campo não fique mais vazio, da certo!

tenta passar essa ultima condição (AND CO.SalesRep_ID = algumValor) como parametro

$P!SQL

EX:

AND CO.DATEPROMISED BETWEEN $P{DatePromised1} AND $P{DatePromised2}
AND CO.ISSOTRX = $P{IsSOTrx}
AND $P!{SQL}

caso nao seja informado ai vc passa 1 = 1 ou CO.SalesRep_ID = CO.SalesRep_ID

Desulpa, mas não entendi… O que vem a ser o AND $P!{SQL} ???
eu coloco ele assim mesmo??? :oops:

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

É 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:

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 :frowning:

Ola!

Dentro do arquivo do seu iReport, voce tem

AND CO.DATEPROMISED BETWEEN $P{DatePromised1} AND $P{DatePromised2}
AND CO.ISSOTRX = $P{IsSOTrx}
AND CO.SalesRep_ID = $P!{SalesRep_ID}

Tente fazer assim:

AND CO.DATEPROMISED BETWEEN $P{DatePromised1} AND $P{DatePromised2}
AND CO.ISSOTRX = $P{IsSOTrx}
$P!{SalesRep_ID}

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);
  }  

:smiley:

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 :stuck_out_tongue:

[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?

no parametro, so que nao tenho certeza que funcione

Da essa mensagem:

org.xml.sax.SAXParseException: Element type "parameter" must be followed by either attribute specifications, ">" or "/>".

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:?

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

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. :?

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?

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 :wink:

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

:slight_smile:

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. :?