[GuiBuffer]
Bei allen Objekten, die einen Bezug zur Datenbank bzw. programmspezifischen Daten besitzen. Nicht zulässig bei Dialogen selbst und bei Menüs ohne Markierung. Wird zum Beispiel bei einer Feldbezeichnung (label) ein Verweis auf die Datenbank eingetragen, so erscheint je nach Feldinhalt eine Bitmap, sofern das Label mit Attribut Bitmap versehen wurde (siehe auch Ausgabe Personalbild in 511 Produktionsmittel / Personen bearbeiten, wo über die Personalnummer eine Bitmap ausgegeben wird (DDref=9,3)).
Buffer = 6; (kein Default)
Könnte hier fehlen, falls gleich wie Dateiangabe aus DDref
ChangeMsg-Schlüssel=“alter Wert“,“neuer Wert“,Yes|No,“Meldungstext“
Über diesen Eintrag können zu einem Eingabe-Control (z.B. Eingabefeld oder Auswahlliste) ein oder mehrere Prüfungen angegeben werden, die bei einer Änderung des Feldinhaltes wahlweise entweder zu einer Warnung oder einem Fehler (mit Abweisen der Änderung) führen. Die Angabe „Schlüssel“ ist ein frei wählbarer Begriff, der innerhalb der Sektion eindeutig sein muss, um mehrere ChangeMsg-Angaben zu unterscheiden – z.B. eine laufende Nummer.
„alter Wert“ und „neuer Wert“ sind die Puffer-Inhalte (also z.B. bei Auswahllisten nicht der angezeigte Text, sondern der Wert, der bei der Auswahl in den zugehörigen Puffer geschrieben wird), die bei der Feldänderung miteinander verglichen werden.
Bei den Angaben sind WildCards als „*“ für beliebige Folgen von Zeichen“ und „?“ für genau ein beliebiges Zeichen zulässig. Wird als „alter Wert“ nur der Platzhalter „*“ angegeben, gilt der ChangeMsg-Eintrag unabhängig vom ursprünglichen Wert des Feldes vor der Änderung. Analog wirkt der Platzhalter „*“ als „neuer Wert“ für jede Feldänderung.
Für jeden Eintrag kann definiert werden, ob die jeweilige Feldänderung nur zu einer Warnung (Yes) oder zu einem Fehler mit Ablehnung der Änderung (No) führen soll. In jedem Fall wird der zugeordnete „Meldungstext“ am Bildschirm angezeigt.
Hinweis: Trifft bei einer Feldänderung mehr als ein ChangeMsg-Eintrag zu, wird nur der erste innerhalb der Sektion ausgewertet.
Beispiel:
Bei der Änderung des Status im Teilestamm soll ein Hinweis ausgegeben werden, sobald der Status von „prüfbar (L)“ auf „aktiv ( )“ geändert wird. Außerdem soll verhindert werden, dass der Status „inaktiv (i)“ aufgehoben wird. Dazu wird in der individuellen PDV111.SDF folgendes hinterlegt:
[PDV111_1#PDV111_1_1#GuiBuffer]
ChangeMsg-1="L", " ", Yes, "Bitte Zuordnungen prüfen"
ChangeMsg-2="i", "*", No, "Diese Änderung ist nicht zulässig"
DDref = 6,3
Verweis auf das DataDictionary, im Beispiel Datei 6 («Teilestamm»), Feld 3 («Teilenummer»)
DigitGrouping = Yes / No
Tausender-Zifferngruppierung bei numerischen Feldern ein- bzw. ausschalten. Mit dieser Einstellung lässt sich die generelle Voreinstellung aus der Datei SIBPPS.INI, Sektion [LAYOUT], Schlüsselwort "DecimalDigitGrouping" und "IntegerDigitGrouping" für ein Feld übersteuern. Fehlt die Angabe, gilt generell die Angabe aus der Datei SIBPPS.INI. Durch die Tausender-Zifferngruppierung wird bei der Anzeige und Eingabe von numerischen Werten ein Punkt als Trenner jeder Tausendergruppe ausgegeben bzw. akzeptiert (zum Beispiel "123.123,12").
In Listboxen von Positionsdialogen (zum Beispiel in der Auftragsbearbeitung AUF435) kann diese Einstellung benutzt werden, um die Tausender-Zifferngruppierung auch für die Spalten der Listbox zu aktivieren. Sie wirkt allerdings dann nur für die Felder, deren Referenzfelder im Bearbeitungsfenster ebenfalls mit Tausender-Gruppierung angezeigt werden.
Format = DDf(6,3)
Eingabeformat laut DataDictionary, Datei 6, Feld 3. Nur nötig, falls Abweichung von DDref!
Format = C12
Eingabeformat direkt angegeben, weitere Beispiele: N7.3, N21, N11.9 (wie im DataDictionary)
GlobVar = GVID(GV_woche)
Verweis auf eine globale Variable des Systems. Es sind sowohl die im Kapitel "infra-Globalvariablen" beschriebenen Variablen nutzbar, als auch die im Programm definierten Globalvariablen, die im jeweiligen Steckbrief aufgeführt sind. Die Eingabe/Anzeige erfolgt also über eine Globalvariable und stellt somit eine Alternative zur Buffer-Angabe dar. In jedem Fall muss die Formatangabe (über Format oder DDref) mindestens die tatsächliche Länge der Variable repräsentieren, sonst erfolgt keine Ausgabe. Die Pos-Angabe wird hier nicht ausgewertet, Globalvariable werden immer komplett ausgegeben.
Obiges Beispiel komplettiert um die Formatangabe gibt die aktuelle Woche aus:
[GuiBuffer]
GlobVar=GVID(GV_woche)
Format=W
[GuiEdit]
Locked
Ident = 001
Feldnummer, die zum Beispiel in den Stammdatenverwaltungsprogrammen für die Hinterlegung von feldbezogenen Auskünften benötigt wird
InitBuffer-Schlüssel = GritID, Muss(0/1), Fokus(0/1), “Inhalt“
Vorbelegung/Initialisierung eines Feldes (Controls) nach der Eingabe bzw. dem Verlassen des aktuellen Feldes (Controls), bei dem diese Angabe hinterlegt ist.
Die Vorbelegung/Initialisierung wird nur ausgeführt, wenn die ggf. mit „RangeCond-…“ formulierten Bedingungen erfüllt sind.
Schlüssel ist ein frei wählbarer aber eindeutiger Begriff innerhalb der Sektion, um die zugehörigen InitBufferCond-Angaben zu identifizieren.
Es gibt kein Limit für die Anzahl der InitBuffer-Angaben.
Die GritID des zu initialisierenden Controls muss im gleichen Dialog – kann aber auf anderen Registerseiten vorhanden sein.
Mit der Angabe „Fokus“ wird bei „1“ der Eingabefokus bei zutreffender Bedingung auf das angegebene Control gesetzt.
Bei „Muss“ wird mit „1“ für das angegebene Control eine Musseingabe erzwungen.
Der für die Initialisierung zu verwendende Inhalt muss formatgerecht sein (internes Datenbankformat) – kann aber durch infra-Makros dynamisch zur Verfügung gestellt werden. Inhalt kann auch entfallen, dann wird nur die Musseingabe- bzw. Fokus-Steuerung berücksichtigt.
In Kombination mit „Range-…/RangeCond-“ sind komplexe situationsabhängige Feld-Initialisierungen und -Prüfungen realisierbar.
Beispiel:
In einem Stammdatenprogramm (Megas) sollen im Modus „Erfassen“ (der Modus wird in der Globalvariablen GV_megmode zur Verfügung gestellt) im Feld „Erlöskonto“ abhängig vom Anfangsbuchstaben der neuen Teilenummer bestimmte Werte aus der INI-Datei (Sektion [PDV111-ErlKonto]) eingetragen werden. Außerdem soll das Feld dann fokussiert werden.
Eintrag in PDV111.SDF:
[PDV111_1#PDV111_1_3#GuiBuffer]
InitBuffer-1=PDV111_4_D28F10,0,0,"INI(PDV111-ErlKonto,LBUF(6,DDp(6,3),1))"
InitBufferCond-1=GV(GV_megmode)==3
Eintrag in INI-Datei:
[PDV111-ErlKonto]
S=8400
B=8401
K=8401
Z=8401
W=8404
A=" "
InitBufferCond-Schlüssel = Bedingung1, Bedingung2,…
Angabe von (ein oder mehreren) Bedingungen, die alle erfüllt sein müssen, damit die zugehörige InitBuffer-Angabe greift.
Es können beliebige infra-Makros und Konstanten verwendet werden.
Eine Bedingung besteht aus 2 Makroausdrücken/Konstanten und einem Vergleichsoperator. Der 2.Ausdruck einer Bedingung vom Typ „==“ (ist gleich) oder „!=“ (ist ungleich) kann dabei eine Auswahl erlaubter bzw. nicht erlaubter Werte in runden Klammern und durch Komma getrennt enthalten.
Erlaubte Vergleichsoperatoren:
== Prüfung auf Gleichheit
!= Prüfung auf Ungleichheit
< Prüfung auf "kleiner als"
> Prüfung auf "größer als"
<= Prüfung auf "kleiner oder gleich"
>= Prüfung auf "größer oder gleich"
Beispiel:
InitBufferCond-1=CurrentDateLong()>20181011,GV(GV_login)==Bernd
InitValue = GRIT_ID_Zielfeld
InitValue = AUF43A_1_F838001
Das angegebene Feld wird automatisch mit dem eingegebenen Wert des aktuellen Felds versorgt. Typische Anforderung für die Übernahme einer von-Angabe in das bis-Feld einer Selektion. Das durch GRIT_ID_ZIELFELD identifizierte Feld muss folgende Eigenschaften aufweisen:
Das Feld muss im gleichen Dialog liegen
Das Feld muss das gleiche Format wie das Ausgangsfeld besitzen (s. o.)
Der Ident für ein Feld kann über das Menü INFOSYSTEM - MODULSTATUS ermittelt werden.
Achtung:
Die Übernahme erfolgt nur, wenn im Eingabefeld eine Änderung stattgefunden hat. Wird ein Feld nur übertastet, so bleibt das Zielfeld unverändert.
Es erfolgt keine Feldprüfung für das Zielfeld.
Interner Hinweis: Bei 'alten' Programmen erfolgt KEIN Check (Muss-Eingabe wäre lästig), bei `neuen' Programmen wird eine evtl. für das Zielfeld spezifizierte 'BufferChanged'-Prozedur (CallBack) NICHT aufgerufen.
Diese Funktion gilt auch für die Einträge in der Sektion [GuiInitValue].
Pos = 135
direkte Angabe der Position im Satz. Wird ansonsten laut DDref aus DataDictionary ermittelt
RangeCond-Schlüssel = Bedingung1, Bedingung2, …
Angabe von ein oder mehreren Bedingungen, die alle erfüllt sein müssen, damit die zugehörige Range-Schlüssel-Angabe greift.
Es können beliebige infra-Makros und Konstanten verwendet werden.
Eine Bedingung besteht aus 2 Makroausdrücken/Konstanten und einem Vergleichsoperator.
Der zweite Ausdruck einer Bedingung vom Typ „==“ (ist gleich) oder „!=“ (ist ungleich) kann dabei eine Auswahl erlaubter bzw. nicht erlaubter Werte in runden Klammern und durch Komma getrennt enthalten.
Erlaubte Vergleichsoperatoren:
== Prüfung auf Gleichheit
!= Prüfung auf Ungleichheit
< Prüfung auf "kleiner als"
> Prüfung auf "größer als"
<= Prüfung auf "kleiner oder gleich"
>= Prüfung auf "größer oder gleich"
Beispiel:
RangeCond-1=CurrentDateLong()>20181011,GV(GV_login)==Bernd
RangeMsg-Schlüssel = Text
Statt der allgemeinen Fehlermeldung bei einer Fehleingabe laut Range-Schlüssel wird die hier angegebene Meldung ausgegeben.
Entweder wird über einen Schlüssel auf die Meldungsdatei verwiesen oder der Text wird direkt angegeben.
Als Parameter stehen die Fehleingabe (%1) und der zulässige Wertebereich (%2) zur Verfügung.
Range-Schlüssel = Range-Angabe
Eingabebedingungen analog zu Range-Angabe in Sektion [GuiEdit].
Schlüssel ist ein frei wählbarer aber eindeutiger Begriff innerhalb der Sektion, um die zugehörigen RangeCond-, RangeMsg- und RangeWarning-Angaben zu identifizieren.
Es gibt kein Limit für die Anzahl der Range-Angaben.
In Kombination mit „RangeCond“ sind komplexe situationsabhängige Feldprüfungen realisierbar.
Beispiel:
In einem Stammdatenprogramm (Megas) dürfen im Modus „Erfassen“ (der Modus wird in der Globalvariablen GV_megmode zur Verfügung gestellt) in einem Feld (z.B. Teilenummer) keine Werte eingetragen werden, die mit A, B oder C anfangen:
Range-1= !”A*”,!”B*”,!”C*”
RangeCond-1=GV(GV_megmode)==3
RangeWarning-Schlüssel = No
Die Angabe kann fehlen (Default No).
Bei "Yes" werden Eingaben außerhalb des mit Range-Schlüssel definierten Bereichs (siehe oben) nur gemeldet, aber die Eingabe wird akzeptiert.
Synchro = Yes (***)
Alle Controls mit dieser Buffer/Positionsangabe (aus DDref/Buffer/Pos) sofort abgleichen, da überall derselbe Wert stehen muss, z.B. Mengeneinheit mehrfach in einem Fenster.
