Uso de Formulas Tema06

8
Crystal Reports – Fórmulas Los siguientes ejemplos de fórmulas se pueden usar como plantillas para ayudar a crear fórmulas de selección propias utilizando el Formula Workshop. Estos ejemplos ilustran diferentes tipos de selecciones que pueden realizarse, aunque no sean necesariamente las mejores. Selección de registros utilizando cadenas de caracteres {archivo.CAMPO} startswith "C" Selecciona aquellos registros en los cuales el valor en el campo {archivo.CAMPO} comienza con el carácter "C" (incluye valores como CyclePath, Corp. y Cyclist’s Trail Co.; excluye valores como Bob’s Bikes Ltd. y Feel Great Bikes, Inc.). not ({archivo.CAMPO} startswith "C") Selecciona aquellos registros en los cuales el valor en el campo {archivo.CAMPO} no comienza con el carácter "C" (incluye valores como Bob’s Bikes Ltd. y Feel Great Bikes, Inc.; excluye valores como CyclePath, Corp. y Cyclist’s Trail Co.). "999" in {archivo.CAMPO}[3 to 5] Selecciona aquellos registros en los cuales, del tercero al quinto dígito del campo {archivo.CAMPO} es igual a"999"(incluye valores como 10999, 70999, y 00999; excluye valores como 99901 y 19990). "Cycle" in {archivo.CAMPO} Selecciona aquellos registros en los cuales el valor en el campo {archivo.CAMPO} contiene la cadena "Cycle" (incluye valores como CyclePath Corp. y CycleSporin, Inc.; excluye valores como Cyclist’s Trail Co. y Feel Great Bikes, Inc.). Selección de registros utilizando números {archivo.CAMPO} > 99999 Selecciona aquellos registros que tienen un valor en el campo {archivo.CAMPO} mayor que 99999. {archivo.CAMPO} < 99999 Selecciona aquellos registros que tienen un valor en el campo {archivo.CAMPO} menor que 99999. {archivo.CAMPO} > 11111 and {archivo.CAMPO} < 99999 Selecciona aquellos registros que tienen un valor en el campo {archivo.CAMPO} mayor que 11111 pero menor que 99999 (ni 11111 ni 99999 están incluidos en ese rango de valores). {archivo.CAMPO} >= 11111 and {archivo.CAMPO} <= 99999 Selecciona aquellos registros que tienen un valor en el campo {archivo.CAMPO} mayor que 11111 pero menor que 99999 (ambos 11111 y 99999 están incluidos en el rango de valores).

Transcript of Uso de Formulas Tema06

Page 1: Uso de Formulas Tema06

Crystal Reports – Fórmulas Los siguientes ejemplos de fórmulas se pueden usar como plantillas para ayudar a crear fórmulas de selección propias utilizando el Formula Workshop. Estos ejemplos ilustran diferentes tipos de selecciones que pueden realizarse, aunque no sean necesariamente las mejores. Selección de registros utilizando cadenas de caracteres {archivo.CAMPO} startswith "C" Selecciona aquellos registros en los cuales el valor en el campo {archivo.CAMPO} comienza con el carácter "C" (incluye valores como CyclePath, Corp. y Cyclist’s Trail Co.; excluye valores como Bob’s Bikes Ltd. y Feel Great Bikes, Inc.). not ({archivo.CAMPO} startswith "C") Selecciona aquellos registros en los cuales el valor en el campo {archivo.CAMPO} no comienza con el carácter "C" (incluye valores como Bob’s Bikes Ltd. y Feel Great Bikes, Inc.; excluye valores como CyclePath, Corp. y Cyclist’s Trail Co.). "999" in {archivo.CAMPO}[3 to 5] Selecciona aquellos registros en los cuales, del tercero al quinto dígito del campo {archivo.CAMPO} es igual a"999"(incluye valores como 10999, 70999, y 00999; excluye valores como 99901 y 19990). "Cycle" in {archivo.CAMPO} Selecciona aquellos registros en los cuales el valor en el campo {archivo.CAMPO} contiene la cadena "Cycle" (incluye valores como CyclePath Corp. y CycleSporin, Inc.; excluye valores como Cyclist’s Trail Co. y Feel Great Bikes, Inc.). Selección de registros utilizando números {archivo.CAMPO} > 99999 Selecciona aquellos registros que tienen un valor en el campo {archivo.CAMPO} mayor que 99999. {archivo.CAMPO} < 99999 Selecciona aquellos registros que tienen un valor en el campo {archivo.CAMPO} menor que 99999. {archivo.CAMPO} > 11111 and {archivo.CAMPO} < 99999 Selecciona aquellos registros que tienen un valor en el campo {archivo.CAMPO} mayor que 11111 pero menor que 99999 (ni 11111 ni 99999 están incluidos en ese rango de valores). {archivo.CAMPO} >= 11111 and {archivo.CAMPO} <= 99999 Selecciona aquellos registros que tienen un valor en el campo {archivo.CAMPO} mayor que 11111 pero menor que 99999 (ambos 11111 y 99999 están incluidos en el rango de valores).

Page 2: Uso de Formulas Tema06

Selección de registros utilizando fechas Todas las funciones Month, Day y Year pueden ser empleadas en ejemplos como los siguientes: Year ({archivo.FECHA}) < 1999 Selecciona aquellos registros donde el año encontrado en el campo {archivo.FECHA} es anterior a 1999. Year ({archivo.FECHA}) >1992 and year ({archivo.FECHA}) < 1996 Selecciona aquellos registros donde el año encontrado en el campo {archivo.FECHA} se encuentra entre 1992 y 1996 (no se incluyen ni 1992 ni 1996). Year({archivo.FECHA}) >=1992 and year({archivo.FECHA}) <= 1996 Selecciona aquellos registros donde el año encontrado en el campo {archivo.FECHA} se encuentra entre 1992 y 1996 (incluidos 1992 y 1996). Month({archivo.FECHA}) in 1 to 4 Selecciona aquellos registros en los cuales el mes encontrado en el campo {archivo.FECHA} es uno de los primeros 4 meses del año (incluye enero, febrero, marzo, y abril). Month({archivo.FECHA}) in [1,4] Selecciona aquellos registros en los cuales el mes encontrado en el campo {archivo.FECHA} es el primero o el cuarto mes del año (incluye enero y abril, excluye febrero y marzo). Selección de registros utilizando rangos de fecha predeterminados Puede predeterminar los rangos para crear fórmulas de selección semejantes a las siguientes: {archivo.FECHA} in LastFullMonth Selecciona aquellos registros donde la fecha encontrada en el campo {archivo.FECHA} esta dentro del último mes completo. Si está en el mes de mayo, selecciona todos los registros con la fecha de abril. no({archivo.FECHA})in LastFullMonth Selecciona todos los registros, excepto aquellos en que la fecha encontrada en el campo {archivo.FECHA} está dentro del último mes completo. Si el mes es mayo, selecciona todos los registros, excepto aquellos en que la fecha es abril. Selección usando combinaciones de caracteres/fecha/numero Estas fórmulas simplemente "mezclan y combinan" fórmulas de las categorías antes mencionadas. "C" in {archivo.CAMPO}[1] and Month ({archivo.FECHA}) in [1,4] Selecciona aquellos registros en los cuales el valor en el campo {archivo.CAMPO} comienza con "C" y el mes es enero o abril. Por ejemplo, si usa este tipo de fórmula con una base de datos de pedidos, puede estar pidiendo un informe que muestre todos los clientes cuyos nombres comiencen con "C" y hayan ordenado algo en enero o en abril. “AOK” in {archivo.HISTORIA}[3 a 5] and {archivo.CREDITO} >= 5000 Selecciona aquellos registros en los cuales el campo {archivo.HISTORIA} muestra los caracteres "AOK" como el 3, 4 y 5 y el campo {archivo.CREDITO} (el monto de crédito disponible) es de por lo menos 5000. Puede usar estas plantillas como están (con sus propios datos), o bien combinarlas para crear fórmulas complejas.

Page 3: Uso de Formulas Tema06

Cómo solucionar problemas en fórmulas de selección de registros Para solucionar los problemas de las fórmulas de selección, primero debe asegurarse de que todos los campos a los que se hace referencia en la fórmula de selección están en el informe. A continuación, elimine la fórmula de selección y pruébela al tiempo que la va reconstruyendo. Por ejemplo, si uno de los selectores es: {cliente.CODIGO POSTAL} > “80000” pero el campo {cliente.CODIGO POSTAL} no se usa en su informe (como en el caso del informe de ventas que usa el código postal para definir territorios pero no lo incluye en los datos del informe), entonces inserte el campo {cliente.CODIGO POSTAL} en un lugar obvio del informe. O, si uno de los campos invocados en la fórmula de selección está en el informe pero oculto, cambie su estado (muéstrelo), desactivando la opción Ocultar en impresión para ese campo, en el Editor de Formato. Por ejemplo, si quiere usar lo siguiente en su fórmula de selección final: {cliente.CODIGO POSTAL} > “80000” and {cliente.APELLIDO DEL CONTACTO}[1] = “C” and {cliente.VENTAS DEL AÑO PASADO} >= 5000 esta fórmula seleccionará todos aquellos registros que muestren un código postal mayor que 80000, un valor en el campo {cliente.APELLIDO DEL CONTACTO} que comience con “C” y un valor en el campo {cliente.VENTAS DEL AÑO PASADO} mayor o igual que 5.000. Usted podría empezar con esto como su primera prueba de la fórmula de selección: {cliente.CODIGO POSTAL} > “80000”; Imprima el informe y evalúe los datos que se imprimen con sólo un selector activado. ¿Muestra el campo solamente códigos postales mayores que 80000? Si es así, entonces usted sabe que esta parte de la fórmula está funcionando bien. Si no, corrija esta parte de la fórmula de selección. Una vez que la fórmula trabaja correctamente con un selector activado, agregue el segundo selector, y así sucesivamente. Corrección de selecciones que no generan datos Se podría dar el caso en el que el usuario ha creado una fórmula de selección de registros, la información del encabezado y el pie del informe se imprimen correctamente, pero no aparece la información de la sección Detalles. La causa del problema es que la fórmula de selección rechaza todos los registros. Esto suele ocurrir a causa de un error inadvertido en la creación de la fórmula de selección. Corrección de la inconsistencia de mayúsculas y minúsculas Las fórmulas de selección de registros distinguen mayúsculas de minúsculas. Es decir, “Juan” sólo coincide con “Juan”. No coincide con “juan”, “JUAN”, “JuaN”, “jUAN”, “juaN” ni con “JUAn”. Así, si su fórmula de selección está definida para incluir sólo aquellos registros que contengan “JUAN” en el campo {cliente.NOMBRE DEL CONTACTO}, pero los datos en este campo mezclan mayúsculas y minúsculas (por ejemplo “Juan”), la fórmula no encontrará coincidencias y por lo tanto no imprimirá ningún registro en el informe. Puede resolver este problema usando las funciones UpperCase (str) (en el caso de mayúsculas) o LowerCase (str) (en el caso de minúsculas) en la fórmula de selección para convertir datos de campo a un formato coherente antes que el programa comience la selección. Por ejemplo, si usase la fórmula: {cliente.NOMBRE DEL CONTACTO} = "Juan" podría cambiarla a: UpperCase ({cliente.NOMBRE DEL CONTACTO}) = "JUAN" También puede usar la función LowerCase (minúsculas) en forma similar, para establecer coincidencias con “juan”. Otra fórmula que produce resultados similares a la anterior es: “JUAN” in UpperCase ({cliente.NOMBRE DEL CONTACTO}

Page 4: Uso de Formulas Tema06

Espacios en blanco innecesarios en la fórmula de selección En computación, los espacios son caracteres. Por ejemplo, la siguiente fórmula: "Sr . " in {cliente.TITULO} no encontrará ninguna coincidencia “Sr.”, debido a que hay un espacio extra en el termino de comparación entre la letra “r” y el punto. Del mismo modo, “Dr.” no coincidirá con “Dr. ”. Revise cuidadosamente su fórmula de selección y asegúrese que los espacios de la fórmula de selección coincidan con los espacios en los campos que está comparando. Uso de instrucciones If en las fórmulas de selección Siempre que cree fórmulas de selección de registros con instrucciones If, incluya también la palabra clave Else; de lo contrario, no se devolverá ningún registro o se obtendrán resultados inesperados. Por ejemplo, una selección de registros tal como If {campo parámetro} = "menor que 100" then {campo} < 100 se evalúa como False y no devuelve ningún registro. Para corregir este problema, complete la fórmula con Else True. Solución de problemas en fórmulas de selección de grupos En algunos casos, no se imprime ningún valor cuando se usa una fórmula de selección de grupos, aunque existan valores que cumplan con los criterios de selección. Normalmente, en estos casos: • La fórmula de selección de grupos hace referencia a otra fórmula. • La fórmula a la que se hace referencia es la que calcula el valor de cada grupo como porcentaje del valor total de todos los grupos (es decir, un subtotal como porcentaje de un total general). Para corregir una fórmula de selección de grupos 1. Use Xtreme.mdb para crear un informe que incluya los siguientes campos: {cliente.NOMBRE DEL CLIENTE} {cliente.REGION} {pedidos.ID DEL PEDIDO} {pedidos.MONTO DEL PEDIDO} Para cada pedido, el informe muestra el cliente que hizo dicho pedido, la región donde se encuentra el cliente, el número de ID del pedido y el monto del pedido. 2. Agrupe el informe según el campo {cliente.REGIÓN}. 3. Inserte un resumen que calcule subtotales del campo {pedidos.MONTO DEL PEDIDO} para cada grupo {cliente.REGIÓN}. El programa calcula un subtotal en el campo {pedidos.MONTO DEL PEDIDO} cada vez que cambia la región. 4. Inserte un total general en el campo {pedidos.MONTO DEL PEDIDO} para ver el valor total de todos los pedidos hechos. 5. Cree una fórmula denominada Porcentaje que calcule cada subtotal como porcentaje del total general para ver el valor de los pedidos para cada grupo de regiones como porcentaje de todos los pedidos hechos. Sum({pedidos.MONTO DEL PEDIDO}, {cliente.REGIÓN}) % Sum({pedidos.MONTO DEL PEDIDO}) 6. Coloque la fórmula en la sección Pie de grupo del informe. 7. Nombre a la fórmula (@Porcentaje) en una fórmula de selección de grupos que sólo seleccione aquellos grupos para los cuales el porcentaje (de subtotal a total general) sea inferior al 5%, para poder determinar cuáles regiones contribuyeron individualmente con menos del 5% de las ventas totales: {@Porcentaje} < 5 Cuando haga clic en Comprobar, recibirá el siguiente mensaje de error: Esta fórmula no puede ser usada porque debe ser evaluada más tarde. 8. En vez de usar el nombre de la fórmula (en este caso @Porcentaje) en la fórmula de selección de grupos, ingrese la fórmula misma (la fórmula denominada @Porcentaje). Así, en vez de usar la fórmula de selección de grupos: {@Porcentaje} < 5 use la fórmula de selección de grupos: Sum({pedidos.MONTO DEL PEDIDO}, {cliente.REGIÓN}) % Sum({pedidos.MONTO DEL PEDIDO}) < 5 Ahora, cuando imprima, sólo se imprimirán las regiones que contribuyeron con menos del 5%.

Page 5: Uso de Formulas Tema06

Usos típicos para fórmulas Existen muchos usos para las fórmulas. Si Ud. necesita manipulación especializada de datos, puede hacerlo con una fórmula. Cómo crear campos calculados para agregarlos a su informe Para calcular un precio con un descuento del 15%: {Detalle de pedidos.Precio unitario}*.85 Cómo dar formato al texto de un informe Para cambiar a mayúscula todos los valores en el campo Nombre de cliente: UpperCase ({Cliente.Nombre de cliente}) Cómo sacar una porción o porciones de una cadena de texto Para extraer la primera letra del nombre del cliente: {Cliente.Nombre de cliente} [1] Cómo extraer partes de una fecha Para determinar en qué mes se hizo un pedido: Ejemplo de sintaxis Crystal: Month ({Pedidos.Fecha de pedido}) Uso de una función personalizada Para convertir 500 € en pesetas: cdEurosaPesetas (500) Componentes de la fórmula Crear una fórmula en Crystal Reports es como crear una en cualquier aplicación de hoja de cálculo. Se puede usar cualquiera de los siguientes componentes en la fórmula: Campos Ejemplo: {cliente.APELLIDOS DEL CLIENTE}, {cliente.VENTAS DEL AÑO PASADO} Números Ejemplo: 1, 2, 3.1416 Text Ejemplo: “Cantidad”, “:”, “su texto” Operadores Ejemplo: + (sumar), / (dividir), * (multiplicar) Funciones Ejemplo: Round (x), Trim (x) Las funciones realizan cálculos tales como promedio, suma y conteo. Todas las funciones disponibles se listan con sus argumentos y se organizan según su uso. Funciones personalizadas Ejemplo: cdFirstDayofMonth, cdStatutoryHolidays Las funciones personalizadas proporcionan un medio para compartir y reutilizar la lógica de fórmulas. Se pueden almacenar en BusinessObjects Enterprise Repository. Una vez incluidas en el informe, estas funciones se pueden utilizar en el Asistente de fórmulas a la hora de crear fórmulas. Estructuras de control Ejemplo: “If” y “Select”, ciclos “For” Valores de campo de grupo Ejemplo: Average (campo, Cpocond), Sum (campo, Cpocond, “condición”) Los valores de campo de grupo resumen un grupo. Por ejemplo, Ud. podría usar valores de campo de grupo para buscar el porcentaje del total general aportado por cada grupo. Sintaxis de fórmulas Las reglas de sintaxis se usan para crear fórmulas correctas. Algunas reglas básicas son: • Incluir cadenas de texto entre comillas. • Incluir argumentos entre paréntesis (donde sea aplicable). • Las fórmulas con referencia se identifican por un signo @ situado a la izquierda.

Page 6: Uso de Formulas Tema06

Sintaxis Crystal y Basic Al crear fórmulas, puede utilizar la sintaxis Crystal o Basic. Casi todas las fórmulas se pueden escribir con ambas sintaxis. La sintaxis Crystal es el lenguaje de fórmulas incluido en todas las versiones de Crystal Reports. Si está familiarizado con Microsoft Visual Basic o con otras versiones de Basic, puede que esté acostumbrado a la sintaxis Basic. En general, esta sintaxis se modela en Visual Basic, pero tiene extensiones específicas para controlar la elaboración de informes.

Comentarios (Sintaxis Crystal)

Los comentarios de fórmula son notas incluidas en una fórmula para explicar su diseño y funcionamiento. Los comentarios no se imprimen y no afectan a la fórmula; aparecen solamente en el Formula Workshop. Use los comentarios para explicar el objetivo de una fórmula o los pasos necesarios para escribirla. Los comentarios comienzan con dos barras diagonales (//) seguidas del texto. Todo lo que sigue a las barras diagonales en la misma línea se trata como parte del comentario:

//Esta fórmula devuelve la cadena "Hola"

//Éste es otro comentario

"Hola" //Los comentarios se pueden agregar al final de una línea

//Los comentarios pueden aparecer después del texto de la fórmula

Campos (Sintaxis Crystal)

La manera más fácil de insertar un campo en un informe es hacer doble clic en el nombre del campo en el árbol Campos de informe. De ese modo se asegurará de que usa la sintaxis correcta para el campo.

Apariencia de los campos en las fórmulas

Los nombres de los campos de base de datos, de parámetro, de fórmula, de total acumulado y de expresión SQL van entre llaves. Los nombres del campo de base de datos se toman de la base de datos. Por ejemplo: Campo de base de datos: {Empleado.Apellido}

Los nombres de los campos de parámetro, de fórmula, de total acumulado y de expresión SQL se especifican al crear los campos.

• Los campos de parámetro también incluyen un signo de interrogación: {?mi campo de parámetro}.

• Los campos de fórmula incluyen un signo de arroba: {@otra fórmula}. • Los campos de total acumulado incluyen un signo de almohadilla: {#mi total acumulado}. • los campos de expresión SQL incluyen un signo de porcentaje: {%mi expresión SQL}.

Los campos de nombre de grupo y resumen se asemejan a las llamadas de función. Sin embargo, en realidad son anotaciones abreviadas de un campo de informe.

• Campo de resumen de suma: Sum({Pedidos.Monto del pedido}, {Pedidos.Enviar mediante}).

• Campo de nombre de grupo: GroupName({Pedidos.Enviar mediante}).

Page 7: Uso de Formulas Tema06

Fórmulas de muestra usando campos (Sintaxis Crystal)

La fórmula de este ejemplo usa la base de datos Xtreme. Para calcular cuántos días son necesarios para enviar el producto a partir de la fecha en que se hizo el pedido, reste el campo de la base de datos de fecha de envío del campo de la base de datos de la fecha del pedido:

//Una fórmula que usa campos de bases de datos {Pedidos.Fecha de envío} - {Pedidos.Fecha de pedido}

Para calcular el importe total de un producto pedido, multiplique su precio unitario por la cantidad pedida:

{Detalles del pedido.Precio unitario} * {Detalles del pedido.Cantidad}

Para calcular un precio de oferta del 80 por ciento del precio unitario original:

{Detalles del pedido.Precio unitario} * 0.80

Uso de la expresión If (Sintaxis Crystal)

La expresión If es una de las características más usadas de la sintaxis Crystal. También permite entender la naturaleza de las expresiones. Considere la expresión If anterior como una fórmula separada. Observe que dado que esta fórmula es una sola expresión, no necesita un punto y coma:

If {Detalles del pedido.Cantidad} > 1 Then "varias unidades" Else "una unidad"

Suponga que desea modificar esta fórmula de modo que imprima "varias unidades" o el número 1.

//Una fórmula errónea If {Detalles del pedido.Cantidad} > 1 Then "varias unidades" Else 1

Esta fórmula va a entregar un error. Esto es porque los valores de esta expresión son tipos diferentes: "varias unidades" es un valor de cadena y 1 es un valor numérico. Crystal Reports requiere que el valor de una expresión siempre sea de un sólo tipo.

Nota: Este ejemplo se puede corregir al usar la función CStr para convertir el número 1 en un valor de cadena. Por ejemplo, el número 1 se convierte en la cadena "1" al llamar a CStr (1, 0).

Asignación ( Sintaxis Crystal)

El operador de asignación son dos puntos seguidos por un signo igual (:=).

Ejemplo //Asignar el valor numérico de 10 a la variable x x := 10;

Page 8: Uso de Formulas Tema06

//Asignar el valor de cadena de "hola" a la //variable denominada saludo saludo := "hola";

El operador de igualdad (=) se usa para verificar cuándo dos valores son iguales. Un error común es usar el operador de igualdad en lugar del operador de asignación. Esto puede generar un misterioso mensaje de error o ningún mensaje puesto que a menudo es sintácticamente correcto usar el operador de igualdad. Por ejemplo: saludo := "hola";

La fórmula anterior verifica si el valor mantenido por la variable saludo es igual al valor "hola". Si así es, entonces el valor de la expresión es True; y si no es así, el valor de la expresión es False. En cualquier caso, es una expresión de sintaxis Crystal perfectamente correcta (suponiendo que el saludo sea una variable de cadena).

Moneda (Sintaxis Crystal)

Use el signo dólar ($) para crear un valor monetario.

Ejemplo $10000 -$20 $1.23

También puede usar la función CCur. La C inicial en CCur significa "convertir" y se puede usar para convertir valores numéricos en valores de moneda:

CCur (10000)

Cadena (Sintaxis Crystal)

Las cadenas se usan para contener texto. El texto se debe ubicar entre comillas dobles (") o apóstrofes (') y no se puede dividir entre líneas. Si desea incluir comillas dobles en una cadena delimitada por comillas dobles, use dos comillas dobles consecutivas. Del mismo modo, si desea incluir un apóstrofe en una cadena delimitada por apóstrofes, use dos apóstrofes consecutivos.

Ejemplo "Esto es una cadena." "123" "La palabra ""hola"" está entre comillas." 'Esto también es una cadena.' '123' 'Ventas del último año'

Si usa comillas dobles a la izquierda de la cadena, debe usar comillas dobles a la derecha. La misma regla se aplica para los apóstrofes. Es posible extraer elementos individuales o subcadenas de una cadena al especificar la posición del carácter o un rango de posiciones de carácter. Los valores negativos están permitidos, ya que especifican las posiciones comenzando desde el final de la cadena.

"hola" [2] //Igual a "o" "hola" [-4] //Igual a "h" "604-555-1234" [1 to 3] //Igual a "604" "abcdef" [-3 to -1] //Igual a "def"

Booleano (Sintaxis Crystal)

Los valores booleanos válidos son Verdadero y Falso

Nota: Yes (sí) se puede usar en lugar de True (verdadero) y No en lugar de False (Falso).