Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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 StringVar y;
Sie können das Schlüsselwort Global auch auslassen, da standardmäßig eine globale Variable erstellt wird:
StringVar y; //Identisch mit: Global StringVar y;
Wenn globale Variablen auch einfach zu deklarieren sind, ist es dennoch empfehlenswert, dass Sie sie nur dann deklarieren, wenn eine lokale Variable nicht ausreicht.
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.
//Formula A
Global DateVar z;
z := CDate (1999, 9, 18)
//Formula B
NumberVar z;
z := 20
In diesem Fall gibt Crystal Reports beim Prüfen von Formel B oder beim Versuch, Formel B zu speichern, eine Fehlermeldung aus, falls Sie Formel A zuerst eingeben und speichern. Dies liegt daran, dass die Deklaration der globalen Variablen z als Zahlentyp mit ihrer vorherigen Deklaration in Formel A als Datumstyp in Konflikt steht.
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
//Formula C
Global NumberVar x;
x := 10;
//Formula D
WhileReadingRecords;
Global NumberVar x;
x := x + 1
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 + {Bestelldetail.Menge} ersetzt wird, entsteht der Effekt einer laufenden Summe, die auf {Bestelldetail.Menge} beruht, jedoch aufgrund von Formel C nicht bei 0, sondern bei 10 beginnt. In diesem Fall können Sie den Aufruf von WhileReadingRecords übergehen. Er findet automatisch statt, da die Formel ein Datenbankfeld enthält.