Crystal Reports 10 .NET  

Variables globales (sintaxis Crystal)

Las variables globales usan el mismo bloque de memoria para almacenar un valor en todo el informe principal. Este valor se hace disponible para todas las fórmulas que declaran la variable, excepto para aquellas que están en los subinformes. Declare una variable global como en el ejemplo siguiente:

Global StringVar y;

También puede omitir la palabra clave Global, lo que crea una variable global de forma predeterminada:

StringVar y; //Igual que: Global StringVar y;

No obstante, aunque las variables globales son fáciles de declarar, se recomienda usarlas sólo cuando las variables locales no son suficientes.

Como las variables globales comparten sus valores en todo el informe principal, no puede declarar una variable global en una fórmula con un tipo y luego declarar una variable global con el mismo nombre en otra fórmula distinta con un tipo diferente.

Ejemplo

//Fórmula A
Global DateVar z;
z := CDate (1999, 9, 18)
//Fórmula B
NumberVar z;
z := 20

En este caso, si introduce y guarda primero la Fórmula A, Crystal Reports devuelve un mensaje de error cuando verifica o trata de guardar la Fórmula B. Esto se debe a que la declaración de la variable Global z como número entra en conflicto con su declaración anterior en la Fórmula A, donde actuaba como fecha.

Uso de las variables globales

Las variables globales a menudo se usan para efectuar cálculos complejos donde los resultados de una fórmula dependen del agrupamiento y diseño de página del informe impreso real. Esto se logra al crear varias fórmulas, colocándolas en diferentes secciones del informe y haciendo que las diferentes fórmulas interactúen mediante las variables globales.

Ejemplo

//Fórmula C
Global NumberVar x;
x := 10;
//Fórmula D
//Llamar a la función WhileReadingRecords
WhileReadingRecords;
Global NumberVar x;
x := x + 1

Si se coloca la Fórmula C en el encabezado de informe y luego se coloca la Fórmula D en una sección de detalle, la Fórmula C se evalúa antes que la Fórmula D. La Fórmula C se evaluará una vez y luego se evaluará la Fórmula D para cada registro que aparezca en la sección de detalle. La Fórmula C devuelve 10. Para el primer registro de detalle, la Fórmula D devuelve 11. Esto se debe a que el valor 10 de x se mantiene desde que fue establecido por la Fórmula C. Entonces, la Fórmula D agrega 1 a este valor, estableciendo x en 11 y, a continuación, devuelve 11. Para el segundo registro de detalle, la Fórmula D devuelve 12, agregando 1 al valor de x almacenado anteriormente, que era 11. Este proceso continúa con los registros de detalle restantes.

La llamada a WhileReadingRecords indica a Crystal Reports que vuelva a evaluar la Fórmula D mientras éste lee cada registro del informe. De lo contrario, como la fórmula no contiene ningún campo de base de datos, el programa la evaluará sólo una vez antes de leer los registros de la base de datos. Entonces la fórmula devuelve el valor de 11 en vez de 11, 12, 13,... mientras se procesan los registros sucesivos.

Si se reemplaza la expresión x := x + 1 por x := x + {Detalles del pedido.Cantidad}, creará el efecto de un total acumulado basado en {Detalles del pedido.Cantidad}, aunque sea uno que comience en 10 en vez de 0 debido a la Fórmula C. En este caso, puede omitir la llamada a WhileReadingRecords, ya que ésta se producirá automáticamente porque la fórmula contiene un campo de base de datos.

Vea también

Ámbito de las variables | Variables locales | Variables compartidas | Información general de las secciones de los informes