Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / iReport / Proyectos / Reportes y Subreportes con iReport

Reportes y Subreportes con iReport

Por jc mouse miércoles, octubre 24, 2012

Cuando creamos reportes en iReport que son un poco complicadas o reportes personalizados, osea, tratando de evitar el clásico reporte de tabla, debemos utilizar subreportes para dividir el trabajo y no complicarnos la existencia 🙂

En este tutorial veremos una forma de crear estos subreportes muy fácilmente.

Necesitamos:

  • iReport 3.7 o Superior
  • Conocimientos de SQL y una base de datos MySQL
  • Nivel: Intermedio, a mejor entendedor, si sabes crear un reporte podrás crear un subreporte 🙂

La base de datos que utilizaremos es la siguiente :

MER curso

El código SQL es:

-- 
-- 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=MyISAM 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 Amiano ', '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=MyISAM DEFAULT CHARSET=utf8;

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

INSERT INTO materia VALUES ('SIS-009', 'Introducción a la programación', 'A1', 'Miércoles de 06:00 a 09:00');
INSERT INTO materia VALUES ('TEL-500', 'Teleinformática', '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', 'Metodologías de la Información', 'C32', 'Martes de 16:00 a 18:00');
INSERT INTO materia VALUES ('MAT-280', 'Estadística Descriptiva', 'C15', 'Viernes de 09:00 a 11:00');
INSERT INTO materia VALUES ('FIS-200', 'Física Básica 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=MyISAM 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');

Creando los reportes y subreportes.

Lo primero que haremos sera crear el reporte principal o reporte que llamaremos PADRE

1. Abre el iReport y crea un archivo nuevo.

2. En este reporte solo cargaremos los registros de los estudiantes sin parámetros de entrada, el SQL es:

SELECT  dni ,  nombre ,  email ,  celular 
FROM  estudiante

3. Ahora debemos diseñar el reporte y añadir los TextField de la siguiente manera :

paso 1

OJO: dejamos un espacio en blanco debajo de nuestros textfield, en ese lugar colocaremos el subreporte.

Si ejecutamos ahora el reporte padre, nos muestra los registros de estudiantes

preview reporte

Si todo bien hasta aquí, continuamos con el subreporte.

Subreporte.

Hay varias maneras de agregar un subreporte, nosotros utilizaremos un reporte desde otro archivo *.jasper.

1. Crea un nuevo archivo vacío y llámalo como HIJO.

2. Debes quitar los margenes del reporte para que no nos estorben cuando lo insertemos en el reporte padre. Para hacer esto ve a menú FORMATO -> REMOVER MARGENES DE REPORTE.

3. Crea un parámetro de entrada que llamaras dni.

4. La instrucción SQL que utilizaremos es:

SELECT codigo ,  nombre ,  curso ,  horario 
FROM matricula INNER JOIN materia ON idmateria=codigo
WHERE dni=$P{dni}

5. Crea el reporte como si se tratara de cualquier otro reporte. Añade los TextField y dale formato.

sub report

5. Compila el reporte y comprueba que este todo bien.

UNIENDO TODO

1. Ve al reporte PADRE y en la paleta busca SUBREPORT, en versiones actuales el icono es distinto, no importa, la cosa es que diga SUBREPORT 🙂

paleta

2. arrastra este objeto al diseñador de reporte, aparece una nueva ventana, debes elegir la opción «USAR UN REPORTE EXISTENTE», busca y selecciona el archivo  «hijo.jasper» , presiona siguiente.

RPG

3. En la siguiente ventana te muestra diferentes opciones de conexión, elige la primera, «USAR LA MISMA CONEXIÓN…» . siguiente.

conexion static

4. En en esta ventana te pregunta por los parámetros que se utilizan en el subreporte, nosotros solo utilizamos un parámetro de entrada llamado DNI, este parámetro debemos asignarle un valor del reporte padre que  lógicamente es el DNI del estudiante, entonces lo buscamos y seleccionamos.

parametros

5. En el último paso, te pregunta de donde buscara el archivo JASPER. Nosotros colocaremos el archivo JASPER PADRE y el archivo JASPER HIJO, en la misma carpeta, entonces seleccionamos la opción «USE A STATIC ABSOLUTE PATH REFERENCE» . Presiona el botón Terminar.

static reference

6. Acomoda el subreporte en el diseñador de reporte.

comodato

7. ejecuta el PREVIEW y si no tienes errores, debes ver algo como esto:

fatallity

o.O es todo

Tags

Artículos similares

Procedimientos Almacenados: Parámetros OUT

En un post anterior conocimos que es y como funciona un parámetro de entrada IN en procedimientos almacenados y lenguaje[...]

Evitar ejecutar un programa java más de una vez

Cuando se hace uso de programas a veces no importa que este cree más de una instancia al mismo tiempo, por ejemplo podem[...]

Crear ejecutables con Matlab

1. En la ventana de comandos de matlab escribe «mbuild -setup«, sin comillas y presiona enter. >> mbuild -setup We[...]

Google Play elimina todas las Apps sobre Coronavirus

El gigante de la informática Google, ante la reciente pandemia mundial declarada por la OMS (Organización Mundial de la[...]

Encriptación simétrica en java

En este post veremos un ejemplo sencillo de encriptación/desencriptación simétrica que el API de Java nos permite realiz[...]

Conexión a base de datos Oracle con Laravel

En esta ocasión aprenderemos a conectaros con una base de datos Oracle desde Laravel. Es un tutorial sencillo y cortito,[...]