Está en la página 1de 31

UNIVERSIDAD DE ANTIOQUIA

DEPARTAMENTO DE INGENIERIA DE SISTEMAS


FUNDAMENTOS DE SISTEMAS DE INFORMACION

Laboratorio Nro 4. Creacin de Reportes con Netbeans / MySQL y JasperReports.


Profesor: DIEGO JOSE LUIS BOTIA VALDERRAMA PhD (c)

1. Introduccin:
Se realizar la generacin de Reportes para una aplicacin basada JAVA, utilizando MySQL como nuestro motor de base
de datos predeterminado y lo conectaremos mediante el API JDBC (Java Data Base Connectivity). Se presentaran los
principales pasos para generar reportes sencillos, con filtros de bsqueda y reportes con grficos estadsticos. Para el
desarrollo del laboratorio se usara la librera de JasperReports / iReports.

2. Herramientas para el Desarrollo


Netbeans 8.0 o superior.
Adobe Reader: Este ser utilizado para ver nuestros reportes que estarn en formato PDF. Aunque en esta
ocasin no es indispensable ya que los visualizaremos a travs del Jasper Viewer.
MySQL 5.5: Sera el encargado de alojar a nuestra base de Datos.
Ireport y JasperReports 5.X o Superior: El primero ser el entorno grafico que nos ayudara a crear el Reporte,
mientras que del segundo utilizaremos las libreras (Proporcionadas por el profesor Descarga desde :
https://www.dropbox.com/sh/pzp0o18c84d6hor/AADl5gIXQu4lFsLTOl2QfQ9ra?dl=0 ) que nos ayudaran a
compilar y ejecutar el reporte que son las siguientes
commons-beanutils-1.9.2

commons-collections-3.2.1
commons-digester-2-1
commons-javaflow-20060411
commons-logging-1.2
jasperreports-5.6.1
itext2.1.7(Importante tener esta librera ya que es la encargada de generar nuestro reporte en PDF y otros formatos)
MySQLConnector para JAVA(mysql-connector-java-5.1.23-bin):este es nuestro puente JDBC que nos permitir la
conexin entre el servidor de base de datos y las pginas JSP( viene incluido en Netbeans).
Y para esta versin por supuesto necesitamos el respectivo PLUGIN para Netbeans.
3. Caso de Estudio

Para realizar este tutorial, por ahora solo utilizaremos una tabla, y nuestro reporte se generar a partir de recibir un parmetro,
para este sencillo caso recibir como parmetro la matrcula de un estudiante, y utilizaremos nica y exclusivamente el IReport
que instalaremos dentro de Netbeans.

4. Instalacin del PLUGIN

Paso 1. Abra su Netbeans IDE, recuerde que este plugin solo se instala en versiones superiores a la 7.3.0, una vez abierto
haga clic en el men Tools y Seleccione Plugins:
Paso 2.

Ahora haga clic en la pestaa Downloaded y seguidamente en el botn Add Plugins

Paso 3. Ahora localice la ubicacin del archivo con extensin NBM y despus haga clic en el botn abrir (Archivos iReport-
5.6.0.nbm, jasperreports-components-plugin-5.6.0.nbm, jasperserver-plugin-5.6.0.nbm, y 1341985500_org-netbeans-
modules-swingapp.nbm).
Paso 4. Una vez que empiece la instalacin aparecer un Wizard que le guiar, solo haga clic en siguiente y acepte los
trminos de la licencia. Existe la posibilidad de que Netbeans no lo pueda validar, para que la instalacin contine solo
haga clic en continue.

Paso 5.
Listo, nuestro IReport se encuentra Instalado, para finalizar haga clic en la pestaa Installed y busque el nuevo
complemento en la categora Tools
Como podr darse cuenta su Netbeans ha cambiado un poco de apariencia, ya que se agregaron varios componentes como por
ejemplo los orgenes de datos (datasources) de IREPORT, adems de las consolas de salida.
5. Creando la BD

Como primer paso crearemos la base de datos, puede crearla con algn asistente grfico o desde la terminal de MySQL,
utilizaremos solo una tabla o puede seguir usando vistas si es que lo desea, a manera de ejemplo utilizaremos la siguiente tabla,
copie o escriba el siguiente cdigo SQL:

CREATE TABLE Datos(


Matricula CHAR(11) PRIMARY KEY,
Nombre VARCHAR(25),
Apellidos VARCHAR(50),
Domicilio VARCHAR(30),
Grupo VARCHAR(8));

6. Netbeans una vez creada la base de datos, abra Netbeans y cree un nuevo Proyecto como a continuacin se indica:
1. Dirjase al men File->New Project
2. Despus elija Java->Desktop Application
3. En este paso elija un nombre y una ubicacin, en caso de utilizar Netbeans versin 7, puede indicarle que ser una
aplicacin con BD, de lo contrario elija la opcin bsica, finalice el asistente.

7. Como se indico anteriormente en la nueva versin de Netbeans ya puede indicarle al IDE que se tratara de una aplicacin
de base de datos, si eligi esta opcin siga los siguientes pasos:

1.Una vez que elijo la aplicacin de base de datos, en la siguiente pantalla deber elegir Nueva Conexin con Base de
datos
Elija la opcin MySQL y configrela como lo muestra la siguiente imagen, escriba su nombre de usuario correspondiente y su
password, en caso de no tener, puede dejarlo en blanco.

Si la conexin se realiz con xito, la tabla ya fue extrada y los campos agregados, ahora haga clic en siguiente

Como se dio cuenta nos abri un proyecto de ejemplo, puede trabajar sobre este mismo y agregar los componentes que
aadiremos en los siguientes pasos o puede continuar con los siguientes pasos que se mencionaran a continuacin.
Antes de hacer nuestro reporte crearemos un origen de datos para establecer nuestra conexin y que nuestro reporte contenga
datos reales de la BD.

Ahora complete los parmetros pedidos, cuando los tenga haga clic en el botn test, si la conexin se realiza con xito haga clic
en save, de lo contrario corrija los que estn mal, si el mensaje de error indica acceso denegado, puede que su usuario o password
sean los incorrectos, u otro problema comn es que el servidor no este activado.
Despus en la pantalla de data sources seleccione el origen Reportes, aunque por default se selecciona el recin creado.

Ya creado nuestro proyecto, disearemos nuestro reporte como se indica:

Disee el reporte a su gusto, en este caso solo utilizaremos 4 bandas que son: title, page header, Detail, Page Footer. Las dems
puede eliminar las haciendo clic derecho sobre la misma y seleccionando Delete Band o estableciendo el valor 0 en las propiedades
del lado derecho.
Si por algn error elimino alguna que no debera haberse borrado, puede volver activarla desde el Inspector de Ireport.

Agregue a la banda Detail los campos de nuestra tabla, no es necesario agregar un campo esttico y despus uno de texto, para
realizarlo con tan solo arrastrar y soltar siga los siguientes pasos:
1.Haga clic derecho sobre el reporte ubicado en el panel Report Inspectory seleccione Edit Query.

2. Ahora escriba la consulta:

SELECT * FROM Datos


order by Apellidos;
Despliegue el nodo Fields del Reporte:

Ahora seleccione uno por uno y arrstrelo a la banda detail, esto nos evitar problemas con el tipo de datos ya que cada tipo de
dato en MySQL tiene un equivalente en JAVA y esto al realizarlo de esta manera se realizara en automtico, por ejemplo, el
VARCHAR equivale a un String, el Int a INT ,etc. El reporte habr tomado una forma como se ve en la siguiente figura

Haga click en el botn Preview para observar el resultado del reporte:


Para finalizar al diseo agregue a las bandas restantes lo siguiente

Simplemente arraste los controles Current Date y Page X of Y desde el panel de iReport

El reporte deber recibir un ahora un parmetro para que se realice, en este caso recibir la matricula, as lo que haremos primero
ser agregar el parmetro al reporte y despus escribiremos nuevamente la consulta en su forma correcta. En el inspector del
reporte encontrara un Nodo que dice parameters, haga clic derecho sobre el y seleccione agregar parameter.

En la banda de propiedades pngale el nombre que desee, en este caso se llamara igual que el campo de la tabla que nos servir
en la condicin, seleccione el tipo de dato que corresponda. En donde dice valor de default puede escribirle alguno para probar y
este valor deber ir encerrado entre comillas dobles
Nuevamente abra el editor de consultas y modifquela como sigue:

SELECT * FROM Datos


WHERE matricula = $P{matricula}

Listo nuestro reporte ha sido generado, recuerde que el archivo jasper y el jrxml estn almacenados en la carpeta del proyecto.

Asegrese de colocar ahora el reporte de la siguiente forma:

Pruebe ingresando algn valor para el parmetro y observe el resultado:


Enseguida procederemos a agregar las libreras necesarias para ejecutar el reporte y poder guardarlo en distintos formatos,
despliegue el proyecto y sobre la carpeta libreras haga clic derecho y despus seleccione agregar JAR busque las libreras y
seleccinelas.

Despus crearemos una clase java que ser la encargada de crear y lanzar el reporte, en la siguiente pantalla se muestra todo el
cdigo fuente.

package com.reporte;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.util.JRLoader;
import net.sf.jasperreports.view.JasperViewer;

public class IniciarReporte {


Connection conn=null;
public IniciarReporte(){
try{
Class.forName("com.mysql.jdbc.Driver"); //se carga el driver
conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/reporte","root","root");
JOptionPane.showMessageDialog(null,"Conexin establecida");
} catch (Exception ex){
ex.printStackTrace();
}
}

public void ejecutarReporte(String matricula){


try{
String archivo = "Reporte.jasper";
System.out.println("Cargando desde: " + archivo);
if(archivo == null){
System.out.println("No se encuentra el archivo.");
System.exit(2);
}
JasperReport masterReport= null;
try { masterReport=(JasperReport)JRLoader.loadObjectFromFile(archivo);}
catch (JRException e) {
System.out.println("Error cargando el reporte maestro: " + e.getMessage());
System.exit(3);
}

//este es el parmetro, se pueden agregar ms parmetros


//basta con poner mas parametro.put
Map parametro= new HashMap();
parametro.put("matricula",matricula);//Reporte diseado y compilado con iReport
JasperPrint jasperPrint= JasperFillManager.fillReport(masterReport,parametro,conn);
//Se lanza el Viewer de Jasper, no termina aplicacin al salir
JasperViewer jviewer= new JasperViewer(jasperPrint,false);
jviewer.setTitle("Diego -Reporte");
jviewer.setVisible(true);}
catch (Exception j){System.out.println("Mensaje de Error: "+ j.getMessage());}}

public void cerrar(){


try {conn.close();}
catch(SQLException ex) {ex.printStackTrace();}}
}

Ya creado nuestro proyecto, reporte y la clase que lo lanzara procederemos a agregar un nuevo formulario como se muestra cuya
funcin ser recoger la matricula, que es el parmetro que recibir para realizar la consulta y ejecutar el reporte:

Despus solo aada un evento al botn, para ello seleccione el botn y haga doble clic o inclyalo desde la paleta de propiedades
en la ficha eventos

Ahora abra el cdigo fuente del frame y ajstelo como a continuacin se muestra:
Ahora solo ejecute la aplicacin y escrbale algn parmetro que tenga en la BD.
Parte 2. Integracin del Reporte a una aplicacin Web.

En Netbeans Cree un nuevo proyecto web con Servidor de Aplicaciones Glassfish y plataforma JEE 7.

Cree un nuevo reporte similar al creado en el ejercicio anterior. Lo novedoso es que se utilizar el control de Cdigo de Barras
para generar el cdigo de la matricula y posteriormente leerlo en a travs de un lector de cdigo de barras. Para eso en la paleta
del iReport seleccione el control Barcode.

Para este ejemplo usaremos el cdigo de barras Code128 y la librera Barbecue (Proporcionada por el docente)
Ahora seleccin el control dentro del reporte y en las propiedades coloque los siguientes elementos:

Realice un Preview del reporte y observe el resultado

Para asegurarse que el cdigo de barras genera correctamente el dato de la matricula puede instalar en su Smartphone un
aplicativo lector de cdigo de barras como Barcode Scanner.

Una vez comprobado el correcto funcionamiento del reporte proceda a crear dos pginas JSP (buscar.jsp y reporte.jsp)

Asegrese de agregar las libreras relacionadas a continuacin:


Para la pgina buscar.jsp se crear un simple formulario as:

En la pgina de respuesta reporte.jsp se tendr la lgica necesaria para enlazar el visor de JasperReport y hacer la conversin
automtica a PDF a travs del respectivo formato MIME.
Asegrese de compilar el reporte correctamente mediante la siguiente opcin:

Esto genera un archivo con extensin .jasper.

Para mayor facilidad coloque los archivos del reporte en la siguiente ruta:

Haga el despliegue del proyecto web hacia glassfish y luego ejectelo en el navegador web.
Observe que el reporte esta generado en el formato PDF.

Parte 3. Generacin de reportes totalizados con grficos estadsticos.

En este ejercicio realizaremos la creacin de una aplicacin JAVA que permita generar un grafico en barras de los productos ms
vendidos en un periodo de tiempo dado.

Empezaremos creando una nueva BD llamada mitienda.

create table clientes(


cedula int not null,
nombre varchar(15) not null,
apellido varchar(15) not null,
telefono varchar(12) not null,
direccion varchar(20) not null,
primary key(cedula)
)Engine=InnoDB;

create table facturas(


no_fact int not null,
cedula int not null,
fecha date not null,
primary key(no_fact)
)Engine=InnoDB;

create table productos(


cod_prod int not null,
descripcion varchar(15) not null,
precio int not null,
primary key(cod_prod)
)Engine=InnoDB;

create table detalle(


cod_prod int not null,
no_fact int not null,
cantidad int not null,
primary key(cod_prod,no_fact)
)Engine=InnoDB;

alter table facturas


add constraint fk_facturas_clientes
foreign key(cedula) references clientes(cedula)
ON UPDATE CASCADE;

alter table detalle


add constraint fk_detalle_facturas
foreign key(no_fact) references facturas(no_fact)
ON UPDATE CASCADE;

alter table detalle


add constraint fk_detalle_productos
foreign key(cod_prod) references productos(cod_prod)
ON UPDATE CASCADE;

insert into clientes values(1234,'camilo','vargas','3144403982','cll 20');


insert into clientes values(456,'daniel','tovar','3154646642','cll 30-5');
insert into clientes values(7898,'cristian','gordillo','3164596642','cr 32-89');
insert into clientes values(7689,'diego','rodriguez','3214576342','subia');
insert into clientes values(35972,'yovanna','beltran','8736592','cll 18 -5');
insert into clientes values(75691,'diana','sanchez','8678952','cll 21c-8');
insert into clientes values(54678,'ximena','jimenez','8861297','cll 23-85');

insert into productos values(1682,'galletas duck',5300);


insert into productos values(3796,'papa libra',900);
insert into productos values(3792,'yogurt vaso',1800);
insert into productos values(6481,'mortadela',2300);
insert into productos values(3468,'cereales',8600);
insert into productos values(5812,'sal 1k',2300);
insert into productos values(1685,'leche 1l',1600);
insert into productos values(7712,'azucar blanca',900);
insert into productos values(7557,'cafe sello rojo libra',7000);
insert into productos values(1234,'aceita 100cc',4000);
insert into productos values(7523,'arroz libra',1000);

INSERT INTO mitienda.facturas (no_fact, cedula, fecha)


VALUES (1, 35972, '2014-10-08');
INSERT INTO mitienda.facturas (no_fact, cedula, fecha)
VALUES (2, 7898, '2014-10-09');
INSERT INTO mitienda.facturas (no_fact, cedula, fecha)
VALUES (3, 7898, '2014-10-10');
INSERT INTO mitienda.facturas (no_fact, cedula, fecha)
VALUES (4, 54678, '2014-10-08');
INSERT INTO mitienda.facturas (no_fact, cedula, fecha)
VALUES (5, 7898, '2014-10-10');
INSERT INTO mitienda.facturas (no_fact, cedula, fecha)
VALUES (6, 7898, '2014-10-10');

INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)


VALUES (1234, 1, 8);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (1234, 2, 3);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (1234, 5, 10);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (1682, 1, 5);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (1685, 3, 12);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (1685, 5, 3);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (3468, 1, 2);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (3792, 3, 4);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (3796, 3, 6);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (3796, 5, 4);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (5812, 1, 3);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (6481, 4, 2);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (7523, 2, 5);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (7523, 3, 2);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (7712, 2, 3);
INSERT INTO mitienda.detalle (cod_prod, no_fact, cantidad)
VALUES (7712, 4, 1);
Ahora crearemos la respectiva consulta:

Crearemos un nuevo Java App que contenga la siguiente estructura (Asegrese de agregar las libreras respectivas).
Cree un reporte vaco (asegrese de crear un nuevo data source hacia su BD y llmelo Reporte 2) y agregue dos parmetros que
permitirn filtrar el reporte FECHAINICIAL y FECHAFINAL en el panel de iReport

Ahora cree un nuevo query adicionando a la consulta de prueba los parmetros $P{FECHAINICIAL} y $P{FECHAFINAL} en la clausula
del WHERE de la consulta SQL.
Ahora disee el reporte de la siguiente forma, utilizando el componente Chart para generar los grficos estadsticos.

Al arrastrar el componente aparecer varias opciones de grficos. En este ejemplo usaremos Bar 3D.

Por el momento dejaremos las opciones que aparecen por defecto (En el asistente haremos click en Finish). Ahora Ubique el
grfico dndole el tamao que desee. Haga click despus con el botn derecho del ratn y elija la opcin Chart Data.
En la ventana Chat Details haga click en el botn Add.

Agregu en Series Expression y Category Expression $F{descripcion} y en Value Expression $F{PRODUCTOS}


Ahora realice un preview del reporte ingrese dos fechas de prueba como parmetros y verifique la correcta generacin del reporte:

Cree una Java Class llamada Conexion con el siguiente cdigo:

Esta clase permitir realizar la respectiva conexin a nuestra BD.

Ahora agregue un JFRAME y diselo de la siguiente forma


Al Text Field 1 lo llamaremos TXTINICIAL y al Text Field 2 lo llamaremos TXTFINAL.

Ahora Coloque el siguiente cdigo:

Pruebe la generacin del reporte ahora desde la aplicacin JAVA.


EJERCICIOS (NOTA: ESTA ENTREGA ES OPCIONAL PARA LAS PERSONAS QUE DESEEN SUBIR NOTA)

FECHA DE ENTREGA : 12 de Mayo de 2017

1. Tomando la Base de datos de la tienda, realice la factura de venta en PDF, teniendo en cuenta que se har una aplicacin
web donde se ingresar como parmetros el nmero de la factura. Tenga en cuenta el siguiente diseo:

2. Disee un reporte estadstico del total de ventas realizadas segn un rango de fechas dado.
3. Disee un reporte en diagrama de barras que presente los 5 clientes que ms facturan.
4. Disee un reporte que presente por cada factura el nmero de productos vendidos y el total facturado.
5. Cree una nueva base de datos en MySQL teniendo en cuenta el siguiente script SQL
--
-- Estructura de tabla para la tabla 'estudiante'
--
CREATE TABLE estudiante (
dni varchar(12) NOT NULL,
nombre varchar(32) default NULL,
email varchar(32) default NULL,
celular varchar(12) default NULL,
PRIMARY KEY (dni)
) ENGINE= InnoDB DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla 'estudiante'
--
INSERT INTO estudiante VALUES ('EST-00000001', 'Fernando Coco Cuadrado ',
'fernando2@yahoo.es', '080043332112');
INSERT INTO estudiante VALUES ('EST-00000002', 'Tomas Turbado ',
'loco_ton@mixmail.com', '800-33333-98');
INSERT INTO estudiante VALUES ('EST-00000003', 'Ramona Ponte Alegre ',
'triste_esta@gmail.com', '500-3223-122');
INSERT INTO estudiante VALUES ('EST-00000004', 'Pascual Conejo Enamorado ',
'conejo_rabioso@hotmail.com', '500-3333-001');
INSERT INTO estudiante VALUES ('EST-00000005', 'Miren Perez ',
'elcochinote@facebook.com', '500-33-12199');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla 'materia'
--

CREATE TABLE materia (


codigo varchar(7) NOT NULL,
nombre varchar(32) default NULL,
curso varchar(12) default NULL,
horario varchar(32) default NULL,
PRIMARY KEY (codigo)
) ENGINE= InnoDB DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla 'materia'
--
INSERT INTO materia VALUES ('SIS-009', 'Introduccin a la programacin', 'A1',
'Mircoles de 06:00 a 09:00');
INSERT INTO materia VALUES ('TEL-500', 'Teleinformtica', 'B32', 'Jueves de 18:00 a
19:00');
INSERT INTO materia VALUES ('SIS-200', 'Linux', 'B12', 'Lunes de 14:00 a 16:00');
INSERT INTO materia VALUES ('SIS-234', 'Metodologas de la Informacin', 'C32',
'Martes de 16:00 a 18:00');
INSERT INTO materia VALUES ('MAT-280', 'Estadstica Descriptiva', 'C15', 'Viernes de
09:00 a 11:00');
INSERT INTO materia VALUES ('FIS-200', 'Fsica Bsica IV', 'LAB-02', 'Viernes de
14:00 a 17:00');

-- --------------------------------------------------------

--
-- Estructura de tabla para la tabla 'matricula'
--
CREATE TABLE matricula (
dni varchar(12) NOT NULL,
idmateria varchar(7) NOT NULL
) ENGINE= InnoDB DEFAULT CHARSET=utf8;

--
-- Volcar la base de datos para la tabla 'matricula'
--

INSERT INTO matricula VALUES ('EST-00000001', 'FIS-200');


INSERT INTO matricula VALUES ('EST-00000001', 'TEL-500');
INSERT INTO matricula VALUES ('EST-00000001', 'SIS-009');
INSERT INTO matricula VALUES ('EST-00000002', 'SIS-200');
INSERT INTO matricula VALUES ('EST-00000002', 'FIS-200');
INSERT INTO matricula VALUES ('EST-00000003', 'MAT-280');
INSERT INTO matricula VALUES ('EST-00000003', 'SIS-009');
INSERT INTO matricula VALUES ('EST-00000003', 'TEL-500');
INSERT INTO matricula VALUES ('EST-00000003', 'SIS-200');
INSERT INTO matricula VALUES ('EST-00000004', 'SIS-234');
INSERT INTO matricula VALUES ('EST-00000005', 'TEL-500');
INSERT INTO matricula VALUES ('EST-00000001', 'SIS-234');

Cree un reporte similar al siguiente:

Deber emplear subreportes, para lo cual se recomienda la siguiente documentacin:

https://community.jaspersoft.com/wiki/subreports-jaspersoft-studio
https://community.jaspersoft.com/wiki/creating-charts-and-subreports-jaspersoft-studio

También podría gustarte