JasperReports: problema com o tamanho da banda

11 respostas
A

Pessoal, to tendo um problema assim… quando coloco no elemento detail de um JRXML um subrelatorio e ele estrapola o height definido na band do detail o jasper lança exceção q esta fora da range… mas eu preciso fazer com q ela espanda sozinha, ja que nao tenho como saber a quantidade de dados que virao!!! Vlw!! :wink:

11 Respostas

A

Ninguem? Ajuda eu pessoal… quem é o guru no Jasper??? Preciso mto saber isso…

R

Olha, “guru” eu não sou não… mas vamos tentar vai…

Veja se sua banda detail está com a propriedade Split allowed marcada como true.

http://www.guj.com.br/posts/list/22030.java

A

O slipt ta true… por isso q to penrguntando… eu tava achando que soh isso iria funcionar, mas parece q nao… olha soh um exemplo q ta bugando:

<?xml version="1.0" encoding="iso-8859-1"?>
<jasperReport bottomMargin="0" columnCount="1" columnWidth="496"
    isSummaryNewPage="false" isTitleNewPage="false" leftMargin="0"
    name="sem_nome_subreport_0" pageHeight="231" pageWidth="496"
    printOrder="Vertical" rightMargin="0" topMargin="0" whenNoDataType="AllSectionsNoDetail">
    <queryString><![CDATA[SELECT ACESSO.ACESS_BLOQUEADO, ACESSO.ACESS_CHAVE, ACESSO.ACESS_DATA, ACESSO.EMP_CODG FROM ACESSO]]></queryString>
    <field class="java.lang.String" name="ACESS_BLOQUEADO"/>
    <field class="java.lang.String" name="ACESS_CHAVE"/>
    <field class="java.util.Date" name="ACESS_DATA"/>
    <field class="java.lang.Integer" name="EMP_CODG"/>
    <detail>
        <band height="38" isSplitAllowed="true">
            <textField>
                <reportElement forecolor="#000000" height="38"
                    width="486" x="3" y="0"/>
                <textElement textAlignment="Left" verticalAlignment="Middle">
                    <font fontName="Arial" isBold="false"
                        isItalic="false" isUnderline="false"
                        pdfFontName="Arial" size="10"/>
                </textElement>
                <textFieldExpression class="java.lang.Integer"><![CDATA[$F{EMP_CODG}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

<?xml version="1.0" encoding="iso-8859-1"?>
<jasperReport bottomMargin="0" columnCount="1" columnWidth="798"
    isSummaryNewPage="false" isTitleNewPage="false" leftMargin="0"
    name="sem_nome" pageHeight="1140" pageWidth="798"
    printOrder="Horizontal" rightMargin="0" topMargin="0" whenNoDataType="AllSectionsNoDetail">
    <detail>
        <band height="231" isSplitAllowed="true">
            <subreport>
                <reportElement height="231" width="496" x="39" y="0"/>
                <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                <subreportExpression class="java.lang.String"><![CDATA["sem_nome_subreport_0.jasper"]]></subreportExpression>
            </subreport>
        </band>
    </detail>
</jasperReport>

Como vc pode ver são dois XMLs… um eh o relatorio principal e o segundo eh um subrelatorio dele… que deveria expandir…

A

E a exceção que dá é essa:

29/05/2007 16:10:10 net.sf.jasperreports.engine.fill.JRFillSubreport prepare
SEVERE: Fill 27468736: exception
net.sf.jasperreports.engine.JRRuntimeException: Subreport overflowed on a band that does not support overflow.

R

Desculpe a demora para a resposta, mas é que sem as notificações do GUJ tá difícil!

Então, faz um teste, se vc rodar só o subrelatório direto ele dá o msm erro? Pq talvez este erro esteja no subrelatório, seja algo dentro dele que está dando estouro de tamanho e não a chamada no relatório principal do subrelatório.

Abaixo meu relatório principal (resumido) com o detail onde chamo o subrelatorio:

&lt?xml version="1.0" encoding="UTF-8"  ?&gt
&lt;!-- Created with iReport - A designer for JasperReports --&gt;
&lt;!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd"&gt;
&lt;jasperReport
		 name="RelatorioFinalizador"
		 columnCount="1"
		 printOrder="Vertical"
		 orientation="Portrait"
		 pageWidth="595"
		 pageHeight="842"
		 columnWidth="535"
		 columnSpacing="0"
		 leftMargin="30"
		 rightMargin="30"
		 topMargin="20"
		 bottomMargin="20"
		 whenNoDataType="NoPages"
		 scriptletClass="jasper.scriptlet.RelatorioFinalizadorScriptlet"
		 isTitleNewPage="false"
		 isSummaryNewPage="false"&gt;
	&lt;property name="ireport.scriptlethandling" value="2" /&gt;
	&lt;property name="ireport.encoding" value="UTF-8" /&gt;
	&lt;import value="java.util.*" /&gt;
	&lt;import value="net.sf.jasperreports.engine.*" /&gt;
	&lt;import value="net.sf.jasperreports.engine.data.*" /&gt;
	&lt;reportFont name="fonteGeral" isDefault="false" fontName="Courier New" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="false"/&gt;
	&lt;reportFont name="fonteCabecGrupo" isDefault="false" fontName="Courier New" size="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="false"/&gt;
	&lt;reportFont name="fonteTitulo" isDefault="false" fontName="Courier New" size="14" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="false"/&gt;
	&lt;reportFont name="fonteFiltro" isDefault="false" fontName="Courier New" size="12" isBold="false" isItalic="true" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="false"/&gt;

		&lt;detail&gt;
			&lt;band height="105"  isSplitAllowed="true" &gt;
				&lt;subreport  isUsingCache="true"&gt;
					&lt;reportElement
						x="0"
						y="0"
						width="533"
						height="15"
						key="subreport-1"
						isRemoveLineWhenBlank="true"&gt;
							&lt;printWhenExpression&gt;&lt;![CDATA[$F{layout} == 1]]&gt;&lt;/printWhenExpression&gt;
						&lt;/reportElement&gt;
					&lt;connectionExpression&gt;&lt;![CDATA[$P{REPORT_CONNECTION}]]&gt;&lt;/connectionExpression&gt;
					&lt;subreportExpression  class="java.lang.String"&gt;&lt;![CDATA["./jasper/relatorio/RelatorioFinalizador_cheques.jasper"]]&gt;&lt;/subreportExpression&gt;
				&lt;/subreport&gt;
			&lt;/band&gt;
		&lt;/detail&gt;
&lt;/jasperReport&gt;

O meu subrelatório segue exatamente o msm padrão que o relatório principal. Aliás, eu tenho subrelatórios que tem outros subrelatórios, etc…

Tente rodar seu subrelatório direto, sem chamar pelo relatório principal e me diga o que acontece.

A

Pois eh… tentei compilar soh o subrelatorio e deu certo… ele compila, gera todas as paginas… tudo certinho :shock:
E agora? Não sei mais qq eu faço :frowning:

O

será que o tamanho fixo do subrelatório + os tamanhos fixos (cabeçalho, rodapé,…) do relatório não estão maiores que o tamanho do papel?

Porque o campo de detalhe de um subrelatório pode até quebrar de página, mas de repente a soma dos tamanhos fixos tá muito grande.

A

otaviofcs:
será que o tamanho fixo do subrelatório + os tamanhos fixos (cabeçalho, rodapé,…) do relatório não estão maiores que o tamanho do papel?

Porque o campo de detalhe de um subrelatório pode até quebrar de página, mas de repente a soma dos tamanhos fixos tá muito grande.

O subrelatorio ta com tamanho de 231… o tamanho do subrelatorio no relatorio principal tb eh de 231, que eh o mesmo tamanho do detail do relatorio principal…

O detail do subrelatorio esta com 38… entao acho q nao esta estrapolando…

PS: nao existem outras sessoes, somente a detail em ambos os relatorios (principal e subrelatorio). Veja no XML la em cima…

A

RESOLVIDO PESSOALLLLL!!!

Pessoal, consegui resolver o problema… foi mto simples…
acontece que o printOrder do relatorio principal esta como Horizontal (Errado), então quando o subrelatorio expande a banda ele tenta expandir pro lado… mas o relatorio master nao espande a banda pro lado, soh pra baixo… dai o band overflow!!!

Obrigado, ai a todos que tentaram ajudar :slight_smile:

D

André pegando carona em sua mensagem, você consseguiu ou você fez o ireport imprimir um bloco de informação várias vezes quanto forem necessárias mudando somente os dados dos campo, anexei uma imgem com o exemplo que achei na web, mas no tutorial não diz como se faz esse tipo de coisa, eu tenho uma lista e estou imprimindo atravéz de sub-relatórios.

Saberia me dar alguma dica de como fazer isso??

Abraços.

D

Tem esse tópico com ótimos tutoriais que vão lhe auxiliar muito:

http://www.guj.com.br/posts/list/83494.java

Um deles, é uma parte do livro de relatórios do autor Edson Gonçalves, que possui alguns exemplos que poderão lhe dar uma visão sobre o que precisa, tem mais de 100 páginas, então, acredito que seja válido.

Bom, espero que ajude.

Criado 26 de maio de 2007
Ultima resposta 15 de mar. de 2008
Respostas 11
Participantes 5