JasperReports - Agrupamento não funciona

Olá a todos do GUJ.

Estou enfrentando sérios problemas com o iReports que não realiza o agrupamento de dados, mesmo eu setando aparentemente tudo certo no design.
Eu achei que o Bean que eu criei para o report estava com algum tipo de problema, mas notei que o comportamento se repete mesmo quando eu pego os dados diretamente do banco.

Criei um group no iReport e informei que a expressão do grupo era o campo “codigo_bordero”, ou seja, quando este dado mudasse ele deveria criar outro agrupamento na próxima página, já que marquei como true a opção “Iniciar em nova página”.

Ocorre que o campo que coloquei como expressão do do Header do grupo nunca tem seu valor alterado. E notei também que ele pega o último valor que vem ordenado no banco e o usa todas as vezes.

Como teste, pedi para ele imprimir o valor do bordero dentro do HeaderGroup e fora também (na área de details). O valor que vem impresso dentro da band Detail vem ordenado e mudando corretamente, ao passo que o valor dentro do group que é o mesmo simplesmente nunca se altera!

Segue o fonte do meu report:

[code]<?xml version="1.0" encoding="UTF-8" ?>






<queryString><![CDATA[SELECT 
codigo_bordero,
razao_social,
rua,
numero,
complemento,
interlocutor_1,
interlocutor_2,
interlocutor_3,
num_enc_cli
	FROM
		prepax_alelo
			WHERE
				codigo_bordero is not null
					ORDER BY codigo_bordero,num_enc_cli]]></queryString>

<field name="codigo_bordero" class="java.lang.String"/>
<field name="razao_social" class="java.lang.String"/>
<field name="rua" class="java.lang.String"/>
<field name="numero" class="java.lang.String"/>
<field name="complemento" class="java.lang.String"/>
<field name="interlocutor_1" class="java.lang.String"/>
<field name="interlocutor_2" class="java.lang.String"/>
<field name="interlocutor_3" class="java.lang.String"/>
<field name="num_enc_cli" class="java.lang.String"/>


	<group  name="bordero" isStartNewPage="true" >
		<groupExpression><![CDATA[$F{codigo_bordero}]]></groupExpression>
		<groupHeader>
		<band height="75"  isSplitAllowed="false" >
			<line direction="TopDown">
				<reportElement
					x="1"
					y="63"
					width="567"
					height="1"
					forecolor="#000000"
					backcolor="#000000"
					key="line-3"/>
				<graphicElement stretchType="NoStretch">
				<pen lineWidth="1.5" lineStyle="Solid"/>
[/code]

Em anexo segue como ele gera o PDF.

Note que dentro do group ele imprime o valor “9956857500”, que é exatamente o último valor que o banco traz na ordenação. Ao passo que fora do group, na band Detail, o report obedece a ordenação da query corretamente.

O que pode estar acontecendo?

Obrigado!

No meu relatorio usei apenas subrelatorios mesmo sendo um relatorio complexo… deixei group de lado… Mas o jeito certo e que minimiza o acesso ao banco é por group mesmo.

vc leu o artigo http://www.devmedia.com.br/java-reporting-com-jasperreports-e-ireport-open-source-parte-iii/1718 ?

Não li mas lerei! Em seguida posto o resultado!

Muito obrigado pela resposta.

Então,

eu segui exatamente o que diz o tutorial no DevMedia. O que noto é que na banda “detail” imprime apenas uma linha por vez, embora a query traga mais de 2000 linhas.

Não sei o que pode estar ocorrendo. Achei que os valores dinâmicos no PageHeader pudesse estar interferindo nisso e deixei apenas textos estáticos, deixando os textos dinamicos trazidos pela query apenas no detail. Mesma coisa. =/

Sabe o que pode estar ocorrendo?

Obrigado.

Fiz um teste aqui e o resultado está no mínimo estranho!

Quando eu rodo o iReport direto de minha área de trabalho (sem fazer o deploy do report para meu projeto no JBoss) ele funciona perfeito. A diferença que quando testo direto no iReport eu conecto diretamente no banco.

Porém o Bean que está sendo usado no projeto faz a mesma query (usando o DAO da entidade) e traz exatamente o mesmo resultado, do mesmo tipo (apenas dados do tipo String são retornados) e com a mesma ordenação. Fiz um sysout para confirmar e no terminal tanto a query quando os dados da mesma aparecem perfeitamente.

No report qualquer dado da query que eu coloque em qualquer área que não seja o group (pageHeader, Detail, Tittle, etc) aparece sem problemas. O causo é que o group não aparece quando da geração do report. Não sei o que pode ser isso.

Notei que meu iReport está usando o jasperreports-3.0.0.jar (antigo, eu sei =/ ) e o jar do projeto é o jasperreports-2.0.5.jar. Deixei ambos com a mesma versão (a mais recente) e o problema persiste. Sei lá o que pode ser isso.

Alguém pode dar uma luz?

Vlw!

te ajudar com o group eu nao posso… mas posso te sugerir usar subrelatorios como eu fiz no meu… funciona perfeitamente :slight_smile:

Vou avaliar esta alternativa! =)

Anyway, vi em alguns fóruns gringos algo a respeito de Dynamic Build Report e que esta classe tem um método para construção de grupos. Sabe algo a respeito? Confesso que é algo que não domino neste ponto.

Abraço.