Globale Variablen (Basic-Syntax)

Globale Variablen verwenden zum Speichern eines Wertes im gesamten Hauptbericht denselben Speicherblock. Dadurch steht dieser Wert allen Formeln zur Verfügung, in denen diese Variable deklariert wird, außer in den Formeln, die in Unterberichten enthalten sind. Eine globale Variable wird wie in folgendem Beispiel deklariert:

Global y As String

Da die Werte globaler Variablen im gesamten Hauptbericht freigegeben sind, ist es nicht möglich, in einer Formel eine globale Variable eines bestimmten Typs und danach in einer anderen Formel eine gleichnamige globale Variable eines anderen Typs zu deklarieren.

Verwenden von globalen Variablen

Globale Variablen werden häufig für komplexe Berechnungen verwendet, bei denen die Ergebnisse einer Formel von der Gruppierung und dem Seitenlayout des ausgedruckten Berichts selbst abhängen. Dies wird erreicht, indem mehrere Formeln erstellt und in verschiedenen Sektionen des Berichts eingefügt und globale Variablen als Mittel eingesetzt werden, über das die verschiedenen Formeln Werte miteinander austauschen können.

Beispiel

Rem Formula C
Global x as Number
x = 10
formula = x
Rem Formula D
WhileReadingRecords
Global x as Number
x = x + 1
formula = x

Wenn Formel C im Berichtskopf und anschließend Formel D in einer Detailsektion eingefügt wird, wird Formel C vor Formel D ausgewertet. Formel C wird einmal ausgewertet, und danach wird Formel D für jeden in der Detailsektion erscheinenden Datensatz Formel C gibt 10 zurück. Für den ersten Detaildatensatz gibt Formel D 11 zurück. Dies geschieht, weil der Wert von x, nämlich 10, beibehalten wurde, als er durch Formel C festgelegt wurde. Formel D fügt anschließend 1 diesem Wert hinzu, wobei sie x auf 11 festlegt und 11 zurückgibt. Für den zweiten Detaildatensatz gibt Formel D 12 zurück und fügt 1 dem früher beibehaltenen Wert von x, nämlich 11. Dieser Vorgang wird für die verbleibenden Detaildatensätze verwendet.

Durch den Aufruf der Funktion WhileReadingRecords wird Crystal Reports angewiesen, beim Einlesen der Datensätze des Berichts für jeden Datensatz die Formel D neu auszuwerten. Andernfalls würde das Programm vor dem Einlesen der Datensätze aus der Datenbank die Formel automatisch nur ein einziges Mal auswerten, da in der Formel keine Datenbankfelder enthalten sind. Danach würde die Formel jedes Mal den Wert 11 zurückgeben anstatt 11, 12, 13 usw., wenn die nächsten Datensätze verarbeitet werden.

Wenn die Anweisung x := x + 1 durch x := x + {Auftragsdetail.Menge} ersetzt wird, entsteht der Effekt einer laufenden Summe, die auf {Auftragsdetail.Menge} beruht, jedoch aufgrund von Formel C nicht bei 0, sondern bei 10 beginnt. In diesem Fall müssen Sie WhileReadingRecords nicht aufrufen, da die Formel ein Datenbankfeld enthält und der Aufruf folglich automatisch erfolgt.