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!!
Ninguem? Ajuda eu pessoal… quem é o guru no Jasper??? Preciso mto saber isso…
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.
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…
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.
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:
<?xml version="1.0" encoding="UTF-8" ?>
<!-- Created with iReport - A designer for JasperReports -->
<!DOCTYPE jasperReport PUBLIC "//JasperReports//DTD Report Design//EN" "http://jasperreports.sourceforge.net/dtds/jasperreport.dtd">
<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">
<property name="ireport.scriptlethandling" value="2" />
<property name="ireport.encoding" value="UTF-8" />
<import value="java.util.*" />
<import value="net.sf.jasperreports.engine.*" />
<import value="net.sf.jasperreports.engine.data.*" />
<reportFont name="fonteGeral" isDefault="false" fontName="Courier New" size="10" isBold="false" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="false"/>
<reportFont name="fonteCabecGrupo" isDefault="false" fontName="Courier New" size="12" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="false"/>
<reportFont name="fonteTitulo" isDefault="false" fontName="Courier New" size="14" isBold="true" isItalic="false" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="false"/>
<reportFont name="fonteFiltro" isDefault="false" fontName="Courier New" size="12" isBold="false" isItalic="true" isUnderline="false" isStrikeThrough="false" pdfFontName="Helvetica" pdfEncoding="Cp1250" isPdfEmbedded="false"/>
<detail>
<band height="105" isSplitAllowed="true" >
<subreport isUsingCache="true">
<reportElement
x="0"
y="0"
width="533"
height="15"
key="subreport-1"
isRemoveLineWhenBlank="true">
<printWhenExpression><![CDATA[$F{layout} == 1]]></printWhenExpression>
</reportElement>
<connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
<subreportExpression class="java.lang.String"><![CDATA["./jasper/relatorio/RelatorioFinalizador_cheques.jasper"]]></subreportExpression>
</subreport>
</band>
</detail>
</jasperReport>
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.
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
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.
[quote=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.[/quote]
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…
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
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.
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.