Cálculos em IREPORT

Eaí GUJZeiros, beleza?

Então, estou com um baita de um problema que não consigo achar NADA a respeito, já li diversos tutoriais, inclusive do Carlos Paixão; e em NENHUM há uma explicação/exemplo para isso. Bem, preciso fazer uma condicional do tipo:

     if(debitoOuCredito.equals("C"){
          saldo += valor;
     } else {
          saldo -= valor;
     }

Sobre a condicional, deu beleza; pois usei o Operador ternário, e ficou algo do tipo:

    ($F{debitoCredito}.equals("C")) ? $V{saldo} += $F{valor} : $V{saldo} -= $F{valor}

Aparentemente tudo bem… mas não, não está nada bem, a condicional funciona, ele realmente verifica se é um C, e entra na primeira alternativa do Ternário. PORÉM, CONTUNDO; ele não faz a atribuição, diz que do lado esquerdo de uma Atribuição precisa-se de uma Variável… mas isso daí é uma variável.

Como faço a Atribuição???

Obrigado GUJ!

Por favor, ajudem-me a solucionar tal problema pois ajudará centenas de pessoas que também estão com isso… sei disso pois no google não tem nada disso e este será o primeiro.

A Exceção caso precise:

et.sf.jasperreports.engine.JRException: Errors were encountered when compiling report expressions class file: 1. The left-hand side of an assignment must be a variable                 value = (java.lang.String)(((java.lang.String)field_debOuCred.getValue()).equals("C") ? ((java.lang.Double)variable_saldo.getValue()) =  ((java.lang.Double)variable_saldo.getValue()) + ((java.lang.Double)field_valor.getValue()) : "Não tem Saldo");

O operador ternário não se aplica a qualquer if. As duas expressões se true ou false devem retornar um valor do mesmo tipo.

Em vez de ($F{debitoCredito}.equals("C")) ? $V{saldo} += $F{valor} : $V{saldo} -= $F{valor} deverá ser algo como $V{saldo}+= ($F{debitoCredito}.equals("C")) ? $F{valor} : -$F{valor}

[quote] 19/12/2011 09:01:13 Assunto: Re:Cálculos em IREPORT
O operador ternário não se aplica a qualquer if. As duas expressões se true ou false devem retornar um valor do mesmo tipo.

Em vez de
view plaincopy to clipboardprint?
($F{debitoCredito}.equals(“C”)) ? $V{saldo} += $F{valor} : $V{saldo} -= $F{valor}
deverá ser algo como
view plaincopy to clipboardprint?
$V{saldo}+= ($F{debitoCredito}.equals(“C”)) ? $F{valor} : -$F{valor}
[/quote]

Muito Obrigado, mas coincidência ou não, eu tinha acabado de testar isso e ainda sim caí no mesmo caso:

[code]

  1. The left-hand side of an assignment must be a variable
    value = (java.lang.Boolean)(((java.lang.Double)variable_saldo.getValue()) += (((java.lang.String)field_debOuCred.getValue()).equals(“C”)) ? ((java.lang.Double)field_valor.getValue()) : -((java.lang.Double)field_valor.getValue()) ); //$JR_EXPR_ID=20$[/code]

Aqui vai pedaços do meu XML:

Variável Saldo:

<variable name="saldo" class="java.lang.Double" calculation="Sum"> <initialValueExpression><![CDATA[new Double(0)]]></initialValueExpression> </variable>

Campo Valor:

<field name="valor" class="java.lang.Double"/>

TextField:

<textField> <reportElement x="466" y="43" width="86" height="20"/> <textElement/> <textFieldExpression class="java.lang.Boolean"><![CDATA[$V{saldo} += ($F{debOuCred}.equals("C")) ? $F{valor} : -$F{valor} ]]></textFieldExpression> </textField>

Variável debOuCred:

<field name="debOuCred" class="java.lang.String"/>

Muito Obrigado desde já.

Bom dia!

Se vc esta fazendo esses calculos dentro do Textfield Expression a sintaxe das operações matemáticas deve ser assim:

Onde vc declarou isso:

($F{debitoCredito}.equals("C")) ? $V{saldo} += $F{valor} : $V{saldo} -= $F{valor}    

substitua por isso:

($F{debitoCredito}.equals("C")) ? $V{saldo}.add($F{valor}) : $V{saldo}.subtract($F{valor})

Aparentemente o erro de atribuição de variáveis esta nos operadores que vc estava utilizando para os calculos, lembrando que no ireport:

Adição (+) = .add()
Subtração(-) = .subtract()
Multiplicação(*) = .multiply()
Divisão(/) = .divide()

Att.

Esta é sem dúvidas a minha dúvida: Como fazer cálculos no IReport.

Então, seguindo isso:

[quote]view plaincopy to clipboardprint?
($F{debitoCredito}.equals(“C”)) ? $V{saldo}.add($F{valor}) : $V{saldo}.subtract($F{valor})
[/quote]

Me deparei com isso:

1. The method add(Double) is undefined for the type Double                 value = (java.lang.Double)((((java.lang.String)field_debOuCred.getValue()).equals("C")) ? ((java.lang.Double)variable_saldo.getValue()).add(((java.lang.Double)field_valorVenda.getValue())) : ((java.lang.Double)variable_saldo.getValue()).subtract(((java.lang.Double)field_valorVenda.getValue()))); //$JR_EXPR_ID=21$

Este é o erro dito pelo compilador.