Escolar Documentos
Profissional Documentos
Cultura Documentos
C A P T U L O
Operadores y variables
Introduccin
Este captulo trata en profundidad todos los operadores de Crystal Reports. Los operadores son smbolos o palabras especiales que describen una operacin o una accin que se va a realizar entre dos o ms valores. Los operadores se usan en las frmulas. Crystal Reports lee los operadores de una frmula y realiza las acciones especificadas. Este captulo explica en profundidad cada operador. La lista de operadores est ordenada alfabticamente. Nota Los operadores de Crystal Reports (Equal, In string, etc.) distinguen entre minsculas y maysculas. Por ello, "ABC" no es igual a "abc", "abc" no est en la cadena "ABCDEF", etc.
Suma (+)
Uso
x+y Suma los valores x e y.
Ejemplo(s)
5+6 {file.QTY1} + {file.QTY2}
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 59 of 20 Printed:
Devuelve Apr 27 91
Y (and)
Uso
x and y False and False = False False and True = False True and False = False True and True = True
Ejemplo(s)
If {file.CREDIT LIMIT} = 5000 And {file.SALESMAN} = "SP" Then {file.AMOUNT} Else 0;
Si el lmite de crdito es 5000 y el representante de ventas es SP (ambas condiciones son verdaderas), entonces se devuelve el valor del campo Amount. De lo contrario, se devuelve cero.
A > B and B > C
Devuelve FALSE, donde A =10, B =6 y C =7 (slo una de las dos condiciones es verdadera).
(A>B) and (A*C-D>E) and (E/D<=B)
Asignacin (:=)
Uso
x := n Asigna el valor n a la variable x. (x tiene que estar previamente declarada en la misma frmula.)
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 60 of 20 Printed:
Ejemplo(s)
Amount := 0
Asigna el resultado de un clculo a la variable Amount. El clculo agrega el valor del campo de cantidad ({detail.QTY}) al valor actual de la variable Amount.
Amount := {detail.QTY1} + {detail.QTY2} + {detail.QTY3}
Calcula el total de los tres campos de cantidad y asigna este total a la variable Amount.
Customer := "Westside Motors"
Elimina los espacios en blanco a la derecha del campo de nombre {customer.FIRST NAME}, agrega un espacio en blanco, concatena el campo de apellido {customer.LAST NAME} y asigna el valor concatenado de ambos campos a la variable Customer.
Customer:= "Sr. " + {customer.LAST NAME}
Concatena la cadena "Sr. " con el valor del campo de apellido {customer.LAST NAME} y asigna el valor concatenado a la variable Customer.
Amount := 100; Customer := "Westside Motors"
Asigna la constante 100 a la variable numrica Amount y asigna la cadena "Westside Motors" a la variable de cadena Customer. Puede asignar valores a mltiples variables si separa las instrucciones de asignacin con signos de punto y coma.
Comentario (//)
Uso
// texto El texto que figura a la derecha del operador es un comentario; no se trata como parte de la frmula y no se imprime.
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 61 of 20 Printed:
Ejemplo(s)
{file.SALES} - {file.COST} // calcula el beneficio bruto
{file.SALES} - {file.COST} es la frmula; el Editor de frmulas pasa por alto todo lo dems.
({file.SALES} - {file.QUOTA}) * .06 //calcula la comisin de ventas
({file.SALES} - {file.QUOTA}) * .06 es la frmula; el Editor de frmulas pasa por alto todo lo dems.
// A continuacin aparece // una frmula. Observe que cuando // forzamos un salto de lnea debemos // comenzar la siguiente lnea con un // operador de comentario If {file.COST} > {file.SELLPRICE} Then "Loss" Else ""; //Eso era una frmula
Todas las lneas que aparecen como comentarios antes y despus de la frmula se pasan por alto.
Concatenacin (+)
Uso
x+y Concatena (conecta) la cadena x a la cadena y para crear una nica cadena contigua.
Ejemplo(s)
"Pan " + "y " + "mantequilla"
Devuelve "Su nmero de cliente es 64 y la persona de contacto de la empresa es Benito.", donde CustomerID = 64 y First Name = Benito.
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 62 of 20 Printed:
Divisin (/)
Uso
x/y Divide el valor x entre el valor y.
Ejemplo(s)
25/5
Devuelve 5.
1/3
Devuelve .33333.
{file.SALES} / {file.FORECAST}
Devuelve 22, donde DaysDue = 110. Nota Si el denominador = 0, el informe se ver detenido por una advertencia de divisin por cero. Si desea evitar este problema, debe incluir una comprobacin de este tipo:
If {file.FORECAST} = 0 Then 0 Else {file.SALES} / {file.FORECAST}
Igual (=)
Uso
x=y x es igual a y. El operador Equal pide a Crystal Reports que evale una expresin (x=y) y devuelva TRUE (si x es igual a y) o FALSE (si x no es igual a y).
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 63 of 20 Printed:
Ejemplo(s)
{file.QUANTITY} = 3
True, donde el valor del campo YTD idntico al valor del campo Last Year YTD.
{file.YTD} = {file.LAST YEAR YTD}
Ejemplo(s)
{file.WEIGHT} > 200
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 64 of 20 Printed:
Ejemplo(s)
{file.WEIGHT} >= 200
If-Then-Else
Uso
If x Then y Else z Si x es verdadero, entonces (Then) realiza y. Si x no es verdadero, entonces (Else) realiza z.
Ejemplo(s)
If {customer.POSTAL CODE} <= "49999" Then "Etiqueta azul" Else "Tierra";
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 65 of 20 Printed:
En matriz (in)
Uso
x in [y] Est x en la matriz y?
Ejemplo(s)
{customer.REGION} in ["CA","HI","AK"]
Est el valor del campo Region entre las abreviaturas que figuran entre corchetes?
{file.COLOR} in ["Rojo","Blanco","Azul"]
Est el valor del campo Color en la matriz de colores que figura entre corchetes?
DayofWeek({orders.ORDER DATE}) in [2,4,6]
Figura el valor del campo Order Date, una vez convertido a un nmero que representa el da de la semana, entre la matriz de nmeros que aparece entre corchetes? (Domingo = 1, Sbado = 7)
En intervalo (in)
Uso
x in y Prueba un intervalo de valores (y) para ver si un valor (x) se encuentra dentro del intervalo especificado.
Ejemplo(s)
Today in Date(1990,09,01) to Date(1990,09,20)
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 66 of 20 Printed:
True, donde Qty=20, OnHand=10, Backorder=5, OnOrder=25. (Est 20 dentro del intervalo que comienza con 10 y termina con la suma de 5 y 25?)
{file.QTY} in {file.ONHAND} to ({file.BACKORDER} + {file.ONORDER})
False, donde Qty=31, OnHand=10, Backorder=5, OnOrder=25. (Est 31 en el intervalo que comienza con 10 y termina con la suma de 5 y 25?)
En cadena (in)
Uso
x in y Comprueba si la cadena x est en la cadena y.
Ejemplo(s)
"Elm" in {customer.ADDRESS1}
False, donde Motto = "Sienta ms energa". (La terminacin "ta" de "sienta" y el comienzo "m" de la palabra "ms" estn separados por un espacio en blanco que tambin cuenta como un elemento.)
"el m" in {file.MOTTO}
True, donde Motto = "Sienta ms energa". (Esta vez, la cadena de bsqueda "ta m" contiene el espacio en blanco entre la a y la m, por lo que s se produce la coincidencia.) Nota El operador "in" tambin puede usarse para probar la presencia de una cadena dentro de un intervalo de texto (por ejemplo, "V5B" in "V0A" to "V9Z").
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 67 of 20 Printed:
Ejemplo(s)
{file.WEIGHT} < 200
Ejemplo(s)
{file.WEIGHT} <= 200
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 68 of 20 Printed:
Like
Uso
x like y {file.FIELD} like "c?n*" Este operador comprueba si el contenido de {file.FIELD} coincide con el modelo especificado en la cadena de caracteres "c?n*". Si el contenido del campo coincide con el modelo "c?n*", la frmula devuelve el valor True. Si el campo comienza con cualquier otra cosa, la frmula devuelve False. Puede usar los caracteres comodn ? y * para tener en cuenta caracteres variables. El smbolo ? representa un nico carcter, mientras que el smbolo * representa cualquier nmero de caracteres.
Ejemplo(s)
{customer.FIRST NAME} like "D?n"
Ejemplo(s)
[100,200,300,400] [{file.QTYA}, {file.QTYB}, {file.QTYC}] [({file.AMT1} *.5),({file.AMT2} *.5), ({file.AMT3} .25)] [500,({file.QTY} /3)]
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 69 of 20 Printed:
Ejemplo(s)
100.00 to 250.00
El intervalo de valores numricos consecutivos comenzando con 100.00 y finalizando con 250.00, incluyendo los valores inicial y final.
Date(1990,09,01) to Date(1990,09,20)
El intervalo de fechas consecutivas que comienza el 1 de septiembre de 1990 y termina el 20 de septiembre de 1990. El 1 de septiembre y el 20 de septiembre estn ambos incluidos en el intervalo.
"Aaron" to "Lusk"
El intervalo de valores de cadena consecutivos que empieza con Aaron y termina con Lusk, incluyendo los valores inicial y final.
Multiplicar (*)
Uso
x*y Multiplica el valor x por el valor y.
Ejemplo(s)
2883 * 1999
Devuelve 5,763,117.
{file.EXMPT} * 356.00
Negar (-())
Uso
(-(x)) Multiplica el valor del interior del parntesis por -1.
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 70 of 20 Printed:
Ejemplo(s)
-(-1)
No (not)
Uso
Not (x) Invierte el valor True o False de x. Not (True) = False Not (False) = True Not (Not(False)) = False Not (Not(True)) = True
Ejemplo(s)
not (A > B and B > C)
Si A = 5, B = 4, C = 3, la expresin (A > B and B > C) es TRUE. Las dos condiciones unidas por el operador booleano And son TRUE. Por ello, la instruccin completa tiene un valor TRUE. El operador Not cambia el valor de la expresin a FALSE.
not (A > B and B > C)
Si A = 3, B = 4, C = 3, la expresin (A > B and B > C) es FALSE. Una de las dos condiciones unidas por el operador booleano And es FALSE. El operador Not cambia el valor de la expresin a TRUE.
not ({file.ONHAND} - {file.ORDER} > 0) = TRUE
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 71 of 20 Printed:
No igual (<>)
Uso
x <> y x no es igual a y. El operador No igual pide a Crystal Reports que evale la expresin (x<>y) y devuelva TRUE(si x no es igual a y) o FALSE(si x es igual a y).
Ejemplo(s)
{order.ORDER AMOUNT} <> 400
True, donde el valor del campo Available menos el valor del campo Used es diferente a 10.
{file.AVAILABLE} - {file.USED} <> 10
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 72 of 20 Printed:
O (or)
Uso
x or y x, y o ambos son verdaderos. False or False = False False or True = True True or False = True True or True = True
Ejemplo(s)
If {file.CREDIT LIMIT} = 5000 or {file.SALESMAN} = "SP" Then {file.AMOUNT} Else 0
Esto significa que en caso de que el lmite de crdito sea 5000 o el representante de ventas sea SP (cualquiera de las dos condiciones sea verdadera) se devuelve el valor del campo Amount; de lo contrario no se devuelve nada.
A > B or B > C
True, donde A = 5, B = 5, C = 3, D = 2, E = 12. Al menos una de las tres condiciones es verdadera. En este caso, nicamente una de las condiciones (A * C - D > E) es verdadera.
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 73 of 20 Printed:
Parntesis (())
Uso
(x + y) * z Realiza primero los clculos del interior del parntesis. Los parntesis se usan para controlar el orden en el que el Editor de frmulas calcula una frmula.
Ejemplo(s)
8 + 6 * 3 - 6 / 2 = 23 (8 + 6) * 3 - 6 / 2 = 39 (8 + 6) * (3 - 6 / 2) = 0 (8 + 6 * 3 - 6) / 2 = 10 {file.SALES} - {file.COGS} - {file.T&E} *.8
Porcentaje (%)
Uso
x%y Calcula el valor x como porcentaje del valor y [(x / y) * 100].
Ejemplo(s)
Balance outstanding % Credit Limit calcula el porcentaje que representa Balance Outstanding del valor Credit Limit.
{file.BALANCE OUTSTANDING} % {file.CREDIT LIMIT}
Devuelve 30.00, donde Balance outstanding = $1500 y Credit Limit = $5000. Amount % Credit Limit calcula el porcentaje que representa el valor Amount del valor de Credit Limit.
{file.AMOUNT} % {file.CREDIT LIMIT}
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 74 of 20 Printed:
Devuelve 32.26, donde Amount =2257.87 y Credit Limit =7000. Nota Si el denominador = 0, el informe se ver detenido por una advertencia de divisin por cero. Si desea evitar este problema, debe incluir una comprobacin de este tipo:
If {file.FORECAST} = 0 Then 0 Else {file.SALES} % {file.FORECAST}
startswith
Uso
x startswith y {file.FIELD} startswith "abc" Este operador analiza el contenido de {file.FIELD} para ver si comienza con la cadena de caracteres especificada: "abc". Si el contenido de una campo comienza con la cadena especificada, la frmula devuelve el valor True. Si el campo comienza con cualquier otra cosa, la frmula devuelve False.
Ejemplo(s)
{customer.CUSTOMER NAME} startswith "A"
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 75 of 20 Printed:
Subndice ([ ])
Uso
x[y] Extrae el elemento y de la cadena x. x[y to z] Extrae el intervalo de elementos y to z de la cadena x. x[n] Extrae el elemento n de la matriz x. Nota El intervalo de los subndices tiene su origen en 1; comienza en 1 en vez de en 0. Los subndices se usan para extraer uno o ms caracteres de una cadena de texto o para extraer un elemento de una matriz.
Ejemplo(s)
[100,233,466,998][3]
Devuelve V, donde Postal Code = T5A 9V2 (el espacio entre A y 9 tambin cuenta como un elemento).
{customer.POSTAL CODE} [5 to 7]
Resta (-)
Uso
x-y Resta el valor y del valor x.
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 76 of 20 Printed:
Ejemplo(s)
244 - 112
Devuelve 132.
{file.SALES} - {file.COGS} - {file.S&A}
A moneda ($)
Uso
$x Convierte el nmero x al formato de moneda.
Ejemplo(s)
En los ejemplos siguientes se supone el formato siguiente: posiciones decimales = (1.00), signo negativo = (345.00-), smbolo de moneda = (flotante), separador de miles = (1,000.00).
$12345678
Devuelve $12,345,678.00.
$(123 * 456)
Devuelve $56,088.00.
$({file.QUANTITY} * 3)
Devuelve $363.35, donde Miles = 169 y Pledge = 2.15. Nota $ * $ = error. No puede multiplicar un dlar por un dlar.
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 77 of 20 Printed:
Declaradores de variables
Uso
NumberVar x; CurrencyVar x; StringVar x; BooleanVar x; DateVar x; Declara una variable x que puede contener datos del tipo correspondiente al declarador de variables usado.
Ejemplo(s)
NumberVar Amount; Declara una variable llamada Amount que puede contener cualquier valor de tipo de datos entero o decimal. BooleanVar Outstanding; Declara una variable llamada Outstanding que puede contener un valor TRUE o FALSE. StringVar LastName := "Adams"; Declara una variable llamada LastName que puede contener un valor de cadena y asigna la cadena "Adams" a esa variable.
Filename: 124037351.doc Project: CHAPTER 0 Template: Author: Kirsten Sutton Last Saved By: Carmen Revision #: 31 Page: 78 of 20 Printed: