CrystalReports: Formular-Steuerung durch Auftragskennzeichen: Unterschied zwischen den Versionen

Aus GEVITAS
Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „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 h…“)
 
(Anwendung der Auftragskennzeichen im Formular)
 
(6 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 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:
 
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:
 
{| class="wikitable" style="text-align: left;"
 
{| class="wikitable" style="text-align: left;"
Zeile 5: Zeile 7:
 
|-
 
|-
 
|Verschiedene Formulare/Reports anlegen.
 
|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.
 
|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!
 
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!
 
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.
 
|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.
 
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.
Zeile 19: Zeile 21:
  
 
== Was sind Auftragskennzeichen? ==
 
== 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 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 [[REFLEX_Datenbank-Beschreibung_Auftragsverwaltung#MAUFKO|Auftragskopf-Tabelle]] ('''[[REFLEX_Datenbank-Beschreibung_Auftragsverwaltung#MAUFKO|MAUFKO]]''') und heißen '''MAUFKO.KENNZ1''' bis '''KENNZ12'''.
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:
+
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:
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).
+
[[File:CrystalReports_Auftragskennzeichen_Bsp.jpg|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.
  
 
== Festlegen/Definieren der Auftragskennzeichen ==
 
== Festlegen/Definieren der Auftragskennzeichen ==
Sie können die Auftragskennzeichen in REFLEX mit „Datei  Optionen Programmparameter und Einstellungen“ eingeben oder verändern:
+
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:
 +
 
 +
[[File:CrystalReports_Auftragskennzeichen_Eingabe.jpg|Eingabe]]
  
Das Eingabefenster:
 
  
 
=== Spalte "Bezeichnung" ===
 
=== Spalte "Bezeichnung" ===
Zeile 45: Zeile 58:
 
An einem Beispiel-Formular wollen wir die Anwendung der Auftragskennzeichen demonstrieren. Dieses Logo eines Angebots soll ein-/ausgeschaltet werden:
 
An einem Beispiel-Formular wollen wir die Anwendung der Auftragskennzeichen demonstrieren. Dieses Logo eines Angebots soll ein-/ausgeschaltet werden:
  
 +
[[File:CrystalReports_Auftragskennzeichen_FormularBsp1.jpg|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) ...
 +
 +
[[File:CrystalReports_Auftragskennzeichen_FormularBsp2.jpg|Beispiel]]
  
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:
+
...und dann das Eingabefenster für die Unterdrückungsformel:
  
 +
[[File:CrystalReports_Auftragskennzeichen_FormularBsp3.jpg|Beispiel]]
  
In diesem Editor-Fenster gibt man nun eine Formel an. Wenn diese Formel zutrifft, wird der Bereich (also das Logo) unterdrückt.
+
In diesem Editor-Fenster gibt man nun eine Formel an.
  
Da wir das Feld MAUFKO.KENNZ1 für die Logo-Ansteuerung verwenden wollen, müssen wir es aus der Liste oben rechts aussuchen:
+
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:
  
 +
[[File:CrystalReports_Auftragskennzeichen_FormularBsp4.jpg|Beispiel]]
  
 
Mit einem Doppelklick wird es eingefügt:
 
Mit einem Doppelklick wird es eingefügt:
  
 +
[[File:CrystalReports_Auftragskennzeichen_FormularBsp5.jpg|Beispiel]]
 +
 +
Nun wird die Formel ergänzt.
 +
 +
Da das Logo unterdrückt werden soll, wenn „Nein“ angegeben wurde, lautet die Formel:
  
Nun wird die Formel ergänzt. Da das Logo unterdrückt werden soll, wenn „Nein“ angegeben wurde, lautet die Formel:
 
 
* '''{MAUFKO.KENNZ1} = "Nein"'''
 
* '''{MAUFKO.KENNZ1} = "Nein"'''
  
Im Klartext heißt das: Unterdrücke den Bereich, wenn im Feld KENNZ1 "Nein" steht.
+
;Im Klartext heißt das:
 +
:Unterdrücke den Bereich, wenn im Feld '''KENNZ1''' das Wort '''"Nein"''' steht.
 +
 
 +
Also:
  
Also:
 
 
* Benutzer/in wählt in REFLEX: "Logo drucken: Nein":
 
* Benutzer/in wählt in REFLEX: "Logo drucken: Nein":
 
* Bereich mit dem Logo wird unterdrückt.
 
* Bereich mit dem Logo wird unterdrückt.
 
* Benutzer/in wählt in REFLEX: "Logo drucken: Ja" oder keine Auswahl:
 
* Benutzer/in wählt in REFLEX: "Logo drucken: Ja" oder keine Auswahl:
* Bereich mit dem Logo wird nicht unterdrückt.
+
* 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!
 
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:
+
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( {MAUFKO.KENNZ1} )="NEIN"'''
Zeile 86: Zeile 116:
  
 
Beispiel:
 
Beispiel:
 +
 +
[[File:CrystalReports_Auftragskennzeichen_ParameterEntfernen.jpg|Entfernen]]
  
 
Meistens befinden sich diese Felder im Berichtskopf.
 
Meistens befinden sich diese Felder im Berichtskopf.
  
  
== Eingabemasken für die Eingabe der Auswahlfelder ==
+
== Masken für die Eingabe der Auswahlfelder ==
  
Eine Maske besteht aus drei Feldern, die durch Semikolons voneinander getrennt sind.
+
Eine Maske gibt bestimmte Eingabeformat vor. Siebesteht aus drei Feldern, die durch Semikolons voneinander getrennt sind.
  
 
* Das erste Feld ist die Maske selbst.
 
* Das erste Feld ist die Maske selbst.
Zeile 98: Zeile 130:
 
* Das dritte Feld legt das Zeichen fest, das für noch nicht eingegebene Zeichen angezeigt wird.
 
* 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:
+
=== Speziellen Zeichen im ersten Feld der Maske verwendet ===
Zeichen Bedeutung in der Maske
+
{| class="wikitable" style="text-align: left;"
! 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.
+
!Zeichen
> 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.
+
!Bedeutung in der Maske
< 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.
+
|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.
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.
+
|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.
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.
+
|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.
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.
+
|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.
 +
 
 +
 
 +
=== 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;*'''
  
: 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.
+
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.
/ 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.
+
Eine 0 im zweiten Feld legt fest, dass Literale nicht gespeichert werden. Bei jedem anderen Zeichen werden sie als Teil des Textes behandelt.
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;*
+
=== 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.
  
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.
+
== Links ==
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.
+
* [[Reflex Übersicht|REFLEX Übersicht]]
 +
* [[GEVAS-Professional|GEVAS-Professional Übersicht]]
 +
* [[MobiFlex Übersicht|MobiFlex Übersicht]]
 +
* [[Allgemeines Übersicht|Allgemeines]]
 +
* [[CrystalReports, Formulare und Reports|CrystalReports, Formulare und Reports]]
 +
* [[Listen allgemein|Listen allgemein]]
 +
* [[Barcode und Etiketten allgemein|Barcode und Etiketten allgemein]]

Aktuelle Version vom 8. Juni 2015, 21:43 Uhr

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