Tenho um relatório onde preciso agrupar as despesas por mês, em colunas criadas dinâmicamente.
Eu escolho o período de meses que filtra o relatório antes dele ser gerado.
Exemplo:
Escolho o período de março à julho.
Codigo Descricao MAR ABR MAI JUN JUL TOTAL
311.01 Despesa tipo 1 50 30 5,10 32 44 161,10
311.02 Despesa tipo 2 39 84 2 20 13 158
TOTAL 89 114 7,10 52 57 319,10
Aí depois peço de agosto à novembro.
Codigo Descricao AGO SET OUT NOV TOTAL
323.01 Despesa tipo 1 31 54 22 9 116
323.02 Despesa tipo 2 71 12 17 11 111
TOTAL 102 66 39 20 227
A minha dúvida é como agrupar por meses cada linha do relatório…
Acho que esse recurso de crosstabs é exatamente o que preciso, mas sempre que tento usar crosstabs recebo essa excessão na hora de gerar o relatório:
Exception in thread "main" java.lang.ClassCastException: cannot assign instance of net.sf.jasperreports.crosstabs.base.JRBaseCrosstab to field net.sf.jasperreports.engine.base.JRBaseLineBox.boxContainer of type net.sf.jasperreports.engine.JRBoxContainer in instance of net.sf.jasperreports.engine.base.JRBaseLineBox
se for por DataSource… vc tem que ver as variaveis estão iguais na entidade… se for por JDBC possivelmente vc ta recebendo um objeto e o Jasper espera por outro…
Porém, estou com problemas pra agrupar da forma correta.
Agrupando sem passar um comparator, ele não agrupa as colunas de data.
Com o comparator, ele agrupa, mas fica tudo na ordem errada.
o código do comparator:
Tô tentando de tudo… Mas ainda não consegui nada…
@Override
public int compare(Date o1, Date o2) {
GregorianCalendar gc1 = new GregorianCalendar();
GregorianCalendar gc2 = new GregorianCalendar();
gc1.setTime(o1);
gc2.setTime(o2);
Integer m1 = gc1.get(GregorianCalendar.MONTH);
Integer m2 = gc2.get(GregorianCalendar.MONTH);
Integer y1 = gc1.get(GregorianCalendar.YEAR);
Integer y2 = gc2.get(GregorianCalendar.YEAR);
return ((m1.compareTo(m2)) - (y1.compareTo(y2)));
// return m1.compareTo(m2);
// return y1.compareTo(y2);
}
Galera… Ainda tô com problema nisso…
Hoje fui verificar mais a fundo o relatório e vi que ele calcula todos os totais corretamente, mas exibe valores incorretos nas colunas.
Isso é por causa do Comparator.
Fui testar assim:
return ((m1.compareTo(m2)) - (y1.compareTo(y2)));
e os valores ficam nas colunas corretas, os totais ficam corretos, mas as colunas ficam ordenadas apenas por mês (Jan/12, Fev/12 … Nov/11, Dez/11, nessa ordem).
A ordenação incorreta e as as propriedades do column group data no relatório estão como na foto em anexo.