Calculos Matematicos, Condicionais e Lógicos no IReport

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.

http://jasperforge.org/plugins/espforum/view.php?group_id=83&forumid=101&topicid=19988

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

Abraço!

leoramos, Vlw cara.

     Voltarei a prancheta e vou estudar mais...

leoramos, Vlw cara.

Voltarei a prancheta e vou estudar mais…