Olá senhores,
Tenho um relatório de pedidos que tem no seu detail um sub-relatório para o itens do pedido. Eu o chamo de uma aplicação passando um resultSet dos pedidos.
Acontece que eu não estou sabendo como chamar o sub-relatório!
Se chamar apenas o relatório principal ele não mostra os dados do sub-relatório.
OBS: quando eu executo direto no iReport ele funciona.
Utilizo o iReport 3.5.2
[quote=jMotoca]Você vai ter que passar algum dado para o DataSourceExpression do seu sub-relatório ou, no subrelatório, alterar a propriedade “When no Data”
para mais ajuda nos dê mais detalhes/códigos.
[/quote]
Olá jMotoca, alterei a propriedade “When no Data” para “All Sections, No Detail”, foi a única que fez aparecer o conteúdo do meu sub-relatório, no entanto só aparece o que está na minha columnHead do sub-relatório, o que está no Detail não aparece!
Segue o código da aplicação onde é chamado o relatório:
public void geraRelatorioPedAgrupado(java.util.Date dataInicial, java.util.Date dataFinal) throws JRException, Exception
{
//Formatação de data p/ aparecer no período do relatório (mandado via parametro hashMap
String dataInicialParm = new SimpleDateFormat("dd/MM/yyyy").format(dataInicial);
String dataFinalParm = new SimpleDateFormat("dd/MM/yyyy").format(dataFinal);
//Formatação de data p/ mandar pelo ResultSet para o relatório
String dataInicialJrRs = new SimpleDateFormat("yyyy-MM-dd").format(dataInicial);
String dataFinalJrRs = new SimpleDateFormat("yyyy-MM-dd").format(dataFinal);
banco.abrirConexao(objDados.driver, objDados.url, objDados.usuario, objDados.senha);
Statement stm = banco.conexao.createStatement( );
String query = "SELECT \"PED_IDDOOBJETO\", \"UNI_DESCRICAO\", \"PED_DATA\", \"PED_TOTAL\", \"PES_NOME\" FROM \"PEDIDOS\", \"UNIDADES\", \"PESSOA\" WHERE \"PED_DATA\" >= '"+dataInicialJrRs+"' AND \"PED_DATA\" <= '"+dataFinalJrRs+"' AND \"PED_IDUNIDADE\" = \"UNI_IDDOOBJETO\" AND \"PED_IDUSUARIO\" = \"PES_IDDOOBJETO\" AND \"PED_IDUSUARIO\" = \"PES_IDDOOBJETO\" ORDER BY \"PED_IDDOOBJETO\";";
ResultSet rs = stm.executeQuery( query );
/* implementação da interface JRDataSource para DataSource ResultSet */
JRResultSetDataSource jrRS = new JRResultSetDataSource( rs );
/* HashMap de parametros utilizados no relatório. Sempre instanciados */
Map parameters = new HashMap();
parameters.put("dataInicial", dataInicialParm);
parameters.put("dataFinal", dataFinalParm);
parameters.put("imagem", objDados.imagemRelatorio);
/* Preenche o relatório com os dados.*/
String jasperPrint = JasperFillManager.fillReportToFile( "Relatórios/PedidoCompleto.jasper", parameters, jrRS );
JasperViewer viewer = new JasperViewer(jasperPrint, false, false);
viewer.setExtendedState(JasperViewer.MAXIMIZED_BOTH);
viewer.setTitle("Relatório de Pedidos");
viewer.setVisible(true);
}
Quanto ao DataSourceExpression eu não consegui localizá-lo para fazer o teste.
Vê se o código ajuda vc a entender melhor o problema que tenho aqui.
Agradeço a força!
T+
cara geralmente eu passo o ds com os dados do rel principal e os dados do sub coloco em um parametro no meu map ai la no ireport crio o parametro do tipo collection pra receber a lista de dados do subrelatorio e na expression do subRelatorio coloco new JRBeanCollectionDataSource(listaSubRel);
e la no sub rel vc usa ele criando os values exatamente iguais as propriedades que vc tem na lista.
[quote=lgweb]cara geralmente eu passo o ds com os dados do rel principal e os dados do sub coloco em um parametro no meu map ai la no ireport crio o parametro do tipo collection pra receber a lista de dados do subrelatorio e na expression do subRelatorio coloco new JRBeanCollectionDataSource(listaSubRel);
e la no sub rel vc usa ele criando os values exatamente iguais as propriedades que vc tem na lista.[/quote]
Acho que pode funcionar bem para o que estou querendo!!!
Vou testar aqui, qualquer dúvida, postarei aqui!
Agradeço a ajuda!
T+