Escolar Documentos
Profissional Documentos
Cultura Documentos
Sub Relatório Com IReport
Sub Relatório Com IReport
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)
253
254
255
256
01/04/2003
02/04/2003
02/04/2003
05/04/2003
300
301
302
303
304
305
306
VENDAS
JJ Comrcio de Massas
Almeida & Almeida Secos e Molhados
Anglica Derivados
Mercearia Pais e Filhos
Feijo
Arroz
leo
Feijo
Macarro
Margarina
Margarina
DETALHE
10
5
20
15
50
12
25
2,25
5,32
1,20
2,25
0,90
2,33
2,33
253
253
253
254
255
255
256
Com as tabelas preenchidas abra execute agora o iReport, pressione CRTL+N ou v ao menu File>> New.
Agora monte o design do relatrio mestre sua maneira ou utilize o exemplo abaixo:
Clique no boto New e preencha os campos como mostrado abaixo. Depois clique em Ok e feche a janela de
Values form.
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.
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.