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. Anfang und Ende der Tags verändern
  5. Allgemeine Variablen, die in allen Vorlagen vorhanden sind
    1. Stammdaten von Kunden und Lieferanten
    2. Informationen über den Bearbeiter
    3. Informationen über den Verkäufer
    4. Variablen für jede Steuer
  6. Variablen in Rechnungen
    1. Allgemeine Variablen
    2. Variablen für jeden Posten auf der Rechnung
    3. Variablen für die Zahlungseingänge
    4. Benutzerdefinierte Kunden- und Lieferantenvariablen
  7. Variablen in Mahnungen und Rechnungen über Mahngebühren
    1. Namen der Vorlagen
    2. Allgemeine Variablen in Mahnungen
    3. Variablen für jede gemahnte Rechnung in einer Mahnung
    4. Variablen in automatisch erzeugten Rechnungen über Mahngebühren
  8. Variablen in anderen Vorlagen
    1. Angebote und Preisanfragen
    2. Auftragsbestätigungen und Lieferantenaufträge
    3. Lieferscheine (Verkauf und Einkauf)
  9. Blöcke, bedingte Anweisungen und Schleifen
    1. Der if-Block
    2. Die foreach-Schleife
    3. Der pagebreak-Block
  10. 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. Für LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern.

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

Anfang und Ende der Tags verändern

Der Standardstil für Tags sieht vor, dass ein Tag mit dem Kleinerzeichen und einem Prozentzeichen beginnt und mit dem Prozentzeichen und dem Größerzeichen endet, beispielsweise <%customer%>. Da diese Form aber z.B. in LaTeX zu Problemen führen kann, weil das Prozentzeichen dort Kommentare einleitet, kann pro HTML- oder LaTeX-Dokumentenvorlage der Stil umgestellt werden.

Dazu werden in die Datei Zeilen geschrieben, die mit dem für das Format gültigen Kommentarzeichen anfangen, dann config: enthalten, die entsprechende Option setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen enden. Beispiel für LaTeX:

% config: tag-style=($ $)

Dies würde Lx-Office dazu veranlassen, Variablen zu ersetzen, wenn sie wie folgt aussehen: ($customer$). Das äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:

<!-- config: tag-style=($ $) -->

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.

Dateiname Bedeutung
bin_list.ext Lagerliste
check.ext ?
invoice.ext Rechnung
packing_list.ext Packliste
pick_list.ext Sammelliste
purchase_delivery_order.ext Lieferschein (Einkauf)
purcharse_order.ext Bestellung an Lieferanten
request_quotation.ext Anfrage an Lieferanten
sales_delivery_order.ext Lieferschein (Verkauf)
sales_order.ext Bestellung
sales_quotation.ext Angebot an Kunden
zahlungserinnerung.ext Mahnung (Dateiname im Programm konfigurierbar)
zahlungserinnerung_invoice.ext Rechnung über Mahngebühren (Dateiname im Programm konfigurierbar)

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
bic Bank-Identifikations-Code (Bank Identifier Code, BIC)
business Kunden-/Lieferantentyp
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
customeremail Email des Kunden; nur für Kunden
customerfax Faxnummer des Kunden; nur für Kunden
customernotes Bemerkungen beim Kunden; nur für Kunden
customernumber Kundennummer; nur für Kunden
customerphone Telefonnummer des Kunden; nur für Kunden
discount Rabatt
email Emailadresse
fax Faxnummer
homepage Homepage
iban Internationale Kontonummer (International Bank Account Number, IBAN)
language Sprache
name Firmenname
payment_terms Zahlungskonditionen
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
ustid Usatzsteuer-Identifikationsnummer
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 Bearbeiter:

VariablennameBedeutung
employee_address Adressfeld
employee_businessnumber Firmennummer
employee_company Firmenname
employee_co_ustid Usatzsteuer-Identifikationsnummer
employee_duns DUNS-Nummer
employee_email Email
employee_fax Fax
employee_name voller Name
employee_signature Signatur
employee_taxnumber Steuernummer
employee_tel Telefonnummer

Informationen über den Verkäufer (nur bei Verkaufsmasken):

VariablennameBedeutung
salesman_address Adressfeld
salesman_businessnumber Firmennummer
salesman_company Firmenname
salesman_co_ustid Usatzsteuer-Identifikationsnummer
salesman_duns DUNS-Nummer
salesman_email Email
salesman_fax Fax
salesman_name voller Name
salesman_signature Signatur
salesman_taxnumber Steuernummer
salesman_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
globalprojectnumber Projektnummer des ganzen Beleges
globalprojectdescription Projekbeschreibung des ganzen Beleges
intnotes Interne Bemerkungen
invdate Rechnungsdatum
invnumber Rechnungsnummer
invtotal gesamter Rechnungsbetrag
notes Bemerkungen der Rechnung
orddate Auftragsdatum
ordnumber Auftragsnummer, wenn die Rechnung aus einem Auftrag erstellt wurde
payment_terms Zahlungskonditionen
quodate Angebotsdatum
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)
transaction_description Vorgangsbezeichnung
transdate Auftragsdatum wenn die Rechnung aus einem Auftrag erstellt wurde

Variablen für jeden Posten auf der Rechnung:

VariablennameBedeutung
bin Stellage
description Artikelbeschreibung
discount Rabatt als Betrag
discount_sub Zwischensumme mit Rabatt
drawing Zeichnung
ean EAN-Code
image Grafik
linetotal Zeilensumme (Anzahl * Einzelpreis)
longdescription Langtext
microfiche Mikrofilm
netprice Nettopreis
nodiscount_linetotal Zeilensumme ohne Rabatt
nodiscount_sub Zwischensumme ohne Rabatt
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
price_factor Der Preisfaktor als Zahl, sofern einer eingestellt ist
price_factor_name Der Name des Preisfaktors, sofern einer eingestellt ist
projectnumber Projektnummer
projectdescription Projektbeschreibung
qty Anzahl
reqdate Lieferdatum
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
weight Gewicht

Für jeden Posten gibt es ein Unterarray mit den Informationen über Lieferanten und Lieferantenartikelnummer. Diese müssen mit einer foreach-Schleife ausgegeben werden, da für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein können. Die Variablen dafür lauten:

VariablennameBedeutung
make Lieferant
model Lieferantenartikelnummer

Variablen für die einzelnen Zahlungseingänge:

VariablennameBedeutung
payment Betrag
paymentaccount Konto
paymentdate Datum
paymentmemo Memo
paymentsource Beleg

Benutzerdefinierte Kunden- und Lieferantenvariablen:

Die vom Benutzer definierten Variablen für Kunden und Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem Präfix vc_cvar_ und dem vom Benutzer festgelegten Variablennamen zusammen.

Beispiel: Der Benutzer hat eine Variable namens number_of_employees definiert, die die Anzahl der Mitarbeiter des Unternehmens enthält. Diese Variable steht dann unter dem Namen vc_cvar_number_of_employees zur Verfügung.

zum Inhaltsverzeichnis

Variablen in Mahnungen und Rechnungen über Mahngebühren

Namen der Vorlagen

Die Namen der Vorlagen werden im System-Menü vom Benutzer eingegeben. Wird für ein Mahnlevel die Option zur automatischen Erstellung einer Rechnung über die Mahngebühren und Zinsen aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem Vorlagenname für diese Mahnstufe mit dem Zusatz _invoice gebildet. Weiterhin werden die Kürzel für die ausgewählte Sprache und den ausgewählten Drucker angehängt.

Allgemeine Variablen in Mahnungen:

Die Variablen des Verkäufers stehen wie gewohnt als employee_... zur Verfügung. Die Adressdaten des Kunden stehen als Variablen name, street, zipcode, city, country, department_1, department_2, und email zur Verfügung.

Weitere Variablen beinhalten:

VariablennameBedeutung
dunning_date Datum der Mahnung
dunning_duedate Fälligkeitsdatum für diese Mahhnung
dunning_id Mahnungsnummer
fee Kummulative Mahngebühren
interest_rate Zinssatz per anno in Prozent
total_amount Gesamter noch zu zahlender Betrag als fee + total_interest + total_open_amount
total_interest Zinsen per anno über alle Rechnungen
total_open_amount Summe über alle offene Beträge der Rechnungen

Variablen für jede gemahnte Rechnung in einer Mahnung:

VariablennameBedeutung
dn_amount Rechnungssumme (brutto)
dn_duedate Originales Fälligkeitsdatum der Rechnung
dn_dunning_date Datum der Mahnung
dn_dunning_duedate Fälligkeitsdatum der Mahnung
dn_fee Kummulative Mahngebühr
dn_interest Zinsen per anno für diese Rechnung
dn_invnumber Rechnungsnummer
dn_linetotal Noch zu zahlender Betrag (ergibt sich aus dn_open_amount + dn_fee + dn_interest)
dn_netamount Rechnungssumme (netto)
dn_open_amount Offener Rechnungsbetrag
dn_ordnumber Bestellnummer
dn_transdate Rechnungsdatum

Variablen in automatisch erzeugten Rechnungen über Mahngebühren

Die Variablen des Verkäufers stehen wie gewohnt als employee_... zur Verfügung. Die Adressdaten des Kunden stehen als Variablen name, street, zipcode, city, country, department_1, department_2, und email zur Verfügung.

Weitere Variablen beinhalten:

VariablennameBedeutung
duedate Fälligkeitsdatum der Rechnung
dunning_id Mahnungsnummer
fee Mahngebühren
interest Zinsen
invamount Rechnungssumme (ergibt sich aus fee + interest)
invdate Rechnungsdatum
invnumber Rechnungsnummer

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.

Im Folgenden werden nur wichtige Unterschiede zu den Variablen in Rechnungen aufgeführt.

Angebote und Preisanfragen

VariablennameBedeutung
quonumber Angebots- bzw. Anfragenummer
reqdate Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei Preisanfragen)
transdate Angebots- bzw. Anfragedatum

Auftragsbestätigungen und Lieferantenaufträge

VariablennameBedeutung
ordnumber Auftragsnummer
reqdate Lieferdatum
transdate Auftragsdatum

Lieferscheine (Verkauf und Einkauf)

VariablennameBedeutung
cusordnumber Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer des Lieferanten (im Einkauf)
donumber Lieferscheinnummer
transdate Lieferscheindatum

Für jede Position eines Lieferscheines gibt es ein Unterarray mit den Informationen darüber, von welchem Lager und Lagerplatz aus die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen Lagerplatz sie eingelagert wurden. Diese müssen mittels einer foreach-Schleife ausgegeben werden. Diese Variablen sind:

VariablennameBedeutung
si_bin Lagerplatz
si_chargenumber Chargennummer
si_bestbefore Mindesthaltbarkeit
si_number Artikelnummer
si_qty Anzahl bzw. Menge
si_runningnumber Positionsnummer (1, 2, 3 etc)
si_unit Einheit
si_warehouse Lager

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%> ... <%end%>

Anmerkung zum <%end%>: Der besseren Verständlichkeit halber kann man nach dem end noch beliebig weitere Wörter schreiben, um so zu markieren, welche Anweisung (z.B. if oder foreach) damit abgeschlossen wird.

Beispiel: Lautet der Beginn eines Blockes z.B. <%if type == "sales_quotation"%>, so könnte er mit <%end%> genauso abgeschlossen werden wie mit <%end if%> oder auch <%end type == "sales_quotation"%>.

Der if-Block

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

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 Bedingung kann auch negiert werden, indem das Wort "not" nach dem "if" verwendet wird. Beispiel: <%if not cp_greeting%>

Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt einer Variablen mit einer festen Zeichenkette oder einer anderen Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob die rechte Seite des Vergleichsoperators in Anführungszeichen gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit anderer Variablen). Zwei Beispiele, die beide Vergleiche zeigen:

<%if var1 == "Wert"%> testet die Variable "var1" auf Übereinstimmung mit der Zeichenkette "Wert". Mittels "!=" anstelle von "==" würde auf Ungleichheit getestet.

<%if var1 == var2%> testet die Variable "var1" auf Übereinstimmung mit der Variablen "var2". Mittels "!=" anstelle von "==" würde auf Ungleichheit getestet.

Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit auch Tests auf Übereinstimmung mit regulären Ausdrücken ohne Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient dieselbe Syntax wie oben nur mit "=~" und "!~" als Vergleichsoperatoren.

Beispiel für einen Test, ob die Variable "intnotes" (interne Bemerkungen) das Wort "schwierig" enthält: <%if intnotes =~ "schwierig"%>

Die foreach-Schleife

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

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%>

Besonderheit in OpenDocument-Vorlagen: Tritt ein <%foreach%>-Block 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%> wiederholt, nicht aber die komplette Zeile, in der er steht.

Der pagebreak-Block

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

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