Ireport

Ola pessoal.

Estou fazendo um relatorio de controle de conta bancaria(o programa e bem simples). O relatorio e dividido em colunas. A primeira coluna e apenas um historico da movimentacao, a segunda coluna e terceira sao descritas como debito ou credito na conta, se o valor for credito, ou seja o valor foi depositado na conta, deve aparecer somente nessa coluna, se for debito o mesmo. e por ultimo a coluna saldo, q informa o saldo da conta creditando ou debitando os valores anteriores.

a minha duvida e como fazer para q o valor apareca somente em uma das colunas, se for debito aparecer somente na coluna debito e assim por diante, a informacao se o valor e debito ou credito esta na tabela do bando de dados como um inteiro. e como somar ou subtrair os valores na coluna saldo.

minha esperiencia com Ireport e de somente listagem, ate agora naum precisei fazer calculo no relatorio :wink:

BomDia.

Tentar criar um CustomDataSource implementado a interface JRDataSource (veja mais no demos do jasperReport que vem no fonte).
Criando um DataSource personalizado você pode trabalhar os dados que serão exibidos no seu relatório.
Algo do tipo:

[code]public class CustomDataSource implements JRDataSource{

private List<MyBean> myBean;
private int index = -1;

public CustomDataSource(List<MyBean> myBean){
	this.myBean = myBean;
}

public boolean next() throws JRException{
	index++;
	return (index < myBean.length());
}

public Object getFieldValue(JRField field) throws JRException
{
	Object value = null;
	String fieldName = field.getName();
	if ("movimentacao".equals(fieldName)){
		value = myBean.get(index).getMovimentacao();
	}
	else if ("debito ".equals(fieldName)){
		/* Quando não existir o respectivo valor retorne null 
		 * e trate no relarório com a opção no campo textField abilitando a opção (blank when null). 
		 * Assim ele não aparece no relatório */
		value = myBean.get(index).getDebito();
	}
	else if ("credito ".equals(fieldName)){
		value = myBean.get(index).getCredito();
	}
	else if ("saldo".equals(fieldName)){
		value = myBean.get(index).getSaldo();
		/*  Ou dependendo de como você implementou pode ser feito assim:
		 * 
		 *  value = (myBean.get(index).getDebito() - myBean.get(index).getCredito());
		 *  
		 *  */
	}
	return value;
}

}[/code]

Espero ter ajudado.

coloca os dois valores nas colunas e adiciona uma expressao ao imprimir…
quando a seu field que diz se é credito ou deb, dor deb exibe na ciluna debito
e na coluna credito faz o mesmo…

quando a somar, da uma procurada como funciona as vaiaveis no relatorio
vc vai ter que criar uma e colocar para incrementar em cada iteração do detail…