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

Botón Mágico

Magic Button, es un botón animado para android bajo licencia del MIT desarrollado por Bloder (Brasil), el proyecto esta[...]

Introducción a Spark Framework

Spark Framework es un conjunto de librerías para los lenguajes Java y Kotlin que nos sirve para el desarrollo rápido y s[...]

Lightweight Java Game Library

¿Quien no ha querido programar un juego? creo que la mayoría si no es que todos los que conocen de programación sin impo[...]

Abre una aplicación swing java desde el navegador de forma segura

Los mejores días del marco de java swing se han ido. Las aplicaciones de escritorio perdieron popularidad y todo está fo[...]

Tres cursos de programación de la Universidad de Stanford

La Universidad Leland Stanford Junior, conocida mundialmente como la Universidad Stanford, es una universidad privada es[...]

Empaquetado de texturas en LibGDX

Continuando con los tutoriales sobre LibGDX (Librería para el desarrollo de videojuegos), en esta ocasión veremos como e[...]