CrystalReports: Formular-Steuerung durch Auftragskennzeichen

Aus GEVITAS
Wechseln zu: Navigation, Suche

1 Allgemeines

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. 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!

Parameterfeld im Report unterbringen 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.

2 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 KENNZ12.

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 und versteht. Beispiel:

Auftragskennzeichen

In diesem Beispiel hat das Feld KENNZ1 den Titel "Druck Logo", KENNZ2 heisst "Druck Einz.preise" usw.

Damit die Eingabe einfacher wird, kann man sog. Auswahl-Listen festlegen, aus denen die Benutzer(innen) auswählen können. Also beispielsweise "Ja" oder "Nein".

Das Formular ändert sich, je nach den Werten in diesen Feldern. Dazu muss das Formular natürlich so "programmiert" werden, dass es auf die Kennzeichenfelder reagiert!

Die Auswahl wird in der Datenbank bei jedem Auftrag gespeichert und muss später nicht mehr bestätigt werden.

3 Festlegen/Definieren der Auftragskennzeichen

Die erste Aufgabe besteht darin, sich ein Schema für die Kennzeichen auszudenken, das zu den gewünschten Varianten des Ausdrucks passt. Dieses Schema wird dann mit der Festlegung der Auftragskennzeichen und der Anpassung des Formulares mit CrystalReports umgesetzt.

Sie können die Auftragskennzeichen in REFLEX mit "Datei-->Admin-Optionen->Programmparameter und Einstellungen" eingeben oder verändern. Das Eingabefenster:

Eingabe


3.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!

3.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.

3.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).

4 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:

Beispiel

Das Logo liegt als Grafikdatei im Berichtskopf a.

Mit der rechten Maustaste hierauf öffnen man der Bereich-Assistenten (in neueren Versionen "Sektions-Assistent" genannt) ...

Beispiel

...und dann das Eingabefenster für die Unterdrückungsformel:

Beispiel

In diesem Editor-Fenster gibt man nun eine Formel an.

Wenn das Ergebnis dieser Formel wahr ist, 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 aussuchen:

Beispiel

Mit einem Doppelklick wird es eingefügt:

Beispiel

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 das Wort "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, also gedruckt.

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!

5 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:

Entfernen

Meistens befinden sich diese Felder im Berichtskopf.


6 Masken für die Eingabe der Auswahlfelder

Eine Maske gibt bestimmte Eingabeformat vor. Siebesteht 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.

6.1 Speziellen Zeichen 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 muss 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 muss 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 muss 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 muss 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.


6.2 Zeichen im zweiten Feld der Maske

Es 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.

6.3 Das dritte Feld der Maske

Es 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.

7 Links