Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / iReport / Proyectos / Reportes y Subreportes con iReport

Reportes y Subreportes con iReport

Autor 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

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Crear archivos JNLP con Netbeans

Crear archivos JNLP con Netbeans

¿Que son los archivos JNLP? Java Network Launching Protocol (JNLP) es una especificación usada por Java Web Start. Esta...

Funny Sounds: Sonidos divertidos para celular

Funny Sounds: Sonidos divertidos para celular

En este tutorial «Android Bolivia» construiremos nuestra propia aplicación para molestar a los amigos con sonidos divert...

JTable de colores [Problema Resuelto]

JTable de colores [Problema Resuelto]

Problema: Se extrae registros de una base de datos y se desea mostrar estos en un control JTable utilizando un DefaultTa...

Bolivia Segura: La página web oficial del gobierno para informar sobre el Coronavirus

Bolivia Segura: La página web oficial del gobierno para informar sobre el Coronavirus

El gobierno constitucional de Bolivia a la cabeza de la presidente Yaninne Añez y ante la confirmación de dos casos posi...

Método de la Regla Falsa o Regula Falsi

Método de la Regla Falsa o Regula Falsi

Este método, también conocido como método de interpolación lineal, es un método iterativo de resolución numérica de ecua...

Uso de Arrays: Ejemplo práctico

Uso de Arrays: Ejemplo práctico

En este post iremos conociendo de un modo práctico que es y como se utiliza un Array en java, para esto partiremos de un...

14 comentarios en “Reportes y Subreportes con iReport”

  1. engelblack87 dice:

    Buenas noches, disculpa y si quiero mandar varios parametros al subreporte desde java como seria, Gracias. Mi reporte envia parametros al reporte maestro como al subreporte.

  2. lincoln dice:

    hola migo, saludos, sabes tengo una duda con respecto al ejemplo de subreportes. resulta que logre hacer el reporte principal y un subreporte, todo bian hasta ahi, lo mando allamar desde mi aplicaicon java, pero cuando llevo mi aplicacion a otra maquina ya no funciona, solo se muestra el reporte principal y no el sub reporte, por que pasa esto, gracias, si pudieras darme una idea te lo agradeceria.

    y por lo demas pues es uno de los mejores sitio donde he etado. saludos….

  3. Mashi dice:

    en el paso 3, como hago si quiero usar otra conexion ????

  4. Miguel dice:

    Hago todos los pasos que has indicado. El problema que tengo es que cuando lo llevo
    al cliente me sale un error que dice «File to connect database». le he sacado el subreporte al reporte princiapl y funciona correctamente. Quiero creer que no se le está pasando la conexión al subreporte y he probado cambiar varias cositas y sigue sin funcionar. Tienes alguna idea de que puede ser?

  5. Jacks dice:

    Gracias por el Aporte, me ayudo mucho.

  6. miguel dice:

    hola tengo una consulta, tengo reportes y subreportes que se ejecutan sin problema en algunas versiones de windows 7, pero en windows 8 me sale un error al cargar el subreporte, cual seria la mejor forma de direccionar los subreportes al reporte padre?

  7. Alejandro c dice:

    Buenas noches, excelente tutorial, seria tan amable, tengo una pregunta; si quisiera mostrar cada subconsulta en el excel por paginas independientes, como podria hacerlo?, gracias.

  8. JL la Tecla dice:

    Me gusto mucho tu post aprendi mucho y aclare muchas dudas , pero , me surgieron otras y es como puedo crear un parametro de entrada a mi reporte

    1. Mouse dice:

      se agrade viejo 🙂 ya hay un post sobre parámetros de entrada

  9. Raúl dice:

    Hola buenas compi, el manual es muy útil y muestra paso a paso como conseguir el subreporte dentro de un reporte.
    Cuando genero el reporte padre, obtengo el espacio de donde va colocado en reporte hijo pero sin ningún dato.
    He de pasarle el parámetro en la clase java para que rellene y así muestre datos?
    Donde me habré despistado … ???
    Gracias !

  10. Luis dice:

    Hola mouse, una consulta. Tengo mi reporte con sub reporte funcionando.. Pero cuando llamo muchos subreportes en un solo reporte (300) demora en mostrar el reporte. Alguna sugerencia? Te agradezco.

    1. Mouse dice:

      se sobrecarga, trata de optimizar tu consulta ¿en vedad necesitas tantos subreportes?

      1. gerardo dice:

        hola necesito tu ayuda…. tengo un reporte con subreporte. mi subreporte tiene una consulta que se genera a partir de un parametro y mi reporte igual una consulta y recibe 1 parametro. el problema es… como le hago ya que es el mismo parametro tanto para el reporte como el subreporte… solo que son consulttas diferentes

  11. alex dice:

    y si en la lista que me muestra el reporte yo quisiera enumerar mi listado como le hago??? hay alguna opcion en jasper report q permita nooo sé usar un label y se vaya enumerando conforme a los valores q se mostraran???
    solo quiero enumerar los resultados como le hago??

Los comentarios estan cerrados

Comparte lo que sabes

Categorias

Últimas entradas

Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...

En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...

Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...

Google Bard la inteligencia artificial de Google se actualiza con una mejora que entra a competir con el resto de IAs y...

Herramientas

Generador de Enlaces a Whatsapp