Ireport

2 respostas
M

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:

2 Respostas

mateusFreitas1

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:
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;
	}
}

Espero ter ajudado.

feltraco

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…

Criado 18 de março de 2008
Ultima resposta 20 de mar. de 2008
Respostas 2
Participantes 3