Hinweise zur Formulargestaltung

Diese Hinweise sind vordergründig nicht für den Anwender gedacht; sie dienen einerseits zur Verwendung im Hause des Software-Entwicklers (Computer-Institut Bamberg). Sie können darüberhinaus besonders erfahrenen Anwendern nützlich sein, die an ihren anwenderspezifischen Formularen selbst Anpassungen vornehmen wollen.

Diese Hinweise beziehen sich auf solche Formulare, die zur individuellen Gestaltung von Druckdokumenten von der Beton.NET-Anwendung oder vom Beton.NET-Dienst verwendet werden, um daraus xpd-Druckdateien zu erzeugen. Das geschieht einerseits beim Druck von Rechnungen, Gutschriften, Stornierungen, Frachtgutschriften und Produktionsgutschriften. An diesen Stellen kann der Anwender möglicherweise explizit eines von mehreren hinterlegten Formularen auswählen. Es geschieht andererseits auch an Stellen, an denen keine Formularauswahl vorgesehen ist, wie beim Druck des Lieferschein-Übernahmeprotokolls, bei Lieferschein-Export-Protokoll, bei der Stornierung von Frachtgutschriften, beim Druck des Rechnungsausganges und an einigen anderen Stellen.

Die Formulare sind in der Datenbank hinterlegt und über das Fenster Formulare bearbeiten erreichbar.

Ein Formular ist in einzelne Abschnitte unterteilt, die mit Doppelpunkt und Label-Bezeichnung eingeleitet werden. Das Programm arbeitet Labels mit festgelegten Namen in einer im Programm festgelegter Reihenfolge ab. Die Labels sind entweder in einem separaten Hilfeseite dokumentiert oder aus dem vorhandenen Standard-Formular ersichtlich. Im Prinzip übernimmt das Programm die in diesen Labels enthaltenen Daten in die xpd-Druckdatei, wobei vorgesehene Ausdrücke durch Informationen aus der Datenbank oder durch programmintern belegte Variable ersetzt und einige Sonderfunktionen ausgeführt werden. Ebenfalls werden Gänsefüßchen in Textfeldern durch Apostrophe ersetzt

Folgende Ersetzungen werden im einzelnen vorgenommen:
  • [SATZ.Feldname] - wird durch den Feldinhalt des Datenbanksatzes ersetzt - nicht für Rechnungen/Stornos vorgesehen
  • [Tabellenname.Feldname] - wird durch den Feldinhalt des Datenbanksatzes ersetzt - nur für Rechnungen/Stornos sowie für Fracht- und Produktionsgutschriften und für "offene Rechnungen" vorgesehen
  • [Variablenname] - wird durch vom Programm belegte Variable ersetzt; vorgesehene Variable sind im Muster-/Standard-Formular definiert; zusätzlich gibt es folgende fest vom Programm belegte Variable:
    [SEITE] - laufende Seitenzahl
    [ZZAHL] - laufende Zeilennummer, kann bei der Formularentwicklung nützlich sein
    [DATUM] - aktuelle Tagesdatum
    [UHRZEIT] - aktuelles Tagesdatum mit aktueller Uhrzeit
    [WAEHRUNG] - wie in den Fenstern "Währungsschlüssel bearbeiten" und "Optionen - Standardsätze" eingestellt
    [USER_NR] - Datensatz-ID-Nummer des angemeldeten Benutzers
    [USER_NAME] - Names des angemeldeten Benutzers
    [BEN_VORNAME], [BEN_NACHNAME], [BEN_PLZ], [BEN_ORT], [BEN_STRASSE], [BEN_ANREDE], [BEN_ABTEILUNG], [BEN_STATUS], [BEN_POSITION] - Daten des angemeldeten Benutzers, wie im Fenster "Personen" eingestellt
    [BEN_TEL], [BEN_FAX], [BEN_EMAIL], [BEN_MOBIL] - Kontaktdaten des geschäftlichen Standardkategorien des angemeldeten Benutzers
    [MAND_ID] - Datensatz-ID-Nummer des aktuellen Mandanten
    [MAND_BEZ], [MAND_NAME], [MAND_PLZ], [MAND_ORT] und [MAND_STRASSE] - Daten des aktuellen Mandanten
    [AUSW_xxx] - Inhalt eines Feldes der Benutzerauswahl; xxx steht für den Namen des Eingabefeldes im Programmcode; ist nicht in allen Fenstern implementiert
    Es gibt Einschränkungen beim Einlesen von Lieferscheinen.
    Für Formulare für Rechnungen/Gutschriften/Stornos sind die Ersatzausdrück separat dokumentiert.
  • [IF.xx] - Zeile wird nur übernommen, wenn ein korrespondierendes Bit gesetzt ist oder die Bedingung erfüllt ist; muß am Zeilenanfang stehen
  • [IFNOT.xx] - Zeile wird nur übernommen, wenn kein korrespondierenden Bits gesetzt ist oder die Bedingung nicht erfüllt ist; muß am Zeilenanfang stehen
  • [LABEL.Labelname] - fügt statt dieser Zeile ein anderes Label ein
  • [REM.Kommentar] - wird nicht in Druckdatei übernommen
  • [FF.] - Seitenwechsel
  • [ZZ.] - erhöht Zeilenzähler um 1
  • [ZZ.x] - erhöht Zeilenzähler um x Zeile, "x" muss numerisch sein
  • [SW.] - wenn Zeilenzähler die Seitenlänge erreicht hat, wird vor der Übernahme der Zeile:
    a) Label SEITENWECHSEL aufgerufen,
    b) Seitenzahl erhöht und
    c) Zeilenzahl auf 1 gesetzt;
    [SW.] kann an beliebiger Stelle in der Zeile stehen
  • [SW.x] - bedingter Seitenwechsel, wenn Zeilenzahl+x die Seitenlänge erreicht hat; "x" muß numerisch sein
  • [CHR.x] - Zeichen mit diesem Code, "x" zwischen 1 und 255; Beispiele: [CHR.91] ist die öffnende eckige Klammer [, [CHR.93] ist die schließende eckige Klammer ], [CHR.34] ist das Gänsefüßchen
  • [SET.VarName=Ausdruck] - setzt eine zusätzliche oder schon vorhandene Ausgabevariable auf den angegebenen Ausdruck. Der Wert bestimmt den Datentyp. Als Ausdruck sind Literale (Zeichen in Gänsefüßchen, Zahlenwerte, boolsche Konstanten), Druckvariable und Datenbankfelder zulässig, also beispielsweise "Computer-Institut" oder 123 oder 456.789 oder 'true' oder 'FALSE' oder MANDANT oder SATZ.NUMMER oder KUNDEN.NAME1. Es kann auch ein Ausdruck aus mehreren dieser Elemente durch Operatoren und Funktionen zusammengesetzt werden. Dabei gilt dieselbe Syntax und es gelten dieselben Funktionen, die beim Import von Lieferscheinen und Stammdaten verwendet werden und an Beispielen demonstriert sind. Die Qualifizierung von Datenbankfelder durch den Tabellennamen ist mit Stand von Oktober 2020 bei den Formularen für Rechnungen, für Frachtgutschriften und für Offene-Rechnungen anzuwenden; alle übrigen Formulare verwenden die SATZ-Syntax. Der neu zugewiesene Datentyp ändert ggf. den vorhandenen Datentyp. Der Datentyp beeinflusst die Formatierung bei der späteren Ausgabe und die Wirkung einer späteren Bedingung. Der Variablenname ist groß-klein-sensitiv, systematische Großschreibung empfohlen.

Bedingungen nach [IF.] / [IFNOT.] sind folgendermaßen möglich:
  • Zahlen-Code; jede Bitposition hat eine bestimmte Bedeutung, die im Programm festgelegt und deren Bedeutung aus einem Muster- oder Standard-Formular ersichtlich ist; der Code kann als Dezimalzahl oder durch vorangestelltes # als Hex-Zahl angegeben werden
  • Bedingung mit der Syntax "...SATZ.Feldname<=>Wert" oder "...Tabname.Feldname<=>Wert" oder "...Variablenname<=>Wert" ; Vergleichoperatoren im einzelnen: = < > <> <= >= . Der Vergleich erfolgt im jeweils zutreffenden Format (Text, numerisch, Datum, logisch). Dabei besteht die Einschränkung, dass vom Programm belegte Druckvariable aus historischen Gründen noch nicht in allen Fällen den optimalen Typ haben, sondern in etlichen Fällen im Textformat vorliegen, obwohl ein anderes Format treffender wäre. Man erkennt das Format in der Regel an einem Beispiel in einem Muster- oder Standardformular.
  • einen numerischen Vergleich kann man durch das Zeichen | nach dem Vergleichsoperator erzwingen; Beispiel: [IF.Ausdruck<=|10000]

Inkrementierungen nach SATZ mit "+" und einstelliger Zahl sind möglich; Hintergrund: Es können gleichnamige Felder im Recordset auftreten, wie z.B. BEZEICHNG (aus Artikel und aus Fahrzeug); um sie zu unterscheiden, verwendet man diese Inkrementierung für ein Mehrfachfeld gleichen Namens; zur Erleichterung der Formulargestaltung (auch bei evt. Änderungen am Tabellen-Aufbau) kann man doppelte Felder mit ihrer Pos-Nr im Recordset am Beginn der Druck-Datei auflisten lassen (siehe KONTROLLINFOS)

Bei Rechnungen/Gutschriften/Stornos/Frachtgutschriften sind anstelle von SATZ die Tabellennamen (=Qualifizierung) zu verwenden. Die Syntax lautet dann [tabelle.feld]. Beispiele sind [KUNDEN.NAME1] oder [HAENDLER.NAME1]. Wie man sieht, ist bei solchen Tabellen, die mehrfach im Select-Befehl vorkommen, nicht der echte Name der Datenbanktabelle (hier GESCHAEFTSPARTNER), sondern der jeweils zutreffende Alias-Tabellennamen zu verwenden, den man aus einem Beispiel in einem Musterformular erschließen kann.

An Feldausdrücke kann eine Formatierung nach den folgenden Methoden angefügt werden:
- rundes Klammerpaar mit eingeschlossenen Buchstaben L, R, LR oder RL für das Abschneiden linker oder rechter Leerzeichen. Die Methode ist nicht mehr nötig, weil Leerzeichen generell abgeschnitten werden. Bei qualifizierten Rechnungs-/Stornoformularen ist diese Formatierung nicht mehr zulässig.
- rundes Klammerpaar mit eingeschlossenem Buchstaben T für die Formatierung eines Zeitausdruckes in der Syntax Std:Min. Diese Methode sollte nicht mehr benutzt werden, stattdessen der Formatstring "HH:mm". Bei qualifizierten Rechnungs-/Stornoformularen ist diese Formatierung nicht mehr zulässig.
- Komma und folgender Formatstring; Die Wirkung des Formatstrings ist vom Datentyp abhängig. (a) Bei Daten vom Typ "Text" ist nur eine Ganzzahl zur Begrenzung der Stelligkeit möglich. Das betrifft neben Datenbankfeldern im Textformat auch die vom Programm bereitgestellten Druckvariablen im Textformat. (b) Bei Daten vom Typ Datum/Zeit gibt es neben einer Ganzzahl zur Längenbegrenzung eine Vielzahl von Formatelementen entsprechend der Microsoft-Net-Dokumentation; beispielweise erzeugt "dd.MMM yyyy HH:mm" die Ausgabe "31.DEZ 2015 23:59". (c) Bei numerischen Daten besteht ebenfalls die Möglichkeit zur Längenbegrenzung durch eine Ganzzahl. Es gibt weiterhin Formatierungen wie "N3" oder "N0" (drei oder ohne Dezimalen mit Tausendertrennzeichen) oder "-9:D3" (drei Ziffern, bei Bedarf Vornullen, rechts mit Leerzeichen auf 9 Stellen aufgefüllt) oder "D06" (sechsstellig mit Vornullen); Details laut Microsoft-Dokumentation.
Beachten Sie, dass vom Programm bereitgestellt Druckvariable (also Ausdrücke ohne SATZ und ohne Tabellennamen) früher stets im Textformat vorlagen, also eine Konvertierung wie bei Datum oder Zahlen nicht möglich ist. Zunächst bei Rechnungserstellung und Stornierung und schrittweise in anderen Dokumenten werden jeweils sinnvollere Datentypen verwendet. Beachten Sie außerdem, dass Leerzeichen weiterhin bei der Darstellung der xpd-Daten abhängig von der Ausrichtung (links-/rechtsbündig) entfernt werden können.

Alle Schlüsselwörter (wie SATZ, IF, LABEL) sollen mit Großbuchstaben eingegeben werden.
Kombinationen von IF und IFNOT sind nacheinander und mit LABEL zulässig, auch mit zwischenstehenden Leerzeichen, Leerzeichen vor LABEL sind zulässig
unformatierte Datumsfelder aus der Datenbank werden mit zweistelliger Jahreszahl ausgegeben (um Platz in der Darstellung zu sparen)
Geldbeträge werden mit Tausendertrennzeichen ausgegeben. Andere numerische Werte (Tage, Prozentsätze, Mengen) werden ohne Tausender-Trennzeichen ausgegeben.

Im Zusammenhang mit der Formulargestaltung ist es nützlich, sich auch über die xpd-Syntax zu informieren.

Sowohl bei Rechnungen und Gutschriften aus Vergütung als auch bei Frachtbelegen sind Ersatzausdrücke zur Kennzeichnung von Duplikaten zulässig. Sie sind unter Rechnungsformulare beschrieben.

Weiterhin werden bei Rechnungen, Gutschriften und Stornos, perspektifisch auch bei Zahlungserinnerungen, weitere Ersatzausdrücke zur Verwendung am Dokument-Ende unterstützt. Es gibt genau 10 solche End-Ersatzausdrücke mit Namen VAR0 bis VAR9. Deren Wert kann an beliebiger Stelle im Laufe der Formularbearbeitung mit der Anweisung SET (wie oben beschrieben) festgelegt werden. Unmittelbar bei Ende eines Dokumentes werden im Druckdokument vorkommende Ausdrücke $VAR0$ bis $VAR9$ durch die zuvor belegten Werte ersetzt. Auf diese Weise ist es möglich, zum Beispiel auf früheren Seiten eines Dokuments die Gesamt-Seitenzahl darzustellen, oder man kann schon am Anfang des Dokuments den Gesamtbetrag einschließlich Girocode darstellen. Nicht-definierte End-Ersatzausdrücke gelten als "leer". Die End-Ersatzausdrücke behalten ihre Inhalte dokumentübergreifend, sollten also bei Bedarf im Formular rückgesetzt werden.
Passend dazu werden auch 10 End-Bedingungen mit Namen BED0 bis BED9 unterstützt. Um sie zu verwenden, müssen sie per SET mit zwingend boolschen Werten belegt werden. Bei der Endebehandlung werden ganze Zeilen, die mit $BED0$ bis $BED9$ beginnen eliminiert, wenn die entsprechende Bedingung nicht "True" ist.
Bamberg