Dokumentenvorlagen und verfügbare Variablen

geschrieben von Moritz Bunkus. Version: $Id$


Inhaltsverzeichnis

  1. Inhaltsverzeichnis
  2. Einführung
  3. Zuordnung von Dateinamen zu den Funktionen
  4. Allgemeine Variablen, die in allen Vorlagen vorhanden sind
    1. Stammdaten von Kunden und Lieferanten
    2. Informationen über den Verkäufer
    3. Variablen für jede Steuer
  5. Variablen in Rechnungen
    1. Allgemeine Variablen
    2. Variablen für jeden Posten auf der Rechnung
    3. Variablen für die Zahlungseingänge
  6. Variablen in anderen Vorlagen
  7. Blöcke, bedingte Anweisungen und Schleifen
    1. Einschänkungen für Blöcke in LaTeX-Vorlagen
    2. Einschänkungen für Blöcke in OpenDocument-Vorlagen
    3. Die include-Anweisung
    4. Der if not-Block
    5. Der if-Block
    6. Die foreach-Schleife
    7. Der pagebreak-Block
  8. Markup-Code, der innerhalb von Formularen zur Textformatierung verwendet werden kann

Einführung

Dies ist eine Auflistung der Standard-Dokumentenvorlagen und aller zur Bearbeitung verfügbaren Variablen. Eine Variable wird in einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form <%variablenname%> verwendet wird.

Früher wurde hier nur über LaTeX gesprochen. Inzwischen unterstützt Lx-Office aber auch OpenDocument-Vorlagen. Sofern es nicht ausdrücklich eingeschränkt wird, gilt das im Folgenden gesagte für alle Vorlagenarten.

Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen verfügbar als hier aufgelistet werden. Die meisten davon können allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann diese wie folgt erhalten werden:

  1. SL/Form.pm öffnen und am Anfang die Zeile
    "use Data::Dumper;"
    einfügen.
  2. In Form.pm die Funktion parse_template suchen und hier die Zeile
    print(STDERR Dumper($self));
    einfügen.
  3. Einmal per Browser die gewünschte Vorlage "benutzen", z.B. ein PDF für eine Rechnung erzeugen.
  4. Im error.log vom Apache steht die Ausgabe der Variablen $self in der Form 'key' => 'value',. Alle keys sind verfügbar.
zum Inhaltsverzeichnis

Zuordnung von den Dateinamen zu den Funktionen

Diese folgende kurze Auflistung zeigt, welche Vorlage bei welcher Funktion ausgelesen wird. Dabei ist die Dateiendung ".ext" geeignet zu ersetzen: ".tex" fü LaTeX-Vorlagen und ".odt" für OpenDocument-Vorlagen.

zum Inhaltsverzeichnis

Allgemeine Variablen, die in allen Vorlagen vorhanden sind

Stammdaten von Kunden und Lieferanten:

VariablennameBedeutung
account_number Kontonummer
bank Name der Bank
bank_code Bankleitzahl
business Kundentyp
city Stadt
contact Kontakt
country Land
cp_email Email des Ansprechpartners
cp_givenname Vorname des Ansprechpartners
cp_greeting Anrede des Ansprechpartners
cp_name Name des Ansprechpartners
cp_phone1 Telefonnummer 1 des Ansprechpartners
cp_phone2 Telefonnummer 2 des Ansprechpartners
cp_title Titel des Ansprechpartners
creditlimit Kreditlimit
customernumber Kundennummer; nur für Kunden
customernotes Bemerkungen beim Kunden; nur für Kunden
discount Rabatt
email Emailadresse
fax Faxnummer
homepage Homepage
language Sprache
name Firmenname
phone Telefonnummer
shiptocity Stadt (Lieferadresse) *
shiptocontact Kontakt (Lieferadresse) *
shiptocountry Land (Lieferadresse) *
shiptodepartment1 Abteilung 1 (Lieferadresse) *
shiptodepartment2 Abteilung 2 (Lieferadresse) *
shiptoemail Email (Lieferadresse) *
shiptofax Fax (Lieferadresse) *
shiptoname Firmenname (Lieferadresse) *
shiptophone Telefonnummer (Lieferadresse) *
shiptostreet Straße und Hausnummer (Lieferadresse) *
shiptozipcode Postleitzahl (Lieferadresse) *
street Straße und Hausnummer
taxnumber Steuernummer
terms Zahlungsziel
vendoremail Email des Lieferanten; nur für Lieferanten
vendorfax Faxnummer des Lieferanten; nur für Lieferanten
vendornotes Bemerkungen beim Lieferanten; nur für Lieferanten
vendornumber Lieferantennummer; nur für Lieferanten
vendorphone Telefonnummer des Lieferanten; nur für Lieferanten
zipcode Postleitzahl

Anmerkung: Sind die shipto*-Felder in den Stammdaten nicht eingetragen, so haben die Variablen shipto* den gleichen Wert wie die die entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich einige shipto*-Variablen so nicht in den Stammdaten wiederfinden sondern schlicht Kopien der Lieferdatenvariablen sind (z.B. shiptocontact).

Informationen über den Verkäufer:

VariablennameBedeutung
employee_address Adressfeld
employee_businessnumber Firmennummer
employee_company Firmenname
employee_email Email
employee_fax Fax
employee_name voller Name
employee_signature Signatur
employee_tel Telefonnummer

Variablen für die einzelnen Steuern:

VariablennameBedeutung
tax Steuer
taxbase zu versteuernder Betrag
taxdescription Name der Steuer
taxrate Steuersatz

zum Inhaltsverzeichnis

Variablen in Rechnungen

Allgemeine Variablen:

VariablennameBedeutung
creditremaining Verbleibender Kredit
currency Währung
cusordnumber Bestellnummer beim Kunden
deliverydate Lieferdatum
duedate Fälligkeitsdatum
intnotes Interne Bemerkungen
invdate Rechnungsdatum
invnumber Rechnungsnummer
invtotal gesamter Rechnungsbetrag
notes Bemerkungen der Rechnung
ordnumber Auftragsnummer, wenn die Rechnung aus einem Auftrag erstellt wurde
quonumber Angebotsnummer
shippingpoint Versandort
shipvia Transportmittel
subtotal Zwischensumme aller Posten ohne Steuern
sumcarriedforward Zwischensumme aller bisher ausgegebenen Posten. Sollte nur in einem pagebreak-Block verwendet werden.
total Restsumme der Rechnung (Summe abzüglich bereits bezahlter Posten)
transdate Auftragsdatum wenn die Rechnung aus einem Auftrag erstellt wurde

Variablen für jeden Posten auf der Rechnung:

VariablennameBedeutung
assembly Erzeugnis
bin Stellage
deliverydate_oe Lieferdatum
description Artikelbeschreibung
discount Rabatt als Betrag
linetotal Zeilensumme (Anzahl * Einzelpreis)
listprice Listenpreis
netprice Nettopreis
number Artikelnummer
ordnumber_oe Auftragsnummer des Originalauftrags, wenn die Rechnung aus einem Sammelauftrag erstellt wurde
p_discount Rabatt in Prozent
partnotes Die beim Artikel gespeicherten Bemerkungen
partsgroup Warengruppe
projectnumber Projektnummer
qty Anzahl
runningnumber Position auf der Rechnung (1, 2, 3...)
sellprice Verkaufspreis
serialnumber Seriennummer
transdate_oe Auftragsdatum des Originalauftrags, wenn die Rechnung aus einem Sammelauftrag erstellt wurde
unit Einheit

Variablen für die einzelnen Zahlungseingänge:

VariablennameBedeutung
datepaid Datum
memo Memo
paid Betrag
source Beleg
exchangerate Wechselkurs
forex Konto

zum Inhaltsverzeichnis

Variablen in anderen Vorlagen

Die Variablen in anderen Vorlagen sind ähnlich wie in der Rechnung. Allerdings heißen die Variablen, die mit inv beginnen, jetzt anders. Bei den Angeboten fangen sie mit quo für "quotation" an: quodate für Angebotsdatum etc. Bei Bestellungen wiederum fangen sie mit ord für "order" an: ordnumber für Bestellnummer etc.

Manche Variablen sind in anderen Vorlagen hingegen gar nicht vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies sind Variablen, die vom Geschäftsablauf her in der entsprechenden Vorlage keine Bedeutung haben oder noch nicht belegt sein können.

zum Inhaltsverzeichnis

Blöcke, bedingte Anweisungen und Schleifen

Der Parser kennt neben den Variablen einige weitere Konstrukte, die gesondert behandelt werden. Diese sind wie Variablennamen in spezieller Weise markiert: <%anweisung%>

Einschänkungen für Blöcke in LaTeX-Vorlagen

Achtung: Blöcke können in LaTeX-Vorlagen momentan nicht verschachtelt werden. Das bedeutet, dass innerhalb einer <%foreach%>-Schleife keine <%if%>-Abfragen verwendet werden können. Dieses kann man aber mit LaTeX-Bordmitteln selber nachgebildet werden. Dazu muss im Vorspann das Paket ifthen eingebunden werden. Das Konstrukt selber sieht dann wie folgt aus:

\ifthenelse{\equal{<%variable%>}{}}{}{Dieser Text erscheint nur, wenn <%variable%> nicht leer ist.}

Einschänkungen für Blöcke in OpenDocument-Vorlagen

Die eben erwähnten Einschränkungen für LaTeX-Vorlagen gelten in abgeschwächter Form auch für OpenDocument-Vorlagen. Auch bei OpenDocument-Vorlagen können Blöcke nicht verschachtelt werden. Einzige Ausnahme ist, dass <if> und <ifnot>-Blöcke innerhalb von <foreach>-Blöcken auftreten dürfen.

Die include-Anweisung

<%include dateiname.ext%>

Dieser Block funktioniert nur in LaTeX- und HTML-Vorlagen.

Fügt den Inhalt einer Datei an der entsprechenden Stelle ein. Der eingefügte Text wird ganz normal durch den Parser behandelt und kann Variablen und Blöcke enthalten.

Der if not-Block

<%if not variablenname%>
...
<%end if>

Eine normale "if-not-then"-Bedingung. Die Zeilen zwischen dem "if not" und dem "end" werden nur ausgegeben, wenn die Variable "variablenname" nicht gesetzt oder gleich 0 ist.

Der if-Block

<%if variablenname%>
...
<%end if>

Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if" und dem "end" werden nur ausgegeben, wenn die Variable "variablenname" gesetzt und ungleich 0 ist.

Die foreach-Schleife

<%foreach variablenname%>
...
<%end foreach>

Fügt die Zeilen zwischen den beiden Anweisungen so oft ein, wie das Perl-Array der Variablen "variablenname" Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern benutzt. In jedem Durchlauf werden die zeilenbezogenen Variablen jeweils auf den Wert für die aktuelle Position gesetzt.

Die Syntax sieht normalerweise wie folgt aus:

<%foreach number%>
Position: <%runningnumber%>
Anzahl: <%qty%>
Artikelnummer: <%number%>
Beschreibung: <%description%>
...
<%end foreach>

Besonderheit in OpenDocument-Vorlagen: Tritt ein <foreach>-Blcok innerhalb einer Tabellenzelle auf, so wird die komplette Tabellenzeile so oft wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der Inhalt zwischen <foreach> und <end foreach> wiederholt, nicht aber die komplette Zeile, in der er steht.

Der pagebreak-Block

<%pagebreak ZpZ ZeS ZzS%>
...
<%end pagebreak%>

Dieser Block existiert nur in LaTeX-Vorlagen.

Dieser Block legt das Verhalten beim manuellen Einfügen eines Seitenumbruchs fest. Normalerweise bricht LaTeX die Seiten selber um. Beim Rechnungsdruck ist das oft nicht gewünscht, oder man möchte im Falle eines Seitenumbruchs den Übertrag etc. mit ausgeben. Deswegen versucht der Parser, manuell Seitenumbrüche einzufügen, während er einen foreach-Block auswertet, weil hier die manuellen Seitenumbrüche erforderlich werden. Dafür benötigt der Parser aber drei Informationen:

  1. Wieviele Zeichen passen bei der Variablen "description" pro Posten in eine Zeile? Das ist der Parameter "ZpZ" (Zeichen pro Zeile).
  2. Wieviele Zeilen/Posten passen auf die erste Seite? Das ist der Parameter "ZeS" (Zeilen erste Seite).
  3. Wieviele Zeilen/Posten passen auf die zweite und alle nachfolgenden Seiten? Das ist der Parameter "ZzS" (Zeilen zweite Seite).

Diese Parameter sind drei Zahlen, die manuell durch Verwendung von langen Warenbezeichnungen und Rechnungen mit vielen Posten bestimmt werden müssen.

Üblicherweise wird in diesem Block zuerst die aktuelle Tabelle geschlossen, eventuell Text eingefügt (z.B. "Fortsetzung auf der nächsten Seite"), dann ein Seitenumbruch erzwungen, eventuell Text eingefügt (z.B. "Übertrag von der vorherigen Seite: <%sumcarriedforward%> EUR") und die Tabelle wieder geöffnet.

Wird kein manueller Seitenumbruch gewüscht, so kann dieser Block komplett entfallen.

zum Inhaltsverzeichnis

Markup-Code, der innerhalb von Formularen zur Textformatierung verwendet werden kann

Wenn der Benutzer innhalb von Formularen in Lx-Office Text anders formatiert haben möchte, so ist dies begrenzt möglich. Lx-Office unterstützt die Textformatierung mit HTML-ähnlichen Tags. Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird dann automatisch in Anweisungen für das ausgewählte Vorlagenformat (HTML oder PDF über LaTeX) umgesetzt.

Die unterstützen Formatierungen sind:

FormatierungAuswirkung
<b>Text</b> Text wird in fettdruck gesetzt.
<i>Text</i> Text wird kursiv gesetzt.
<u>Text</u> Text wird unterstrichen.
<s>Text</s> Text wird durchgestrichen. Diese Formatierung ist nicht bei der Ausgabe als PDF über LaTeX verfügbar.
<pagebreak> Erzwingt einen Seitenumbruch (siehe unten).

Eine Besonderheit ist der Befehl <pagebreak>, der nur in LaTeX-Vorlagen funktioniert und in anderen Vorlagen einfach gelöscht wird. Dieser erzwingt unabhängig von der im pagebreak-Block voreingestellten Werte einen Seitenumbruch nach der aktuellen Rechnungsposition. Dementsprechend funktioniert er nur innerhalb von <foreach...>-Schleifen. Weiterhin benötigt er kein Endtag.

zum Inhaltsverzeichnis