Crystal Reports XI: Manual Avanzado Zona-Crystal.com - Crystal Reports: Manual Avanzado - 1 INDICE Iniciando un nuevo reporte ..................................................................................................................................... 4 Secciones del Reporte ............................................................................................................................................. 6 Formato de los objetos ............................................................................................................................................ 6 Utilizando objetos de textos.................................................................................................................................... 7 Importante ............................................................................................................................................................... 7 Selección de Registros ............................................................................................................................................ 9 Refrescando el reporte VS. Usando datos guardados ............................................................................................. 9 Limitando datos con el criterio de selección de grupos........................................................................................ 10 Consideraciones de Performance.......................................................................................................................... 10 Ordenando, Agrupando y Sumarizando................................................................................................................ 11 Agrupando............................................................................................................................................................. 11 Importante ............................................................................................................................................................. 12 Sumarizaciones más utilizadas ............................................................................................................................ 12 Top N / Botton N .................................................................................................................................................. 14 Problemas que surgen al insertar grupos .............................................................................................................. 14 Campos de Fórmula .............................................................................................................................................. 15 Variables en fórmulas ........................................................................................................................................... 16 Running Total ....................................................................................................................................................... 16 Formato Avanzado................................................................................................................................................ 17 The Hightlighting Expert ...................................................................................................................................... 18 Formato de las Secciones...................................................................................................................................... 20 El “Section Expert”............................................................................................................................................... 20 Parámetros............................................................................................................................................................. 22 Seteando valores por default................................................................................................................................. 23 Métodos para generar las Listas de Valores Dinámicas ....................................................................................... 23 Utilizando Listas de Valores Dinámicas ya existentes ......................................................................................... 24 Otro uso de los parámetros ................................................................................................................................... 24 Objetos “Cross Tab” ............................................................................................................................................ 26 Cambiando el objeto Cross Tab............................................................................................................................ 26 Suprimiendo Subtotales y etiquetas ...................................................................................................................... 27 Mejorando la apariencia de un Cross Tab............................................................................................................ 27 Importante ............................................................................................................................................................. 27 Subreportes ........................................................................................................................................................... 28 Gráficos................................................................................................................................................................. 30 Chart Expert .......................................................................................................................................................... 30 Chart Analyzer ...................................................................................................................................................... 32 Anexo A: “Forma en que Crystal Reports genera los reportes” ........................................................................... 33 Anexo “B”: “Haciendo reportes desde bases de datos SQL” ............................................................................... 36 Logearse a SQL Database..................................................................................................................................... 36 Drivers de Acceso Directo .................................................................................................................................... 36 ODBC ................................................................................................................................................................... 36 Cambiar un reporte de una base PC –Style a una Cliente/Servidor...................................................................... 36 Linkeando Tablas.................................................................................................................................................. 37 Diferencias de Linking entre PC-Style y SQL Databases .................................................................................... 37 Zona-Crystal.com - Crystal Reports: Manual Avanzado - 2 Usando múltiple tipos de base de datos en un mismo reporte .............................................................................. 37 Tipos de Join ......................................................................................................................................................... 38 Tabla de la Izquierda y Tabla de la derecha ......................................................................................................... 39 Sentencias SQL..................................................................................................................................................... 39 Usando SQL Stored Procedures............................................................................................................................ 39 Usando SQL Expresión Fields.............................................................................................................................. 40 Agrupando en el Servidor ..................................................................................................................................... 40 Efectos del Drill Down ......................................................................................................................................... 40 Consideraciones de Performance.......................................................................................................................... 40 Anexo “C”: “Otras Consideraciones ”.................................................................................................................. 41 Instalación Crystal Reports .................................................................................................................................. 41 Instalación Crystal Reports for .NET................................................................................................................... 41 Actualización ........................................................................................................................................................ 42 Compatibilidad con versiones anteriores .............................................................................................................. 42 Notas y limitaciones.............................................................................................................................................. 43 Integración con Crystal Enterprise........................................................................................................................ 45 Impresión y exportación ....................................................................................................................................... 46 Acceso a datos....................................................................................................................................................... 46 Zona-Crystal.com - Crystal Reports: Manual Avanzado - 3 Iniciando un nuevo reporte Se puede comenzar a construir un reporte de 2 formas diferentes: Mediante los asistentes o desde un reporte en blanco. Report Expert: Existen 4 asistentes diferentes, los cuales mediante diferentes “ventanas” permiten, paso a paso, armar el reporte. • Standard: Éste es el asistente más genérico y usado. A través de los tabs, del mismo, se puede no solo seleccionar la fuente de datos, las tablas, hacer los links, seleccionar los campos a visualizar en el reporte, sino también ordenar los registros, agruparlos, insertar sumarizaciones, insertar filtros y gráficos. • Mail Label: Etiquetas para cartas. • Cross Tab: Permite crear reportes en los cuales los datos son mostrados en un objeto “Cross Tab”. • OLAP: Este asistente está orientado a realizar reportes con fuentes de datos multidimensionales, permitiendo desplegar la información de los cubos en una grilla muy parecida al cross-tab. Crystal Reports posee conectividad con: Business Warehouse, Essbase Cube, IBM DB2 Cube, OLE DB for OLAP, Informix MetaCube, Holos HDC Cube. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 4 También se puede comenzar eligiendo la opción de un reporte en blanco. Mediante esta opción, lo primero que hay que hacer es seleccionar la fuente de datos. Una vez seleccionada la misma, se puede comenzar a desarrollar el reporte. Mediante el “Explorador de Campos”, el cual se accede desde el menú o desde la barra de herramientas, se pueden elegir los campos de la fuentes de datos seleccionada y otros tipos de campos, que explicaremos a lo largo del documento, con los que queremos armar el reporte. En cualquiera de las dos opciones que utilizamos para armar un reporte, si elegimos mas de una tabla, automáticamente va a aparecer una ventana llamada Visual Linking Expert, mediante la cual podemos establecer las relaciones entre las tablas seleccionadas previamente. Estos links o Join, se pueden establecer con diferentes opciones. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 5 Secciones del Reporte Para el desarrollo de cualquier reporte, es necesario e importante conocer las distintas secciones que estos tienen, ya que es en ellas donde se colocan los diferentes campos, fórmulas, gráficos y sumarizaciones. Sección Report Header Page Header Details Report Footer Page Footer Cuándo aparece??? Aparece una sola vez y al principio del reporte. Aparece en el encabezado de cada página tantas veces como páginas contenga el reporte. Aparece tantas veces como registros haya en la fuente de datos. Aparece una sola vez y al final del reporte. Aparece en el pie de cada página tantas veces como páginas contenga el reporte. Qué colocar??? Títulos, logo de la empresa, gráficos, objetos cross-tabs, líneas, etc. Títulos de Columnas, líneas, fórmulas, etc. Campos de la fuente seleccionada, fórmulas, texto, etc Totales, gráficos, cross- tabs, etc. Número de páginas, texto, etc. Formato de los objetos Al insertar un objeto, Crystal le pone un formato por default, que se puede cambiar ya sea desde el Report Options y/o Crystal Options. Los cambios toman efectos a partir del momento en que se hacen. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 6 Utilizando objetos de textos Los objetos de texto se insertan desde el menú o la barra de herramienta. Se pueden posicionar en cualquier sección del reporte pero generalmente son insertados en el Report Header, y/o Page Header. Éstos pueden ser editados libremente con una barra de herramienta muy parecida a la utilizada en los productos de Microsoft Office. Importante Los objetos de tipo texto se pueden combinar con campos de la fuente de datos o campos de fórmulas o parámetros. Supongamos que tenemos la siguiente situación: disponemos de dos campos de la fuente de datos de tipo “string” y el contenido del mismo es de longitud variable. Un campo contiene el nombre del cliente y el otro el apellido y queremos mostrar primero el apellido, a continuación una coma, y después el nombre. Para resolver esto, insertamos ambos campos separados por una coma dentro de un objeto texto. Al insertar un campo dentro de un objeto de texto, éste se ajusta el tamaño del mismo resolviendo el inconveniente propuesto, quedando no solo en forma mas prolija sino también en un solo campo, permitiendo de este modo tratar al mismo como un objeto único, para moverlo o darle formato en forma global si así lo quisiera. Se pueden combinar también con campos “especiales”(Son campos incluidos en Crystal Reports, como número de página, título, autor, etc.), parámetros o fórmulas. Consideraciones de Performance Crystal Reports debe hacer muchos cálculos internos para combinar y ajustar el tamaño, que degradan la performance. Por lo tanto se recomienda combinar objetos de texto con campos, pero en secciones que no se repitan tanto, como los Headers y/o Footer. Si se inserta en la sección “detail” se procesa cada vez que se lee un registro, si es necesario se recomienda usar fórmulas que son mas performantes. Tratar de no usar el clásico “Pag. xx de xx”, debido a que el reporte debe calcular el total de páginas antes de poder mostrar la primer pagina. Es decir, que de no usar este tipo de campos, Crystal Report muestra la primer Zona-Crystal.com - Crystal Reports: Manual Avanzado - 7 pagina sin tener que darle formato a las páginas siguientes, lo cual hace que en reportes extensos, sea sumamente performante. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 8 Selección de Registros A través del Record Selection Fórmula se pueden filtrar los registros que son leídos de la fuente de datos y traídos al reporte. Sirve principalmente para evitar, en bases de millones de registros, traer todos los registros, incluso los que no nos interesan. En síntesis, vendría a hacer la cláusula “WHERE” de una consulta SQL, aquí también se pueden combinar diferentes criterios de filtro relacionándolos por medio de “and” o “or”. Refrescando el reporte VS. Usando datos guardados Cuando se hace un preview de un reporte por primera vez, Crystal tiene que leer la fuente de datos, es decir genera una consulta SQL (en base a los campos utilizados en el reporte y a los filtros utilizados) y la ejecuta, para poder mostrar los resultados. A su vez, los registros que devolvió dicha consulta son almacenados en memoria o en archivos temporarios, lo cual le permite a Crystal que ante modificaciones de formato use los datos guardados, mejorando notoriamente la performance en tiempos de desarrollo. Al agregar nuevos campos al reporte, Crystal hace un refresh, es decir, regenera la consulta SQL (debe traer nuevos datos) y la ejecuta. Si se modifica el criterio de selección o de filtro, Crystal le ofrece al usuario que está desarrollando el reporte, hacer un refresh o usar los datos almacenados realizando el filtro sobre los datos guardados en memoria. Tener especial cuidado con este punto!!! Ya que suponiendo que el último refresh realizado no abarque a los registros de un nuevo filtro que apliquemos y además seleccionamos “Usar los datos almacenados”, como resultado obtendremos cero (0) registros, lo cual no significa que la fuente de datos no contenga registros para este nuevo filtro aplicado, ya que en ningún momento Crystal aplicó este filtro directamente en la fuente de Zona-Crystal.com - Crystal Reports: Manual Avanzado - 9 datos, sino que, lo aplicó a los datos guardados. Deberíamos hacer un refresh para cercioraron que el resultado anterior es correcto. Cuando se usa el select expert con una base de tipo PC-Style , hay que tener en cuenta que son case sensitive, por lo cual hay que estar atento al escribir la fórmula. Usar la función uppercase (campo)=”Criterio en mayúscula”. Limitando datos con el criterio de selección de grupos La selección de registros según el caso ocurre al momento de hacer la consulta a la fuente de datos o en la primera pasada, antes de que los datos sean agrupados y sumarizados, por lo tanto no puede ser aplicado a subtotales, ni a sumarizaciones etc. Por lo tanto, de requerir filtrar la información por sub-totales o sumarizaciones, se debe utilizar la opción de “Group Selection”. Este tipo de filtro se evalúa después de que el group tree, subtotales y sumarizaciones sean calculados, ocultando aquellos grupos que cumplan la condición del filtro aplicado. Consideraciones de Performance La selección de registros es la parte mas crítica del reporte ya que es donde más tarda. Como vimos anteriormente Crystal genera una consulta SQL para leer los registros, con lo cual es fundamental optimizar dicha consulta. Como primer consideración hay que intentar no utilizar funciones de Crystal en el filtro, así el filtro puede ser traducido al lenguaje SQL de la fuente de datos con la que estemos trabajando y de esta manera que sea el motor de la fuente de datos el que haga el trabajo de filtrar los registros y no Crystal, que lo realiza registro a registro a medida que los va leyendo, lo cual es más lento. Para evitar el uso de funciones de Crystal, la herramienta provee, para cierto tipo de base de datos (Access, SQL Server, Oracle) los “SQL Expressions” que son como fórmulas en las cuales podemos utilizar diferentes funciones (dependen del lenguaje de base de datos) evitando así, usar funciones de Crystal que no son interpretadas. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 10 Ordenando, Agrupando y Sumarizando Ordenando Cuando Crystal hace la consulta a la fuente de datos y devuelve los registros, estos se encuentran en el orden en el que estaban almacenados. Sin embargo se puede definir un orden ascendente /descendente desde el menú o desde la barra de herramientas. Se puede ordenar por mas de un campo y no es necesario que éste se muestre en el reporte. Agrupando La agrupación lo que hace es juntar todos los registros que tengan el mismo valor del campo por el cual se está agrupando. Se puede definir un grupo desde el menú o desde el botón en la barra de herramientas en base a un campo de la fuente de datos o una fórmula. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 11 Crystal permite definir N grupos en un solo reporte, no hay limitaciones en cuanto a cantidad de grupos se refiere. Al insertar un grupo en el reporte, se crean dos secciones mas en el mismo, por encima y por debajo de la seccion “Details” o en su defecto del o los grupo/s ya definido/s: • • El Group Header (Generalmente se coloca el nombre del grupo) El Group Footer (Generalmente se coloca la sumarización). A su vez, al hacer una vista previa, aparece un árbol a la izquierda del reporte, llamado “Group Tree”, que sirve para acceder de forma mas rápida (Acceso Directo) a un grupo en particular y para visualizar la estructura jerárquica cuando hay múltiples grupos. El usuario final, que consultaría el reporte, puede ocultar el “Group Tree” mediante las opciones del viewer. Importante Otra de las cosas a tener en cuenta es que la jerarquía generada por los grupos está dada en el orden que se encuentran los mismos. Que significa esto, que si generamos un grupo por País primero (G1) y un grupo por Provincia después (G2), la estructura generada va a estar dada por el G1 y el G2, es decir, por País y después por Provincia. Ahora bien, supongamos que generamos primero el grupo por Provincia (G1), y después generamos el grupo por país (G2), la estructura generada va ser Provincia – País, la cual es incorrecta. Cómo corregimos esto?? No es necesario borrar todos los grupos existentes y volver a crearlos en el orden correcto como para que genere la estructura en forma correcta, lo que podemos hacer es corregir el orden de los mismos, o bien arrastrando la sección del grupo en cuestión al lugar correcto o mediante el “Change Group Expert” por el menú. Una vez, generados él o los grupos, se está en condiciones de poder definir diferentes sumarizaciones en base a ellos. Al agregar un subtotal Crystal lo coloca automáticamente en el footer del o los grupos seleccionados, lo cual no significa que no puedan ir en los header de las secciones involucradas. Para ello simplemente se arrastra. A su vez, los subtotales se pueden copiar y pegar en los diferentes niveles de agrupación que tengamos, ya que éstos, simplemente tienen asociados la operatoria designada, de está forma, evitamos volver a crearlos. Sumarizaciones más utilizadas Sum: Suma los valores de campos de tipo numérico. Count: Cuenta tos los campos leídos ya sean de tipo numérico o string Average: Calcula el promedio Maximum: Calcula el máximo Minimum: Calcula el mínimo Distinct Count: Cuenta los distintos. Si el campo que queremos sumarizar contiene valores nulos la función de sumarización no los va a tener en cuenta. Hay una opción que permite convertir los valores nulos a cero o “empty string” en Report Options. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 12 Variantes en la creación de grupos: Hemos visto anteriormente que para definir un grupo Crystal se basa en campos de la fuente de datos o en fórmulas, agrupando los registros en base a los campos mencionados. Ahora bien, hay dos variantes muy interesantes y utilizadas, en donde podemos especificar la forma en que queremos que se agrupe. La primera opción es la siguiente: supongamos que nuestra empresa realiza ventas en todo América, y en la base tenemos un campo que nos indica en que país se realizo la venta. Si agrupáramos por este campo podríamos obtener las ventas discriminadas por país, pero en realidad lo que a nosotros nos interesa es saber las ventas por Región, es decir, por América del Sur, América Central y América del Norte, y esta agrupación no existe en la base de datos, con lo cual para este caso, Crystal nos da la posibilidad de especificar como queremos agrupar en base al campo País, definiéndole las tres regiones mencionadas y que países integran cada una de ellas, obteniendo así las ventas por región. Ahora, tenemos las ventas por Región pero además queremos saber dentro de cada una de ellas en que países tuve ventas y como se distribuyen, deberíamos volver a agrupar por el campo país. Sin embargo no se puede volver a agrupar por el campo que se uso anteriormente, con lo cual estaríamos frente a un problema. La forma de resolver esto es agrupando por una fórmula que devuelva como resultado el campo país. La segunda opción, es agrupar por tablas de estructuras Padre-Hijo, muy comunes en diagramas multidimensionales por su flexibilidad de generar y mantener jerarquías. Para realizar un grupo y que me interprete automáticamente dichas estructuras, primero se agrupa por el campo Hijo, en forma normal. Luego mediante el menú accedemos a la opción “Hierarchical Grouping Options” donde podemos definir el campo Padre y la tabulación que deseamos que exista entre los diferentes niveles de la estructura. Drill-Down La importancia de definir grupos, no solo está dada por la posibilidad de mostrar información sumarizada sino también la posibilidad de hacer “drill down”, la cual nos permite ir explorando la información por los diferentes grupos, bajando de un grupo a otra hasta llegar al nivel de detalle del reporte. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 13 Se puede hacer drill down a través del reporte o el Grupo Tree. En el reporte se puede cliquear sobre el Group Name o sobre el valor sumarizado para hacer drill down. En algunas ocasiones se necesita impedir que el usuario haga drill down, por ejemplo sobre los valores que calculó la sumarización. Para resolver este problema se deben insertar campo resultado dentro de un objeto de texto. Top N / Botton N Para poder definir un Top N o Botton N, es necesario que en el reporte exista al menos un grupo y alguna sumarización por el mismo, debido a que se estos se definen en base a un subtotal o una sumarización de un grupo. En la versión XI se incorporó la posibilidad de definir por medio de una formula la cantidad de registros a visualizar, en las versiones anteriores el parámetro N se define de forma fija. Una aclaración importante es que, no se puede hacer un sub-total de los Top N o Botton N, debido a la forma en que Crystal los calcula. Para solucionar esto, se debe usar un campo “Runnig Total” Problemas que surgen al insertar grupos No quedan bien los encabezados cuando se define múltiples grupos y se utiliza la opción de Drill–Down. Este inconveniente fue solucionado a partir de la versión de Crystal Report 8.5, pero la solución propuesta por la herramienta no siempre satisface las necesidades de reporting, con lo cual veremos mas adelante que solución tenemos a este problema, para cualquier versión de Crystal Report Zona-Crystal.com - Crystal Reports: Manual Avanzado - 14 Campos de Fórmula Los campo de fórmulas son objetos que se construyen a partir de campos existentes en la fuente de datos con funciones definidas por el usuario de desarrollo y que se manejan como si fuera un campo mas de la base. Obteniendo de esta manera campos o cálculos que no vienen definidos en la fuente de datos. Para insertar un campo de fórmula, se debe ir al Explorador de Campos Al crear una nueva fórmula, primero se le debe asignar un nombre (el cual figura en el Explorador de Campos) y luego se abre el Editor de Fórmulas. Los campos fórmulas pueden ser creados con sintaxis Crystal o con sintaxis Basic, la diferencia radica en el lenguaje de escritura de las mismas. La sintaxis Crystal es un lenguaje muy parecido a los lenguajes de programación pero es un lenguaje propio de Crystal, en cambio, la sintaxis Basic resulta más sencilla para aquellos usuarios que están familiarizados con Visual Basic. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 15 El editor de fórmulas, posee tres arboles diferentes. Uno con los campos de la fuente de datos seleccionada, y todos aquellos elementos que se definan en el reporte. Otro con las funciones de Crystal y por último, uno de Operadores, los cuales facilitan al usuario la construcción de fórmulas. Variables en fórmulas Hay ocasiones en las que se necesita mantener el valor registro a registro, lo cual se resuelve mediante el uso de variables. Hay diferentes tipos de variables y con tres diferentes alcances: Local: Mantienen el valor en la fórmula en la que fue definida. Global: La variable mantiene el valor en todo el Reporte. Una variable definida en una fórmula puede ser usada en otra fórmula, incluso en otra sección. Por defecto sino definimos el alcance de un a variable al declararla, este es de alcance global. Shared: Sirven para compartir variables entre un Reporte y un Sub-Reporte, de gran utilidad cuando queremos traer información del Sub-Reporte al Reporte Principal. Running Total Es un campo, que brinda flexibilidad para acumular o incrementar los valores. Se calcula en (WhilePrintingRecords) y hace la operación de sumatoria definida con los datos que van a ser impresos. Algunos de los principales tipos de sumatorias que realiza son: Sum, Count, Average. Sirve para resolver el problema que se tiene al querer sumarizar los valores de cierto grupo que tiene un Top/Botton N, ya que al hacer un Sub-Total de los Top/Botton N, me suma todos los valores de los grupos. No se pueden crear Running Total en base a fórmulas que se evalúan en la segunda pasada, ni en base a graficos y mapas. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 16 Zona-Crystal.com - Crystal Reports: Manual Avanzado - 17 Formato Avanzado The Hightlighting Expert Permite dar formato a los campos dependiendo de los valores que estos tengan. Es de gran utilidad cuando se presenta el caso donde en función de varias condiciones queremos dar formato a un campo, incluso estas condiciones tienen prioridades. La desventaja que posse, es que se debe configurar campo por campo, no podemos hacerlo al mismo tiempo para varios campos. Por ejemplo: Si la deuda es mayor a 1000 mostrar en rojo, si la deuda es menor o igual a 1000 pero mayor a 100 mostrar en azul y si es menos o igual a 100 dejar como está. Para realizar este tipo de formato condicional, es una muy buena opción utilizar el Hightlighting Expert Conditional Formatting Fórmulas El formato condicional usa el editor de fórmulas, mediante el cual podemos crear fórmulas que determinen cuando y como queremos que aparezca el objeto. Formato Absoluto es simplemente darle formato a los objetos con el editor de formato. Si se aplica formato condicional el formato absoluto es ignorado, siempre y cuando en la fórmula que se realice no utilice “DefaultAttribute”, de lo contrario el atributo por defecto es el que se encuentra seteado. Mediante esta opción si se pueden setear varios campos al mismo tiempo, incluso teniendo en cuenta el valor de cada campo seleccionado. Para poder hacer esto hay que utilizar la siguiente función: “CurrentFieldValue” Zona-Crystal.com - Crystal Reports: Manual Avanzado - 18 Usos creativos de la propiedad Suppress Hay situaciones en la que es muy conveniente usar “conditionally suppressing” Ejemplos de utilidad: Mostrar la leyenda “continuación del grupo” cuando se repite el Group Header en distintas páginas; mostrar ciertos mensajes solamente para algunos registros; Usar imágenes una arriba de la otra y que aparezca una o la otra dependiendo de los valores. Imagenes Se puede variablizar la imagen que se sitúa en un Reporte, hacienda variable la ubicación de la misma. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 19 Formato de las Secciones Las opciones disponibles al cliquear botón derecho sobre una sección son las siguientes: Insert Line: Inserta una guideline horizontal en dicha sección Delete Last Line: Borra el ultimo guideline achicando el área. Arrange Lines: Fit Section: Ajusta la sección hasta la guia o el campo mas proximo. Es el mas usado de las opciones. El “Section Expert” Free – form placement: Permite mover objetos y que se ajusten a las guías Hide(drill- down ok): Permite ocultar la sección para hacer drill down. Suppress: Suprime la sección y todos los objetos dentro de ella. Es la más utilizada y practica. New Page Before: Empieza una pagina nueva antes de imprimir la sección New page after: Empieza una página nueva después de imprimir la sección Suppress blank Section: Suprime la sección si no hay objetos dentro de ella Underlay Following Section: Cada sección empieza donde termina la anterior. Si esta seleccionada esta opción en la sección B, dicha sección imprime el contenido de la misma, en las siguiente, es decir las secciones siguiente no empiezan donde termina la sección B. Sirve para acomodar gráficos al costado de Zona-Crystal.com - Crystal Reports: Manual Avanzado - 20 los datos, poner imágenes de fondo, poner información de un Sub-Reporte como doble columna en el reporte principal Zona-Crystal.com - Crystal Reports: Manual Avanzado - 21 Parámetros Los campos parámetros sirven para que el usuario final pueda ingresar datos al reporte, de esta forma se puede hacer variable el reporte tanto en información, si se utiliza para cambiar el criterio de selección de registros, o en formato, si se utiliza para hacer condicional el formato de los campos. Para crear un parámetro se hace desde el Explorador de Campos. Cuando se hace un refresh del reporte y este contiene parámetros, Crystal, ofrece la opción de usar los valores asignados previamente al parámetro o definir nuevos valores. El valor que es ingresado, luego es pasado, según su utilización, al Record Selection Fórmula, o al editor de fórmula de formato condicional del campo que corresponda. Los parámetros también se pueden mostrar en un reporte y manipularlos como los campos de la base o fórmulas. Para los parámetros que permiten múltiples valores o valores de rango, se les deberá hacer un tratamiento especial para mostrar en el reporte los valores ingresados por el usuario. Los tipos de parámetros pueden ser Simples o en Cascada, donde los tipos de datos van acorde a los posibles en Crystal Reports. Los parámetros simples son aquellos parámetros que solo tienen definido un solo nivel de carga y el valor a ingresar no depende de otro valor ingresado. En cambio los parámetros en cascada pueden tener diferentes niveles de carga de valores, donde cada uno de ellos va filtrando los valores de los niveles inferiores. Por ejemplo, si tuviéramos que realizar un reporte de clientes, donde el filtro del mismo, sea la ciudad, podemos realizar un parámetro en cascada con los siguientes niveles de carga: País – Región – Ciudad. De este modo el usuario primero seleccionara un País, luego cuando vaya a seleccionar una región, solo verá las regiones del Zona-Crystal.com - Crystal Reports: Manual Avanzado - 22 país previamente seleccionado. Luego de seleccionar una región deberá seleccionar la ciudad, donde solo verá las ciudades correspondientes a la región previamente seleccionada. En el caso de los parámetros en cascada podemos generar un parámetro para cada nivel o simplemente generamos un solo parámetro para el último nivel de la cascada. Seteando valores por default A los parámetros se le pueden setear valores por default, con el fin de que cuando el usuario consulte el reporte y tenga que ingresarle un valor al parámetro, le aparezca un lista desplegable con los posibles valores del parámetro. Es importante aclarar que los valores por default pueden ser estáticos o dinámicos. En el primer caso los valores por defecto no se actualizan, por ejemplo, si estamos seteando los valores por defecto del parámetro sucursal y cargamos las 5 sucursales con las que hoy cuenta la empresa, si el día de mañana se abre una nueva sucursal esta no se va a visualizar en los valores por defecto del parámetro. Con lo cual, en este caso deberíamos abrir el reporte e incorporar el nuevo valor correspondiente a la nueva sucursal. Ahora bien, si definimos los valores por defecto como dinámicos, los mismo se actualizarán según los valores que se encuentren en la base de datos, es decir, siguiendo con el ejemplo de la sucursal, nosotros solo definiríamos de que campo de la base de datos debe tomar las diferentes sucursales y en el caso que se incorporen nuevas sucursales estas aparecerán en los valores por defecto, ya que justamente el valor no es estático sino dinámico. A su vez, al parámetro se le pueden incorporar validaciones básicas, para que valide el valor ingresado por el usuario. Para los parámetros que son numéricos, se puede declarar un valor inferior y otro superior, limitando el ingreso de valores fuera del rango establecido. Para parámetros de tipo string, se puede validar el largo de la cadena, ya sea especificando el mínimo y máximo números de caracteres que el usuario tendrá que ingresar o mediante el Edit mask. Métodos para generar las Listas de Valores Dinámicas Desde Crystal Reports: Al generar un parámetro dinámico utilizando como fuente de datos las tablas seleccionadas en el reporte, podemos generar la lista de valores dinámicas. Ahora bien, la misma, no estará disponible en el repositorio hasta que no se publique el reporte en Enterprise, ya que al verificar que el reporte tiene un parámetro dinámico Enterprise genera la lista dinámica en el repositorio. Desde el Business View Manager: Desde aquí uno podría generar y/o modificar todas las listas dinámicas que necesite. Los pasos para generar una Lista Dinámica de cero son los siguientes: 1) Generar una Conexión: Desde aquí, se configura el driver de conexión a la base de datos deseada. 2) Generar un Data Fundation: Diagrama de Tablas Relacionado 3) Generar un Business Element: Modelo conceptual de una o mas tablas de un Data Fundation Zona-Crystal.com - Crystal Reports: Manual Avanzado - 23 4) Generar un Business View: Conjunto de Business Element, del cual un usuario final podría desarrollar reportes, sin tener que conocer el Modelo de Datos Relacional. 5) Generar una Lista de Valores: La lista de valores se genera en base a un Business View 6) Configurar el esquema a utilizar para la actualización de la Lista de Valores, es decir, se puede configurar que se actualice cada n segundos o programar la actualización de la lista, similar a un scheduled de un Reporte en Enterprise. IMPORTANTE: Al visualizar el Reporte en enterprise puede suceder que se solicite ingresar usuario y password de la base de datos donde se obtiene la lista dinámica. Para que esto no suceda se debe setear en la conexión que utiliza la Lista Dinámica, que no pregunte usuario y password cada vez que se ejecuta la lista y definirle un usuario y password para realizar la conexión. Utilizando Listas de Valores Dinámicas ya existentes Las listas de Valores Dinámicas al ser almacenadas en el Repositorio de Enterprise, están disponibles para ser reutilizadas. De este modo, volviendo al ejemplo del parámetro de sucursal, si tuviéramos 5 reportes que contienen dicho parámetro no es necesario generar la lista de valores dinámicos 5 veces sino que se define una vez, se almacena en el repositorio y luego se reutiliza en los otros reportes. Utilizando Listas de Valores Dinámicas con Stored Procedure En el caso de que la fuente de datos de nuestro reporte es un Stored Procedure y queramos que un parámetro del mismo tenga valores por defecto en base a una lista dinámica, debemos primero generar la lista dinámica por medio del Business View Manager y después si linkearla con el parámetro del Stored Procedure. Ahora bien, si nosotros tenemos parámetros en nuestro Stored Procedure que están relacionados, es decir, queremos utilizar parámetros de tipo Cascada, no es posible asignarle a los parámetros del Stored Procedure, los diferentes niveles de la Lista de Valores, lo que si es posible asignarle el último nivel, que en el caso de que sea único el valor del ultimo nivel no habría problemas, ya que alcanzaría con ese valor para filtrar la información. Como podemos resolver este inconveniente si no es único el código de nuestro nivel inferior?? Para resolver esto deberíamos generar cada nivel de nuestra lista de valores dinámicos, como una combinación del valor del nivel actual con los niveles superiores concatenados, por ejemplo con “.”. Esto se realiza por medio de formulas en el BVM. De esta manera obtendremos un código único en el menor nivel, y en el Stored Procedure descomponemos esta combinación para poder filtrar en nuestra base de datos por los valores de los diferentes niveles. Otro uso de los parámetros Los parámetros, como mencionamos anteriormente, se pueden ser usados también para dar formato condicional. A continuación se mencionan varios ejemplos de este uso. a) Se puede esconder información a los usuarios dependiendo de algún password que ingresen. b) Se pueden resaltar valores dependiendo a un tope ingresado por el usuario. c) Se le puede dar formato a los números y a las fechas del reporte, dependiendo de un parametro “Idioma”, donde pueden ingresar si lo quieren ver en formato español o ingles. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 24 d) También se puede usar los parámetros para ordenar o agrupar, creando una fórmula como por ejemplo: IF {¿group by }= “Country” THEN {Customer.country} ELSE {Customer.region} Al usar este tipo de fórmulas para agrupar, sé esta obligando a que Crystal haga el trabajo, si es que se está usando una base SQL, perdiendo performance ya que el trabajo de agrupar y ordenar lo podría estar haciendo el servidor. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 25 Objetos “Cross Tab” El Cross Tab es un objeto, en el cual podemos definir las filas, las columnas y que queremos sumarizar. Es una gran solución cuando estamos frente a un caso donde tanto las filas como las columnas deberán ser variables cada una a un campo determinado de la base. El campo sumarizado debe ser de tipo number o currency. Se pueden usar campos fórmulas tanto como columna, como fila, o como campo a sumarizar. Este tipo de objetos se puede colocar solo en las secciones Report Header o Report Footer o en los Header o Footer de los grupos definidos. El Cross Tab lo que hace es agrupar los registros que va leyendo, por los campos que tengamos definidos en las filas como en las columnas. Es decir, que contamos con las mismas opciones que tenemos al hacer un grupo. Cambiando el objeto Cross Tab Los Cross Tab son calculados en la segunda pasada “WhilePrintingRecords”, por lo tanto no se pueden usar fórmulas de segunda pasada. Tienen que ser fórmulas calculadas durante la primera pasada. Se pueden agregar múltiples columnas, filas o sumarizaciones. Por el lado de las sumarizaciones si hay dos, aparecerán dos valores en cada celda. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 26 Cuando se agrega otra campo a la fila o columna, se crea una relación de grupo entre los campos, que debe ser coherente y tener lógica. Se debe pensar en la relación de que en un grupo hay muchos grupos pertenecientes al mismo, con lo cual se define una estructura jerárquica. Suprimiendo Subtotales y etiquetas Hay situaciones en que se quiere agregar un grupo mas pero no se quieren ver los subtotales del mismos, con lo cual, se debe seleccionar el grupo del nivel superior, y se habilita o no la opción para suprimir los subtotales. Del mismo modo sucede, para suprimir las etiquetas o descripción del grupo. Por ejemplo, queremos mostrar las ventas de nuestros clientes por los productos. Definimos entonces, como fila a los clientes, como columnas a los productos y como campo a sumarizar las ventas. Ahora bien queremos ver a los clientes ordenados categoría pero no nos interesa el subtotal de la misma, ni cual es la categoría de los clientes con lo cual en este caso utilizaremos las dos opciones mencionadas. Mejorando la apariencia de un Cross Tab Es muy fácil darle un buen formato al Cross Tab ya que cada elemento es un objeto, y se los puede tratar de forma independiente, inclusive dándole un formato condicional. Importante A pesar de que tanto las filas como las columnas, están conformadas por grupos, no se puede utilizar la funcionalidad del Drill Down. Para esto lo que se puede hacer es utilizar una combinación de grupos del reporte con Cross Tab. Así como mencionamos la gran utilidad que tiene este objeto, al hacer descomponer un valor en forma variable tanto en las filas como en las columnas, una gran desventaja del mismo es que no se pueden calcular porcentajes en los mismos. De existir la necesidad de hacerlo y si se trabaja con una base SQL, podríamos utilizar un Stored Procedure, que calcule los valores y los porcentajes y utilizar el Cross Tab simplemente para mostrar los datos calculados por el SP. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 27 Subreportes Algunos problemas que no se pueden resolver con reportes tradicionales: • • • Una lista de ordenes por clientes y por mes , que también contenga los 5 productos mas vendidos del mes, sin importar los clientes. Un reporte basado en un pc-style database que no se puede linkear, debido a que no hay campos indexados. Un reporte que contenga información de una tabla, que no contengan un campo que pueda ser linkeada con otra y necesitemos mostrar la información en un solo reporte. Mediante los Subreportes se pueden resolver estas situaciones Un Subreporte, es un reporte que aparece dentro de otro reporte como un objeto. Cada subreporte, se puede o no, diseñar en forma separada, y puede tener o no, datos de otras bases. No existe limitación alguna en la cantidad de subreportes que un reporte pueda tener, pero si existe la limitación de que un subreporte contenga otro subreporte. Cuando se inserta un subreporte se puede usar la opción de Underlay Following Section para que aparezca la información al lado de los datos del Reporte Principal. En síntesis, los subreportes son reportes que se insertan dentro de otro reporte ya existente. Ahora bien al hacer esto tenemos diferentes posibilidades en cuanto a la relación que exista entre ambos reportes y a la forma de ejecución del subreporte. En cuanto a la relación, encontramos dos tipos diferentes de subreporte: Subreportes Unlinked Son los que se manejan completamente separados del Reporte Principal y no hay nada que los una. Subreporte Linkeados Estos tipos de reportes son controlados por el reporte principal. Es decir, los subreportes devuelven y/o dan formato a la información sobre la base de un campo del reporte principal que funciona como parámetro para el subreporte. Esto se realiza mediante un link entre el Reporte Principal y el Subreporte. Este tipo de link hace lo siguiente: pasa datos del Reporte Principal al Subreporte, el cual lo almacena en un campo parámetro, para luego utilizarlo donde corresponda. Es por ello, que cuando se desarrolla el subreporte por separado, como un Reporte Normal, al hacer una vista previa del mismo, aparece la ventana para ingresar el valor del campo parámetro, y una vez incorporado al Reporte Principal como subreporte y realizado el link, no lo solicita más. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 28 Otros de los benéficos de hacer link entre reportes, es poder hacer links entre las tablas que componen ambos reportes, mediante la utilización de fórmulas, si es que los campos mediante los cuales queremos establecer la relación son de diferentes tipos de datos. En cuanto a la forma de ejecución, también encontramos dos tipos diferentes de subreportes: En demanda Vs. In place subreports Por default el subreporte se procesara cada vez que aparezca en el Reporte Principal. Esto puede hacer que si un subreporte que esta ubicado en un Group Footer, se procese, tantas veces como veces que aparezca esa sección, por lo cual se hace menos performante. Para eliminar esta situación, hay una opción cuando se crea el subreporte para que este sea en demanda. En demanda significa que el subreporte va ser calculado cuando el usuario quiera, y no cuando se calcule el Reporte Principal. La forma que escojamos para trabajar con los subreportes, depende de diferentes aspectos, como ser, si el reporte y el subreporte tienen cierta relación en cuanto a la información, si el reporte requiere que la información sea On-Line o no, la cantidad de registros que deben consultar; todos estos aspectos influyen en la decisión en la forma de ejecución de los subreportes Pasando Variables entre reportes Hay dos métodos para pasar información entre el Reporte Principal y el Subreporte, a través de campos parámetros o a través de las variables shared Si por el contrario queremos pasar información del Subreporte al Reporte Principal la única forma que tenemos para hacer esto es mediante las variables shared. Para realizar este tipo de pasaje de información, hay ciertos pasos que se deben seguir: 1) Mediante una fórmula, se debe declarar la variable de alcance Shared en el Reporte Principal 2) En otra fórmula o en la misma fórmula creada en el paso 1, se le debe asignar un valor a la variable en el Reporte Principal para blanquear el valor de la misma. 3) Ya en el Subreporte, con otra fórmula, se la debe invocar o hacer referencia. Esto se realiza de la misma forma en la que fue creada en el punto 1. 4) En la misma fórmula, se le asigna el valor del Subreporte que se desea pasar al Reporte Principal 5) Y por último, en el Reporte Principal, se genera otra fórmula, donde haga referencia a la variable y tome el valor de la misma Observaciones: • • Los pasos 1 y 2, deben estar en secciones anteriores a la sección donde se encuentra el subreporte y el paso 5 debe estar en una sección posterior a la sección donde se encuentra el subreporte. Este tipo de pasaje de información no funciona en subreporte que son en demanda, debido a que no se ejecutan hasta que el usuario lo requiera, por lo tanto en el reporte principal no se contara con dicha información, aun luego de que se ejecute, ya que al hacerlo es en una instancia diferente. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 29 Gráficos Al crear gráficos hay que tener dos cosas en cuenta: Una es el Chart Type, que se refiere al tipo de grafico elegido para representar los datos. El Char Layout, se refiere a los datos que van a ser usados, si viene de la sección de detalles, de sumarizaciones de grupos. Los tipos de gráficos más usados son: BAR: El grafico de barras , sirve por ejemplo, para comparar un grupo de otro, donde cada barra representa a las distintas sumarizaciones de los grupos. LINE: Muestran la tendencia en el tiempo a través de una línea. Sirve para reportes con muchos grupos. AREA: Es igual al grafico de líneas, pero con la parte de debajo de cada línea pintada de un color. No sirve para múltiples grupos ya que se superponen. PIE: Es el clásico grafico de tortas donde cada porción, por ejemplo puede representar un porcentaje. Doughnut: es igual al grafico de tortas pero tiene un hueco redondo en el medio que representa el Grand Total; 3-D Raiser: Es la versión en tres dimensiones del gráfico de barras. Son muy buenos para usar con los Cross Tab ya que te permiten ver la información “por una dimensión o por la otra”. 3-D Surface: Es la versión del grafico de áreas en tres dimensiones. También sirven para los Cross Tab Es importante entender la diferencia entre un grafico de grupo o de área, y saber donde puede ser colocado en el reporte. Un grafico siempre debe ser colocado en al menos un nivel mas alto de los datos que esta representando. Un Detail Chart debe colocarse al menos en un Group Footer o Header, o en el Report Footer o Header. Un Group Chart debe ser colocado al menos, en el Report Footer o Header, o en un nivel superior si existen múltiples niveles de grupo. Nunca se puede poner un gráfico en la sección de detalle. Los gráficos basados en Cross Tabs o en OLAP, no deben cumplir con el requisito de ser colocados en un nivel superior. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 30 Chart Expert El Chart Expert facilita la construcción de reportes, donde el Type Tab contiene las distintas opciones de tipos de gráficos, el Data Tab permite elegir de donde se va a nutrir de información el gráfico. Si se selecciona un Group Chart, es condición necesaria que además de existir un grupo exista algún subtotal o una sumarización, para poder hacer el gráfico. Se puede hacer gráficos con múltiples niveles de grupo. Con esta opción se pueden generar diferentes gráficos para los distintos niveles de la jerarquía e ir profundizando la información con el método de Drill-Down. Si se selecciona un Advance Chart , se pueden crear grupos invisibles, o sea que no aparezcan en el Group Tree, pero que si este en el gráfico con la opción “On change of”. Se puede usar la opción de los Top/Botton N en este tipo de gráficos, cambiar los tipos de sumarizaciones, ordenar el orden del grupos invisibles. Si se selecciona Cross Tab Chart, debe haber un objeto Cross Tab en el reporte, quedando muy bien los gráficos en 3-D. Si se selecciona un gráfico OLAP debe haber un OLAP Grid. Es muy parecido a crear un Cross Tab Chart, quedando muy bien los gráficos en 3–D. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 31 Chart Analyzer Sirve para visualizar el gráfico y darle formato. A lo único que hay que prestarle atención, cuando se usa el Chart Analyzer para dar formato, es a replicarlo al resto de los gráficos si es que hay más de uno. Lo que suele ocurrir es darle formato a un grafico, de algún grupo en particular y luego al ver el mismo gráfico, para otro grupo, no ver los cambios realizados recientemente y pensar que se borraron. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 32 Anexo A: “Forma en que Crystal Reports genera los reportes” Crystal Reports usa un método de tres pasadas para elaborar los informes. Las siguientes secciones describen lo que sucede durante cada paso de este proceso. ¿Qué es una “pasada”? Una pasada es un proceso que Crystal Reports usa cada vez que se leen o se manipulan los datos. Dependiendo de la complejidad del informe, Crystal Reports puede hacer 1, 2 o 3 pasadas sobre los datos. Esta función permite complejas tareas de elaboración de informes y manipulación de fórmulas. Previa nº 1 Al observar una vista previa de un informe, los primeros elementos que se evalúan son las fórmulas “constantes”. Las fórmulas constantes son aquellas que tienen un valor constante durante todo el informe. Es decir, no cambian de un registro a otro. Por ejemplo, 100* 30 sería una fórmula constante. Las fórmulas constantes se evalúan al comienzo del proceso de generación de impresión y no se vuelven a evaluar. Este proceso se conoce como “BeforeReadingRecords”. Si ubicara un campo de fórmula constante (es decir, 100*30) en la sección Detalles, el resultado sería 3.000 para cada registro que se muestre. Pasada nº 1 Después que se ha producido el proceso “BeforeReadingRecords”, Crystal Reports comienza a leer los registros de la base de datos. Durante el proceso de lectura de registros, ocurrirá lo siguiente: • Recuperación de registros. Donde la posible selección y ordenamiento de registros se transfieren a la base de datos en este paso. • Evaluación de fórmulas recurrentes. Estas fórmulas contienen campos de base de datos, pero no contienen referencias a subtotales o información de resumen. Este tiempo de evaluación se conoce como “WhileReadingRecords”. Las fórmulas que contienen referencias a subtotales o información de resumen se procesan en la segunda pasada. • Aplicación local de la selección de registros. Si la selección de registros es demasiado compleja para transferirla a la base de datos, Crystal Reports se encarga de aplicarla en este paso. • Ordenamiento, agrupamiento y cálculo de totales. En este paso, Crystal Reports ordena los registros, los separa en grupos y luego calcula los subtotales y resúmenes necesarios para cada grupo. • Generación de tablas cruzadas, gráficos y mapas. En la Pasada nº 1 sólo se generarán las tablas cruzadas, los gráficos y los mapas que estén basados totalmente en campos de bases de datos y fórmulas recurrentes. Si estos objetos contienen totales acumulados o fórmulas PrintTime, se generarán en la Pasada nº 2. • Almacenamiento de datos guardados. Después de terminar el proceso de cálculo de totales, todos los registros y totales se almacenan en la memoria y en archivos temporales. Crystal Reports no lee la base de datos nuevamente, sino que utiliza los datos guardados durante todo el procesamiento posterior. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 33 Pasada previa nº 2 Durante la Pasada previa nº 2, Crystal Reports ordena los grupos del informe para lograr un agrupamiento jerárquico o N superiores/inferiores. Los registros no se leen en este proceso, en cambio Crystal Reports sólo ve las instancias de grupo de la Pasada 1 y toma los N superiores como apropiados, o bien ordena los grupos según la configuración especificada de agrupamiento jerárquico. Pasada nº 2 Crystal Reports realiza la segunda pasada por los datos para dar formato a las páginas. A las páginas se les da formato a la orden. Esto significa que Crystal Reports no dará formato a una página hasta que el usuario lo indique o hasta que lo requiera el recuento total de páginas en la Pasada nº 3. Durante el proceso de dar formato a las páginas, Crystal Reports realiza lo siguiente: • Fórmulas de selección de grupos. • Totales acumulados. • Cálculo de fórmulas marcadas como “WhilePrinting Records”. Estas fórmulas contienen referencias a los subtotales o a la información de resumen, también conocidas como fórmulas “PrintTime”. Este tiempo de evaluación se conoce como “WhilePrinting Records”. • Tablas cruzadas, gráficos y mapas. Las tablas cruzadas, los gráficos y los mapas que incluyen totales acumulados o fórmulas PrintTime, y los gráficos que están basados en tablas cruzadas se generan en la Pasada nº 2. • cuadrículas OLAP. • Subinformes. • Generar páginas a la orden. Nota: Puede que los subtotales, los totales generales y los resúmenes parezcan incorrectos si el informe tiene una fórmula de selección de grupos. Esto ocurre porque los totales generales y los resúmenes se calculan durante la Pasada nº 1, pero la fórmula de selección de grupos vuelve a filtrar los datos en la Pasada nº 2. Los campos de totales acumulados se pueden utilizar en lugar de los resúmenes para obtener el total de datos en informes que contengan una fórmula de selección de grupos. Pasada nº 3 En la tercera y última pasada, se determina el recuento total de páginas. Esto se aplica a los informes que utilizan los campos especiales de número total de páginas o Página N de M. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 34 Diagrama de flujo de informes de pasada múltiple Nota: Aunque los subinformes aparecen en la Pasada nº 2 en el diagrama de flujo, se pueden usar subinformes bajo demanda para asegurarse de que el informe principal sigue siendo un informe de una sola pasada. Con los subinformes a la orden, Crystal Reports todavía tiene que hacer una segunda pasada sobre los datos; sin embargo, esta segunda pasada no empezará hasta que usted profundice en el subinforme. En consecuencia, puede aumentar el rendimiento de los informes que contienen subinformes mediante el uso de subinformes a la orden. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 35 Anexo “B”: “Haciendo reportes desde bases de datos SQL” Generalmente las grandes empresas tiene sistemas de bases de datos Cliente/Servidor, como ser: Microsoft SQL Server, Oracle, Sybase, Informix, IBM DB2. Logearse a SQL Database El primer paso antes de conectarse a la base, es seleccionar la forma de comunicarse con ella, para ello, existen dos metodos: Drivers de Acceso Directo Crystal Reports provee drivers de acceso directo a las bases de tipo Cliente/Servidor mencionadas anteriormente. El driver usa los métodos de comunicación nativa provistos por los vendedores de bases. Para usar estos drivers se requiere tener instalada el cliente del software especifico. Hay 2 ventajas de usarlos: La primera es que como hay pocas capas de protocolos de comunicación, puede haber mayor performance; y la segunda, es que provee mayor flexibilidad para crear sentencias SQL especificas. Tambien incluye conexión nativa Outlook, exchange, Lotus Notes. ODBC Microsoft diseño un método de comunicación llamado ODBC para conectar una PC cualquiera a algún Server de datos específico. Cualquier base de datos que provea un ODBC para Microsoft puede ser reporteada por Crystal. Al instalar Crytal se instalan lso drivers de ODBC mas comunes del mercado. A traves del Data Explorer podemos elegir el driver con el cual nos queremos comunicar con la base y luego nos logeamos. Al logearse aparecerán las Tablas, Stored Procedures, Vistas, con las cuales podemos desarrollar un reporte. Hay una opción en File/Options que permite seleccionar que queremos ver al conectarnos a una base. Una vez logeados al servidor, permanecemos conectados aunque cerremos el reporte. Para deslogearse hay que cerrar la conexión a través de la opción Database/”Log On/Off Server...” del menu de Crystal Report. Cambiar un reporte de una base PC –Style a una Cliente/Servidor Para cambiar un reporte desarrollado en Acces a una base idéntica pero en SQL Server u Oracle, hay que cambiar el driver de conectividad. Para ello hay que ir a Database/Convert Database Driver. Si los campos difieren en la sintaxis, se abrirá una ventana para mapear los campos de las tablas viejas con los campos de las tablas nuevas Cambiar de un ODBC a otro ODBC o pasar de una tabla a otra de diferente nombre pero de igual estructura hay que ir a Database/Set Location y elegir el nuevo ODBC. También puede ser que haya que mapear los campos. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 36 Linkeando Tablas Cuando se construye un reporte con más de una tabla, Crystal abre una venta llamada Visual Linking Expert y automáticamente linkea los campos de las tablas que tengan los nombres iguales (Desde File/Options se puede deshabilitar esta opción y evitar el linkeo automático). Linkear consiste en elegir un campo de una tabla y relacionarlo con otra, permitiendo a la segunda tabla seguir a la principal a medida que los registros son leídos uno por uno. Para linkear manualmente hay que elegir un campo “desde”una tabla y arrastrarlos y soltarlo “Hacia” otra campo de otra tabla, obviamente deberán coincidir ambos campos en el tipo de dato. “Desde” se identifica con un bloque y “Hacia ” con una flecha. Si se requiere agregar una tabla ya existente, Crystal esto lo premite, pero hay que asignarle un alias. Es muy fácil crear un link que no devuelva errores pero que cuando se calcule el Reporte, este devuelva un resultado incorrecto. Diferencias de Linking entre PC-Style y SQL Databases Como primer diferencia las tablas de tipo Pc–Style tienen que tener campos indexados para poder linkearlos. Crystal requiere que el campo “hacia” es el que obligatoriamente tiene que estar indexado. Los índices aceleran el tiempo de búsqueda y mejoran la performance del reporte. Para reconocer los campos indexados, Crystal coloca un flecha al costado del campo, si hay mas de un campo, estos son de diferentes colores. Cuanto mayor número de campos indexados mayor posibilidad de linkear tablas tendremos, sin embargo muchos índices incrementan el tamaño de la base. Cuando se usan SQL databases con conectividad nativa o via ODBC, no aparecen los campo indexados con la flechita de color al costado, y tampoco existe el requerimiento de que el link “Hacia” tiene que estar indexado. Igualmente es necesario indexar los campos y tener conocimientos de ellos para mejorar la performance del reporte. Usando múltiple tipos de base de datos en un mismo reporte Crystal Reports no limita la cantidad de bases que se pueden usar por reporte, con lo cual, se pueden combinar distintas bases ya sea SQL databases o Pc–Style. Para poder hacer esto primero se debe conectarse a una base, y luego en el Visual Linking Expert, agregar las tablas de las otras bases. De todas formas, hay ciertas excepciones. Si se hace un join entre dos tablas de distintas fuentes de datos ODBC, como por ejemplo tablas de Oracle y tablas de SQL Server, solo se pueden linkear campos de tipo Zona-Crystal.com - Crystal Reports: Manual Avanzado - 37 string. O si, se usan tablas de diferentes tipos de base de datos, aparecerá un mensaje indicando que el reporte esta usando mas de un driver y hay veces que el reporte no funciona bien. Tipos de Join Cuando se linkean dos tablas, se debe considerar los registros que van a devolver. A continuación se describe un ejemplo como para entender mejor cada caso: Nombre de Empleado Karen Renee John Carl Denise Numero de Departamento 8 13 17 4 25 Numero de Departamento 17 25 8 13 32 Salario 32500 37500 85000 24000 125000 Nombre de Departamento Executive Mail Room Human Resources Finance Information technology Existen dos inconsistencias. Por un lado, Denise no tiene un registro en la tabla de Departamentos que coincida con su numero de departamento, y el departamento de Finanzas no tiene ningún empleado asociado. Se dice que entre estas dos tablas no hay integridad referencial. Los DBO se tendrían que encargar de asegurar la integridad referencial. Si esto no ocurre igualmente Crystal lo puede tratar. Supongamos que quiero hacer un listado de lo que cobra cada empleado agrupado por departamento, para ello, primero debería linkear las tablas por el campo “Numero de Departamento” Como existen varios tipos de Join el resultado del reporte puede ser diferente: Equal Join: También es conocido como “inner join”. Incluye los registros de las dos tablas solo cuando los campos que se joinean coinciden en sus valores, con lo cual, el resultado del mismo serán 4 registros. Crystal Reports por default utiliza este tipo de join. Lefter Outer Join: Incluye todos los registros de la tabla de la izquierda, y solo los registros de la tabla de la derecha que al joinear sean iguales a la tabla de la izquierda. En este caso, como resultado obtendremos 5 registros, pero el de Denise le faltará el nombre del Departamento. Right Outer Join: Incluye todos los registros de la tabla de la derecha, y solo los registros de la tabla de la izquierda que al joinear por un campo sean iguales a la tabla derecha. En esta caso, como resultado obtendremos 5 registros, pero el registro de Denise no será devuelto, pero si el Departamento de Finanzas que no tiene ningún empleado asociado. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 38 Se pueden modificar los Joins de las tablas solo para las SQL databases, para reportes sobre Pc-Style database son por default lefter outer join aunque este seleccionada la opción de equal join. Tabla de la Izquierda y Tabla de la derecha La tabla “Desde” donde sale el link es la tabla de la izquierda, y la tabla “Hacia” donde va el link es la derecha. Si el tipo de Join que se utiliza es un Equal , no es importante seleccionar cual será la tabla de la izquierda y cual de la derecha, ya que da lo mismo. En este caso simplemente hay que asegurarse la integridad referencial entre ambas tablas. En cambio si se usa otro tipo de join hay que examinar las relaciones entre las tablas. Comúnmente se las conoce como una relación de “una-a-una” o de “una-a-muchas”. Si hay solo un registro que coincida entre las dos tablas la relación es de “una-a-una”. No importa cual es la izquierda y la derecha.(Es el caso del equal join) Por el contrario, si en una tabla hay muchos registros que coincidan con un solo registro de la otra tabla, la relación es de “una-a-muchas”. En un modelo “estrella”, la Fact table, sera la de la izquierda y las respectivas “Dimensiones” serán la de la derecha. Sentencias SQL Crystal Report provee de una herramienta, Crystal SQL Designer, para escribir sentencias SQL, se almacenan como archivos .qry y después se pueden utilizar para el desarrollo de los reportes. La sintaxis de SQL cambia dependiendo la base y si la conexión es nativa o si usa ODBC. Esto permite copiar Query armados con otras herramientas y reutilizarlos con Crystal. Lo que no se puede hacer obviamente son Insert, Delete y Update. Usando SQL Stored Procedures Un SP es un query almacenado en la base de datos. Un reporte puede estar basado en tablas o en un SP, pero nunca por ambos al mismo tiempo, de requerir esto la solución esta dada con la utilización de Subreportes. Al incorporar el SP como fuente de datos del Reporte, y si este contiene parámetros, Crystal los reconoce automáticamente como Parameter Fields. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 39 Usando SQL Expresión Fields Una expresión SQL es como una fórmula, excepto que esta armada únicamente por campos y funciones de la base. La importancia de su utilización, esta dada en que la expresión es evaluada en el Servidor de Base de Datos y el trabajo no lo hace Crystal Reports, ganando así en performance. Agrupando en el Servidor Otras de las ventajas que obtenemos al trabajar con SQL Database, es la posibilidad de agrupar en el Servidor y que este se encargue de las sumarizaciones o de los subtotales. Para ello, hay que habilitar la opción en Database / Perform Grouping on Server y cumplir una serie de requisitos: a) Al menos debe haber un grupo en el reporte b) La seccion Detail debe estar oculta, justamente para no mostrar información de detalle c) En el Group Footer o Header solo hay que incluir las sumarizaciones y el campo del grupo, si se incluye algún campo o fórmula el servidor le debe mandar todos los registros. d) No se puede agrupar en base a fórmulas. Para eso usar expresiones SQL e) Si hay Running Total deben estar basados en campos sumarizados y nunca en detail fields. f) El reporte no puede contener sumarizaciones de tipo Average o Distinct Count, ni Top/Botton N, ya que SQL no las soporta. g) El orden de los grupos debe ser ascendente o descendente. No se puede especificar el orden. h) Si se agrupa por campos fecha, se debe hacer el grupo por cada dia, y si es por tiempo se debe agrupara por cada segundo. Efectos del Drill Down Como el Detail Section se debe suprimir o ocultar, cuando se hace drill down, lo que hace Crystal Reports es generar otro query en el momento y se lo envia al servidor para que le devuelva los registros que pertenecen a ese grupo. Consideraciones de Performance Como regla general de Reporting, hay que tratar que el servidor sea el encargado de filtrar la información, y si es posible de agruparla, ya que es mas veloz. Para verificar que esta calculando el servidor y que esta calculando Crystal Reports, hay que observar cual es el Query generado por Crystal que se envía al Servidor, para ello ir a Database/Show SQL Query. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 40 Anexo “C”: “Otras Consideraciones ” Instalación Crystal Reports • Si primero instaló Crystal Reports 10 en un equipo, no podrá instalar Crystal Reports 9 o 9.2 en el mismo equipo en instalaciones compartidas. Instale primero Crystal Reports 9.x para ejecutar ambas versiones compartidas. • Antes de ejecutar los paquetes de instalación para la creación de informes de Java, compruebe que tiene instalado Java Runtime Environment (JRE). • La instalación de los controladores de la base de datos a petición no funciona con informes basados en vistas empresariales. • El componente de creación de informes de Java no admite el controlador JavaBean. • VCL de Delphi para Crystal Reports sólo está disponible en el sitio Web Zona de desarrolladores de Crystal Decisions. • Si instala Crystal Reports 10 en el mismo equipo que Web Component Server (WCS) de Crystal Enterprise 9, el escritorio Web de Crystal Enterprise que se está ejecutando en este WCS se detendrá. Tendrá el mismo problema cuando instale Crystal Reports 9 en el mismo equipo que WCS de Crystal Enterprise 10. Instalación Crystal Reports for .NET • • • Una vez que haya desinstalado Crystal Reports 10, aparecerá una ficha de "Crystal Reports" en el cuadro de herramientas de Visual Studio .NET. Puede quitar esta ficha con seguridad. Puede que el componente de Crystal Reports para .NET no funcione correctamente después de desinstalar Crystal Reports 10 de Visual Studio .NET. Para restablecer la funcionalidad, ejecute la función de reparación en la instalación de .NET. Si instala Crystal Reports 10 y ejecuta de nuevo la instalación de Visual Studio .NET 2002/2003 (VS .NET 2002/2003) activando la opción "Crystal Reports para Visual Studio .NET", se producirán problemas. En el cuadro de herramientas, aparecerán los controles tanto de Crystal Reports 10 como de VS .NET 2002/2003, pero VS .NET 2002/2003 controlará la generación de código, la publicación como servicio Web, etc. Para que Crystal Reports 10 recupere el control de IDE, tendrá que volver a ejecutar la instalación de CR10 en modo de reparación. Para actualizarse correctamente a VS .NET 2002/2003 sin Crystal Reports 10, desinstale CR10 y vuelva a ejecutar la instalación de VS .NET 2002/2003 en modo de reparación. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 41 Actualización • • • • Ya no se admite la creación de informes desde Crystal Dictionaries, Crystal Queries o Crystal InfoViews. Puede abrir informes creados en versiones anteriores y establecer las ubicaciones de orígenes de datos en las tablas de comandos. No se pueden actualizar estos informes. Los informes compilados no son compatibles en Crystal Reports 10. Las funciones IsBusinessDay y NextNBusinessDays del lenguaje de fórmula no son recomendables y no deberían utilizarse; sin embargo, el Taller de fórmulas puede mostrar las funciones del árbol Funciones o reconocer las palabras clave si se escriben directamente en una fórmula. Los componentes de la actualización de Borland C#Builder no están disponibles en el CD de Crystal Reports Advanced o Developer. Estos componentes estarán disponibles en el siguiente sitio Web: www.crystaldecisions.com. • En esta versión, no se admite la creación de informes basada en conexiones usando conjuntos de datos con parámetros SByte (como ADOPlus). • La versión 10 de RAS COM SDK no admite la creación de un informe basado en un Objeto de datos Crystal (CDO). • Una nueva utilidad, el Asistente de migración del repositorio (CrystalRepoWiz.exe), se instalará como parte de Crystal Enterprise 10. Esta herramienta se instala en el Administrador de vistas empresariales y se utiliza para migrar el contenido del repositorio de la versión 9 al nuevo formato de la versión 10. Podrá ejecutarla desde el directorio win32_x86, o seleccionar el Asistente para migración de Crystal Repository desde el menú del programa de Crystal Enterprise 10. Compatibilidad con versiones anteriores • Los gráficos de embudo son una nueva función de Crystal Reports 10. Si crea un informe en Crystal Report 10 que incluya un gráfico de embudo, puede que no sea posible abrirlo en Crystal Reports 9. Para solucionar este problema, abra el informe en Crystal Reports 10 y cambie el formato por uno que Crystal Reports 9 pueda reconocer. • Dado que las vistas empresariales son una nueva función de la versión 10, los informes basados en estas vistas no se pueden abrir con versiones anteriores de Crystal Reports. • En esta nueva versión de Crystal Reports se han agregado nuevos campos especiales. Para su referencia, estos nuevos campos corresponden con los siguientes campos de la versión 9: • o Número de página horizontal corresponde con vertPageNumber en la versión 9. o Nombre de usuario actual corresponde con reportAuthor en la versión 9. o Id. de usuario actual corresponde con vertPageNumber en la versión 9. Crystal Reports 10 puede gestionar ciertos tipos de datos de manera diferente en la versión 8.5 o anteriores. Para garantizar que es compatible con versiones anteriores, la versión 10 gestiona los tipos de Zona-Crystal.com - Crystal Reports: Manual Avanzado - 42 datos de los informes creados en la versión 8.5 y anteriores de la misma manera que se gestionaban los tipos en estas versiones. Como resultado, si cambia la ubicación de la base de datos de un informe creado en Crystal Reports 8.5 o anterior (usando la opción de menú Establecer ubicación de base de datos) y los tipos de campos de la base de datos de la nueva ubicación se gestionan de forma diferente en la versión 10 y en la versión 8.5, Crystal Reports 10 gestionará los tipos de datos igual que en la versión 8.5 o anteriores. Entre los ejemplos de tipos de datos que se gestionan de forma diferente en la versión 10 y en la versión 8.5 se incluyen: • o En la versión 8.5 y anteriores, el tipo entero nativo de Oracle algunas veces se trataba como doble mientras que en la versión 10 siempre se trata un tipo nativo de Oracle como doble. o En la versión 8.5 y anteriores, el tipo de moneda de Access ODBC se trataba como decimal mientras que en la versión 10 se trata el tipo de moneda de Access ODBC como moneda. En Crystal Enterprise 10 ya no se admite la creación de informes sin gestionar. Notas y limitaciones • Aunque Crystal Reports 10 sea compatible con los valores de parámetros de 64K, no admite las descripciones de 64K para campos de parámetro. • La opción de formato Superposición (situada en la ficha General del cuadro de diálogo Opciones de gráficos) sólo está disponible para gráficos de barras y columnas. • El carácter '}' es un carácter especial y no se debe utilizar en nombres de bases de datos, fórmulas o campos de parámetro. • Algunas partes de los identificadores de hipervínculos (especialmente, dobles barras diagonales) de las fórmulas de contexto de datos aparecen como texto comentado en el Taller de fórmulas. • • Cuando utilice un informe OLAP, si el informe contiene parámetros de fila o columna, se deshabilitará el acceso a la hoja de cálculo para evitar que se introduzca en el informe cualquier inconsistencia. Como resultado, no podrá acceder a la hoja de cálculo cuando trabaje con un informe OLAP que contenga cualquier parámetro de fila o columna. Si actualiza el repositorio en un objeto de comando que no se pueda encontrar, el cuadro de diálogo Faltan elementos del repositorio no mostrará ningún error. Sin embargo, aparecerá un aviso diferente cuando utilice una copia en caché del objeto de comando. • Crystal Repository no está disponible (y no es compatible) con la edición Standard de Crystal Reports 10 porque Crystal Enterprise no está incluido en dicha versión. • Cuando selecciona la opción Diagrama/Mapa fuera de cuadrícula completa en el Asistente de diagrama/mapa, se omitirá la configuración A cambio de y Subdividido por. • Dado que el cuadro de diálogo Opciones recuerda automáticamente la última carpeta utilizada, la opción Directorio del informe se ha eliminado del cuadro de diálogo Opciones. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 43 • En el cuadro de diálogo Opciones de informe, desactive la nueva casilla de verificación Mantener el grupo junto en la primera página para garantizar que Crystal Reports empieza a imprimir el primer grupo en la primera página del informe, incluso cuando está activada la casilla de verificación Mantener el grupo junto. Nota: Hasta ahora, si el primer grupo ocupaba más de una página, la casilla de verificación Mantener el grupo junto hacía que Crystal Reports empezara imprimiendo el grupo en la segunda página del mismo, en lugar de imprimirlo en la primera. Si desactiva la nueva casilla de verificación Mantener el grupo junto en la primera página, podrá modificar el comportamiento de la primera página del informe. • • • • Para evitar la vinculación externa, se ha cambiado la vinculación automática predeterminada del Asistente de base de datos para que se realice la vinculación primero por clave y, a continuación, por nombre. Cuando cambia un parámetro de conexión de datos dinámica, debe llamar a VerifyDatabase antes de cambiar el parámetro. Error al llamar a VerifyDatabase antes de cambiar los resultados del parámetro en los datos examinados incorrectos. Las expresiones SQL pueden acceder a los datos de una columna restringida. Cuando restrinja una columna, actualice también cualquier expresión SQL que acceda a los datos de una columna restringida para asegurarse de que no se muestran estos datos. En el Asistente del repositorio, al copiar un grupo de objetos/archivos relacionados de una carpeta a otra (por ejemplo, de la carpeta original a una nueva carpeta), los nuevos objetos/archivos de la nueva carpeta todavía señalan a los objetos/archivos originales de la carpeta original. Como resultado, los cambios de un archivo/objeto de la nueva carpeta no afectan a otros archivos u objetos de dicha carpeta. Por ejemplo, si copia una infraestructura de datos, conexión de datos, elemento empresarial y vista empresarial de la carpeta original a la nueva carpeta, la nueva copia de la vista empresarial seguirá señalando a la infraestructura de datos, conexión de datos y elemento empresarial de la carpeta original. Como solución, exporte los archivos a XML. • Cuando trabaje con un informe que contenga conexiones de base de datos dinámicas, los datos del informe no se actualizan cuando se cambia de una conexión de base de datos a otra. • Debido a problemas con caracteres internacionales, únicamente podrá ver los informes realizados con Safari 1.0 en inglés. • El registro diagnóstico crea informes incorrectamente en la versión 5 y la versión 6 crea informes como la versión 10.2. • En Crystal Reports 8 y 9, puede incrustar las etiquetas de secuencias y otras etiquetas HTML en sus informes para permitir la creación de elementos DHTML en el resultado del visor DHTML. Para mejorar la seguridad, el comportamiento predeterminado de Crystal Reports 10 es convertir el texto seguro a HTML. Bajo su responsabilidad, puede activar una clave de registro para el comportamiento incrustado de HTML. Consulte el artículo de la siguiente página Web http://www.netsecurity.org/article.php?id=596 para comprender las implicaciones de no codificar el resultado HTML de Crystal Reports. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 44 • • Para que la nueva función de creación de informes asimétrica funcione correctamente con gráficos y mapas, se ha agregado una nueva función llamada "Diagrama (o mapa) fuera de cuadrícula completa" en varias ubicaciones de Crystal Reports. Esta función no aparece documentada en la Ayuda en pantalla. Si no selecciona esta opción, los gráficos y mapas únicamente proporcionan un conjunto de filas de una única dimensión en cada eje de fila/columna. Por lo tanto, el gráfico o mapa no heredará los filtros asimétricos aplicados en el punto de vista de la cuadrícula. Es posible que el visor DHTML Java muestre diagramas y mapas como imágenes EMF (formato de metarchivo) o como imágenes de mapa de bits. En las siguientes situaciones se mostrarán imágenes EMF: 1. Cuando el visor se ejecuta en un sistema Windows. 2. Cuando el visor se ejecuta en un sistema UNIX con interfaz. 3. El visor se ejecuta en un sistema UNIX sin interfaz en el que está instalado el JDK 1.4 y en el que el valor de la propiedad del sistema java.awt.headless es TRUE. En las siguientes situaciones se mostrarán imágenes de mapa de bits: 4. El visor se ejecuta en un sistema UNIX sin interfaz con la versión JDK 1.3 o anterior. 5. El visor se ejecuta en un sistema UNIX sin interfaz en el que está instalado el JDK 1.4 y en el que el valor de la propiedad del sistema java.awt.headless no está establecido. 6. El visor se ejecuta en un sistema UNIX sin interfaz en el que está instalado el JDK 1.4 y en el que el valor de la propiedad del sistema java.awt.headless es FALSE. En lo que respecta a esta nota, se define "sistema UNIX sin interfaz" como un sistema en el que no está establecida la variable de entorno DISPLAY. Al contrario, un "sistema UNIX con interfaz" es aquel sistema en el que la variable de entorno DISPLAY está establecida y en el que está instalado un sistema X. Puede establecer la propiedad del sistema java.awt.headless si añade la línea -Djava.awt.headless="true" a la secuencia de comandos de inicio del servidor de aplicaciones Web. Si la propiedad java.awt.headless se establece directamente en la página JSP se pueden obtener resultados inesperados. Integración con Crystal Enterprise • Para actualizar los objetos de comando de Crystal Repository en un entorno de Crystal Enterprise, asegúrese de que las opciones "Comprobar en la primera actualización" y "Comprobar procedimiento almacenado en la primera actualización" están activadas en el informe original. (Haga clic en Opciones de informe en el menú Archivo de Crystal Reports.) Zona-Crystal.com - Crystal Reports: Manual Avanzado - 45 Impresión y exportación • • Cuando exporta un informe a formato de Microsoft Excel (sólo datos), las columnas de la hoja de cálculo no se ajustan automáticamente según el campo seleccionado en la opción "Ancho de columna basado en los objetos". Para que las columnas de la hoja de cálculo se ajusten automáticamente, debe activar la opción Mantener la posición relativa del objeto. En la versión anterior de Crystal Reports, la exportación a formato CSV no anidaba los campos en los contextos de grupo correctamente. En esta versión, cuando exporta a formato CSV, los campos del área de detalles se exportan con los campos de los encabezados de grupo que lo preceden y los pies de página del grupo que lo suceden, en un mismo registro. • Cuando exporta un informe OLAP a formato Excel de la versión 9 o anterior, se le pedirá que se conecte al origen de datos OLAP incluso cuando el informe contiene datos guardados. • Internet Explorer no procesa correctamente el texto justificado después de exportar un informe a formato HTML. Este es un problema conocido de Internet Explorer. • • Cuando exporta un informe a DHTML como página única, los problemas de algunos exploradores pueden dar lugar a errores de formato. Como solución, realice la exportación a DHTML en páginas separadas. Cuando se exporta a Word o a cualquier formato de Microsoft Office y se cumplen todas las condiciones, puede que la exportación no muestre algunos datos, porque Microsoft Word o Office intentará editarlo a través de las Extensiones de FrontPage. Este comportamiento se puede evitar desactivando la creación Web en el servidor. Condiciones: 1. La aplicación Web de Windows 2003 Server debe tener activada la Autenticación de Windows integrada. 2. El usuario está conectado al equipo cliente como usuario con derechos de creación en el equipo del servidor Web. 3. El explorador del cliente tiene la seguridad de Windows integrada activada. 4. El equipo cliente tiene instalado Word o la aplicación de MS Office. Acceso a datos • • Hay nuevos controladores de base de datos en desarrollo para utilizarlos con los productos de la versión 10 de Crystal en Windows y UNIX. Consulte este vínculo para obtener la disponibilidad: http://www.crystaldecisions.com/ipl/default.asp?destination=updatedfeatures&language=ES&product=c rystalenterprise&version=10 La versión 10 de los productos de Crystal ya no incluye la mayoría de controladores de base de datos de ODBC (fabricados por DataDirect Technologies) que se instalaban en anteriores productos de Crystal. Habrá disponibles controladores actualizados de DataDirect ODBC para utilizar con la versión 10 de los Zona-Crystal.com - Crystal Reports: Manual Avanzado - 46 productos de Crystal en Windows y UNIX. Consulte este vínculo para obtener la disponibilidad: http://www.crystaldecisions.com/ipl/default.asp?destination=updatedfeatures&language=ES&product=c rystalenterprise&version=10 • • • En la barra de herramientas del Explorador de datos de la ventana Asistente de base de datos, una de las opciones mostradas es Crear nueva conexión. Cuando se expande, proporciona nuevas opciones de conexión (por ejemplo, ODBC). Cuando utilice procedimientos almacenados con un controlador ODBC de Sybase, si el nombre del procedimiento tiene un signo de subrayado ( _ ), el controlador devuelve datatype = null. Como solución, asegúrese de que los nombres de procedimiento no contienen caracteres de subrayado. Puede cambiar el origen de datos de muchos informes a la vez cambiando el DSN del sistema ODBC, pero Crystal Enterprise 10 gestiona esto de forma diferente con respecto a versiones anteriores. En el cuadro de diálogo Establecer ubicación, edite la nueva propiedad de tabla OverriddenQualifiedTableName. Cuando cargue un informe, si está basado en ODBC y tiene formato CR 8.5 (o anterior), se crea la propiedad de conexión useDSNProperties y se establece como True. Los nuevos informes creados en la versión 10 establecerán esta propiedad como false de forma predeterminada. (Este propiedad se guardará con el informe.) Cuando esta propiedad se establece como True, ODBC utiliza SQLConnect en lugar de SQLDriverConnect. Puede cambiar la propiedad useDSNProperties en el cuadro de diálogo Establecer ubicación. Nota: No puede cambiar el DSN del sistema ODBC si el nombre de la base de datos o nombre propietario contiene caracteres especiales. Puede encontrar problemas con antiguos controladores y con el cambio de los nombres de sus procedimientos almacenados. • Los datos devueltos por la consulta de la base de datos que contienen caracteres adicionales (como " hello ") se truncan para excluir espacios adicionales (" hello " se convierte en "hello"). Como resultado, las consultas de la base de datos que dependen de estos espacios adicionales devuelven datos inesperados. Utilice una de las siguientes soluciones: 1. Utilice la función Trim(). (donde Trim(lookupField)="hello") 2. Utilice caracteres comodín en la consulta. (donde lookupField="*hello*") • • • Se pueden producir errores al establecer la ubicación del origen de datos para trabajar con un informe basado en una vista empresarial con más de una tabla (guardando el informe como un informe sin conexión). Cuando cree un informe de una vista empresarial, si no puede buscar datos si la vista empresarial contiene restricción de fila, agregue un campo al informe y, a continuación, actualice el informe antes de buscar datos. Cuando trabaje con un informe basado en una vista empresarial, si necesita cambiar el parámetro del repositorio o metadatos, debe establecer el parámetro del repositorio y metadatos antes de obtener los datos. Si obtiene los datos y, a continuación, cambia el parámetro del repositorio o metadatos, se seguirá utilizando el objeto del antiguo repositorio. Zona-Crystal.com - Crystal Reports: Manual Avanzado - 47 • • Cuando se realiza una consulta a una base de datos de Lotus Notes con una consulta que contiene combinaciones externas anidadas, se generará el siguiente error: "Error al abrir conjunto de filas". Este error es debido a que el controlador ODBC de Lotus Notes no admite combinaciones externas anidadas. Cuando cree un vínculo de combinación externa izquierda en campos de enunciados SQL con tres o más tablas de diferentes orígenes de datos, si no hay coincidencia en el primer registro del vínculo, se devolverá una cadena igual a cero o una cadena vacía después de este vínculo. Por ejemplo, si hay un vínculo de 4 tablas: A->>>, donde cada tabla es de un origen de datos diferente y todos los vínculos son combinaciones externas izquierdas del campo del enunciado SQL de cada tabla. Si no hay coincidencia en el primer registro entre el vínculo A y B, la tabla C y D devolverá una cadena igual a cero o una cadena vacía en el informe. • • Cuando cree un informe usando codificación Unicode (UTF-8) y caracteres japoneses, el controlador DB2 informará del error al agregar tablas. Cuando utilice un vínculo inteligente con el controlador ODBC de Oracle, no aparecerá un índice basado en una expresión porque el controlador ODBC de Oracle no devuelve índices de expresiones; como resultado, el índice no tendrá vínculo inteligente. Cuando utilice el vínculo inteligente con el controlador nativo de Oracle, no aparecerá el índice basado en una expresión compleja; como resultado, el índice no tendrá vínculo inteligente. Sin embargo, para los índices de expresión que son campos de tabla en orden descendente, el vínculo inteligente por clave se comportará como se esperaba. • • • Cuando se conecte a una base de datos Sybase usando el controlador nativo de Sybase (crdb_p2ssyb10.dll), se generará un error si se ejecuta más de una instrucción SQL en la misma conexión de base de datos en el mismo momento. El error se genera porque el controlador nativo de Sybase no puede gestionar varios procedimientos almacenados en la misma conexión. Como solución, utilice un controlador ODBC en lugar de un controlador de Sybase. Crystal Reports 10 no puede abrir informes basados en Infoviews. Si abre un informe basado en Infoview en Crystal Reports 10, el informe parecerá que se abre correctamente pero no se aplicará la seguridad correcta. Si la función Infoview se utiliza para datos importantes seguros, se recomienda que limite el acceso o distribución de dichos informes. Consulte la documentación de vistas empresariales para obtener más información sobre nuevas funciones mejoradas de seguridad de datos en Crystal Enterprise y Crystal Reports 10. Puede que a veces la dirección de la combinación no se pueda cambiar (por ejemplo: combinación externa izquierda). En algunos escenarios de vinculación, esto significa que no se podrá realizar una consulta. En este caso, el usuario tendrá que cambiar el orden de vinculación. Se generará el siguiente error: "Error al abrir conjunto de filas. Error de motor de consulta: No se puede realizar la consulta. Se detectó un ciclo de vínculo ilegal." Zona-Crystal.com - Crystal Reports: Manual Avanzado - 48