Boa tarde a Todos!
Sou iniciante com java, anteriormente "brincava" com .net estou tentando migrar, por isso, por favor, me desculpem caso ocorran deslizes.
Pesquisei em alguns foruns e não consegui assimilar, como fazer calculos (operações básicas, condicionais, lógicas e agregadas) no IReport. Tentei fazer uma simples divisão através de uma variavel para um field não relacionado ao banco, pois estou passando RESULTSET atraves do JRResultSetDataSource, e deu erro.
Tentei dentro de uma variavel e depois referenciei a um TextFiel, das seguintes formas:
$F{EST_FINAL}).divide($F{EST_FINAL}) //Primeira tentativa
divide($F{EST_FINAL},$F{EST_FINAL})) //Segunda tentativa
Tenho o retorno abaixo no momento da compilação:
Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@fec89 net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. Syntax error on token ")", delete this token value = ((java.math.BigDecimal)field_EST_FINAL.getValue())).divide(((java.math.BigDecimal)field_EST_FINAL.getValue())); //$JR_EXPR_ID=8$ ^ 2. Syntax error on token ")", delete this token value = ((java.math.BigDecimal)field_EST_FINAL.getOldValue())).divide(((java.math.BigDecimal)field_EST_FINAL.getOldValue())); //$JR_EXPR_ID=8$ ^ 3. Syntax error on token ")", delete this token value = ((java.math.BigDecimal)field_EST_FINAL.getValue())).divide(((java.math.BigDecimal)field_EST_FINAL.getValue())); //$JR_EXPR_ID=8$ ^ 3 errors at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:204) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:512) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1452) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2032)
Compilation running time: 424
Preciso talvez um “passo-a-passo” como utilizar operadores de cálculo, onde referencia-los e qual sitaxe para realiza-los no IReport, que alias está me dando uma canseira danada. Eu utilizava o ReportViewer, acho que acabei viciando em algumas funcionalidades.
Obrigado.
bezier curve, obrigado pela resposta.
Mas fiz conforme a orientação do link e não deu certo. Criei uma variavel e em sua propriedade VARIEBLE EXPRESSION coloquei o seguinte código:
new java.math.BigDecimal($F{EST_FINAL}.devide($F{EST_FINAL}.doubleValue()))
No momento da compilação o retorno foi esse:
Compiling to file... C:\Users\Controladoria 1\Documents\NetBeansProjects\Controladoria\src\Relatorios\Estoque\EstNegativo.jasper
Errors compiling C:\Users\Controladoria 1\Documents\NetBeansProjects\Controladoria\src\Relatorios\Estoque\EstNegativo.jasper!
Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@103fa67 net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. The method devide(double) is undefined for the type BigDecimal value = new java.math.BigDecimal(((java.math.BigDecimal)field_EST_FINAL.getValue()).devide(((java.math.BigDecimal)field_EST_FINAL.getValue()).doubleValue())); //$JR_EXPR_ID=10$ <----> 2. The method devide(double) is undefined for the type BigDecimal value = new java.math.BigDecimal(((java.math.BigDecimal)field_EST_FINAL.getOldValue()).devide(((java.math.BigDecimal)field_EST_FINAL.getOldValue()).doubleValue())); //$JR_EXPR_ID=10$ <----> 3. The method devide(double) is undefined for the type BigDecimal value = new java.math.BigDecimal(((java.math.BigDecimal)field_EST_FINAL.getValue()).devide(((java.math.BigDecimal)field_EST_FINAL.getValue()).doubleValue())); //$JR_EXPR_ID=10$ <----> 3 errors at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:204) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:512) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1452) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2032)
Compilation running time: 332
Não consigo entender, como é dificil fazer algo que parece ser simples. Por favor, caso alguém tenha algum material que possa compartilhar, ficarei grato.
Obrigado,
Tem um erro de digitação ali… é “divide” e tá “devide”.
=)
leoramos, Obrigado pela observação.
Logo que postei acabei percebendo e corrigi no código mas o erro é o mesmo, não deu certo mesmo com a grafia correta. Mesmo assim valeu, o ficando maluco o dia todo e não consegui.
Ah, tem um detalhe: tu tá fazendo a divisão por um double. O método divide recebe é um BigDecimal, cara. Não vai funcionar porquê esse método não existe com essa assinatura.
leoramos, valeu pela dica.
Mudei para BigDecimal, mas não funcionou do mesmo jeito.
Criei uma nova variavel, e nas propriedades fiz da seguinte forma:
[code]Nome: Variavel1
Varieble Class: java.math.BigDecimal
Reset type: Report
Variable Expression: new java.math.BigDecimal($F{EST_FINAL}.devide($F{EST_FINAL}.BigDecimal()))[/code]
Também tentei assim:
[code]Nome: Variavel1
Varieble Class: java.math.BigDecimal
Reset type: Report
Variable Expression: new java.math.BigDecimal($F{EST_FINAL}.devide($F{EST_FINAL}))[/code]
Também tentei assim:
[code]Nome: Variavel1
Varieble Class: java.math.BigDecimal
Reset type: Report
Variable Expression: $F{EST_FINAL}.devide($F{EST_FINAL})[/code]
O campo (field) $F{EST_FINAL} esta definido como BigDecimal. E sempre traz o mesmo tipo de erro: The method BigDecimal() is undefined for the type BigDecimal
Quando tento compilar o relatorio aparece o seguinte erro:
[code]/* Compiling to file... C:\Users\Controladoria 1\Documents\NetBeansProjects\Controladoria\src\Relatorios\Estoque\EstNegativo.jasper
Errors compiling C:\Users\Controladoria 1\Documents\NetBeansProjects\Controladoria\src\Relatorios\Estoque\EstNegativo.jasper!
Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@15169a9 net.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. The method BigDecimal() is undefined for the type BigDecimal value = new java.math.BigDecimal(((java.math.BigDecimal)field_EST_FINAL.getValue()).devide(((java.math.BigDecimal)field_EST_FINAL.getValue()).BigDecimal())); //$JR_EXPR_ID=10$ <--------> 2. The method BigDecimal() is undefined for the type BigDecimal value = new java.math.BigDecimal(((java.math.BigDecimal)field_EST_FINAL.getOldValue()).devide(((java.math.BigDecimal)field_EST_FINAL.getOldValue()).BigDecimal())); //$JR_EXPR_ID=10$ <--------> 3. The method BigDecimal() is undefined for the type BigDecimal value = new java.math.BigDecimal(((java.math.BigDecimal)field_EST_FINAL.getValue()).devide(((java.math.BigDecimal)field_EST_FINAL.getValue()).BigDecimal())); //$JR_EXPR_ID=10$ <--------> 3 errors at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:204) at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:512) at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1452) at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2032)
Compilation running time: 12.944 */ [/code]
Obrigado.
Consegui compilar o reltório da seguinte forma:
[code]$F{EST_FINAL}.divide($F{EST_FINAL})[/code]
Eu estava cometendo um erro de gráfica colocando um "(" a mais no código e postei o correto. Desculpe.
Mas quando coloco o relatório para rodar dá erro em tempo de execução:
[code]Exception in thread "main" net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression :
Source text : $F{EST_FINAL}.divide($F{EST_FINAL})
at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:267)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluateEstimated(JRCalculator.java:582)
at net.sf.jasperreports.engine.fill.JRCalculator.estimateVariables(JRCalculator.java:181)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1220)
at net.sf.jasperreports.engine.fill.JRFillDataset.next(JRFillDataset.java:1194)
at net.sf.jasperreports.engine.fill.JRBaseFiller.next(JRBaseFiller.java:1544)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:142)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841)
at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)
at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)
at net.sf.jasperreports.engine.JasperFillManager.fillToFile(JasperFillManager.java:542)
at net.sf.jasperreports.engine.JasperFillManager.fillToFile(JasperFillManager.java:522)
at net.sf.jasperreports.engine.JasperFillManager.fillReportToFile(JasperFillManager.java:888)
at Relatorios.GerarRelatorio.EstoqueRel(GerarRelatorio.java:116)
at controladoria.Controladoria.main(Controladoria.java:26)
Caused by: java.lang.ArithmeticException: Division undefined
at java.math.BigDecimal.divide(BigDecimal.java:1586)
at null_1347539273730_589324.evaluateEstimated(null_1347539273730_589324:469)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluateEstimated(JREvaluator.java:254)
… 15 more
Java Result: 1
[/code]
O teu problema não é o iReport mesmo, mestre, é no código Java mesmo.
Oh:
http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=74249
Tu tá com alguma divisão por zero ou coisa do gênero aí. Coloca um operador ternário aí que teu problema se resolve 
Abraço!
leoramos, Vlw cara.
Voltarei a prancheta e vou estudar mais...
leoramos, Vlw cara.
Voltarei a prancheta e vou estudar mais…