olá!
estou tentando usar mais de um subreport, mas somente os dados do primeiro subreport aparecem no relatório!
se eu trocar de posição, os dados do outro que nao aparecia, aparece no relatório =/
estou usando conexão por objetos (JRDataSource).
eu não sei se isso é uma limitação do jasper ou se depende de alguma configuração para poder usar mais de um subreport…
alguém sabe?
vlw
Paezani
Outubro 28, 2009, 2:10pm
#2
é pra funcionar sim!!!
Vc está passando os parametros do primeiro subrelatório pra o segundo?
Pode ser que seja isso!
não.
eu passo os parâmetros dos subreports para o relatório principal.
os subreports coloquei na aba details do relatório principal.
estou chamando o viewer assim:
String master = “C:\Java\iReport-3.0.0\relatorios\Contrato_.jasper”;
String coobrigados = “C:\Java\iReport-3.0.0\relatorios\Coobrigados.jasper”;
String intervenientes = “C:\Java\iReport-3.0.0\relatorios\Intervenientes.jasper”;
String produtos = “C:\Java\iReport-3.0.0\relatorios\Produtos.jasper”;
String titulos = “C:\Java\iReport-3.0.0\relatorios\Vencimentos.jasper”;
Map param = new HashMap();
param.put("pathSubRelCoobrigados", coobrigados );
param.put("pathSubRelProdutos", produtos );
param.put("pathSubRelIntervenientes", intervenientes );
param.put("pathSubRelVencimentos", titulos );
ContratoDataSource cds = new ContratoDataSource(campanha);
JasperPrint print = JasperFillManager.fillReport(
master,
param,
cds );
JasperViewer jasper = new JasperViewer( print, true );
jasper.setVisible( true );
neste “ContratoDataSource”, dentro do método “getFieldValue(JRField field)”, faço a chamada para os dados dos subreports assim:
…
else if ( “ListaVencimentos”.equals( field.getName() ) ) {
valor = new TitulosDataSource( campanha.getLstTitulos() );
}
else if ( “ListaProdutos”.equals( field.getName() ) ) {
valor = new ProdutosDataSource( campanha.getLstProdutos() );
}
else if ( “ListaCoobrigados”.equals( field.getName() ) ) {
valor = new CoobrigadosDataSource( campanha.getLstCoobrigados() );
}
else if ( “ListaIntervenientes”.equals( field.getName() ) ) {
valor = new IntervenientesDataSource( campanha.getLstIntervenientes() );
}
…
o estranho é q somente o primeiro subreport mostra os dados…
se eu trocar de posição, o que não mostrava passa a mostrar os valores…
TheKill
Outubro 28, 2009, 2:36pm
#4
[quote=rodrigobraz]
else if ( "ListaVencimentos".equals( field.getName() ) ) {
valor = new TitulosDataSource( campanha.getLstTitulos() );
}
else if ( "ListaProdutos".equals( field.getName() ) ) {
valor = new ProdutosDataSource( campanha.getLstProdutos() );
}
else if ( "ListaCoobrigados".equals( field.getName() ) ) {
valor = new CoobrigadosDataSource( campanha.getLstCoobrigados() );
}
else if ( "ListaIntervenientes".equals( field.getName() ) ) {
valor = new IntervenientesDataSource( campanha.getLstIntervenientes() );
}
Amigo uma pergunta, esse field é igual para todos os 4 IF´s ???
Esta tratando de valores diferentes com o mesmo field??
sim.
ele vai jogando os valores nos campos do relatório.
[code]
public class ContratoDataSource implements JRDataSource {
private Campanha campanha;
private int count = 0;
public ContratoDataSource( Campanha campanha ) {
this.campanha = campanha;
}
@Override
public boolean next() throws JRException {
return ++count == 1;
}
@Override
public Object getFieldValue(JRField field) throws JRException {
Object valor = null;
ContratoCampanha contrato = campanha.getContrato();
if ( "MunicipioForo".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getMunicipioForo() : "-";
}
else if ( "IdDoctoContrato".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getIdDoctoContrato() : "-";
}
else if ( "DtEmissao".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getDataEmissao() : "-";
}
else if ( "NomeCooperado".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getNomeCooperado() : "-";
}
else if ( "IdCooperado".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getIdCooperado() : 0;
}
else if ( "RgCooperado".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getRgCooperado() : "-";
}
else if ( "CpfCooperado".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getCpfCooperado() : "-";
}
else if ( "NomeCampanha".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getNomeCampanha() : "-";
}
else if ( "VlrTotal".equals( field.getName() ) ) {
valor = contrato != null ? contrato.getValorTotal() : "-";
}
else if ( "ListaVencimentos".equals( field.getName() ) ) {
valor = new TitulosDataSource( campanha.getLstTitulos() );
}
else if ( "ListaProdutos".equals( field.getName() ) ) {
valor = new ProdutosDataSource( campanha.getLstProdutos() );
}
else if ( "ListaCoobrigados".equals( field.getName() ) ) {
valor = new CoobrigadosDataSource( campanha.getLstCoobrigados() );
}
else if ( "ListaIntervenientes".equals( field.getName() ) ) {
valor = new IntervenientesDataSource( campanha.getLstIntervenientes() );
}
else {
valor = "";
}
return valor;
}
}[/code]
consegui resolver…
na propriedade “Tipo de Aumento” dos subreports estava selecionado a opção “relativo ao objeto mais alto”.
troquei para “não aumentar” e funcionou =]