JasperReports - Relatório com varios Details

Bom pessoal, meu primeiro post aqui, acompanho a muito tempo o fórum buscando soluções e acabo de me deparar com um problema. Peço a ajuda de vocês aqui no fórum.

Tenho que gerar um relatório com três querys com informações distintas. Não consegui resolver o problema utilizando subreport, pois ele funciona como um subdetail. Eu preciso de três detalhes, porém o ireports tem apenas opção de um detalhe.
Tenho alguns exemplos de como gerar direto o arquivo .jasper sem gerar o design em xml. Entretanto, tenho muitos relatório dessa natureza e gostaria de uma solução mais prática.

Agradeço antecipadamente qualquer ajuda.

você já tentou utilizar sub-relatório? acho que resolverá seu problema.

Vale uma POG?

Bem, realmente se vc colocar subreports dentro do detail eles funcionarão como subdetails. Mas já pensou em colocá-los em outra banda?

E se vc colocar os 3 subreports dentro da sua banda de quebra, no header dela, ou até mesmo no footer dela? Ai vc coloca o tamanho da banda detail pra 0 e pronto!

Boa sorte! :wink:

Bom, isso da resultado também. Porém ainda busco uma solução melhor do que o POG hehe.

Outro problema, em uma banda preciso que os campos sejam adicionados dinamicamente. Por exemplo, tenho uma estrutura de níveis hierárquicos com autorelacionamento. Se eu escolher o 3º nível, tenho que acrescentar campos para o 1º, 2º e 3º.

Como poderia acessar uma banda do relatório antes de imprimir e adicionar os campos?

Exemplo da Banda:

Nivel 1: Descrição do 1
Nivel 2: Descrição do 2
Nivel 3: Descrição do 3

só sou a favor de sub-relatorios quando você quer unificar a complexidade de processamento do relatorio de forma a reusá-lo em outros. Caso esta situação não aconteça, utilize agrupamentos. Caso venha a ter muitos cálculos e processamentos de verificações entre estes níveis, aconselho o uso de um scriplet em paralelo para auxiliar nestas contas.

É isso ai, como o colega disse, Scriptlets é a solução caso deseje acessar algo do relatório durante sua execução. Pesquise aqui msm no GUJ sobre eles que encontrará algo, eu msm já postei explicando como usá-los.

Só que é o seguinte, não sei até que ponto isso poderá te ajudar, a definição de scriptlets é clara, veja:

Trocando em miúdos? Com scriptlets vc pode ACESSAR campos, parâmetros e variáveis. Mas pode MODIFICAR apenas variáveis. Por isso que eu acho que no seu caso não resolveria muita coisa. Ele não permite que vc acesse uma banda e crie componentes como existe em outros geradores de relatórios de outras linguagens.

Uma alternativa que já usamos aqui é escrever o .jrxml em tempo de execução. Temos um caso aqui em que há variação do número de colunas durante a impressão do relatório. A alternativa encontrada foi escrever aquele trecho do .jrxml em tempo de execução! Vc monta o .jrxml como deseja ainda no java, e depois chama ele normalmente. Eu tenho até um programa aqui, um gerador de relatórios msm, que o usuário escolhe os campos que deseja, etc, etc… e eu monto o .jrxml correspondente. Não é complicado, é trabalhoso apenas, é só observar como se comporta o .jrxml q vc consegue fazer.

Uma outra alternativa é usando Scriptlets… Na tal banda que pode ter diferentes níveis, vc coloca um campo com a propriedade Strech with overflow. Ai vc coloca pra imprimir neste campo uma variável $V{varNivel}. Então, usando scriptlets vc altera o conteúdo dessa variável em tempo de execução. Ai vc coloca dentro dela tudo que precisa que seja impresso, usando seu exemplo ainda, vc colocaria:

String conteudo = "Nível 1: Descrição 1\nNível 2: Descrição 2\nNível 3: Descrição 3"; setVariableValue("varNivel", conteudo);

Vc pode usar dois campos invés de um, pode colocar um campo pra escrever o código dos níveis e outro as descrições, enfim, dá pra fazer MUITA coisa com o que eu chamo de POG (Programação Orientada a Genialidade… achou que era a gambiarra né? hauhauahuahuahaua) :wink:

Qdo a ferramenta não tem o que vc precisa, vc tem que inovar! Divirta-se! Qq. coisa é só “gritar”… :lol: