manual de ireport v10.1.0.0
DESCRIPTION
manualde Jasper reportsTRANSCRIPT
ÍNDICE
Capítulo 1. Introducción ............................................................................................................... 4
Capítulo 2. Primeros pasos ........................................................................................................... 5
2.1 Requisitos de la plataforma ............................................................................................... 5
2.2 Instalación ........................................................................................................................... 5
2.3 Creación de una conexión JDBC ......................................................................................... 7
2.4 Creación de su primer reporte ......................................................................................... 10
Capítulo 3. Estructura del reporte ............................................................................................. 15
3.1. Bandas .............................................................................................................................. 15
3.2. Campos ............................................................................................................................ 18
3.2.1 Registro de los campos desde una consulta ............................................................. 18
3.2.2 Acceso al Diseñador de consultas ............................................................................. 19
3.2.3 Campos y campos de texto ....................................................................................... 20
3.3. Trabajo con elementos .................................................................................................... 21
3.3.1 Gestión de Elementos con el Inspector de Reporte ................................................. 23
3.3.2 Herramientas de formato.......................................................................................... 24
3.3.3 Propiedades básicas de un elemento ....................................................................... 26
3.4 Trabajar con grupos .......................................................................................................... 28
3.4.1 Otras Opciones de grupo ........................................................................................... 36
3.5 Trabajo con parámetros ................................................................................................... 38
3.5.1 Usar parámetros en una consulta ............................................................................. 40
3.6 Trabajo con variables ....................................................................................................... 41
3.7 Expresiones ....................................................................................................................... 44
3.7.1 El tipo de una expresión ............................................................................................ 44
3.7.2 Operadores de expresiones y métodos del objeto .................................................. 44
3.7.3 El uso de un If- Else Construir en una expresión ...................................................... 46
Capítulo 4. Estilos ....................................................................................................................... 48
4.1 Trabajo con estilos ............................................................................................................ 48
4.2 Creación de Condiciones de Estilo ................................................................................... 50
4.3 Creación de una nueva plantilla ....................................................................................... 53
4.3 Instalación y Uso de la nueva plantilla ............................................................................ 54
Capítulo 5. Subreportes .............................................................................................................. 58
5.1 Creación de un subreporte ............................................................................................... 58
5.1.1 Vincular un subreporte al reporte padre .................................................................. 59
5.1.2 Especificación del subreporte ................................................................................... 60
5.1.3 Especificación del origen de datos ............................................................................ 61
5.1.4 Paso de Parámetros ................................................................................................... 62
5.2 Un ejemplo paso a paso ................................................................................................... 63
5.3 Retornando valores desde un subreporte ....................................................................... 71
5.4 Uso del Asistente de Subreporte ..................................................................................... 74
5.4.1 Crear un nuevo reporte mediante el Asistente de Subreporte ............................... 75
5.4.2 Especificación de un reporte existente en el Asistente de Subreporte ................... 77
Capítulo 6. Gráficos .................................................................................................................... 81
6.1 Creación de un gráfico simple .......................................................................................... 81
6.2 Valor hipervínculos ........................................................................................................... 87
Capítulo 7. Tablas Cruzadas........................................................................................................ 88
7.1 Uso del Asistente de tablas de referencias cruzadas ...................................................... 88
7.2 Trabajar con columnas, filas y Medidas........................................................................... 93
7.2.1 Modificando las celdas .............................................................................................. 97
7.2.2 Comprendiendo las Medidas .................................................................................... 97
7.3 Modificación de las Propiedades de una tabla de referencias cruzadas ........................ 99
7.4 Parámetros en las tablas de referencias cruzadas ........................................................ 100
7.5 Trabajar con los datos de las tablas de referencias cruzadas ....................................... 100
7.6 Uso de las variables totales en las tablas de referencias cruzadas............................... 101
Capítulo 1. Introducción IReport es una herramienta de edición de código abierto que puede crear informes complejos a
partir de cualquier tipo de aplicación Java a través de la biblioteca JasperReports. Está escrito en
Java 100% puro y se distribuye con el código fuente de acuerdo con la Licencia Pública General
GNU.
A través de una interfaz gráfica intuitiva y rica, iReport permite crear rápidamente cualquier tipo
de reporte con mucha facilidad. IReport permite a los ingenieros que están aprendiendo esta
tecnología acceder a todas las funciones de JasperReports, así como ayudando a los usuarios
expertos a ahorrar un montón de tiempo en el desarrollo de informes muy elaborados.
Para la versión 5.0, iReport fue casi completamente reescrito, con la nueva aplicación basada en
la plataforma NetBeans. A pesar de que en la interfaz de usuario aparece más o menos lo mismo,
un nuevo diseño completo del núcleo de iReport y el uso de la plataforma NetBeans nos
permitirá crear rápidamente nuevas características , lo que hace aún más fácil iReport de
aprender y usar. Con esta Guía aprenderá cómo agregar características visuales y analíticas para
informes complejos con tablas, imágenes y subreportes
Capítulo 2. Primeros pasos
2.1 Requisitos de la plataforma IReport necesita el Sun Java 2 SDK para funcionar, versión 1.5 o más reciente.
En cuanto a hardware, al igual que todos los programas Java, iReport no consume mucha
memoria RAM, por lo que es necesario contar con al menos 256 MB de memoria
disponibles, así como unos 50 MB de espacio libre en disco.
nota: Con el fin de evitar problemas con el selector de archivos en iReport, los usuarios de
Windows Vista deben tener Java 1.5.0_17-b04 o posterior instalado y los Usuarios de Windows
7 deben tener Java 1.6.0_18-b03 o 1.7.0- b74.
2.2 Instalación
Figura2-1: Instalación-paso 1
Para instalar iReport, haga doble clic en ireport-windows.exe para que aparezca la pantalla que
se muestra en la Figura 2-1.
Figura2-2: Instalación-paso 2
Haga clic en Siguiente y siga las instrucciones del asistente hasta que se complete la instalación
(Figura 2-3).
Figura2-3: Instalación- Último paso
Después de la instalación, habrá un nuevo elemento de menú en el menú Programas (Inicio →
Programas → Jaspersoft iReport Designer).
El programa de instalación crea un acceso directo para iniciar iReport, que une el acceso directo
a iReport.exe (presente en el directorio /bin en el Directorio raíz de Jaspersoft).
2.3 Creación de una conexión JDBC
Para crear una nueva conexión:
1. seleccionar el icono que se encuentra en la barra de herramienta y una nueva ventana
aparecerá para la configuración de la nueva conexión (ver Figura 2-4).
Figura2-4: Selección del Tipo de fuente de datos
2. Seleccionar Conexión JDBC a la Base de Datos y clic en siguiente
Figura2-5: Conexión JDBC mediante un controlador JDBC incorporado
3. En la ventana de Conexión JDBC a la Base de datos escriba el nombre que desea darle a la
conexión (ejemplo, “Mi nueva conexión”) y seleccione el controlador JDBC y complete la url
con la dirección ip, puerto y nombre de la base de datos.
4. Para completar la configuración de la conexión, escriba el nombre de usuario y contraseña
para acceder a la base de datos. Si desea guardar la contraseña, active la casilla de
verificación Almacenar contraseña.
Recomendamos que pruebe la configuración de conexión antes de seguir adelante, que se
puede hacer haciendo clic en el botón Probar.
iReport ofrece el controlador JDBC para los siguientes sistemas de bases de datos compatibles
con SQL:
HSQL
MySQL
PostgreSQL
Si iReport devuelve un error de ClassNotFound, es posible que no haya un archivo JAR en la
ruta de clase que contenga el controlador de la base de datos seleccionado. En este caso, hay
dos opciones:
Agregar el JAR necesario en la ruta de clases de iReport. Para acceder a la ruta de clases
de iReport, seleccione en el menú Herramientas/Opciones, vaya a la pestaña ruta de
clases, y agrege el JAR a la lista de rutas.
Registrar el nuevo controlador a través de la ventana de servicio. Si prefiere esta
segunda manera, abra la ventana de los servicios (Ventana/ Prestaciones o CTRL +5),
seleccione el nodo Controladores.
Haga clic derecho en el nodo Controladores y seleccione Nuevo controlador. El diálogo
que se muestra en la Figura 2-6 se abrirá.
Figura2-6: Controlador Oracle cargado desde un JAR externo
Luego de este paso vuelva a seleccionar el botón Probar de la Figura 2-5 e iReport
localiza automáticamente el archivo JAR necesario y carga el controlador del mismo.
2.4 Creación de su primer reporte 1. Haga clic en Archivo → Nuevo. Esto carga un asistente (Figura 2-7) para la creación paso
a paso de un reporte, a partir de la selección de la plantilla seguida por la selección del
nombre y la ubicación del nuevo informe.
Figura2-7: Asistente de informes - Selección de plantilla
2. Seleccione la plantilla y haga clic en Abrir el Asistente de reporte para proceder a la creación
de informes. (Puede crear un reporte sencillo que duplica la plantilla seleccionada con sólo hacer
clic en Abrir esta plantilla. Sin embargo, vamos a utilizar el asistente para este ejemplo.
Figura2-8: Asistente de informes - Nuevo Informe Nombre y ubicación
3. En el tercer paso, seleccione la conexión JDBC que hemos configurado en el paso
anterior. El asistente detectará que estamos trabajando con una conexión que permite
el uso de consultas SQL y le pedirá en un área de texto especificar una consulta SQL
(Figura 2-9). Esta consulta se puede diseñar visualmente haciendo clic en diseño de
consulta; luego se explicara cómo trabajar con este diseñador
Figura2-9: Asistente de informes - Consultas SQL
4. Haga clic en Siguiente. La cláusula de "orden" es importante para la siguiente elección
del orden de clasificación (voy a hablar de los detalles un poco más tarde).
iReport lee los campos de la tabla direcciones y los presenta en la siguiente pantalla del
asistente, como se muestra en Figura 2-10.
Figura2-10: Asistente de informes - Campos de selección
5. Seleccione los campos que desea incluir y haga clic en Siguiente.
6. Ahora que ha seleccionado el campo para poner en el reporte, se le pedirá que elija los
campos que se utilizará para la clasificación, cualquiera (ver Figura 2-11).
Mediante el asistente, puede crear hasta cuatro grupos. Puede definir más campos
después. (De hecho, es posible establecer un número arbitrario de grupos.)
Figura2-11: Asistente de informes - Agrupamiento
7. En este primer informe, se define una agrupación simple por el campo CITY, como se
muestra en la Figura 2-11.
8. Cuando haya terminado, haga clic en Siguiente.
9. Aparecerá la última pantalla del asistente, y se le informará el resultado de la operación.
Haga clic en Finalizar para crear el reporte, que aparecerá en el área central del iReport,
listo para ser generado, como se muestra a continuación.
Figura2-12: Ventana principal –Vista previa del diseño del reporte
10. Haga clic en el botón Vista previa para ver el resultado final.
Al hacer clic en Vista previa, iReport compila el informe, lo que genera el archivo JASPER y
ejecuta el reporte con el origen de datos especificado. Usted puede seguir el progreso en la
ventana de salida, que está por debajo de la ventana principal. Si por alguna razón, la
ejecución falla, se puede ver una serie de problemas en la ventana problemas del reporte, y
otra de errores en la ventana salida iReport.
En este ejemplo, todo debería funcionar bien, y usted debería ver el informe en la vista
previa como se muestra arriba (Figura 2-12).
También tenga en cuenta:
Usted puede guardar el reporte haciendo clic en el icono en la barra de
herramientas de la ventana. iReport puede guardar los informes en varios formatos,
incluyendo PDF y HTML.
Para exportar automáticamente el reporte en un formato determinado y ejecutar la
aplicación de visor apropiado , seleccione un formato en el menú Vista previa
Capítulo 3. Estructura del reporte
En este capítulo vamos a analizar la estructura del reporte y la organización de un reporte.
Vamos a ver las partes que lo componen y cómo se comportan en relación con los datos de
entrada como iReport crea un reporte de salida. Este capítulo tiene las siguientes secciones:
Bandas
Trabajar con bandas
Resumen
3.1. Bandas
Un reporte se define por medio de una página. Esta página está dividida en diferentes partes
horizontales denominadas “bandas”. Cuando el reporte se une con los datos para ejecutar la
impresión, estas secciones se imprimen muchas veces de acuerdo a su función (y de acuerdo
con las reglas que el autor del reporte, ha puesto en marcha). Por ejemplo, el encabezado de
página se repite en el inicio de cada página, mientras que la Banda de detalle se repite para cada
registro elaborado.
La Figura 3-1 muestra una página dividida en los nueve principales grupos predefinidos a los que
se agregan nuevos grupos. De hecho, iReport gestiona una banda de título (Cabecera de grupo)
y una banda de recapitulación (Pie de Grupo) para cada grupo. Las bandas Detalle, Cabecera de
grupo y Pie de grupo se pueden dividir además en varias bandas, por lo que pueden tener Detalle
1, Detalle 2, y así sucesivamente.
Una banda es siempre tan ancho como la anchura de la página utilizable (esto es, excluyendo
los márgenes derecho e izquierdo). Sin embargo, su altura, incluso si se establece durante la
fase de diseño, puede variar durante la creación de impresión de acuerdo con los elementos que
contiene; se puede alargar hacia la parte inferior de la página de forma arbitraria. Esto suele
ocurrir cuando las bandas contienen subreportes o campos de texto que tienen que
adaptarse al contenido. Generalmente, la altura especificada por el usuario debe considerar la
altura mínima de la banda. No todas las bandas pueden cambiar el tamaño de acuerdo con el
contenido, en particular, el Pie de Columna y el Pie de página.
En general, la suma de todas las alturas de la banda (excepto para el fondo) siempre tiene que
ser menor o igual a la altura de la página menos los márgenes superior e inferior. Esta regla es
mucho más complicado, de hecho, hay varios casos y opciones diferentes que deben tenerse en
cuenta; por ejemplo, la banda de Título se puede imprimir en una página diferente, el Pie de
página y el Pie de la última página pueden tener diferentes tamaños y no se consideran en
conjunto, y así sucesivamente. Para su comodidad, el máximo tamaño de banda permitido se
calcula dinámicamente en tiempo de diseño, lo cual evita que el usuario de altura para las
bandas no válidas (lo que llevaría a un error de verificación del esquema en tiempo de
compilación).
Figura 3-1: Bandas predefinidas de un reporte.
La siguiente es una lista de las bandas predefinidas:
Título
El título es la primera banda visible. Se crea una sola vez y se puede imprimir en una
página separada. En cuanto a las dimensiones definidas, no es posible durante el
tiempo de diseño a sobrepasar la altura de la página de reporte (márgenes superior e inferior
están incluidos). Si el título se imprime en una página aparte, esta altura la banda no está
incluido en el cálculo de la suma total de todos los alturas de la banda, que tiene que ser menor
o igual a la altura de la página.
Cabecera de página
Esta banda le permite definir un encabezado en la parte superior de la página. La altura
especificada durante la fase de diseño por lo general no cambia durante el proceso de creación
(excepto para la inserción de componentes verticalmente re - considerables, tales como campos
de texto que contienen texto largo y subreportes). El encabezado de página aparece en todas
las páginas impresas en la misma posición definida durante la fase de diseño. Las bandas Título
y Resumen no incluyen el encabezado de página cuando se imprimen en una página aparte.
Cabecera de Columna
Esta banda se imprime al principio de cada columna detalle. (La columna concepto se explicará
en la sección " Columnas " más adelante en este capítulo). Normalmente, las etiquetas que
contienen los nombres de las columnas del reporte de tabla se insertan en esta banda.
Cabecera de grupo
Una banda de grupo puede contener cero o más bandas de grupo, que permitan la recogida de
registros de detalles en grupos reales. Un encabezado de grupo siempre se acompaña de una
Pie de Grupo (ambos pueden ser independientemente visible o no). Diferentes propiedades
están asociados con cada grupo. Ellos determinar su comportamiento desde el punto de vista
gráfico. Es posible forzar siempre un grupo encabezado en una página nueva o en una nueva
columna y para imprimir esta banda en todas las páginas, si las bandas
por debajo de ella se desborde la página única (como un encabezado de página, pero a nivel de
grupo). Es posible fijar una altura mínima necesaria para imprimir un encabezado de grupo; si
es superior a esta altura, la cabecera de grupo se imprimirá en una página nueva. Acerca de las
bandas Grupo Encabezado y pie de grupo, que se pueden dividir en varios grupos, obteniendo
un conjunto arbitrario de los encabezados de grupo y unos pies de página.
Cuando esto sucede, las bandas se enumeran a partir de 1. (Se hablará de grupos en mayor
detalle más adelante en este capítulo).
Detalle
Una banda de detalle corresponde a cada registro que se lee por la fuente de dato. Con toda
probabilidad, la mayoría de los elementos de impresión se pondrá aquí. Un reporte puede tener
varias bandas de detalle; en otras palabras, la banda de detalle se puede dividir en un conjunto
de sub-bandas, aunque por defecto un reporte sólo tiene una banda de detalle.
Pie de grupo
El Pie de grupo completa un grupo. Por lo general, contiene campos para ver los subtotales o
elementos gráficos de separación, tales como líneas. Al igual que el detalle y las bandas de
encabezado de grupo, la Banda Pie de grupo se puede dividir en varias bandas.
Pie de Columna
La banda Pie Columna aparece al final de cada columna. Sus dimensiones no son ajustable en
tiempo de ejecución (ni siquiera si contenía elementos re- considerables tales como reportes
integrados o campos de texto con un número variable de líneas de texto).
Pie de página
El pie de página aparece en todas las páginas donde hay un encabezado de página. Al igual que
la banda de Pie de Columna, no es redimensionable en tiempo de ejecución.
Pie de última página
Si quieres sacar el pie de página en la última página del reporte diferente de los otros
pies de página, utiliza la banda Pie de última página. Si la altura de la banda es 0, se ignora y el
diseño establecido para la página común se utilizará también para la última página.
Resumen
La banda Resumen le permite insertar campos relativos a los cálculos totales, significados, o
lo que quieras insertar al final del reporte. En otros sistemas, esta banda es a menudo
llamada “Pie de reporte”.
Fondo
La banda de fondo permite crear marcas de agua y efectos similares (como un marco alrededor
de toda la página). Puede tener una altura máxima igual a la altura de la página y su contenido
aparecerá en todas las páginas sin ser influenciado por el contenido de la página definido en las
otras bandas.
No datos
Esta es una sección de reporte opcional que se imprime sólo si la fuente de datos no devuelva
ningún registro y la propiedad “Cuando no hay datos” se establece en “Ninguna sección de
datos”. Esta banda será impreso en lugar de todas las otras bandas, la altura puede ser la misma
que la página del reporte, con exclusión de los márgenes.
3.2. Campos
3.2.1 Registro de los campos desde una consulta
La manera más común para llenar un reporte es mediante una consulta. IReport ofrece varias
herramientas, incluyendo un diseñador de consultas, y una manera de recuperar
automáticamente y registrar los campos derivados de una consulta en el reporte.
Figura 3-2: Botón para abrir el diseñador
Puede abrir el diálogo de consulta haciendo clic en el ícono de cilindros en la barra de
herramientas de diseño (Figura 3-2).
Antes de abrir el diálogo de consulta, sin embargo, prestar atención a la conexión/fuente de
datos activa (el elemento seleccionado en el combo situado en la barra de herramientas
principal). Todas las operaciones realizadas por las herramientas en el cuadro de diálogo de la
consulta utilizan esa fuente de datos, de modo que debe asegurarse que seleccione la fuente de
datos correcta.
IReport no necesita definir una consulta con el fin de generar un informe. De hecho, iReport
podría obtener registros de datos a partir de la información de una fuente que no está definida
por la consulta en ejecución. En cualquier caso, aquí es donde se definen. El idioma de la consulta
puede ser una de los elementos que se enumeran en el combo en la parte superior del cuadro
de diálogo de consulta:
SQL HQL EJBQL XPath MDX (tanto la versión estándar y encapsulados XMLA )
Vamos a centrarnos en SQL. Si la fuente de datos seleccionada es una conexión JDBC, iReport
pondrá a prueba la conexión de acceso al origen de datos como se define en la consulta. Esto le
permite a iReport identificar los campos usando los metadatos de consulta en el conjunto de
resultados. Para cada campo, iReport determina el nombre y el tipo de Java especificado para
ese campo por el controlador JDBC.
Una consulta que tiene acceso a una o más tablas que contienen una gran cantidad de datos
puede requerir un largo retraso mientras el iReport explora la fuente de datos para descubrir
los nombres de los campo. Cuando haya completado la consulta automáticamente se cargarán
los campos y se mostrarán en el nodo correspondiente en el Inspector de Reporte.
En caso de un error durante la ejecución de la consulta (debido a un error de sintaxis o de una
conexión de base de datos no disponible), se mostrará un mensaje de error. La exploración de
los campos puede devolver un gran número de nombres de campo si se trabaja con tablas
complejas. Le sugiero que revise la lista de nombres descubiertos y quitar los campos que no
piensa utilizar en su informe, a fin de reducir complejidad innecesaria. Usted puede También
eliminarlos posteriormente en la vista de esquema, pero es una buena idea en este punto del
proceso de diseño para eliminar cualquier nombre de campo que usted no va a utilizar.
3.2.2 Acceso al Diseñador de consultas
IReport ofrece un sencillo diseñador de consultas visual para ayudarle a crear consultas sencillas
sin necesidad de conocer un determinado idioma. Puede acceder a la herramienta haciendo clic
en el botón Diseñador de consultas (una conexión JDBC debe estar activa y el
idioma seleccionado de la consulta debe ser SQL).
Este diseñador de consultas, proporciona una manera muy fácil e intuitiva para crear
consultas (ver Figura 3-3). Para crear una consulta necesita arrastrar las tablas necesarias en el
panel principal. Marque los campos que va a necesitar. El diseñador permite definir
combinaciones de tabla. Para unir dos tablas, arrastre el campo de una tabla sobre el campo de
otra. Para modificar el tipo de join haga clic en el cuadrado rojo en el centro de la línea del join.
Para agregar una condición, haga clic en el nodo CONDICIONES del árbol de la consulta. Para
agregar un campo a los nodos de GRUPOS y ORDENADOS POR, haga clic en un campo en el
nodo CAMPOS SELECCIONADOS.
Figura 3-3: Diseñador de consultas
3.2.3 Campos y campos de texto Para imprimir un campo en un campo de texto, tendrá que establecer la expresión y el tipo de
clase del campo de texto correctamente.
Para crear un campo de texto correspondiente, arrastre el campo que desea mostrar de la vista
Inspector de Reporte en el panel de diseño. IReport creará un nuevo campo de texto con la
expresión correcta (por ejemplo, $ F {nombre de campo}) y asigne el nombre correcto de la clase
correcto.
3.3. Trabajo con elementos
Los elementos se presentan en una paleta, que normalmente se encuentra en la parte superior
derecha de la ventana principal (véase la figura 3-4).
Figura 3-4: Paleta de elementos
Para insertar un elemento en un reporte, arrastre el elemento de la paleta en una banda del
reporte. El nuevo elemento se creará con un tamaño estándar y aparecerá en el Inspector de
Reportes. Para seleccionar el elemento, haga clic en el diseñador o en el Inspector de Reporte.
Puede ajustar la posición del elemento arrastrándolo y para modificar su tamaño, seleccione y
arrastre una esquina del marco de selección naranja. Al arrastrar o cambiar el tamaño de un
elemento, iReport sugiere lugares para alinearlo, en base a los elementos que ya están en el
panel de diseño, los límites de la banda, y (si existe) directrices.
Para obtener una mayor precisión en el movimiento, utilice las teclas de flecha para mover el
elemento de un píxel a la vez; de manera similar, usando las teclas de flecha mientras presiona
la tecla Mayúscula mueve el elemento 10 píxeles. Si necesita puntos de referencia para
posicionar y alinear los elementos en la página, se puede activar la cuadrícula en el panel de
diseño seleccionando la opción del menú VerReport Designer Mostrar cuadrícula.
Para obligar a los elementos a ajustarse a la cuadrícula, seleccione VerReport Designer
Ajustar a la cuadrícula.
Usted puede arrastrar y cambiar la posición de una línea guía en cualquier momento; esto no
tendrá ningún efecto sobre la posición del elemento. Para eliminar una línea guía, arrastre hasta
la esquina superior /izquierda del panel de diseño.
Si desea mover un elemento de su banda inicial a otra banda o un marco, o viceversa, arrastre
el nodo del elemento en el Inspector de Reporte para la nueva banda (o marco).
En la ventana del diseñador, puede arrastrar un elemento de una banda a otra banda, pero la
banda padre del elemento no cambiará. Como hemos dicho que un elemento debe estar
contenido en su banda, hay varias excepciones a esta regla. IReport le permite mover un
elemento en cualquier parte del reporte sin cambiar o actualizar la banda de los padres.
Como regla general, un elemento debe permanecer en la banda del padre; no se debe mover,
incluso parcialmente, fuera de la banda. Un error de diseño se mostrará en la Ventana
Problemas del Reporte y el este no se ejecutará. En la Figura 3-5 tenemos un elemento de texto
que tiene el título como la banda padre. Dado que el elemento se extiende hasta la banda
Cabecera de página, una advertencia sobre la posición de elemento no válida aparece en la
Ventana Problemas del Reporte.
Figura 3-5: Error de diseño en la ventana de Problemas del Reporte
Puede utilizar la hoja de propiedades para editar un elemento; por lo general se encuentra en
el lado derecho de la ventana del diseñador. La hoja de propiedades no sólo se utiliza para los
elementos; se puede utilizar para editar las propiedades de todos los componentes que
conforman el reporte, incluyendo el formato de página, las opciones de banda, parámetros,
variables y opciones de los campos, y así sucesivamente. Cuando se selecciona algo en
el diseñador o en la vista Inspector del reporte, la hoja de propiedades muestra las opciones
para el objeto seleccionado.
Figura 3-6: Hoja de propiedades para un elemento
Alternativamente, es posible seleccionar más de un elemento a la vez, manteniendo pulsada la
tecla Mayúscula y haciendo clic en todos los elementos deseados. Al especificar un valor para
una propiedad particular, se aplica ese valor a todos los elementos seleccionados. No obstante,
si dos o más elementos están seleccionados, sólo sus propiedades comunes se muestran en la
hoja de propiedades. Si los valores de las propiedades son diferentes, los campos de valor estará
en blanco (por lo general el campo se muestra vacío). Para editar las propiedades únicas de un
elemento, seleccione sólo ese elemento.
3.3.1 Gestión de Elementos con el Inspector de Reporte
El Inspector de Reporte muestra la estructura del reporte completo. El nodo raíz representa la
página; puede seleccionarlo para modificar todas las propiedades del reporte general, como
hemos visto en el capítulo anterior. Los siguientes nodos se utilizan para el estilo, los
parámetros, los campos y las variables y otros objetos de reporte.
Después de estos nodos están las bandas. Cada banda contiene los elementos. Los elementos
contenedores como marcos) pueden tener otros elementos representados como subnodos. El
orden de los elementos en el Inspector es importante porque es z-orden (la posición desde el
punto de vista de la profundidad). En otras palabras, si un elemento precede a otros elementos
en la vista Inspector, este será impreso delante de ellos.
Por favor, tenga en cuenta que algunos exportadores (como el exportador HTML) no son
compatibles con los elementos superpuestos, por lo que se omiten durante la compilación; en
otras ocasiones se pueden tener dos o más elementos superpuestos e imprimir sólo uno de
ellos, utilizando la propiedad Imprimir cuando; este es un truco sencillo para imprimir diferentes
contenidos basados en una condición.
Para cambiar el z-orden, puede mover los elementos arrastrándolos en el Inspector de Reporte,
o puede usar los elementos del menú Mover Arriba y Mover Abajo. Recuerde que los elementos
en la parte superior de la lista se imprimen en primer lugar, por lo que para llevar un elemento
a la parte delantera, es necesario moverlo hacia abajo en la lista.
Todos los elementos se pueden copiar y pegar, a excepción de los gráficos y tablas de referencias
cruzadas. Cuando se pega un elemento, se mantienen las coordenadas superior /izquierda
utilizadas en su contenedor anterior (una banda, una celda o un marco). Si el nuevo contenedor
es menor que el anterior, puede ser necesario ajustar la posición del elemento, ya que podría
estar fuera de los límites del nuevo contenedor.
El Inspector de Reporte le permite seleccionar elementos dentro del reporte, incluso si estos
elementos no son visibles en el diseñador o incluso si son difíciles de seleccionar debido a la
complejidad del reporte.
3.3.2 Herramientas de formato
Figura 3-7: Herramientas de formato para un elemento de texto
Para organizar mejor los elementos de la ventana del diseñador, se proporciona un conjunto
completo de herramientas. Para tener acceso al formato seleccione Ventana Herramientas
de Formato. Aparecerá la vista de herramientas. Cada herramienta se activa sólo cuando la
selección cumpla sus requisitos mínimos (selección simple o múltiple).
En la Tabla 3-1 se enumeran las herramientas disponibles, especificando qué tipo de selección
cada herramienta requiere (selección simple o múltiple) y explicando brevemente la función de
cada herramienta.
Tabla 3-1 Herramientas de formato
Icono Herramienta Descripción Selección
Múltiple
Alinear izquierda
Alinea los lados izquierdos al elemento primario. √
Alinear a la derecha
Alinea los lados derechos al elemento primario. √
Alinear arriba
Alinea los lados superior (o la parte superior) al elemento primario. √
Alinear abajo
Alinea los lados inferiores al elemento primario. √
Alinear eje vertical Centra horizontalmente los elementos seleccionados de acuerdo con
el elemento primario.
√
Alinear eje
horizontal
Centra verticalmente los elementos seleccionados de acuerdo con el
elemento primario.
√
Alinear a la banda
superior
Establece el valor superior a 0.
Alinear a la banda
inferior
Pone los elementos lo más posible a la banda superior de acuerdo a
la banda a la que pertenece.
Mismo ancho
Establece los elementos seleccionados en un igual a la del elemento
primario.
√
Mismo ancho (max)
Establece los elementos seleccionados en un acho igual a la del
elemento más ancho.
√
Mismo ancho (min) Establece los elementos seleccionados en un ancho igual a la del
elemento más estrecho.
√
Mismo alto
Indica la altura de los elementos seleccionado igual a la del elemento
primario.
√
Mismo alto (max)
Establece la altura de los elementos de seleccionada igual a la del
elemento más alto.
√
Mismo alto (min)
Establece la altura de los elementos de seleccionada igual a la del
elemento más bajo.
√
Mismo tamaño
Establece la dimensión elementos seleccionados a la del elemento
primario
√
Centrar
horizontalmente
(basado-banda)
Coloca horizontalmente los elementos seleccionados en el centro de
la banda
Centrar
verticalmente
(basado- banda)
Coloca verticalmente los elementos seleccionados en el centro de la
banda
Centrar en la banda Coloca los elementos en el centro de la banda
Centrar en el fondo Pone los elementos en el centro de la página en el fondo
Unir a los lados
izquierdo
Se une horizontalmente los elementos moviéndolos a la izquierda √
Unir a los lados
derecho
Se une horizontalmente los elementos moviéndolos hacia la derecha √
Icono Herramienta Descripción Selección
Múltiple
Espacio Horiz. →
Marcar igual
Distribuye igualmente el espacio horizontal entre elementos
√
Espacio Horiz. →
Aumentar
Aumenta en 5 píxeles el espacio horizontal entre los elementos
moviéndolos a la derecha
√
Espacio Horiz. →
Disminuir
Disminuye por 5 píxeles el espacio horizontal entre los elementos
moviéndolos a la izquierda
√
Espacio Horiz. →
Eliminar
Elimina el espacio horizontal entre elementos moviéndolos a la
izquierda
√
Espacio Vert. →
Marca igual
Distribuye igualmente el espacio vertical entre elementos
√
Espacio Vert. →
Aumentar
Aumenta en 5 píxeles el espacio vertical entre los elementos
(moviéndolos hacia la derecha)
√
Espacio Vert. →
Disminuir
Disminuye por 5 píxeles el espacio vertical entre los elementos
moviéndolos a la izquierda
√
Espacio Vert. →
Eliminar
Elimina el espacio vertical entre elementos moviéndolos a la
izquierda
√
Adaptarse al padre Aumenta el tamaño del elemento para que se ajuste al tamaño de su
contenedor (una banda, una celda o un marco)
Adaptarse al ancho
del padre
Aumenta el ancho del elemento a la anchura de su contenedor (un
banda, una celda o un marco)
Adaptarse al alto de
los padres
Aumenta la altura del elemento para adaptarse a la altura de su
contenedor (una banda, una celda o un marco)
Organizar como una
tabla
Alinea los elementos seleccionados por la parte de arriba y hace igual
el espacio horizontal entre ellos
3.3.3 Propiedades básicas de un elemento
Todos los elementos tienen un conjunto de propiedades o atributos comunes; que se presentan
en la vista de propiedades de los elementos (como se muestra anteriormente en la Figura 3-6).
Estos atributos se refieren a la información sobre el la posición del elemento en la página. En la
siguiente tabla describe los atributos disponibles.
Figura 3-8 muestra cómo iReport posiciona un elemento con respecto a la banda a la que
pertenece (o, más ampliamente, a su contenedor). El ancho de banda es siempre igual al ancho
de página del documento menos los márgenes izquierdo y derecho; su altura puede
cambiar en función del tipo de banda y los elementos que contiene.
Figura 3-8 Posicionando elemento
Tabla 3-2 Propiedades de posición de un Elemento
Top Esta es la distancia de la esquina superior izquierda del elemento de la parte superior del
contenedor al que pertenece el elemento.
Left Esta es la distancia de la esquina superior derecha del elemento desde el margen izquierdo del
contenedor.
Width
Esta es el ancho del elemento.
Height Esta es la altura del elemento; en realidad, esto indica un valor mínimo que puede aumentar
durante la creación de impresión de acuerdo con el valor de los otros atributos.
* Coordenadas y dimensiones se expresan siempre en píxeles en relación con una resolución de 72 píxeles por
pulgada.
Tabla 3-3 Otras Propiedades
Primer plano Este es el color con el que se imprimen los elementos de texto y las líneas y las
esquinas de los elementos se dibujan.
Fondo Este es el color con el que el elemento de fondo se llena. Dado que, por defecto,
algunos elementos son transparentes, no olvide hacer el elemento opaco.
Opaco Esta opción controla si el elemento fondo es transparente o no; la transparencia
implica sólo las partes que deben ser llenados con el fondo.
Estilo Si el usuario ha definido uno o más estilos en el informe, es posible aplicar un estilo
al elemento seleccionándolo de la lista.
Clave Es el nombre del elemento, que tiene que ser único en el informe (iReport lo propone
automáticamente), y es utilizado por los programas que necesitan para modificar
las propiedades de los campos en tiempo de ejecución.
Tipo de Posición Esta opción determina los mejores coordenadas tienen que ser considerados si la
banda cambia su altura durante el proceso de llenado. Los tres valores posibles son
los siguientes:
FixRelativeToTop
Este es el tipo de posición de pre-definido; los valores de las coordenadas nunca
cambian.
Float El elemento es empujado progresivamente hacia la parte inferior por los elementos
anteriores que aumentan su altura.
FixRelativeToBottom La distancia del elemento de la parte inferior de la banda se mantiene constante;
en general este se utiliza para las líneas que separan los registros.
Tipo de Estiramiento Este atributo define la forma de calcular la altura de los elementos durante la
elaboración de impresión; los tres valores posibles son los siguientes:
NoStretch Este es el tipo de estiramiento pre-definido, y que dicta que la altura de los
elementos debe ser mantenido igual.
RelativeToBandHeight La altura del elemento se incrementa proporcionalmente con el tamaño cada vez
mayor de la banda; este es útil para las líneas verticales que simulan bordes de la
tabla.
RelativeToTallestObject
El elemento modifica su altura de acuerdo con la deformación del elemento más
cercano: Esta opción también se utiliza con grupo de elementos, que es un
mecanismo de grupo de elementos no gestionado por iReport.
Imprimir valores repetidos Esta opción determina si se debe imprimir el elemento cuando su valor es igual al
que se utilizó en el registro anterior.
Retire la línea cuando en
blanco
Esta opción quita el espacio vertical ocupado por un objeto si el objeto no es visible;
la visibilidad elemento se determina por el valor de la expresión contenida en el
atributo Imprimir cuando expresión o en el caso de campos de texto por
el atributo Blanco cuando nulo. Piense en la página como una cuadrícula donde
se colocan los elementos, con una línea siendo el espacio que el elemento ocupa. La
figura a continuación destaca el elemento de una línea; a fin de eliminar esta línea
, todos los elementos que comparten una parte de la línea tienen que estar nulo (es
decir , que no se imprimirán)
.
Imprimir en primer banda
entera
Esta opción asegura que un elemento se imprime en la siguiente página o columna
si la banda desborda la página o columna; este tipo de garantía es útil cuando el
atributo Imprimir valores repetidos está habilitado.
Imprimir cuando detalle
desbordamientos
Esta opción imprime el elemento en la siguiente página o columna, si la totalidad
de la banda no es imprimible en la presente página o columna.
Imprimir cuando el grupo
cambie
En este cuadro combinado, se presentan todos los grupos del reporte. Si se
selecciona uno de ellos, el elemento será impreso sólo cuando la expresión asociado
con el grupo cambia, es decir, cuando se crea una nueva ruptura del grupo
seleccionado.
Imprimir cuando expresión Esto es una expresión como las que se describen en la sección 3.7, y tiene que
devolver un objeto booleano. Además de ser asociado con los elementos, esta
expresión se asocia con la bandas. Si la expresión devuelve true, el elemento está
oculto. Una expresión vacío o un valor nulo identifica implícitamente una expresión
como nuevo Boolean (true), que imprimirá el elemento incondicionalmente.
Propiedades de expresiones Estos son un conjunto de pares de clave/valor que se pueden definir para cada
elemento.
3.4 Trabajar con grupos Los grupos permiten organizar los registros de un reporte con el fin de crear algunas estructuras.
Un grupo se define a través de una expresión. JasperReports evalúa esta expresión así: un nuevo
grupo empieza cuando el valor de la expresión cambia. Una expresión puede ser representada
sólo por un campo específico (es decir, es posible que desee agrupar un conjunto de contactos
por ciudad o país), pero puede ser más complejo. Por ejemplo, es posible que desee agrupar un
conjunto de nombres de contactos por letra inicial.
Figura 3-9 Bandas de grupos
Cada grupo puede tener una o más bandas de encabezado y una o más bandas de pie de página.
Los encabezados y pies de grupo se imprimen justo antes y después de la banda de detalle.
Puede definir un número arbitrario de grupos (es decir, se puede tener un grupo de primer nivel
que contiene contactos por país y un grupo anidado que contiene los contactos en cada país por
la ciudad).
El orden de los grupos en el Inspector de reporte determina el orden de anidación de los grupos.
El orden de grupo se puede cambiar haciendo clic derecho sobre el nodo del grupo (encabezado
o pie de página) y seleccionar el elemento Mover Grupo hacia arriba o Mover Grupo hacia abajo
del menú (véase la Figura 3-10).
Figura 3-10 Cambiando el orden de los grupos
Los registros de Grupos de JasperReports son mediante la evaluación de la expresión del grupo.
Cada vez que cambia el valor de la expresión, se crea una nueva instancia del grupo. El motor
no realiza ningún registro de clasificación si no se solicita de forma explícita, por lo que siempre
cuando definan los grupos se debe prever la clasificación. Por ejemplo, si queremos agrupar un
conjunto de direcciones por país, tenemos que ordenar los registros antes de ejecutar el
informe. Podemos utilizar una consulta SQL con una cláusula ORDER BY.
Vamos a ver cómo trabajar con los grupos en un ejemplo. Supongamos que tiene una lista de
personas. ¿Quiere crear un reporte donde los nombres de las personas se agrupen por last-
name primero como en un directorio telefónico? Ejecutar iReport y abrir un nuevo informe. A
continuación, tomar los datos de una base de datos mediante una consulta SQL con la cláusula
ORDER BY (vamos a utilizar la base de datos de ejemplo proporcionado por JasperReports).
Para este ejemplo, utilice la siguiente consulta SQL:
SELECT * FROM ADDRESS ORDER BY LASTNAME, FIRSTNAME
Los registros seleccionados se ordenarán primero por el apellido y después por el nombre de
los clientes. Los campos seleccionados por la consulta debe ser ID, FIRSTNAME, LASTNAME, STREET y CITY.
Figura 3-11 Arrastrando los campos hacia la nada de detalles
Antes de continuar con la creación de su grupo, asegúrese de que todo funciona correctamente
mediante la inserción en la banda detalle los campos FIRSTNAME, STREET y CITY (moverlos
desde la vista de esquema para la banda de detalle, como se muestra en la Figura 3-11).
A continuación, cree un diseño similar al propuesto en la Figura 3-12 y la vista previa del informe.
Figura 3-12 Layout antes de añadir los grupos
El resultado debe ser similar al de la Figura 3-13.
Figura 3-13 Las direcciones no agrupadas
Aquí solo tenemos un reporte plano simple que muestra una lista ordenada de direcciones.
Vamos a proceder a agrupar los registros por la primera letra del apellido. La primera letra se
puede extraer con una simple expresión (tanto en Groovy como en JavaScript).
Aquí está:
$F{LASTNAME}.charAt(0)
Si utiliza Groovy o JavaScript como se sugiere, recuerde poner en las propiedades del documento
Para agregar el nuevo grupo en el informe, seleccione el nodo raíz del documento en la vista de
esquema y seleccione en el menú Agregar Grupo al reporte (Figura 3-14).
Figura 3-14 Añadir grupo al reporte
Esto abre un sencillo asistente (Figura 3-15). Se usa para establecer el nombre del grupo (es
decir, Primera_Letra) y añadir la expresión que se extrae de la primera letra en un String.
Figura 3-15 Primer paso del asistente de nuevo grupo
En el segundo paso (Figura 3-16) se tiene la opción de crear encabezado y pie de bandas para el
grupo. Seleccione ambos y haga clic en Terminar para completar la creación del grupo
Figura 3-15 Segundo paso del asistente de nuevo grupo
Las nuevas dos bandas (cabecera de grupo y pie de grupo) aparecerá en la ventana de diseño, y
los nodos correspondientes serán añadidos a la estructura del reporte en la vista de esquema
(Figura 3-16).
Figura 3-16 Las nuevas bandas de grupo en el panel de diseño
Cuando se agrega un grupo al documento, iReport crea una instancia en la variable
<nombre_grupo> _COUNT para el nuevo grupo. En nuestro caso, la variable se denomina
Primera_Letra_COUNT (Figura 3-17). La cual representa el número de registros procesados para
el grupo; si mostramos esta variable en un campo de texto en el pie de grupo, se mostrará el
número de registros que contiene el grupo.
Figura 3-17 El grupo en la vista de esquema
Ahora podemos añadir algo de contenido al encabezado y al pie de página del grupo. En
particular, podemos añadir la letra inicial a la que el grupo se refiere, y podemos añadir en el pie
de página la variable Primera_Letra_COUNT. Para poner la letra, sólo tiene que añadir un campo
de texto en el encabezado del grupo y utilizar la misma expresión de campo de texto como lo
hizo para el grupo. La clase del campo de texto se puede ajustar a String (porque estamos usando
Groovy o JavaScript). Si utiliza Java, la expresión para el campo de texto se debe cambiar un
poco; ya que la función charAt () devuelve un char, podemos convertir este valor en un String,
concatenando con un String vacío. (Esto es en realidad una manera sucia, pero fácil de lanzar
cualquier objeto Java en una cadena sin comprobar si el objeto es nulo). Así la expresión en Java
debe ser:
“” +$F{LASTNAME}.charAt(0)
Figura 3-18 Layout Final
El campo azul (en el pie de grupo) muestra la variable Primera_Letra_COUNT que hemos creado
arrastrando esta variable de la vista de esquema a la banda Pie de grupo. Si queremos mostrar
el mismo valor en el encabezado de grupo, tenemos que cambiar al campo de texto el tiempo
de evaluación del grupo y establecer el grupo de evaluación para Primera_Letra.
La Figura 3-19 muestra el informe final generado.
Figura 3-19 El resultado Final
3.4.1 Otras Opciones de grupo
En el ejemplo anterior, hemos aprendido cómo crear un grupo mediante el asistente de grupo,
ponemos el nombre del grupo, y la expresión de grupo. Hay muchas otras opciones que se
pueden establecer para controlar cómo se muestra un grupo. Mediante la selección de una
banda de grupo en la vista de esquema (encabezado o pie), en la hoja de propiedades, verá
todas estas opciones (Figura 3-20):
Figura 3-20 opciones de grupo
Expresión de Grupo
Esta es la expresión que JasperReports evaluarán contra cada registro. ¿Cuándo
la expresión cambie de valor, se crea un nuevo grupo. Si esta expresión es
vacío, es igual a muy, y desde una expresión nula nunca va a cambiar el valor, el resultado es
solo un encabezado de grupo y un solo pie de grupo, respectivamente, después de la primera
cabecera de la columna y antes del último pie de página de la columna.
Comenzar en una nueva columna
Si se selecciona esta opción, se fuerza un salto de columna al final del grupo (es decir, a
el inicio de un nuevo grupo); Si en el reporte hay sólo una columna, entonces, un salto de
columna se convierte en un salto de página.
Comenzar en una nueva página
Si se selecciona esta opción, se fuerza un salto de página al final del grupo (es decir, a
el inicio de un nuevo grupo).
Restablecer Número de página
Esta opción restablece el número de páginas en el comienzo de un nuevo grupo.
Reimprimir cabecera
Si se selecciona esta opción, se imprime la banda Encabezado de grupo en todas las páginas
sobre las que el contenido del grupo se imprime (si el contenido requiere más de una página
para el reporte impreso).
Altura mínima para comenzar una Nueva página
Si el valor es distinto de 0, JasperReports empieza a imprimir este grupo en una nueva
página si el espacio restante de la página actual es menor que el mínimo especificado.
Esta opción se utiliza por lo general para evitar la división de una sección de un reporte
compuesto por campos que queremos que estén juntos (como un título seguido del texto de un
párrafo).
Posición del pie de página
Esta opción controla dónde colocar las bandas de pie de página. Por defecto se colocan
justo después del final del grupo (sin dejar ningún espacio antes de la anterior
banda). Este comportamiento se puede modificar, las opciones disponibles son:
Apilar en la parte inferior: el pie de grupo se representa en la parte inferior de la página actual,
a condición de que un grupo interno que tiene este valor obligaría a los pies de grupo exteriores
a apilarse en la parte inferior de la página actual, independientemente del ajuste de pie de grupo
exterior.
Forzar en la parte inferior: el pie de grupo se representa en la parte inferior de la página actual,
a condición de que un grupo interno que tiene este valor haría que su pie de página derecho
este en el parte inferior de la página, lo que obliga a los pies de grupo externo a estar en la
página siguiente.
Intercalar en la parte inferior: el pie de grupo se representa en la parte inferior de la página
actual, a condición de que los pies de página exteriores tengan una opción de visualización de
pie de página similar a estar al final de la página, porque de lo contrario, no pueden ser obligados
a cambiar su comportamiento en modo alguno.
Mantener juntos
Este indicador se utiliza para evitar que el grupo este dividido en dos páginas o columnas, pero
solo la primera vez q se intente separar.
3.5 Trabajo con parámetros
Los parámetros son los valores que normalmente se pasan al reporte desde la aplicación que
originalmente solicitó. Pueden ser utilizados para configurar las características de un reporte
particular durante la generación de informes (por ejemplo, el valor a utilizar para una condición
en una consulta) y por presentar información adicional al reporte que no se aplican bien por la
fuente de datos (por ejemplo, un título personalizado para el informe, una ruta específica de la
aplicación para buscar imágenes, o incluso un objeto más complejo como una imagen).
Al igual que con otros objetos de informe, los parámetros deben tener un tipo de clase y deben
ser declarados en el diseño del reporte (ver Figura 3-21). El tipo de los parámetros puede ser
arbitrario, pero el nombre del parámetro debe ser único.
Figura 3-21: Propiedades de un parámetro
La propiedad Cambiar valor al cargar no se utiliza directamente por JasperReports. Es una
bandera especial para el parámetro que puede ser utilizado por aplicaciones externas; puede
examinar el modelo de reporte para descubrir lo parámetros que debe utilizar para solicitar
entrada.
La Expresión de valor predeterminado permite establecer un valor predefinido para el
parámetro. Se utilizará este valor si no se proporciona valor al parámetro desde la aplicación
que ejecuta el informe. El tipo de valor debe coincidir con el tipo declarado en Clase del
Parámetro. En esta expresión no es posible utilizar campos y/o variables, ya que el valor del
parámetro se debe establecer antes de buscar el primer registro del origen de datos.
Usted puede definir legalmente otro parámetro como el valor de Expresión de valor
predeterminado, pero este método requiere un cuidadoso diseño del reporte. IReport analiza
los parámetros en el mismo orden en el que son declarados, por lo que un parámetro de valor
por defecto debe ser declarado ante del parámetro actual. Me doy cuenta de que esto suena un
poco complicado, pero puede ser útil emplear un parámetro que depende de otro, sobre todo
si queremos procesarlo.
En la siguiente sección veremos cómo utilizar un parámetro en una consulta para especificar no
sólo el valor de un parámetro, sino una parte o incluso toda la consulta. Esto le permitirá crear
dinámicamente una consulta de entrada-dependiente para ser almacenados en un parámetro.
La propiedad Descripción es otro atributo que no es utilizado directamente por JasperReports,
pero al igual que el Cambiar valor al cargar, se puede pasar desde una aplicación externa.
Por último, al igual que con los campos, puede especificar pares de tipo nombre /valor como
propiedades de cada parámetro. Esto es sólo una manera de agregar información extra para el
parámetro, información que será utilizada por aplicaciones externas Por ejemplo, el diseñador
puede usar propiedades para incluir la descripción del parámetro en diferentes idiomas, o quizás
añadir instrucciones sobre el formato de la entrada.
3.5.1 Usar parámetros en una consulta
Generalmente, los parámetros pueden ser utilizados en la consulta asociada con un reporte
incluso si no todos los idiomas los apoyan. En este capítulo nos centraremos en el uso de
parámetros en las consultas, que es probablemente el tipo más común de consulta.
Supongamos que tenemos un reporte que muestra información acerca de un cliente. Cuando
generamos el reporte tendríamos que especificar el ID del cliente para mostrar. Con el fin de
obtener datos sobre el cliente le tenemos que pasar esta información a la consulta; es decir,
queremos filtrar la consulta para obtener sólo los datos relevantes para un ID de cliente en
particular. La consulta se vería así:
select * from clients where CUSTOMERID = $ P {miClienteId}
miClienteId es un parámetro, y la sintaxis para usar un parámetro en la consulta es la misma
que se utiliza cuando se hace referencia a un parámetro en una expresión. Sin entrar en
demasiada profundidad sobre cómo los parámetros trabajan en SQL, vamos a decir que
JasperReports interpretarán esta consulta como:
select * from clients where CustomerID = ?
El signo de interrogación es el símbolo canónico en SQL que dice “aquí va un valor proporcionado
a la instrucción SQL antes de la ejecución de la consulta”. Esto es exactamente lo que
JasperReports hará: se ejecutará la consulta, pasando el valor de cada parámetro
utilizado en la consulta a la instrucción SQL.
Este enfoque tiene una gran ventaja con respecto a la concatenación del valor del parámetro en
la cadena de consulta - que usted no tiene que preocuparse por caracteres especiales o
desinfectar su parámetro, ya que la base de datos lo hará por usted. Al mismo tiempo, este
método pone límites en el control que se tiene sobre la estructura de la consulta. Por ejemplo,
no puede especificar una parte de una consulta con un parámetro (por ejemplo, el
almacenamiento de toda la cláusula WHERE o GROUP BY). La solución es utilizar esta sintaxis
especial:
$P! {<nombre_parámetro>}
Tenga en cuenta el signo de exclamación después de $P. El signo de exclamación notifica a
JasperReports que no enlace el parámetro a un parámetro SQL (usando el signo de interrogación
(?) como en el caso anterior), sino más bien calcular el valor del parámetro y evaluarlo como una
subsección de una consulta. Por ejemplo, si usted tiene un parámetro denominado MyWhere
con el valor de “where CUSTOMERID = 5”, la consulta:
select * from clients $P! {CUSTOMERID}
se transformará en:
select * from clientes where CUSTOMERID = 5
Sin necesidad de utilizar la lógica del parámetro de SQL. El inconveniente es que tienes que estar
100 porciento seguro de que el valor del parámetro es correcto a fin de evitar un error durante
la ejecución de la consulta.
3.6 Trabajo con variables Las variables son objetos que se utilizan para almacenar los resultados de los cálculos, como
subtotales, sumas, etc. Una vez más, al igual que con los campos y parámetros, debe definir el
tipo Java de una variable cuando se declara. Para añadir una nueva variable, seleccione el nodo
de las variables en la vista de esquema y seleccione el elemento de menú Agregar variable.
Figura 3-22: Propiedades de una variable
Nombre
Este es el nombre de la variable. El nombre debe ser único (es decir, no se puede tener
dos variables con el mismo nombre). Al igual que en los campos y los parámetros, se hace
referencia a una variable utilizando la siguiente sintaxis en una expresión:
$V {<nombreDeVariable>}
Clase Variable
Este es el tipo de Java de la variable. En el cuadro combinado, se puede ver algunas de las más
tipos comunes como java.lang.String y java.lang.Double.
Cálculo
Este es el tipo de un cálculo predefinido utilizado para almacenar el resultado en la variable.
Cuando el valor predefinido es Ninguno, que significa "no realiza ningún cálculo
automáticamente. " JasperReports realiza el cálculo especificado cambiando el valor de la
variable para cada nuevo registro que se lee de la fuente de datos.
Realizar un cálculo de una variable significa evaluar su expresión (definida en el Propiedad
Expresión de Variable). Si el tipo de cálculo es Ninguno, JasperReports le asignará a la
variable el valor que el resulte de la evaluación de la expresión de la variable. Si el tipo de cálculo
es distinto de Ninguno, el resultado de la expresión representará un nuevo valor de entrada
para el cálculo elegido, y el valor de la variable será el resultado de este cálculo. Los tipos de
cálculo se muestran en la Tabla 3-4.
Tabla 3-4 Tipos de cálculo para las variables
Tipo Definición
Cuenta distintos Esta cuenta el número de los diferentes resultados de la expresión; el orden de la
expresión de evaluación no importa.
Suma Esto suma a cada iteración el valor de expresión para el valor actual de la variable.
Promedio Calcula la media aritmética de todas las expresiones recibidas en la entrada. Desde el
punto de vista del desarrollador, declarar una variable de tipo System es muy parecido
a declarar una variable en un programa, sin tener que usarlo. Alguien va a establecer
un valor para ella. Este "alguien" es por lo general un scriptlet ligado al informe o algún
otro código Java que se ejecuta a través de una expresión.
Menor Esto devuelve el valor de la expresión más baja recibida en la entrada.
Mayor Esto devuelve el valor de la expresión más alta recibida en la entrada.
Desviación Estándar
Esto devuelve la desviación estándar de todas las expresiones recibidas en la entrada.
Varianza
Esto devuelve la varianza de todas las expresiones recibidas en la entrada.
System * Esto no hace ningún cálculo, y la expresión no se evalúa. En este caso, el motor de
informes mantiene sólo el último valor establecido de esta variable en la memoria.
Restablecer tipo
Este tipo especifica cuando un valor de la variable tiene que ser reajustada al valor
inicial (o nulo si ninguna expresión de valor inicial se ha proporcionado). El concepto de
restablecimiento de variable es fundamental cuando se quiere hacer cálculos de grupo,
como los subtotales o promedios. Cuando un grupo cambia, debe restablecer el valor
de la variable y reiniciar el cálculo. Los tipos de restablecimiento se enumeran en la
Tabla 3-5.
Tabla 3-5 Restablecer tipos
Tipo de restablecimiento Descripción
Ninguno La expresión de valor inicial se ignora.
Reporte La variable se inicializa una sola vez al inicio de la creación de informes mediante el
uso de la expresión de valor inicial.
Página La variable se inicializa de nuevo en cada nueva página.
Columna La variable se inicializa de nuevo en cada nueva columna (o en cada página si el
informe está compuesto de una sola columna).
Grupo La variable se inicializa de nuevo en cada nuevo grupo ( el grupo especificado en el
atributo Restablecer Grupo)
Restablecer Grupo Especifica el grupo que determina qué variable reajustarán cuando el tipo de
restablecimiento Grupo está seleccionado.
Tipo de restablecimiento Descripción
Tipo de Incremento
Esto especifica cuando un valor de la variable tiene que ser evaluado. De forma
predeterminada, una variable es actualizada cada vez que un registro se va a buscar
al origen de datos, pero a veces el cálculo que queremos llevar a cabo debe realizarse
sólo en ciertos momentos. El incremento tipos son los mismos que los tipos de cálculo
enumerados en la Tabla 3-4.
Para aclarar el uso del tipo de incremento un poco, considere este ejemplo: contar
con un informe con una lista de nombres ordenados alfabéticamente y agrupadas por
la primera letra, tenemos el grupo para la letra A que contiene una cierta cantidad de
nombres, el grupo B y así sucesivamente a la Z. Supongamos que queremos calcular
con una variable el número medio de nombres para cada carta. Tenemos que crear
una variable que realiza un cálculo de la media de la cantidad o registros presentes
en cada grupo. Para realizar correctamente este cálculo, la variable debe actualizarse
sólo cuando la primera letra de los nombres cambia, lo que ocurre al final de cada
grupo. En este caso, el tipo de incremento debe ser Grupo
Incremento de grupo Especifica el grupo que determina el incremento de la variable si el tipo de incremento
Grupo es seleccionado
Incrementador
Personalizado
Clase Fábrica
Este es el nombre de una clase Java que implementa la interfaz
JRIncrementerFactory, que es útil para la definición de operaciones tales como
la suma de tipos no numéricos. En otras palabras, un desarrollador tiene la capacidad
de poner en práctica su cálculo personalizado.
Expresión de variable
Esta es la expresión que identifica el valor de entrada de la variable para cada
iteración. El resultado debe ser congruente con el tipo de la variable y su cálculo. Por
ejemplo, si sólo estamos contando los objetos, la expresión puede devolver cualquier
tipo de resultado, y la variable se incrementará sólo cuando se proporciona un
resultado no nulo, independientemente del tipo.
Expresión de valor inicial
Esta es una expresión usada para establecer el valor inicial para la variable. Si está en
blanco, la variable es inicializada en null
Al igual que con los parámetros, JasperReports ofrece algunas variables incorporadas (que son
gestionados directamente por el motor de informes). Usted puede leer estas variables, pero no
pueden modificarlos. Tabla 3-5 enumera las variables incorporadas.
Tabla 3-6 Variables construidas
Nombre de la variable Definición
PAGE_NUMBER Contiene el número actual de páginas. En tiempo de "informe", esta variable
contendrá el total de número de páginas.
COLUMN_NUMBER
Contiene el número actual de columnas.
REPORT_COUNT Contiene el número actual de registros que se han procesado.
PAGE_COUNT
Contiene el número actual de registros que se han procesado en la página actual.
COLUMN_COUNT Contiene el número actual de registros que se han procesado durante la creación
de la columna actual.
<nombre grupo>_COUNT Contiene el número actual de registros que se han procesado para el grupo
especificado como un prefijo de la variable.
3.7 Expresiones Aunque iReport está diseñado para ser útil para los diseñadores de informes no técnicos,
muchos ajustes en un reporte se definen mediante fórmulas (tales como las condiciones para
ocultar un elemento, cálculos especiales, procesamiento de textos, etc.) que requieren un
conocimiento mínimo de un lenguaje.
Todas las fórmulas de JasperReports se definen a través de expresiones. El lenguaje de
expresiones por defecto es Java, pero también se puede utilizar JavaScript o Groovy
3.7.1 El tipo de una expresión El tipo de una expresión es la naturaleza del valor resultante de la misma; el tipo se determina
por el contexto en el que se utiliza la expresión. Por ejemplo, si su expresión se utiliza para
evaluar una condición, el tipo de la expresión debe ser Booleano (true o false.
Desafortunadamente, JasperReports es un poco más formal y en muchos casos hay que ser muy
preciso como a la hora de establecer el tipo de su expresión. Hasta el momento, estamos
hablando de sólo tipos de Java (con independencia de la lengua utilizada). Algunos de los tipos
más importantes son:
java.lang.Boolean
java.lang.Byte
java.lang.Short
java.lang.Integer
java.lang.Long
java.lang.Float
java.lang.Double
java.lang.String
java.util.Date
java.lang.Object
3.7.2 Operadores de expresiones y métodos del objeto
Operadores en Java, Groovy y JavaScript son similares porque estos idiomas comparten la misma
sintaxis básica. Los operadores pueden ser aplicado a un único operando (operadores unitarios)
o en dos operandos (operadores binarios).
Tabla 3-7 Expresión de operadores
Operador
Descripción Ejemplo
+
Suma (que puede ser utilizado para sumar dos números o para
concatenar dos cadenas)
A + B
- Resta
A - B
/ División
A / B
%
Resto, devuelve el resto de una división entera A% B
| | Operador booleano OR A | | B
&& Operador booleano AND
A && B
== Igual * A == B
! =
No es igual * A != B
! Operador booleano NOT
! A
La tabla muestra una serie de operadores. Esta no es una lista completa. Dentro de la expresión,
la sintaxis para referirse a los parámetros, variables y campos que se definen en el reporte se
resumen en la Tabla 3-7.
Tabla 3-8 Sintaxis para referirse a los objetos del informe
Sintaxis Descripción
$ F {nombre_campo }
Especifica el campo nombre_campo ("F" significa campo).
$ V {nombre_variable }
Especifica la variable nombre_ variable.
$ P {name_parameter}
Especifica el parámetro nombre_parametro.
$ P !{ nombre_parametro} Sintaxis especial utilizado en la consulta de informes de SQL para indicar que el
parámetro no tenga que ser tratado como un valor para transferir a una sentencia
preparada, sino que representa un pedacito de la consulta.
$ R {clave_recurso} Sintaxis especial para la localización de cadenas.
A pesar de la posible complejidad de una expresión, por lo general se trata de una simple
operación que devuelve un valor. No es un fragmento de código, o un conjunto de muchas
instrucciones, y no se puede usar construcciones complejas o flujo de palabras clave de control,
tales como switches, loops, ciclos for and while, if - else.
Sea como fuere, hay una sencilla construcción de expresión if-else que es muy útil en muchas
situaciones. Una expresión es sólo una operación arbitraria (por muy complicado) que devuelve
un valor. Usted puede utilizar todos los operadores matemáticos o llamar métodos, pero en
cualquier etapa de la expresión debe representar un valor. En Java, todos estos operadores sólo
pueden aplicarse a los valores primitivos, excepto para el operador de suma (+). El operador de
suma puede ser aplicada a una expresión de cadena con el significado especial de " Concatenar”.
Así, por ejemplo:
$F{city} + “, ” + $F{state}
Y esto dará lugar a una cadena como esta:
San Francisco, California
Todos los objetos en una expresión pueden incluir métodos. Un método puede aceptar cero o
más argumentos, y puede devolver o no un valor; en una expresión se puede utilizar sólo
métodos que devuelven un valor (de lo contrario no tendría nada para regresar de su
expresión). La sintaxis de una llamada al método es:
Objeto.método(argumento1,argumento2, y así sucesivamente.
Algunos ejemplos:
Expresión Resultado
“test”.length()
4
“test”.substring(0, 3)
“tes”
“test”.startsWith(“A”)
false
“test”.substring(1, 2).startsWith(“e”) True
3.7.3 El uso de un If- Else Construir en una expresión Una manera de crear una expresión if-else-como es usando el operador especial signo de
interrogación. He aquí una muestra:
(($F{name}.length() > 50) ? $F{name}.substring(0,50) : $F{name})
La sintaxis es (<condición>)? <valor en true>: <valor en falso>. Es extremadamente útil, y la
buena noticia es que puede ser recursivo, lo que significa que el valor de verdadero y falso puede
ser representado por otra expresión que puede ser una nueva condición:
(($F{name}.length() > 50) ?
(($F{name}.startsWidth(“A”)) ? “AAAA” : “BBB”):$F{name})
Esta expresión devuelve el String " AAAA " cuando el valor del nombre del campo tiene más de
50 caracteres y comienza con A, devuelve " BBB " si se trata de más de 50 caracteres , pero no
comienza con A, y, por último , devuelve el valor del campo original, si ninguno de los dos estas
condiciones es verdadera .
A pesar de la posible complejidad de una expresión (que tienen múltiples instrucciones de if-
else y así sucesivamente), que puede ser insuficiente para definir un valor necesario. Por
ejemplo, si desea imprimir un número en números romanos o devolver el nombre del día de la
semana de una fecha, es posible transferir las elaboraciones a un método de una clase externa
en Java, que debe ser declarado como estático, como se muestra:
MyFormatter.toRomanNumber ($F {MyInteger}.intValue())
La función toRomanNumber es un método estático de la clase MyFormatter, que toma un int
como argumento (la conversión de Integer a int se hace por medio del método intValue ();
que sólo se requiere cuando se utiliza Java como el lenguaje) y devuelve la versión romana del
número.
Esta técnica se puede utilizar para muchos propósitos; por ejemplo, para leer el texto de un
campo CLOB o para agregar un valor en un HashMap (un conveniente objeto de Java que
representa un conjunto de pares llave / valor).
Capítulo 4. Estilos
Se puede ahorrar tiempo al definir el aspecto de los elementos, incluido todos los ajustes de
fuente, mediante el uso de estilos. Un estilo es un conjunto de propiedades predefinidas que se
refieren al aspecto de los elementos (como el color de fondo, los bordes, y la fuente). En lugar
de continuamente seleccionar los ajustes individuales, se puede definir un estilo
predeterminado del informe, y todas las propiedades no definidas de sus elementos referirse a
ella.
4.1 Trabajo con estilos
El Inspector de reporte muestra los estilos disponibles en la vista de esquema, en el nodo
etiquetado estilos. Para crear un nuevo estilo, clic derecho en el nodo Estilos y seleccione
Agregar estilo en el menú contextual (vea la Figura 4-1).
Figura 4-1: Añadir un nuevo estilo al documento
Para un estilo se pueden definir muchas propiedades, que se muestra en la hoja de propiedades
(Figura 4-2). El único valor de la propiedad de un estilo que se debe establecer es Nombre. Todas
las demás propiedades son opcionales.
Deja el valor por defecto como está cuando no se desea establecer un valor específico para una
propiedad. Para restaurar el valor por defecto, haga clic en el nombre de la propiedad y
seleccione Restablecer al valor por defecto. (Esto funciona con todas las propiedades de los
elementos que soportan un valor por defecto.)
Figura 4-2: Todas las propiedades de un estilo
Para aplicar un estilo a un elemento, seleccione el elemento y establezca el estilo deseado en la
hoja de propiedades (Figura 4-3).
Figura 4-3: Propiedad estilo de un elemento
Usted puede elegir un estilo específico que es el estilo predeterminado para el informe. Al
establecer un estilo predeterminado, todas las propiedades de los elementos que tenga un valor
no especificado heredará implícitamente su valor desde el estilo por defecto.
4.2 Creación de Condiciones de Estilo
El reporte se puede diseñar, de modo que un estilo cambie dinámicamente. Por ejemplo, se
puede establecer el color de primer plano (foreground) de un campo de texto para negro si un
valor particular es positiva y rojo cuando es negativo. IReport crea estilos condicionales
derivados de un estilo ya existente, para el que se crean las condiciones y se cambia algunas
propiedades.
Para aplicar una condición a un estilo, haga clic en el nodo de estilo y seleccione Agregar Estilo
condicional (vea la Figura 4-4).
Figura 4-4: Definición de un estilo condicional
Se puede volver a configurar todos los valores del estilo principal. Los nuevos valores se
utilizaran en lugar de los definidos en el padre cuando la condición sea verdadera. El nuevo estilo
condicional aparecerá en la vista de esquema. Tiene que establecer la condición (en realidad un
Expresión que devuelve un valor booleano) que será evaluada durante la prestación de los
elementos que utilizan el estilo.
En la condición de expresión se pueden utilizar todas las propiedades del objeto de informe. Por
favor, tenga en cuenta que las condiciones no pueden ser genéricos, por ejemplo, no se puede
establecer una condición como "si el número es positivo" o "si la cadena es nula." Tienes que
ser muy específico, especificando, por ejemplo, que un valor particular (campo, parámetro,
variable o cualquier expresión que implique ellos) debe ser positivo o nula, y así sucesivamente.
Un estilo puede tener un número arbitrario de estilos condicionales. Un buen ejemplo de esto
sería el diseño de un reporte para mostrar una campo determinado en un color diferente
(digamos, dependiendo del número total de pedidos realizados). Se podría establecer que el
color de primer plano sea rojo en el estilo de base, a continuación, agregar un estilo condicional
que donde utilice que cuando la variable $ {V total_orders} sea menor que el 5
que el color sea rojo, y establecer otro estilo condicional con el color de primer plano en amarillo
cuando el mismo valor este entre 6 y 10, y el verde para otro estilo condicional para cuando el
número de orden sea mayor que 20.
Figura 4-5: Color alternado para cada fila
Veamos un ejemplo de uso de un estilo condicional para lograr el efecto de tener un fondo
alterno para cada fila. El efecto se muestra en la Figura 4-5.
El truco es bastante simple. El primer paso es agregar un elemento de marco en la banda de
detalle. El marco contendrá todos los elementos de la banda, por lo que estamos utilizando la
trama como si fuera el fondo de la propia banda; De hecho, el marco debe tomar todo el espacio
disponible en la banda. Entonces todos los campos de texto serán colocados en el interior del
marco (véase la Figura 4-6 y la Figura 4-7).
Figura 4-6: Todos los elementos se colocan en el interior del marco
Figura 4-7: La vista de esquema muestra la jerarquía de los elementos
Esto debe quedar particularmente claro mirando la vista de esquema (Figura 4-7).
Primero definimos un nuevo estilo (llamémoslo Style1). Vamos a dejar todos los valores por
defecto, ya que no estamos interesados en cambiar cuando el número de fila sea impar (1, 3, 5,
etc...). Ahora añadimos un estilo condicional y establecemos como condición la expresión: ($V {REPORT_COUNT} % 2) == 0
Lo que la expresión hace es calcular el resto del conjunto por 2 (el operador % tiene esta
función). Tenemos que ver si el resto es 0. Si lo es, el número de fila actual (en poder del
REPORT_COUNT variable incorporada) es par, se utiliza el estilo condicional Style1.
Para este estilo, establecemos la propiedad de fondo a un gris claro (o cualquier otro color de
nuestra elección) y marcar la propiedad opaco (de lo contrario la propiedad anterior no tendrá
efecto). Finalmente, se aplica el estilo al elemento de marco al seleccionar el marco y
estableciendo la propiedad estilo a Style1.
Ejecute el informe. Los resultados deben ser exactamente lo que se presenta en la Figura 4-5.
4.3 Creación de una nueva plantilla
Vamos a ver cómo crear y utilizar una plantilla personalizada desde cero, a partir de un informe
vacío. En este ejemplo, vamos a crear una plantilla tabular llamada ejemplo_plantilla.jrxml. El
nombre del archivo se utiliza como el nombre de la plantilla en el Asistente del Informe. Una vez
que se crea el nuevo informe, vamos a añadirle cuatro grupos con nombre, Grupo 1, Grupo 2,
Grupo 3 y Grupo 4, y las bandas de encabezado y pie de página. Los nombres de grupo pueden
ser arbitrarios, pero es una buena práctica para el diseño de la plantilla establecer un número.
En primer lugar, vamos a crear el archivo JRXML. En el menú principal, haga clic en Nuevo y
seleccione un informe vacío. Para crear un grupo, haga clic en el nodo raíz del reporte en el
Inspector de Reporte y haga clic en Agregar Grupo al Reporte. La expresión de grupo puede estar
vacío; el asistente creará un valor adecuado para ello si se requiere uno. La Figura 4-8 muestra
un diseño simple con los cuatro grupos.
Figura 4-8: Reporte vacío con 4 grupos
Es momento de añadir los elementos de plantilla necesarios en la cabecera de grupo y bandas
de detalle. Añadir un elemento de etiqueta en todas las cabeceras de grupo, ajustando una
etiqueta de texto y un elemento de campo de texto como expresión del campo. En la Figura 4-
9, las etiquetas y el campo de texto utilizan la sintaxis GnLabel y "GnField". La plantilla que
estamos trabajando es un tipo de tabla, por lo que necesitamos proporcionar una etiqueta
elemento en el encabezado de la columna y un campo de texto en la banda de detalle (con el
texto DetailLabel y la expresión "DetailField", respectivamente).
Figura 4-9: Su plantilla personalizada
La parte obligatoria se hace ahora, para que pueda proceder a la adición de algunos gráficos
para conseguir una plantilla completa.
4.3 Instalación y Uso de la nueva plantilla
Ahora que hemos creado el JRXML para la nueva plantilla, hay que añadirlo a la lista de plantillas
disponibles. Haga clic en Herramientas → Opciones, vaya a la sección iReport, y seleccione la
`pestaña Asistente para plantillas. En la pestaña, agregar el nuevo archivo (Figura 4-10).
Figura 4-10: Nueva plantilla agregada a la lista en el asistente
Una última opción es poner la plantilla en el directorio de plantillas de iReport.
Vamos a tratar de crear un archivo con la nueva plantilla. La nueva plantilla aparece en el
selector de plantillas.
Figura 4-11: Nueva plantilla agregada en el Selector de plantillas
Seleccione la nueva plantilla (ejamplo_plantilla) e iniciará el asistente, siguiendo los pasos para
crear un nuevo informe (2.4, "Creación de su primer informe"). Para probar la plantilla
correctamente, debe utilizar todos los grupos en el asistente.
La figura 4-12 muestra el informe que resulta:
Figura 4-12: Reporte creado con la nueva plantilla
Si el resultado es correcto, podemos producir una imagen que se utilizará como una vista previa
(formato PNG o GIF). En el modo de vista previa (Figura 4-12), haga clic en el icono para
guardar la imagen de la página actual. La imagen debe estar guardado en el mismo directorio
que la plantilla y se le debe dar el mismo nombre que la plantilla (además de la extensión. png
o. gif). Abrir el selector de plantillas de nuevo, debería ver la imagen en miniatura de la plantilla.
Capítulo 5. Subreportes
Los subreportes representan una de las características más avanzadas de JasperReports.
Permiten el diseño de informes muy complejos creados mediante la inserción de uno o más
reportes en otro reporte. Todos los informes tienen que ser creados con modalidades similares.
Usted ha visto que para generar un informe que necesita tres cosas: un archivo de Jasper, un
mapa de parámetros (que puede estar vacía) para establecer un valor para los parámetros del
informe, y una fuente de datos (o una conexión JDBC) que puede estar vacío. En este capítulo,
voy a explicar cómo pasar estos tres objetos al subreporte a través del informe padre y cómo
crear conexiones dinámicas que son capaces de filtrar los registros del subreporte basado en los
datos del reporte padre. Este capítulo tiene las siguientes secciones:
Crear un subreporte Un ejemplo paso a paso Devolución de valores de un informe integrado Uso del Asistente para subreportes
5.1 Creación de un subreporte Como se señaló anteriormente, un subreporte es simplemente un informe compuesto por su
propia fuente JRXML y compilado en un archivo Jasper. En términos generales, la creación de un
subreporte es muy similar a la creación de cualquier otro informe. Hay que prestar atención sólo
a los márgenes de impresión, que se establecen por lo general a cero para subreportes porque
un subreporte está destinado a ser una parte de una página, no un documento entero. La
dimensión horizontal de la subreporte debe ser tan grande como el elemento en el que se coloca
en el reporte padre. Para insertarlo, se utiliza el elemento de la paleta Subreporte (Figura 5-1).
Figura 5-1: Subreporte en la paleta
En tiempo de diseño del elemento se representa como un rectángulo (Figura 5-2).
Figura 5-2: Subreporte insertado en la banda de Detalles
No es necesario que el elemento de subreporte sea exactamente tan grande como el informe
que vamos a utilizar como subreporte; las dimensiones del elemento no son realmente
significativas porque el subreporte ocupará todo el espacio que necesita. Usted puede pensar
en el elemento de subreporte como marcador de posición que define la posición de la esquina
superior izquierda en la cual el subreporte se alineará. Sin embargo, para evitar resultados
inesperados, siempre es mejor ser precisos.
5.1.1 Vincular un subreporte al reporte padre
Para vincular el subreporte al informe de los padres tiene que definir tres cosas:
Cómo recuperar el objeto Jasper que implementa el subreporte. Cómo alimentar al objeto con datos. Cómo establecer los valores de los parámetros del subreporte.
Toda esta información se puede definir a través de la hoja de propiedades de elemento de
subreporte. (Figura 5-3)
Figura 5-3: Vista de propiedades del elemento Subreporte
En primer lugar, echemos un vistazo a cómo se establecen los parámetros del subreporte.
5.1.2 Especificación del subreporte
Cuando añadimos un subreporte a un informe, tenemos que conocer la ubicación del archivo de
Jasper que vamos a utilizar para generar el subreporte. Nosotros indicamos a JasperReports
como localizar el archivo u objeto estableciendo la expresión subreporte. Como en muchos otros
contextos en los que las expresiones están involucrados, tenemos que establecer su tipo, es
decir, el tipo de objeto devuelto por la expresión. Es fácil de imaginar que JasperReports actuará
de manera diferente según el tipo de expresión. El tipo se fija especificando un valor para la
propiedad Clase de Expresión. Se debe seleccionar en el desplegable (Figura 5-3). La
Tabla 5-1 enumera los posibles tipos de objetos.
Tabla 5-1 Posibles valores para una Expresión de Subreporte
Valor Explicación
net.sf.jasperreports.engine.JasperReport
El archivo Jasper pre-cargado en un objeto
JasperReport.
java.io.InputStream
Una corriente abierta del archivo Jasper.
java.net.URL
Un archivo URL que identifica la ubicación del archivo
de Jasper.
java.io.File
Un objeto de archivo que identifica el archivo de Jasper.
java.lang.String El nombre del archivo de Jasper.
Si la expresión es una cadena (java.lang.String), JasperReports asumirán que el subreporte se
debe cargar desde un archivo Jasper y tratará de localizar el archivo de la misma forma que se
encuentran los recursos. Específicamente, la cadena se interpreta en un principio como un URL.
En caso de fallo (un MalformedURLException será devuelto), la cadena se interpreta como
una ruta física a un archivo; si el archivo no existe, la cadena se interpreta como un recurso
ubicado en la ruta de clases. Esto significa que el uso de una expresión de tipo String significa
que está de alguna manera tratando de especificar una ruta de archivos; opcionalmente, puede
poner su archivo de Jasper en la ruta de clases y se refieren a ella como un recurso (es decir, su
expresión será algo así como “subreporte.jasper”, suponiendo que el directorio que
contiene el archivo subreporte.jasper está en la ruta de clases).
El primer paso en la configuración de un elemento de subreporte debería estar claro: crear una
expresión que se puede utilizar para cargar el objeto Jasper que debe utilizarse para completar
la parte del subreporte en el documento. Por experiencia, el 99 por ciento de las veces será un
archivo Jasper almacenado en algún lugar del sistema de archivos. Por lo tanto, si estamos
cargando el subreporte desde el sistema de archivos, sugiero dos opciones para hacer el
la vida del diseñador y el desarrollador un poco más fácil. Ambos son muy similares a los
utilizados cuando se hizo referencia a las imágenes.
Primero, coloque el archivo subreporte en un directorio que se encuentra en la ruta de
clases. Esto le permite utilizar expresiones de subreportes muy sencillas, como una
cadena que contiene sólo el nombre del archivo subreporte (es decir,
“subreporte.jasper”). iReport siempre incluye la ruta de clases al directorio del informe
que se está ejecutando, por lo que todos los archivos de subreporte Jasper se pueden
encontrar fácilmente si se encuentran en el mismo directorio.
Segundo, parametrizar la ubicación del archivo Jasper y crear sobre la marcha la ruta
absoluta real del archivo a cargar. Esto puede ser logrado con un parámetro que
contiene el directorio principal del subreporte ( llamémoslo SUBREPORT_DIRECTORY )
y una expresión como esta:
$P {SUBREPORT_DIRECTORY} + “subreporte.jasper”
5.1.3 Especificación del origen de datos
Para que JasperReports recupere los datos y llene el subreporte, hay que configurar la fuente
de datos del subreporte. Por lo general, tenemos tres opciones:
Utilice una consulta SQL y la misma conexión JDBC como padre (caso súper fácil ); o Use otro tipo de fuente de datos (por ejemplo, un archivo XML) y algunos elementos de
orígenes de datos para crear una expresión o pasar la instancia de origen de datos
necesaria. En circunstancias muy especiales, podemos no pasar ningún dato al subreporte. Vamos
a explicar esta última opción en profundidad ya que proporciona una forma de simular
la inclusión de partes estáticas de los documentos (como encabezados, pies de página,
fondos, etc.).
Las conexiones JDBC hacen el uso de subreportes bastante simple. Una expresión de conexión
debe identificar un objeto java.sql.Connection. Por lo general, se ejecuta la consulta SQL
usando la misma conexión de base de datos como que el reporte padre; la conexión puede ser
referenciada con el parámetro integrado REPORT_CONNECTION .Debe quedar claro que si se
pasa una conexión JDBC para el subreporte, es porque hemos definido una consulta SQL en el
subreporte, una consulta que se utiliza para llenarlo.
El uso de una fuente de datos diferente a veces es necesario cuando no se está utilizando una
conexión como JDBC; es más complicado pero muy potente. Se requiere escribir una expresión
de origen de datos que devuelva una instancia JRDataSource que será utilizada para llenar el
subreporte. Dependiendo de lo que quiere lograr, se puede pasar la fuente de datos que
alimentarán el subreporte a través un parámetro, o puede definir el origen de datos de forma
dinámica cada vez que sea necesario. Si el informe de los padres se ejecuta utilizando una
fuente de datos, esta fuente de datos se almacena en el parámetro integrado
REPORT_DATASOURCE. Por otro lado, el REPORT_DATASOURCE nunca debe ser usado para
alimentar a un subreporte; una fuente de datos es un objeto consumible que es utilizable para
la alimentación de un informe sólo una vez. Por lo tanto, la técnica de parámetro no es adecuado
cuando todos los registros del informe principal tienen su propio subreporte (a menos que haya
un solo registro en el informe principal). Cuando hablamos de las fuentes de datos se verá cómo
este problema se resuelve fácilmente con fuentes de datos personalizadas.
5.1.4 Paso de Parámetros
Cuando un informe se invoca desde un programa (usando uno de los métodos fillReport,
por ejemplo), se pasa un mapa parámetros para darle valores a sus parámetros. Un enfoque
similar se utiliza para definir el valor de los parámetros del subreporte. Con los subreportes no
hay que definir un mapa (incluso, si es posible, la especificación de un Mapa Expresión de
Parámetros). El motor de reportes se hará cargo de eso, pero usted todavía puede crear un
conjunto de pares de parámetros nombre/ objeto que será utilizado para establecer los valores
de los parámetros del subreporte.
La principal ventaja de un mapa de parámetros es que los valores se pueden proporcionar como
expresiones, haciendo el mapa potencialmente dinámico. Los parámetros del subreporte se
establecen mediante la propiedad Parámetros (ver Figura 5-3). Haga clic en el botón para que
aparezca el diálogo de parámetros (ver Figura 5-4). La interfaz se explica por sí: haciendo clic en
el botón Añadir, aparecerá un cuadro de diálogo en el que puede agregar parámetros que
alimentarán el mapa los parámetros del subreporte.
Figura 5-4: Parámetros del subreporte
El nombre de parámetro tiene que ser el mismo que el declarado en el subreporte. Los nombres
distinguen entre mayúsculas y minúsculas, así que la capitalización cuenta. Si comete un error
al escribir el nombre o el parámetro insertado no se ha definido, no se genera ningún error (pero
probablemente algo no funcionará, y usted se quedará pensando por qué).
En el campo Expresión en el diálogo de parámetros del subreporte, debe proporcionar una
expresión estándar JasperReports en el que se puede utilizar los campos, parámetros y variables.
El tipo de retorno tiene que ser congruente con el tipo de parámetro declarado en el
subreporte; de otro modo, una excepción de ClassCastException se producirá en tiempo
de ejecución.
Uno de los usos más comunes de los parámetros del subreporte es pasar la clave de un registro
impreso en el informe padre con el fin de ejecutar una consulta en el subreporte a través del
cual se puede extraer de los registros a que se refiere encabezados y líneas. Por ejemplo,
digamos que usted tiene en el informe principal un conjunto de clientes, y desea mostrar
información adicional sobre ellos, tales como su información de contacto. Los subreportes
utilizarán el ID de cliente para obtener la información de contacto. El ID de cliente se debe pasar
al subreporte como parámetro y su valor va a cambiar para cada registro en el informe principal.
Según se cita a continuación, usted tiene la opción de proporcionar directamente un mapa de
parámetros para ser utilizado con el subreporte; el Mapa Expresión de Parámetros le
permite definir una expresión, el resultado de los cuales debe ser un objeto java.util.Map.
Es posible, por ejemplo, preparar un mapa diseñado para el subreporte en la aplicación, pasarlo
al informe principal utilizando un parámetro y utilizar este parámetro como una expresión (por
ejemplo, $ P {myMap}) para pasar el mapa al subreporte. También es posible pasar al subreporte
el mismo mapa de parámetros que se proporcionó al reporte padre mediante el parámetro
integrado REPORT_PARAMETERS_MAP. En este caso la expresión es:
$ P {REPORT_PARAMETERS_MAP}
Puesto que los parámetros del subreporte se pueden utilizar en conjunto con este mapa, usted
puede incluso utilizarlo para pasar parámetros comunes, tales como el nombre del usuario que
ejecuta el informe.
5.2 Un ejemplo paso a paso
Vamos a poner en práctica lo que has aprendido hasta ahora. Digamos que usted quiere imprimir
una lista de los países que han hecho pedidos y usar un subreporte con la lista de clientes en
cada país. Vamos a utilizar una conexión JDBC a la base de datos de muestra de JasperReports;
las únicas tablas involucradas son orders (para extraer los países) y address (para la
información de los clientes). Por favor, tenga en cuenta que el informe que estamos creando
podría realizarse sin necesidad de utilizar un subreporte, pero simplemente estamos tratando
de mantener las cosas simples para ilustrar el procedimiento.
1. Primero, cree un nuevo reporte vacío llamado master.jrxml. Vamos a suponer que la
conexión activa es a la base de datos de muestra JasperReports.
2. Ajuste la consulta de la siguiente manera; que está diseñada para extraer los nombres de
países, ordenadas por nombre:
select distinct shipcountry from orders order by shipcountry
3. El campo SHIPCOUNTRY debe aparecer en la vista de esquema. Arrastre el campo a la banda
de detalle, ajuste del campo de texto y el tamaño de la fuente (Figura 5-5).
Figura 5-5: Campo SHIPCOUNTRY en la banda de Detalles
4. Pruebe el reporte haciendo clic en el botón Vista previa. Usted debe obtener algo similar a la
Figura 5-6.
Figura 5-6: Lista de países
A continuación, vamos a crear el reporte que se utilizará como subreporte. El subreporte debe
tener las siguientes características:
Sin márgenes (esto no es obligatorio, pero por supuesto que no son necesarios).
Ningún parámetro debe tener el nombre del país.
La anchura debe ser congruente con el espacio que queremos reservar para este en el
informe principal; vamos a utilizar todo el ancho de la página menos los márgenes.
Un conjunto de campos de texto en la banda de detalle para mostrar el nombre y
apellido de cada cliente.
1. Crear un nuevo reporte vacío llamado subreport.jrxml (si tienes que elegir un nombre
diferente, tenerlo en cuenta, porque lo vamos a utilizar cuando se conecte el reporte principal
al subreporte).
2. Eliminar los márgenes de la página y ajustar el ancho de página(es decir, una página A4 tiene
un ancho de 595 píxeles, restando 20 píxeles del margen izquierdo y 20 del derecho, la nueva
página debe establecerse en un ancho de 555 píxeles con márgenes de 0).
3. Añadir al presente reporte un parámetro que llamaremos PAÍS. El tipo debe ajustarse a
java.lang.String y el valor por defecto a una cadena en blanco (“”) o, si lo prefiere, a un
nombre de país como “Argentina”. Este valor predeterminado se puede anular con lo que sea
que especificamos en el informe principal. Estamos asignándole al parámetro ahora sólo un
valor predeterminado en iReport (no en JasperReports) porque es obligatorio cuando se utiliza
un parámetro dentro de una consulta de reporte.
4. Abra el diálogo de consulta y escriba la consulta para seleccionar la información de los clientes
basados en el orden de los países; puede ser algo como esto:
select distinct shipname, shipcity from orders where shipcountry
=$P{PAÍS}
Estamos recibiendo todas las distintas direcciones de los clientes que hacen pedidos en el país
representados por el parámetro PAÍS.
5. iReport debería detectar los siguientes campos: SHIPNAME y SHIPCITY.
6. Pongamos ambos campos en la banda de detalle del reporte (Figura 5-7)
Figura 5-7: Diseño del subreporte
Ahora tenemos que probar este reporte. Tenemos que probar la forma en que iReport genera
el archivo Jasper que necesitamos cuando utilizamos este informe como un subreporte. Cuando
se ejecuta, preste atención a lo que muestra iReport en la vista de la consola (Figura 5-8). En
particular, prestar atención a la ubicación donde se ha almacenado el archivo Jasper. De forma
predeterminada, debe estar en la misma ubicación en la que ha guardado el archivo JRXML. En
este ejemplo, he usado el mismo directorio para las plantillas del reporte principal y el
subreporte, así que contendrá ambos master.jasper y subreport.jasper.
Figura 5-8: Salida de la ejecución del subreporte
Dependiendo del valor de PAIS, se puede obtener un informe vacío o un informe que muestra
algunos artículos. No importa mucho en este punto, sólo comprobar que se generó el archivo
Jasper.
Lo que tenemos ahora son dos informes: el maestro que muestran los nombres de los países, y
el que pronto será un subreporte, que muestra la los clientes de un país en particular. Vamos a
ponerlos juntos.
Figura 5-9: Asistente de Subreporte
Al agregar un elemento de subreporte, el Asistente para Subreportes aparece (Figura 5-9).
Cuando todos los conceptos sobre el uso de subreportes están claras, el asistente le proporciona
una manera de ahorrar algo de tiempo. Sin embargo, por ahora vamos a omitir el asistente.
1. En el asistente, seleccione la opción Sólo crear el elemento de subreporte y haga clic en
Terminar.
Figura 5-10: Elemento de subreporte en la banda de detalles
2. Ajuste el elemento de subreporte para utilizar todo el tamaño horizontal de la banda.
La dimensión vertical no es importante porque, al imprimir el informe, JasperReports usará todo
el espacio vertical necesario, sin importar el tamaño de elemento (ver Figura 5-10).
3. Seleccione el elemento de subreporte para que la hoja de propiedades muestre sus
propiedades (Figura 5-11).
Figura 5-11: Propiedades del subreporte
4. Queremos utilizar la misma conexión de base de datos que se utiliza en el informe principal
para rellenar el subreporte, por lo que pusimos en el la propiedad Tipo de conexión el valor
Utilizar una expresión de conexión. La expresión será sólo $P {REPORT_CONNECTION}.
Como se ha explicado, REPORT_CONNECTION es un parámetro integrado que hace referencia
a la conexión utilizada en el informe.
5. A continuación, definir la expresión subreporte; esta es utilizada por JasperReports para
localizar el informe que se inserta como un subreporte. Suponiendo que el archivo Jasper del
subreporte está en la ruta de clases (de una perspectiva iReport es suficiente que esté en el
mismo directorio que el informe principal), la expresión vamos a utilizar es la siguiente:
“subreport.jasper”
6. Finalmente, dado que el subreporte que estamos utilizando requiere el parámetro PAÍS,
agregue un parámetro del subreporte (haciendo clic en el botón “…” de la propiedad
Parámetros). Haga clic en Agregar y configure el nombre del parámetro de subreporte a PAÍS
(el nombre debe coincidir con el nombre del parámetro que hemos definido en el subreporte);
como expresión para el valor, elegimos el campo que contiene el nombre del país, es decir, $F
{SHIPCOUNTRY}.
7. Vista previa del reporte. Si todo se ha hecho correctamente, usted debe obtener un resultado
como el que se muestra en la Figura 5-12.
Figura 5-12: Resultado final
En este ejemplo hemos creado un informe básico y un subreporte. El número de subreportes
que se puede colocar en un informe es ilimitado, y pueden ser utilizados de forma recursiva, lo
que significa que uno subreporte puede contener otros subreportes. Usted puede crear muy
subreporte s pequeños (sólo un campo de texto) y usarlos para buscar los valores, puede utilizar
un diseño de página con dos subreportes uno al lado del otro que muestren dos listas diferentes
de valores, y así sucesivamente.
Cuando usted tiene varios subreportes, uno tras otro, asegúrese de configurar el tipo de posición
del elemento de informe a Float. De esta manera, se evita el riesgo de solapamiento de los
subreportes cuando el espacio que requieren crece. Otra sugerencia es que, al utilizar los
subreportes, uno tras otro, coloque cada subreportes en una banda diferente, la división de la
banda de detalle utilizando lo que se llama un “grupo falso”. Este es un grupo que tiene como
expresión, por ejemplo, el parámetro REPORT_COUNT, que asegura que obtendrá el
encabezado de grupo falso y bandas de pie de página para cada detalle. De esta manera, usted
optimizar la generación de informes.
5.3 Retornando valores desde un subreporte
En un informe, a menudo es útil obtener el resultado de algún tipo de cálculo que se ha realizado
en un subreporte (por ejemplo, el número de registros). JasperReports ofrece una función que
permite a los usuarios recuperar los valores desde el interior de subreporte. Este mecanismo
funciona del mismo modo que el paso de parámetros de entrada para los subreportes. La idea
es guardar los valores calculados durante el llenado del subreporte en variables en el informe
principal. Las vinculaciones entre los valores calculados y las variables locales se pueden
establecer en el subreporte la propiedad del subreporte Valores de Retorno.
Vamos a ver cómo usarlo con la muestra que hemos creado en la sección anterior. Supongamos
que queremos imprimir en el informe principal el número de ciudades que hemos encontrado
para cada país. Desde la perspectiva del subreporte, este valor está representado por la variable
REPORT_COUNT, que no es accesible directamente desde el informe principal. Así que el primer
paso es crear una variable para albergar este valor al final de la elaboración del subreporte. La
variable debe ser consistente con el valor que almacenará. En este caso, es un número entero.
1. En el informe principal, crear una nueva variable (llamémosla SUBREPORT_COUNT) que sea
de tipo java.lang.Integer y tipo de cálculo del Sistema.
2. Seleccione el elemento de subreportes y abra el diálogo de propiedades Valores de Retorno
haciendo clic en el botón correspondiente “…” Figura 5-13).
Figura 5-13: Diálogo de Valores de retorno
3. Haga clic en el botón Agregar para crear el nuevo valor de retorno y aparecerá el diálogo
Agregar/Modificar variable (Figura 5-14).
Figura 5-14: Diálogo de Agregar/Modificar variable
4. Seleccione un valor calculado a partir de las variables integradas del subreporte
(REPORT_COUNT), así como la variable local que contendrá los valores devueltos por la variable
(SUBREPORT_COUNT).
5. A continuación, seleccione un tipo de cálculo. Si desea que un valor de un subreporte sea
devuelto tal como es, seleccione el tipo Nada. De lo contrario, varios tipos de cálculo pueden
ser seleccionados. Por ejemplo, si el valor deseado es el promedio de la cantidad de registros
dentro de un informe integrado que se invoca repetidamente, establezca el tipo de cálculo a
Promedio.
El valor que viene del subreporte sólo está disponible cuando se imprimen todas las bandas que
contiene el subreporte. Si necesita imprimir este valor utilizando un campo de texto colocado
en la misma banda que el subreporte, defina el Tiempo de evaluación del campo de texto en
Banda (Figura 5-15).
Figura 5-15: Un campo de texto que muestra un valor de retorno del subreporte
La vista previa del reporte debe ser así (Figura 5-16):
Figura 5-16: Resultado final
5.4 Uso del Asistente de Subreporte
Para simplificar la inserción de un subreporte, un asistente para la creación de subreporte se
inicia automáticamente cuando se agrega un elemento subreporte a un informe.
Figura 5-17: Asistente para la creación de subreportes
Usted puede utilizar el Asistente de Subreporte, que se muestra en la Figura 5-17, para crear un
nuevo informe que será referenciado como subreporte o para hacer referencia a un informe
existente. En este último caso, si el informe que usted elija contiene uno o más parámetros, el
asistente proporciona una manera fácil de definir valores para ellos.
5.4.1 Crear un nuevo reporte mediante el Asistente de Subreporte
Si va a agregar un subreporte al informe actual, el Asistente de Subreporte puede crear el
informe que se utilizará como subreporte. Los pasos para crear el nuevo informe son muy
similares a los que se siguen en el Asistente para informes:
1. Seleccione una conexión u origen de datos. Si el origen de datos requiere una consulta (tales
como JDBC o una conexión Hibernate), puede escribir en el área de texto o cargarlo desde un
archivo.
2. Seleccione los campos.
3. Defina agrupación.
4. Seleccione el diseño.
5. Defina la expresión de subreporte.
6. Defina la expresión de conexión.
La expresión de subreporte se utiliza para hacer referencia al archivo Jasper del subreporte. El
asistente le permite hacer esto de dos maneras:
Guarde la parte de la ruta de la URL subreporte en un parámetro, como se muestra en
la Figura 5-18, para que sea modificable en tiempo de ejecución estableciendo un valor
diferente para el parámetro (el camino del subreporte es el valor predeterminado); o Guardar la ruta completa en la expresión.
Figura 5-18: Expresión de Subreporte
Si elige la segunda opción, la expresión almacenará toda la ruta absoluta al archivo Jasper del
subreporte. Esto asegura que todo va a trabajar en iReport, pero no es muy conveniente en
otros entornos. Por esta razón, sugiero que modifique la expresión utilizando el método que
descrito en la sección 5.1.2 “Especificación del subreporte”.
El subreporte no se compila al crearlo. Para probar su informe, primero debe obtener una vista
previa. Esto obliga a ser compilado. Cuando se crea un nuevo subreporte, no puede especificar
los parámetros utilizando el asistente. Usted será capaz de añadir parámetros y utilizar
en la consulta subreporte después que el informe se crea. Así que en este punto, para filtrar la
consulta subreporte siga estos pasos:
1. Añadir un parámetro al informe que implementa el subreporte.
2. Utilice este parámetro en la consulta con la típica sintaxis $ P {MyParam} (o $!P {MyParam}
si el parámetro debe ser concatenado con la consulta como está).
3. En el informe principal, seleccione el elemento de subreporte y añadir una entrada en la lista
de parámetros del subreporte. El nuevo parámetro del subreporte debe ser llamado, como la
contraparte en el subreporte, y su valor debe ser definido mediante una expresión (véase el
sección 5.1.4, “Paso de parámetros).
4. Si el subreporte no se basa en una sentencia de SQL o una consulta HQL, aún tiene que
establecer la expresión del origen de los datos del subreporte para ejecutar correctamente su
informe.
5. Como se mencionó anteriormente, puede utilizar el Asistente de Subreporte para crear un
nuevo informe que se referenciará como subreporte o para hacer referencia a un informe
existente. En este último caso, si el informe elegido contiene uno o más parámetros, el asistente
proporciona una manera sencilla de definir un valor para cada uno.
5.4.2 Especificación de un reporte existente en el Asistente de
Subreporte
Puede apuntar a un informe existente como subreporte con el Asistente de Subreporte. El
primer paso es seleccionar un JRXML o Jasper en la primera pantalla del asistente. El segundo
paso del asistente gestiona expresiones para la conexión o la fuente de datos utilizada para
llenar el subreporte (Figura 5-19).
Figura 5-19: Segunda pantalla del asistente
Para seleccionar una conexión:
Usted puede seleccionar Usar la misma conexión que se utiliza para rellenar el informe
principal cuando se usa un subreporte basado en JDBC. La conexión JDBC se pasa al
subreporte para ejecutarlo.
Para especificar una conexión JDBC diferente, seleccione Utilizar otra conexión.
Para utilizar un objeto JRDataSource para llenar el subreporte, seleccione Usar una
expresión JRDataSource y escribir una expresión capaz de devolver un objeto
JRDataSource.
Seleccione Usar una fuente de datos vacía para definir la expresión de origen de datos
a la nueva JREmptyDataSource (). Eso crea una fuente de datos especial que
proporciona (cuando se declaran de esta manera) un registro único con todos los valores
de los campos establecidos en null. Es muy útil cuando se utiliza el subreporte para
mostrar contenido estático.
En algunos casos es posible que desee evitar el uso de cualquier conexión o fuente de
datos, como por ejemplo cuando se está visualizando el contenido estático. Por lo
general, una fuente de datos o una conexión siempre es necesario para evitar que el
subreporte esté en blanco. Cuando un subreporte no requiere una fuente de datos, sin
embargo, se da a entender que la propiedad de informe Cuando ningún tipo de datos
se establece en Sin Detalles o no Sección de Datos para garantizar que al menos una
parte del documento se imprime en realidad.
Si el reporte seleccionado contiene parámetros, se muestran al lado (Figura 5-20). Para cada
parámetro, se puede establecer un valor por la elección de un objeto a partir del combo.
Por supuesto, usted puede escribir su propia expresión, pero no se proporciona ningún
editor de expresiones en este contexto.
Figura 5-20: Establecer los parámetros del subreporte usando el asistente
Puede omitir este paso y editar los parámetros del subreporte posteriormente utilizando el
método canónico explicados anteriormente en este capítulo (5.1.4, "Paso de Parámetros").
Por último, debe designar la forma de generar la expresión del subreporte. Del mismo modo
que para un nuevo subreporte, hay dos opciones: almacenar el camino en un parámetro para
ajustar de forma dinámica o establecer una ruta no modificable (ver Figura 5-21). Una vez más,
todas las opciones se pueden modificar después de salir del Asistente para subreportes.
Capítulo 6. Gráficos JasperReports proporciona la capacidad de hacer los gráficos dentro de un reporte de diferentes
maneras. Usted puede utilizar JFreeChart, una poderosa biblioteca de generación gráfica de
código abierto, o partir de la versión 5.0 se puede utilizar gráficos de HTML5.
En un gráfico, es posible imprimir los datos procedentes de la base de datos principal o de un
sub conjunto de datos (vamos a tratar con sub conjunto de datos en Capítulo 14). Esto le permite
incluir diferentes graficos en un documento sin utilizar subreportes.
JasperReports es compatible con una amplia variedad de tipos de gráficos: Área, Bar, Bar en 3D,
burbuja, línea, circular, circular 3D, gráfico de dispersión, barras apiladas,
Barra apilada en 3D, Series de Tiempo, etc. Un gráfico de múltiples ejes se puede utilizar para
agregar múltiples gráficos en uno solo.
6.1 Creación de un gráfico simple
En esta sección, aprenderá cómo utilizar la herramienta para gráficos para crear un reporte que
contenga un gráfico circular 3D.Se utilizará la base de datos de ejemplo de JasperReports para
este ejemplo:
1. Cree un nuevo documento vacío.
2. Abra el cuadro de diálogo Consulta del reporte (Figura 6-1) haciendo click en el botón que
representa un cilindro en la barra de herramientas de diseño.
Figura 6-1: Ventana de la consulta
3. Utilice esta consulta sencilla para mostrar el número de pedidos en diferentes países: select COUNT (*) as orders, shipcountry from orders group by shipcountry
4. Confirme la consulta haciendo clic en Aceptar. IReport registrará los campos de consulta-
seleccionado.
5. Coloque los campos en la banda de detalle arrastrándolos desde la vista de esquema (Figura
6-2). Esto creará una pequeña tabla con los valores que queremos mostrar en el gráfico.
Figura 6-2: Diseño inicial
6 Reorganizar las bandas y ampliar el resumen; aquí es donde vamos a colocar nuestro nuevo
gráfico.
7. Seleccione la herramienta Gráfico y arrástrela hasta la banda de resumen. Cuando se agrega
un nuevo elemento gráfico a un informe, iReport muestra una ventana de selección de grafico
desde la que se puede elegir el tipo de gráfico (Figura 6-3).
Figura 6-3: ventana de selección de grafico
8. Seleccione el icono Pie 3D y haga clic en Aceptar. Figura 6-4 es un ejemplo de una imagen
genérica para mostrar más o menos donde el gráfico se mostrará. IReport no muestra datos en
tiempo real y gráficos en el diseñador.
Figura 6-4: El gráfico se coloca en la banda Resumen
Ahora tenemos que configurar el grafico.
9. Haga clic en el gráfico y seleccione la opción del menú Datos del gráfico para que la ventana
Detalles de Gráfico se abra (Figura 6-5). En esta ventana puede seleccionar los datos que se
utilizará con el fin de crear el gráfico.
10. En el combo box Tipo Conjunto de datos, seleccione conjunto de datos del Pie. Esta lista
desplegable le permite especificar los tipos de conjuntos de datos para generar el gráfico. Por lo
general, un solo tipo de conjunto de datos está disponible, excepto cuando se genera un gráfico
XY de barras.
11. En la pestaña Conjunto de datos, se puede definir el conjunto de datos en el contexto del
informe. Específicamente, restablecer Tipo y restablecer grupo lo que permitirá restablecer
periódicamente el conjunto de datos. Esto es útil, por ejemplo, al resumir los datos en relación
en una agrupación especial. Incrementar Tipo e Incrementar Grupo específica los eventos que
determinan cuándo se deben añadir nuevos valores al conjunto de datos .Por defecto, cada
registro del conjunto de datos se utiliza para rellenar el grafico, cada uno corresponde a un valor
impreso en el gráfico. Este comportamiento se puede cambiar, forzando el motor a recoger los
datos del grafico en un momento determinado (por ejemplo, cada vez que se alcanza el final de
un grupo).
La expresión de filtro permite añadir un indicador para determinar si se debe agregar un registro
al conjunto de registros diseñado para llenar el gráfico. Esta expresión debe devolver un valor
booleano. IReport considera que una cadena en blanco significa "agregar todos
los registros”.
Figura 6-5: Ventana Detalles del grafico
Para este ejemplo, establezca el tipo de restablecimiento al reporte ya que no desea que los
datos se restablezcan, y deje el Tipo Incremento establecido en Ninguno para que cada registro
se añada al conjunto de datos.
12. En la pestaña Detalles, escriba una expresión para asociar cada valor con el origen de datos.
Para el tipo de gráfico 3D, se pueden introducir tres expresiones: llave, el valor y la etiqueta
(Figura 6-6).
Llave: debe ser un valor único para identificar un segmento del gráfico circular. Si un
valor llave se repite, la etiqueta y valores previamente asociados con esa llave se
sobrescribe. Una llave no puede ser nulo.
Valor: especifica el valor numérico asociado a la llave.
Etiqueta: le permite especificar una etiqueta para cada sector del gráfico circular. Esta
expresión es opcional, y el valor predeterminado es el valor de la llave.
Figura 6-6: Configuración del conjunto de datos
13. La configuración de este simple grafico ya está completa, y podemos obtener una vista previa
del reporte para ver el resultado, como se muestra en la Figura 6-7.
Figura 6-7: Reporte Final
14. En este ejemplo, entre las expresiones que se muestran en la Figura 6-6, y a continuación,
cierre el cuadro de diálogo.
En este caso, cada sector representa un país, y el valor de la porción es el total del envío para
ese país. El cuadro en sí se encarga de calcular el envío total para todos los países y la creación
del tamaño del segmento con respecto al total.
6.2 Valor hipervínculos
Algunos tipos de conjuntos de datos proporcionan una forma de asignar un hipervínculo al valor
representado en el gráfico, permitiendo al usuario abrir una página web o navegar a través del
reporte haciendo clic en el gráfico. Para establecer los parámetros de hipervínculo,
vaya a la pestaña Hipervínculo en la pestaña Detalles del cuadro de diálogo Detalles de gráfico,
como se muestra en la siguiente figura.
Figura 6-8: HiperEnlace para una porción del conjunto de datos del grafico
El área de clic-habilitado depende del tipo de gráfico. Los gráficos de sectores, el hipervínculo
está vinculado a cada parte del pastel; para los gráficos de barras, las áreas de clic habilitadas
son las propias barras.
Recordemos que los hipervínculos incluyen expresiones para hacer referencia a todos los
campos, variables y parámetros del conjunto de datos utilizado por un gráfico.
Capítulo 7. Tablas Cruzadas
7.1 Uso del Asistente de tablas de referencias cruzadas Cuando se agrega un elemento de tabla de referencias cruzadas a un informe, iReport muestra
el Asistente de tablas de referencias cruzadas automáticamente. Para entender cómo trabajar
con tablas de referencias cruzadas, le guiará a través de la creación de una con el asistente.
1. Comience con un reporte en blanco que contenga esta consulta:
select * from orders
Incluir la tabla de referencias cruzadas al final del informe, en la banda de resumen.
2. Arrastre la herramienta de referencias cruzadas en la banda de resumen. Aparece la primera
pantalla del Asistente para tablas de referencias cruzadas.
Figura 7-1: Primer paso en el asistente de Tabla cruzada
3. Seleccione el conjunto de datos para llenar la tabla de referencias cruzadas. Especifique el
conjunto de datos del reporte principal (como se muestra en la Figura 7-1).
4. Haga clic en Siguiente para ir al siguiente paso.
5. En la segunda pantalla, usted tiene que definir al menos un grupo de filas. Para los propósitos
de este ejemplo, vamos a agrupar todos los registros por País Destinatario, como se muestra en
la Figura 7-2.
Figura 7-2: Segundo paso: definición de los grupos de filas
Agrupar los resultados por País Destinatario en cada fila de la tabla de referencias cruzadas en
referencia a un país específico. Al contrario que en el reporte principal, JasperReports ordenar
los datos uno mismo, aunque se puede desactivar esta función para acelerar el proceso de
llenado si sus datos están ya ordenados.
6. Haga clic en Siguiente para pasar a la tercera fase (Figura 7-3). Agrupar los datos por el campo
Fecha Envío. En concreto, se utiliza una función que devuelve el año de la fecha, por lo tanto la
agrupación de los pedidos por año.
Figura 7-3: Definición de los grupos de columnas
Como se puede ver en la Figura 7-3, siempre que tenga un campo de tiempo (fecha, hora), se
puede utilizar una función de agregación basada en el tiempo (como año, mes, semana o día), o
se puede tratar como un valor normal (en cuyo caso se puede usar la función de agregación
única para agrupar los registros que tienen el mismo valor).
7. Haga clic en Siguiente para pasar a la siguiente etapa.
8. Es el momento de definir los datos de detalle. Normalmente, el detalle (o medida) es el
resultado de una función de agregación como el conteo de las órdenes por país por año, o la
suma de la carga para la misma combinación (país / año). Tendrán que elegir para imprimir el
número de pedidos realizados especificando ORDERID (campo) en el combo box Medida y
COUNT en el combo box Función (vea la Figura 7-4).
9. Una vez más, haga clic en Siguiente para continuar.
Figura 7-4: Definición de la medida
10. En el último paso, puede configurar las opciones para el diseño de tabla de referencias
cruzadas. Puede indicar si desea ver las líneas de cuadrícula, el uso del color establecido para
distinguir los totales, encabezados y celdas de detalle, y el total de las filas y columnas.
Para este ejemplo, seleccione todas las opciones del cuadro de control, como se muestra en la
Figura 7-5, y haga clic en Finalizar.
Figura 7-5: Algunas opciones de la tabla cruzada
Tenga en cuenta que al agregar una tabla de referencias cruzadas en el informe, iReport crea
una ficha correspondiente en la ventana de diseño. Esta ficha es la del diseñador de tabla de
referencias cruzadas para el nuevo elemento de tabla de referencias cruzadas.
Figura 7-6: Vista Esquema en árbol - detalles de la tabla cruzada
En la vista de esquema, el elemento de tabla de referencias cruzadas muestra toda la estructura
de tabla de referencias cruzadas, incluyendo los parámetros de referencias cruzadas y la fila y
grupos de columnas, las medidas y las celdas (ver Figura 7-6).
Figura 7-7: Nuestro primer Tabla cruzada
Cuando se ejecuta el nuevo reporte que debe obtener un resultado similar al que se muestra en
la Figura 7-7. La última columna contiene el total de cada fila, a través de todas las columnas. La
última fila contiene el total de cada columna, a través de todas las filas. Finalmente, la última
celda (en la esquina de abajo a la derecha) contiene el total combinado de todos los pedidos
(830).
7.2 Trabajar con columnas, filas y Medidas Una tabla de referencias cruzadas debe tener al menos un grupo de filas y un grupo de columnas.
Las filas y columnas se definen por estos grupos. Cada grupo de filas y columnas puede ser
totalizado. La siguiente es una tabla de referencias cruzadas de base con un grupo de la columna
y un grupo fila; los grupos se totalizaron:
Cuando se agrega un grupo de filas, iReport añade la fila con una cabecera y subtotal. La
tabla de referencias cruzadas aparece como sigue:
Agregar un grupo de columnas muestra un resultado similar, con una nueva columna,
encabezado y subtotal:
Figura 7-8: Agregar grupo de fila
Los grupos de filas y de columnas se muestran en la vista de esquema. Para agregar un grupo de
filas, por ejemplo, haga clic en el nodo filas y seleccione Agregar grupo de filas (ver Figura 7-8).
El nuevo grupo aparece en la vista de esquema y las celdas relativas se crean en el diseñador de
tabla de referencias cruzadas. Tiene que establecer una expresión Bucket que es una expresión
utilizada para agrupar las filas. Por ejemplo, se puede agregar un grupo de filas para mostrar las
ciudades de cada país. En ese caso, una expresión válida podría ser el campo SHIPCITY (la
expresión se vería como $ F {SHIPCITY}). La expresión se debe establecer en las propiedades de
grupo de filas.
Figura 7-9: Layout después de la nueva fila
La expresión es la única información que se debe establecer para cada nuevo grupo. Otras de
las configuraciones de tablas de referencias cruzadas son las siguientes:
Posición total
Define la presencia de una fila para mostrar los subtotales
Orden
Orden de los valores del grupo (ascendente o descendente)
Expresión Comparador
Devuelve una instancia de java.util.Comparator que debe utilizarse para ordenar los valores
Utilizando el diseñador, los tamaños de columna y fila se pueden modificar directamente
arrastrando los bordes de las celdas. El contenido de cada celda debe estar completamente
contenida en la celda (más o menos como ocurre con las bandas en el reporte principal).
Cuando se agrega una fila o una columna a una tabla de referencias cruzadas, iReport crea una
variable especial que se refiere al valor de la expresión bucket. Tiene el mismo nombre que el
grupo nuevo. Cuando se edita la expresión de un campo de texto de los elementos en una celda,
la expresión editor aparece. Enumera todos los objetos que se pueden mostrar en una celda de
tabla de referencias cruzadas (ver Figura 7-10).
Figura 7-10: Los objetos que se pueden utilizar en una expresión de campo de texto de una tabla cruzada
Cuando se crea un nuevo grupo, iReport crea la nueva celda de encabezado para el grupo; en el
grupo, iReport utiliza un nuevo campo de texto para mostrar el valor del grupo (usando una
variable incorporada que tiene el mismo nombre que el grupo) y se llena la nueva celda con un
campo de texto para que aparezca la primera medida disponible en la tabla de referencias
cruzadas.
Si la posición total se establece en un valor distinto de Ninguno (por lo general fin), iReport
inserta otras celda como sede de los subtotales. Aquellas celdas se crean vacíos, así que de
nuevo debe arrastrar un elemento de campo de texto en cada celda y establecer una adecuada
expresión de los datos a mostrar (ver Figura 7-11).
Figura 7-11: celdas y filas totales vacía
El orden de los grupos se puede cambiar arrastrando en la vista de esquema. Tenga en cuenta
que el diseño de tablas de referencias cruzadas es estrictamente atado a los ajustes de orden de
grupo.
7.2.1 Modificando las celdas Las Tabla de referencias cruzadas tienen encabezado de celdas, totales de celdas, detalle de
celdas, y celdas sin datos (opcional). Cada intersección entre una fila y una columna define una
celda. Las celdas pueden contener un conjunto de elementos, tales como campos de texto,
textos estáticos, rectángulos y las imágenes, pero no pueden contener un subreporte, un gráfico
u otra tabla de referencias cruzadas. La figura 7-11 muestra una tabla de referencias cruzadas
con algunas celdas de color y varios campos de texto.
Puede modificar el color de fondo y los bordes de cada celda: haga clic en la celda que desea
cambiar para mostrar en el menú y seleccione Relleno y bordes para modificar los bordes de la
celda (ver Figura 7-12).
Figura 7-12: Modificando bordes de las celdas
El fondo de la celda y el estilo se pueden modificar en la hoja de propiedades cuando se
selecciona un nodo de celda en la vista de esquema (ver Figura 7-13).
Figura 7-13: Estilo y fondo de celda
7.2.2 Comprendiendo las Medidas Una medida es un objeto similar a una variable. Siempre es, de alguna manera, el resultado de
un cálculo realizado en un valor para cada una fila y columna de grupo que se cruzan en una
celda. Expresiones de elementos en una tabla de referencias cruzadas, tales como imprimir-
cuando y expresiones de campos de texto, sólo pueden contener medidas. En este contexto, no
se puede utilizar campos, variables o parámetros directamente; Siempre tenga que utilizar una
medida.
Para crear una medida, haga clic en el nodo medidas en la vista de esquema y seleccione Agregar
Medida (ver Figura 7-14). IReport añade la nueva medida a la vista de esquema.
Figura 7-14: Agregar medida
Del mismo modo que cuando se crea un nuevo grupo, que tendrá que definir una expresión para
la medida. La forma más sencilla de mostrar una nueva medida es utilizar un campo de texto.
Arrastre un elemento de campo de texto en una celda y establezca la expresión de campo de
texto adecuado (por ejemplo, con una medida de nombre como $V {Promedio_mercancia}) y la
clase de expresión apropiada para el campo de texto, el cual debe ser coherente con el tipo de
medida.
Hay varias opciones que puede utilizar para establecer una medida. Además del nombre, clase,
y la expresión, se puede establecer el tipo de cálculo. Si los tipos de cálculo disponibles no son
suficientes, se puede proporcionar una clase personalizada Incrementador por medio de una
Factory que devuelve una instancia de esa clase (factory debe implementar la interfaz
net.sf.jasperreports.engine.fil.JRIncrementerFactory).
Figura 7-15: Agregar medida
Si desea mostrar su medida como porcentaje general del total, se puede establecer la propiedad
Porcentaje de tipo Gran Total.
Por último, se puede especificar una clase del calculador personalizado para realizar el cálculo
de porcentaje (la clase debe usar la interfaz
net.sf.jasperreports.crosstabs.fill.JRPercentageCalculator).
7.3 Modificación de las Propiedades de una tabla de
referencias cruzadas
Para ver las propiedades de la tabla de referencias cruzadas en la hoja de propiedades,
seleccione el nodo de la tabla de referencias cruzadas en la vista de esquema (ver Figura 15-16).
Figura 7-16: Propiedades de la tabla cruzada
A continuación se presenta un breve resumen de algunas de las opciones de este cuadro de
diálogo:
Repetir encabezados de columna
Si se selecciona, los títulos de las columnas se imprimen en cada página cuando la tabla de
referencias cruzadas se extiende por páginas adicionales.
Repetir encabezados de fila
Si se selecciona, los encabezados de fila se imprimen en cada página cuando la tabla de
referencias cruzadas se extiende por páginas adicionales.
Salto de columna Offset
Especifica el espacio entre dos trozos de una tabla cruzada cuando la tabla de referencias
cruzadas excede el ancho de página (ver Figura 7-17).
Figura 7-17: Salto de columna Offset
7.4 Parámetros en las tablas de referencias cruzadas Los Parámetros en las tablas de referencias cruzadas pueden usarse en las expresiones de los
elementos que se muestran en la tabla de referencias cruzadas. Pueden ser definidos y
gestionados a través de la vista de esquema (ver Figura 7-18).
Figura 7-18: Parámetros de la tabla cruzada
Para agregar un parámetro, haga clic en el nodo Parámetros en el elemento de tabla cruzada y
seleccione Agregar parámetros. La expresión de parámetro para un parámetro de tabla de
referencias cruzadas sólo puede utilizar los objetos del reporte principal, no desde un sub
conjunto de datos opcional utilizado para alimentar a la tabla de referencias cruzadas. Una vez
más, estos parámetros están diseñados para ser utilizados en los elementos de tabla de
referencias cruzadas. Ellos no son el mismo que los parámetros de conjunto de datos que se
utilizan en las expresiones, en el contexto tabla de referencias cruzadas, para filtrar una consulta
y calcular los valores.
Puede utilizar el mapa para establecer el valor de los parámetros de referencias cruzadas
declaradas en tiempo de ejecución. En este caso, tendrá que proporcionar expresión de un mapa
de parámetros válida en las propiedades de referencias cruzadas.
7.5 Trabajar con los datos de las tablas de referencias
cruzadas Como se mencionó anteriormente, puede llenar una tabla de referencias cruzadas con datos del
reporte principal o desde un subconjunto de datos. En este último caso, se
debe especificar el conjunto de datos de gestión en la ventana de datos de la tabla de referencias
cruzadas, al que se accede haciendo clic derecho en el nodo de tabla de referencias cruzadas (o
en el Elemento de tabla de referencias cruzadas en el diseñador) y seleccionando la opción de
menú de datos de la tabla de referencias cruzadas (ver Figura 7-19).
Figura 7-19: Datos de la tabla cruzada
La interfaz de la ventana es similar a la utilizada para proporcionar datos para un gráfico. El
mecanismo para proporcionar los datos a una tabla de referencias cruzadas es muy similar.
Si los datos están previamente ordenados, puede seleccionar la opción de datos pre-ordenados
para acelerar el proceso de llenado.
Puede utilizar Reset Type/Reset Group and Increment Type/Increment Group para definir el
momento para restablecer los datos recopilados o agregar un registro a su conjunto de datos.
La expresión Incremento Cuando es un indicador para determinar si se debe agregar un registro
al conjunto de registros que se alimenta de la tabla. Esta expresión debe devolver un valor
booleano. IReport considera que una cadena en blanco significa “agregar todos los registros."
7.6 Uso de las variables totales en las tablas de referencias
cruzadas Las variables totales de las tablas de referencias cruzadas (ver Figura 7-20) están incorporadas
en objetos que se pueden usar dentro de expresiones de campos de texto de tablas de
referencias cruzadas para combinar los datos a diferentes niveles de agregación (por ejemplo,
para calcular un porcentaje). Para cada medida, JasperReports crea variables que almacenan el
valor total de la medida por cada grupo de filas / columnas.
Figura 7-20: Las variables totales se sugieren en el editor de expresiones
El siguiente ejemplo es un reporte simple que muestra el número de pedidos enviados en varias
regiones durante varios años.
La figura 7-21 muestra el diseño de tabla cruzada simple para el ejemplo, y en la figura 7-22
muestra los resultados de la impresión.
Figura 7-21: Layout simple de tabla cruzada
Figura 7-22: Resultado del Layout simple
Para calcular el porcentaje de los pedidos realizados en cada región y por año, añadir un campo
de texto con la siguiente expresión Java:
new Double(
$V{ORDERIDMeasure}.doubleValue()
/
$V{ORDERIDMeasure_ORDERDATE_ALL.doubleValue()
)
La fórmula básica para implementar es:
(Número de los pedidos realizados en esta región y en este año) / (Todas las órdenes enviadas
en esta región)
Un porcentaje debe ser tratado como un número de punto flotante. Por esta razón, extraer los
valores de doble escalares de las medidas ORDERIDMeasure y
ORDERIDMeasure_ORDERDATE_ALL objetos incluso si hay objetos de tipo de clase Entero
(en realidad, un porcentaje deriva de un número entre 0 y 1, multiplicado por 100).
Para incluir el valor de la expresión en forma de porcentaje, establezca el valor del atributo de
patrón de campo de texto a #, # # 0,00%.
La figura 7-23 muestra la tabla de referencias cruzadas modificado en la ventana de diseño, y en
la figura 7-24 muestra el resultado final impreso.