Tutoriales
Tutoriales
Tutoriales
Jasper Reports es una librería escrita en Java y libre para la generación de informes. El módulo “jasper_reports”
para OpenERP es un módulo general que integra la librería de Java JasperReports con OpenERP. Se genera un
fichero JRXML (Jasper Reports XML) que una vez compilado genera un fichero .jasper, aunque será el fichero
“.jrxml” el utilizado por OpenERP para mostrar nuestro PDF de salida dentro del módulo correspondiente de la
aplicación.
Se utiliza iReport como interface gráfica para el diseño de informes y utilizarlos en OpenERP. Es compatible con la
internacionalización, subinformes, tablas, códigos de barras y que le permite navegar por los campos en OpenERP
de iReport.
Este módulo originalmente fue creado y desarrollado por NaN·tic para OpenERP v5 y v6.
Posteriormente se ha modificado el Modulo “jasper_reports” para hacerlo compatible con la versión 7.0 de
OpenERP. Desde el proyecto en el launchpad encontramos la rama de la adaptación a OpenERP v7 realizado por
Pexego.
También hay una adaptación a la v7 realizada por German Ponce Dominguez. No sabemos si tiene alguna mejora
respecto a la de Pexego. Para este tutorial hemos utilizado la adaptación de Pexego que nos ha parecido una rama
mas oficial del Launchpad
Openerp-jasperserver
También hay un módulo para crear reportes en OpenERP utilizando el servidor de informes de JasperReports
Server. Este módulo está desarrollado por Syleam y se encuentra en el repositorio de GitHub.
• https://github.com/syleam/openerp-jasperserver
Esta opción nos da la posibilidad de almacenar nuestros reportes en un servidor interno o externo. Puedes visitar la
web para más información [http://community.jaspersoft.com/project/jasperreports-server].
Para utilizar este módulo debemos instalar JasperReports Server en nuestro servidor y quizás añada mejoras
funcionales, pero no lo tenemos claro. De momento no sabemos si aporta algo realmente diferenciador que
merezca la pena, asi que no lo utilizamos.
Requisitos
Como observamos en la descripción Jasper Reports utiliza la tecnología Java para compilar y correr sus
aplicaciones, por lo consiguiente tenemos que instalar el Kit de desarrollo de Java para poder compilar nuestros
reportes. En Ubuntu instalamos el kit siguiendo los pasos que a continuación se describen.
Tecleamos el siguiente comando para instalar el JDK:
sudo apt-get install openjdk-6-jdk
Una vez instalado podemos ejecutar el comando [java -version] para ver que está funcionando correctamente.
Nos creara un nuevo menú en [Configuración > Técnico], teniendo dos opciones claras que pasaremos a
explicar.
Crear Plantilla de Datos:
Desde la opción de menú “Crear Plantilla de datos” exportamos el modelo de datos en formato XML, que luego
utilizaremos como fuente de datos para la generación de los reportes. Es importante seleccionar el modelo
adecuado a la información que queremos luego mostrar en el reporte.
• model: elegimos de que modelo queremos obtener los datos. dependiendo de los datos que queramos
mostrar seleccionaremos el modelo que nos interese />
• Depth (profundidad): Este campo indica la profundidad en la relación de tablas de openERP generadas en
la plantilla. Cuanta más profundidad le demos a la plantilla tendremos relacionadas más tablas para
acceder a más campos del pedido de venta. Si dejamos profundidad ‘1’ por ejemplo, no podremos acceder
a las líneas de pedido ya que solo tendremos relación con la tabla de la cabecera del pedido. Tampoco es
aconsejable obtener demasiada profundidad ya que un volumen de datos muy alto podría causar lentitud
incluso errores. No superar una profundidad de ‘4’ suele ser lo más adecuado.
Pulsamos “Create” para generar el fichero XML con la estructura de datos del modelo y profundidad seleccionados.
Una vez generada la plantilla .XML nos aparecerá un link para descargarla en nuestro equipo. Con esta plantilla ya
podemos empezar a desarrollar nuestro reporte con el editor iReport.
Jasper Reports:
Una vez tengamos desarrollado nuestro reporte y generado el fichero “.jrxml” con ireport, podemos iniciar la
creación del mismo en openerp v7. Esta opción del menú nos permite crear un registro al que subiremos el reporte
creado con iReports y asociarlo a un modelo.
• Nombre: Puede ser el que queramos. Diferente por cada nuevo modelo si configuramos varios.
• Nombre del Servicio: También puede ser el que queramos. Diferente por cada nuevo modelo si
configuramos varios.
• Modelo: Es importante elegir el adecuado, en nuestro caso “Factura”. Esto es importante para que el nuevo
formato nos aparezca en la opción Imprimir de las facturas en openERP.
• Archivos: Con la opción “Añadir un elemento” cargaremos en el servidor todos nuestros ficheros del nuevo
formato.
• Predeterminado: Indicamos cual es el fichero por defecto para lanzar el reporte. Es obligatorio aunque solo
conste de un fichero.
Ya podemos ir a las facturas de OpenERP y ver como aparece nuestro formato desde la opción "Imprimir".
Errores Comunes
13
Permission denied
(, IOError(13, 'Permission denied'), )
Jasper Reports es un servidor que funciona bajo JAVA. Cuando arrancas el servidor, el Jasper Reports (y el java)
no están aún activos. Se empiezan a activar en ese momento que lanzas el informe, entonces cuando OpenERP
lanza el informe, el java todavía no está plenamente activo, con lo cual da ese error.
Si lo vuelves a lanzar ya te lo debe coger, y a partir de ese momento, ya todo lo que lances debería funcionar sin
problemas.
Si reinicias el servidor, te volverá a ocurrir la primera vez que lances cualquier informe jasper.
Si te ocurre constantemente revisa los permisos de la carpeta "custom_reports" donde se almacenan los ficheros
de los informes personalizados del módulo.
Report Error
Failed to invoke method execute in class com.nantic.jasperreports.JasperServer: Font 'Arial' is not available to the
JVM. See the Javadoc for more details.
Es porque las fuentes básicas no están presentes por defecto en la mayoría de distribuciones de Linux (pero están
en MS Windows), como Verdana, para instalar en Ubuntu hacer así:
• ls /usr/share/fonts/truetype/msttcorefonts/
También es necesario reiniciar la maquina JVM para que detecte las fuentes.
Report Error
Failed to invoke method execute in class com.nantic.jasperreports.JasperServer:
net/sf/jasperreports/compilers/GroovyEvaluator
Mas cositas del java :). Hay un lenguaje de programación llamado “Groovy” que se basa en Java.
Este error se provoca porque tu versión de iReport añade en la cabecera del fichero jrxml la opción
[language="groovy"], para solucionarlo basta con quitar esta opción.
Pueden seguir este tutorial sobre cómo crear el Report Factura con este módulo:
Pinche en la imagen para ver un ejemplo en PDF del formato que se explica en
este tutorial.
• Aquí dejo los ficheros “.jrxml” del ejemplo para el editor iReport.
Requisitos
Instalar el diseñador de informes iReport en nuestro equipo:
http://community.jaspersoft.com/project/ireport-designer
Tener instalado el modulo “jasper_report” para OpenERP que detallamos en el tutorial del siguiente link:
• Name: Un nombre descriptivo para nuestra nueva conexión. En nuestro caso hemos puesto “Factura
Venta”.
• XML File: El fichero de plantilla XML que genera el módulo jasper_report para OpenERP
• Select Expression: data/record
• Date pattern: Patrón para fechas
• pattern: Patrón para números
En las propiedades del documento ponemos “xPath” en el campo: ‘The language for the dataset query’
Una vez tenemos la fuente de datos “datasource” del informe seleccionamos los campos que incluiremos en
nuestro informe de factura, hacemos clic derecho nuevamente en el documento y elegimos "Edit Query". Para
seleccionar los campos que incluiremos en nuestro reporte, navegamos en el árbol de la derecha “data/record” y
arrastramos los campos que vamos a utilizar a la parte de abajo.
En el diseño del informe, ahora disponemos de los campos seleccionados en el apartado “Fields”. Ya podemos
arrastrarlos al documento y diseñar nuestro informe.
Compatibilidad
En las versiones más recientes de iReport al compilar el archivo “.jrxml” se añaden etiquetas que aún no son
compatibles con el modulo “jasper_reports” de OpenERP. Es importante la Compatibilidad porque en el fichero del
report se añaden campos como “uuid” o “paragrap” que nos son compatibles con la librería actual del módulo
jasper_report de OpenERP 7 y que luego da un error al imprimir el formato.
Vamos a [Herramientas -> Opciones -> iReport -> General -> Compatibility] y modificamos la compatibilidad. Con
una compatibilidad de versión “JasperReports4.0.0” no añade estos campos y funciona correctamente.
Lineas de la Factura
Una vez tenemos diseñado el informe y decidimos probarlo, enseguida nos damos cuenta que en las líneas solo
nos muestra una línea a pesar de que nuestra factura contiene varias líneas. Esto es porque es necesario decirle al
informe sobre qué campos debe “iterar/recorrer” para mostrar todos las líneas de registros.
Para esto pinchamos con el botón derecho del ratón sobre el informe y pinchamos en propiedades. En la ventana
que aparece buscamos el campo ‘Properties’ y pinchamos en el botón de la derecha “…” para ver las
propiedades.
En la ventana que se abre, pinchamos el botón “Add” para crear una propiedad:
Lineas de impuestos
Algo muy típico es mostrar en el pie de la factura el desglose de los diferentes impuestos que conforman la factura.
Es decir que si en una misma factura tenemos varios tipos impositivos en el pie se muestre el desglose de cada
base y su cuota de impuesto. Para lograr mostrar varias líneas utilizaremos “SubReports”, que no es nada más
que añadir otro report totalmente diferente enlazado al report principal que en este caso es la factura.
Para lograr esto empezaremos creando un nuevo report que en nuestro caso
llamaremos “Factura_impuestos.jrxml”. En este nuevo reporte seguiremos los mismos pasos que hemos descrito
para la factura, pero con la diferencia de que como solo queremos mostrar datos de líneas de impuestos lo primero
sería eliminar las secciones de header, footer etc…. Dejando solo la banda “Title” para mostrar el título y la banda
“Detail” para mostrar las diferentes líneas de impuestos. El “Datasource” seria el miso que hemos utilizado para la
factura y los campos de la consulta serían los apropiados para mostrar los impuestos. En la imagen vemos como
nos queda el diseño según lo explicado.
Al igual que hicimos en las líneas de la factura, debemos indicarle al sub-informe de impuestos sobre qué campo se
debe iterar para que muestre todas las líneas de impuestos. El procedimiento es el mismo solo que en esta ocasión
el campo para iterar es diferente.
Una vez tenemos el nuevo informe de las líneas de impuestos preparado solo nos queda añadirlo al informe
principal de factura y enlazarlo.
1. En el report principal “Factura” creamos un nuevo parámetro que le llamaremos como queramos, en
nuestro ejemplo SUBREPORT_IMPUESTOS. Es MUY importante que lo creemos de la clase “object”
2. Añadimos en el pie del formato factura un objeto del tipo “SubReport” que automáticamente nos lanza el
asistente de configuración.
1. En la primera pantalla simplemente le indicamos la ruta donde se encuentra nuestro SubRepor de
impuesto.
2. El segundo paso es indicarle el parámetro para la conexión. Seleccionamos “Use a JRDatasource”
y seleccionamos el parámetro “SUBREPORT_IMPUESTOS” que previamente habíamos creado en
un paso anterior.
3. En el tercer paso siguiente sin añadir parámetros.
4. El cuarto y último paso es para indicarle la ruta donde debe encontrar el Subreport cuando sea
utilizado. Dejamos la opción que viene por defecto “Store the directory name in a parameter”. Esto
nos creara un nuevo parámetro que en mi caso se llama “SUBREPORT_DIR” conteniendo la ruta
al fichero “.jrxml” en nuestro disco duro. No nos preocupemos, no es necesario mantener el
Subreport en nuestro disco para que funcione. En las propiedades de este parámetro marcamos la
opción “Use as a prompt” para que se busque el Subreport en la misma ubicación donde está el
report principal.
• Para los vencimientos de pago seguiremos el mismo método que para los impuestos creando un nuevo
SubReport.
• En el report padre Factura también crearemos un nuevo parámetro “SUBREPORT_VENCIMIENTOS” del
tipo “object” para el “Data Source Expression” cuando añadamos el nuevo SubReport.
Para este SubReport la consulta obtiene la información de los apuntes del asiento contable. El asiento contable
tiene varios apuntes más que los de pagos que nos interesan. En la consulta del SubReport filtraremos la
información para que solo muestre las líneas de cobro y además les añadiremos una ordenación para que las
muestre ordenadas por fecha de menor a mayor.
Con el botón “Filter expression” añadimos la siguiente expresión que simplemente indica que solo nos interesan
las líneas con contenido en el campo “Debe” Y en la “Fecha_vencimiento”.
Con el botón “Sort options” añadimos el campo de ordenación por fecha vencimiento.