Escolar Documentos
Profissional Documentos
Cultura Documentos
SubRelatorio Ireports
SubRelatorio Ireports
Para desenvolver este exemplo, ser necessrio termos uma estrutura de tabelas como mostrado abaixo ou a estrutura que voc desejar, desde que possa ser utilizada como Master/Detail. Esta estrutura foi criada e testada em uma base Oracle 9i, ento ajuste os tipos para a base que voc utilizar.
VENDAS
ID_VENDA DATAVENDA COMPRADOR NUMBER(4,0) DATE VARCHAR2(60)
DETALHE
ID_DETALHE DESCRICAO QTD VALORUNT FID_VENDA NUMBER(4,0) VARCHAR2(60) NUMBER(2,0) NUMBER(15,2) NUMBER(4,0)
Se voc decidir utilizar a estrutura acima, preencha as tabela como abaixo. VENDAS JJ Comrcio de Massas Almeida & Almeida Secos e Molhados Anglica Derivados Mercearia Pais e Filhos DETALHE 10 5 20 15 50 12 25
Com as tabelas preenchidas abra execute agora o iReport, pressione CRTL+N ou v ao menu File>> New.
Salve o arquivo como RelatorioVendas.xml. Agora vamos definir para o relatrio qual a sua origem, ou seja, qual o comando SELECT que ir gerar os dados deste relatrio. Para isso v ao menu Database >> Report query e preencha como mostrado abaixo. Aps informar a conexo e o SELECT clique em Read Fields para capturar os campos, Register Fields to report para 1
Agora monte o design do relatrio mestre sua maneira ou utilize o exemplo abaixo:
Este o elemento para o sub-relatrio Agora v ao menu View >> Values form, clique na guia Parameters, pois aqui iremos adicionar um parmetro que ir apontar para o arquivo do sub-relatrio.
Clique no boto New e preencha os campos como mostrado abaixo. Depois clique em Ok e feche a janela de Values form.
necessrio aqui informar o caminho completo de localizao do sub-relatrio, ou seja, o nome do arquivo .xml compilado. Neste caso o subrelatrio ir se chamar SubRelDetalheVenda.
Agora selecione o elemento do sub-relatrio e mostre suas propriedades, temos as guias Subreport 1 e Subreport 2. Na guia Subreport 1 informamos para que na exibio do sub-relatrio seja utilizado a mesma conexo do relatrio mestre. Na guia Subreport 2 informamos o parmetro de localizao do sub-relatrio e ainda qual ser o valor a ser passa para o sub-relatrio, neste nosso caso iremos passar para o sub-relatrio o cdigo da venda.
Clique com o boto direito do mouse nesta rea e escolha Add parameter. E preencha como mostrado na imagem abaixo.
Terminamos aqui a definio do relatrio mestre, basta que voc compile agora o mesmo, v em Tools >> iReporterCompiler.
Inicie agora um novo relatrio, menu File >> New. Configure-o como mostrado abaixo. Aqui estamos apenas configurando a rea do relatrio um pouco menor que o padro, pois no corremos o risco de ter o sub-relatrio cortado na hora da gerao do relatrio.
Agora iremos definir a origem dos dados deste relatrio, para isso v em Database >> Report query. A princpio voc deve construir a clusula SQL para que traga os campos necessrios e assim registra-los ao relatrio. Aps ter os campos registrados voc ir refazer a clusula SQL de modo que na condio WHERE da mesma seja utilizado o parmetro que ser passado pelo relatrio mestre. Aps reconstruir a clusula SQL no esquea de salva-la no relatrio (Save to report).
Depois de montado o relatrio vamos informar para o relatrio o parmetro que utilizado na clusula SQL, para isso v ao menu View >> Values form, clique na guia parameters e depois clique em New. Basta preenche como mostrado abaixo.
Salve o relatrio e compile o mesmo. Est pronto a gerao de sub-relatrio utilizando o JasperReports. Se tudo der certo teremos um relatrio como mostrado abaixo.
Para testa-lo realmente ser necessrio criar uma classe Java ou ento no caso da criao deste manual foi utilizado o servidor Tomcat e para isso criou-se o seguinte cdigo: <%@ page import="dori.jasper.engine.*" %> <%@ page import="dori.jasper.engine.util.*" %> <%@ page import="dori.jasper.engine.export.*" %> <%@ page import="java.util.*" %> <%@ page import="java.sql.*" %> <%@ page import="java.io.*" %> <% String varDriver = "<driver de conexo>"; String varLink = "<link para o banco de dados>"; String varUsuario = "<nome do usurio>"; String varSenha = "<senha do usurio>"; File reportFile = new File(application.getRealPath("/subrel/RelatorioVendas.jasper")); Map parameters = new HashMap(); parameters.put("ReportTitle", "Relatrio de Vendas"); parameters.put("BaseDir", reportFile.getParentFile()); Class.forName(varDriver); Connection varConexao = DriverManager.getConnection(varLink,varUsuario,varSenha); byte[] bytes = JasperRunManager.runReportToPdf(reportFile.getPath(),parameters,varConexao); response.setContentType("application/pdf"); response.setContentLength(bytes.length); ServletOutputStream ouputStream = response.getOutputStream(); ouputStream.write(bytes, 0, bytes.length); ouputStream.flush(); 6
Espero que este pequeno manual ajude a quem est comeando. Aqueles que tiverem alguma dvida ou dica para melhora-lo podem entrar em contato: rogrio_macedo@netpar.com.br ou espero_linux@yahoo.com.br.
Este manual de livre distribuio, mesmo que no coloque o nome do autor original.
Rogrio Ribeiro Macdo JColtro Consultoria, Treinamento e Desenvolvimento Ituiutaba-MG / Curitiba-PR Para cada povo o seu idioma, para todos os povos o Esperanto.