# Informe personalizable

A partir de la versión 7.12, es posible generar informes externos personalizables en el menú objeto.

Podremos crear un nuevo informe o editar alguno existente, definir sus orígenes de datos y controles asignados a campos de las tablas declaradas en los proyectos de datos de Velneo.

Los informes personalizables permiten a los usuarios finales personalizar los informes si el programador lo desea. Los comandos de instrucción que se incorporan permitirán al programador lanzar el editor de informes en el punto de la aplicación que más nos interese, y ayudándonos de la gestión de definiciones de informe que aporta el generado de informes externos, podemos hacer que el usuario final personalice informes de forma muy sencilla.

Además, podremos programar nuestras aplicaciones para que el usuario final pueda diseñar sus propios informes de forma dinámica y haciendo uso de tablas, campos y procesos que permitamos que use en tiempo de ejecución.

Puedes hacer uso de la Open App Velneo vReport como repositorio de tus informes, heredándola en tus aplicaciones, pero no es necesario y puedes crear tú mismo tu propio repositorio de informes.

Los informes personalizables no son más que ficheros xml en disco que pueden ser editados en tiempo de ejecución. Su gestión se hace a través de procesos. Para ello disponemos de los comandos de instrucción de proceso siguientes:

**Informe personalizable:** editar informe: Permite editar un informe personalizable. Como parámetro debemos especificar la senda en disco del fichero XML correspondiente al informe que se quiere editar.

**Informe personalizable: exportar a fichero**: Este comando de instrucción permite enviar el informe a un fichero de disco. No la definición del informe, sino la “impresión” del informe en un fichero en disco.

**Informe personalizable: exportar a fichero de texto**: Similar al comando anterior, pero lo envía en formato TXT.

**Informe personalizable: Imprimir informe:** Imprimir informe: Imprime el informe.

**Informe personalizable: Previsualizar informe:** Previsualiza el informe.

Estos otros comandos son de origen lista porque deben estar alimentados por la lista de registros a imprimir. En ellos, el informe se podrá especificar, o bien mediante su senda en disco, o bien mediante una fórmula que contenga el código xml correspondiente.

Para gestionar los informes en tiempo e ejecución, podremos usar distintos métodos. A continuación comentamos tres ejemplos distintos:

1\) Cuando se quiera crear un nuevo informe personalizable, ejecutaremos un proceso que cree en disco un fichero de texto plano, vacío, con extensión xml. Una vez creado, lo editaremos con el comando informe personalizable: editar informe. Una vez diseñado podremos guardarlo en disco nuevamente desde el editor de informes personalizables. Cuando queramos imprimirlo, en los comandos de impresión de informes externos, lo identificaremos por su senda en disco.

2\) Podemos crear un modelo de informe tipo (con una cabecera de página con logo, datos de empresa por ejemplo) con el editor de informes personalizables y generar el xml correspondiente. En nuestra solución declararemos ese fichero XML [fichero adjunto](../de-aplicacion-y-datos/fichero-adjunto) en un proyecto. Recordar que un objeto fichero adjunto se descarga a la caché local de cada estación cliente cuando se ejecuta la aplicación.

Cuando se quiera crear un informe, se creará una copia de ese fichero con otro nombre y se editará con el comando informe personalizable: editar informe. Una vez diseñado podremos guardarlo en disco nuevamente desde el editor de informes personalizables. Cuando queramos imprimirlo, en los comandos de impresión de informes externos, lo identificaremos por su senda.

En los dos casos anteriores debemos tener en cuenta que estamos hablando de trabajar desde local con los informes, con lo que debemos tener en cuenta que una vez creados, deberían subirse al servidor mediante comandos de [SDV](../de-aplicacion-y-datos/proceso/comunicacion/sdv), para que el resto de los usuarios puedan tener acceso a los mismos.

3\) Otra posibilidad y que es la que usamos en [vERP,](../../../velneo-verp/que-es-velneo-verp) consistiría en crear en nuestra solución un repositorio de informes, esto es, guardar en una tabla la definición de cada informe, en un campo de tipo objeto texto. Para editarlo exportaremos a disco el contenido del campo (en un fichero con extensión xml), editarlo y una vez guardado, importarlo nuevamente en el campo de tipo objeto texto. En este caso, en los comandos de instrucción de impresión de informes externos asignaríamos el contenido del campo objeto texto a una variable local de proceso y la usaríamos para especificar el informe.

En el tutor de Velneo vReport encontraremos un ejemplo de la tercera opción: crear un repositorio de informe en la base de datos.

Si descargamos el tutor de vReport, observaremos que descarga un fichero zip. Este contiene dos instalaciones: la del componente vReport y la del tutor de vReport, basta con que instalar únicamente el segundo.

Este tutor, además, incluye varios ejemplos de distintos tipos de informe, así que también es un recurso formativo importante para estudiar la configuración de los informes personalizables.

## Funcionalidades que podemos usar en un informe personalizable

A continuación veremos qué funciones podemos usar en un informe personalizable.

### Subinformes

Los informes personalizables nos dan la posibilidad de combinar en el mismo informe información de diferentes tablas. El informe parte de una tabla de origen y adicionalmente podemos crear tantas secciones como necesitamos teniendo cada sección un origen diferente. Los controles de cada sección permiten mostrar información de su origen. Gracias a esta funcionalidad ya es posible crear informes con subinformes.

### Códigos de barras

Los informes personalizables permiten imprimir códigos de barras haciendo uso del componente personalizable Zint.

Los informes personalizables admiten más de 50 tipos de códigos de barras: Code 128, Data Matrix, USPS OneCode, EAN-128, UPC/EAN, ITF, QR Code, Code 16k, PDF417, MicroPDF417, LOGMARS, Maxicode, GS1 DataBar, Aztec, Composite Symbols y muchos más.

### Etiquetas

Los informes personalizables permiten crear de forma sencilla informes de etiquetas sin necesidad de utilizar tablas temporales.

### Texto enriquecido en múltiples páginas

Los informes personalizables permiten imprimir campos de texto enriquecido sin limitación de longitud, lo que permite imprimir textos largos en múltiples páginas. Esta opción abre, entre otras muchas posibilidades, la de generar información en formato HTML sobre un campo objeto texto enriquecido y luego imprimirlo como un informe.

IMPORTANTE: Si en un informe vamos a incluir campos de longitud variable, para una correcta impresión del mismo, debemos asegurarnos de configurar lo siguiente:

En la opción configuración de informe y página… del informe, en la pestaña “opciones de sección”, activar la propiedad salto de página permitido entre zonas.

La sección donde esté incluido el control debe tener activada la propiedad alto automático.

El control del informe que contenga el campo debe tener activadas las propiedades alto automático y salto de página.

### Modo texto

Los informes personalizables te permiten imprimir en modo texto. Con esta posibilidad se pueden generar informes para imprimir en modo texto o incluso que el usuario final pueda, a través de un informe personalizable, generar un fichero de texto con el formato de un cuaderno bancario.

### Informe personalizables con múltiples orígenes

Otra de las características adicionales de los nuevos informes personalizables es que además de integrar la información de la base de datos Velneo permite combinar en el mismo informe información proveniente de diferentes orígenes combinando datos de Velneo con datos obtenidos de otras base de datos o ficheros.

## Editor de informes personalizables

La ventana del diseñador de informes consta de una barra de menú, una toolbar y el editor de geometría para editar la posición y tamaño de los objetos. El editor de geometría puede ser habilitado o inhabilitado mediante la opción **editor de geometría** del menú **ver**.

![](https://51090920-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2Fb803b6adf0eedb963d9763bd877814e8245ff32c.png?generation=1589374157090519\&alt=media)

### Ventana principal del editor de informes personalizables

El menú principal contiene las acciones estándar para abrir y guardar archivos de informes, gestionar secciones de informes, usar el portapapeles, etc. La toolbar contiene acciones comunes que son usadas al editar un informe. Estas acciones también están accesibles desde el menú principal. El menú archivo contiene las operaciones de archivo. El menú informe contiene la configuración del informe en curso y de sus secciones. El menú ver contiene los elementos específicos que podemos habilitar o inhabilitar en el área MDI. El menú insertar contiene los objetos que podemos usar para construir un informe. El menú alineamiento contiene las acciones de alineamiento para aquellos controles de informes que pueden ser alineados. Con el menú ventana podremos gestionar las ventanas que sean abiertas de forma concurrente.

La mayoría de las características del editor de informes están accesibles a través del menú o de la toolbar Algunas características también están disponibles a través de los menús de contexto que pueden ser abiertos sobre las secciones del informe. En la mayoría de las plataformas, el botón derecho del ratón se usa para abrir los menús de contexto.

### Editor de geometría

Se trata de una herramienta de ventana que pueda ser habilitada a través de la opción **editor de geometría** del menú **ver**. Esta ventana muestra información de la posición y el tamaño del objeto o de la sección en curso. El objeto o la sección en curso serán activados mediante un clic del ratón. Podemos teclear el número correspondiente al tamaño o a la posición dentro de los controles correspondientes. Cualquier cambio que se haga en las propiedades del objeto será actualizado de forma inmediata.

![](https://51090920-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-M7D2zitZhY9szSsa5EK%2Fsync%2Fb8b60f8e55a1602ad41a0d8cf4aa1de265fb3ba2.jpg?generation=1589374157021095\&alt=media)
