Wer schon einmal einen Bericht mit Crystal Reports erstellt hat, weiß wie mächtig und wie beliebig nervig der Umgang mit diesem Werkzeug ist. Wie jeder andere Formulargenerator hat auch Crystal seine Macken, Stärken und Schwächen.
Ich werde hier in loser Reihenfolge Beispiele und Lösungen vorstellen, die mir bei meiner Arbeit mit Crystal Reports geholfen haben, bzw. für dessen Lösung ich lange suchen musste.
Variablen Formularübergreifend behandeln
Hier habe ich ganz schön lange gesucht, bis ich die Lösung gefunden habe. Das Problem war, dass ich zwei Summen, aus zwei verschiedenen Unterberichten im Hauptformular weiterverarbeiten wollte. Aber wie an die Felder kommen? Die Lösung ist dafür ganz einfach: Shared Variables!
Um mit Shared Variables arbeiten zu können, muss als erstes im Berichtskopf eine Formel hinterlegt werden, in der die Variablen initialisiert werden:
SHARED STRINGVAR Summe; //Die Variable muss zuerst deklariert werden.
""; // Als Rückgabewert der Formel kommt ein leeres Textfeld hin.
Dann kann ich in jeder anderen Formel mit dieser Variablen arbeiten. Allerdings muss sie jedes Mal am Anfang der Formel deklariert werden:
SHARED STRINGVAR Summe; //Deklaration
Summe := {TABLE.FIELD1}; //Erst jetzt kann ich damit arbeiten...
Um dann den Wert der Variable auszugeben:
SHARED STRINGVAR Summe;
Summe;
Dann kann man problemlos diese Werte in Formeln oder im Bericht nutzen.
Mehrere Record Werte in einer Zeile anzeigen
Mehrere Datensätze in einem Bericht auszugeben ist mit Hilfe der Gruppiermöglichkeit ja kein Problem. Nur was mache ich, wenn die Ergebnisse nicht untereinander, sondern nebeneinander ausgegeben werden sollen.
Lösung 1 (Quick ‚n Dirty): Man fügt eine Kreuztabelle ein, macht alle Felder bis auf die Spaltenbezeichnungen unsichtbar, und gut. Aber eben eine nicht schöne Lösung.
Lösung 2 (Elegant): Man fügt eine Gruppe in sein Formular, besser Unterformular ein. Dann muss man die Werte sammeln und im Gruppenfuß ausgeben:
In den Gruppenkopf ein unterdrücktes Formelfeld zur (Re-)Initialisierung anlegen:
Shared StringVar Array x;
Redim x[5];
Shared NumberVar i := 1
In den Detailbereich wird dann folgende Formel eingefügt, während der Detailbereich aber unterdrückt wird:
Shared StringVar Array x;
Shared NumberVar i;
x[i] := {Feld};
i := i+1
Und zum Schluss erfolgt die Ausgabe in einem Feld über eine Formel im Gruppenfuß:
Shared StringVar Array x;
Shared NumberVar i;
Local NumberVar j;
Local NumberVar n;
Local StringVar str := "";
For j := 1 to i - 1 Do
(
str := str + x[j];
For n:= 1 to 4-Len(x[j]) Do
str := str + " "
);
str
Bestimmte Bereiche oder Felder Aus- und Einblenden
Bestimmte Bereiche / Felder sollen nur auf bestimmten Seiten angezeigt werden?
Kein Problem!
Zum Beispiel soll die Seitenzahl in einem Formular nur auf der zweiten Seite erscheinen.
Das Feld oder die Formel mit der Seitenzahl in den Bericht einfügen und im Formatierdialog unterdrücken. Neben der Checkbox befindet sich die Schaltfläche für den Formeleditor. Im Formeleditor dann als Auswahlformel eingeben:
PageNumber = 1;
Das heißt, dass dieses Feld nur dann unterdrückt wird, wenn die Seitenzahl 1 ist, auf allen anderen Seiten wird das Feld eingeblendet.