Formular-Befehle

Aus FaktuLux
Wechseln zu: Navigation, Suche

Info: Formulare, Formular-Typen, Variablen-Zuweisung

Dieses Kapitel beschäftigt sich mit der Syntax von Formularen. FaktuLux verwendet eine eigene Script-Sprache, mit der Sie die zu druckende Seite oder den Aufbau eines Exports beschreiben. Wünschenswert für die Gestaltung von Ausdrucken ist ein WYSIWYG-Editor (what you see is what you get). Er zeigt den zu erwartenden Druck in Schrift und Formatierung direkt an. Eine dynamische Seite, die sich anhand einer vielzahl von Parametern verändert, lässt sich aber nicht einheitlich darstellen. Außerdem werden Belege und Formulare einmalig erstellt und danach nur noch gelegentlich angepasst. Daher haben wir uns für den einfachen Texteditor entschieden, der für die Zunkunft noch um eine Syntax-Hervorhebung ergänzt werden soll.

Inhaltsverzeichnis

Befehle

Folgende Regeln sind bei der Formulargestaltung zu beachten:

  • Alle folgenden Befehle müssen samt Parametern in geschweiften Klammern '{}' eingeschossen sein. Der übrige Text wird gedruckt bzw. exportiert.
  • Alle Angaben sind in Millimetern zu machen, Nachkommastellen sind erlaubt.
  • Führende Leerzeichen jeder Zeile werden ignoriert. Verwenden Sie Einrückungen um die Verschachtelungstiefe von Bedingungen hervorzuheben.
  • Eine leere geschweifte Klammer {} wird ignoriert. Sie können diese Leerzeichen am Anfang einer Zeile voranstellen, wenn diese nicht gelöscht werden sollen. Auch eine eckige Klammer '[', lässt sich somit am Anfang einer Zeile drucken, da sie nicht als Einleitung einer Bedingung angesehen wird.
  • Die Tabulatorwerte gehen immer vom linken Rand aus und ändern sich auch mit diesem, wohingegen sich die absoluten Werte (große X und Y) auf den gesamten Druckbereich beziehen und von den Randwerten der Formulare nicht beeinflußt werden.
  • Der Ursprung des Gitters (Koordinate X0/Y0) liegt in der linken oberen Ecke des Formulars.
  • Folgt auf die geschweifte Klammer '{' ein Leerzeichen, wird die Funktion ignoriert.
  • In Memo-Feldern können sämtliche Formatierungen verwendet werden. Außerdem kann mittels Doppelstrich '--' oder einer Halfpipe '|' ein linker Einzug für Aufzählungen erzeugt werden. Eine Halfpipe am Anfang der folgenden Zeile erhält den Einzug und ermöglicht so einen erzwungenen Zeilenumbruch.
  • Bei Befehlen, die eine Funktion ein- oder ausschalten, schaltet der Großbuchstabe die Funktion ein und der Kleinbuchstabe diese wieder aus.

Dies sind die Befehle in alphabetischer Reihenfolge:

Temporäre Tab-Stops (0..9, +, -)

In Fließtexten können maximal 9 Temporäre Tabulatoren gesetzt werden.

+         fügt einen Tab-Stop hinzu
-         ruft den nächsten Tab-Stop ab
          Der Zähler wird bei jedem Zeilenvorschub zurückgesetzt
0         Löscht alle bisher definierten Tab-Stops und setzt den ersten neu
1 .. 9    Ruft den zugehörigen Tab-Stop ab

Beispiel: Version-1         {+}Version-2        {+}Version-3
          grün{-}gelb{-}blau
          1.000 Stück{-}2.000 Stück{-}1.000 Stück
          (optional){2}(optional)

+R, +D    Zum Tab-Stop kann optional auch die Orientierung angegeben werden.
          Als Standard wird linksbündig angenommen. Der Dezimal-Tabstop wird
          dabei nach dem ersten Komma ausgerichtet. Definieren Sie diesen z.B.
          in einer Überschrift ohne Komma, wird er ans Ende der Zeile gesetzt,
          bzw. ans Ende des letzten Wortes vor den Beginn der nächsten Funktion.
          Möchten Sie die Position selber festlegen, verwenden Sie eine leere
          Funktion {}.

Beispiel: {+D}Einzelpr{}eis     setzt den Dezimaltab hinter dem 'r'

-L, 3L    Folgt auf einen Tab-Stop-Abruf ein L, wird von der aktuellen zur Zielposition
          eine Linie gezogen. Es könne die Parameter der Standard Linienfunktion {L}
          durch Semikolon getrennt angehangen werden.

Beispiel: Grundgebühr            {+D}1.234,00 Euro{+}
          Zuschlag 1{-}109,00 Euro
          Zuschlag 2{-}34,80 Euro
          {2L}
          Summe{-}1.377,80 Euro

- a - Abbruch

Der Befehl {a} ermöglicht den Abbruch eines Drucks oder einer Ausgabe. Folgt dem Befehl ein Text, wird dieser als Fehlermeldung ausgegeben.

Beispiel: [{Vm.1}=
           {aSie müssen einen Wert eingeben!}
          ]

Variation:
aa   Beendet die aktuelle Ausgabe in Belegpositionen, Listen, Unterlisten, Artikel-Umsatz
     und Reporten. Es werden keine weiteren Datensätze verarbeitet und die Ausgabe wird
     abgeschlossen.
     Ein in Unterlisten gesetztes {aa} gilt nur für die aktuelle Unterliste und beendet nicht
     die Hauptliste!
ax   Bricht die Ausgabe des aktuellen Beleges ab. Alle weiteren Belege der Druck-Positionen
     werden dennoch abgearbeitet.
Bei den Variationen kann keine Meldung ausgegeben werden.

- A - ASCII-Zeichen

Der Befehl {A} ermöglicht den Druck und die Ausgabe jedes Zeichens des ASCII-Zeichnsatzes. Geben Sie hinter dem A des Zeichenwert an.

Beispiel: Spaltentrennung beim Export mittel Tab-Stop

Name{A9}Strasse{A9}Plz{A9}Ort

Geschweifte Klammern
{A123}    Geschweifte Klammer auf "{"
{A125}    Geschweifte Klammer zu "}"

- b - Fett aus

Das 'B' leitet sich vom englischen bold ab. Mittels HotKey [Strg]+[B] können Sie einen markierten Text in einem Fließtext für den Fettdruck formatieren.

- B - Fett an

Beispiel:   {B}Überschrift{b}

- c - Positionszähler

Die Variablen {VS.8} und {VS.18} zählen die Positionen während des Belegdrucks, wobei {VS.8} jede Position zählt, {VS.18} nur die Nicht-Text-Positionen. Sie können für eine alternative Nummerierung verwendet werden. Um auf unterdrückte oder eingefügte Positionen zu reagieren, verwenden Sie den Befehl {c}.

c, c-   Count-1, reduziert die Beleg-Positionszähler {VS.8} und {VS.18} um 1
c+      Count+1, erhöht die Beleg-Positionszähler {VS.8} und {VS.18} um 1

- C - Farbe

Mittels {C} können Sie die Text- und Hintergrundfarbe verändern.

C   Schwarz
    Es können folgende Standardfarben verwendet werden:
    White, Silver, LtGray, Gray, DkGray, Black,
    Aqua, Blue, Navy, Teal, Lime, Green, Olive,
    Maroon, Red, Fuchsia, Purple, Yellow.
    Beispiel: {CRed} wechselt nach Rot
C$  Leitet die freie RGB-Farbcodierung ein (C$<Rot>,<Grün>,<Blau>)
    - C$255,0,0  entspricht einem reinen Rot mit voller Intensität
    - C$0,255,0  reines Grün 
    - C$0,0,255  reines Blau
C#  Setzt nicht die Schrift- sondern die Hintergrundfarbe.
    (# kommt vor einem etwaigen $)
C%  Färbt die gesamte Zeile in der angegeben Farbe
    (% ersetzt #)

- d - Debug aus

(Darf auch vor Bedingungszeichen [,| und ] stehen)

- D - Debug ein

- e - Leerzeile, wenn Felder nicht leer

Der Befehl muß am Zeilenanfang stehen. Setzen Sie hinter den Befehl beliebig viele Feldvariablen. Ist zumindest eine nicht leer, wird eine Leerzeile ausgegeben.

Beispiele

- E - Leerzeile, wenn Felder leer

Der Befehl muß am Zeilenanfang stehen. Setzen Sie hinter den Befehl beliebig viele Feldvariablen. Sind alle leer, wird eine Leerzeile ausgegeben.

Beispiele

- f - Standardschrift

Wählt die im Fomular hinterlegte Schriftart aus.

- F - neue Schrift

Wählt eine andere Schriftart aus. Geben Sie den Namen der Schrift unmittelbar hinter dem F an, z.B. {FArial}.

Mittels dieser Funktion lassen sich auch Schriften mit beliebigem Drehradius definieren. Bei dieser Form der Schriftdefinition lassen sich Größe und Erscheinung (fett, kursiv) jedoch nicht über Einzelbefehle umgeschalten, sondern müssen mit der Schrift definiert werden. Folgende Parameter können jeweils durch Semikolon getrennt angehangen werden:

A<Winkel> Winkel in zehntel Grad, 1800 ergibt eine Schrift, die auf dem Kopf steht
H<Wert>   positiver Wert: Höhe des Schriftraumes in mm
          negativer Wert: Höhe der reinen Schrift in mm (etwas größer)
W<Wert>   logische durchschnittliche Breite der Schrift, Standard=0
B         Fett
I         Kursiv
U         Unterstrichen
S         Durchgestrichen

Übergeben Sie keinen Schriftnamen (z.B. {F;H4;A1800}), wird die Schriftart des Formulars verwendet. Um zur normalen Schrift zurückzukehren, verwenden Sie den Befehl {f}.

- g - Text als Barcode drucken

Dieser Befehl druckt die internen Barcodes zur Steuerung von FaktuLux. Dazu gehören zum einen Datensatz-Barcodes, über die sich z.B. Mitarbeiter, Adressen oder Belege ansprechen lassen. Zum andern sind es Steuerbarcodes, die Anweisung an FaktuLux im Zeiterfassung-Modus senden.

Wenn Sie jedoch den Inhalt eines Datenbankfeldes als Barcode drucken wollen, müssen Sie einen anderen Befehl verwenden. Die Barecode-Erweiterung des Variablenbefehls {V} erfüllt diese Aufgabe. Den EAN-Code eines Artikels z.B. drucken Sie über den Befehl {VB20.EANCode;C15}.

Folgende Codes drucken automatisch den von FaktuLux erkannten Barcode
für verschiedene Datensatznummern:
  F0        Benutzer-Nummer
  F1        Adress-Nummer
  F2        Artikel-Nummer
  F3        Beleg-Nummer      
  F4        OP-Nummer
  F5        Projekt-Nummer
  F6        Kostenstelle
  F7        Arbeitsvorgang
  F8        ArtikelLos
  F9        Belegposition
  FA        Ansprechpartner
  FL        Artikel-Lagerbuchung
  FV        Beleg-Verteiler

Für die Steuerung der Zeiterfassung gelten folgende Codes:
  FX1       Anmelden         Arbeitszeit beginnen
  FX2       Abmelden         Arbeitszeit beenden
  FX3       OK               Eingabe bestätigen
  FX4       Abbrechen        Eingabe abbrechen
  FX5       Abschließen      schließt laufenden Auftrag ab ohne neuen zu beginnen
  FX6       ohne Auftrag     löscht den Auftrag aus der Auswahl
  FX7       Fortfahren       lädt letzten Auftrag erneut
  FX9       Personal-Zeiterfassung
  FX10      Kostenstellen    öffnet die Liste der Kostenstellen
  FX11      Arbeitsvorgänge  öffnet die Liste der Arbeitsvorgänge
  FX15      Material         öffnet die Artikelauswahl
  FX16      Bestandskontrolle Multilager
  FX17      Etikettendruck   zu aktueller Auftragsposition
  FX20      Lieferschein     Auftrag(sposition) in Lieferschein übernehmen
  FX21      Versand          Versand erfassen
  FX22      Lieferschein stornieren
  FX23      letzten Lieferschein erneut drucken (bei Bedarf auch Buchung)
  FX25      Lager-Buchung    Barcode-Karten für Lagerumbuchung drucken
  FX27      Liefertermine    Zeigt die Liefertermine im Kalender an (PrintLux)
  FX30      Termine          Termine listen
  FX35      Auftrag fertig   bucht Aufträge von Produktion in Büro
Das F in den FaktuLux-Barcodes wird dabei durch das in den Einstellungen
definierte Barcode-Kennzeichen ersetzt. Vorgegeben wird '#'.

Für den UPS-Versand können Anzahl der Pakete und Gewicht ebenfalls gescannt werden.
Hierbei folgt auf das Barcode-Zeichen (#) zuerst ein 'U' und dann für Anzahl der
Pakete ein 'A' und das Gewicht ein 'G'.
Beispiele:   {g#UA2} - druckt einen Barcode für zwei Pakete
             {g#UG5} - druckt einen Barcode für Gewicht 5kg

Bei den anschließenden Werten, die durch Semikolon zu trennen sind, wird
bei fehlendem Wert oder Null der Standardwert angenommen.
  x<Wert>   Tab-Wert (x0 = Linker Rand)
  xx        Rechter Rand (setzt automatisch auf Rechtsbündig)
  y         Oberer Rand 
  yy        Unterer Rand
  X<Wert>   X-Wert (absolut oder mit +/- relativ von akt. Position)
  Y<Wert>   Y-Wert (absolut oder mit +/- relativ von akt. Position)
  C<Nr>     Art des Barcode (siehe Tabelle am Ende, Standard 6 = Code128 Auto)
  H<Wert>   Höhe in Millimetern (Standard 5mm)
  W<Wert>   Breite des schmalsten Balken in Millimetern (Standard 0,25mm)
  A<Winkel> Drehwinkel beim Druck (Standard 0)
  P         Prüfsumme berechnen und anhängen
Folgende Parameter verändert den Druck der EAN-Nummer unterhalb des BarCode 
vom Typ EAN13 (Parameter C0)
  S<Wert>   Der Abstand der Zahlenblocks Rechts und Links zu den Verlängerungen
            des BarCode wird mit der Breite des schmalsten Balken angegeben.
            Vorgabe ist der Wert 2.
  R<Wert>   Je nach Schriftart kann die Stellung der EAN-Nummer zum BarCode
            fehlpositioniert sein. Über diesen Parameter kann der Druck in der
            X-Achse verschoben werden. Positive Werte verschieben nach Rechts,
            negative nach Links. Angabe in Millimetern, Nachkommastellen erlaubt.
  D<Wert>   Für den Abstand nach Unten der EAN-Nummer zum BarCode wird die
            Schrifthöhe verwendet. Je nach gewählter Schriftart kann dieser
            zu klein oder zu groß sein. Über diesen Parameter kann der Druck in
            der Y-Achse verschoben werden. Positive Werte verschieben nach Unten,
            negative nach Oben. Angabe in Millimetern, Nachkommastellen erlaubt.

- G - Grafik einbinden

Zur Erstellung von Faxen oder PDF-Dateien ist es nötig, einen digitalen Briefbogen in den Hintergrund zu legen. Außerdem möchte man Angebote sicher mit einer grafischen Unterschrift aufwerten. Die Grafikdateien müssen dazu im Datenverzeichnis im Format Windows-Bitmap vorliegen. Der Name wird ohne Extension durch ein Semikolon getrennt hinter dem 'G' angegeben.

Das Einbinden der Grafik kann auch auf bestimmte Ausgabeformen beschränkt werden.
Schicke ich ein Angebot per eMail, binde ich einen Briefbogen ein und setzte eine
grafische Unterschrift darunter. Drucke ich es jedoch für den Postversand aus,
wähle ich das hochwertige Briefpapier und unterschreibe eigenhändig.
  GF        Die Grafik wird nur beim Faxen eingebunden
  GP        Die Grafik wird nur beim PDF-Export eingebunden
  GB        Die Grafik wird nur beim Faxen oder PDF-Export eingebunden

Im Anschluß folgen Werte durch Semikolon getrennt, die Koordinaten bezeichnen
die linke, obere Ecke der Grafik
  x<Wert>   Tab-Wert (x0 = Linker Rand)
  xx        Rechter Rand
  y         Oberer Rand 
  yy        Unterer Rand
  X<Wert>   X-Wert (absolut oder mit +/- relativ von akt. Position)
  Y<Wert>   Y-Wert (absolut oder mit +/- relativ von akt. Position)
  W         Breite der Grafik, bei 0 unverändert
            Die Höhe wird formatgetreu skaliert
  F         Formular, Grafik wird auf die ganze Seite inkl. OffSets ausgedehnt
            Angaben zu Position und Breite werden ignoriert
            Nur bei Formularen:
              O<Wert>   Formularkorrektur Oben
              U<Wert>   Formularkorrektur Unten
              R<Wert>   Formularkorrektur Rechts
              L<Wert>   Formularkorrektur Links
            Ohne Werte wird die Grafik auf die Seite eingepasst
Die Änderungen der Position beim Grafikdruck wirken sich nicht auf die Position
des aktuellen Druck-Cursors aus.

Da Bitmap-Grafiken keine Transparenzen unterstützen, ist es wichtig die Grafik zuerst auszugeben und dann den Text einzudrucken. Gerade bei grafischen Unterschriften ist dies zu beachten. Ein Beispiel finden Sie in den Textbausteinen.

Als Auflösung für einen grafischen Briefbogen empfehlen wir 2.483 x 3.512 bei 8bit Farbtiefe. Sollten Sie für Texte auf dem Briefbogen kein Schwarz verwenden, ist es besser eine eigene Grafikdatei in Graustufen für Fax zu hinterlegen, bei der die Textfarbe zuvor in Schwarz geändert wurden. Sonst können durch die Rasterung manchmal Zahlen wie bei der Bankverbindung nicht zweifelsfrei entziffert werden.

- h - Information während des Drucks

Manchmal ist es wünschenswert, während der Verarbeitung eines Formulares eine Meldung auszugeben, sei es um den Inhalt von Variablen zu überprüfen oder das Erreichen bestimmter Formularpositionen anzuzeigen. Der Befehl {h} sammelt alle folgenden Texte und Werte dieser Zeile und zeigt sie als Meldung an, wenn das Ende der Zeile erreicht ist. Halfpipes '|' werden vor der Anzeige durch Zeilenumbrüche ersetzt.

- H - Finale Nachricht

Alle auf {H} folgenden Texte und Werte dieser Zeile werden nicht ausgegeben, sondern in einem Text gesammelt und nach Abschluß des Drucks/der Ausgabe als Meldung angezeigt. Während der aktuellen Ausgabe löscht jeder erneute Aufruf von {H} alle bereits für die Finale Nachricht gespeicherten Texte. So kann zum Beispiel während des Etikettendrucks der Text bei jedem Etikett neu gesetzt werden, da man ja oft nicht weiß, wieviele Etiketten noch kommen werden und es beim Etikettendurck keinen Job-Nachspann gibt. Soll eine bereits gespeicherte Nachricht erhalten bleiben, ergänzen Sie den Befehl zu {HX}. Neuer Text wird dann mit einem Zeilenumbruch zur Nachricht hinzugefügt. Halfpipes '|' werden vor der Anzeige durch Zeilenumbrüche ersetzt.

- i - Kursiv aus

Das 'I' leitet sich vom englischen italic ab. Da aber ein [Strg]+[I] in einem Fließtext einen echten TabStop einfügt, haben wir für kursiv den HotKey [Strg]+[K] gewählt.

- I - Kursiv ein

- j - Telefonnummern-Konvertierer

Der Befehl {j} schickt die nachfolgende Variable vor der Ausgabe durch den Telefonnummern-Konvertierer. Dieser entfernt aus einer Telefon- oder Faxnummer alle Sonderzeichen und ersetzt Buchstaben durch die entsprechenden Ziffern.

- J - Jump-Aufruf eines Formular-Blocks

Es kommt immer wieder vor, dass der gleiche Code an verschiedenen Stellen der Ausgabe benötigt wird. Schreibt man diesen mehrfach ins Formular, erhöht sich der Aufwand einer Anpassung und es besteht immer die Gefahr, eine Änderung zu vergessen. Für diesen Zweck wurde der Jump-Befehl geschaffen. Die mit {J+<Name>} und {J-<Name>} eingefassten Zeilen können an jeder Stelle des Formulars mittels {J<Name>} abgerufen werden.

Regeln
  • Die Jump-Befehle müssen in eigenen Zeilen stehen, welche nicht mitgedruckt werden.
  • Der gesamte Jump-Codeblock muss innerhalb eines Bereiches ({W...) stehen.
  • Jump-Blöcke dürfen nicht verschachtelt werden.
  • Innerhalb eines Jump-Blocks darf kein Jump-Befehl erfolgen.
  • Hinter der schließenden Klammer können Erläuterungen folgen.

Beispiel: Die Spaltenüberschrift einer Liste wird sowohl auf der ersten Seite, als auch auf den Folgeseiten gedruckt. Durch die Definition in einem Jump-Block kann diese für die Folgeseiten übernommen werden.

{J+Kopf}
{S12}Adressen-Liste{s}  {VS.25}{xx}{VS.6}    Seite  {VS.4}
{Y+3}Nummer{x1}Name{x2}Straße{x3}Plz / Ort
{Lx;Y-2,5;W0,1;xx}
{J-Kopf}
{W Kopf übertrag ----------------------------------------------------------}
{JKopf}
{W Positionen ------------------------------------------------------------}

[..]

- k - Preis-Kodierer

Der Befehl {k} schickt die nachfolgende Variable vor der Ausgabe durch den Preis-Kodierer. Steht dieser Befehl vor einer beliebigen Variablen, werden in dieser befindliche Zahlen durch die entsprechenden Zeichen der Preiscodierung ersetzt, wie sie in den Einstellungen unter Artikel definiert sind. Mittels Preiskodierung können Sie z.B. Einkaufspreise für den Kunden nicht erkennbar auf Artikeletiketten drucken und als Grundlage für Rabattverhandlungen verwenden.

- K - Preis-Kodierer Extra

Der Befehl {K} arbeitet wie {k}, jedoch werden alle Nichtziffern entfernt. Einzig ein Minus '-' wird durch einen Unterstrich '_' ersetzt.

- l - Rechteck füllen

Der Befehl {l} füllt ein Rechteck mit Farbe. Die einzelnen Werte sind durch Semikolon zu trennen. Die ersten beiden Werte geben die linke obere Ecke an. Es gelten die gleichen Regeln wie beim Linienzeichnen {L}. Die nächsten beiden Werte definieren Breite und Höhe des Rechtecks in mm. Dann folgt die Farbe für die Füllung. Soll das Rechteck zusätzlich umrahmt werden, geben die Parameter sechs und sieben die Farbe und die Stiftbreite (in mm!) an. Für die Farbwerte können auch Variablen angegeben werden, wie sie zur Kennzeichnung von Lagerorten ausgewählt werden.

Das folgende Beispiel zeigt den Druck einer Kanban-Anforderungskarte. Dafür wird die Etiketten-Druckfunktion verwendet. Die Maße der bedruckten Fläche sind 76 x 44 mm (BxH).

  • Zuerst wird die Karte in der Farbe1 des Lagerortes eingefärbt. Anschließend wird eine Schnitthilfslinie von 0,2mm Stärke am oberen und linken Rand gezogen und die Veränderung der Y-Position zurückgesetzt.
  • Die zweite Zeile druckt in weißer Farbe zwei Texte 6 und 40 mm von oben. Dann wird wieder die Standardfarbe Schwarz gesetzt und die Veränderung der Y-Position erneut zurückgesetzt.
  • Jetzt folgt eine Bedingung: Ist dem Lagerplatz (eine Unterteilung des Lagerortes) eine eigene Farbe zugewiesen, wird die weiße Fläche in der Mitte der Karte in dieser Farbe 2mm stark umrandet. Die Fläche wird 10mm vom linken Rand (x0) und 10mm von oben in den Maßen 56 x 24 mm (BxH) aufgebracht.
  • Die ersten beiden Zeilen nach der Bedingung lokalisieren den aktuellen Artikel des Lagerplatzes und setzten den Zeilenzeiger 10mm nach unten.
  • Der Tabulator {x1} zeigt auf die Mitte der Karte bei 38mm und wird jeweils für einen zentrierten Druck aufgerufen {xC1}.
  • {gFL} druckt den internen Barcode des aktuellen Lagerartikels zur Lagerbuchung in einer Höhe von 10mm. Anschließend wird die temporäre Formular-Variable 'Lagerort' mit dem EAN-Code des Artikels, dem Lagercode und der Regalkennung gefüllt. Dies ist nötig, um das Resultat in der folgenden Zeile zentriert drucken zu können.
  • In die letzte Zeile wird schließlich der Suchbegriff des Artikels gedruckt.
{n}{lX;Y;76;44;V25.Farbe1}{Lx0+76;Y;W0,2;x0;Y+44}{Y-44}
{n}{Y+6}{CWHITE}{xC1}KanBan-Anforderungskarte{Y+34}{xC1}Mustermann GmbH{C}{Y-40}
[{V26.Farbe}>0
  {lx0+10;Y+10;56;24;CWHITE;V26.Farbe;2}
|
  {lx0+10;Y+10;56;24;CWHITE}
]
{VL20,28.ArtikelIDa}
{Y+10}
{xC1}{gFL;H10}{Vs.Lagerort=V20.EANCode+   +V25.LagerCode2+-+V28.Regal}
{xC1}{Vs.Lagerort}
{xC1}{V20.SuchBegriff}

- L - Line zeichnen

Der Befehl {L} zieht Linien. Die Werte sind durch Semikolon zu trennen. Die ersten beiden Werte geben den Startpunkt an. Zu jeder weiteren Position wird dann eine Linie gezogen, sofern dieser kein 'N' voranging.

x    Tab-Wert (x0 = Linker Rand)
xx   Rechter Rand
y    Oberer Rand 
yy   Unterer Rand
X    X-Wert, mit +/- relativ von akt. Position
Y    Y-Wert, mit +/- relativ von akt. Position
N    Folgenden Punkt nur setzen, keine Linie zeichnen
     (zum Zeichnen diagonaler Linien)
W    Stiftbreite (in mm!)
C    Stiftfarbe (siehe Funktion C)
S    Stiftart
     Es können folgende Stiftarten gewählt werden:
     Solid       durchgezogene Linie (Standard)
     Dash        gestrichelte Linie
     Dot         gepunktete Linie
     DashDot     Linie aus abwechselnden Strichen und Punkten
     DashDotDot  Linie aus Strich-Punkt-Punkt-Folgen
     Ist die Stiftart nicht Solid, wird die Stiftbreite automatisch
     auf 1 gesetzt und kann auch nicht verändert werden!

Folgendes Beispiel zeichnet eine 0,2mm starke Linie vom linken zum rechten Rand:
{Lx0;Y;W0,2;xx}

- m - Druckt den Maß-Block für FurLux

Die FaktuLux-Ergänzung FurLux wird nicht weiterentwickelt und kann jederzeit aus dem Quellcode entfernt werden.

(Mit Semikolon getrennt werden die Breite einer Spalte und (optional) der Abstand zwischen den Spalten (Vorgabe 10mm) angegeben. Folgt auf das m ein l, werden Spalten und Zeilenlinien gedruckt.)

- M - Zeigerpositionen x & y merken

Der Befehl {M} speichert die aktuelle Position des Zeichenzeigers. Jeder Aufruf überschreibt den letzten Speicher. Mittels {XM} und {YM} können Sie die Positionen wieder anspringen.

- n - Kein Zeilenvorschub

Der Befehl {n} unterdrückt den Zeilenvorschub am Ende der Zeile. So lassen sich Lokalisierungs- und Berechnungsfunktionen in eigenen Zeilen aufrufen, ohne dass Leerzeilen gedruckt werden. Außerdem kann eine Druckzeile so über mehrere Formularzeilen zusammengesetzt werden. Die X-Position wird auch nicht auf den linken Rand zurückgesetzt. Sie können also in der Folgezeile einfach weiterdrucken.

Das folgende Beispiel druckt in einer Artikelliste alle Bestände fett, die unter dem Mindestbestand liegen, sofern einer definiert ist.

{n}{V20.IDa}{x1}{V20.Suchbegriff}
[{V20.MindestBestand}<> and {V20.Bestand}<{V20.MindestBestand}
  {xD2}{B}{V20.Bestand}{b}
|
  {xD2}{V20.Bestand}
]

- N - Nicht drucken, wenn alle Felder dieser Zeile leer

Der Befehl muß am Zeilenanfang stehen. Hinter den Befehl können Sie beliebige Kombinationen aus Feldinhalten und Beschriftungen setzen. Sind alle angegebenen Feldinhalte leer, wird die ganze Zeile nicht gedruckt.

Beispiele

- o - Für jede Währungskennung die internationale Abkürzung verwenden

Bei jeder Währung können Sie optional eine internationale Abkürzung hinterlegen. Der Schalter {o} bewirkt, dass immer diese Abkürzung verwendet wird, sofern vorhanden. Möchten Sie für Belege ins Ausland oder generell die internationale Abkürzung verwenden, können Sie dies auch über einen Ini-Schalter im Bereich [System] festlegen.

- O - Auf eine beliebige Tabelle zugreifen

Ursprünglich für Reporte konzipiert, können Sie jetzt in jedem Formular-Typ auf eine beliebige Tabelle zugreifen. Diese kann zur Lokalisierung und für Unterlisten verwendet werden. Der Befehl kann nur in der Initialisierung angewandt werden. Alle Angaben zu Index und Grenzen werden mit Slash (/) getrennt.

Als erstes wird der Dateiname der Tabelle mit vollständigem Verzeichnis
angegeben. Dabei gelten folgende Platzhalter:

%P  - Programmverzeichnis
%D  - Datenverzeichnis
%A  - Adressen-Verzeichnis
%R  - Artikelverzeichnis
%B  - Belegeverzeichnis

Alternativ ist auch die direkte Verknüpfung mit einer FaktuLux Tabelle möglich.
Dabei gibt es zwei Wege. Der erste greift direkt auf eine Programmtabelle zu,
wobei auch ihr Sortierindex und die ggf. gesetzte Dateneinschränkung verwendet
werden. Im zweiten Weg wird nur die Tabellendatei übernommen. Die Sortierung
und die Einschränkung können Sie selbst bestimmen. Mittels der Tastenkombination 
[Strg]+[Shift]+[F1] in einer Datenliste erhalten Sie eine Anzeige des Namen der
Tabellenkomponente, der Tabellennummer (sofern vorhanden) und des Dateinamen der
Tabelle. Mit x übergeben Sie beim Aufruf die Tabellennummer. In beiden Fällen
ist die Tabelle mittels Nummer 69 anzusprechen.

%x  - Direkter Zugriff auf eine FaktuLux-Tabelle
%Tx - Übernahme des Dateinamens für eine eigene Tabelle

Im zweiten Fall folgt anschließend der Index, nach dem die Tabelle sortiert
werden soll. An dritter Stelle folgt (optional) die untere Grenze, nach der
die Datensätze eingeschränkt werden sollen. Dabei sind die Felder mit
Semikolon zu trennen. Werte können in Anführungszeichen eingeschlossen
werden, und so auch Slash oder Semikolon enthalten. Ist keine obere
Grenze gesetzt, wird die Tabelle bis zum Ende abgearbeitet; folgt auf
die untere Grenze ein Slash, ist diese zugleich auch obere Grenze.
Um eine Grenze als Exclusive zu definiert (der Grenzdatensatz gehört
nicht zur Auswahl), leiten Sie diese mit einem Prozent "%" ein, das
- sofern verwendet - außerhalb der Klammern stehen muß.

Als dritte Option kann aus einer Liste eine Master/Slave-Verknüpfung ausgewählt
werden. Dadurch ändert sich die Auswahl mit jedem Datensatz der Haupttabelle.
Die Liste wird bei Bedarf erweitert.

%M1 - Alle aktiven Auftragspositionen zum Artikel.

- p - Neue Seite, wenn weniger als X mm bis unterer Rand oder Block-Ende

Der Befehl {p} prüft, ob von der aktuellen Zeilenposition bis zum Unteren Rand, bzw. dem Ende des Datenblocks noch der in mm angegebene Platz verfügbar ist. Wenn nicht, wird ein Seitenumbruch durchgeführt. Die Funktion unterdrückt den Zeilenvorschub (wie {n}). Das Ende des Datenblocks wird im Formular über das Feld Positionen drucken bis bestimmt.

- P - Neue Seite, wenn weniger als X Zeilen bis unterer Rand oder Block-Ende

Steht das {P} alleine, wird ein sofortiger Seitenumbruch ausgeführt, ohne weiteren Formularcode zu prüfen. Alles hinter dem {P} gilt schon für die neue Seite. Die Funktion unterdrückt automatisch den Zeilenvorschub (wie {n}).

P<Wert>   wenn weniger als <Wert> Zeilen Platz haben (auf der Seite, bzw. im Block),
          wird ein Seitenumbruch durchgeführt. Als Maß wird der aktuell gesetzte
          Zeilenabstand angenommen.
Es können auch Variablen angegeben werden, die, wenn sie nicht leer sind, den Wert um
den mit Komma an die Variable angehängten ganzzahligen Wert erhöhen. Ohne Angabe der
Zeilenzahl wird eine Zeile vorgegeben.

Beispiel: {PV31.FixDatum,3}    prüft auf 3 Restzeilen, wenn FixDatum einen Wert hat

Feldinhalte können auch gleich oder größer einem Wert sein. Bei ftString und ftDate wird als Text
verglichen, bei allen übrigen als Integerwert. Mit Semikolon getrennt können mehrere
Werte angehängt werden, z.b. {PV.31FixDatum;V.31Druck=2,2;V.31ID>3;2}
Bei Nummerischen Variablen kann auch der Integerwert der Variable verwendet werden. Verwenden Sie
dazu ein kleines 'v'.

Beispiel: {Pv31.Menge}

Bei der Lizenz liBlockText und Belegen oder Einzeltaschen addiert ein zweites P
die Zeilenzahl des Bezeichnungs-Blocks zum Wert. Beispiel: {PP3}

- q - Fließtext

Will man in einem Formular einen längeren Text setzten, der evtl. auch noch Variablen und Formatierungen enthält, muss man darauf achten, an den richtigen Stellen die Zeilenumbrüche durchzuführen. Einfacher geht es mit dem Befehl {q}. Er verarbeitet den gesamten Rest der Zeile als Fließtext und bricht ihn automatisch um. Die Breite wird hinter dem q in mm angegeben, z.B. {q50}.

- Q - Import: Aktuelle Zeile überspringen

Mit Hilfe dieses Befehls kann während des Daten-Import die Verarbeitung einer Zeile abgebrochen werden.

- r - Keine Seiten-Umbruchsprüfung beim Druck der Zeile

Vor jedem Druck einer neuen Zeile wird geprüft, ob diese noch in den Bereich aus Oberem und Unterem Rand passt. Wenn nicht, wird ein Seitenumbruch durchgeführt. Manchmal kann das am Ende eines Beleges recht knapp werden. Will man eine Zeile mit Sicherheit noch auf die aktuelle Seite drucken, auch wenn dadurch etwas zu tief gerät, beginnt man Sie mit dem Befehl {r}.

- R - Neuer Randwert

Der Befehl {R} erlaubt das Überschreiben der im Formular definierten Randparemeter.

Bestimmen Sie mit dem ersten Parameter, welchen Randwert Sie neu setzen wollen und geben
Sie den neuen Wert dahinter in mm ein.
Er gelten  O(ben), 
           U(nten), 
           R(echts), 
           L(inks)

Beispiel:  {RL15}    setzt den Linken Rand auf 15mm

- s - Standardschriftgröße

Setzt die im Formular definierte Schriftgröße.

- S - neue Schriftgröße

Geben Sie die gewünschte Schriftgröße in Punkt an, z.B. {S16}. Der Zeilenabstand bleibt unverändert. Wenn Sie diesen ebenfalls ändern wollen, verwenden Sie den Befehl {Z}. Folgendes Beispiel ändert die Schriftgröße auf 8 Punkt und setzt den Zeilenabstand auf den im Formular hinterlegten Wert. Am Ende werden Schriftgröße und Zeilenabstand auf Standard zurückgesetzt:

{S8}{z}

...

{s}{z}

- t - Textpuffer leeren

Mit FaktuLux ist es möglich, Fließtext über mehrere individuelle Formularzeilen zu verteilen. So können in einer Belegposition Preise und Rabatte neben dem Text untereinander aufgeführt werden. Am Ende jeder Position wird wird der restliche Inhalt des Textpuffers gedruckt, bevor eine neue Position begonnen wird. Mit dem Befehl {t} kann man den Puffer gezielt leerdrucken lassen, um danach weitere Zeilen zu drucken. Dabei wird nur für im Resttext vorhandene Zeilen ein Vorschub ausgeführt. Der Befehl muß am Anfang einer Zeile stehen.

- T - Textbaustein

Wiederkehrende Anweisungsblöcke, welche Sie für mehrere Formulare benötigen, können Sie in den Textbausteinen der Formulare ablegen und an gewünschter Stelle in das Formular einbinden. Der Befehl {T<Kennung des Textbausteins>} muss dazu am Zeilenanfang in einer eigene Zeile stehen, welche nicht geduckt wird, d.h. es folgen keine weiteren Befehle in dieser Zeile und es wird kein Zeilenvorschub durchgeführt.

Achten Sie bei der Verwendung von Tabulatoren in Textbausteinen darauf, dass diese in allen Formularen, in die Sie den Textbaustein einbinden, entsprechnend gesetzt sein müssen. Selbiges gilt für Variablen. Auch die Seitenränder können in Formularen unterschiedlich gesetzt sein.

Ein gutes Beispiel für die Verwendung der Textbausteine ist der Briefbogen aus den Beispielformularen. Um diesen nur an einer einzigen Stelle anpassen zu müssen, wurde er als Textbaustein gesetzt und in die Belege eingebunden.

Um den Umgang mit Formatierungen in Textbausteinen zu vereinfachen, werden vor dem Aufruf Schriftart und -größe, Farbe und Formatierung gespeichert und nach der Ausführung zurückgesetzt. Sollten Sie einen Textbaustein jedoch gezielt für Formatierungen einsetzen wollen, müssen Sie diesen mit Parameter X aufrufen, um den Erhalt der Änderung zu erzwingen.

Beispiel: {TSchriftNeu,X}

Innerhalb eines Textbausteins dürfen keine Textbausteine verwendet werden.

- u - Unterstreichen aus

- U - Unterstreichen ein

Beispiel:  {U}Betreff:{u} {V30.Betreff}

- v - Variable Extra

Druckt Variablen wie {V}, jedoch mit zwei Besonderheiten.

Nummeriche Variablen
Der Inhalt Null (0) einer nummerischen Variablen ist nicht gleichbedeutend mit gar keinem Inhalt, denn eine Null erscheint auf dem Ausdruck, wohingegen ohne Inhalt auch keine Null gedruckt wird. Möchten Sie den Druck von Nullwerten auch unterdrücken, um z.B. die Übersicht zu verbessern, sprechen Sie die Variable mit einem kleinen v an.
Memo
In der Regel werden bei einem Fließtext nach dem Druck der ersten Zeile die restlichen Zeilen aus dem Textpuffer gedruckt. Möchte man hingegen die weiteren Zeilen in die folgenden Zeilen des Formulars integrieren, ruft man die Variable mit dem kleinen v ab. Weitere Zeilen werden dann, sofern vorhanden, mit dem Formular in jeder Zeile mit Zeilenvorschub gedruckt. Am Bereichsende erfolgt ein Restdruck. Möchten Sie den Restdruck an einer festgelegten Stelle im Formular durchführen, verwenden Sie den Befehl {t}. (Da erste nach der Interpretation einer Zeile bekannt ist, ob diese einen Zeilenvorschub durchführt, kann entgegen früherer Versionen die Fortsetzung des Fließtextes erst nach dem Druck einer Zeile erfolgen)

- V - Variable

Eine Variable wird mit {V<Tabellen-Nr>.<Feld-Name>} angegeben. Bei der Standardtabelle (siehe Bereiche der einzelnen Formular-Typen) kann die Angabe der Tabellen-Nr. entfallen (V.<Feld-Name>). Die Standardtabelle kann je nach Druckbereich variieren (z.B. Belege: Beleg-Kopf und -Fuß=30, Positionen=31).

Feldinhalte können auch zur Speicherung und weiteren Verarbeitung an Variablen übergeben werden. Details lesen Sie in der Variablen-Zuweisung.

bei Fließkomma-Variablen (Float):
,<Nachkomma> Anzahl der Nachkommastellen bei Float-Werten (Default=2)
             Hat der Wert mehr Nachkommastellen, werden diese kaufmännisch gerundet.
             Dieser Parameter muss, wenn er gesetzt wird, immer als erstes folgen!
             M - Nachkommastellen für Mengen
             R - Nachkommastellen für Rabatte
             P - Nachkommastellen Preis
             W - Nachkommastellen der Währung
    weitere Parameter zur genaueren Einschränkung
     ,0      Überflüssige Nachkommastellen entfernen
             Hat der Wert keine Nachkommastellen, fällt auch das Komma weg
     ,<Wert> Überflüssige Nachkommastellen bis auf <Wert> entfernen
             Dieser Wert kann auch größer als der erste sein, wodurch Nullen angehängt würden.
             Beispiele: Der Variablenwert für X betrage 1,237
             {V.X}      ->  1,24  (gerundet auf Standard 2 Stellen)
             {V.X,1}    ->  1,2
             {V.X,2,3}  ->  1,240
     ,I      Wird einem Fließkommawert als zweites ein 'I' angehängt, wird dieser als Integerwert
             behandelt. Dabei werden Nachkommastellen nicht einfach abgeschnitten, sondern der Wert
             wird kaufmännisch gerundet. Der erste Wert gibt die Mindestlänge an.
             Dies ist hilfreich bei der Verwendung der Puffer-Variablen (VS.41} bis {VS.45) und
             {Vr.0} bis {Vr.9}.
             Beispiel:    {VS.41=5} -> {VS.41,2,I} = 05
,-           Setzt bei negativen Fließkommawerten das Minuszeichen ans Ende
,O           Darstellung ohne Tausenderpunkt (Standard ist mit Tausenderpunkten)

bei ganzzahligen Variablen (Integer):
,<Vorkomma>  Setzt Nullen vor einen Integerwert, wenn dieser nicht die geforderte Zahl an
             Stellen hat.
,R           Darstellung mit Tausenderpunkt (Standard ist ohne Tausenderpunkte)
,+<Stichwort> Nur anwendbar auf Felder, die eine AdressID enthalten.
             Weist der Adresse das angegebene Stichwort zu. Wird das Stichwort nicht
             gefunden, wird es angelegt. Wird kein Stichwort angegeben, wird der Inhalt
             der Variable {Vs.9} als Stichwort verwendet. So können Sie das Stichwort
             zur Laufzeit setzen und verändern. Außerdem können Sie den Inhalt von
             Feldern und anderer Variablen zur Erstellung des Stichworte verwenden.
             Am Ende der Ausführung erhalten Sie eine Meldung über die Anzahl der
             neu zugewiesenen und bereits verlinkten Stichwörter.
,BG          Gibt zur Beleg-Art die Beleg-Gruppe zurück
             Die Übernahme von Belegen wird mittels Beleg-Art und Beleg-ID gespeichert.
             Für den Zugriff auf einen Beleg benötigt man hingegen die Beleg-Gruppe.
             Jede nummerische Variable im Bereich der Beleg-Arten wird in den Wert der
             zugehörigen Gruppe gewandelt.

bei Text-Feldern:
,#<x>        Gibt nach Namenskonvention einen Teil des Namen zurück
             (#N-Nachname, #V-Vorname, #T-Titel, #Z-Zusatz)
,B           Aktuelle Briefanrede aus TAnreden mit Feldinhalt füllen, wenn vorhanden,
             sonst Leerstring
,G           Wandelt Klein- in Großbuchstaben um
,U           Feldinhalt nach Namenskonvention umstellen (#N, #V, #T, #Z)
,=           Feldlänge auf fixe Anzahl Zeichen setzen
             Für nicht proportionale Schriften bei reiner Textausgabe, z.B. in
             Dateien kann es hilfreich sein, jedes Feld auf eine fixe Länge zu
             setzen. Dem Gleichheitszeichen folgen der Positionscode (L/l oder R/r),
             das einzufügenden Zeichen und die gewünschte Länge. Ist der Inhalt
             länger als angegeben und das Positionscode-Zeichen ein Großbuchstabe,
             wird am entsprechenden Ende abgetrennt.
             Beispiele: ,=L012  Füllt das Feld links mit Nullen bis auf eine Länge von 12
                        ,=R 4   Hängt Leerzeichen bis zu einer Länge von 4 Zeichen an
                        ,=l 5   Füllt das Feld links mit Leerzeichen bis zu einer mindest-
                                länge von 5 Zeichen, ist das Feld länger, wird es aber nicht
                                gekürzt.

bei Text- und Memo-Feldern:
,<Breite>    Beim Druck von String-Feldern:
             Die Breite wird in Millimetern angegeben. Ist der Feldinhalt breiter, wird er
             beschnitten und es werden zwei Punkte angehangen. Außer einer festen Breite
             können auch eine X-Position oder ein Tabulator als Breite angegeben werden.
             Das erleichtert das Verschieben von Spalten in Listen.
             Beispiel: {V10.Strasse,x2-1}  druckt den Straßennamen bis einen Millimeter
                                           vor Tabstop x2.
             Beim Export von String-Feldern:
             Es wird immer der gesamte Inhalt des Feldes exportiert. Eine angegebene Länge
             wird ignoriert.

             Beim Druck von Memo-Feldern:
             Steht vor der Breite ein X (,X<Breite>) wird nur die erste Zeile des Textes
             gedruckt. Das kann für Listen sehr hilfreich sein, wenn man z.B. nicht die
             volle Artikelbezeichnung benötigt. Allerdings wird nur eine Zeile gedruckt.
             Passt der erste Absatz des Textes nicht in die gewählte Druckbreite, wird der
             Druck nicht in der nächsten Zeile fortgesetzt. Es werden auch nur Wörter gedruckt,
             die vollständig in die Druckbreite passen. Der Text wird nicht mitten im Wort
             abgeschnitten und es werden auch keine Punkte angehangen.

bei Memo-Feldern:
,A<x>        Bei Fließtextfeldern ist es möglich, nur einen bestimmten Absatz auszuwählen.
             Ein Absatz endet mit einem Zeilenumbruch und kann im Druck auch mehrere Zeilen
             umfassen. Über eine Bereichskennung können auch mehrere Absätze ausgewäht werden.
             Die FaktuLux-Bereichskennungen sind ^A (nur auf Angebote drucken), ^T (nur auf
             Auftragstasche drucken), ^L (nur auf Lieferscheine drucken), ^R (auf alle Belege
             außer Angebote drucken) und ^I (nur für internen Gebrauch).
             Sie können aber auch beliebige eigene Bereiche definieren.
             Achten Sie jedoch darauf nur Buchstaben zu verwenden, da Ziffern die Nummer des
             Absatzes definieren. Damit frei definierte Bereiche (nicht ^ATLRI) bei der Übernahme
             in Belege gelöscht werden, muss im Bereich [System] der Schalter ArtikelTextPlus=1
             in der FaktuLux.Ini eingetragen werden!
             x=0    Gesamter Text, der keiner Bereichseinschränkung unterliegt
             x=1-9  Entsprechender Absatz 1 - 9
             x=A-Z  Nur Text der angegebenen Bereichskennung
             Beispiele: {V20.Bezeichnung,50,AA} druckt nur den mit ^A markierten Teiltext
                        der Artikelbezeichnung, mehrzeilig und mit einer Breite von 50mm.
                        {V20.Bezeichnung,120,A1} druckt nur den ersten Absatz der
                        Artikelbezeichnung, mehrzeilig und mit einer Breite von 120mm.
             Zur weiteren Verarbeitung können Memo-Felder auch an temporäre String-Variablen
             übergeben werden, z.B. {Vs.0=V20.Bezeichnung,AA}.
,I           Druckt auch die mit ^I gekennzeichneten Bereiche einer Belegposition.

Beim Export von Memo-Feldern:
             Es wird stets nur der erste Absatz exportiert, d.h. der Inhalt der Textvariablen
             bis zum ersten Zeilenumbruch. Hier bestimmt die Breite die Anzahl der Zeichen,
             die vom Feldinhalt maximal in die Datei geschrieben werden. Wird keine Länge
             angegeben, wird der komplette erste Absatz exportiert. Alle übrigen Parameter
             werden ignoriert.

,#           Zum Export des gesamten Inhaltes eines Memo-Feldes müssen Sie die Zeilenumbrüche
             durch andere Zeichen ersetzen. Die geschieht mit dem Parameter #. Zeilenumbrüche
             werden durch alle auf die # folgenden Zeichen ersetzt. Um beispielsweise die
             Zeilenumbrüche in einer Artikelbezeichnung durch ", " zu ersetzen, verwenden Sie
             den Befehl {V20.Bezeichnung,#, }.

             Werden hinter dem # keine Ersetzungszeichen angeben, wird der HTML-Tag <br />
             verwendet. Gleichzeitig werden die Formatierungsbefehle für Fett, Kursiv und
             Unterstrichen durch HTML-Tags ersetzt und Ä, Ö, Ü, ä, ö, ü, ß und viele
             Sonderzeichen nach HTML konvertiert. Sollen die spitzen Klammern < und >
             nicht konvertiert werden, da sich im Text bereits HTML-Befehle befinden,
             verwenden Sie einen Doppel-Hashtag {V20.Bezeichnung,##}.

             Sollen ausgewählte Absätze exportiert werden, muss der Wert zuvor an eine temporäre
             String-Variable übergeben werden. Auch in diesen können Sie mittels Parameter #
             die Zeilenumbrüche beim Export ersetzen.

bei temporären String-Variablen:
,A           Gibt die Anzahl der Absätze zurück, d.h. wieviele Zeilenumbrüche sich im Text
             befinden +1.

Datumsfelder:
,X           Druckt das Datum in der Langform mit ausgeschriebenem Monat
,W           Gibt den Wochentag des Datums zurück, 1=Montag .. 7=Sonntag

Allgemein:
,L           Gibt die Länge des Feldinhaltes in Zeichen zurück
,S           Gibt die Druckbreite des Feldes in der aktuellen Schrift in Millimetern zurück
             Hilfreich in Bedingungen für eine optionale Positionierung oder einen Zeilenumbruch

Lokalisation

Per Lokalisation kann ein bestimmter Datensatz in einer Auswahl-Tabelle angewählt werden. Zum Druck einer Adresse benötigen Sie beispielsweise die Anrede aus den Anredeformen. Im ersten Schritt lokalisieren sie die zur Adresse gehörige Anredeform mit {VL51,10.AnredeIDa}, wobei 51 die Nummer der Tabelle der Anredeformen ist. Danach drucken Sie die zugehörige Anrede mit {V51.Anrede}. Ist das Feld AnredeIDa der Adresse leer, ist das Ergebnis der Lokalisation negativ und zu allen Aufrufen von Feldern der Tabelle Anredeformen werden Leerwerte zurückgegeben. Hat das Feld hingegen einen Inhalt, erhalten Sie eine Fehlermeldung und die weitere Verarbeitung des Formulars wird abgebrochen, wenn dieser Inhalt in der Tabelle der Anredeformen nicht gefunden werden kann. Möchten Sie, dass die Verarbeitung kommentarlos fortgeführt wird, müssen Sie für die Lokalisation das L im Befehl klein schreiben {Vl51,10.AnredeIDa}.

VL<X>,<Y>.<Field>
             Lokalisiert Tabelle <X> auf <Y>.<Field>
             Kann eine Lokalisation nicht erfolgreich durchgeführt werden, führt ein
             großes 'L' zu einem Druckabbruch mit Fehlermeldung. Bei einem kleinen
             'l' wird der Druck kommentarlos fortgesetzt.

Ein Sonderfall ist die Lokalisation von einfachen Eingabelisten. Diese bestehen nur aus einer Kennung und einer Bezeichnung und finden z.B. Verwendung bei Sprache, Branche, Tour oder dem Fibu-Konto. All diese Listen werden über die Tabelle 70 dargestellt. Jeder Liste ist innerhalb der Tabelle ein eigener Wert zugeordnet, der bei der Lokalisation mit übergeben werden muss. Jede Lokalisation in den Eingabelisten macht eine vorhergehende Eingabelisten-Lokalisation ungültig. Deshalb sollte sie immer unmittelbar vor dem Zugriff auf die Bezeichnung mittels {V70.Bezeichnung} erfolgen.

VLE<X>,<Y>.<Field>
             Lokalisiert Tabelle 70 auf Liste <X> und Kennung <Y>.<Field>
             Kann eine Lokalisation nicht erfolgreich durchgeführt werden, führt ein
             großes 'L' zu einem Druckabbruch mit Fehlermeldung. Bei einem kleinen
             'l' wird der Druck kommentarlos fortgesetzt.

Sondervariablen

Es gibt allgemeine Sondervariablen, die in jedem Formular verwendet werden können, und solche, die nur in bestimmten Formular-Typen Verwendung finden.

VS.<Wert>    Sondervariable

Zusätzliche gibt es noch Sondervariablen als Zwischenspeicher und für Berechnungen, über die Sie zusammen mit den Formular-Variablen weitere Informationen in der Variablen-Zuweisung erhalten.

Ini-Variablen

Um die Steuerung von Ausdrucken und Exporten in FaktuLux so flexibel wie möglich zu gestalten, können auch Variablen in Ini-Dateien geschrieben und aus diesen gelesen werden. So lassen sich Werte aus verschiedenen Auswertungen in einem Ausdruck zusammenfassen oder Daten von anderen Programmen in FaktuLux-Ausgaben übernehmen. Dabei stehen zwei unterschiedliche Ini-Dateien zur Verfügung: Eine globale mit dem Namen Formulare.ini und eine formularspezifische. Letztere trägt als Namen die Formularkennung gefolgt von der Endung .ini. Abgelegt bzw. gesucht werden die Ini-Dateien im Verzeichnis Formulare unterhalb des Datenverzeichnisses des aktuellen Hauptmandanten. Der Bereich für die Variablen muss mit [Formular] benannt werden. Verzeichnis, Dateiname und Bereichskennung lassen sich aber auch ändern. Doch zuerst wollen wir auf die Definition der Variablen eingehen.

Beispiel für den Inhalt einer Ini-Datei:

[Formular]
Kunde=Muster GmbH
PaketID=1234567890X

Groß-/Kleinschreibung spielt bei der Benennung und dem Abruf der Variablen keine Rolle.

Der Zugriff erfolgt über den Variablen-Befehl. Als Kennbuchstabe dient das F, wobei ein kleines f die Variable aus der Formulare.ini zu lesen versucht und ein großes F aus der formularspezifischen Ini-Datei. Ist die Variable nicht vorhanden, ist das Ergebnis leer.

Möchten Sie eine Fehlermeldung erhalten, wenn eine Variable nicht gefunden wurde oder ihr Inhalt leer ist, können Sie über + und - die Meldung ein- bzw. ausschalten. Dabei ist es unerheblich, ob Sie das F groß oder klein schreiben.

{VF.+}   Schaltet die Meldung bei fehlender Variable ein
{VF.-}   Schaltet die Meldung bei fehlender Variable aus

Möchten Sie die Meldung nur für einzelne Variablen ein- bzw ausschalten, setzen Sie das + oder - unmittelbar vor den Variablenbezeichner.

{Vf.+PaketID}           Meldet eine fehlende Paket-ID, auch wenn die Meldungen abgeschaltet sind
{VF.-Ansprechpartner}   Übergeht trotz aktivierter Medungen einen fehlenden Ansprechpartner

Um den Wert einer Variable als Zahlwert in einer Bedingung verwenden zu können, müssen Sie diesen zuvor an eine Zahlen-Variable übergeben, da die Ini-Variablen wie Textfelder behandelt werden.

{Vi.0=VF.Anzahl}
[{Vi.0}>1
Die Sendung besteht aus {VF.Anzahl} Paketen.
]

Sie können Variablen aber nicht nur aus den Ini-Dateien lesen, sondern auch in diese scheiben. Verwenden Sie für die Zuweisung das Gleichheitszeichen, wie bei der Variablen-Zuweisung von Textvariablen.

{Vf.Belegnummer=V30.GruppeID+-+V30.ID}  Schreibt die Belegnummer mit Gruppe in die Variable
                                        Belegnummer in die Formulare.ini

Und jetzt wird's kompliziert. Sie können auch den Variablenbezeichner dynamisch per Stringkonstrukt definieren. Achten Sie dabei aber auf die gültigen Zeichen für Bezeichner in Ini-Dateien.

{VF.V30.GruppeID+V30.ID=V1.ID}  Schreibt die Benutzer-ID in eine Variable, welche nach der Beleggruppe und
                                der Belegnummer benannt ist, in die formularspezifische Ini-Datei.

Wenn Sie solche Kontrukte nutzen, müssen Sie die resultierende Ini-Datei regelmäßig löschen oder archivieren, da der Zugriff mit steigendem Inhalt immer langsamer wird.

Um die Flexibilität dieser Funktion noch weiter zu erhöhen, erlaubt Ihnen FaktuLux das Ändern von Verzeichnissen, Ini-Dateinamen und Bereichskennungen. Somit können Sie in beliebige Ini-Dateien schreiben oder aus ihnen lesen. Die Zuweisung erfolgt über den Variablenbefehl mittels Doppelpunkt. Verwenden Sie ein kleines oder ein großes F, jenachdem für welche Ini-Datei Sie den Wert ändern möchten. Auch hier können Sie sowohl die Kennung als auch den Inhalt über einen Stringkonstrukt definieren. Als Kennung sind jedoch nur V, D und B zulässig.

{Vf:V=<Text>}  Ändert das Verzeichnis für die Ini-Datei
{Vf:D=<Text>}  Ändert den Namen der Ini-Datei, die Dateierweiterung (.ini) wird
               nicht mit angegeben
{Vf:B=<Text>}  Ändert die Bereichskennung der Ini-Datei, aus der gelesen, bzw.
               in die geschrieben wird, die Klammern ([]) werden nicht mit angegeben.

Beispiel: Die möchten im Verzeichnis "Versand" auf dem Laufwerk X: eine Ini-Datei anlegen, deren Name aus Beleg-Gruppe und Beleg-Nummer besteht. In diese möchten Sie in Bereich [Paket] die Belegnummer und die Anschrift der zum Beleg gehörigen Adresse hinterlegen. Das {n} verhindert, dass jedes mal eine Leerzeile exportiert oder zum Drucker geschickt wird.

{n}{VF:V=X:\Versand}{VF:D=V30.GruppeID+V30.ID}{VF:B=Paket}
{n}{VL49,30.AdresseID}   //Adresse zum Beleg lokalisieren
{n}{VF.Auftrag=V30.ID}
{n}{VF.Anschrift1=V49.Name1,U}
{n}{VF.Anschrift2=V49.Name2}
{n}{VF.Strasse=V49.Strasse}
{n}{VF.Land=V49.LandIDa}
{n}{VF.Plz=V49.Plz}
{n}{VF.Ort=V49.Ort}

Über diese mächtige Funktion können Sie Daten an andere Programme übergeben oder aus diesen in die Formulare von FaktuLux übernehmen. In einem Netzwerk müssen Sie beachten, dass sich verschiedene Arbeitsstationen beim Lesen und Schreiben nicht in die Quere kommen.

Extra-Felder

Auf Extra-Felder greifen Sie wie auf Tabellenfelder mittels ihrer Kennung mit vorangestellter Raute # zu. Wollen Sie beispielsweise ein Extra-Feld mit der Kennung WERBEMAIL einer Adresse drucken, lautet der Befehl {V10.#WERBEMAIL}. Dabei akzeptiert FaktuLux jede Schreibweise mit Groß- und Kleinbuchstaben. Wurde das Feld einer Adresse nicht zugewiesen, wird ein Leerfeld zurückgeliefert.

Über die Feldauswahl in den Formularen können Sie auch Extra-Felder direkt aus der Liste der definierten Felder auswählen.

Barcode-Druck

VB<TN>.<FN>  Variablenwert als Barcode drucken
             Bei den anschließenden Werten, die durch Semikolon zu trennen
             sind, wird bei fehlendem Wert oder Null der Standardwert
             angenommen.
Für den Barcode-Druck gelten folgende Werte, die mit Semikolon zu trennen sind:
   x<Wert>   Tab-Wert (x0 = Linker Rand)
   xx        Rechter Rand
   y         Oberer Rand
   yy        Unterer Rand
   X<Wert>   X-Wert (absolut oder mit +/- relativ von akt. Position)
   Y<Wert>   Y-Wert (absolut oder mit +/- relativ von akt. Position)
   C<Nr>     Art des Barcode (siehe Tabelle am Ende, Standard 6 = Code128 Auto)
   H<Wert>   Höhe in Millimetern (Standard 5mm)
   W<Wert>   Breite des schmalsten Balken in Millimetern (Standard 0,25mm)
   A<Winkel> Drehwinkel beim Druck (Standard 0)
   F<Text>   Text, der vor den Variablenwert gesetzt werden soll
             Möchte man z.B. die Adressnummer eines Verteiler-Lieferscheines als
             Barcode drucken, so setzt man die Kennungen für "interner Barcode"
             und "Adresse" einfach davor: {VB90.AdresseID;F#1}
             Für die VerteilerID oder die AnsprechpartnerID lauten die Befehle
             {VB90.ID;F#V} und {VB90.AnsprechpartnerID;F#A}.
   B<Text>   Text, der nach den Variablenwert gesetzt werden soll

Blocktext

Der Blocktext von PrintLux besteht aus zwei Spalten, der Beschriftung und dem Inhalt.
Als Anhang an die Variable wird durch Komma getrennt nicht die Textbreite sondern die
Positionierung und Formatierung für die zweite Spalte übergeben. Diese müssen in
geschweiften Klammern stehen. Vor und nach dem Text der zweiten Spalte ist die
Formatierung aktiv, die zu Anfang der Variable gesetzt war. Sie brauchen also
Formatierungen, die sie für die zweite Spalte setzen, nach dem Blocktext nicht zu
revidieren, müssen hingegen solche, die nur für die erste Spalte (die Beschriftungen)
gelten, doppelt umkehren.
             Beispiel:    {B}{V31.Bezeichnung,{x4}{b}{I}}{b}
In Formularen des Typs 1-Belege wird für die Druck-Kennung der gewählte Belegtyp verwendet,
in allen anderen Formular-Typen wird nur der erste Block (zumeißt "Objekt") gedruckt, es sei
denn, unmittelbar nach dem Komma wird durch einen Wert ein anderer Belegtyp vorgegeben.
             Beispiel:    {B}{V31.Bezeichnung,1{x4}{b}{I}}{b}
                          wird gedruckt wie auf einem Angebot
Es gelten:   1 - Angebot, 
             2 - Auftragsbestätigung
             3 - Tasche
             4 - Lieferschein
             5 - Rechnung/Gutschrift
             6 - Preisanfrage
             7 - Bestellung/Stornierung
             A - alles drucken
             B - nur 1. Block
             BB- nur 1. Block ohne Beschriftung
             Z - nur 1. Zeile
             ZB- nur 1. Zeile ohne Beschriftung

- w - Wiederholungszeile

Der Befehl muß am Zeilenanfang stehen. Eine Wiederholungszeile kann überall im Formular verwendet werden. Die Zeile wird mit allen Datensätzen der hinter dem 'w' angegebenen Tabelle interpretiert. Das kann sowohl ein Druck, als auch eine Summierung sein.

Folgendes Beispiel zählt zuerst die auf der Auftragsbestätigung zu druckenden Termine. 

  {n}{Vi.1=0}
  {w34}{n}{Vi.1=+V34.DruckAB}  //Boolsche Variablen ergeben FALSE=0, TRUE=1

In Abhängigkeit davon kann dann die Überschrift gedruckt werden. In eckige Klammern
eingeschlossen kann hinter der Tabellennummer eine Bedingung für
das Ausführen mit dem aktuellen Datensatz erfolgen. Eine optionale Else-Anweisung
kann mit Halfpipe angehängt werden.

  [{Vi.1}>0
    Bitte nehmen Sie folgende Termine zur Kenntnis:
    {w34[{V34.DruckAB}=1]}{V34.Datum} {V34.Bezeichnung}|//Termin nicht drucken
  ]

Ein Beispiel für eine Beschriftung, die nur vor die erste Position gedruckt wird.
Dabei wird zuerst der Beschriftungstext in eine Textvariable geladen und nach der
Ausgabe der ersten Zeile zurückgesetzt.

  {n}{Vs.1=Material:}
  {w35}{Vs.1}{xD1}{V35.Menge}{x2}{V35.Bezeichnung}{Vs.1=}

Die Tabellennummer wird zur Standard-Tabelle.

Reicht eine Zeile für die Definition nicht aus, kann auch ein Textbaustein für die
Verarbeitung der Wiederholungszeile verwendet werden. Geben Sie dazu den Namen
mit Komma getrennt hinter der Tabellennummer an.

Beispiel: {w34,Termine}

- W - Bereichswechsel

Der Befehl muß am Zeilenanfang stehen.

Folgt in Listen-Formularen hinter dem W eine Nummer, so wird diese Datenquelle als Unterliste abgearbeitet. Die Unterlisten müssen nach den Positionen als vierter Bereich folgen und jede besteht wiederum aus drei Bereichen (Vorspann, Positionen und Nachspann). So kann man beispielsweise in einer Adressenliste zu jeder Adresse alle Ansprechpartner oder Zusatzadressen drucken.

Der Fax-Druck von Belegen kann in eine Datei erfolgen und über folgenden Parameter kann diese in ein Verzeichnis zur Weiterverarbeitung verschoben und zusätzlich Informationen können angehängt oder in einer separaten Datei abgelegt werden.

WX<Quelle>;<Ziel>  PostScript-Datei Konvertierung (muß als letzter Bereich stehen)
                   Richten Sie einen PostScript-Drucker so ein, dass der Ausdruck
                   in eine Datei erfolgt. Geben Sie diese Datei samt Verzeichnis
                   als "Quelle" an. Nach dem Ausdruck wird diese Datei geöffnet, in
                   eine Datei mit zufälligem Dateinamen und der Endung "ps" in das in
                   "Ziel" angegebene Verzeichnis kopiert und der Bereich als Text
                   angehängen. Anschließend wird die Datei "Quelle" gelöscht.
                   Auf einem Server kann dann die Weiterverarbeitung der Zieldatei
                   z.B. als Fax erfolgen.
WX<Quelle>;<Ziel>;<Erweiterung>  wird hinter dem Zielverzeichnis eine Dateierweiterung
                   angegeben, wird der Bereich nicht an die Zieldatei angehängt, sondern
                   es wird eine weitere Datei mit gleichem Namen und der angegebenen Endung
                   erzeugt, in die der Bereich exportiert wird.

Für das automatische Versenden von eMails wird der Text in einer Datei abgelegt. Das Verzeichnis wird im Bereich [AutoMail] der FaktuLux.ini definiert, der Dateiname ergibt sich aus der DruckJobID, die über die Variable {Vx} abgerufen werden kann.

WX<Erweiterung>    Wird als Dateierweiterung für die Ausgabedatei verwendet.
WX<Erweiterung>;<Erweiterung>  Wird eine zweite Dateierweiterung angegeben, wird der 
                   Bereich nicht an die Ausgabedatei angehängt, sondern es wird eine weitere
                   Datei mit der angegebenen Endung erzeugt, in die der Bereich exportiert
                   wird.

- x - gehe zu Tab

Der Befehl {x} ruft die im Formular definierten Tabulatoren ab. Die Tablulatoren werden in mm vom Linken Rand definiert und verschieben sich auch mit diesem.

x<Wert>      Im Formular lassen sich 10-20 Tabulatorpositionen speichern, die
             kurz über {x1} bis {x10}/{x20} abgerufen werden können.
x0           Linker Rand
xx           Rechter Rand (+/- möglich)
             Wählen Sie den rechten Rand, wird automatisch die Ausrichtung
             rechtsbündig gesetzt. Gruppen von Text und Variablen müssen dann in
             umgekehrter Reihenfolge angegeben werden.
xW           Spaltenbreiten-Tabulator
             Folgt auf das x ein W, wird der Tabulatorwert als Spaltenbreite zum
             vorhergehenden Tabulator gesetzt; hilfreich bei Listen, z.B.
             {xW3} geht an die Position um Tabulatorwert 3 weiter Rechts von der
             zuletzt gesetzte X-Position. Auch die Positionsangabe wird vom vorhergehenden
             Tabulator übernommen. Eine abweichende Positionsangabe muss nach dem W folgen
             (Richtig xWD8, Falsch xDW8).
Tabulatorwerten kann ein Korrekturwert in mm folgen, z.B. {x12-3,2}.
Positionsangaben sind möglich, z.B. {xD8} für einen Dezimaltabulator.

Beispiel:    Sie möchten im Briefkopf Ort und Lang-Datum vom rechten Rand drucken.
             {xx}{V30.Belegdatum,X}Koblenz, 
             Ergebnis:                          Koblenz, 31. Oktober 2012
             Vergessen Sie das Leerzeichen hinter dem Komma nicht! 

(außer DirectPrint)

- X - gehe zu X

Das groß geschriebene X positioniert den Spaltenzeiger für den Druck relativ zum linken Papierrand, bzw. Etikettenrand, unabhängig vom gesetzten Linken Rand.

XM           gehe zu gemerktem X
XL(eft),R(ight),C(enter),D(ecimal)
             Positionsangabe für linksbündig, rechtsbündig, zentriert oder
             einen Dezimaltabulator, bei dem der Vorkommabereich links und
             der Rest rechts von der X-Position gedruckt werden.
X+/-<Wert>   von aktueller Position aus rechts/links

Um Text und Variablen von rechts zu drucken, müssen die Einheiten von Text
und Variablen in umgekehrter Reihenfolge angegeben werden, da sich der
Spaltenzeiger beim rechtsbündigen Druck immer weiter nach links verschiebt.

- y - gehe zu Oberem Rand

Der Befehl {y} setzt den Zeilenzeiger auf die im Formular als Oberer Rand definierte Position. Gleichzeitig wird der Spaltenzeiger X auf den Linken Rand gesetzt. Verschiebungen mittels +/- sind zulässig. Der Befehl {yy} bezieht sich auf den Unteren Rand.

Beispiel:  {y+10}   positioniert 10mm unterhalb des Oberen Randes

(außer DirectPrint)

- Y - gehe zu Y

Das groß geschriebene Y positioniert den Zeilenzeiger für den Druck relativ zum oberen Papierrand, bzw. Etikettenrand, unabhängig vom gesetzten Oberen Rand.

YM         gehe zu gemerktem Y
Y<Wert>    Absolute Y-Position in mm von oben
Y+/-<Wert> von aktueller Position aus runter/hoch
           wird ein Korrekturwert am Anfang eines Bereiches eingegeben und wurde
           noch kein Text gedruckt, wird dieser nach einem Seitenwechsel wiederhergestellt
YM<Wert>   Mindestens absolute Y-Position
           Wird nur gesetzt, wenn sich der aktuelle Zeilenzeiger oberhalb dieses Wertes befindet.

Beispiel:  Sie wollen den Betreff eines Briefes so tief drucken, dass er nicht im Fenster eines
           Umschlages zu sehen ist.
           {YM100}{V30.Betreff}
           Nur, wenn die definierte Position noch nicht erreicht ist, wird zu dieser vorgerückt.

- z - Standard-Zeilenabstand des Formulars

Setzt den im Formular hinterlegten Zeilenabstand, bezogen auf die aktuelle Schriftgröße. Wenn im Formular kein anderer Wert definiert ist, wird als Abstand das 1,1-fache der Höhe der aktuellen Schrift verwendet.

Der Befehl {zz} setzt den zu Begin der Ausgabe gesetzten Zeilenabstand, ohne auf die Standardschrift wechseln zu müssen.

- Z - Zeilenabstand

Der Befehl {Z} setzt den Vorschub, der bei jedem Zeilenumbruch nach unten durchgeführt wird. Der Zeilenabstand bleibt auch nach Schriftgrößenwechseln unverändert und muss bei Bedarf mittels {Z} angepasst werden. Geben Sie als Parameter den Faktor für die Abhängigkeit des Zeilenabstandes von der Zeichenhöhe an.

Beispiel:   {Z1,5}   setzt einen anderthalbfachen Zeilenabstand

Achtung: Der Zeilenumbruch erfolgt immer mit dem am Ende einer Formularzeile geltenden Zeilenabstand. Haben Sie für einen Ausgabebereich den Zeilenabstand verändert, sollten sie diesen frühestens in der nächsten Formularzeile zurücksetzen. Gerade bei der Ausgabe von Fließtexten haben sonst die ersten beiden Zeilen einen anderen Abstand als die übrigen.

- @ - Druckerwechsel nach Seite

Der Befehl unterdrückt den Zeilenvorschub. Ein einzelnes {@} ohne weitere Parameter schließt beim nächsten Seitenwechsel den Druckjob ab und startet mit geänderter Ausrichtung (Hoch-/Querformat) neu.

@<Drucker>   Hinter dem @ folgt die Druckernummer 1-8. PDF-Drucker sind mit äußerster Vorsicht
             zu verwenden. Fax-Drucker sind derzeit nicht zugelassen.
             Wenn der angegebene Drucker dem aktuellen Drucker entspricht, wird die Funktion
             ignoriert, es sei denn, es wird explizit definiert, z.B. über {@2,2}.
             Beim nächsten Seitenwechsel wird der Druckjob abgeschlossen und mit dem neuen
             Drucker fortgesetzt.
,<Drucker>   Der Druckerwechsel wird nur ausgeführt, wenn der angegebene Drucker aktuell
             gewählt ist
             Beispiel:  {@2,1}     Wechselt auf Drucker 2, wenn aktuell auf Drucker 1 
                                   gedruckt wird
             Wollen Sie den Drucker wechseln und gleichzeitig die Ausrichtung ändern,
             kombinieren Sie die Befehle, z.B. {@}{@3}.
@+           Folgt auf das @ ein Pluszeichen, bleibt nach der Ausgabe der Druckjob geöffnet
             und es erfolgt nur einen Seitenvorschub. So kann der nächste Druck im gleichen
             Job verarbeitet werden und so recht einfach z.B. ins gleiche Fax oder die
             gleiche PDF-Datei ausgegeben werden. Wird ein Druckjob ohne diesen Befehl
             beendet, ein anderer Drucker gewählt oder ein Export durchgeführt, wird
             der Druckjob abgeschlossen. Ebenso kann der Druckjob über den Menüpunkt
             Datei/Druckjob beenden im Hauptfenster abgeschlossen werden, der nur
             sichtbar ist, wenn auch ein Druckjob aktiv ist. Optional kann der Ausdruck
             über diesen Menüpunkt auch abgebrochen werden.
@-           Beendet den Druckjob nach der Ausgabe.
             Standardmäßig ist bei jedem neuen Druckjob der Schalter zum Beenden des
             Jobs gesetzt. Der Befehl {@+} muß also in jedem Job neu gesetzt werden,
             um diesen am Ende nicht abzuschließen. Jedoch kann ein während des Jobs
             gesetztes {@+} durch ein späteres {@-} wieder aufgehoben werden. Entscheidend
             ist der letzte Befehl vor dem Ende des Druckjobs.
             Folgt auf ein {@+} in einem späteren Job ein {a} zum sofortigen Abbruch
             des Druckjobs, so wird der gesamt Job gecancelt, d.h. alles was sich im
             Spooler angesammelt hat wird nicht mehr gedruckt.
             Der Befehl beendet auch einen Druckjob, der vom System permanent geöffnet
             gehalten wird, z.B. beim Druck einer Reihe von Belegen.
             (Funktionen zum Erhalt der Puffervariablen sind geplant)
Weitere Verwendung des Klammeraffen {@}
Innerhalb einer Bedingung gesetzt, liefert das @ die Nummer des aktuellen Druckers zurück.
[{@}=5 (Nicht zu verwechseln mit einer Fragebedingung [@ !!)
Daten-Import
Beim Import von Daten repräsentiert das @ die jeweilige Spalte. Es kann mittels {@} in den Puffer geschrieben, einer Variablen gleichgesetzt oder für Bedingungen verwendet werden. (Für Details siehe gesondertes Kapitel Import über Formular)

- # - Kalenderblatt

Der Befehl {#} druckt das gesamte Kalenderblatt. Im zugehörigen Druckdialog wählen Sie den genauen Umfang und die Detailgenauigkeit.

 x<Wert>   Tab-Wert (x0 = Linker Rand)
 xx        Rechter Rand
 y         Oberer Rand 
 yy        Unterer Rand
 X<Wert>   X-Wert (absolut oder mit +/- relativ von akt. Position)
 Y<Wert>   Y-Wert (absolut oder mit +/- relativ von akt. Position)
 J<Wert>   Jahr (Standard aktuelles Jahr) 
 M<Wert>   1. Monat (Standard 1) 
 A<Wert>   Anzahl der Monate (Standard 12) 
 Z<Wert>   Anzahl der Monate in einer Zeile (Standard 12) 
 K         Kalenderwochen drucken
 W<Wert>   Breite des Kalenders (Standard Seitenbreite)
 D<Datum>  Bestimmtes Datum markieren
 #<Wert>   Form der Markierung 0=Kreis (default), 1=Rechteck, 2=Kreis umrandet, 3=Rechteck umrandet
 F         Schriftart (Standard Formularschriftart)
Weitere Verwendung der Raute {#}
Daten-Import:
Beim Import von Daten repräsentiert die # den im Druckpuffer befindlichen Text.
WebShop-Export:
Beim Export von Artikeln und Warengruppen für den WebShop repräsentiert die # einen Zähler mit dem Sie die einzelnen tatsächlich exportierten Datensätze nummerieren können. Verwenden Sie diesen Zähler, werden die exportierten Dateien (Bilder) mit dieser Nummer benannt.

DirectPrint

Beim DirectPrint wird der Ausdruck nicht grafisch auf dem Canvas des Druckertreibers zusammengesetzt, sondern die Befehle werden vom Windows- in den DOS-Zeichensatz konvertiert und direkt zum Drucker geschickt. Auf diesem Weg lassen sich spezielle Drucker in ihrer Sprache direkt ansteuern. Bedingung ist, dass der Druckertreiber diese Funktion unterstützt. Zum Test kann man in den Einstellungen des Treibers den Druck in eine Datei umlenken und den Inhalt nach dem Druck überprüfen.

Zur vereinfachten Erstellung von Formularen gelten folgende Ersetzungen:

€€         Ein Doppel-Euro wird durch ein Escape ersetzt
\\<Code>   Mit einem Doppel-Backslash wird eine ASCII-Codierung eingeleitet.
           In Folge muß der ASCII-Wert des Zeichens dreistellig, mit führenden
           Nullen angegeben werden.
           Beispiel:  \\027  wird ersetzt durch ein  Escape
x<Wert>,
y<Wert>    Die beiden Befehle {x} und {y} haben im DirectPrint-Modus eine andere
           Bedeutung. Sie rechnen die angegebenen Werte von Millimetern horizontal, 
           bzw. vertikal in Druckpunkte (Dots) um.

Kommentierungen

Kommentierungen werden mit einem Doppelslash '//' eingeleitet, d.h. Text hinter einem Doppelslash wird ignoriert. Befindet sich der Doppelslash am Anfang einer Zeile, wird die ganze Zeile ignoriert und es wird auch kein Zeilenvorschub erzeugt. Da ein Kommentar am Ende einer Zeile nur ins Auge fällt, wenn er einen gewissen Abstand zur Befehlszeile hat, werden auch alle Leerzeichen zwischen dem Ende des Befehls und dem Doppelslash gelöscht, es sei denn, auf den Doppelslash folgt unmittelbar ein Leerzeichen.

Bedingungen

Ein wichtiges Mittel zur Steuerung von Ausgaben sind Bedingungen. Mit ihnen kann auf unterschiedliche Zustände reagiert werden. Die Zeichen zur Steuerung von Bedingungen '[, |, ]' müssen am Zeilenanfang stehen und werden nicht in geschweifte Klammern '{}' eingeschlossen. Sie dürfen mit Leerzeichen eingerückt werden, um die Verschachtelungstiefe von Bedingungen hervorzuheben. Nahezu grenzenlose Verschachtelungstiefe und Verknüpfungen der Einzelbedingungen mit and und or sowie Klammersetzung sind erlaubt. Leerzeichen trennen die einzelnene Bedingungen und Verknüpfungen voneinander. Enthält ein Vergleichswert Leerzeichen, so muß er in Hochkommata eingeschlossen werden (keine Anführungszeichen!). Verglichen werden nummerische Werte mit und ohne Nachkommastellen, Text sowie Datumsfelder. Ein Datum kann auch aus Text und Variablen zusammengesetzt werden, z.B. [{V40.BelegDatum}>=01.01.{Vm.Jahr}

[ - if
    leitet eine Bedingung ein
| - else (die HalfPipe erhalten Sie über AltGr+<)
    ist optional und leitet den Bereich ein, der ausgeführt wird, wenn die Bedingung 
    nicht erfüllt ist
] - end
    schließt eine Bedingung ab

Operatoren:  =        ist gleich, bzw. ist Element der Menge
             ==       Textfelder: enthält Teilstring
                      nummerische und logische Felder: undefiniert / ohne Wert
             <        ist kleiner
             <=       ist kleiner gleich
             <>       ungleich, bzw. ist nicht Element der Menge
             >        ist größer
             >=       ist größer gleich
             ><       Textfelder: Teilstring nicht enthalten
                      nummerische und logische Felder: definiert / hat einen Wert
             Elemente einer Menge sind durch Semikolon zu trennen

[[ = Beginnt die Bedingung mit einer doppelten eckigen Klammen, so wird der "if"-Teil
     so lange ausgeführt, wie die Bedingung zutrifft (jedoch maximal 200 Mal, beim 201.
     Mal wird der Druck abgebrochen, um eine Endlosschleife zu verhindern)
[@ = Folgt auf die Klammer ein @, so wird der folgende Text als Frage in einem Dialog
     gestellt und entsprechned der Antwort fortgefahren. Zeilenumbrüche werden durch
     Halfpipes markiert. Es können Variablen {V.xx} eingefügt werden.
[# = Erstellung eines individuellen Sortierindex für den Listendruck
     Diese Funktion muß in der ersten Zeile des Bereiches stehen und kann nur in folgenden
     Bereichen verwendet werden:
     + In der Hauptposition von Listen                      (Formular-Typ 3, Bereich 3)
     + In Reporten                                          (Formular-Typ 20, Bereich 3)
     + Im Artikel-Vorlauf des Artikel-Umsatz                (Formular-Typ 23, Bereich 3)
     + Im Rechnungen-Bereich der Umsatz- & Erlösstatistik   (Formular-Typ 30, Bereich 3)
       Wenn Sie die Sortierfunktion verwenden, wird der Bereich 4 (Gutschriften) aus-
       schließlich zur Erstellung des Sortierindex verwendet. Alle Belege, egal ob
       Rechnungen oder Gutschriften, werden im zweiten Durchgang im Else-Zweig der
       Rechnungen verarbeitet.
       
     Die zu druckende Tabelle wird anschließend zweimal durchlaufen. Im ersten Durchgang 
     wird der If-Zweig abgearbeitet und alles, was gedruckt werden soll, wird als Text
     in eine temporäre Datei geschrieben und bildet den Index für die Sortierung des
     anschließenden Durchgangs.
     Achten Sie darauf, nummerische Werte ausreichend mit Nullen zu füllen, z.B. durch
     Übergabe an eine Textvariable und Formatierung vor der Ausgabe ({Vs.1==L012}), 
     da auch sie als Text im Index landen. Andernfalls ist eine 11 kleiner als eine 2, da
     an der ersten Stelle ein 1 steht.

     Der zweite Durchgang erfolgt dann anhand des so erstellten Index und der Else-Zweig
     wird abgearbeitet und gedruckt/exportiert. Auf das Sortierfelder kann mittels
     {V97.Sortierung} zugegriffen werden.
     Soll die Verarbeitung erst ab einem bestimmten Startwert beginnen, schreiben Sie
     diesen direkt hinter die Halfpipe, welche den Else-Zweig einleitet. Je nach Umfang
     der Datenquelle und dem Anteil der gewünschten Datensätze kann so die Ausgabe
     erheblich beschleunigt werden.

     Die temporäre Datei wird in der Grundeinstellung im Datenverzeichnis abgelegt. Dies
     kann in einem Netzwerk zu Verzögerungen führen. Wenn Sie jedoch in den Adressen die
     Option "Markierungen lokal speichern" aktivieren, wird auch die Datei für die
     Ausgabesortierung auf der lokalen Festplatte "C:" gespeichert.
     Da der Sortierdruck nur innerhalb eines Bereiches definiert werden kann, können Sie
     keine Unterlisten für die Bestimmung des Sortierindex verwenden. Wollen Sie dennoch
     auf verknüpfte Tabellen zugreifen, verwenden Sie eine Wiederholungszeile {w}.

Hinter eine else-kennzeichnende HalfPipe kann eine weitere Bedingung geschrieben und
so eine beliebig lange If-Kette gebildet werden, ähnlich einer Case-Anweisung, welche
aber nur jeweils einen Wert verarbeiten kann. Das erspart eine unübersichtliche
Verschachtelung mehrerer Bedingungen im jeweiligen Else-Zweig der vorangegangenen.
FaktuLux stellt sicher, dass innerhalb einer Ebene nur eine Bedingung zutreffen kann.
Beispiel: [{V10.GruppeIDa}><K
            ist kein Kunde
          |{V10.LandIDa}=D
            deutscher Kunde
          |{V10.LandIDa}=A or {V10.LandIDa}=CH
            deutschsprachiger Kunde
          |
            Kunde mit Fremdsprache
          ]

Hat ein nummerisches oder logisches Feld keinen Inhalt (bei nummerischen Feldern auch 
nicht '0', bei logischen Feldern einen grauen Haken) wird der Inhalt '0' angenommen, 
d.h. ein nummerisches Feld ist auch dann '<1', wenn es keinen Inhalt hat. Möchten Sie 
explizit abfragen, ob ein Feld einen Inhalt hat oder nicht, verwenden Sie die Operatoren
'==' und '><'.

Zusätzlich können die absoluten Positionen X und Y abgefragt werden, um beispielsweise zu
prüfen, ob auf einer Seite noch Platz für entbehrliche Informationen ist. Dabei müssen
X und Y groß geschrieben werden, sowie links und in geschweiften Klammern stehen.
Beispiele: [{X}<100  oder  [{Y}>24

Schließlich kann mit dem @ in geschweifeten Klammern die Nummer des aktuellen Druckers
abgefragt werden. Auch dieser Term muss links stehen.
Beispiele: [{@}=8   (entspricht dem PDF-Drucker)

Barcode-Nummern

0 - EAN13 (S)
Europäische-Artikel-Nummer mit eingedruckten Ziffern, wie man ihn von vielen Verkaufsverpackungen kennt
1 - EAN8 (S)
Europäische-Artikel-Nummer mit 8 Ziffern
2 - EAN13 (S)
Europäische-Artikel-Nummer mit 13 Ziffern
3 - Code128A
Großbuchstaben und Sonderzeichen (ASCII 32-95)
4 - Code128B
Groß- und Kleinbuchstaben (ASCII 32-127)
5 - Code128C
Optimiert zur Zifferndarstellung
6 - Code128 Auto
Wählt abhängig vom Inhalt den besten Code128
7 - CodeEAN128A
EAN-Sonderform des Code128A, doppeltes Startzeichen
8 - CodeEAN128B
EAN-Sonderform des Code128B, doppeltes Startzeichen
9 - CodeEAN128C
EAN-Sonderform des Code128C, doppeltes Startzeichen
10 - CodeEAN128 Auto
Wählt abhängig vom Inhalt den besten CodeEAN128
11 - Code39
0-9, A-Z, Leer und -.*$/+%
12 - Code39 Extended
ASCII
13 - Code39 Auto
Wählt abhängig vom Inhalt den besten Code39
14 - Code93
0-9, A-Z, Leer und -.*$/+%
15 - Code93 Extended
ASCII
16 - Code93 Auto
Wählt abhängig vom Inhalt den besten Code93
17 - CodeUPCA
Universal-Product-Code - amerikanisch 12 Ziffern
18 - CodeUPCE0
Kurzform
19 - CodeUPCE1
Kurzform
20 - CodeUPCSupp2
zweistelliger Zusatzcode
21 - CodeUPCSupp5
zweistelliger Zusatzcode
22 - Code25interleaved
nur Ziffern, keine Prüfsumme, paarweise Darstellung
23 - Code25industrial
nur Ziffern, keine Prüfsumme
24 - Code25matrix
(Abstände für Nadeldrucker optimiert?)
25 - CodeCodabar
Medizin, 0-9 und -$:/.+
26 - CodePostNet
nur Ziffern, Prüfsumme automatisch
27 - CodeMSI
nur Ziffern
28 - GS1-128
je nach Inhalt CodeEAN128B oder CodeEAN128C
automatische Umschaltung
Das Paragraphenzeichen § fügt einen FNC1 ein

(S) = Prüfsumme erforderlich und Standard

Feste Formularnamen

Termine   - Termine
ArbZeit   - Mitarbeiter Arbeitszeitenliste (TBenutzer, TZeiterfassung)
AufStatus - Auftrags-Statusreport
Sonstiges
=========
if TFormulareInitialisierung.AsString='#'
then bStartFromHere:=true;