Jasper

20 respostas
igor_jua

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.

list.add(modeloRelatorio);
       Object ds1=new JRBeanCollectionDataSource(modeloSubRelatorio);

                InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);
               JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
                String subrel="/tabDanfe.jasper";
                Map map = new HashMap();

                map.put("pathSubSubRel",subrel);
                map.put("SubRelatorio", ds1);


                JasperPrint impressao = JasperFillManager.fillReport(relJasper, map, ds);

                    JasperViewer viewer = new JasperViewer(impressao, false);
                    viewer.setDefaultCloseOperation(JasperViewer.HIDE_ON_CLOSE);
                    viewer.setTitle("Faturamento");
                    viewer.setVisible(true);
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?

Agradeço a todos!

20 Respostas

igor_jua

Não há ninguém aqui que saiba???

javer

Acho bom você mandar também partes do .jrxml assim se pode comparar o que está sendo enviado com o que está no .japser.

Eu tenho vários subrelatórios funcionando perfeitamente e eu uso japser 2.0.4 ainda.

furutani

$P{} é parâmetro. Você tem de ter o parametro SubRelatorio corretamente cadastrado no relatório para usa-lo internamente.

igor_jua

E Assim ele está!!

RenataFA

Olá amigo! Esse arquivo que vc enviou está compilando normalmente. É outro arquivo que está com erro?

A

Provavelmente o arquivo tabDanfe.jrxml é o que está com erro. É ele que você deve enviar.

igor_jua

Perdão caros amigos!!
Pensei que havia enviado os 2!

RenataFA

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.

Confere ai!

igor_jua

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:

RenataFA

Exatamente a msma msg de erro?

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

igor_jua

Entendo!
Vou tentar ser o mais claro possivel!
:slight_smile:
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:

Parâmetro Expressão
SubRelatorio $P{SubRelatorio}

(Maiúsculo também)

mesmo assim a mesma exceção esta sendo gerada!

Consegui ser claro dessa vez?
:smiley:

RenataFA

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.

Grata,
Renata

igor_jua

Seguindo os novos arquivos…

list.add(modeloRelatorio);
       Object SubRelatorio=new JRBeanCollectionDataSource(modeloSubRelatorio);

                InputStream relJasper = getClass().getResourceAsStream(caminhoRelJasper);
               JRBeanCollectionDataSource ds = new JRBeanCollectionDataSource(list);
             String subrel="/tabDanfe.jasper";
                Map map = new HashMap();
             map.put("pathSubSubRel",subrel);
                map.put("SubRelatorio", SubRelatorio);

                 JasperPrint impressao = JasperFillManager.fillReport(relJasper, map, ds);
             
                    JasperViewer viewer = new JasperViewer(impressao, false);
                    viewer.setDefaultCloseOperation(JasperViewer.HIDE_ON_CLOSE);
                    viewer.setTitle("Faturamento");
                    viewer.setVisible(true);
igor_jua

o arquivo filho

RenataFA

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.

igor_jua

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…

RenataFA

Tem como vc passar a classe toda que faz a chamada pra eu tentar fazer aqui? Não to conseguindo achar onde vc tá errando…

igor_jua

Renata Mandei pro seu mail…

Ninguem mais arrisca uma dica?

igor_jua

Nada mesmo???

furutani

Posta o stacktrace completo aqui no GUJ.

Criado 2 de outubro de 2009
Ultima resposta 16 de out. de 2009
Respostas 20
Participantes 5