DevExpress Reports - Conversión de informes desde Crystal Reports

Creado por David Miralpeix, Modificado el Fri, 15 Mar 2024 a las 11:02 AM por Aitor del Prado

 

En esta documentación se explicará en detalle los pasos a seguir para poder traducir informes de Crystal Reports a Devexpress desde el ERP (disponible a partir de la versión 5.0). Además, se mostrarán errores comunes durante el proceso de traducción y su solución. 

 

La utilidad de desarrollo de informes de DevExpress nos permite convertir informes desarrollados mediante Crystal Reports a su formato de una forma sencilla desde el propio editor de informes. 


Antes de comenzar a convertir, habrá que comprobar que los módulos 'Crystal Reports XI R2' y 'Crystal Reports .NET', accesibles desde el asistente de instalación, se encuentran instalados en el equipo en el que vamos a realizar la conversión, para evitar posibles errores.


Además de esto, recomendamos que la versión sea al menos la v5.0.0.24, ya que nos permitirá agilizar ciertos aspectos de la conversión.



Nota

No recomendamos realizar la conversión de informes estándar, sino esperar a que se libere la versión traducida.



Importación de informes desde Crystal Reports a Devexpress 

 

Primeros pasos 

 

En primer lugar, hay que tener en cuenta que la importación no se va a realizar perfecta, por lo que deberemos modificar las fórmulas, campos calculados, parámetros y los enlaces con los subinformes, tablas y / o vistas utilizadas tanto en el informe como en sus subinformes si los tiene... etc. En esta guía hablaremos de todos los casos en los que puede que necesitemos modificar el informe antes y después de la importación. 

 

Lo primero que tenemos que hacer es acceder al diseñador de DevExpress y pulsar en la opción de menú 'Archivo' -> 'Importar desde informe de Crystal Reports', lo siguiente sería seleccionar el informe de Crystal Reports (.rpt) que necesitemos importar.  

 
 

 
 

Una vez importado, se generan en el mismo directorio del informe importado los ficheros correspondientes para el informe y sub informes en DevExpress, a su vez se carga en el editor. 
 

Ficheros de un informe


A diferencia de Crystal Reports, donde un solo fichero contiene el informe y los subinformes que contiene, DevExpress los separa por cada uno de los sub informes que contiene. Es decir, tendremos un informe para el propio informe más los informes correspondientes a cada sub informe. 



Al abrir el informe el resultado será similar al siguiente: 



Limitaciones de la conversión 


Existen diferentes limitaciones en el proceso de conversión debido a las diferencias de estructura entre Crystal Reports y DevExpress documentadas en su web . 


  • No existen varios pies o encabezados por grupo, en DevExpress solamente existe uno y se divide en varios elementos llamados 'Sub-Bands'
  • Se tienen que definir los parámetros de enlace a los subinformes manualmente. Más adelante se explica la forma de hacerlo.
  • Las condiciones de suprimir y la opción de ocultar una sección no se traducen en los subinformes. Por lo que deberemos ocultarlas según lo necesitemos. Podemos ocultar desde la fórmula en el apartado de visible o desde las propiedades del elemento en cuestión.
  • En el caso de tener varios origenes de datos en el informe solamente se trasladará el primero.
  • Existen fórmulas o campos calculados que por la función o complejidad de estructura no se pueden traducir, en dichas fórmulas aparecerá el mensaje '#NOT_SUPPORTED#' o se mostrará en la parte inferior con un símbolo de exclamación.


 

  • El origen de datos no se actualiza en el momento de la conversión, se tiene que actualizar manualmente.
  • Los alias de las tablas indicados en Crystal Reports se traducen como si fueran un objeto existente de la base de datos, por tanto, en el momento de visualizar el informe aparecerán errores de SQL.
  • IMPORTANTE (Error común): Es posible que cuando añadamos campos con decimales (por ejemplo, precios) no nos calcule correctamente los totales o los propios campos no muestren los decimales correctamente, en ese caso hay que revisar (además de que el formato de decimales es el que queremos) que el campo está establecido correctamente como decimal:




Varios DataSources


A medida que realizamos las conversiones, nos podemos encontrar con que, en la lista donde se encuentra el origen de datos del informe, tenemos más de uno.

 


Cuando esto ocurra, será importante saber identificar cual es el correcto. Si seleccionamos cada uno, en la parte inferior aparecerá una sección de propiedades, y entre todas las propiedades visibles, nos tendremos que fijar en el apartado "parámetros de conexión". Una vez encontremos cual de todas tiene el campo como se ve en la captura inferior, habremos encontrado el correcto.



En la mayoría de casos, nos encontraremos que el origen "válido" será "sqlDataSource1", dejando como "no válido" aquel llamado "DataConnectionString", aunque siempre deberíamos asegurarnos de conocer cual es el válido antes de continuar.



Importante

Por lo general no eliminaremos los orígenes de datos, aunque no sean válidos, y en especial "DataConnectionString", que se usará internamente para la impresión.



La principal razón por la que esto es importante, es porque, si vamos a referenciar algún campo, necesitamos saber de donde sacarlo, ya que, aunque no sea válido, probablemente aparecerá varias veces como opción, pero solo una será correcta, ya que el resto hará que el informe falle.



Esto solo tendremos que tenerlo en cuenta en las ventanas donde se nos de la opción entre diferentes orígenes, como por ejemplo, la asignación de los parámetros que le vamos a pasar a un subinforme. Un caso donde esto no se aplicaría, serían las fórmulas, ya que con colocar el nombre del campo, usarán internamente la conexión válida por nosotros.

 


Vistas, tablas y personalizaciones en Crystal Reports 

 

Uno de los problemas de Devexpress es que al importar no se pasan correctamente las vistas, tablas y personalizaciones que necesitaban agregarse a dicho informe de Crystal, es decir, si en un informe hemos necesitado agregar tablas, vistas u otro tipo de personalización, también deberemos hacerlo para el informe de Devexpress. 


Antes de importar el informe desde Devexpress deberemos comprobar si el informe de Crystal está diseñado correctamente. Para ello iremos a Establecer ubicación de base de datos y asociaremos las vistas que necesitemos a las tablas correspondientes del informe. 


Importante

Al cerrar con la X al establecer la ubicación del origen de datos no se modifican los cambios, por lo que al cerrar se debe de hacer desde el propio botón de Cerrar. Podemos comprobar que ha guardado el origen de datos correctamente porque nos aparecerá el símbolo de guardar el informe.


Establecer ubicación del origen de datos: Asociar Vistas al informe 


Un problema común en la importación de los reports es, tener una tabla o vista más de una vez en el mismo report, que en Crystal Reports significa tener alias para las tablas o vistas. Este funcionamiento, a la hora de importar el report, causará un error, ya que DevExpress intentará buscar una tabla o vista con el nombre del alias, y si no lo encuentra, el proceso de importación se detendrá. 



Nota

Estos cambios sólo serán necesarios cuando se trabaje en una versión anterior a la 5.0.0 hotfix 24.



Para identificar estos casos, bastará con abrir en Crystal Reports, con un informe abierto, 

‘Base de Datos’ -> ‘Establecer ubicación del origen de datos’. 



Será en este menú, en el desglose superior donde, podremos ver si este es el causante del problema. Las tablas o vistas, que se encuentren repetidas, aparecerán con la siguiente nomenclatura: 


ALIAS([NOMBRE DE LA TABLA O VISTA]) 


En la captura superior se puede apreciar el caso concreto, “ContactosPadre” es el alias de la tabla Contactos.

 

En estos casos deberemos crear una vista equivalente por cada registro que tenga alias, excepto aquellas que tengan un alias exactamente igual a la tabla o vista, es decir: 


CREATE VIEW ContactosPadre AS SELECT * FROM Contactos 

zpermisos ContactosPadre

Deberemos Actualizar también el servidor al que estemos utilizando actualmente y asociar la vista con la que le corresponde en la lista superior, en este caso, “ContactosPadre”. 


Una vez hayamos comprobado que tanto desde la previsualización de Crystal Reports, como desde la impresión del objeto o colección se visualiza correctamente tanto los datos del informe como de los subinformes (si los tiene), podremos importar el informe desde el diseñador de Devexpress. 


Pasos adicionales requeridos en DevExpress 


Si ha sido necesario realizar los cambios anteriores al informe de Crystal Reports para permitir la importación a DevExpress, es importante que realicemos el cambio otra vez en DevExpress para que el resultado sea el mismo. 




Aquí tendremos que ver la o las relaciones que tiene cada tabla o vista que hayamos sustituido por una vista.



En este punto, vamos a buscar en el explorador de la izquierda, el nombre de la tabla original, la que estaba entre paréntesis. Arrastraremos la tabla al centro con el resto y especificamos su relación.





Nota:

Existe la posibilidad de que se genere una relación automática y la ventana de la captura superior no aparezca. Si esta relación es incorrecta, bastará con hacer la relación a mano, es decir, arrastrar del campo necesario de la tabla correcta, al campo de la nueva tabla insertada, modificar el tipo de unión, y eliminar la relación generada automáticamente.


Una vez hayamos colocado la tabla, y asignado la relación, borraremos la “tabla” que creamos antes como una vista con Click derecho -> Eliminar (en este caso sería la que se llama ContactosPadre). 

 

Después de eliminarla, le pondremos el mismo nombre (que acabamos de eliminar) a la tabla con Click derecho -> Renombrar. Marcaremos también el check donde aparece el nombre. 



Con este paso nos aseguramos que "ContactosPadre" sea la tabla "Contactos" con un alias, y no la vista "ContactosPadre".


Importante

Será necesario realizar este paso si se ha modificado el informe de Crystal para que se pudiese hacer la importación, ya que de no hacerlo, nos arriesgamos a posibles errores causados por la ausencia de la vista recientemente creada, por ejemplo, si utilizamos el informe en otra base de datos o eliminamos la vista.


Tendremos que poner todos los alias a mano de nuevo, siguiendo la lógica de DevExpress, para evitar problemas con los campos calculados y obtener claridad. Para ello podemos directamente filtrar por nombre de la tabla para que nos resulte más cómodo. 


 

Desde la columna Alias asignamos los alias para cada campo. Como nomenclatura estándar es aconsejable que lo establezcamos como NombreTabla_NombreCampo.



Vistas, tablas y personalizaciones en Devexpress 

 

Añadir tablas, vistas y relaciones 

Si se añade una tabla o vista después de la importación, es recomendable añadirles alias a todos los campos para que desde el informe y los sub informes podamos enlazar los campos correctamente y con más facilidad en las fórmulas o campos calculados.



IMPORTANTE - Edición de SQL 

 

Se pueden editar directamente por código SQL las tablas, vistas y relaciones de la cadena de conexión. Sin embargo, no lo recomendamos a no ser que sea como último recurso. Al editar el código SQL se modifican completamente las tablas, vistas y relaciones, impidiendo completamente su edición por interfaz gráfica arrastrando y editando las tablas.  


Se intentará mejorar este aspecto en un futuro e intentar permitir la edición de las tablas en modo gráfico después de haber editado el código de SQL.  


Por el momento recomendamos encarecidamente que no se utilice este método a no ser que sea un último recurso, y en su lugar utilizar el modo gráfico convencional. 

Campos de expresiones, fórmulas y campos calculados 

 

El editor de expresiones tiene, en la parte inferior, un menú con las opciones posibles para formar las expresiones.


 

A los campos colocados en el informe, se les puede aplicar formatos. DevExpress tiene diferentes formatos estándar, pero también ofrece la posibilidad de usar formatos personalizados para casos especiales. 



Enlace de parámetros con subreports 

 

En primer lugar, debemos modificar el nombre de los parámetros desde el subreport, ya que muchas veces viene mal el nombre por la importación del informe de Crystal, de esta forma será más fácil de identificarlo posteriormente.  

 

Para ello vamos a Lista de Campos en el sub informe, desde ahí editamos el nombre de los parámetros, para seguir una nomenclatura es recomendable establecerle directamente como nombre el nombre del campo.  



A continuación, desde el informe editaremos el enlace con el sub informe desde la rueda de configuración del elemento correspondiente al sub informe. 


 

Podemos hacer click en "Sync" para directamente rellenar el parámetro del sub informe.  



Por último, volveremos al sub informe y estableceremos el filtro al sub informe.





Edición de estilos



Desde la parte inferior derecha podremos editar los estilos de los elementos del informe, cambiar sus propiedades de visibilidad, comportamiento al agrandarse...etc.


Errores comunes tras importar informes 

 

Diferencias en las fórmulas 

Puede ocurrir que al importar desde un informe de Crystal se hayan traducido mal funciones, estas son las que hemos detectado: 


Mid() -> Substring(): La función Mid(...) de Crystal Reports se traduce a DevExpress como Substring(...), pero el índice de Crystal Reports empieza en 1, y el de DevExpress en 0, pero la conversión no lo cambia, así que seguramente sea necesario restarle 1 al índice en DevExpress. 


Debemos tener en cuenta que para verificar que estemos traduciendo correctamente el informe, lo tendremos que comparar con cómo estaba diseñado en Crystal Reports, para ello revisaremos expresiones, fórmulas y parámetros al mismo tiempo con cómo está hecho en crystal reports. A su vez, para ver que se visualizan igual, es recomendable previsualizar ambos y comprobar que los datos que se muestran son los mismos (para comprobar que las fórmulas del informe y sub informe están correctas), los estilos coinciden...etc. 

 

Listas con varias cabeceras de grupo aparecen en orden incorrecto 

 

En listas donde se pretende desglosar sobre varios aspectos utilizando cabeceras de grupo, como, por ejemplo, el stock de un artículo por almacén y ubicación. En este caso, el orden correcto, y el que aparece en el report, es primero el almacén y luego la ubicación. 


Pero al importarlo, el orden se invierte y pasa a ser incorrecto. Para arreglar esto, será suficiente con arrastrar las cabeceras de grupo al orden correcto en el árbol situado a la derecha.  

 

 











¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo