| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2007 10:10:41
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
Pessoal,
Estou desenvolvendo meu primeiro relatório utilizando iReport e to me quebrando todinho hehe...
Estou precisando fazer um relatorio que segue a seguinte estrutura:
1 cabecalho;
1 rodape;
4 paginas, cada ums com seu proprio layout e conteudo, mas todas as 3 com o mesmo cabecalho e rodape.
fazendo apenas uma analogia, em xml seria algo como isso:
<relatorio>
<pagina id="1" cabecalho="cabecalho" rodape="rodape" layoutcorpo="layout1" dadosCorpo="dados1" >
<pagina id="2" cabecalho="cabecalho" rodape="rodape" layoutcorpo="layout2" dadosCorpo="dados2" >
<pagina id="3" cabecalho="cabecalho" rodape="rodape" layoutcorpo="layout3" dadosCorpo="dados3" >
<pagina id="4" cabecalho="cabecalho" rodape="rodape" layoutcorpo="layout4" dadosCorpo="dados4" >
</relatorio>
ou seja, todas as 4 paginas tem o mesmo cabecalho e rodape e o corpo de cada pagina tem seu proprio layout e sua propria fonte de dados.
pelo que pesquisei por aih (posso estar enganado) parece que a melhor opcao é eu fazer um relatorio separado para cada pagina e entao faria um relatorio com o cabecalho e rodape e apenas colocaria as pagians como subrelatorios. Então, fiz os subrelatorios apenas com textos estaticos para testar e nao estou conseguindo exibir cada subrelatorio em uma pagina diferente. Tb tentei inserir quebra de pagina e nao tive sucesso... no desenho do relatorio fica o elemento quebra de pagina, mas quando executo o relatorio aparece todo o conteudo numa mesma pagina.
alguem sabe como resolver?
[]'s
|
- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%) |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2007 16:32:17
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Bom,,, vamos tentar... rs...
Olha, vc comecou certo. Então vamos lá, por partes ver se conseguimos fazer o que vc quer. Eu tenho um caso aqui que faço exatamente o que vc tá precisando, mas no meu caso tenho 7 layouts diferentes! Enfim,,, fiz assim: (OBS: as bandas q eu não falar nada é pq nao coloquei nada)
PAGEHEADER:
Coloquei o cabeçalho que desejo que apareça sempre
PAGEFOOTER e LASTPAGEFOOTER:
Coloquei o rodapé que desejo que apareça sempre (tb acho ridículo isso, mas se coloco só no pagefooter ele mostra em todas as páginas menos na última, então tem que repetir o rodapé nessas duas bandas... )
QUEBRA:
Criei uma quebra pro meu relatório, alguns chamam de "agrupamento", sei lá, como quiser. Especifiquei que ele deve quebrar sempre que o campo "layout" mudar. Coloque nela as opções "Start on a new page" e "Print header on each page".
DETAIL:
Coloquei meus 7 subrelatorios. No seu caso, os seus 4. Coloque todos os 4 dentro desse detail, um grudadinho no outro, um embaixo do outro. Pra cada um deles vc configura os parâmetros e o jasper que deve chamar normalmente como vc já deve ter feito. Além disso, o "pulo do gato" é marcar a opção "Remove line when blank" e tb preencher a opção "Print when expression". Para essa última, utilize em cada um dos subrelatorios uma condição assim:
$F{layout} == 1 // para o primeiro subrelatorio
$F{layout} == 2 // para o segundo subrelatorio
$F{layout} == 3 // para o terceiro subrelatorio
$F{layout} == 4 // para o quarto subrelatorio
Bem, agora qto a selecao dos dados, nos subrelatorios vc faz o layout que desejar e seleciona os dados como desejar. Agora, o outro "pulo do gato" está no SQL do relatório principal. Eu fiz o meu de forma q ele retorne os dados que precisam ser passados pros subrelatorios (pra q eles façam seus selects) e tb retorne qual o layout que deve ser usado. Isso é muito importante.
Então, só pra te dar um exemplo, no meu select tem algo assim:
Bom, em resumo é isso ai, te garanto que funciona pq faço aqui. Se não entender ou enroscar em algo grita! Eu não sei se consegui explicar direito minha idéia...
|
[]'s, Renata |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 22/08/2007 18:07:30
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
Oi, Renata!
Então.. depois de pesquisar bastante e não achar nenhuma solução, fiquei pensando, pensando, pensando... rss.. até que bolei uma solução... é bem parecida com a sua mas acho que tem algumas vantagens, como:
- não precisa colocar LASTPAGEFOOTER
- não precisa colocar 4 subreports
- não precisa pedir pra limpar as linhas em branco
- não precisa colocar a condição em "Print when expression"
- não preciso do SQL pra saber qual relatório exibir
- funciona para n páginas (não fica limitado a 4 ou 7 páginas)
Como fonte de dados estou usando um JRDataSource pra cada subreport, ao invés de conexão com o banco e, basicamente, o que eu fiz foi criar uma hierarquia de classes e uma classe que faz todo esse trabalho pra controlar as quebras de página.
Como não estou mais no trabalho, n tou nem com o código aqui pra dar mais detalhes. Mas vou ver se consigo preparar um artigo e posto no GUJ como uma alternativa pra o pessoal resolver esse problema.
Bjs
|
- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/08/2007 00:03:06
|
faelcavalcanti
GUJ Ranger
![[Avatar]](/images/avatar/04f2a4140112ae491f66a1c558df795f.jpg)
Membro desde: 03/05/2006 13:16:25
Mensagens: 960
Localização: Recife-PE
Offline
|
Gostaria de ver como ficou esta implementação.
|

--
http://faelcavalcanti.wordpress.com/ :: http://pe.debianbrasil.org/
--
Acredite um pouco mais na força de sua própria intuição. Muitas vezes deixamos de realizar algo de bom ou que nos favoreça simplesmente porque achamos tudo muito difícil e por isso nem começamos. Moral da história: A vida é o caminho e não o destino, você é o arquiteto do seu caminho!
--
Obrigado, Rafa Rocha! |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 23/08/2007 11:38:28
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
Sim, tb quero ver...
- não precisa colocar LASTPAGEFOOTER -> essa eu quero ver como vc faz
- não precisa colocar 4 subreports
- não precisa pedir pra limpar as linhas em branco
- não precisa colocar a condição em "Print when expression"
- não preciso do SQL pra saber qual relatório exibir -> é que no meu caso o SQL não serve só pra isso, eu uso um campo a mais nele pra isso, mas eu pego diversas outras informações que preencho no cabeçalho e no header da quebra
- funciona para n páginas (não fica limitado a 4 ou 7 páginas) -> ah vc nao entendeu, não estou limitada a 4 ou 7 páginas, estou limitada a 4 ou 7 LAYOUTS. Ele imprime qtas paginas forem necessárias no total de registros....
Enfim, depois post aqui pra vermos a nova solução.
|
[]'s, Renata |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 01:31:03
|
RafaelVS
JavaEvangelist
![[Avatar]](/images/avatar/50454f95bbf5e6478cc0a55d08338731.jpg)
Membro desde: 13/12/2006 09:50:16
Mensagens: 405
Localização: Recife - PE
Offline
|
faelcavalcanti wrote:
Gostaria de ver como ficou esta implementação.
E ae, fael, blz? Então.. criei uma hierarquia com uma quantidade considerável de classes.. Foi praticamente uma extensão do framework JasperReports que criei pra facilitar o desenvolvimento dos relatórios aqui da empresa. Criei umas implementações default para JRDataSource e criei umas classes que simulam o relatório com vários layouts. Tem várias classes utilitárias, várias classes abstratas e várias classes que implementam alguns casos comuns. Ainda estou fechando o pacote e como tem várias classes, pretendo depois escrever um artigo detalhando melhor, mostrando os diagramas em UML das classes e explicando basicamente a funcionalidade de cada uma. Como pretendo fazer esse trabalho um pouco mais bem elaborado e agora tou meio apertado no prazo do projeto, pois demorei um tempinho pra bolar essa estrutura, talvez demore um pouco pra sair o artigo.
RenataFA wrote:
- funciona para n páginas (não fica limitado a 4 ou 7 páginas) -> ah vc nao entendeu, não estou limitada a 4 ou 7 páginas, estou limitada a 4 ou 7 LAYOUTS. Ele imprime qtas paginas forem necessárias no total de registros....
Eu entendi sim hehehe, eh que eu me expressei errado... onde tem "n páginas" leia-se "n layouts" mesmo... Para conseguir isso, ao invés de eu colocar varios SubReports e colocar a lógica para alternar entre os SubReports dentro do iReport, o caminho para o SubReport vem da aplicação Java.. Assim só preciso colocar um subreport e consigo escolher o .jasper a ser carregado dinamicamente, ao invés de precisar pre definir na página do ireport. E como só tem um, não preciso me preocupar em limpar os espaços em branco.
[]'s
|
- Mestrando em Engenharia de Software no CIn/UFPE;
- Pós-Graduado em Engenharia de Software na POLI/UPE;
- Bacharel em Ciência da Computação na UNICAP (Universidade Católica de Pernambuco);
- Sun Certified Programmer for the Java 2 Platform, Standard Edition 5.0 (score 95%);
- Sun Certified Web Components Developer for J2EE 1.4 Platform (score 89%) |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 24/08/2007 08:28:01
|
RenataFA
Virtual Machine Man
![[Avatar]](/images/avatar/c05c903e3d997added79518f0e850026.jpg)
Membro desde: 24/08/2006 08:15:10
Mensagens: 698
Offline
|
RafaelVS wrote:
Eu entendi sim hehehe, eh que eu me expressei errado... onde tem "n páginas" leia-se "n layouts" mesmo... Para conseguir isso, ao invés de eu colocar varios SubReports e colocar a lógica para alternar entre os SubReports dentro do iReport, o caminho para o SubReport vem da aplicação Java.. Assim só preciso colocar um subreport e consigo escolher o .jasper a ser carregado dinamicamente, ao invés de precisar pre definir na página do ireport. E como só tem um, não preciso me preocupar em limpar os espaços em branco.
Hum! Entendi!
Pensei aqui e no meu caso não daria certo, é eu imprimo no mesmo relatório os diferentes layouts, depende de que registro foi selecionado pelo SQL do relatório principal, ai eu tenho uma quebra e o detalhe dessa quebra pode assumir qq um dos meus 7 layouts. Por isso não dá pra fazer como vc pensou. Mas no seu caso fica bom msm!
Parabéns!
|
[]'s, Renata |
|
|
 |
|
|
|
|