Galera, estou fazendo um sub relatorio em um Relatorio só que ele ta gerando a seguinte exceção:
net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression : Source text : $P{SubRelatorio}
Através desse parametro eu passo um JRBeanCollectionDataSource onde uma variavel do tipo Object recebe esse objeto (Este objeto que eu estou passando contem os dados que devem popular o sub relatorio)
os meus códigos são os seguites.
Anteriormente eu estava setando o JRBeanCollectionDataSource do SubRelatorio dentro de um Object que ficava junto com os elementos do Relatorio Principal, mas também não estava dando certo.
Gera o mesmo erro só que ao invés de P{SubRelatorio}
era F{SubRelatorio}
PS: não são os dados do SubRel incorretos, pois se eu mandar ele executar somente o subrel ele executa perfeitamente.
:
iai? o que fazer?
Vai no Danfe6.jrxml. Então vai nas propriedades do subrelatorio. Na aba “Subreport (Other)”, onde vc passa os parâmetros para o subrelatorio. Perceba que vc está passando o valor de $P{SubRelatorio} para um parâmetro que deve existir no subrelatório chamado subRelatorio.
Mas ai vc vai no tabDanfe.jrxml e olha os parâmetros que vc criou pra nele. Não tem nenhum subRelatorio, só tem um SubRelatorio (presta atenção na primeira letra!!!).
Provavelmente é esse o problema, qdo vc chama o subrelatorio sozinho funciona (pq não precisa passar por isso ai). Qdo vc chama pelo relatório principal dá erro pq ele não encontra o parâmetro pra passar o valor.
Renata eu relmente não tinha atentado para este detalhe, então fui ao tabDanfe.jrxml e modifiquei o nome do parâmetro para o nome subRelatorio.
Mesmo assim o erro ainda continua.
:shock:
É meio complicado aqui pra nós pq não temos como executar seu jrxml, e o erro dá durante a execução pelo que entendi.
To vendo aqui que qdo vc chama o relatório, vc chama passando a variável ds1 pra SubRelatorio (com S e não s). No final das contas, qual vc deixou? O SubRelatorio ou subRelatorio? (com maiúscula ou minúscula?) Pq se vc deixou com minúscula, tem que mudar ai na passagem tb.
Entendo!
Vou tentar ser o mais claro possivel!
Seguinte:
Nas propriedades do subRel na tab other eu não modifiquei nada. Eu apenas fui ao arquivo tabDanfe.jrxml(Cujo o qual é o meu SUB-RELATORIO) e modifiquei o nome do parametro que era “SubRelatorio” (Maiúsculo)para “subRelatorio”(minúsculo).
Desta maneira o nome do parametro fica igual ao que eu estou passando do relatorio principal para o sub relatorio.
Feito isso tentei executar, mas gerou o mesmo erro.
Tendo isso em vista tentei deixar o nome do parametro do relatorio principal igual ao do relatorio filho.
Por exemplo:
Eu anteriormente tinha o Seguinte nas propriedades do meu sub Relatorio:
Parâmetro Expressão
subRelatorio $P{SubRelatorio}
onde $P{SubRelatorio} é o nome do Parametro que eu estou recebendo os dados do meu subRel no relatorio pai.
você me atentou para o meu erro, pois no meu relatorio filho eu não tinha um parametro com o nome de “subRelatorio” e sim “SubRelatorio”. Como expliquei anteriormente efetuei a correção, mas o erro ainda persistiu. Então eu tentei da seguinte maneira:
No meu relatorio filho eu retornei a modificar o nome do parametro para “SubRelatorio”(Maiúsculo), e nas propriedades do relatorio filho no relatorio pai eu deixei assim:
Bom, então agora está em todos os lugares como “SubRelatorio”, né?
Deixa assim, todos de um mesmo jeito.
Não estou conseguindo entender… por favor, manda o trecho todo onde vc faz a chamada do relatório, pra eu simular aqui, ver se consigo causar o erro aqui no meu PC.
Ok… por favor, quem são suas variáveis list, modeloRelatorio e modeloSubRelatorio?
Não entendi pq pra criar o JRBeanCollectionDataSource do sub-relatório vc apenas usa o modeloSubRelatorio, mas pra criar o JRBeanCollectionDataSource do relatório principal vc adiciona o modeloRelatorio dentro do tal list e depois passa ele pro JRBeanCollectionDataSource.
Então Renata…
a variavel list é um ArrayList comum.
a modeloRelatorio, é um objeto que contem as variaveis com os respectivos nomes dos fields do relatorio principal.
a modeloSubRelatorio é a mesma coisa só que para o Sub Relatorio.
Em relação ao JRBeanCollectionDataSource eu o criava e o setava em um objeto do tipo object dentro do modelo da classe do rel principal…mas gera o tal erro…então resolvi fazer separado…
Como já falei anteriormente, não conheço muito bem a ferramenta…então não sei nem se minha lógica esta correta…