CrystalReports: Formular-Steuerung durch Auftragskennzeichen
Oftmals will man von einem Angebot, Auftrag usw. verschiedene Varianten beim Ausdruck haben, z.B. einmal mit Logo (E-Mail) und mal ohne (Ausdruck, Fax). Dazu hat man im Prinzip drei Möglichkeiten:
MÖGLICHKEIT | VOR-/NACHTEILE |
---|---|
Verschiedene Formulare/Reports anlegen. | Parameterfeld im Report unterbringen |
Auf den ersten Blick eine verlockend einfache Methode: Man legt einfach verschiedenen Formulardateien mit CrystalReports an und die Benutzer wählen im Druckdialog-Fenster die gewünschte Variante an.
Allerdings ergeben sich auf diese Art und Weise mit der Zeit viele, viele Dateien, die alle gepflegt werden müssen! Wehe, es ändert sich was, oder das Ursprungsformular hat einen Fehler, der erst später auftaucht! |
Hier fügt man ein Parameterfeld in den Report ein. Beim Ausführen des Reports (z.B. bei der Vorschau, beim Drucken usw.) wird der/die Benutzer/in nach der gewünschten Variante gefragt.
Genau darin liegt aber das Problem: Dadurch, dass man bei jedem Ausführen, bei jeder Vorschau usw. neu gefragt wird, wird das mit der Zeit lästig. |
Steuerung über Auftragskennzeichen | Diese Methode ist die empfehlenswerteste: In der Datenbank gibt es bestimmte Felder, die für die Steuerung des Formulars zuständig sind. Das Formular ändert sich, je nach Werten in diesen Feldern.
Der/Die Anwender/in kann das einmal auswählen, die Auswahl wird in der Datenbank bei dem Auftrag gespeichert und muss nicht mehr bestätigt werden. |
Inhaltsverzeichnis
1 Was sind Auftragskennzeichen?
In der Datenbank gibt es bestimmte Felder, die für die Steuerung des Formulars zuständig sind. Jeder Auftrag hat diese Felder. Sie liegen in der Auftragskopf-Tabelle („MAUFKO“) und heißen „MAUFKO.KENNZ1“ bis „KENNZ9“. Da der Anwender mit den Namen so nichts anfangen kann, hat man die Möglichkeit, die Kennzeichenfelder mit einem Titel zu versehen, den der Anwender sieht. Beispiel: In diesem Beispiel hat das Feld „KENNZ1“ den Titel „Druck Logo“, „KENNZ2“ heißt „Druck Einz.preise“ usw. Zusätzlich kann man Auswahl-Listen festlegen, also beispielsweise: Der/Die Anwender/in kann dann mit „Ja“ oder „Nein“ festlegen, welche Variante er/sie will. Das Formular ändert sich, je nach den Werten in diesen Feldern. Der/Die Anwender/in kann das einmal auswählen, die Auswahl wird in der Datenbank bei dem Auftrag gespeichert und muss nicht mehr bestätigt werden. Die erste Aufgabe besteht darin, sich ein Schema auszudenken, das zu den Varianten des Ausdrucks passt. Dieses Schema wird dann mit der Definition der Auftragskennzeichen umgesetzt (siehe nächste Seite).
2 Festlegen/Definieren der Auftragskennzeichen
Sie können die Auftragskennzeichen in REFLEX mit „Datei Optionen Programmparameter und Einstellungen“ eingeben oder verändern:
Das Eingabefenster:
2.1 Spalte "Bezeichnung"
Geben Sie hier die Bezeichnung an, die dem/der Anwender/in angezeigt werden soll. Halten Sie sich möglichst kurz, weil der Platz in der Eingabemaske (je nach Schriftart!) begrenzt ist! Hinweis: Änderungen wirken erst nach dem Programm-Neustart aus!
2.2 Spalte "Eingabemaske"
Geben Sie optional eine Eingabemaske an. Mit Hilfe der Feld-Eingabemasken können Sie festlegen, welche Zeichen und Formate in bestimmten Feldern gültig sind. Versucht der Benutzer, ein ungültiges Zeichen einzugeben, wird dieses nicht angenommen. Einzelheiten dazu am Ende dieses Dokumentes.
2.3 Spalte "Auswahlmöglichkeiten"
Geben Sie hier die Auswahlmöglichkeiten an, die in dem ausklappbaren Feld in der Auftragsmaske erscheinen sollen. Trennen Sie mehrere Auswahlmöglichkeiten mit dem ";"-Zeichen (Semikolon).
3 Anwendung der Auftragskennzeichen im Formular
Nachdem die Auftragskennzeichen festgelegt wurden, kann man die Formulare/Reports darauf anpassen. An einem Beispiel-Formular wollen wir die Anwendung der Auftragskennzeichen demonstrieren. Dieses Logo eines Angebots soll ein-/ausgeschaltet werden:
Das Logo liegt als Grafikdatei im Berichtskopf a. Mit der rechten Maustaste hierauf öffnen man der Bereich-Assistenten und dann das Eingabefenster für die Unterdrückungsformel:
In diesem Editor-Fenster gibt man nun eine Formel an. Wenn diese Formel zutrifft, wird der Bereich (also das Logo) unterdrückt.
Da wir das Feld MAUFKO.KENNZ1 für die Logo-Ansteuerung verwenden wollen, müssen wir es aus der Liste oben rechts aussuchen:
Mit einem Doppelklick wird es eingefügt:
Nun wird die Formel ergänzt. Da das Logo unterdrückt werden soll, wenn „Nein“ angegeben wurde, lautet die Formel:
- {MAUFKO.KENNZ1} = "Nein"
Im Klartext heißt das: Unterdrücke den Bereich, wenn im Feld KENNZ1 "Nein" steht.
Also:
- Benutzer/in wählt in REFLEX: "Logo drucken: Nein":
- Bereich mit dem Logo wird unterdrückt.
- Benutzer/in wählt in REFLEX: "Logo drucken: Ja" oder keine Auswahl:
- Bereich mit dem Logo wird nicht unterdrückt.
Nun die Formel speichern mit links oben, mit OK speichern und das war’s. Eigentlich!
Falls jemand aber z.B. "NEIN" oder "nein" in das Kennzeichen schreibt, versagt die oben stehende Formel. Deshalb sollte die Optimierung so aussehen:
- UpperCase( {MAUFKO.KENNZ1} )="NEIN"
UpperCase() setzt alles in den Klammern auf GROSSBUCHSTABEN um, der Vergleich funktioniert also auch bei nein oder NEIN. Dabei ist in der Formel wichtig, dass das "NEIN" groß geschrieben wird!
Außerdem kann man noch überlegen, was passieren soll, wenn der/die Benutzer/in nichts ausgewählt hat! Wenn man z.B. nur das Logo haben, wenn gezielt "Ja" angegeben wurde, so stellt man die Formel so um:
- UpperCase ( {MAUFKO.KENNZ1} )<> "JA"
Speichern Sie den Report und probieren Sie es aus!
4 Entfernen von Parameter-Feldern aus dem Report
Wenn Sie zuvor Parameter-Felder im Report hatten, die das Formular angesteuert haben, müssen Sie diese aus dem Report entfernen. Sonst werden Sie weiterhin nach den Parametern gefragt, auch wenn diese keine Auswirkungen mehr haben.
Beispiel:
Meistens befinden sich diese Felder im Berichtskopf.
5 Eingabemasken für die Eingabe der Auswahlfelder
Eine Maske besteht aus drei Feldern, die durch Semikolons voneinander getrennt sind.
- Das erste Feld ist die Maske selbst.
- Das zweite Feld besteht aus einem Zeichen und bestimmt, ob die literalen Zeichen der Maske mit den Daten gespeichert werden.
- Das dritte Feld legt das Zeichen fest, das für noch nicht eingegebene Zeichen angezeigt wird.
Die folgenden speziellen Zeichen werden im ersten Feld der Maske verwendet: Zeichen Bedeutung in der Maske ! Das Zeichen ! gibt in einer Maske an, dass optionale Zeichen als führende Leerzeichen dargestellt werden. Ist kein !-Zeichen vorhanden, werden optionale Zeichen im EditText-Objekt als abschließende Leerzeichen dargestellt. > Wird das Zeichen > in einer Maske angegeben, werden alle nachfolgenden Zeichen in Großbuchstaben umgewandelt, bis das Ende der Maske erreicht ist oder das Zeichen < angetroffen wird. < Wird das Zeichen < in einer Maske angegeben, werden alle nachfolgenden Zeichen in Kleinbuchstaben umgewandelt, bis das Ende der Maske erreicht ist oder das Zeichen > angetroffen wird. <> Werden diese beiden Zeichen zusammen verwendet, findet keine Überprüfung der Groß-/Kleinschreibung statt. Die Daten werden in der Schreibweise formatiert, in der sie vom Benutzer eingegeben werden. \ Nach dem Zeichen \ folgt ein literales Zeichen. Mit seiner Hilfe können die speziellen Maskenzeichen als Literale in den Daten angegeben werden. L An dieser Stelle muß ein Buchstabe (A-Z, a-z) eingegeben werden. l An dieser Stelle ist ausschließlich ein Buchstabe erlaubt. Eine Eingabe ist jedoch nicht erforderlich. A An dieser Stelle muß ein alphanumerisches Zeichen (A-Z, a-z, 0-9) eingegeben werden. a An dieser Stelle ist ausschließlich ein alphanumerisches Zeichen erlaubt. Eine Eingabe ist jedoch nicht erforderlich. C An dieser Stelle muß ein beliebiges Zeichen eingegeben werden. c An dieser Stelle kann ein beliebiges Zeichen eingegeben werden. Eine Eingabe ist jedoch nicht erforderlich. 0 An dieser Stelle muß ein numerisches Zeichen eingegeben werden. 9 An dieser Stelle darf ausschließlich ein numerisches Zeichen angegeben werden. Eine Eingabe ist jedoch nicht erforderlich.
- An dieser Stelle darf ausschließlich ein numerisches Zeichen oder ein Plus- bzw. Minuszeichen eingegeben werden. Eine Eingabe ist jedoch nicht erforderlich.
- Das Zeichen : wird verwendet, um in Zeitangaben Stunden, Minuten und Sekunden zu trennen. Ist unter Ländereinstellungen in der Systemsteuerung ein anderes Trennzeichen eingestellt, wird dieses statt dessen verwendet.
/ Mit dem Zeichen / werden in einer Datumsangabe der Monat, der Tag und das Jahr voneinander getrennt. Ist unter Ländereinstellungen in der Systemsteuerung ein anderes Trennzeichen eingestellt, wird dieses statt dessen verwendet.
- Das Zeichen ; wird verwendet, um die drei Felder der Maske voneinander zu trennen.
_ Das Zeichen _ fügt automatisch Leerzeichen in den Text ein. Bei der Eingabe in das Feld werden diese Zeichen vom Cursor übersprungen.
Alle nicht in der Tabelle aufgeführten Zeichen können im ersten Feld der Maske als literale Zeichen angegeben werden. Literale Zeichen werden automatisch eingefügt und vom Cursor beim Bearbeiten übersprungen. Die speziellen Maskenzeichen können auch als Literale angegeben werden, sofern ihnen das Zeichen \ vorangestellt wird. Das Zeichen im zweiten Feld der Maske gibt an, ob die in der Maske enthaltenen literalen Zeichen zusammen mit dem Text des Eingabefeldes gespeichert werden. So kann beispielsweise die Maske für eine Telefonnummer mit Vorwahl folgendermaßen angegeben werden: (00000)_0000000;0;*
Der Wert 0 im zweiten Feld gibt an, dass die Eigenschaft Text des Steuerelements aus den 10 einzugebenden Ziffern besteht und nicht aus den 14 Zeichen, aus denen sich die Nummer im Eingabefeld zusammensetzt. Eine 0 im zweiten Feld legt fest, dass Literale nicht gespeichert werden. Bei jedem anderen Zeichen werden sie als Teil des Textes behandelt. Dieser Wert kann mit der Eigenschaft EditMask im Objektinspektor oder im Programm durch Ändern der typisierten Konstante MaskNoSave eingestellt werden.
Das dritte Feld der Maske enthält das Zeichen, das im Eingabefeld für Leerstellen (nicht eingegebene Zeichen) angezeigt wird. In der Voreinstellung entspricht es dem für literale Leerzeichen verwendeten Zeichen. Beide Zeichen werden im Eingabefenster identisch angezeigt. Gibt der Benutzer jedoch Informationen in das Feld ein, werden die Leerstellen der Reihe nach ausgewählt, während die Leerzeichen übersprungen werden.