Merge branch 'master' of vc.linet-services.de:public/lx-office-erp
authorMoritz Bunkus <moritz@bunkus.org>
Thu, 12 Jan 2012 08:26:47 +0000 (09:26 +0100)
committerMoritz Bunkus <moritz@bunkus.org>
Thu, 12 Jan 2012 08:26:47 +0000 (09:26 +0100)
105 files changed:
.gitignore
doc/20111013_globale_variablen.txt [deleted file]
doc/INSTALL.fcgi [deleted file]
doc/INSTALL.html [deleted file]
doc/INSTALL.texi [deleted file]
doc/INSTALL.txt [deleted file]
doc/Lx-Office_Installation_DE.pdf [deleted file]
doc/build/custom-cfg/common.xsl [new file with mode: 0644]
doc/build/custom-cfg/eclipse.xsl [new file with mode: 0644]
doc/build/custom-cfg/epub.xsl [new file with mode: 0644]
doc/build/custom-cfg/fo.xsl [new file with mode: 0644]
doc/build/custom-cfg/html.xsl [new file with mode: 0644]
doc/build/custom-cfg/htmlhelp.xsl [new file with mode: 0644]
doc/build/custom-cfg/javahelp.xsl [new file with mode: 0644]
doc/build/custom-cfg/local-entities.xml [new file with mode: 0644]
doc/build/custom-cfg/localbuild.properties [new file with mode: 0644]
doc/build/custom-cfg/localbuild.xml [new file with mode: 0644]
doc/build/custom-cfg/manpages.xsl [new file with mode: 0644]
doc/build/custom-cfg/rtf.xsl [new file with mode: 0644]
doc/build/custom-cfg/singlehtml.xsl [new file with mode: 0644]
doc/build/custom-cfg/singlexhtml.xsl [new file with mode: 0644]
doc/build/custom-cfg/slides.xsl [new file with mode: 0644]
doc/build/custom-cfg/style-common.css [new file with mode: 0644]
doc/build/custom-cfg/style-eclipse.css [new file with mode: 0644]
doc/build/custom-cfg/style-javahelp.css [new file with mode: 0644]
doc/build/custom-cfg/wordml.xsl [new file with mode: 0644]
doc/build/custom-cfg/xhtml.xsl [new file with mode: 0644]
doc/dokumentation.pdf [new file with mode: 0644]
doc/dokumentation.xml [new file with mode: 0644]
doc/dokumentenvorlagen-und-variablen.html [deleted file]
doc/excel_templates.txt [deleted file]
doc/html/ch01.html [new file with mode: 0644]
doc/html/ch02.html [new file with mode: 0644]
doc/html/ch02s02.html [new file with mode: 0644]
doc/html/ch02s03.html [new file with mode: 0644]
doc/html/ch02s04.html [new file with mode: 0644]
doc/html/ch02s05.html [new file with mode: 0644]
doc/html/ch02s06.html [new file with mode: 0644]
doc/html/ch02s07.html [new file with mode: 0644]
doc/html/ch02s08.html [new file with mode: 0644]
doc/html/ch02s09.html [new file with mode: 0644]
doc/html/ch02s10.html [new file with mode: 0644]
doc/html/ch02s11.html [new file with mode: 0644]
doc/html/ch02s12.html [new file with mode: 0644]
doc/html/ch03.html [new file with mode: 0644]
doc/html/ch03s02.html [new file with mode: 0644]
doc/html/ch03s03.html [new file with mode: 0644]
doc/html/ch04.html [new file with mode: 0644]
doc/html/ch04s02.html [new file with mode: 0644]
doc/html/ch04s03.html [new file with mode: 0644]
doc/html/ch04s04.html [new file with mode: 0644]
doc/html/ch04s05.html [new file with mode: 0644]
doc/html/ch04s06.html [new file with mode: 0644]
doc/html/images/admon/blank.png [new file with mode: 0644]
doc/html/images/admon/caution.png [new file with mode: 0644]
doc/html/images/admon/caution.svg [new file with mode: 0644]
doc/html/images/admon/draft.png [new file with mode: 0644]
doc/html/images/admon/home.png [new file with mode: 0644]
doc/html/images/admon/home.svg [new file with mode: 0644]
doc/html/images/admon/important.png [new file with mode: 0644]
doc/html/images/admon/important.svg [new file with mode: 0644]
doc/html/images/admon/next.png [new file with mode: 0644]
doc/html/images/admon/next.svg [new file with mode: 0644]
doc/html/images/admon/note.png [new file with mode: 0644]
doc/html/images/admon/note.svg [new file with mode: 0644]
doc/html/images/admon/prev.png [new file with mode: 0644]
doc/html/images/admon/prev.svg [new file with mode: 0644]
doc/html/images/admon/tip.png [new file with mode: 0644]
doc/html/images/admon/tip.svg [new file with mode: 0644]
doc/html/images/admon/toc-blank.png [new file with mode: 0644]
doc/html/images/admon/toc-minus.png [new file with mode: 0644]
doc/html/images/admon/toc-plus.png [new file with mode: 0644]
doc/html/images/admon/up.png [new file with mode: 0644]
doc/html/images/admon/up.svg [new file with mode: 0644]
doc/html/images/admon/warning.png [new file with mode: 0644]
doc/html/images/admon/warning.svg [new file with mode: 0644]
doc/html/images/aquadot.jpg [new file with mode: 0644]
doc/html/images/callouts/1.png [new file with mode: 0644]
doc/html/images/callouts/10.png [new file with mode: 0644]
doc/html/images/callouts/2.png [new file with mode: 0644]
doc/html/images/callouts/3.png [new file with mode: 0644]
doc/html/images/callouts/4.png [new file with mode: 0644]
doc/html/images/callouts/5.png [new file with mode: 0644]
doc/html/images/callouts/6.png [new file with mode: 0644]
doc/html/images/callouts/7.png [new file with mode: 0644]
doc/html/images/callouts/8.png [new file with mode: 0644]
doc/html/images/callouts/9.png [new file with mode: 0644]
doc/html/images/draft.png [new file with mode: 0644]
doc/html/images/out.png [new file with mode: 0644]
doc/html/images/quoleft.gif [new file with mode: 0644]
doc/html/images/skr04-update-3804/konto3804.png [new file with mode: 0644]
doc/html/images/skr04-update-3804/konto4315.png [new file with mode: 0644]
doc/html/images/skr04-update-3804/steuer3803.png [new file with mode: 0644]
doc/html/images/skr04-update-3804/steuer3804.png [new file with mode: 0644]
doc/html/images/skr04-update-3804/steuerliste.png [new file with mode: 0644]
doc/html/images/somerights.png [new file with mode: 0644]
doc/html/index.html [new file with mode: 0644]
doc/html/style.css [new file with mode: 0644]
doc/konfigurationsdatei.txt [deleted file]
doc/languages_howto.txt [deleted file]
doc/programmierstilrichtlinien.txt [deleted file]
doc/sql-upgrade-dateien.txt [deleted file]
doc/umstellung_eur.txt [deleted file]
doc/wiederkehrende_rechnungen.txt [deleted file]
scripts/build_doc.sh [new file with mode: 0755]

index 81d3e49..10b6786 100644 (file)
@@ -7,3 +7,4 @@ crm
 /config/lx_office.conf
 /doc/online/*/*.html
 pod2html*
+/doc/build/dobudish*
diff --git a/doc/20111013_globale_variablen.txt b/doc/20111013_globale_variablen.txt
deleted file mode 100644 (file)
index fb6b3da..0000000
+++ /dev/null
@@ -1,249 +0,0 @@
-nachdem Holger heute den Bug eingestellt hat den ich schon lange befürchtet
-habe, bin ich heute mal die globalen Variablen angegangen. Das ganze ist über
-die Jahre leider recht komfus geworden, deshalb hier ne Erklärung, die
-hoffentlich sowas in Zukunft vermeidet.
-
-
-Wie sehen globale Variablen in Perl aus?
-----------------------------------------
-
-Globale Variablen liegen in einem speziellen namespace namens "main", der von
-überall erreichbar ist. Darüber hinaus sind bareword globs global und die
-meisten speziellen Variablen sind... speziell.
-
-Daraus ergeben sich folgende Formen:
-
-  $main::form           - expliziter namespace main
-  $::form               - impliziter namespace main
-  open FILE, "file.txt" - FILE ist global
-  $_                    - speziell.
-
-(Ja, da fehlen noch ein paar Sachen, ich weiß)
-
-Im Gegensatz zu PHP gibt es kein Schlüsselwort wir "global" mit dem man
-importieren kann, my, our und local machen was anderes.
-
-  my $form              - lexikalische Variable, gültig bis zum Ende des scopes
-  our $form             - $form referenziert ab hier $PACKAGE::form.
-  local $form           - Alle Änderungen an $form werden am Ende des scopes zurückgesetzt
-
-Warum ist das ein Problem?
---------------------------
-
-Das erste Problem ist FCGI.
-
-sql-ledger hat fast alles im globalen namespace abgelegt, und erwartet, dass es
-da auch wiederzufinden ist. Unter FCGI müssen diese Sachen auch wieder
-aufgeräumt werden, damit sie nicht in den nächsten Request kommen. Einige
-Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
-Datenbankverbindungen, weil die ne Ewigkeit zum initialisieren brauchen.
-
-Das zweite Problem ist strict.
-
-Unter strict werden alle Variablen die nicht explizit mit Package, my oder our
-angegeben werden als Tippfehler angemarkert, was einen vor so mancher Stunde
-suchen nach einem Bug erspart. Da globale Variablen aber implizit mit Package
-angegeben werden, werden die nicht geprüft, und ein Tippfehler da fällt
-niemandem auf.
-
-Kanonische globale Variablen
-----------------------------
-
-Um dieses Problem im Griff zu halten gibt es einige wenige globale Variablen,
-die kanonisch sind, und alles andere sollte anderweitig umhergereicht werden.
-
-Diese Variablen sind im Moment die folgenden neun:
-
-  $::form
-  %::myconfig
-  $::locale
-  $::lxdebug
-  $::auth
-  $::lx_office_conf
-  $::instance_conf
-  $::dispatcher
-  $::request
-
-Damit diese nicht als Müllhalde misbrauch werden, im Folgenden eine kurze
-Erläuterung was man von denn erwarten kann.
-
-
-$::form
-
-- Ist ein Objekt der Klasse "Form"
-- Wird nach jedem Request gelöscht
-- Muss auch in Tests und Konsolenscripts vorhanden sein.
-- Enthält am Anfang eines Requests die Requestparameter vom User
-- Kann zwar intern über Requestgrenzen ein Datenbankhandle cachen, das wird
-  aber momentan absichtlich zerstört
-
-$::form wurde unter sql ledger als Gottobjekt für alles misbraucht. Sämtliche alten
-Funktionen unter SL/ mutieren $::form, das heißt, alles was einem lieb ist,
-sollte man vor einem Aufruf von zum Beispiel IS->retrieve_customer  in Sicherheit bringen.
-
-Das Objekt der Klasse Form  hat leider im Moment noch viele zentrale Funktionen
-Gdie vom internen Zustand abhängen, deshalb bitte nie einfach zerstören oder
-überschreiben. Es geht ziemlich sicher etwas kaputt.
-
-$::form ist gleichzeitig der Standard Scope in den Template::Toolkit Templates
-ausserhalb der Controller, der Ausdruck [% var %] greift auf $::form->{var} zu.
-Unter Controllern ist der Standard Scope anders, da lautet der Zugriff [%
-FORM.var %]. In Druckvorlagen sind normale Variablen ebenfall im $::form Scope,
-d.h. <%var%> zeigt auf $::form->{var}. Innerhalb von Schleifen
-wird $::form->{TEMPLATE_ARRAYS}{var}[$index] bevorzugt wenn vorhanden.
-
-
-%::myconfig
-
-- Das einzige Hash unter den globalen Variablen
-- Wird spätestens benötigt wenn auf die Datenbank zugegriffen wird
-- Wird bei jedem Request neu erstellt.
-- Enthält die Userdaten des aktuellen Logins
-- Sollte nicht ohne Filterung irgendwo gedumpt werden oder extern serialisiert
-  werden, weil da auch der Datenbankzugriff für diesen user drinsteht.
-- Enthält unter anderem Listenbegrenzung vclimit, Datumsformat dateformat und
-  Nummernformat numberformat
-- Enthält Datenbankzugriffinformationen
-
-%::myconfig ist im Moment der Ersatz für ein Userobjekt. Die meisten Funktionen,
-die etwas anhand des aktuellen Users entscheiden müssen befragen %::myconfig.
-
-
-$::locale
-
-- Objekt der Klasse "Locale"
-- Wird pro Request erstellt
-- Muss auch für Tests und Scripte immer verfügbar sein.
-- Cached intern über Requestgrenzen hinweg benutzte Locales
-
-Lokalisierung für den aktuellen User. Alle Übersetzungen, Zahlen- und
-Datumsformatierungen laufen über dieses Objekt.
-
-
-$::lxdebug
-
-- Objekt der Klasse "LXDebug"
-- Wird global gecached
-- Muss immer verfügbar sein, in nahezu allen Funktionen
-
-$::lxdebug stellt Debuggingfunktionen bereit, wie "enter_sub" und "leave_sub",
-mit denen in den alten Modulen ein brauchbares Tracing gebaut ist, "log_time",
-mit der man die Wallclockzeit seit Requeststart loggen kann, und  "message" und
-"dump" mit denen man flott Informationen ins Log packen kann.
-
-
-$::auth
-
-- Objekt der Klasse "SL::Auth"
-- Wird global gecached
-- Hat eine permanente DB Verbindung zur Authdatenbank
-- Wird nach jedem Request resettet.
-
-$::auth stellt Funktionen bereit um die Rechte des aktuellen Users abzufragen.
-Obwohl diese Informationen vom aktuellen User abhängen wird das Objekt aus
-Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem Request kurz
-resettet.
-
-
-$::lx_office_conf
-
-- Objekt der Klasse "SL::LxOfficeConf"
-- Global gecached
-- Repräsentation der config/lx_office.conf[.default] Dateien
-
-Globale Konfiguration.
-
-Configdateien werden zum Start gelesen, und nicht mehr angefasst. Es ist
-derzeit nicht geplant, dass das Programm die Konfiguration ändern kann oder
-sollte.
-
-Der Konfigurationskey
-
-  [Debug]
-
-  file = /tmp/lxoffice_debug_log.txt
-
-ist im Programm als $::lx_office_conf->{Debug}{file} erreichbar.
-
-Warnung: Zugriff auf die Konfiguration erfolgt im Moment über Hashkeys, sind
-also nicht gegen Tippfehler abgesichert.
-
-
-$::instance_conf
-
-- Objekt der Klasse "SL::InstanceConfiguration"
-- wird pro Request neu erstellt.
-
-Funktioniert wie $::lx_office_conf, speichert aber Daten die von der Instanz
-abhängig sind. Eine Instanz ist hier eine Mandantendatenbank. Prominentestes
-Datum ist "eur", die Information ob Bilanz oder Einnahmenüberschussrechnung
-gemacht wird.
-
-
-
-$::dispatcher
-
-- Objekt der Klasse "SL::Dispatcher"
-- wird pro Serverprozess erstellt.
-- enthält Informationen über die technische Verbindung zum Server
-
-Der dritte Punkt ist auch der einzige Grund warum das Objekt global gespeichert
-wird. Wird vermutlich irgendwann in einem anderen Objekt untergebracht.
-
-
-
-$::request
-
-- Hashref (evtl später Objekt)
-- Wird pro Request neu initialisiert.
-- Keine Unterstruktur garantiert.
-
-$::request ist ein generischer Platz um Daten "für den aktuellen Request"
-abzulegen. Sollte nicht für action at a distance benutzt werden, sondern um
-lokales memoizing zu ermöglichen, das garantiert am Ende des Requests zerstört
-wird.
-
-Vieles von dem was im moment in $::form  liegt sollte eigentlich hier liegen.
-Die groben Differentialkriterien sind:
-
-- Kommt es vom User, und soll unverändert wieder an den User?
-  => $::form, steht da eh schon
-
-- Sind es Daten aus der Datenbank, die nur bis zum Ende des Requests gebraucht werden?
-  => $::request
-
-- Muss ich von anderen Teilen des Programms lesend drauf zugreifen?
-  => $::request, aber Zugriff über Wrappermethode
-
-
-
-
-Ehemalige globale Variablen
----------------------------
-
-Die folgenden Variablen waren einmal im Programm, und wurden entfernt.
-
-
-$::cgi
-
-- war nötig, weil cookie Methoden nicht als Klassenfunktionen funktionieren
-- Aufruf als Klasse erzeugt Dummyobjekt was im Klassennamespace gehalten wird
-  und über Requestgrenzen leaked
-- liegt jetzt unter $::request->{cgi}
-
-
-$::all_units
-
-- war nötig, weil einige Funktionen in Schleifen zum Teil ein paar hundert mal
-  pro Request eine Liste der Einheiten brauchen, und die als Parameter durch
-  einen Riesenstack von Funktionen geschleift werden müssten.
-- Liegt jetzt unter $::request->{cache}{all_units}
-- Wird nur in AM->retrieve_all_units gesetzt oder gelesen.
-
-
-%::called_subs
-
-- wurde benutzt um callsub deep recursions abzufangen.
-- Wurde entfernt, weil callsub nur einen Bruchteil der möglichen Rekursioenen
-  darstellt, und da nie welche auftreten.
-- komplette recursion protection wurde entfernt.
diff --git a/doc/INSTALL.fcgi b/doc/INSTALL.fcgi
deleted file mode 100644 (file)
index 31ba60f..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-
-Diese Datei ist in Plain Old Documentation geschrieben. Mit
-
-> perldoc INSTALL.fcgi
-
-ist sie deutlich leichter zu lesen.
-
-=encoding utf8
-
-=head1 FastCGI für Lx-Office
-
-=head2 Was ist FastCGI?
-
-Direkt aus L<http://de.wikipedia.org/wiki/FastCGI> kopiert:
-
-  FastCGI ist ein Standard für die Einbindung externer Software zur Generierung
-  dynamischer Webseiten in einem Webserver. FastCGI ist vergleichbar zum Common
-  Gateway Interface (CGI), wurde jedoch entwickelt, um dessen
-  Performance-Probleme zu umgehen.
-
-
-=head2 Warum FastCGI?
-
-Perl Programme (wie Lx-Office eines ist) werden nicht statisch kompiliert.
-Stattdessen werden die Quelldateien bei jedem Start übersetzt, was bei kurzen
-Laufzeiten einen Großteil der Laufzeit ausmacht. Während SQL Ledger einen
-Großteil der Funktionalität in einzelne Module kapselt, um immer nur einen
-kleinen Teil laden zu müssen, ist die Funktionalität von Lx-Office soweit
-gewachsen, dass immer mehr Module auf den Rest des Programms zugreifen.
-Zusätzlich benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
-entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies führt dazu dass
-ein Lx-Office Aufruf der Kernmasken mittlerweile deutlich länger dauert als
-früher, und dass davon 90% für das Laden der Module verwendet wird.
-
-Mit FastCGI werden nun die Module einmal geladen, und danach wird nur die
-eigentliche Programmlogik ausgeführt.
-
-=head2 Kombinationen aus Webservern und Plugin.
-
-Folgende Kombinationen sind getestet:
-
- * Apache 2.2.11 (Ubuntu) und mod_fcgid.
- * Apache 2.2.11 (Ubuntu) und mod_fastcgi.
-
-Dabei wird mod_fcgid empfohlen, weil mod_fastcgi seit geraumer Zeit
-nicht mehr weiter entwickelt wird.
-
-Als Perl Backend wird das Modul FCGI.pm verwendet. Vorsicht: FCGI 0.69 und
-höher ist extrem strict in der Behandlung von Unicode, und verweigert bestimmte
-Eingaben von Lx-Office. Solange diese Probleme nicht behoben sind, muss auf die
-Vorgängerversion FCGI 0.68 ausgewichen werden.
-
-Mit cpan lässt sie sich wie folgt installieren:
-
- force install M/MS/MSTROUT/FCGI-0.68.tar.gz
-
-=head2 Konfiguration des Webservers.
-
-Bevor Sie versuchen eine Lx-Office Installation unter FCGI laufen zu lassen,
-empfliehlt es sich die Installation ersteinmal unter CGI aufzusetzen. FCGI
-macht es nicht einfach Fehler zu debuggen die beim ersten aufsetzen auftreten
-können. Sollte die Installation schon funktionieren, lesen Sie weiter.
-
-Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann unter
-Debian/Ubuntu z.B. mit folgendem Befehl geschehen:
-
-  a2enmod fcgid
-
-bzw.
-
-  a2enmod fastcgi
-
-Die Konfiguration für die Verwendung von Lx-Office mit FastCGI erfolgt
-durch Anpassung der vorhandenen Alias- und Directory-Direktiven. Dabei
-wird zwischen dem Installationspfad von Lx-Office im Dateisystem
-("/path/to/lx-office-erp") und der URL unterschieden, unter der
-Lx-Office im Webbrowser erreichbar ist ("/web/path/to/lx-office-erp").
-
-Folgendes Template funktioniert mit mod_fastcgi:
-
-  AliasMatch ^/web/path/to/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fcgi
-  Alias       /web/path/to/lx-office-erp/          /path/to/lx-office-erp/
-
-  <Directory /path/to/lx-office-erp>
-    AllowOverride All
-    Options ExecCGI Includes FollowSymlinks
-    Order Allow,Deny
-    Allow from All
-  </Directory>
-
-  <DirectoryMatch /path/to/lx-office-erp/users>
-    Order Deny,Allow
-    Deny from All
-  </DirectoryMatch>
-
-Für mod_fcgid muss ein AddHandler ergänzt werden und die erste Zeile geändert werden:
-
-  AddHandler fcgid-script .fpl
-  AliasMatch ^/web/path/to/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
-
-Seit mod_fcgid-Version 2.6.3 gelten sehr kleine Grenzen für die
-maximale Größe eines Requests. Diese sollte wie folgt hochgesetzt werden:
-
-  FcgidMaxRequestLen 10485760
-
-Das ganze sollte dann so aussehen:
-
-  AddHandler fcgid-script .fpl
-  AliasMatch ^/web/path/to/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
-  Alias       /web/path/to/lx-office-erp/          /path/to/lx-office-erp/
-  FcgidMaxRequestLen 10485760
-
-  <Directory /path/to/lx-office-erp>
-    AllowOverride All
-    Options ExecCGI Includes FollowSymlinks
-    Order Allow,Deny
-    Allow from All
-  </Directory>
-
-  <DirectoryMatch /path/to/lx-office-erp/users>
-    Order Deny,Allow
-    Deny from All
-  </DirectoryMatch>
-
-Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle Zugriffe
-auf die einzelnen Scripte werden auf diesen umgeleitet. Dadurch, dass
-zur Laufzeit öfter mal Scripte neu geladen werden, gibt es hier kleine
-Performance-Einbußen.
-
-
-Es ist möglich die gleiche Lx-Office Version parallel unter cgi und fastcgi zu
-betreiben. Dafür bleiben die Directorydirektiven wie oben beschrieben, die URLs
-werden aber umgeleitet:
-
-  # Zugriff über cgi
-  Alias       /web/path/to/lx-office-erp                /path/to/lx-office-erp
-
-  # Zugriff mit mod_fcgid:
-  AliasMatch ^/web/path/to/lx-office-erp-fcgid/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
-  Alias       /web/path/to/lx-office-erp-fcgid/          /path/to/lx-office-erp/
-
-  # Zugriff mit mod_fastcgi:
-  AliasMatch ^/web/path/to/lx-office-erp-fastcgi/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fcgi
-  Alias       /web/path/to/lx-office-erp-fastcgi/          /path/to/lx-office-erp/
-
-Dann ist unter C</web/path/to/lx-office-erp/> die normale Version erreichbar,
-und unter C</web/path/to/lx-office-erp-fcgid/> bzw.
-C</web/path/to/lx-office-erp-fastcgi/> die FastCGI Version.
-
-=head2 Entwicklungsaspekte
-
-Wenn Änderungen in der Konfiguration von Lx-Office gemacht werden, muss der
-Webserver neu gestartet werden.
-
-Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu achten. Dadurch
-dass das Programm in einer Endlosschleife läuft, müssen folgende Aspekte
-geachtet werden:
-
-=head3 Programmende und Ausnahmen: C<warn>, C<die>, C<exit>, C<carp>, C<confess>
-
-Fehler, die dass Programm normalerweise sofort beenden (fatale Fehler), werden
-mit dem FastCGI Dispatcher abgefangen, um das Programm am Laufen zu halten. Man
-kann mit C<die>, C<confess> oder C<carp> Fehler ausgeben, die dann vom Dispatcher
-angezeigt werden. Die Lx-Office eigene C<$::form->error()> tut im Prinzip das
-Gleiche, mit ein paar Extraoptionen. C<warn> und C<exit> hingegen werden nicht
-abgefangen. C<warn> wird direkt nach STDERR, also in Server Log eine Nachricht
-schreiben (sofern in der Konfiguration nicht die Warnungen in das Lx-Office Log
-umgeleitet wurden), und C<exit> wird die Ausführung beenden.
-
-Prinzipiell ist es kein Beinbruch, wenn sich der Prozess beendet, fcgi wird ihn
-sofort neu starten. Allerdings sollte das die Ausnahme sein. Quintessenz: Bitte
-kein C<exit> benutzen, alle anderen Exceptionmechanismen sind ok.
-
-=head3 Globale Variablen
-
-Um zu vermeiden, dass Informationen von einem Request in einen anderen gelangen,
-müssen alle globalen Variablen vor einem Request sauber initialisiert werden.
-Das ist besonders wichtig im C<$::cgi> und C<$::auth> Objekt, weil diese nicht
-gelöscht werden pro Instanz, sondern persistent gehalten werden.
-
-In C<SL::Dispatcher> gibt es einen sauber abgetrennten Block der alle
-kanonischen globalen Variablen listet und erklärt. Bitte keine anderen
-einführen ohne das sauber zu dokumentieren.
-
-Datenbankverbindungen wird noch ein Guide verfasst werden, wie man sicher geht,
-dass man die richtige erwischt.
-
-=head2 Performance und Statistiken
-
-Die kritischen Pfade des Programms sind die Belegmasken, und unter diesen ganz
-besonders die Verkaufsrechnungsmaske. Ein Aufruf der Rechnungsmaske in
-Lx-Office 2.4.3 stable dauert auf einem Core2duo mit 4GB Arbeitsspeicher und
-Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0 sind es je nach Menge der
-definierten Variablen 1-2s. Ab der Moose/Rose::DB Version sind es 5-6s.
-
-Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in den kritischen
-Pfaden, unter 0,15 sonst.
-
-=head2 Bekannte Probleme
-
-=head3 Encoding Awareness
-
-UTF-8 kodierte Installationen sind sehr anfällig gegen fehlerhfate Encodings
-unter FCGI. latin9 Installationen behandeln falsch kodierte Zeichen eher
-unwissend, und geben sie einfach weiter. UTF-8 verweigert bei fehlerhaften
-Programmpfaden kurzerhand das Ausliefern. Es wird noch daran gearbeitet, alle
-Fehler da zu beseitigen.
-
diff --git a/doc/INSTALL.html b/doc/INSTALL.html
deleted file mode 100644 (file)
index 31ccd43..0000000
+++ /dev/null
@@ -1,1191 +0,0 @@
-<html lang="en">
-<head>
-<title>Lx-Office Installationsanleitung</title>
-<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
-<meta name="description" content="Lx-Office Installationsanleitung">
-<meta name="generator" content="makeinfo 4.11">
-<link title="Top" rel="top" href="#Top">
-<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
-<meta http-equiv="Content-Style-Type" content="text/css">
-<style type="text/css"><!--
-  pre.display { font-family:inherit }
-  pre.format  { font-family:inherit }
-  pre.smalldisplay { font-family:inherit; font-size:smaller }
-  pre.smallformat  { font-family:inherit; font-size:smaller }
-  pre.smallexample { font-size:smaller }
-  pre.smalllisp    { font-size:smaller }
-  span.sc    { font-variant:small-caps }
-  span.roman { font-family:serif; font-weight:normal; } 
-  span.sansserif { font-family:sans-serif; font-weight:normal; } 
---></style>
-</head>
-<body>
-<h1 class="settitle">Lx-Office Installationsanleitung</h1>
-   <div class="contents">
-<h2>Table of Contents</h2>
-<ul>
-<li><a name="toc_Top" href="#Top">Inhalt der Anleitung</a>
-<li><a name="toc_Aktuelle-Hinweise" href="#Aktuelle-Hinweise">1 Aktuelle Hinweise</a>
-<li><a name="toc_Ben_00c3_00b6tigte-Software-und-Pakete" href="#Ben_00c3_00b6tigte-Software-und-Pakete">2 Benötigte Software und Pakete</a>
-<ul>
-<li><a href="#Betriebssystem">2.1 Betriebssystem</a>
-<li><a href="#Pakete">2.2 Pakete</a>
-</li></ul>
-<li><a name="toc_Manuelle-Installation-des-Programmpaketes" href="#Manuelle-Installation-des-Programmpaketes">3 Manuelle Installation des Programmpaketes</a>
-<li><a name="toc_Anpassung-der-PostgreSQL_002dKonfiguration" href="#Anpassung-der-PostgreSQL_002dKonfiguration">4 Anpassung der PostgreSQL-Konfiguration</a>
-<ul>
-<li><a href="#Zeichens_00c3_00a4tze_002fdie-Verwendung-von-UTF_002d8">4.1 Zeichensätze/die Verwendung von UTF-8</a>
-<li><a href="#_00c3_0084nderungen-an-Konfigurationsdateien">4.2 Änderungen an Konfigurationsdateien</a>
-<li><a href="#Erweiterung-f_00c3_00bcr-servergespeicherte-Prozeduren">4.3 Erweiterung für servergespeicherte Prozeduren</a>
-<li><a href="#Datenbankbenutzer-anlegen">4.4 Datenbankbenutzer anlegen</a>
-</li></ul>
-<li><a name="toc_Apache_002dKonfiguration" href="#Apache_002dKonfiguration">5 Apache-Konfiguration</a>
-<li><a name="toc_Der-Task_002dServer" href="#Der-Task_002dServer">6 Der Task-Server</a>
-<ul>
-<li><a href="#Konfiguration-des-Task_002dServers">6.1 Verfügbare und notwendige Konfigurationsoptionen</a>
-<li><a href="#Einbinden-in-den-Boot_002dProzess">6.2 Automatisches Starten des Task-Servers beim Booten</a>
-<ul>
-<li><a href="#Einbinden-in-den-Boot_002dProzess">6.2.1 SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora Core)</a>
-<li><a href="#Einbinden-in-den-Boot_002dProzess">6.2.2 Upstart-basierende Systeme (z.B. Ubuntu)</a>
-</li></ul>
-<li><a href="#Prozesskontrolle">6.3 Wie der Task-Server gestartet und beendet wird</a>
-</li></ul>
-<li><a name="toc_Benutzerauthentifizierung-und-Administratorpasswort" href="#Benutzerauthentifizierung-und-Administratorpasswort">7 Benutzerauthentifizierung und Administratorpasswort</a>
-<ul>
-<li><a href="#Grundlagen-zur-Benutzerauthentifizierung">7.1 Grundlagen zur Benutzerauthentifizierung</a>
-<li><a href="#Administratorpasswort">7.2 Administratorpasswort</a>
-<li><a href="#Authentifizierungsdatenbank">7.3 Authentifizierungsdatenbank</a>
-<li><a href="#Passwort_00c3_00bcberpr_00c3_00bcfung">7.4 Passwortüberprüfung</a>
-<li><a href="#Name-des-Session_002dCookies">7.5 Name des Session-Cookies</a>
-<li><a href="#Anlegen-der-Authentifizierungsdatenbank">7.6 Anlegen der Authentifizierungsdatenbank</a>
-</li></ul>
-<li><a name="toc_Benutzer_002d-und-Gruppenverwaltung" href="#Benutzer_002d-und-Gruppenverwaltung">8 Benutzer- und Gruppenverwaltung</a>
-<ul>
-<li><a href="#Zusammenh_00c3_00a4nge">8.1 Zusammenhänge</a>
-<li><a href="#Datenbanken-anlegen">8.2 Datenbanken anlegen</a>
-<li><a href="#Gruppen-anlegen">8.3 Gruppen anlegen</a>
-<li><a href="#Benutzer-anlegen">8.4 Benutzer anlegen</a>
-<li><a href="#Gruppenmitgliedschaften-verwalten">8.5 Gruppenmitgliedschaften verwalten</a>
-<li><a href="#Migration-alter-Installationen">8.6 Migration alter Installationen</a>
-</li></ul>
-<li><a name="toc_Drucken-mit-Lx_002dOffice" href="#Drucken-mit-Lx_002dOffice">9 Drucken mit Lx-Office</a>
-<li><a name="toc_OpenDocument_002dVorlagen" href="#OpenDocument_002dVorlagen">10 OpenDocument-Vorlagen</a>
-<li><a name="toc_Lx_002dOffice-ERP-verwenden" href="#Lx_002dOffice-ERP-verwenden">11 Lx-Office ERP verwenden</a>
-</li></ul>
-</div>
-
-
-
-<div class="node">
-<p><hr>
-<a name="Top"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Aktuelle-Hinweise">Aktuelle Hinweise</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
-
-</div>
-
-<h2 class="unnumbered">Inhalt der Anleitung</h2>
-
-<ul class="menu">
-<li><a accesskey="1" href="#Aktuelle-Hinweise">Aktuelle Hinweise</a>:  Andere Informationsquellen als diese Anleitung
-<li><a accesskey="2" href="#Ben_00c3_00b6tigte-Software-und-Pakete">Benötigte Software und Pakete</a>:  Vorraussetzungen zum Betrieb von Lx-Office
-<li><a accesskey="3" href="#Manuelle-Installation-des-Programmpaketes">Manuelle Installation des Programmpaketes</a>:  Installationsort, Berechtigungen
-<li><a accesskey="4" href="#Anpassung-der-PostgreSQL_002dKonfiguration">Anpassung der PostgreSQL-Konfiguration</a>:  Verschiedene Aspekte der Datenbankkonfiguration
-<li><a accesskey="5" href="#Apache_002dKonfiguration">Apache-Konfiguration</a>:  Einrichtung eines Aliases und Optionen für das Ausführen von CGI-Scripten
-<li><a accesskey="6" href="#Der-Task_002dServer">Der Task-Server</a>:  Konfiguration und Einrichtung des Task-Server-Dämonen
-<li><a accesskey="7" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>:  Einrichtung der Authentifizierungsdatenbank und der Passwortüberprüfung
-<li><a accesskey="8" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>:  Einrichten von Benutzern, Gruppen und Datenbanken
-<li><a accesskey="9" href="#Drucken-mit-Lx_002dOffice">Drucken mit Lx-Office</a>:  Voraussetzungen, Einrichtung und Fehlerdiagnose
-<li><a href="#OpenDocument_002dVorlagen">OpenDocument-Vorlagen</a>:  Wichtige Hinweise zum Erstellen und zur Verwendung von Dokumentenvorlagen
-<li><a href="#Lx_002dOffice-ERP-verwenden">Lx-Office ERP verwenden</a>:  Die URLs zur Anmeldung und Administration
-</ul>
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Aktuelle-Hinweise"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Ben_00c3_00b6tigte-Software-und-Pakete">Benötigte Software und Pakete</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Top">Top</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">1 Aktuelle Hinweise</h2>
-
-<p>Aktuelle Installations- und Konfigurationshinweise gibt es:
-
-     <ul>
-<li>auf der Lx-Office Homepage unter <a href="http://lx-office.org/index.php?id=dokumentation">http://lx-office.org/index.php?id=dokumentation</a>
-
-     <li>im Lx-Office-Wiki unter Dokumentation (<a href="http://wiki.lx-office.org/index.php/Lx-Office_ERP">http://wiki.lx-office.org/index.php/Lx-Office_ERP</a>)
-
-     <li>im Lx-Office-Forum: <a href="http://www.lx-office.org/forum/">http://www.lx-office.org/forum/</a>
-</ul>
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Ben%c3%b6tigte-Software-und-Pakete"></a>
-<a name="Ben_00c3_00b6tigte-Software-und-Pakete"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Manuelle-Installation-des-Programmpaketes">Manuelle Installation des Programmpaketes</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Aktuelle-Hinweise">Aktuelle Hinweise</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">2 Benötigte Software und Pakete</h2>
-
-<ul class="menu">
-<li><a accesskey="1" href="#Betriebssystem">Betriebssystem</a>:  Unterstützte Betriebsysteme und Hinweise für ältere Systeme
-<li><a accesskey="2" href="#Pakete">Pakete</a>:  Benötigte Software und Perlpakete sowie deren Quellen
-</ul>
-
-<div class="node">
-<p><hr>
-<a name="Betriebssystem"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Pakete">Pakete</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Ben_00c3_00b6tigte-Software-und-Pakete">Benötigte Software und Pakete</a>
-
-</div>
-
-<h3 class="section">2.1 Betriebssystem</h3>
-
-<p>Lx-Office ist für Linux konzipiert, und sollte auf jedem unixoiden
-Betriebssystem zum Laufen zu kriegen sein. Getestet ist diese Version im
-speziellen auf Debian und Ubuntu, grundsätzlich wurde bei der Auswahl der
-Pakete aber darauf Rücksicht genommen, dass es ohne große Probleme auf den
-derzeit aktuellen verbreiteten Distributionen läuft.
-
-   <p>Anfang 2011 sind das folgende Systeme:
-
-     <ul>
-<li>Ubuntu 8.04 LTS Hardy Heron
-<li>Ubuntu 9.10 Karmic Koala
-<li>Ubuntu 10.04 Lucid Lynx
-<li>Ubuntu 10.10 Maverick Meerkat
-<li>Debian 5.0 Lenny
-<li>Debian 6.0 Squeeze
-<li>openSUSE 11.2
-<li>openSUSE 11.3
-<li>SuSE Linux Enterprice Server 11
-<li>Fedora 13
-<li>Fedora 14
-</ul>
-
-   <p>Für die debianoiden Betriebssysteme existiert ein .deb, das deutlich einfacher
-zu installieren ist.
-
-   <p>Ubuntu 8.04 LTS hat zusätzlich die Schwierigkeit, dass die Module im Archiv
-recht alt sind, und das viele der benötigten Module nicht einfach zu
-installieren sind. Dafür sollte es kurz nach dem Release ein eigenes .deb
-geben.
-
-   <p>Alternativ dazu kann die normale Installation durchgeführt werden
-(siehe <a href="#Manuelle-Installation-des-Programmpaketes">Manuelle Installation des Programmpaketes</a>), wenn vorher ein
-Kompatibilitätspaket installiert wird, das die fehlenden Pakete bereitstellt. 
-Das Paket ist auf <a href="https://sourceforge.net/projects/lx-office/files/Lx-Office%20ERP/2.6.2/">Sourceforge</a> unter dem Namen <code>lx-erp-perl-libs-compat-v2.tar.gz</code> hinterlegt.
-
-   <p>Zur Installation das Paket in das entpackte Lx-Office Verzeichnis entpacken:
-
-   <p><code>tar xzf lx-erp-perl-libs-compat-v2.tar.gz /path/to/lx-office/</code>
-
-   <p>Zusätzlich müssen dann noch die folgenden Pakete installiert weerden
-
-   <p><code>libbit-vector-perl libsub-exporter-perl libclone-perl libclass-factory-util-perl</code>
-
-   <p>Danach sollte der Installationscheck (siehe <a href="#Pakete">Pakete</a>) die enthaltenen Pakete erkennen.
-
-<div class="node">
-<p><hr>
-<a name="Pakete"></a>
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Betriebssystem">Betriebssystem</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Ben_00c3_00b6tigte-Software-und-Pakete">Benötigte Software und Pakete</a>
-
-</div>
-
-<h3 class="section">2.2 Pakete</h3>
-
-<p>Zum Betrieb von Lx-Office werden zwingend ein Webserver (meist Apache)
-und ein Datenbankserver (PostgreSQL, mindestens v8.2) benötigt.
-
-   <p>Zusätzlich benötigt Lx-Office die folgenden Perl-Pakete, die nicht Bestandteil
-einer Standard-Perl-Installation sind:
-
-     <ul>
-<li>parent
-<li>Archive::Zip
-<li>Config::Std
-<li>DateTime
-<li>DBI
-<li>DBD::Pg
-<li>Email::Address
-<li>JSON
-<li>List::MoreUtils
-<li>Params::Validate
-<li>PDF::API2
-<li>Rose::Object
-<li>Rose::DB
-<li>Rose::DB::Object
-<li>Template
-<li>Text::CSV_XS
-<li>Text::Iconv
-<li>URI
-<li>XML::Writer
-<li>YAML
-</ul>
-
-   <p>Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete hinzugekommen, <code>URI</code>
-und <code>XML::Writer</code> sind notwendig. Ohne startet Lx-Office nicht.
-
-   <p>Gegenüber Version 2.6.1 sind <code>parent</code>, <code>DateTime</code>,
-<code>Rose::Object</code>, <code>Rose::DB</code> und <code>Rose::DB::Object</code> neu
-hinzugekommen. <code>IO::Wrap</code> wurde entfernt.
-
-   <p>Gegenüber Version 2.6.3 ist <code>JSON</code> neu hinzugekommen.
-
-   <p><code>Email::Address</code> und <code>List::MoreUtils</code> sind schon länger feste
-Abhängigkeiten, wurden aber bisher mit Lx-Office mitgeliefert.  Beide sind auch
-in 2.6.1 weiterhin mit ausgeliefert, wurden in einer zukünftigen Version aber
-aus dem Paket entfernt werden. Es wird empfohlen diese Module zusammen mit den
-anderen als Bibliotheken zu installieren.
-
-   <p>Die zu installierenden Pakete können in den verschiedenen Distributionen unterschiedlich heißen.
-
-   <p>Für Debian oder Ubuntu benötigen Sie diese Pakete:
-
-   <p><code>apache2 postgresql libparent-perl libarchive-zip-perl libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl libemail-address-perl liblist-moreutils-perl libpdf-api2-perl librose-object-perl librose-db-perl librose-db-object-perl libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-perl libconfig-std-perl libparams-validate-perl libjson-perl</code>
-
-   <p>Für Fedora Core benötigen Sie diese Pakete:
-
-   <p><code>httpd postgresql-server perl-parent perl-DateTime perl-DBI perl-DBD-Pg perl-Email-Address perl-List-MoreUtils perl-PDF-API2 perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML</code>
-
-   <p>Für OpenSuSE benötigen Sie diese Pakete:
-
-   <p><code>apache2 postgresql-server perl-Archive-Zip perl-DateTime perl-DBI perl-DBD-Pg perl-MailTools perl-List-MoreUtils perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML</code>
-
-   <p>Bei openSuSE 11 ist <code>parent</code> bereits enthalten, und braucht nicht nachinstalliert werden. Die <code>Rose::*</code> Pakete sind derzeit nicht für SuSE gepackt, und müssen anderweitig nachinstalliert werden.
-
-   <p>Lx-Office enthält ein Script, mit dem überprüft werden kann, ob alle
-benötigten Perl-Module installiert sind. Der Aufruf lautet wie folgt:
-
-   <p><code>./scripts/installation_check.pl</code>
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Manuelle-Installation-des-Programmpaketes"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Anpassung-der-PostgreSQL_002dKonfiguration">Anpassung der PostgreSQL-Konfiguration</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Ben_00c3_00b6tigte-Software-und-Pakete">Benötigte Software und Pakete</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">3 Manuelle Installation des Programmpaketes</h2>
-
-<p>Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.2.tgz) wird im
-Dokumentenverzeichnis des Webservers (z.B. <code>/var/www/html/</code>,
-<code>/srv/www/htdocs</code> oder <code>/var/www/</code>) entpackt:
-
-   <p><code>cd /var/www
-<br>
-tar xvzf lxoffice-erp-2.6.2.tgz</code>
-
-   <p>Verändern Sie evtl. noch den Namen des Verzeichnisses mit
-
-   <p><code>mv lxoffice-erp/ lx-erp/</code>
-
-   <p>Alternativ können Sie auch einen Alias in der Webserverkonfiguration
-benutzen, um auf das tatsächliche Installationsverzeichnis zu
-verweisen.
-
-   <p>Die Verzeichnisse <code>users</code>, <code>spool</code> und <code>webdav</code> müssen
-für den Benutzer beschreibbar sein, unter dem der Webserver läuft. Die
-restlichen Dateien müssen für diesen Benutzer lesbar sein. Der
-Benutzername ist bei verschiedenen Distributionen unterschiedlich
-(z.B. bei Debian/Ubuntu <code>www-data</code>, bei Fedora core <code>apache</code>
-oder bei OpenSuSE <code>wwwrun</code>).
-
-   <p>Der folgende Befehl ändert den Besitzer für die oben genannten
-Verzeichnisse auf einem Debian/Ubuntu-System:
-
-   <p><code>chown -R www-data lx-office-erp/users lx-office-erp/spool lx-office-erp/webdav</code>
-
-   <p>Weiterhin muss der Webserver-Benutzer im Verzeichnis <code>templates</code> Verzeichnisse für
-jeden neuen Benutzer, der in lx-office angelegt wird, anlegen dürfen:
-
-   <p><code>chgrp www-data lx-office-erp/templates; chmod g+w lx-office-erp/templates</code>
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Anpassung-der-PostgreSQL-Konfiguration"></a>
-<a name="Anpassung-der-PostgreSQL_002dKonfiguration"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Apache_002dKonfiguration">Apache-Konfiguration</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Manuelle-Installation-des-Programmpaketes">Manuelle Installation des Programmpaketes</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">4 Anpassung der PostgreSQL-Konfiguration</h2>
-
-<p>PostgreSQL muss auf verschiedene Weisen angepasst werden.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Zeichens_00c3_00a4tze_002fdie-Verwendung-von-UTF_002d8">Zeichensätze/die Verwendung von UTF-8</a>:  Was bei der Verwendung von UTF-8 zu beachten ist
-<li><a accesskey="2" href="#g_t_00c3_0084nderungen-an-Konfigurationsdateien">Änderungen an Konfigurationsdateien</a>:  Anpassungen für Anmeldung am Server und Featureunterstützung
-<li><a accesskey="3" href="#Erweiterung-f_00c3_00bcr-servergespeicherte-Prozeduren">Erweiterung für servergespeicherte Prozeduren</a>:  Lx-Office benutzt servergespeicherte Prozeduren
-<li><a accesskey="4" href="#Datenbankbenutzer-anlegen">Datenbankbenutzer anlegen</a>:  Um den Zugriff besser zu reglementieren
-</ul>
-
-<div class="node">
-<p><hr>
-<a name="Zeichens%c3%a4tze%2fdie-Verwendung-von-UTF-8"></a>
-<a name="Zeichens_00c3_00a4tze_002fdie-Verwendung-von-UTF_002d8"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#g_t_00c3_0084nderungen-an-Konfigurationsdateien">Änderungen an Konfigurationsdateien</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Anpassung-der-PostgreSQL_002dKonfiguration">Anpassung der PostgreSQL-Konfiguration</a>
-
-</div>
-
-<h3 class="section">4.1 Zeichensätze/die Verwendung von UTF-8</h3>
-
-<p>Lx-Office kann komplett mit UTF-8 als Zeichensatz verwendet
-werden. Dabei gibt es zwei Punkte zu beachten: PostgreSQL muss in
-Version 8.0 oder neuer benutzt werden, und der
-PostgreSQL-Datenbankcluster muss ebenfalls mit UTF-8 als Locale
-angelegt worden sein.
-
-   <p>Dieses ist kann überprüft werden: ist das Encoding der Datenbank
-&ldquo;template1&rdquo; &ldquo;UTF8&rdquo;, so kann auch Lx-Office mit UTF-8 betrieben
-werden. Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
-UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
-Ubuntu kann dies z.B. mit dem folgenden Befehl getan werden:
-
-   <p><code>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername</code>
-
-   <p>Die Datenbankversionsnummer muss an die tatsächlich verwendete
-Versionsnummer angepasst werden.
-
-   <p>Unter anderen Distributionen gibt es ähnliche Methoden.
-
-   <p>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und ist
-ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
-Lx-Office mit ISO-8859-15 als Encoding betrieben werden.
-
-   <p>Das Encoding einer Datenbank kann in <code>psql</code> mit <code>\l</code> geprüft werden.
-
-<div class="node">
-<p><hr>
-<a name="%c3%84nderungen-an-Konfigurationsdateien"></a>
-<a name="g_t_00c3_0084nderungen-an-Konfigurationsdateien"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Erweiterung-f_00c3_00bcr-servergespeicherte-Prozeduren">Erweiterung für servergespeicherte Prozeduren</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Zeichens_00c3_00a4tze_002fdie-Verwendung-von-UTF_002d8">Zeichensätze/die Verwendung von UTF-8</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Anpassung-der-PostgreSQL_002dKonfiguration">Anpassung der PostgreSQL-Konfiguration</a>
-
-</div>
-
-<h3 class="section">4.2 Änderungen an Konfigurationsdateien</h3>
-
-<p>In der Datei <code>postgresql.conf</code>, die je nach Distribution in
-verschiedenen Verzeichnissen liegen kann
-(z.B. <code>/var/lib/pgsql/data/</code> oder <code>/etc/postgresql/</code>, muss
-sichergestellt werden, dass TCP/IP-Verbindungen aktiviert sind. Das
-Verhalten wird über den Parameter <code>listen_address</code>
-gesteuert. Laufen PostgreSQL und Lx-Office auf demselben Rechner, so
-kann dort der Wert <code>localhost</code> verwendet werden. Andernfalls
-müssen Datenbankverbindungen auch von anderen Rechnern aus zugelassen
-werden, was mit dem Wert \<code>*</code> geschieht.
-
-   <p>In der Datei <code>pg_hba.conf</code>, die im gleichen Verzeichnis wie die
-<code>postgresql.conf</code> zu finden sein sollte, müssen die
-Berichtigungen für den Zugriff geändert werden. Hier gibt es mehrere
-Möglichkeiten. Eine besteht darin, lokale Verbindungen immer
-zuzulassen
-
-   <p><code>local all all trust
-<br>
-host all all 127.0.0.1 255.0.0.0 trust</code>
-
-   <p>Besser ist es, für eine bestimmte Datenbank Zugriff nur per Passwort
-zuzulassen. Beispielsweise:
-
-   <p><code>local   all         lxoffice                                           password
-<br>
-host    all         lxoffice      127.0.0.1         255.255.255.255    password</code>
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Erweiterung-f%c3%bcr-servergespeicherte-Prozeduren"></a>
-<a name="Erweiterung-f_00c3_00bcr-servergespeicherte-Prozeduren"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Datenbankbenutzer-anlegen">Datenbankbenutzer anlegen</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#g_t_00c3_0084nderungen-an-Konfigurationsdateien">Änderungen an Konfigurationsdateien</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Anpassung-der-PostgreSQL_002dKonfiguration">Anpassung der PostgreSQL-Konfiguration</a>
-
-</div>
-
-<h3 class="section">4.3 Erweiterung für servergespeicherte Prozeduren</h3>
-
-<p>In der Datenbank <code>template1</code> muss die Unterstützung für servergespeicherte
-Prozeduren eingerichet werden. Melden Sie sich dafür als Benutzer &ldquo;postgres&rdquo;
-an der Datenbank an, und führen Sie die folgenden Kommandos aus:
-
-   <p><code>create language 'plpgsql';</code>
-
-   <p>Achtung: In älteren Postgresversionen (vor 8.0) muss der Handler für die
-Sprache manuell anlelegt werden, diese Versionen werden aber nicht mehr
-offiziell von Lx-Office unterstützt. Dafür dann die folgenden Kommandos:
-
-   <p><code>create function plpgsql_call_handler () returns opaque as '/usr/lib/pgsql/plpgsql.so' language 'c';
-<br>
-create language 'plpgsql' handler plpgsql_call_handler lancompiler 'pl/pgsql';</code>
-
-   <p>Bitte beachten Sie, dass der Pfad zur Datei <code>plpgsql.so</code> von Distribution
-zu Distribution verschiedlich sein kann. Bei Debian/Ubuntu befindet sie sich
-unter <code>/usr/lib/postgresql/lib/plpgsql.so</code>.
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Datenbankbenutzer-anlegen"></a>
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Erweiterung-f_00c3_00bcr-servergespeicherte-Prozeduren">Erweiterung für servergespeicherte Prozeduren</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Anpassung-der-PostgreSQL_002dKonfiguration">Anpassung der PostgreSQL-Konfiguration</a>
-
-</div>
-
-<h3 class="section">4.4 Datenbankbenutzer anlegen</h3>
-
-<p>Wenn Sie nicht den Datenbanksuperuser &ldquo;postgres&rdquo; zum Zugriff
-benutzen wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer
-anlegen. Ein Beispiel, wie Sie einen neuen Benutzer anlegen können:
-
-   <p><code>su - postgres
-<br>
-createuser -d -P lxoffice</code>
-
-   <p>Wenn Sie später einen Datenbankzugriff konfigurieren, verändern Sie
-den evtl. voreingestellten Benutzer &ldquo;postgres&rdquo; auf &ldquo;lxoffice&rdquo;
-bzw. den hier gewählten Benutzernamen.
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Apache-Konfiguration"></a>
-<a name="Apache_002dKonfiguration"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Der-Task_002dServer">Der Task-Server</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Anpassung-der-PostgreSQL_002dKonfiguration">Anpassung der PostgreSQL-Konfiguration</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">5 Apache-Konfiguration</h2>
-
-<p>Hinweis: Für einen deutlichen Performanceschub sorgt die Ausführung
-mittels FCGI. Die Einrichtung wird ausführlich in der Datei
-<code>INSTALL.fcgi</code> beschrieben.
-
-   <p>Der Zugriff auf das Programmverzeichnis muss in der Apache
-Webserverkonfigurationsdatei <code>httpd.conf</code> eingestellt
-werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
-anderen Datei hinzu, die beim Starten des Webservers eingelesen wird:
-
-   <p><code><br>
-AddHandler cgi-script .pl
-<br>
-Alias /lx-erp/ /var/www/lx-erp/
-<br>
-&lt;Directory /var/www/lx-erp&gt;
-<br>
-  Options ExecCGI Includes FollowSymlinks
-<br>
-&lt;/Directory&gt;
-<br>
-<br>
-&lt;Directory /var/www/lx-erp/users&gt;
-<br>
-  Order Deny,Allow
-<br>
-  Deny from All
-<br>
-&lt;/Directory&gt;
-<br>
-</code>
-
-   <p>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher das
-Lx-Office-Archiv entpacket haben.
-
-   <p>Achtung: Vor den einzelnen Optionen muss bei einigen Distributionen ein
-Plus &lsquo;<samp><span class="samp">+</span></samp>&rsquo; gesetzt werden.
-
-   <p>Auf einigen Webservern werden manchmal die Grafiken und Style-Sheets
-nicht ausgeliefert. In solchen Fällen hat es oft geholfen, die
-folgende Option in die Konfiguration aufzunehmen:
-
-   <p><code>EnableSendfile Off</code>
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Der-Task-Server"></a>
-<a name="Der-Task_002dServer"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Apache_002dKonfiguration">Apache-Konfiguration</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">6 Der Task-Server</h2>
-
-<p>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
-regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese
-zu festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser
-Prozess wird bisher nur für die Erzeugung der wiederkehrenden
-Rechnungen benutzt, wird aber in Zukunft deutlich mehr Aufgaben
-übertragen bekommen.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Konfiguration-des-Task_002dServers">Konfiguration des Task-Servers</a>:  Verfügbare und notwendige Konfigurationsoptionen
-<li><a accesskey="2" href="#Prozesskontrolle">Prozesskontrolle</a>:  Wie der Task-Server gestartet und beendet wird
-<li><a accesskey="3" href="#Einbinden-in-den-Boot_002dProzess">Einbinden in den Boot-Prozess</a>:  Automatisches Starten des Task-Servers beim Booten
-</ul>
-
-<div class="node">
-<p><hr>
-<a name="Konfiguration-des-Task-Servers"></a>
-<a name="Konfiguration-des-Task_002dServers"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Prozesskontrolle">Prozesskontrolle</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Der-Task_002dServer">Der Task-Server</a>
-
-</div>
-
-<h3 class="section">6.1 Verfügbare und notwendige Konfigurationsoptionen</h3>
-
-<p>Die Konfiguration erfolgt über den Abschnitt <code>[task_server]</code> in
-der Datei <samp><span class="file">config/lx_office.conf</span></samp>. Die dort verfügbaren Optionen
-sind:
-
-     <ul>
-<li><code>login</code>: gültiger Lx-Office-Benutzername, der benutzt wird, um die zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss in der Administration angelegt werden. Diese Option muss angegeben werden. 
-<li><code>run_as</code>: Wird der Server vom Systembenutzer <code>root</code> gestartet, so wechselt er auf den mit <code>run_as</code> angegebenen Systembenutzer. Der Systembenutzer muss dieselben Lese- und Schreibrechte haben, wie auch der Webserverbenutzer (siehe siehe <a href="#Manuelle-Installation-des-Programmpaketes">Manuelle Installation des Programmpaketes</a>). Daher ist es sinnvoll, hier denselben Systembenutzer einzutragen, unter dem auch der Webserver läuft. 
-<li><code>debug</code>: Schaltet Debug-Informationen an und aus. 
-</ul>
-
-<div class="node">
-<p><hr>
-<a name="Einbinden-in-den-Boot-Prozess"></a>
-<a name="Einbinden-in-den-Boot_002dProzess"></a>
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Prozesskontrolle">Prozesskontrolle</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Der-Task_002dServer">Der Task-Server</a>
-
-</div>
-
-<h3 class="section">6.2 Automatisches Starten des Task-Servers beim Booten</h3>
-
-<p>Der Task-Server verhält sich von seinen Optionen her wie ein reguläres
-SystemV-kompatibles Boot-Script. Außerdem wechselt er beim Starten
-automatisch in das Lx-Office-Installationsverzeichnis.
-
-   <p>Deshalb ist es möglich, ihn durch Setzen eines symbolischen Links aus
-einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
-einzubinden. Da das bei neueren Linux-Distributionen aber nicht
-zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
-anstelle eines symbolischen Links verwendet werden können.
-
-<h4 class="subsection">6.2.1 SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora Core)</h4>
-
-<p>Kopieren Sie die Datei
-<samp><span class="file">scripts/boot/system-v/lx-office-task-server</span></samp> nach
-<samp><span class="file">/etc/init.d/lx-office-task-server</span></samp>. Passen Sie in der kopierten
-Datei den Pfad zum Task-Server an (Zeile <code>DAEMON=....</code>). Binden
-Sie das Script in den Boot-Prozess ein. Dies ist distributionsabhängig:
-
-     <ul>
-<li>Debian-basierende Systeme:
-<br>
-<code>update-rc.d lx-office-task-server defaults
-<br>
-# Nur bei Debian Squeeze und neuer:
-<br>
-insserv lx-office-task-server</code>
-<li>OpenSuSE und Fedora Core:
-<br>
-<code>chkconfig --add lx-office-task-server</code>
-</ul>
-
-   <p>Danach kann der Task-Server mit dem folgenden Befehl gestartet werden:
-<code>/etc/init.d/lx-office-task-server start</code>
-
-<h4 class="subsection">6.2.2 Upstart-basierende Systeme (z.B. Ubuntu)</h4>
-
-<p>Kopieren Sie die Datei
-<samp><span class="file">scripts/boot/upstart/lx-office-task-server.conf</span></samp> nach
-<samp><span class="file">/etc/init/lx-office-task-server.conf</span></samp>. Passen Sie in der kopierten
-Datei den Pfad zum Task-Server an (Zeile <code>exec ....</code>).
-
-   <p>Danach kann der Task-Server mit dem folgenden Befehl gestartet werden:
-<code>service lx-office-task-server start</code>
-
-<div class="node">
-<p><hr>
-<a name="Prozesskontrolle"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Einbinden-in-den-Boot_002dProzess">Einbinden in den Boot-Prozess</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Konfiguration-des-Task_002dServers">Konfiguration des Task-Servers</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Der-Task_002dServer">Der Task-Server</a>
-
-</div>
-
-<h3 class="section">6.3 Wie der Task-Server gestartet und beendet wird</h3>
-
-<p>Der Task-Server wird wie folgt kontrolliert:
-
-   <p><code>./scripts/task_server.pl Befehl</code>
-
-   <p><code>Befehl</code> ist dabei eine der folgenden Optionen:
-
-     <ul>
-<li><code>start</code> startet eine neue Instanz des Task-Servers. Die Prozess-ID wird innerhalb des <samp><span class="file">users</span></samp>-Verzeichnisses abgelegt. 
-<li><code>stop</code> beendet einen laufenden Task-Server. 
-<li><code>restart</code> beendet und startet ihn neu. 
-<li><code>status</code> berichtet, ob der Task-Server läuft. 
-</ul>
-
-   <p>Der Task-Server wechselt beim Starten automatisch in das Lx-Office-Installationsverzeichnis.
-
-   <p>Dieselben Optionen können auch für die SystemV-basierenden
-Runlevel-Scripte benutzt werden (siehe oben).
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Benutzerauthentifizierung-und-Administratorpasswort"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Der-Task_002dServer">Der Task-Server</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">7 Benutzerauthentifizierung und Administratorpasswort</h2>
-
-<p>Informationen über die Einrichtung der Benutzerauthentifizierung, über
-die Verwaltung von Gruppen und weitere Einstellungen
-
-<ul class="menu">
-<li><a accesskey="1" href="#Grundlagen-zur-Benutzerauthentifizierung">Grundlagen zur Benutzerauthentifizierung</a>:  Verfügbare Methoden, Name der Konfigurationsdatei
-<li><a accesskey="2" href="#Administratorpasswort">Administratorpasswort</a>:  Wo das Administratorpasswort gesetzt werden kann
-<li><a accesskey="3" href="#Authentifizierungsdatenbank">Authentifizierungsdatenbank</a>:  Verbindungseinstellungen zur Authentifizierungsdatenbank
-<li><a accesskey="4" href="#Passwort_00c3_00bcberpr_00c3_00bcfung">Passwortüberprüfung</a>:  Einstellungen zur Überprüfung der Benutzerpasswörter
-<li><a accesskey="5" href="#Name-des-Session_002dCookies">Name des Session-Cookies</a>:  Ändern des Cookie-Namens bei Verwendung mehrerer Lx-Office-Installationen auf einem Server
-<li><a accesskey="6" href="#Anlegen-der-Authentifizierungsdatenbank">Anlegen der Authentifizierungsdatenbank</a>:  Wie die Authentifizierungsdatenbank angelegt wird
-</ul>
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Grundlagen-zur-Benutzerauthentifizierung"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Administratorpasswort">Administratorpasswort</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>
-
-</div>
-
-<h3 class="section">7.1 Grundlagen zur Benutzerauthentifizierung</h3>
-
-<p>Lx-Office verwaltet die Benutzerinformationen in einer Datenbank, die
-im folgenden &ldquo;Authentifizierungsdatenbank&rdquo; genannt wird. Für jeden
-Benutzer kann dort eine eigene Datenbank für die eigentlichen
-Finanzdaten hinterlegt sein. Diese beiden Datenbanken können, müssen
-aber nicht unterschiedlich sein.
-
-   <p>Im einfachsten Fall gibt es für Lx-Office nur eine einzige Datenbank,
-in der sowohl die Benutzerinformationen als auch die Daten abgelegt
-werden.
-
-   <p>Zusätzlich ermöglicht es Lx-Office, dass die Benutzerpasswörter
-entweder gegen die Authentifizierungsdatenbank oder gegen einen
-LDAP-Server überprüft werden.
-
-   <p>Welche Art der Passwortüberprüfung Lx-Office benutzt und wie Lx-Office
-die Authentifizierungsdatenbank erreichen kann, wird in der
-Konfigurationsdatei <samp><span class="file">config/lx_office.conf</span></samp> festgelegt. Diese
-muss bei der Installation und bei einem Upgrade von einer Version vor
-v2.6.0 angelegt werden. Eine Beispielkonfigurationsdatei
-<samp><span class="file">config/lx_office.conf.default</span></samp> existiert, die als Vorlage
-benutzt werden kann.
-
-<div class="node">
-<p><hr>
-<a name="Administratorpasswort"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Authentifizierungsdatenbank">Authentifizierungsdatenbank</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Grundlagen-zur-Benutzerauthentifizierung">Grundlagen zur Benutzerauthentifizierung</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>
-
-</div>
-
-<h3 class="section">7.2 Administratorpasswort</h3>
-
-<p>Das Passwort, das zum Zugriff auf das Aministrationsinterface benutzt wird,
-wird ebenfalls in dieser Datei gespeichert. Es kann auch nur dort und nicht
-mehr im Administrationsinterface selber geändert werden. Der Parameter dazu
-heißt <code>$self-&gt;{admin_password}</code>.
-
-<div class="node">
-<p><hr>
-<a name="Authentifizierungsdatenbank"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Passwort_00c3_00bcberpr_00c3_00bcfung">Passwortüberprüfung</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Administratorpasswort">Administratorpasswort</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>
-
-</div>
-
-<h3 class="section">7.3 Authentifizierungsdatenbank</h3>
-
-<p>Die Verbindung zur Authentifizierungsdatenbank wird mit den Parametern
-in <code>$self-&gt;{DB_config}</code> konfiguriert. Hier sind die folgenden
-Parameter anzugeben:
-
-     <ul>
-<li>&lsquo;<samp><span class="samp">host</span></samp>&rsquo; &ndash; Der Rechnername oder die IP-Adresse des Datenbankservers
-<li>&lsquo;<samp><span class="samp">port</span></samp>&rsquo; &ndash; Die Portnummer des Datenbankservers, meist 5432
-<li>&lsquo;<samp><span class="samp">db</span></samp>&rsquo; &ndash; Der Name der Authentifizierungsdatenbank
-<li>&lsquo;<samp><span class="samp">user</span></samp>&rsquo; &ndash; Der Benutzername, mit dem sich Lx-Office beim Datenbankserver anmeldet (z.B. &ldquo;postgres&rdquo;)
-<li>&lsquo;<samp><span class="samp">password</span></samp>&rsquo; &ndash; Das Passwort für den Datenbankbenutzer
-</ul>
-
-   <p>Die Datenbank muss noch nicht existieren. Lx-Office kann sie
-automatisch anlegen (mehr dazu siehe unten).
-
-<div class="node">
-<p><hr>
-<a name="Passwort%c3%bcberpr%c3%bcfung"></a>
-<a name="Passwort_00c3_00bcberpr_00c3_00bcfung"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Name-des-Session_002dCookies">Name des Session-Cookies</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Authentifizierungsdatenbank">Authentifizierungsdatenbank</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>
-
-</div>
-
-<h3 class="section">7.4 Passwortüberprüfung</h3>
-
-<p>Lx-Office unterstützt Passwortüberprüfung auf zwei Arten: gegen die
-Authentifizierungsdatenbank und gegen einen externen LDAP- oder
-Active-Directory-Server. Welche davon benutzt wird, regelt der
-Parameter <code>$self-&gt;{module}</code>.
-
-   <p>Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank
-gespeichert werden, so muss der Parameter <code>$self-&gt;{module}</code> den
-Wert &lsquo;<samp><span class="samp">DB</span></samp>&rsquo; enthalten. In diesem Fall können sowohl der
-Administrator als auch die Benutzer selber ihre Psaswörter in
-Lx-Office ändern.
-
-   <p>Soll hingegen ein externer LDAP- oder Active-Directory-Server benutzt
-werden, so muss der Parameter <code>$self-&gt;{module}</code> auf &lsquo;<samp><span class="samp">LDAP</span></samp>&rsquo;
-gesetzt werden. In diesem Fall müssen zusätzliche Informationen über
-den LDAP-Server in <code>$self-&gt;{LDAP_config}</code> angegeben werden:
-
-     <ul>
-<li>&lsquo;<samp><span class="samp">host</span></samp>&rsquo; &ndash; Der Rechnername oder die IP-Adresse des LDAP- oder Active-Directory-Servers. Diese Angabe ist zwingend erforderlich. 
-<li>&lsquo;<samp><span class="samp">port</span></samp>&rsquo; &ndash; Die Portnummer des LDAP-Servers; meist 389. 
-<li>&lsquo;<samp><span class="samp">tls</span></samp>&rsquo; &ndash; Wenn Verbindungsverschlüsselung gewünscht ist, so diesen Wert auf &lsquo;<samp><span class="samp">1</span></samp>&rsquo; setzen, andernfalls auf &lsquo;<samp><span class="samp">0</span></samp>&rsquo; belassen
-<li>&lsquo;<samp><span class="samp">attribute</span></samp>&rsquo; &ndash; Das LDAP-Attribut, in dem der Benutzername steht, den der Benutzer eingegeben hat. Für Active-Directory-Server
-  ist dies meist &lsquo;<samp><span class="samp">sAMAccountName</span></samp>&rsquo;, für andere LDAP-Server hingegen &lsquo;<samp><span class="samp">uid</span></samp>&rsquo;. Diese Angabe ist zwingend erforderlich. 
-<li>&lsquo;<samp><span class="samp">base_dn</span></samp>&rsquo; &ndash; Der Abschnitt des LDAP-Baumes, der durchsucht werden soll. Diese Angabe ist zwingend erforderlich. 
-<li>&lsquo;<samp><span class="samp">filter</span></samp>&rsquo; &ndash; Ein optionaler LDAP-Filter. Enthält dieser Filter das Wort <code>&lt;%login%&gt;</code>, so wird dieses durch den vom Benutzer
-  eingegebenen Benutzernamen ersetzt. Andernfalls wird der LDAP-Baum nach einem Element durchsucht, bei dem das oben angegebene Attribut
-  mit dem Benutzernamen identisch ist. 
-<li>&lsquo;<samp><span class="samp">bind_dn</span></samp>&rsquo; und &lsquo;<samp><span class="samp">bind_password</span></samp>&rsquo; &ndash; Wenn der LDAP-Server eine Anmeldung erfordert, bevor er durchsucht werden kann (z.B. ist dies bei
-  Active-Directory-Servern der Fall), so kann diese hier angegeben werden. Für Active-Directory-Server kann als &lsquo;<samp><span class="samp">bind_dn</span></samp>&rsquo; entweder eine
-  komplette LDAP-DN wie z.B. &lsquo;<samp><span class="samp">cn=Martin Mustermann,cn=Users,dc=firmendomain</span></samp>&rsquo; auch nur der volle Name des Benutzers
-  eingegeben werden; in diesem Beispiel also &lsquo;<samp><span class="samp">Martin Mustermann</span></samp>&rsquo;. 
-</ul>
-
-<div class="node">
-<p><hr>
-<a name="Name-des-Session-Cookies"></a>
-<a name="Name-des-Session_002dCookies"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Anlegen-der-Authentifizierungsdatenbank">Anlegen der Authentifizierungsdatenbank</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Passwort_00c3_00bcberpr_00c3_00bcfung">Passwortüberprüfung</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>
-
-</div>
-
-<h3 class="section">7.5 Name des Session-Cookies</h3>
-
-<p>Sollen auf einem Server mehrere Lx-Office-Installationen aufgesetzt
-werden, so müssen die Namen der Session-Cookies für alle
-Installationen unterschiedlich sein. Der Name des Cookies wird mit dem
-Parameter <code>$self-&gt;{cookie_name}</code> gesetzt.
-
-   <p>Diese Angabe ist optional, wenn nur eine Installation auf dem Server
-existiert.
-
-<div class="node">
-<p><hr>
-<a name="Anlegen-der-Authentifizierungsdatenbank"></a>
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Name-des-Session_002dCookies">Name des Session-Cookies</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>
-
-</div>
-
-<h3 class="section">7.6 Anlegen der Authentifizierungsdatenbank</h3>
-
-<p>Nachdem alle Einstellungen in <samp><span class="file">config/lx_office.conf</span></samp>
-vorgenommen wurden, muss Lx-Office die Authentifizierungsdatenbank
-anlegen. Dieses geschieht automatisch, wenn Sie sich im
-Administrationsmodul anmelden, das unter der folgenden URL erreichbar
-sein sollte:
-
-   <p><a href="http://localhost/lx-erp/admin.pl">http://localhost/lx-erp/admin.pl</a>
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Benutzer--und-Gruppenverwaltung"></a>
-<a name="Benutzer_002d-und-Gruppenverwaltung"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Drucken-mit-Lx_002dOffice">Drucken mit Lx-Office</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Benutzerauthentifizierung-und-Administratorpasswort">Benutzerauthentifizierung und Administratorpasswort</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">8 Benutzer- und Gruppenverwaltung</h2>
-
-<p>Nach der Installation müssen Benutzer, Gruppen und Datenbanken
-angelegt werden.  Dieses geschieht im Administrationsmenü, das Sie
-unter folgender URL finden:
-
-   <p><a href="http://localhost/lx-erp/admin.pl">http://localhost/lx-erp/admin.pl</a>
-
-   <p>Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
-<samp><span class="file">config/lx_office.conf</span></samp> eingetragen haben.
-
-<ul class="menu">
-<li><a accesskey="1" href="#Zusammenh_00c3_00a4nge">Zusammenhänge</a>:  Übersicht über Benutzer, Gruppen, Berechtigungen und Datenbanken
-<li><a accesskey="2" href="#Datenbanken-anlegen">Datenbanken anlegen</a>:  Hinweise zum Anlegen von Datenbanken
-<li><a accesskey="3" href="#Gruppen-anlegen">Gruppen anlegen</a>:  Hinweise zum Anlegen von Gruppen
-<li><a accesskey="4" href="#Benutzer-anlegen">Benutzer anlegen</a>:  Hinweise zum Anlegen von Benutzern
-<li><a accesskey="5" href="#Gruppenmitgliedschaften-verwalten">Gruppenmitgliedschaften verwalten</a>:  Wie man Gruppen Benutzer zuordnet
-<li><a accesskey="6" href="#Migration-alter-Installationen">Migration alter Installationen</a>:  Automatische Übernahme bei Update von einer älteren Version
-</ul>
-
-<div class="node">
-<p><hr>
-<a name="Zusammenh%c3%a4nge"></a>
-<a name="Zusammenh_00c3_00a4nge"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Datenbanken-anlegen">Datenbanken anlegen</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>
-
-</div>
-
-<h3 class="section">8.1 Zusammenhänge</h3>
-
-<p>Lx-Office verwendet eine Datenbank zum Speichern all seiner
-Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
-mit Lx-Office arbeiten zu können, muss eine Person einen
-Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
-Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
-möglich und normal, dass mehreren Benutzern die selbe Datenbank
-zugewiesen wird, sodass sie alle mit den selben Daten arbeiten können.
-
-   <p>Die Basisdaten der Benutzer, die in der Administration eingegeben
-werden können, werden in einer zweiten Datenbank gespeichert, der
-bereits erwähnten Authentifizierungsdatenbank. Diese ist also den
-Produktivdaten enthaltenden Datenbanken vorgeschaltet. Pro
-Lx-Office-Installation gibt es nur eine Authentifizierungsdatenbank,
-aber beliebig viele Datenbanken mit Firmendaten.
-
-   <p>Lx-Office kann seinen Benutzern Zugriff auf bestimmte
-Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
-gestattet, so werden der entsprechenden Menüpunkte auch nicht
-angezeigt. Diese Rechte werden ebenfalls in der
-Authentifizierungsdatenbank gespeichert.
-
-   <p>Um Rechte verteilen zu können, verwendet Lx-Office ein
-Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
-erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
-mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
-Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
-Benutzer Mitglied ist.
-
-   <p>Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und Benutzer
-angelegt werden sollten, lautet:
-
-     <ol type=1 start=1>
-<li>Datenbank anlegen
-<li>Gruppen anlegen
-<li>Benutzer anlegen
-<li>Benutzer den Gruppen zuordnen
-        </ol>
-
-<div class="node">
-<p><hr>
-<a name="Datenbanken-anlegen"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Gruppen-anlegen">Gruppen anlegen</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Zusammenh_00c3_00a4nge">Zusammenhänge</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>
-
-</div>
-
-<h3 class="section">8.2 Datenbanken anlegen</h3>
-
-<p>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für den
-Datenbankzugriff den vorhin angelegten Benutzer (in unseren Beispielen
-ist dies &lsquo;<samp><span class="samp">lxoffice</span></samp>&rsquo;).
-
-   <p>Wenn Sie für die Lx-Office-Installation nicht den europäischen
-Schriftsatz ISO-8859-15 sondern UTF-8 (Unicode) benutzen wollen, so
-müssen Sie vor dem Anlegen der Datenbank in der Datei
-<samp><span class="file">config/lx_office.conf</span></samp> die Variable <code>dbcharset</code> im
-Abschnitt <code>system</code> auf den Wert &lsquo;<samp><span class="samp">UTF-8</span></samp>&rsquo; setzen. Zusätzlich
-muss beim Anlegen der Datenbank &lsquo;<samp><span class="samp">UTF-8 Unicode</span></samp>&rsquo; als Schriftsatz
-ausgewählt werden.
-
-   <p>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
-verwenden müssen, da diese Einstellungen momentan global in Lx-Office
-vorgenommen wird und nicht nach Datenbank unterschieden werden
-kann. Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
-angelegt worden sein.
-
-<div class="node">
-<p><hr>
-<a name="Gruppen-anlegen"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Benutzer-anlegen">Benutzer anlegen</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Datenbanken-anlegen">Datenbanken anlegen</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>
-
-</div>
-
-<h3 class="section">8.3 Gruppen anlegen</h3>
-
-<p>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein Name
-gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
-Anlegen können Sie die verschiedenen Bereiche wählen, auf die
-Mitglieder dieser Gruppe Zugriff haben sollen.
-
-   <p>Benutzergruppen sind unabhängig von Datenbanken, da sie in der
-Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
-Datenbanken, die in dieser Installation verwaltet werden.
-
-<div class="node">
-<p><hr>
-<a name="Benutzer-anlegen"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Gruppenmitgliedschaften-verwalten">Gruppenmitgliedschaften verwalten</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Gruppen-anlegen">Gruppen anlegen</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>
-
-</div>
-
-<h3 class="section">8.4 Benutzer anlegen</h3>
-
-<p>Beim Anlegen von Benutzern werden für viele Parameter
-Standardeinstellungen vorgenommen, die den Gepflogenheiten des
-deutschen Raumes entsprechen.
-
-   <p>Zwingend anzugeben sind der Loginname sowie die komplette
-Datenbankkonfiguration. Wenn die Passwortauthentifizierung über die
-Datenbank eingestellt ist, so kann hier auch das Benutzerpasswort
-gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung
-aktiv, so ist das Passwort-Feld deaktiviert.
-
-   <p>In der Datenbankkonfiguration müssen die Zugriffsdaten einer der eben
-angelegten Datenbanken eingetragen werden.
-
-<div class="node">
-<p><hr>
-<a name="Gruppenmitgliedschaften-verwalten"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Migration-alter-Installationen">Migration alter Installationen</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Benutzer-anlegen">Benutzer anlegen</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>
-
-</div>
-
-<h3 class="section">8.5 Gruppenmitgliedschaften verwalten</h3>
-
-<p>Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den Gruppen
-zugewiesen werden. Dazu gibt es zwei Möglichkeiten:
-
-     <ol type=1 start=1>
-<li>In der Gruppenverwaltung wählt man eine Gruppe aus. Im folgenden
-Dialog kann man dann einzeln die Benutzer der Gruppe hinzufügen. 
-<li>In der Gruppenverwaltung wählt man das Tool zur Verwaltung der
-Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die alle im
-System angelegten Gruppen und Benutzer enthält. Durch Setzen der
-Häkchen wird der Benutzer in der ausgewählten Zeile der Gruppe in der
-ausgewählten Spalte hinzugefügt.
-        </ol>
-
-<div class="node">
-<p><hr>
-<a name="Migration-alter-Installationen"></a>
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Gruppenmitgliedschaften-verwalten">Gruppenmitgliedschaften verwalten</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>
-
-</div>
-
-<h3 class="section">8.6 Migration alter Installationen</h3>
-
-<p>Wenn Lx-Office 2.6.2 über eine ältere Version installiert wird, in der
-die Benutzerdaten noch im Dateisystem im Verzeichnis <code>users</code>
-verwaltet wurden, so bietet Lx-Office die Möglichkeit, diese
-Benutzerdaten automatisch in die Authentifizierungsdatenbank zu
-übernehmen. Dies geschieht, wenn man sich nach dem Update der
-Installation das erste Mal im Administrationsbereich anmeldet. Findet
-Lx-Office die Datei <code>users/members</code>, so wird der
-Migrationsprozess gestartet.
-
-   <p>Der Migrationsprozess ist nahezu vollautomatisch. Alle Benutzerdaten
-können übernommen werden. Nach den Benutzerdaten bietet Lx-Office noch
-die Möglichkeit an, dass automatisch eine Benutzergruppe angelegt
-wird. Dieser Gruppe wird Zugriff auf alle Funktionen von Lx-Office
-gewährt. Alle migrierten Benutzern werden Mitglied in dieser
-Gruppe. Damit wird das Verhalten von Lx-Office bis Version 2.4.3
-inklusive wiederhergestellt, und die Benutzer können sich sofort
-wieder anmelden und mit dem System arbeiten.
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Drucken-mit-Lx-Office"></a>
-<a name="Drucken-mit-Lx_002dOffice"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#OpenDocument_002dVorlagen">OpenDocument-Vorlagen</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Benutzer_002d-und-Gruppenverwaltung">Benutzer- und Gruppenverwaltung</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">9 Drucken mit Lx-Office</h2>
-
-<p>Das Drucksystem von Lx-Office benutzt von Haus aus LaTeX Vorlagen. Um drucken
-zu können, braucht der Server ein geeignetes LaTeX System. Am einfachsten ist
-dazu eine <code>texlive</code> Installation. Unter Debianoiden Betriebssystemen sind
-das die Pakete:
-
-   <p><code>texlive-latex-base texlive-latex-extra texlive-fonts-recommended</code>
-
-   <p>Diese hinteren beiden enthalten Bibliotheken und Schriftarten die von den
-Standardvorlagen verwendet werden.
-
-   <p>TODO: rpm Pakete.
-
-   <p>In den allermeisten Installationen sollte drucken jetzt schon funktionieren. 
-Sollte ein Fehler auftreten wirft TeX sehr lange Fehlerbeschreibungen, der
-eigentliche Fehler ist immer die erste Zeite die mit einem Ausrufezeichen
-anfängt. Häufig auftretende Fehler sind zum Beispiel:
-
-     <ul>
-<li>! LaTeX Error: File `eurosym.sty' not found. 
-Die entsprechende LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem
-bei Vorlagen aus der Community auf. Installieren Sie die entsprechenden Pakete. 
-<li>! Package inputenc Error: Unicode char \u8:æ¡\9c not set up for use with LaTeX. 
-Dieser Fehler tritt auf, wenn sie versuchen mit einer Standardinstallation
-exotische utf8 Zeichen zu drucken. TeXLive unterstützt von Haus nur romanische
-Schriften und muss mit diversen Tricks dazu gebracht werden andere Zeichen zu
-akzeptieren. Adere TeX Systeme wie XeTeX schaffen hier Abhilfe. 
-</ul>
-
-   <p>Wird garkein Fehler angezeigt sondern nur der Name des Templates, heißt das
-normalerweise, dass das LaTeX Binary nicht gefunden wurde. Prüfen Sie den Namen
-in der Konfiguration (Standard: <code>pdflatex</code>), und stellen Sie sicher, dass
-pdflatex (oder das von Ihnen verwendete System) vom Webserver ausgeführt werden
-darf.
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="OpenDocument-Vorlagen"></a>
-<a name="OpenDocument_002dVorlagen"></a>
-n&auml;chstes:&nbsp;<a rel="next" accesskey="n" href="#Lx_002dOffice-ERP-verwenden">Lx-Office ERP verwenden</a>,
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#Drucken-mit-Lx_002dOffice">Drucken mit Lx-Office</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">10 OpenDocument-Vorlagen</h2>
-
-<p>Lx-Office unterstützt die Verwendung von Vorlagen im
-OpenDocument-Format, wie es OpenOffice.org ab Version 2
-erzeugt. Lx-Office kann dabei sowohl neue OpenDocument-Dokumente als
-auch aus diesen direkt PDF-Dateien erzeugen.  Um die Unterstützung von
-OpenDocument-Vorlagen zu aktivieren muss in der Datei
-<samp><span class="file">config/lx_office.conf</span></samp> die Variable <code>opendocument</code> im
-Abschnitt <code>print_templates</code> auf &lsquo;<samp><span class="samp">1</span></samp>&rsquo; stehen.  Dieses ist die
-Standardeinstellung.
-
-   <p>Weiterhin muss in der Datei <samp><span class="file">config/lx_office.conf</span></samp> die Variable
-<code>dbcharset</code> im Abschnitt <code>system</code> auf die Zeichenkodierung
-gesetzt werden, die auch bei der Speicherung der Daten in der
-Datenbank verwendet wird. Diese ist in den meisten Fällen "UTF-8".
-
-   <p>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
-weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
-OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
-neben OpenOffice.org ab Version 2 auch der &ldquo;X virtual frame buffer&rdquo;
-(xvfb) installiert werden.  Bei Debian ist er im Paket &ldquo;xvfb&rdquo;
-enthalten. Andere Distributionen enthalten ihn in anderen Paketen.
-
-   <p>Nach der Installation müssen in der Datei <samp><span class="file">config/lx_config.conf</span></samp>
-zwei weitere Variablen angepasst werden: <code>openofficeorg_writer</code>
-muss den vollständigen Pfad zur OpenOffice.org Writer-Anwendung
-enthalten. <code>xvfb</code> muss den Pfad zum &ldquo;X virtual frame buffer&rdquo;
-enthalten. Beide stehen im Abschnitt <code>applications</code>.
-
-   <p>Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit
-OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn
-die Variable <code>$openofficeorg_daemon</code> gesetzt ist, startet ein
-OpenOffice, das auch nach der Umwandlung des Dokumentes gestartet
-bleibt. Bei weiteren Umwandlungen wird dann diese laufende Instanz
-benutzt. Der Vorteil ist, dass die Zeit zur Umwandlung deutlich
-reduziert wird, weil nicht für jedes Dokument ein OpenOffice gestartet
-werden muss. Der Nachteil ist, dass diese Methode Python und die
-Python-UNO-Bindings benötigt, die Bestandteil von OpenOffice 2 sind.
-
-   <p>Ist <code>$openofficeorg_daemon</code> nicht gesetzt, so wird für jedes
-Dokument OpenOffice neu gestartet und die Konvertierung mit Hilfe
-eines Makros durchgeführt. Dieses Makro muss in der Dokumentenvorlage
-enthalten sein und &ldquo;Standard.Conversion.ConvertSelfToPDF()&rdquo;
-heißen. Die Beispielvorlage &lsquo;<samp><span class="samp">templates/mastertemplates/German/invoice.odt</span></samp>&rsquo;
-enthält ein solches Makro, das in jeder anderen Dokumentenvorlage
-ebenfalls enthalten sein muss.
-
-   <p>Als letztes muss herausgefunden werden, welchen Namen OpenOffice.org
-Writer dem Verzeichnis mit den Benutzereinstellungen gibt. Unter
-Debian ist dies momentan <code>~/.openoffice.org2</code>. Sollte der Name
-bei Ihrer OpenOffice.org-Installation anders sein, so muss das
-Verzeichnis <code>users/.openoffice.org2</code> entsprechend umbenannt
-werden. Ist der Name z.B. einfach nur <code>.openoffice</code>, so wäre
-folgender Befehl auszuführen:
-
-   <p><code>mv users/.openoffice.org2 users/.openoffice</code>
-
-   <p>Dieses Verzeichnis, wie auch das komplette <code>users</code>-Verzeichnis, muss vom
-Webserver beschreibbar sein. Dieses wurde bereits erledigt
-(siehe <a href="#Manuelle-Installation-des-Programmpaketes">Manuelle Installation des Programmpaketes</a>), kann aber erneut überprüft
-werden, wenn die Konvertierung nach PDF fehlschlägt.
-
-<!--  -->
-<div class="node">
-<p><hr>
-<a name="Lx-Office-ERP-verwenden"></a>
-<a name="Lx_002dOffice-ERP-verwenden"></a>
-voriges:&nbsp;<a rel="previous" accesskey="p" href="#OpenDocument_002dVorlagen">OpenDocument-Vorlagen</a>,
-aufw&auml;rts:&nbsp;<a rel="up" accesskey="u" href="#Top">Top</a>
-
-</div>
-
-<h2 class="chapter">11 Lx-Office ERP verwenden</h2>
-
-<p>Nach erfolgreicher Installation ist der Loginbildschirm unter
-folgender URL erreichbar:
-
-   <p><a href="http://localhost/lx-office-erp/login.pl">http://localhost/lx-office-erp/login.pl</a>
-
-   <p>Die Administrationsseite erreichen Sie unter:
-
-   <p><a href="http://localhost/lx-office-erp/admin.pl">http://localhost/lx-office-erp/admin.pl</a>
-
-</body></html>
-
-<!--
-\1f
-Local Variables:
-coding: utf-8
-End:
-
--->
diff --git a/doc/INSTALL.texi b/doc/INSTALL.texi
deleted file mode 100644 (file)
index 785f25c..0000000
+++ /dev/null
@@ -1,926 +0,0 @@
-\input texinfo   @c -*-texinfo-*-
-@c %**start of header
-@setfilename INSTALL.info
-@documentencoding UTF-8
-@afourpaper
-@settitle Lx-Office Installationsanleitung
-@c %**end of header
-
-@c @copying
-@c Die Lx-Office Installationsanleitung kann beliebig weiter verwendet
-@c werden.
-@c @end copying
-
-@titlepage
-@title Lx-Office Installationsanleitung
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top
-@top Inhalt der Anleitung
-@end ifnottex
-
-@menu
-* Aktuelle Hinweise:: Andere Informationsquellen als diese Anleitung
-* Benötigte Software und Pakete:: Vorraussetzungen zum Betrieb von Lx-Office
-* Manuelle Installation des Programmpaketes:: Installationsort, Berechtigungen
-* Anpassung der PostgreSQL-Konfiguration:: Verschiedene Aspekte der Datenbankkonfiguration
-* Apache-Konfiguration:: Einrichtung eines Aliases und Optionen für das Ausführen von CGI-Scripten
-* Der Task-Server:: Konfiguration und Einrichtung des Task-Server-Dämonen
-* Benutzerauthentifizierung und Administratorpasswort:: Einrichtung der Authentifizierungsdatenbank und der Passwortüberprüfung
-* Benutzer- und Gruppenverwaltung:: Einrichten von Benutzern, Gruppen und Datenbanken
-* Drucken mit Lx-Office:: Voraussetzungen, Einrichtung und Fehlerdiagnose
-* OpenDocument-Vorlagen:: Wichtige Hinweise zum Erstellen und zur Verwendung von Dokumentenvorlagen
-* Lx-Office ERP verwenden:: Die URLs zur Anmeldung und Administration
-@end menu
-
-@c ---------------------------------------------------------------
-
-@node Aktuelle Hinweise
-@chapter Aktuelle Hinweise
-
-Aktuelle Installations- und Konfigurationshinweise gibt es:
-
-@itemize
-@item
-auf der Lx-Office Homepage unter @uref{http://lx-office.org/index.php?id=dokumentation}
-
-@item
-im Lx-Office-Wiki unter Dokumentation (@uref{http://wiki.lx-office.org/index.php/Lx-Office_ERP})
-
-@item
-im Lx-Office-Forum: @uref{http://www.lx-office.org/forum/}
-@end itemize
-
-@c ---------------------------------------------------------------
-
-@node Benötigte Software und Pakete
-@chapter Benötigte Software und Pakete
-
-@menu
-* Betriebssystem:: Unterstützte Betriebsysteme und Hinweise für ältere Systeme
-* Pakete:: Benötigte Software und Perlpakete sowie deren Quellen
-@end menu
-
-@node Betriebssystem
-@section Betriebssystem
-
-Lx-Office ist für Linux konzipiert, und sollte auf jedem unixoiden
-Betriebssystem zum Laufen zu kriegen sein. Getestet ist diese Version im
-speziellen auf Debian und Ubuntu, grundsätzlich wurde bei der Auswahl der
-Pakete aber darauf Rücksicht genommen, dass es ohne große Probleme auf den
-derzeit aktuellen verbreiteten Distributionen läuft.
-
-Anfang 2011 sind das folgende Systeme:
-
-@itemize
-@item
-Ubuntu 8.04 LTS Hardy Heron
-@item
-Ubuntu 9.10 Karmic Koala
-@item
-Ubuntu 10.04 Lucid Lynx
-@item
-Ubuntu 10.10 Maverick Meerkat
-@item
-Debian 5.0 Lenny
-@item
-Debian 6.0 Squeeze
-@item
-openSUSE 11.2
-@item
-openSUSE 11.3
-@item
-SuSE Linux Enterprice Server 11
-@item
-Fedora 13
-@item
-Fedora 14
-@end itemize
-
-Für die debianoiden Betriebssysteme existiert ein .deb, das deutlich einfacher
-zu installieren ist.
-
-Ubuntu 8.04 LTS hat zusätzlich die Schwierigkeit, dass die Module im Archiv
-recht alt sind, und das viele der benötigten Module nicht einfach zu
-installieren sind. Dafür sollte es kurz nach dem Release ein eigenes .deb
-geben.
-
-Alternativ dazu kann die normale Installation durchgeführt werden
-(@pxref{Manuelle Installation des Programmpaketes}), wenn vorher ein
-Kompatibilitätspaket installiert wird, das die fehlenden Pakete bereitstellt.
-Das Paket ist auf @uref{https://sourceforge.net/projects/lx-office/files/Lx-Office%20ERP/2.6.2/, Sourceforge} unter dem Namen @code{lx-erp-perl-libs-compat-v2.tar.gz} hinterlegt.
-
-Zur Installation das Paket in das entpackte Lx-Office Verzeichnis entpacken:
-
-@code{tar xzf lx-erp-perl-libs-compat-v2.tar.gz /path/to/lx-office/}
-
-Zusätzlich müssen dann noch die folgenden Pakete installiert weerden
-
-@code{libbit-vector-perl libsub-exporter-perl libclone-perl libclass-factory-util-perl}
-
-Danach sollte der Installationscheck (@pxref{Pakete}) die enthaltenen Pakete erkennen.
-
-@node Pakete
-@section Pakete
-
-Zum Betrieb von Lx-Office werden zwingend ein Webserver (meist Apache)
-und ein Datenbankserver (PostgreSQL, mindestens v8.2) benötigt.
-
-Zusätzlich benötigt Lx-Office die folgenden Perl-Pakete, die nicht Bestandteil
-einer Standard-Perl-Installation sind:
-
-@itemize
-@item
-parent
-@item
-Archive::Zip
-@item
-Config::Std
-@item
-DateTime
-@item
-DBI
-@item
-DBD::Pg
-@item
-Email::Address
-@item
-JSON
-@item
-List::MoreUtils
-@item
-Params::Validate
-@item
-PDF::API2
-@item
-Rose::Object
-@item
-Rose::DB
-@item
-Rose::DB::Object
-@item
-Template
-@item
-Text::CSV_XS
-@item
-Text::Iconv
-@item
-URI
-@item
-XML::Writer
-@item
-YAML
-@end itemize
-
-Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete hinzugekommen, @code{URI}
-und @code{XML::Writer} sind notwendig. Ohne startet Lx-Office nicht.
-
-Gegenüber Version 2.6.1 sind @code{parent}, @code{DateTime},
-@code{Rose::Object}, @code{Rose::DB} und @code{Rose::DB::Object} neu
-hinzugekommen. @code{IO::Wrap} wurde entfernt.
-
-Gegenüber Version 2.6.3 ist @code{JSON} neu hinzugekommen.
-
-@code{Email::Address} und @code{List::MoreUtils} sind schon länger feste
-Abhängigkeiten, wurden aber bisher mit Lx-Office mitgeliefert.  Beide sind auch
-in 2.6.1 weiterhin mit ausgeliefert, wurden in einer zukünftigen Version aber
-aus dem Paket entfernt werden. Es wird empfohlen diese Module zusammen mit den
-anderen als Bibliotheken zu installieren.
-
-Die zu installierenden Pakete können in den verschiedenen Distributionen unterschiedlich heißen.
-
-Für Debian oder Ubuntu benötigen Sie diese Pakete:
-
-@code{apache2 postgresql libparent-perl libarchive-zip-perl libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl libemail-address-perl liblist-moreutils-perl libpdf-api2-perl librose-object-perl librose-db-perl librose-db-object-perl libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-perl libconfig-std-perl libparams-validate-perl libjson-perl}
-
-Für Fedora Core benötigen Sie diese Pakete:
-
-@code{httpd postgresql-server perl-parent perl-DateTime perl-DBI perl-DBD-Pg perl-Email-Address perl-List-MoreUtils perl-PDF-API2 perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML}
-
-Für OpenSuSE benötigen Sie diese Pakete:
-
-@code{apache2 postgresql-server perl-Archive-Zip perl-DateTime perl-DBI perl-DBD-Pg perl-MailTools perl-List-MoreUtils perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML}
-
-Bei openSuSE 11 ist @code{parent} bereits enthalten, und braucht nicht nachinstalliert werden. Die @code{Rose::*} Pakete sind derzeit nicht für SuSE gepackt, und müssen anderweitig nachinstalliert werden.
-
-Lx-Office enthält ein Script, mit dem überprüft werden kann, ob alle
-benötigten Perl-Module installiert sind. Der Aufruf lautet wie folgt:
-
-@code{./scripts/installation_check.pl}
-
-@c ---------------------------------------------------------------
-
-@node Manuelle Installation des Programmpaketes
-@chapter Manuelle Installation des Programmpaketes
-
-Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.2.tgz) wird im
-Dokumentenverzeichnis des Webservers (z.B. @code{/var/www/html/},
-@code{/srv/www/htdocs} oder @code{/var/www/}) entpackt:
-
-@code{cd /var/www
-@*
-tar xvzf lxoffice-erp-2.6.2.tgz}
-
-Verändern Sie evtl. noch den Namen des Verzeichnisses mit
-
-@code{mv lxoffice-erp/ lx-erp/}
-
-Alternativ können Sie auch einen Alias in der Webserverkonfiguration
-benutzen, um auf das tatsächliche Installationsverzeichnis zu
-verweisen.
-
-Die Verzeichnisse @code{users}, @code{spool} und @code{webdav} müssen
-für den Benutzer beschreibbar sein, unter dem der Webserver läuft. Die
-restlichen Dateien müssen für diesen Benutzer lesbar sein. Der
-Benutzername ist bei verschiedenen Distributionen unterschiedlich
-(z.B. bei Debian/Ubuntu @code{www-data}, bei Fedora core @code{apache}
-oder bei OpenSuSE @code{wwwrun}).
-
-Der folgende Befehl ändert den Besitzer für die oben genannten
-Verzeichnisse auf einem Debian/Ubuntu-System:
-
-@code{chown -R www-data lx-office-erp/users lx-office-erp/spool lx-office-erp/webdav}
-
-Weiterhin muss der Webserver-Benutzer im Verzeichnis @code{templates} Verzeichnisse für
-jeden neuen Benutzer, der in lx-office angelegt wird, anlegen dürfen:
-
-@code{chgrp www-data lx-office-erp/templates; chmod g+w lx-office-erp/templates}
-
-
-@c ---------------------------------------------------------------
-
-@node Anpassung der PostgreSQL-Konfiguration
-@chapter Anpassung der PostgreSQL-Konfiguration
-
-PostgreSQL muss auf verschiedene Weisen angepasst werden.
-
-@menu
-* Zeichensätze/die Verwendung von UTF-8:: Was bei der Verwendung von UTF-8 zu beachten ist
-* Änderungen an Konfigurationsdateien:: Anpassungen für Anmeldung am Server und Featureunterstützung
-* Erweiterung für servergespeicherte Prozeduren:: Lx-Office benutzt servergespeicherte Prozeduren
-* Datenbankbenutzer anlegen:: Um den Zugriff besser zu reglementieren
-@end menu
-
-@node Zeichensätze/die Verwendung von UTF-8
-@section Zeichensätze/die Verwendung von UTF-8
-
-Lx-Office kann komplett mit UTF-8 als Zeichensatz verwendet
-werden. Dabei gibt es zwei Punkte zu beachten: PostgreSQL muss in
-Version 8.0 oder neuer benutzt werden, und der
-PostgreSQL-Datenbankcluster muss ebenfalls mit UTF-8 als Locale
-angelegt worden sein.
-
-Dieses ist kann überprüft werden: ist das Encoding der Datenbank
-``template1'' ``UTF8'', so kann auch Lx-Office mit UTF-8 betrieben
-werden. Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
-UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
-Ubuntu kann dies z.B. mit dem folgenden Befehl getan werden:
-
-@code{pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername}
-
-Die Datenbankversionsnummer muss an die tatsächlich verwendete
-Versionsnummer angepasst werden.
-
-Unter anderen Distributionen gibt es ähnliche Methoden.
-
-Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und ist
-ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
-Lx-Office mit ISO-8859-15 als Encoding betrieben werden.
-
-Das Encoding einer Datenbank kann in @code{psql} mit @code{\l} geprüft werden.
-
-@node Änderungen an Konfigurationsdateien
-@section Änderungen an Konfigurationsdateien
-
-In der Datei @code{postgresql.conf}, die je nach Distribution in
-verschiedenen Verzeichnissen liegen kann
-(z.B. @code{/var/lib/pgsql/data/} oder @code{/etc/postgresql/}, muss
-sichergestellt werden, dass TCP/IP-Verbindungen aktiviert sind. Das
-Verhalten wird über den Parameter @code{listen_address}
-gesteuert. Laufen PostgreSQL und Lx-Office auf demselben Rechner, so
-kann dort der Wert @code{localhost} verwendet werden. Andernfalls
-müssen Datenbankverbindungen auch von anderen Rechnern aus zugelassen
-werden, was mit dem Wert \@code{*} geschieht.
-
-In der Datei @code{pg_hba.conf}, die im gleichen Verzeichnis wie die
-@code{postgresql.conf} zu finden sein sollte, müssen die
-Berichtigungen für den Zugriff geändert werden. Hier gibt es mehrere
-Möglichkeiten. Eine besteht darin, lokale Verbindungen immer
-zuzulassen
-
-@code{local all all trust
-@*
-host all all 127.0.0.1 255.0.0.0 trust}
-
-Besser ist es, für eine bestimmte Datenbank Zugriff nur per Passwort
-zuzulassen. Beispielsweise:
-
-@code{local   all         lxoffice                                           password
-@*
-host    all         lxoffice      127.0.0.1         255.255.255.255    password}
-
-@c ---------------------------------------------------------------
-
-@node Erweiterung für servergespeicherte Prozeduren
-@section Erweiterung für servergespeicherte Prozeduren
-
-In der Datenbank @code{template1} muss die Unterstützung für servergespeicherte
-Prozeduren eingerichet werden. Melden Sie sich dafür als Benutzer ``postgres''
-an der Datenbank an, und führen Sie die folgenden Kommandos aus:
-
-@code{create language 'plpgsql';}
-
-Achtung: In älteren Postgresversionen (vor 8.0) muss der Handler für die
-Sprache manuell anlelegt werden, diese Versionen werden aber nicht mehr
-offiziell von Lx-Office unterstützt. Dafür dann die folgenden Kommandos:
-
-@code{create function plpgsql_call_handler () returns opaque as '/usr/lib/pgsql/plpgsql.so' language 'c';
-@*
-create language 'plpgsql' handler plpgsql_call_handler lancompiler 'pl/pgsql';}
-
-Bitte beachten Sie, dass der Pfad zur Datei @code{plpgsql.so} von Distribution
-zu Distribution verschiedlich sein kann. Bei Debian/Ubuntu befindet sie sich
-unter @code{/usr/lib/postgresql/lib/plpgsql.so}.
-
-@c ---------------------------------------------------------------
-
-@node Datenbankbenutzer anlegen
-@section Datenbankbenutzer anlegen
-
-Wenn Sie nicht den Datenbanksuperuser ``postgres'' zum Zugriff
-benutzen wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer
-anlegen. Ein Beispiel, wie Sie einen neuen Benutzer anlegen können:
-
-@code{su - postgres
-@*
-createuser -d -P lxoffice}
-
-Wenn Sie später einen Datenbankzugriff konfigurieren, verändern Sie
-den evtl. voreingestellten Benutzer ``postgres'' auf ``lxoffice''
-bzw. den hier gewählten Benutzernamen.
-
-@c ---------------------------------------------------------------
-
-@node Apache-Konfiguration
-@chapter Apache-Konfiguration
-
-Hinweis: Für einen deutlichen Performanceschub sorgt die Ausführung
-mittels FCGI. Die Einrichtung wird ausführlich in der Datei
-@code{INSTALL.fcgi} beschrieben.
-
-Der Zugriff auf das Programmverzeichnis muss in der Apache
-Webserverkonfigurationsdatei @code{httpd.conf} eingestellt
-werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
-anderen Datei hinzu, die beim Starten des Webservers eingelesen wird:
-
-@code{@*
-AddHandler cgi-script .pl
-@*
-Alias /lx-erp/ /var/www/lx-erp/
-@*
-<Directory /var/www/lx-erp>
-@*
-  Options ExecCGI Includes FollowSymlinks
-@*
-</Directory>
-@*
-@*
-<Directory /var/www/lx-erp/users>
-@*
-  Order Deny,Allow
-@*
-  Deny from All
-@*
-</Directory>
-@*
-}
-
-Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher das
-Lx-Office-Archiv entpacket haben.
-
-Achtung: Vor den einzelnen Optionen muss bei einigen Distributionen ein
-Plus @samp{+} gesetzt werden.
-
-Auf einigen Webservern werden manchmal die Grafiken und Style-Sheets
-nicht ausgeliefert. In solchen Fällen hat es oft geholfen, die
-folgende Option in die Konfiguration aufzunehmen:
-
-@code{EnableSendfile Off}
-
-@c ---------------------------------------------------------------
-
-@node Der Task-Server
-@chapter Der Task-Server
-
-Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
-regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese
-zu festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser
-Prozess wird bisher nur für die Erzeugung der wiederkehrenden
-Rechnungen benutzt, wird aber in Zukunft deutlich mehr Aufgaben
-übertragen bekommen.
-
-@menu
-* Konfiguration des Task-Servers:: Verfügbare und notwendige Konfigurationsoptionen
-* Prozesskontrolle:: Wie der Task-Server gestartet und beendet wird
-* Einbinden in den Boot-Prozess:: Automatisches Starten des Task-Servers beim Booten
-@end menu
-
-@node Konfiguration des Task-Servers
-@section Verfügbare und notwendige Konfigurationsoptionen
-
-Die Konfiguration erfolgt über den Abschnitt @code{[task_server]} in
-der Datei @file{config/lx_office.conf}. Die dort verfügbaren Optionen
-sind:
-
-@itemize
-@item @code{login}: gültiger Lx-Office-Benutzername, der benutzt wird, um die zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss in der Administration angelegt werden. Diese Option muss angegeben werden.
-@item @code{run_as}: Wird der Server vom Systembenutzer @code{root} gestartet, so wechselt er auf den mit @code{run_as} angegebenen Systembenutzer. Der Systembenutzer muss dieselben Lese- und Schreibrechte haben, wie auch der Webserverbenutzer (siehe @pxref{Manuelle Installation des Programmpaketes}). Daher ist es sinnvoll, hier denselben Systembenutzer einzutragen, unter dem auch der Webserver läuft.
-@item @code{debug}: Schaltet Debug-Informationen an und aus.
-@end itemize
-
-@node Einbinden in den Boot-Prozess
-@section Automatisches Starten des Task-Servers beim Booten
-
-Der Task-Server verhält sich von seinen Optionen her wie ein reguläres
-SystemV-kompatibles Boot-Script. Außerdem wechselt er beim Starten
-automatisch in das Lx-Office-Installationsverzeichnis.
-
-Deshalb ist es möglich, ihn durch Setzen eines symbolischen Links aus
-einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
-einzubinden. Da das bei neueren Linux-Distributionen aber nicht
-zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
-anstelle eines symbolischen Links verwendet werden können.
-
-@subsection SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora Core)
-
-Kopieren Sie die Datei
-@file{scripts/boot/system-v/lx-office-task-server} nach
-@file{/etc/init.d/lx-office-task-server}. Passen Sie in der kopierten
-Datei den Pfad zum Task-Server an (Zeile @code{DAEMON=....}). Binden
-Sie das Script in den Boot-Prozess ein. Dies ist distributionsabhängig:
-
-@itemize
-@item Debian-basierende Systeme:
-@*
-@code{update-rc.d lx-office-task-server defaults
-@*
-# Nur bei Debian Squeeze und neuer:
-@*
-insserv lx-office-task-server}
-@item OpenSuSE und Fedora Core:
-@*
-@code{chkconfig --add lx-office-task-server}
-@end itemize
-
-Danach kann der Task-Server mit dem folgenden Befehl gestartet werden:
-@code{/etc/init.d/lx-office-task-server start}
-
-@subsection Upstart-basierende Systeme (z.B. Ubuntu)
-
-Kopieren Sie die Datei
-@file{scripts/boot/upstart/lx-office-task-server.conf} nach
-@file{/etc/init/lx-office-task-server.conf}. Passen Sie in der kopierten
-Datei den Pfad zum Task-Server an (Zeile @code{exec ....}).
-
-Danach kann der Task-Server mit dem folgenden Befehl gestartet werden:
-@code{service lx-office-task-server start}
-
-@node Prozesskontrolle
-@section Wie der Task-Server gestartet und beendet wird
-
-Der Task-Server wird wie folgt kontrolliert:
-
-@code{./scripts/task_server.pl Befehl}
-
-@code{Befehl} ist dabei eine der folgenden Optionen:
-
-@itemize
-@item @code{start} startet eine neue Instanz des Task-Servers. Die Prozess-ID wird innerhalb des @file{users}-Verzeichnisses abgelegt.
-@item @code{stop} beendet einen laufenden Task-Server.
-@item @code{restart} beendet und startet ihn neu.
-@item @code{status} berichtet, ob der Task-Server läuft.
-@end itemize
-
-Der Task-Server wechselt beim Starten automatisch in das Lx-Office-Installationsverzeichnis.
-
-Dieselben Optionen können auch für die SystemV-basierenden
-Runlevel-Scripte benutzt werden (siehe oben).
-
-@c ---------------------------------------------------------------
-
-@node Benutzerauthentifizierung und Administratorpasswort
-@chapter Benutzerauthentifizierung und Administratorpasswort
-
-Informationen über die Einrichtung der Benutzerauthentifizierung, über
-die Verwaltung von Gruppen und weitere Einstellungen
-
-@menu
-* Grundlagen zur Benutzerauthentifizierung:: Verfügbare Methoden, Name der Konfigurationsdatei
-* Administratorpasswort:: Wo das Administratorpasswort gesetzt werden kann
-* Authentifizierungsdatenbank:: Verbindungseinstellungen zur Authentifizierungsdatenbank
-* Passwortüberprüfung:: Einstellungen zur Überprüfung der Benutzerpasswörter
-* Name des Session-Cookies:: Ändern des Cookie-Namens bei Verwendung mehrerer Lx-Office-Installationen auf einem Server
-* Anlegen der Authentifizierungsdatenbank:: Wie die Authentifizierungsdatenbank angelegt wird
-@end menu
-
-@c ---------------------------------------------------------------
-
-@node Grundlagen zur Benutzerauthentifizierung
-@section Grundlagen zur Benutzerauthentifizierung
-
-Lx-Office verwaltet die Benutzerinformationen in einer Datenbank, die
-im folgenden ``Authentifizierungsdatenbank'' genannt wird. Für jeden
-Benutzer kann dort eine eigene Datenbank für die eigentlichen
-Finanzdaten hinterlegt sein. Diese beiden Datenbanken können, müssen
-aber nicht unterschiedlich sein.
-
-Im einfachsten Fall gibt es für Lx-Office nur eine einzige Datenbank,
-in der sowohl die Benutzerinformationen als auch die Daten abgelegt
-werden.
-
-Zusätzlich ermöglicht es Lx-Office, dass die Benutzerpasswörter
-entweder gegen die Authentifizierungsdatenbank oder gegen einen
-LDAP-Server überprüft werden.
-
-Welche Art der Passwortüberprüfung Lx-Office benutzt und wie Lx-Office
-die Authentifizierungsdatenbank erreichen kann, wird in der
-Konfigurationsdatei @file{config/lx_office.conf} festgelegt. Diese
-muss bei der Installation und bei einem Upgrade von einer Version vor
-v2.6.0 angelegt werden. Eine Beispielkonfigurationsdatei
-@file{config/lx_office.conf.default} existiert, die als Vorlage
-benutzt werden kann.
-
-@node Administratorpasswort
-@section Administratorpasswort
-
-Das Passwort, das zum Zugriff auf das Aministrationsinterface benutzt wird,
-wird ebenfalls in dieser Datei gespeichert. Es kann auch nur dort und nicht
-mehr im Administrationsinterface selber geändert werden. Der Parameter dazu
-heißt @code{$self->@{admin_password@}}.
-
-@node Authentifizierungsdatenbank
-@section Authentifizierungsdatenbank
-
-Die Verbindung zur Authentifizierungsdatenbank wird mit den Parametern
-in @code{$self->@{DB_config@}} konfiguriert. Hier sind die folgenden
-Parameter anzugeben:
-
-@itemize
-@item
-@samp{host} -- Der Rechnername oder die IP-Adresse des Datenbankservers
-@item
-@samp{port} -- Die Portnummer des Datenbankservers, meist 5432
-@item
-@samp{db} -- Der Name der Authentifizierungsdatenbank
-@item
-@samp{user} -- Der Benutzername, mit dem sich Lx-Office beim Datenbankserver anmeldet (z.B. ``postgres'')
-@item
-@samp{password} -- Das Passwort für den Datenbankbenutzer
-@end itemize
-
-Die Datenbank muss noch nicht existieren. Lx-Office kann sie
-automatisch anlegen (mehr dazu siehe unten).
-
-@node Passwortüberprüfung
-@section Passwortüberprüfung
-
-Lx-Office unterstützt Passwortüberprüfung auf zwei Arten: gegen die
-Authentifizierungsdatenbank und gegen einen externen LDAP- oder
-Active-Directory-Server. Welche davon benutzt wird, regelt der
-Parameter @code{$self->@{module@}}.
-
-Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank
-gespeichert werden, so muss der Parameter @code{$self->@{module@}} den
-Wert @samp{DB} enthalten. In diesem Fall können sowohl der
-Administrator als auch die Benutzer selber ihre Psaswörter in
-Lx-Office ändern.
-
-Soll hingegen ein externer LDAP- oder Active-Directory-Server benutzt
-werden, so muss der Parameter @code{$self->@{module@}} auf @samp{LDAP}
-gesetzt werden. In diesem Fall müssen zusätzliche Informationen über
-den LDAP-Server in @code{$self->@{LDAP_config@}} angegeben werden:
-
-@itemize
-@item
-@samp{host} -- Der Rechnername oder die IP-Adresse des LDAP- oder Active-Directory-Servers. Diese Angabe ist zwingend erforderlich.
-@item
-@samp{port} -- Die Portnummer des LDAP-Servers; meist 389.
-@item
-@samp{tls} -- Wenn Verbindungsverschlüsselung gewünscht ist, so diesen Wert auf @samp{1} setzen, andernfalls auf @samp{0} belassen
-@item
-@samp{attribute} -- Das LDAP-Attribut, in dem der Benutzername steht, den der Benutzer eingegeben hat. Für Active-Directory-Server
-  ist dies meist @samp{sAMAccountName}, für andere LDAP-Server hingegen @samp{uid}. Diese Angabe ist zwingend erforderlich.
-@item
-@samp{base_dn} -- Der Abschnitt des LDAP-Baumes, der durchsucht werden soll. Diese Angabe ist zwingend erforderlich.
-@item
-@samp{filter} -- Ein optionaler LDAP-Filter. Enthält dieser Filter das Wort @code{<%login%>}, so wird dieses durch den vom Benutzer
-  eingegebenen Benutzernamen ersetzt. Andernfalls wird der LDAP-Baum nach einem Element durchsucht, bei dem das oben angegebene Attribut
-  mit dem Benutzernamen identisch ist.
-@item
-@samp{bind_dn} und @samp{bind_password} -- Wenn der LDAP-Server eine Anmeldung erfordert, bevor er durchsucht werden kann (z.B. ist dies bei
-  Active-Directory-Servern der Fall), so kann diese hier angegeben werden. Für Active-Directory-Server kann als @samp{bind_dn} entweder eine
-  komplette LDAP-DN wie z.B. @samp{cn=Martin Mustermann,cn=Users,dc=firmendomain} auch nur der volle Name des Benutzers
-  eingegeben werden; in diesem Beispiel also @samp{Martin Mustermann}.
-@end itemize
-
-@node Name des Session-Cookies
-@section Name des Session-Cookies
-
-Sollen auf einem Server mehrere Lx-Office-Installationen aufgesetzt
-werden, so müssen die Namen der Session-Cookies für alle
-Installationen unterschiedlich sein. Der Name des Cookies wird mit dem
-Parameter @code{$self->@{cookie_name@}} gesetzt.
-
-Diese Angabe ist optional, wenn nur eine Installation auf dem Server
-existiert.
-
-@node Anlegen der Authentifizierungsdatenbank
-@section Anlegen der Authentifizierungsdatenbank
-
-Nachdem alle Einstellungen in @file{config/lx_office.conf}
-vorgenommen wurden, muss Lx-Office die Authentifizierungsdatenbank
-anlegen. Dieses geschieht automatisch, wenn Sie sich im
-Administrationsmodul anmelden, das unter der folgenden URL erreichbar
-sein sollte:
-
-@uref{http://localhost/lx-erp/admin.pl}
-
-
-@c ---------------------------------------------------------------
-
-@node Benutzer- und Gruppenverwaltung
-@chapter Benutzer- und Gruppenverwaltung
-
-Nach der Installation müssen Benutzer, Gruppen und Datenbanken
-angelegt werden.  Dieses geschieht im Administrationsmenü, das Sie
-unter folgender URL finden:
-
-@uref{http://localhost/lx-erp/admin.pl}
-
-Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
-@file{config/lx_office.conf} eingetragen haben.
-
-@menu
-* Zusammenhänge:: Übersicht über Benutzer, Gruppen, Berechtigungen und Datenbanken
-* Datenbanken anlegen:: Hinweise zum Anlegen von Datenbanken
-* Gruppen anlegen:: Hinweise zum Anlegen von Gruppen
-* Benutzer anlegen:: Hinweise zum Anlegen von Benutzern
-* Gruppenmitgliedschaften verwalten:: Wie man Gruppen Benutzer zuordnet
-* Migration alter Installationen:: Automatische Übernahme bei Update von einer älteren Version
-@end menu
-
-@node Zusammenhänge
-@section Zusammenhänge
-
-Lx-Office verwendet eine Datenbank zum Speichern all seiner
-Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
-mit Lx-Office arbeiten zu können, muss eine Person einen
-Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
-Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
-möglich und normal, dass mehreren Benutzern die selbe Datenbank
-zugewiesen wird, sodass sie alle mit den selben Daten arbeiten können.
-
-Die Basisdaten der Benutzer, die in der Administration eingegeben
-werden können, werden in einer zweiten Datenbank gespeichert, der
-bereits erwähnten Authentifizierungsdatenbank. Diese ist also den
-Produktivdaten enthaltenden Datenbanken vorgeschaltet. Pro
-Lx-Office-Installation gibt es nur eine Authentifizierungsdatenbank,
-aber beliebig viele Datenbanken mit Firmendaten.
-
-Lx-Office kann seinen Benutzern Zugriff auf bestimmte
-Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
-gestattet, so werden der entsprechenden Menüpunkte auch nicht
-angezeigt. Diese Rechte werden ebenfalls in der
-Authentifizierungsdatenbank gespeichert.
-
-Um Rechte verteilen zu können, verwendet Lx-Office ein
-Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
-erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
-mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
-Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
-Benutzer Mitglied ist.
-
-Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und Benutzer
-angelegt werden sollten, lautet:
-
-@enumerate
-@item
-Datenbank anlegen
-@item
-Gruppen anlegen
-@item
-Benutzer anlegen
-@item
-Benutzer den Gruppen zuordnen
-@end enumerate
-
-@node Datenbanken anlegen
-@section Datenbanken anlegen
-
-Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für den
-Datenbankzugriff den vorhin angelegten Benutzer (in unseren Beispielen
-ist dies @samp{lxoffice}).
-
-Wenn Sie für die Lx-Office-Installation nicht den europäischen
-Schriftsatz ISO-8859-15 sondern UTF-8 (Unicode) benutzen wollen, so
-müssen Sie vor dem Anlegen der Datenbank in der Datei
-@file{config/lx_office.conf} die Variable @code{dbcharset} im
-Abschnitt @code{system} auf den Wert @samp{UTF-8} setzen. Zusätzlich
-muss beim Anlegen der Datenbank @samp{UTF-8 Unicode} als Schriftsatz
-ausgewählt werden.
-
-Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
-verwenden müssen, da diese Einstellungen momentan global in Lx-Office
-vorgenommen wird und nicht nach Datenbank unterschieden werden
-kann. Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
-angelegt worden sein.
-
-@node Gruppen anlegen
-@section Gruppen anlegen
-
-Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein Name
-gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
-Anlegen können Sie die verschiedenen Bereiche wählen, auf die
-Mitglieder dieser Gruppe Zugriff haben sollen.
-
-Benutzergruppen sind unabhängig von Datenbanken, da sie in der
-Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
-Datenbanken, die in dieser Installation verwaltet werden.
-
-@node Benutzer anlegen
-@section Benutzer anlegen
-
-Beim Anlegen von Benutzern werden für viele Parameter
-Standardeinstellungen vorgenommen, die den Gepflogenheiten des
-deutschen Raumes entsprechen.
-
-Zwingend anzugeben sind der Loginname sowie die komplette
-Datenbankkonfiguration. Wenn die Passwortauthentifizierung über die
-Datenbank eingestellt ist, so kann hier auch das Benutzerpasswort
-gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung
-aktiv, so ist das Passwort-Feld deaktiviert.
-
-In der Datenbankkonfiguration müssen die Zugriffsdaten einer der eben
-angelegten Datenbanken eingetragen werden.
-
-@node Gruppenmitgliedschaften verwalten
-@section Gruppenmitgliedschaften verwalten
-
-Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den Gruppen
-zugewiesen werden. Dazu gibt es zwei Möglichkeiten:
-
-@enumerate
-@item
-In der Gruppenverwaltung wählt man eine Gruppe aus. Im folgenden
-Dialog kann man dann einzeln die Benutzer der Gruppe hinzufügen.
-@item
-In der Gruppenverwaltung wählt man das Tool zur Verwaltung der
-Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die alle im
-System angelegten Gruppen und Benutzer enthält. Durch Setzen der
-Häkchen wird der Benutzer in der ausgewählten Zeile der Gruppe in der
-ausgewählten Spalte hinzugefügt.
-@end enumerate
-
-@node Migration alter Installationen
-@section Migration alter Installationen
-
-Wenn Lx-Office 2.6.2 über eine ältere Version installiert wird, in der
-die Benutzerdaten noch im Dateisystem im Verzeichnis @code{users}
-verwaltet wurden, so bietet Lx-Office die Möglichkeit, diese
-Benutzerdaten automatisch in die Authentifizierungsdatenbank zu
-übernehmen. Dies geschieht, wenn man sich nach dem Update der
-Installation das erste Mal im Administrationsbereich anmeldet. Findet
-Lx-Office die Datei @code{users/members}, so wird der
-Migrationsprozess gestartet.
-
-Der Migrationsprozess ist nahezu vollautomatisch. Alle Benutzerdaten
-können übernommen werden. Nach den Benutzerdaten bietet Lx-Office noch
-die Möglichkeit an, dass automatisch eine Benutzergruppe angelegt
-wird. Dieser Gruppe wird Zugriff auf alle Funktionen von Lx-Office
-gewährt. Alle migrierten Benutzern werden Mitglied in dieser
-Gruppe. Damit wird das Verhalten von Lx-Office bis Version 2.4.3
-inklusive wiederhergestellt, und die Benutzer können sich sofort
-wieder anmelden und mit dem System arbeiten.
-
-@c ---------------------------------------------------------------
-
-@node Drucken mit Lx-Office
-@chapter Drucken mit Lx-Office
-
-Das Drucksystem von Lx-Office benutzt von Haus aus LaTeX Vorlagen. Um drucken
-zu können, braucht der Server ein geeignetes LaTeX System. Am einfachsten ist
-dazu eine @code{texlive} Installation. Unter Debianoiden Betriebssystemen sind
-das die Pakete:
-
-@code{texlive-latex-base texlive-latex-extra texlive-fonts-recommended}
-
-Diese hinteren beiden enthalten Bibliotheken und Schriftarten die von den
-Standardvorlagen verwendet werden.
-
-TODO: rpm Pakete.
-
-In den allermeisten Installationen sollte drucken jetzt schon funktionieren.
-Sollte ein Fehler auftreten wirft TeX sehr lange Fehlerbeschreibungen, der
-eigentliche Fehler ist immer die erste Zeite die mit einem Ausrufezeichen
-anfängt. Häufig auftretende Fehler sind zum Beispiel:
-
-@itemize
-@item ! LaTeX Error: File `eurosym.sty' not found.
-Die entsprechende LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem
-bei Vorlagen aus der Community auf. Installieren Sie die entsprechenden Pakete.
-@item ! Package inputenc Error: Unicode char \u8:æ¡\9c not set up for use with LaTeX.
-Dieser Fehler tritt auf, wenn sie versuchen mit einer Standardinstallation
-exotische utf8 Zeichen zu drucken. TeXLive unterstützt von Haus nur romanische
-Schriften und muss mit diversen Tricks dazu gebracht werden andere Zeichen zu
-akzeptieren. Adere TeX Systeme wie XeTeX schaffen hier Abhilfe.
-@end itemize
-
-Wird garkein Fehler angezeigt sondern nur der Name des Templates, heißt das
-normalerweise, dass das LaTeX Binary nicht gefunden wurde. Prüfen Sie den Namen
-in der Konfiguration (Standard: @code{pdflatex}), und stellen Sie sicher, dass
-pdflatex (oder das von Ihnen verwendete System) vom Webserver ausgeführt werden
-darf.
-
-@c ---------------------------------------------------------------
-
-@node OpenDocument-Vorlagen
-@chapter OpenDocument-Vorlagen
-
-Lx-Office unterstützt die Verwendung von Vorlagen im
-OpenDocument-Format, wie es OpenOffice.org ab Version 2
-erzeugt. Lx-Office kann dabei sowohl neue OpenDocument-Dokumente als
-auch aus diesen direkt PDF-Dateien erzeugen.  Um die Unterstützung von
-OpenDocument-Vorlagen zu aktivieren muss in der Datei
-@file{config/lx_office.conf} die Variable @code{opendocument} im
-Abschnitt @code{print_templates} auf @samp{1} stehen.  Dieses ist die
-Standardeinstellung.
-
-Weiterhin muss in der Datei @file{config/lx_office.conf} die Variable
-@code{dbcharset} im Abschnitt @code{system} auf die Zeichenkodierung
-gesetzt werden, die auch bei der Speicherung der Daten in der
-Datenbank verwendet wird. Diese ist in den meisten Fällen "UTF-8".
-
-Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
-weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
-OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
-neben OpenOffice.org ab Version 2 auch der ``X virtual frame buffer''
-(xvfb) installiert werden.  Bei Debian ist er im Paket ``xvfb''
-enthalten. Andere Distributionen enthalten ihn in anderen Paketen.
-
-Nach der Installation müssen in der Datei @file{config/lx_config.conf}
-zwei weitere Variablen angepasst werden: @code{openofficeorg_writer}
-muss den vollständigen Pfad zur OpenOffice.org Writer-Anwendung
-enthalten. @code{xvfb} muss den Pfad zum ``X virtual frame buffer''
-enthalten. Beide stehen im Abschnitt @code{applications}.
-
-Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit
-OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn
-die Variable @code{$openofficeorg_daemon} gesetzt ist, startet ein
-OpenOffice, das auch nach der Umwandlung des Dokumentes gestartet
-bleibt. Bei weiteren Umwandlungen wird dann diese laufende Instanz
-benutzt. Der Vorteil ist, dass die Zeit zur Umwandlung deutlich
-reduziert wird, weil nicht für jedes Dokument ein OpenOffice gestartet
-werden muss. Der Nachteil ist, dass diese Methode Python und die
-Python-UNO-Bindings benötigt, die Bestandteil von OpenOffice 2 sind.
-
-Ist @code{$openofficeorg_daemon} nicht gesetzt, so wird für jedes
-Dokument OpenOffice neu gestartet und die Konvertierung mit Hilfe
-eines Makros durchgeführt. Dieses Makro muss in der Dokumentenvorlage
-enthalten sein und ``Standard.Conversion.ConvertSelfToPDF()''
-heißen. Die Beispielvorlage @samp{templates/mastertemplates/German/invoice.odt}
-enthält ein solches Makro, das in jeder anderen Dokumentenvorlage
-ebenfalls enthalten sein muss.
-
-Als letztes muss herausgefunden werden, welchen Namen OpenOffice.org
-Writer dem Verzeichnis mit den Benutzereinstellungen gibt. Unter
-Debian ist dies momentan @code{~/.openoffice.org2}. Sollte der Name
-bei Ihrer OpenOffice.org-Installation anders sein, so muss das
-Verzeichnis @code{users/.openoffice.org2} entsprechend umbenannt
-werden. Ist der Name z.B. einfach nur @code{.openoffice}, so wäre
-folgender Befehl auszuführen:
-
-@code{mv users/.openoffice.org2 users/.openoffice}
-
-Dieses Verzeichnis, wie auch das komplette @code{users}-Verzeichnis, muss vom
-Webserver beschreibbar sein. Dieses wurde bereits erledigt
-(@pxref{Manuelle Installation des Programmpaketes}), kann aber erneut überprüft
-werden, wenn die Konvertierung nach PDF fehlschlägt.
-
-@c ---------------------------------------------------------------
-
-@node Lx-Office ERP verwenden
-@chapter Lx-Office ERP verwenden
-
-Nach erfolgreicher Installation ist der Loginbildschirm unter
-folgender URL erreichbar:
-
-@uref{http://localhost/lx-office-erp/login.pl}
-
-Die Administrationsseite erreichen Sie unter:
-
-@uref{http://localhost/lx-office-erp/admin.pl}
-
-@bye
diff --git a/doc/INSTALL.txt b/doc/INSTALL.txt
deleted file mode 100644 (file)
index 3539c12..0000000
+++ /dev/null
@@ -1,874 +0,0 @@
-Table of Contents
-*****************
-
-Inhalt der Anleitung
-1 Aktuelle Hinweise
-2 Benötigte Software und Pakete
-  2.1 Betriebssystem
-  2.2 Pakete
-3 Manuelle Installation des Programmpaketes
-4 Anpassung der PostgreSQL-Konfiguration
-  4.1 Zeichensätze/die Verwendung von UTF-8
-  4.2 Änderungen an Konfigurationsdateien
-  4.3 Erweiterung für servergespeicherte Prozeduren
-  4.4 Datenbankbenutzer anlegen
-5 Apache-Konfiguration
-6 Der Task-Server
-  6.1 Verfügbare und notwendige Konfigurationsoptionen
-  6.2 Automatisches Starten des Task-Servers beim Booten
-    6.2.1 SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora Core)
-    6.2.2 Upstart-basierende Systeme (z.B. Ubuntu)
-  6.3 Wie der Task-Server gestartet und beendet wird
-7 Benutzerauthentifizierung und Administratorpasswort
-  7.1 Grundlagen zur Benutzerauthentifizierung
-  7.2 Administratorpasswort
-  7.3 Authentifizierungsdatenbank
-  7.4 Passwortüberprüfung
-  7.5 Name des Session-Cookies
-  7.6 Anlegen der Authentifizierungsdatenbank
-8 Benutzer- und Gruppenverwaltung
-  8.1 Zusammenhänge
-  8.2 Datenbanken anlegen
-  8.3 Gruppen anlegen
-  8.4 Benutzer anlegen
-  8.5 Gruppenmitgliedschaften verwalten
-  8.6 Migration alter Installationen
-9 Drucken mit Lx-Office
-10 OpenDocument-Vorlagen
-11 Lx-Office ERP verwenden
-
-
-Inhalt der Anleitung
-********************
-
-1 Aktuelle Hinweise
-*******************
-
-Aktuelle Installations- und Konfigurationshinweise gibt es:
-
-   * auf der Lx-Office Homepage unter
-     `http://lx-office.org/index.php?id=dokumentation'
-
-   * im Lx-Office-Wiki unter Dokumentation
-     (`http://wiki.lx-office.org/index.php/Lx-Office_ERP')
-
-   * im Lx-Office-Forum: `http://www.lx-office.org/forum/'
-
-2 Benötigte Software und Pakete
-********************************
-
-2.1 Betriebssystem
-==================
-
-Lx-Office ist für Linux konzipiert, und sollte auf jedem unixoiden
-Betriebssystem zum Laufen zu kriegen sein. Getestet ist diese Version im
-speziellen auf Debian und Ubuntu, grundsätzlich wurde bei der Auswahl
-der Pakete aber darauf Rücksicht genommen, dass es ohne große Probleme
-auf den derzeit aktuellen verbreiteten Distributionen läuft.
-
-   Anfang 2011 sind das folgende Systeme:
-
-   * Ubuntu 8.04 LTS Hardy Heron
-
-   * Ubuntu 9.10 Karmic Koala
-
-   * Ubuntu 10.04 Lucid Lynx
-
-   * Ubuntu 10.10 Maverick Meerkat
-
-   * Debian 5.0 Lenny
-
-   * Debian 6.0 Squeeze
-
-   * openSUSE 11.2
-
-   * openSUSE 11.3
-
-   * SuSE Linux Enterprice Server 11
-
-   * Fedora 13
-
-   * Fedora 14
-
-   Für die debianoiden Betriebssysteme existiert ein .deb, das deutlich
-einfacher zu installieren ist.
-
-   Ubuntu 8.04 LTS hat zusätzlich die Schwierigkeit, dass die Module im
-Archiv recht alt sind, und das viele der benötigten Module nicht
-einfach zu installieren sind. Dafür sollte es kurz nach dem Release ein
-eigenes .deb geben.
-
-   Alternativ dazu kann die normale Installation durchgeführt werden
-(*note Manuelle Installation des Programmpaketes::), wenn vorher ein
-Kompatibilitätspaket installiert wird, das die fehlenden Pakete
-bereitstellt.  Das Paket ist auf Sourceforge
-(https://sourceforge.net/projects/lx-office/files/Lx-Office%20ERP/2.6.2/)
-unter dem Namen `lx-erp-perl-libs-compat-v2.tar.gz' hinterlegt.
-
-   Zur Installation das Paket in das entpackte Lx-Office Verzeichnis
-entpacken:
-
-   `tar xzf lx-erp-perl-libs-compat-v2.tar.gz /path/to/lx-office/'
-
-   Zusätzlich müssen dann noch die folgenden Pakete installiert weerden
-
-   `libbit-vector-perl libsub-exporter-perl libclone-perl
-libclass-factory-util-perl'
-
-   Danach sollte der Installationscheck (*note Pakete::) die
-enthaltenen Pakete erkennen.
-
-2.2 Pakete
-==========
-
-Zum Betrieb von Lx-Office werden zwingend ein Webserver (meist Apache)
-und ein Datenbankserver (PostgreSQL, mindestens v8.2) benötigt.
-
-   Zusätzlich benötigt Lx-Office die folgenden Perl-Pakete, die nicht
-Bestandteil einer Standard-Perl-Installation sind:
-
-   * parent
-
-   * Archive::Zip
-
-   * Config::Std
-
-   * DateTime
-
-   * DBI
-
-   * DBD::Pg
-
-   * Email::Address
-
-   * JSON
-
-   * List::MoreUtils
-
-   * Params::Validate
-
-   * PDF::API2
-
-   * Rose::Object
-
-   * Rose::DB
-
-   * Rose::DB::Object
-
-   * Template
-
-   * Text::CSV_XS
-
-   * Text::Iconv
-
-   * URI
-
-   * XML::Writer
-
-   * YAML
-
-   Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete hinzugekommen,
-`URI' und `XML::Writer' sind notwendig. Ohne startet Lx-Office nicht.
-
-   Gegenüber Version 2.6.1 sind `parent', `DateTime', `Rose::Object',
-`Rose::DB' und `Rose::DB::Object' neu hinzugekommen. `IO::Wrap' wurde
-entfernt.
-
-   Gegenüber Version 2.6.3 ist `JSON' neu hinzugekommen.
-
-   `Email::Address' und `List::MoreUtils' sind schon länger feste
-Abhängigkeiten, wurden aber bisher mit Lx-Office mitgeliefert.  Beide
-sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
-zukünftigen Version aber aus dem Paket entfernt werden. Es wird
-empfohlen diese Module zusammen mit den anderen als Bibliotheken zu
-installieren.
-
-   Die zu installierenden Pakete können in den verschiedenen
-Distributionen unterschiedlich heißen.
-
-   Für Debian oder Ubuntu benötigen Sie diese Pakete:
-
-   `apache2 postgresql libparent-perl libarchive-zip-perl
-libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl
-libemail-address-perl liblist-moreutils-perl libpdf-api2-perl
-librose-object-perl librose-db-perl librose-db-object-perl
-libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl
-libxml-writer-perl libyaml-perl libconfig-std-perl
-libparams-validate-perl libjson-perl'
-
-   Für Fedora Core benötigen Sie diese Pakete:
-
-   `httpd postgresql-server perl-parent perl-DateTime perl-DBI
-perl-DBD-Pg perl-Email-Address perl-List-MoreUtils perl-PDF-API2
-perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object perl-Template-Toolkit
-perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer perl-YAML'
-
-   Für OpenSuSE benötigen Sie diese Pakete:
-
-   `apache2 postgresql-server perl-Archive-Zip perl-DateTime perl-DBI
-perl-DBD-Pg perl-MailTools perl-List-MoreUtils perl-PDF-API2
-perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI
-perl-XML-Writer perl-YAML'
-
-   Bei openSuSE 11 ist `parent' bereits enthalten, und braucht nicht
-nachinstalliert werden. Die `Rose::*' Pakete sind derzeit nicht für
-SuSE gepackt, und müssen anderweitig nachinstalliert werden.
-
-   Lx-Office enthält ein Script, mit dem überprüft werden kann, ob alle
-benötigten Perl-Module installiert sind. Der Aufruf lautet wie folgt:
-
-   `./scripts/installation_check.pl'
-
-3 Manuelle Installation des Programmpaketes
-*******************************************
-
-Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.2.tgz) wird im
-Dokumentenverzeichnis des Webservers (z.B. `/var/www/html/',
-`/srv/www/htdocs' oder `/var/www/') entpackt:
-
-   `cd /var/www
-tar xvzf lxoffice-erp-2.6.2.tgz'
-
-   Verändern Sie evtl. noch den Namen des Verzeichnisses mit
-
-   `mv lxoffice-erp/ lx-erp/'
-
-   Alternativ können Sie auch einen Alias in der Webserverkonfiguration
-benutzen, um auf das tatsächliche Installationsverzeichnis zu verweisen.
-
-   Die Verzeichnisse `users', `spool' und `webdav' müssen für den
-Benutzer beschreibbar sein, unter dem der Webserver läuft. Die
-restlichen Dateien müssen für diesen Benutzer lesbar sein. Der
-Benutzername ist bei verschiedenen Distributionen unterschiedlich (z.B.
-bei Debian/Ubuntu `www-data', bei Fedora core `apache' oder bei
-OpenSuSE `wwwrun').
-
-   Der folgende Befehl ändert den Besitzer für die oben genannten
-Verzeichnisse auf einem Debian/Ubuntu-System:
-
-   `chown -R www-data lx-office-erp/users lx-office-erp/spool
-lx-office-erp/webdav'
-
-   Weiterhin muss der Webserver-Benutzer im Verzeichnis `templates'
-Verzeichnisse für jeden neuen Benutzer, der in lx-office angelegt wird,
-anlegen dürfen:
-
-   `chgrp www-data lx-office-erp/templates; chmod g+w
-lx-office-erp/templates'
-
-4 Anpassung der PostgreSQL-Konfiguration
-****************************************
-
-PostgreSQL muss auf verschiedene Weisen angepasst werden.
-
-4.1 Zeichensätze/die Verwendung von UTF-8
-==========================================
-
-Lx-Office kann komplett mit UTF-8 als Zeichensatz verwendet werden.
-Dabei gibt es zwei Punkte zu beachten: PostgreSQL muss in Version 8.0
-oder neuer benutzt werden, und der PostgreSQL-Datenbankcluster muss
-ebenfalls mit UTF-8 als Locale angelegt worden sein.
-
-   Dieses ist kann überprüft werden: ist das Encoding der Datenbank
-"template1" "UTF8", so kann auch Lx-Office mit UTF-8 betrieben werden.
-Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
-UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
-Ubuntu kann dies z.B. mit dem folgenden Befehl getan werden:
-
-   `pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2
-clustername'
-
-   Die Datenbankversionsnummer muss an die tatsächlich verwendete
-Versionsnummer angepasst werden.
-
-   Unter anderen Distributionen gibt es ähnliche Methoden.
-
-   Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und ist
-ein Neuanlegen eines weiteren Clusters nicht möglich, so kann Lx-Office
-mit ISO-8859-15 als Encoding betrieben werden.
-
-   Das Encoding einer Datenbank kann in `psql' mit `\l' geprüft werden.
-
-4.2 Änderungen an Konfigurationsdateien
-========================================
-
-In der Datei `postgresql.conf', die je nach Distribution in
-verschiedenen Verzeichnissen liegen kann (z.B. `/var/lib/pgsql/data/'
-oder `/etc/postgresql/', muss sichergestellt werden, dass
-TCP/IP-Verbindungen aktiviert sind. Das Verhalten wird über den
-Parameter `listen_address' gesteuert. Laufen PostgreSQL und Lx-Office
-auf demselben Rechner, so kann dort der Wert `localhost' verwendet
-werden. Andernfalls müssen Datenbankverbindungen auch von anderen
-Rechnern aus zugelassen werden, was mit dem Wert \`*' geschieht.
-
-   In der Datei `pg_hba.conf', die im gleichen Verzeichnis wie die
-`postgresql.conf' zu finden sein sollte, müssen die Berichtigungen für
-den Zugriff geändert werden. Hier gibt es mehrere Möglichkeiten. Eine
-besteht darin, lokale Verbindungen immer zuzulassen
-
-   `local all all trust
-host all all 127.0.0.1 255.0.0.0 trust'
-
-   Besser ist es, für eine bestimmte Datenbank Zugriff nur per Passwort
-zuzulassen. Beispielsweise:
-
-   `local   all         lxoffice
-  password
-host    all         lxoffice      127.0.0.1         255.255.255.255
-password'
-
-4.3 Erweiterung für servergespeicherte Prozeduren
-==================================================
-
-In der Datenbank `template1' muss die Unterstützung für
-servergespeicherte Prozeduren eingerichet werden. Melden Sie sich dafür
-als Benutzer "postgres" an der Datenbank an, und führen Sie die
-folgenden Kommandos aus:
-
-   `create language 'plpgsql';'
-
-   Achtung: In älteren Postgresversionen (vor 8.0) muss der Handler für
-die Sprache manuell anlelegt werden, diese Versionen werden aber nicht
-mehr offiziell von Lx-Office unterstützt. Dafür dann die folgenden
-Kommandos:
-
-   `create function plpgsql_call_handler () returns opaque as
-'/usr/lib/pgsql/plpgsql.so' language 'c';
-create language 'plpgsql' handler plpgsql_call_handler lancompiler
-'pl/pgsql';'
-
-   Bitte beachten Sie, dass der Pfad zur Datei `plpgsql.so' von
-Distribution zu Distribution verschiedlich sein kann. Bei Debian/Ubuntu
-befindet sie sich unter `/usr/lib/postgresql/lib/plpgsql.so'.
-
-4.4 Datenbankbenutzer anlegen
-=============================
-
-Wenn Sie nicht den Datenbanksuperuser "postgres" zum Zugriff benutzen
-wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer anlegen. Ein
-Beispiel, wie Sie einen neuen Benutzer anlegen können:
-
-   `su - postgres
-createuser -d -P lxoffice'
-
-   Wenn Sie später einen Datenbankzugriff konfigurieren, verändern Sie
-den evtl. voreingestellten Benutzer "postgres" auf "lxoffice" bzw. den
-hier gewählten Benutzernamen.
-
-5 Apache-Konfiguration
-**********************
-
-Hinweis: Für einen deutlichen Performanceschub sorgt die Ausführung
-mittels FCGI. Die Einrichtung wird ausführlich in der Datei
-`INSTALL.fcgi' beschrieben.
-
-   Der Zugriff auf das Programmverzeichnis muss in der Apache
-Webserverkonfigurationsdatei `httpd.conf' eingestellt werden. Fügen Sie
-den folgenden Abschnitt dieser Datei oder einer anderen Datei hinzu,
-die beim Starten des Webservers eingelesen wird:
-
-   `
-AddHandler cgi-script .pl
-Alias /lx-erp/ /var/www/lx-erp/
-<Directory /var/www/lx-erp>
-Options ExecCGI Includes FollowSymlinks
-</Directory>
-<Directory /var/www/lx-erp/users>
-Order Deny,Allow
-Deny from All
-</Directory>
-'
-
-   Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher das
-Lx-Office-Archiv entpacket haben.
-
-   Achtung: Vor den einzelnen Optionen muss bei einigen Distributionen
-ein Plus `+' gesetzt werden.
-
-   Auf einigen Webservern werden manchmal die Grafiken und Style-Sheets
-nicht ausgeliefert. In solchen Fällen hat es oft geholfen, die folgende
-Option in die Konfiguration aufzunehmen:
-
-   `EnableSendfile Off'
-
-6 Der Task-Server
-*****************
-
-Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
-regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese zu
-festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess
-wird bisher nur für die Erzeugung der wiederkehrenden Rechnungen
-benutzt, wird aber in Zukunft deutlich mehr Aufgaben übertragen
-bekommen.
-
-6.1 Verfügbare und notwendige Konfigurationsoptionen
-=====================================================
-
-Die Konfiguration erfolgt über den Abschnitt `[task_server]' in der
-Datei `config/lx_office.conf'. Die dort verfügbaren Optionen sind:
-
-   * `login': gültiger Lx-Office-Benutzername, der benutzt wird, um die
-     zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss
-     in der Administration angelegt werden. Diese Option muss angegeben
-     werden.
-
-   * `run_as': Wird der Server vom Systembenutzer `root' gestartet, so
-     wechselt er auf den mit `run_as' angegebenen Systembenutzer. Der
-     Systembenutzer muss dieselben Lese- und Schreibrechte haben, wie
-     auch der Webserverbenutzer (siehe *note Manuelle Installation des
-     Programmpaketes::). Daher ist es sinnvoll, hier denselben
-     Systembenutzer einzutragen, unter dem auch der Webserver läuft.
-
-   * `debug': Schaltet Debug-Informationen an und aus.
-
-6.2 Automatisches Starten des Task-Servers beim Booten
-======================================================
-
-Der Task-Server verhält sich von seinen Optionen her wie ein reguläres
-SystemV-kompatibles Boot-Script. Außerdem wechselt er beim Starten
-automatisch in das Lx-Office-Installationsverzeichnis.
-
-   Deshalb ist es möglich, ihn durch Setzen eines symbolischen Links aus
-einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
-einzubinden. Da das bei neueren Linux-Distributionen aber nicht
-zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
-anstelle eines symbolischen Links verwendet werden können.
-
-6.2.1 SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora Core)
----------------------------------------------------------------------
-
-Kopieren Sie die Datei `scripts/boot/system-v/lx-office-task-server'
-nach `/etc/init.d/lx-office-task-server'. Passen Sie in der kopierten
-Datei den Pfad zum Task-Server an (Zeile `DAEMON=....'). Binden Sie das
-Script in den Boot-Prozess ein. Dies ist distributionsabhängig:
-
-   * Debian-basierende Systeme:
-     `update-rc.d lx-office-task-server defaults
-     # Nur bei Debian Squeeze und neuer:
-     insserv lx-office-task-server'
-
-   * OpenSuSE und Fedora Core:
-     `chkconfig --add lx-office-task-server'
-
-   Danach kann der Task-Server mit dem folgenden Befehl gestartet
-werden: `/etc/init.d/lx-office-task-server start'
-
-6.2.2 Upstart-basierende Systeme (z.B. Ubuntu)
-----------------------------------------------
-
-Kopieren Sie die Datei
-`scripts/boot/upstart/lx-office-task-server.conf' nach
-`/etc/init/lx-office-task-server.conf'. Passen Sie in der kopierten
-Datei den Pfad zum Task-Server an (Zeile `exec ....').
-
-   Danach kann der Task-Server mit dem folgenden Befehl gestartet
-werden: `service lx-office-task-server start'
-
-6.3 Wie der Task-Server gestartet und beendet wird
-==================================================
-
-Der Task-Server wird wie folgt kontrolliert:
-
-   `./scripts/task_server.pl Befehl'
-
-   `Befehl' ist dabei eine der folgenden Optionen:
-
-   * `start' startet eine neue Instanz des Task-Servers. Die Prozess-ID
-     wird innerhalb des `users'-Verzeichnisses abgelegt.
-
-   * `stop' beendet einen laufenden Task-Server.
-
-   * `restart' beendet und startet ihn neu.
-
-   * `status' berichtet, ob der Task-Server läuft.
-
-   Der Task-Server wechselt beim Starten automatisch in das
-Lx-Office-Installationsverzeichnis.
-
-   Dieselben Optionen können auch für die SystemV-basierenden
-Runlevel-Scripte benutzt werden (siehe oben).
-
-7 Benutzerauthentifizierung und Administratorpasswort
-*****************************************************
-
-Informationen über die Einrichtung der Benutzerauthentifizierung, über
-die Verwaltung von Gruppen und weitere Einstellungen
-
-7.1 Grundlagen zur Benutzerauthentifizierung
-============================================
-
-Lx-Office verwaltet die Benutzerinformationen in einer Datenbank, die
-im folgenden "Authentifizierungsdatenbank" genannt wird. Für jeden
-Benutzer kann dort eine eigene Datenbank für die eigentlichen
-Finanzdaten hinterlegt sein. Diese beiden Datenbanken können, müssen
-aber nicht unterschiedlich sein.
-
-   Im einfachsten Fall gibt es für Lx-Office nur eine einzige Datenbank,
-in der sowohl die Benutzerinformationen als auch die Daten abgelegt
-werden.
-
-   Zusätzlich ermöglicht es Lx-Office, dass die Benutzerpasswörter
-entweder gegen die Authentifizierungsdatenbank oder gegen einen
-LDAP-Server überprüft werden.
-
-   Welche Art der Passwortüberprüfung Lx-Office benutzt und wie
-Lx-Office die Authentifizierungsdatenbank erreichen kann, wird in der
-Konfigurationsdatei `config/lx_office.conf' festgelegt. Diese muss bei
-der Installation und bei einem Upgrade von einer Version vor v2.6.0
-angelegt werden. Eine Beispielkonfigurationsdatei
-`config/lx_office.conf.default' existiert, die als Vorlage benutzt
-werden kann.
-
-7.2 Administratorpasswort
-=========================
-
-Das Passwort, das zum Zugriff auf das Aministrationsinterface benutzt
-wird, wird ebenfalls in dieser Datei gespeichert. Es kann auch nur dort
-und nicht mehr im Administrationsinterface selber geändert werden. Der
-Parameter dazu heißt `$self->{admin_password}'.
-
-7.3 Authentifizierungsdatenbank
-===============================
-
-Die Verbindung zur Authentifizierungsdatenbank wird mit den Parametern
-in `$self->{DB_config}' konfiguriert. Hier sind die folgenden Parameter
-anzugeben:
-
-   * `host' - Der Rechnername oder die IP-Adresse des Datenbankservers
-
-   * `port' - Die Portnummer des Datenbankservers, meist 5432
-
-   * `db' - Der Name der Authentifizierungsdatenbank
-
-   * `user' - Der Benutzername, mit dem sich Lx-Office beim
-     Datenbankserver anmeldet (z.B. "postgres")
-
-   * `password' - Das Passwort für den Datenbankbenutzer
-
-   Die Datenbank muss noch nicht existieren. Lx-Office kann sie
-automatisch anlegen (mehr dazu siehe unten).
-
-7.4 Passwortüberprüfung
-=========================
-
-Lx-Office unterstützt Passwortüberprüfung auf zwei Arten: gegen die
-Authentifizierungsdatenbank und gegen einen externen LDAP- oder
-Active-Directory-Server. Welche davon benutzt wird, regelt der
-Parameter `$self->{module}'.
-
-   Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank
-gespeichert werden, so muss der Parameter `$self->{module}' den Wert
-`DB' enthalten. In diesem Fall können sowohl der Administrator als auch
-die Benutzer selber ihre Psaswörter in Lx-Office ändern.
-
-   Soll hingegen ein externer LDAP- oder Active-Directory-Server benutzt
-werden, so muss der Parameter `$self->{module}' auf `LDAP' gesetzt
-werden. In diesem Fall müssen zusätzliche Informationen über den
-LDAP-Server in `$self->{LDAP_config}' angegeben werden:
-
-   * `host' - Der Rechnername oder die IP-Adresse des LDAP- oder
-     Active-Directory-Servers. Diese Angabe ist zwingend erforderlich.
-
-   * `port' - Die Portnummer des LDAP-Servers; meist 389.
-
-   * `tls' - Wenn Verbindungsverschlüsselung gewünscht ist, so diesen
-     Wert auf `1' setzen, andernfalls auf `0' belassen
-
-   * `attribute' - Das LDAP-Attribut, in dem der Benutzername steht,
-     den der Benutzer eingegeben hat. Für Active-Directory-Server   ist
-     dies meist `sAMAccountName', für andere LDAP-Server hingegen
-     `uid'. Diese Angabe ist zwingend erforderlich.
-
-   * `base_dn' - Der Abschnitt des LDAP-Baumes, der durchsucht werden
-     soll. Diese Angabe ist zwingend erforderlich.
-
-   * `filter' - Ein optionaler LDAP-Filter. Enthält dieser Filter das
-     Wort `<%login%>', so wird dieses durch den vom Benutzer
-     eingegebenen Benutzernamen ersetzt. Andernfalls wird der LDAP-Baum
-     nach einem Element durchsucht, bei dem das oben angegebene Attribut
-      mit dem Benutzernamen identisch ist.
-
-   * `bind_dn' und `bind_password' - Wenn der LDAP-Server eine
-     Anmeldung erfordert, bevor er durchsucht werden kann (z.B. ist
-     dies bei   Active-Directory-Servern der Fall), so kann diese hier
-     angegeben werden. Für Active-Directory-Server kann als `bind_dn'
-     entweder eine   komplette LDAP-DN wie z.B. `cn=Martin
-     Mustermann,cn=Users,dc=firmendomain' auch nur der volle Name des
-     Benutzers   eingegeben werden; in diesem Beispiel also `Martin
-     Mustermann'.
-
-7.5 Name des Session-Cookies
-============================
-
-Sollen auf einem Server mehrere Lx-Office-Installationen aufgesetzt
-werden, so müssen die Namen der Session-Cookies für alle Installationen
-unterschiedlich sein. Der Name des Cookies wird mit dem Parameter
-`$self->{cookie_name}' gesetzt.
-
-   Diese Angabe ist optional, wenn nur eine Installation auf dem Server
-existiert.
-
-7.6 Anlegen der Authentifizierungsdatenbank
-===========================================
-
-Nachdem alle Einstellungen in `config/lx_office.conf' vorgenommen
-wurden, muss Lx-Office die Authentifizierungsdatenbank anlegen. Dieses
-geschieht automatisch, wenn Sie sich im Administrationsmodul anmelden,
-das unter der folgenden URL erreichbar sein sollte:
-
-   `http://localhost/lx-erp/admin.pl'
-
-8 Benutzer- und Gruppenverwaltung
-*********************************
-
-Nach der Installation müssen Benutzer, Gruppen und Datenbanken angelegt
-werden.  Dieses geschieht im Administrationsmenü, das Sie unter
-folgender URL finden:
-
-   `http://localhost/lx-erp/admin.pl'
-
-   Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
-`config/lx_office.conf' eingetragen haben.
-
-8.1 Zusammenhänge
-==================
-
-Lx-Office verwendet eine Datenbank zum Speichern all seiner
-Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
-mit Lx-Office arbeiten zu können, muss eine Person einen
-Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
-Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
-möglich und normal, dass mehreren Benutzern die selbe Datenbank
-zugewiesen wird, sodass sie alle mit den selben Daten arbeiten können.
-
-   Die Basisdaten der Benutzer, die in der Administration eingegeben
-werden können, werden in einer zweiten Datenbank gespeichert, der
-bereits erwähnten Authentifizierungsdatenbank. Diese ist also den
-Produktivdaten enthaltenden Datenbanken vorgeschaltet. Pro
-Lx-Office-Installation gibt es nur eine Authentifizierungsdatenbank,
-aber beliebig viele Datenbanken mit Firmendaten.
-
-   Lx-Office kann seinen Benutzern Zugriff auf bestimmte
-Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
-gestattet, so werden der entsprechenden Menüpunkte auch nicht
-angezeigt. Diese Rechte werden ebenfalls in der
-Authentifizierungsdatenbank gespeichert.
-
-   Um Rechte verteilen zu können, verwendet Lx-Office ein
-Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
-erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
-mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
-Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
-Benutzer Mitglied ist.
-
-   Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und Benutzer
-angelegt werden sollten, lautet:
-
-  1. Datenbank anlegen
-
-  2. Gruppen anlegen
-
-  3. Benutzer anlegen
-
-  4. Benutzer den Gruppen zuordnen
-
-8.2 Datenbanken anlegen
-=======================
-
-Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für den
-Datenbankzugriff den vorhin angelegten Benutzer (in unseren Beispielen
-ist dies `lxoffice').
-
-   Wenn Sie für die Lx-Office-Installation nicht den europäischen
-Schriftsatz ISO-8859-15 sondern UTF-8 (Unicode) benutzen wollen, so
-müssen Sie vor dem Anlegen der Datenbank in der Datei
-`config/lx_office.conf' die Variable `dbcharset' im Abschnitt `system'
-auf den Wert `UTF-8' setzen. Zusätzlich muss beim Anlegen der Datenbank
-`UTF-8 Unicode' als Schriftsatz ausgewählt werden.
-
-   Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
-verwenden müssen, da diese Einstellungen momentan global in Lx-Office
-vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
-Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
-angelegt worden sein.
-
-8.3 Gruppen anlegen
-===================
-
-Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein Name
-gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
-Anlegen können Sie die verschiedenen Bereiche wählen, auf die
-Mitglieder dieser Gruppe Zugriff haben sollen.
-
-   Benutzergruppen sind unabhängig von Datenbanken, da sie in der
-Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
-Datenbanken, die in dieser Installation verwaltet werden.
-
-8.4 Benutzer anlegen
-====================
-
-Beim Anlegen von Benutzern werden für viele Parameter
-Standardeinstellungen vorgenommen, die den Gepflogenheiten des
-deutschen Raumes entsprechen.
-
-   Zwingend anzugeben sind der Loginname sowie die komplette
-Datenbankkonfiguration. Wenn die Passwortauthentifizierung über die
-Datenbank eingestellt ist, so kann hier auch das Benutzerpasswort
-gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung
-aktiv, so ist das Passwort-Feld deaktiviert.
-
-   In der Datenbankkonfiguration müssen die Zugriffsdaten einer der eben
-angelegten Datenbanken eingetragen werden.
-
-8.5 Gruppenmitgliedschaften verwalten
-=====================================
-
-Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den Gruppen
-zugewiesen werden. Dazu gibt es zwei Möglichkeiten:
-
-  1. In der Gruppenverwaltung wählt man eine Gruppe aus. Im folgenden
-     Dialog kann man dann einzeln die Benutzer der Gruppe hinzufügen.
-
-  2. In der Gruppenverwaltung wählt man das Tool zur Verwaltung der
-     Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die alle im
-     System angelegten Gruppen und Benutzer enthält. Durch Setzen der
-     Häkchen wird der Benutzer in der ausgewählten Zeile der Gruppe in
-     der ausgewählten Spalte hinzugefügt.
-
-8.6 Migration alter Installationen
-==================================
-
-Wenn Lx-Office 2.6.2 über eine ältere Version installiert wird, in der
-die Benutzerdaten noch im Dateisystem im Verzeichnis `users' verwaltet
-wurden, so bietet Lx-Office die Möglichkeit, diese Benutzerdaten
-automatisch in die Authentifizierungsdatenbank zu übernehmen. Dies
-geschieht, wenn man sich nach dem Update der Installation das erste Mal
-im Administrationsbereich anmeldet. Findet Lx-Office die Datei
-`users/members', so wird der Migrationsprozess gestartet.
-
-   Der Migrationsprozess ist nahezu vollautomatisch. Alle Benutzerdaten
-können übernommen werden. Nach den Benutzerdaten bietet Lx-Office noch
-die Möglichkeit an, dass automatisch eine Benutzergruppe angelegt wird.
-Dieser Gruppe wird Zugriff auf alle Funktionen von Lx-Office gewährt.
-Alle migrierten Benutzern werden Mitglied in dieser Gruppe. Damit wird
-das Verhalten von Lx-Office bis Version 2.4.3 inklusive
-wiederhergestellt, und die Benutzer können sich sofort wieder anmelden
-und mit dem System arbeiten.
-
-9 Drucken mit Lx-Office
-***********************
-
-Das Drucksystem von Lx-Office benutzt von Haus aus LaTeX Vorlagen. Um
-drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
-einfachsten ist dazu eine `texlive' Installation. Unter Debianoiden
-Betriebssystemen sind das die Pakete:
-
-   `texlive-latex-base texlive-latex-extra texlive-fonts-recommended'
-
-   Diese hinteren beiden enthalten Bibliotheken und Schriftarten die
-von den Standardvorlagen verwendet werden.
-
-   TODO: rpm Pakete.
-
-   In den allermeisten Installationen sollte drucken jetzt schon
-funktionieren.  Sollte ein Fehler auftreten wirft TeX sehr lange
-Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite
-die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind
-zum Beispiel:
-
-   * ! LaTeX Error: File `eurosym.sty' not found.  Die entsprechende
-     LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem bei
-     Vorlagen aus der Community auf. Installieren Sie die
-     entsprechenden Pakete.
-
-   * ! Package inputenc Error: Unicode char \u8:æ¡\9c not set up for use
-     with LaTeX.  Dieser Fehler tritt auf, wenn sie versuchen mit einer
-     Standardinstallation exotische utf8 Zeichen zu drucken. TeXLive
-     unterstützt von Haus nur romanische Schriften und muss mit
-     diversen Tricks dazu gebracht werden andere Zeichen zu
-     akzeptieren. Adere TeX Systeme wie XeTeX schaffen hier Abhilfe.
-
-   Wird garkein Fehler angezeigt sondern nur der Name des Templates,
-heißt das normalerweise, dass das LaTeX Binary nicht gefunden wurde.
-Prüfen Sie den Namen in der Konfiguration (Standard: `pdflatex'), und
-stellen Sie sicher, dass pdflatex (oder das von Ihnen verwendete
-System) vom Webserver ausgeführt werden darf.
-
-10 OpenDocument-Vorlagen
-************************
-
-Lx-Office unterstützt die Verwendung von Vorlagen im
-OpenDocument-Format, wie es OpenOffice.org ab Version 2 erzeugt.
-Lx-Office kann dabei sowohl neue OpenDocument-Dokumente als auch aus
-diesen direkt PDF-Dateien erzeugen.  Um die Unterstützung von
-OpenDocument-Vorlagen zu aktivieren muss in der Datei
-`config/lx_office.conf' die Variable `opendocument' im Abschnitt
-`print_templates' auf `1' stehen.  Dieses ist die Standardeinstellung.
-
-   Weiterhin muss in der Datei `config/lx_office.conf' die Variable
-`dbcharset' im Abschnitt `system' auf die Zeichenkodierung gesetzt
-werden, die auch bei der Speicherung der Daten in der Datenbank
-verwendet wird. Diese ist in den meisten Fällen "UTF-8".
-
-   Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
-weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
-OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
-neben OpenOffice.org ab Version 2 auch der "X virtual frame buffer"
-(xvfb) installiert werden.  Bei Debian ist er im Paket "xvfb"
-enthalten. Andere Distributionen enthalten ihn in anderen Paketen.
-
-   Nach der Installation müssen in der Datei `config/lx_config.conf'
-zwei weitere Variablen angepasst werden: `openofficeorg_writer' muss
-den vollständigen Pfad zur OpenOffice.org Writer-Anwendung enthalten.
-`xvfb' muss den Pfad zum "X virtual frame buffer" enthalten. Beide
-stehen im Abschnitt `applications'.
-
-   Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit
-OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn die
-Variable `$openofficeorg_daemon' gesetzt ist, startet ein OpenOffice,
-das auch nach der Umwandlung des Dokumentes gestartet bleibt. Bei
-weiteren Umwandlungen wird dann diese laufende Instanz benutzt. Der
-Vorteil ist, dass die Zeit zur Umwandlung deutlich reduziert wird, weil
-nicht für jedes Dokument ein OpenOffice gestartet werden muss. Der
-Nachteil ist, dass diese Methode Python und die Python-UNO-Bindings
-benötigt, die Bestandteil von OpenOffice 2 sind.
-
-   Ist `$openofficeorg_daemon' nicht gesetzt, so wird für jedes
-Dokument OpenOffice neu gestartet und die Konvertierung mit Hilfe eines
-Makros durchgeführt. Dieses Makro muss in der Dokumentenvorlage
-enthalten sein und "Standard.Conversion.ConvertSelfToPDF()" heißen. Die
-Beispielvorlage `templates/mastertemplates/German/invoice.odt' enthält
-ein solches Makro, das in jeder anderen Dokumentenvorlage ebenfalls
-enthalten sein muss.
-
-   Als letztes muss herausgefunden werden, welchen Namen OpenOffice.org
-Writer dem Verzeichnis mit den Benutzereinstellungen gibt. Unter Debian
-ist dies momentan `~/.openoffice.org2'. Sollte der Name bei Ihrer
-OpenOffice.org-Installation anders sein, so muss das Verzeichnis
-`users/.openoffice.org2' entsprechend umbenannt werden. Ist der Name
-z.B. einfach nur `.openoffice', so wäre folgender Befehl auszuführen:
-
-   `mv users/.openoffice.org2 users/.openoffice'
-
-   Dieses Verzeichnis, wie auch das komplette `users'-Verzeichnis, muss
-vom Webserver beschreibbar sein. Dieses wurde bereits erledigt (*note
-Manuelle Installation des Programmpaketes::), kann aber erneut überprüft
-werden, wenn die Konvertierung nach PDF fehlschlägt.
-
-11 Lx-Office ERP verwenden
-**************************
-
-Nach erfolgreicher Installation ist der Loginbildschirm unter folgender
-URL erreichbar:
-
-   `http://localhost/lx-office-erp/login.pl'
-
-   Die Administrationsseite erreichen Sie unter:
-
-   `http://localhost/lx-office-erp/admin.pl'
-
-
-\1f
-Local Variables:
-coding: utf-8
-End:
diff --git a/doc/Lx-Office_Installation_DE.pdf b/doc/Lx-Office_Installation_DE.pdf
deleted file mode 100644 (file)
index 02c0543..0000000
Binary files a/doc/Lx-Office_Installation_DE.pdf and /dev/null differ
diff --git a/doc/build/custom-cfg/common.xsl b/doc/build/custom-cfg/common.xsl
new file mode 100644 (file)
index 0000000..13239cb
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:fo="http://www.w3.org/1999/XSL/Format"\r
+                version='1.0'>\r
+\r
+\r
+</xsl:stylesheet>\r
diff --git a/doc/build/custom-cfg/eclipse.xsl b/doc/build/custom-cfg/eclipse.xsl
new file mode 100644 (file)
index 0000000..817da32
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/eclipse-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>\r
diff --git a/doc/build/custom-cfg/epub.xsl b/doc/build/custom-cfg/epub.xsl
new file mode 100644 (file)
index 0000000..508d783
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/epub-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/doc/build/custom-cfg/fo.xsl b/doc/build/custom-cfg/fo.xsl
new file mode 100644 (file)
index 0000000..bee2136
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:fo="http://www.w3.org/1999/XSL/Format"\r
+                version='1.0'>\r
+\r
+  <xsl:import href="../../../system/custom-xsl/fo-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>\r
diff --git a/doc/build/custom-cfg/html.xsl b/doc/build/custom-cfg/html.xsl
new file mode 100644 (file)
index 0000000..042bd8a
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/html-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/doc/build/custom-cfg/htmlhelp.xsl b/doc/build/custom-cfg/htmlhelp.xsl
new file mode 100644 (file)
index 0000000..5462cd8
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/htmlhelp-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/doc/build/custom-cfg/javahelp.xsl b/doc/build/custom-cfg/javahelp.xsl
new file mode 100644 (file)
index 0000000..50d5aee
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/javahelp-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/doc/build/custom-cfg/local-entities.xml b/doc/build/custom-cfg/local-entities.xml
new file mode 100644 (file)
index 0000000..9f4216b
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<!ENTITY local_entity "local entity (defined per document)">\r
diff --git a/doc/build/custom-cfg/localbuild.properties b/doc/build/custom-cfg/localbuild.properties
new file mode 100644 (file)
index 0000000..d6bef76
--- /dev/null
@@ -0,0 +1,22 @@
+# BEGIN Do not overwrite\r
+document.type = book\r
+# END Do not overwrite\r
+\r
+# Overwrite properties here\r
+\r
+# If you happen to have sub documents you can set here the document type of each one of those.\r
+#document.<sub_document_name>.type = article|book|set|website|slides...\r
+\r
+# These are needed for the 'eclipse' target\r
+eclipse.plugin.id=com.mycompany\r
+eclipse.plugin.name=Document Name\r
+eclipse.plugin.provider=My Company\r
+\r
+# The version of the eclipse plugin\r
+eclipse.plugin.version=${document.version}\r
+\r
+# The version of the document\r
+document.version = 1.0\r
+\r
+# The name of the folder whose content will be carbon copied to the output directory\r
+special.folder.name.carbonCopy=copy_to_output\r
diff --git a/doc/build/custom-cfg/localbuild.xml b/doc/build/custom-cfg/localbuild.xml
new file mode 100644 (file)
index 0000000..acd490d
--- /dev/null
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<project>\r
+\r
+  <!--
+  You can add hooks here that perform your custom action at a given point.
+  Please see the manual (or the the file etc/build-output-formats.xml) for all
+  available hooks.
+  
+  Example:
+  
+  <target name="local-pre-init" >
+  </target>
+  -->
+\r
+</project>
\ No newline at end of file
diff --git a/doc/build/custom-cfg/manpages.xsl b/doc/build/custom-cfg/manpages.xsl
new file mode 100644 (file)
index 0000000..9a1b744
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+                version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/manpages.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>\r
diff --git a/doc/build/custom-cfg/rtf.xsl b/doc/build/custom-cfg/rtf.xsl
new file mode 100644 (file)
index 0000000..da292db
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/rtf-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/doc/build/custom-cfg/singlehtml.xsl b/doc/build/custom-cfg/singlehtml.xsl
new file mode 100644 (file)
index 0000000..f433906
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/singlehtml-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>
\ No newline at end of file
diff --git a/doc/build/custom-cfg/singlexhtml.xsl b/doc/build/custom-cfg/singlexhtml.xsl
new file mode 100644 (file)
index 0000000..2468973
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/singlexhtml-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>\r
diff --git a/doc/build/custom-cfg/slides.xsl b/doc/build/custom-cfg/slides.xsl
new file mode 100644 (file)
index 0000000..0153586
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+                version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/slides.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>\r
diff --git a/doc/build/custom-cfg/style-common.css b/doc/build/custom-cfg/style-common.css
new file mode 100644 (file)
index 0000000..b001aba
--- /dev/null
@@ -0,0 +1,453 @@
+/* Basic Settings:                                                            */\r
+\r
+body {\r
+       background-color: White; /* black foreground */\r
+       color: Black; /* center the body content in browser window */\r
+       margin: auto; /* padding ("inner margin") leaves space between */\r
+       padding: 24px; /* set width according to browser window width */\r
+       width: auto; /* text alignment */\r
+       text-align: justify; /* text-align: left; */\r
+}\r
+\r
+/* para */\r
+p {\r
+  /* font size, line height, font */\r
+  /* list of fonts provides fallbacks if a font is not present */\r
+  font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+  /* margin (top - right - bottom - left) */\r
+  margin: 0 15px 6px 15px;\r
+}\r
+\r
+\r
+\r
+\r
+/* NEEDS TO BE CLEARED UP */\r
+\r
+\r
+p, td, li, dt, dd\r
+{\r
+  /* font size, line height, font */\r
+  /* list of fonts provides fallbacks if a font is not present */\r
+  font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+}\r
+\r
+\r
+\r
+/* set font for most elements                    */\r
+/* p: paragraphs (regular text, docbook <para>)  */\r
+/* (...) */\r
+/* body: anything else  */\r
+body, p, td, li, dt, dd,\r
+{\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+}\r
+\r
+/* images */\r
+/* docbook: <imageobject> */\r
+img {\r
+/* no margin */\r
+margin: 0;\r
+\r
+/* no padding ("inner margin") */\r
+padding: 0;\r
+\r
+/* no border */\r
+border: 0;\r
+}\r
+\r
+\r
+/* emphasized text, can occur in most places */\r
+/* docbook: <emphasis> */\r
+em {\r
+/* bold face, higher number is more bold */\r
+font-weight: 600;\r
+/* italic */\r
+font-style: italic;\r
+}\r
+\r
+\r
+/* sect(ion)1 title */\r
+h2 {\r
+       font-family: Georgia, Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 125%; /* bold face, higher number is more bold */\r
+       font-weight: 600; /* underlined text */\r
+       text-decoration: none; /* foreground color: dark blue */\r
+       color: Black; /* background color: gray */\r
+       background-color: Orange; /* margin settings are top - right - bottom - left (think clockwise) */\r
+       margin: 15px 0 15px 0; /* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+       padding: 8px 15px 8px 15px; \r
+       /* border: 1px solid #000; */\r
+}\r
+\r
+\r
+/* sect(ion)2 title */\r
+h3 {\r
+       font-family: Georgia, Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 110%; /* bold face, higher number is more bold */\r
+       font-weight: 600; /* underlined text */\r
+       text-decoration: none; /* foreground color: dark blue */\r
+       color: Black; /* background-color is a very light grey */\r
+       background-color: #fefefe; /* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+       padding: 0 0 0 15px;\r
+}\r
+\r
+\r
+/* sect(ion)3 title */\r
+h4 {\r
+       font-family: Georgia, Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 100%; /* bold face, higher number is more bold */\r
+       font-weight: 600; /* underlined text */\r
+       text-decoration: none; /* foreground color: dark blue */\r
+       color: Black; /* background-color is a very light grey */\r
+       background-color: #fefefe; /* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+       padding: 0 0 0 15px;\r
+}\r
+\r
+\r
+/* sect(ion)4 title */\r
+h5 {\r
+       font-family: Georgia, Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 100%; /* bold face, higher number is more bold */\r
+       font-weight: 300; /* not underlined */\r
+       text-decoration: none; /* foreground color: dark blue */\r
+       color: Black; /* background-color is a very light grey */\r
+       background-color: #fefefe; /* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+       padding: 0 0 0 15px;\r
+}\r
+\r
+/* the following formats refer to the docbook tags of the same name           */\r
+/* for more information, see the docbook reference at                         */\r
+/* http://www.docbook.org/tdg/en/html/docbook.html                            */\r
+\r
+.mediaobject\r
+{\r
+/* center */\r
+text-align: center;\r
+}\r
+\r
+\r
+/*  */\r
+.calloutlist, .figure, .table\r
+{\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 15px 30px 15px 30px;\r
+}\r
+\r
+\r
+/*  */\r
+.itemizedlist, .variablelist {\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 15px 30px 15px 15px;\r
+}\r
+\r
+/* blockquote formatting is a little more complex    */\r
+/* because block quotes are rendered as a html table */\r
+\r
+/* blockquote block */\r
+.blockquote\r
+{\r
+/* override bottom margin, the other margins are inherited */\r
+margin-bottom: 30px;\r
+}\r
+\r
+.blockquote p, .blockquote td\r
+{\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* bold face, higher number is more bold */\r
+font-weight: 450;\r
+}\r
+\r
+\r
+.epigraph\r
+{\r
+/* override bottom margin, the other margins are inherited */\r
+margin-bottom: 30px;\r
+}\r
+\r
+.epigraph p, .epigraph td\r
+{\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font: 10px/14px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* bold face, higher number is more bold */\r
+font-weight: 600;\r
+}\r
+\r
+\r
+\r
+/* custom header and footer that are displayed on all pages */\r
+#customheader, #customfooter\r
+{\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font-family: Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* font size, relative to body font size */\r
+font-size: 80%;\r
+\r
+/* line height, relative to body font size */\r
+line-height: 200%;\r
+\r
+\r
+text-align: center;\r
+vertical-align: middle;\r
+color: #fff;\r
+background-color: #009;\r
+}\r
+\r
+\r
+/* leave more space between last paragraph and footer  */\r
+/* some browser do not add up the bottom margin of the prior element */\r
+/* and the top margin of the footer */\r
+#customfooter {\r
+margin-top: 15px;\r
+}\r
+\r
+\r
+\r
+/* table { margin: 0 15px 6px 15px; } */\r
+\r
+\r
+/* title and navigation links in header and footer */\r
+.navheader th, .navheader td, .navfooter th, .navfooter td\r
+{\r
+font-size: 11px;\r
+font-weight: 450;\r
+}\r
+\r
+\r
+/* table of contents, list of figures and list of tables */\r
+.toc, .list-of-figures, .list-of-tables, .list-of-examples\r
+{\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 15px 30px 15px 15px;\r
+}\r
+\r
+\r
+/* the "headings" are rendered as paragraphs */\r
+.toc p, .list-of-figures p, .list-of-tables p, .list-of-examples p\r
+{\r
+/* no margin */\r
+margin: 0;\r
+}\r
+\r
+\r
+.figure\r
+{\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 5px 5px 5px 5px;\r
+\r
+/* no padding ("inner border") */\r
+padding: 0;\r
+\r
+/* no border */\r
+border: 0;\r
+\r
+/* center text */\r
+text-align: center;\r
+}\r
+\r
+\r
+/* figure title */\r
+.figure p, .table p, .example p\r
+{\r
+font-size: 80%;\r
+}\r
+\r
+\r
+/*\r
+acronym {\r
+      border-bottom: 1px dashed #00cc00;\r
+      cursor: help;\r
+}\r
+*/\r
+\r
+\r
+/* admonition headings */\r
+div.note, div.important, div.warning, div.caution, div.tip\r
+{\r
+padding: 0px 15px 0px 0px;\r
+}\r
+\r
+div.note th, div.important th, div.warning th, div.caution th, div.tip th\r
+{\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+font-weight: 600;\r
+\r
+text-decoration: underline;\r
+\r
+/* left align */\r
+text-align: left;\r
+}\r
+\r
+.note p, .important p, .warning p, .caution p, .tip p\r
+{\r
+margin: 0;\r
+}\r
+\r
+.note img, .important img, .warning img, .caution img, .tip img\r
+{\r
+margin: 0px 15px 0px 15px;\r
+}\r
+\r
+\r
+/* programlisting */\r
+pre.programlisting\r
+{\r
+/* non-proportional font */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font-family: "Courier New", Courier, Monospace;\r
+\r
+/* color: black */\r
+color: #000;\r
+\r
+/* background color: gray */\r
+background-color: #eee;\r
+\r
+/* no margin */\r
+margin: 0;\r
+\r
+/* gray dotted border, 1 px wide */\r
+border: 1px dotted #ddd;\r
+\r
+/* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+padding: 6px 6px 6px 6px;\r
+}\r
+\r
+\r
+/* title page */\r
+\r
+\r
+/* heading1 is used for document title */\r
+h1\r
+{\r
+       font-family: Georgia,Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 150%; /* bold face, higher number is more bold */\r
+       font-weight: 600; /* line height, relative to body line height */\r
+       line-height: 250%; /* center */\r
+       text-align: center; /* foreground color: dark blue */\r
+       color: Black; /* background color: gray */\r
+       background-color: Orange; /* margin settings are top - right - bottom - left (think clockwise) */\r
+       margin: 15px 0 15px 0; /* no padding ("inner margin") */\r
+       padding: 15;\r
+       border: 1px solid #000; \r
+}\r
+\r
+\r
+\r
+/* author on title page is formatted as h3          */\r
+/* these settings overwrite the regular h3 settings */\r
+h3.author {\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks in case selected fonts are not present */\r
+font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* bold face, higher number is more bold */\r
+font-weight: 600;\r
+\r
+/* do not underline */\r
+text-decoration: none;\r
+\r
+/* center text */\r
+text-align: center;\r
+\r
+/* color: black */\r
+color: #000;\r
+\r
+/* background-color is a very light grey */\r
+/* alternative: #fff = white             */\r
+background-color: #fefefe;\r
+\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 0 15px 15px 15px;\r
+\r
+/* no padding */\r
+padding: 0;\r
+\r
+/* no border */\r
+border: 0;\r
+}\r
+\r
+\r
+/* copyright and date */\r
+.copyright, .pubdate\r
+{\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font-family: Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* font size, relative to body font size */\r
+font-size: 90%;\r
+\r
+/* center */\r
+text-align: center;\r
+\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 15px 15px 15px 15px;\r
+\r
+/* no padding ("inner margin") */\r
+padding: 0;\r
+\r
+/* no border */\r
+border: 0;\r
+}\r
+\r
+\r
+/* legal notice box */\r
+div.legalnotice\r
+{\r
+       font-family: Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 90%; /* color: black */\r
+       color: #000; /* background color: gray */\r
+       background-color: Orange; /* margin settings are top - right - bottom - left (think clockwise) */\r
+       margin: 10px 45px 10px 45px; /* padding ("inner margin") settings are top - right - bottom - left */\r
+       padding: 5px 5px 5px 5px; /* solid black border, 1px wide */\r
+       border: 1px solid #000;\r
+}\r
+\r
+\r
+table {\r
+       /* border: thin solid orange; */\r
+       border-spacing: 0pt;\r
+       margin-top: 5;\r
+       margin-bottom: 5;\r
+}\r
+\r
+td {\r
+       font-family: SansSerif, Arial, Helvetica, sans-serif;\r
+    padding-left: 1;\r
+    padding-right: 1;\r
+    padding-top: 1;\r
+    padding-bottom: 1  \r
+}\r
+\r
+th {\r
+        /* border: thin solid orange; */        \r
+    padding-left: 1;\r
+    padding-right: 1;\r
+    padding-top: 1;\r
+    padding-bottom: 1  \r
+}\r
+\r
+.informaltable {\r
+   border-collapse: collapse;\r
+       table-layout: auto;\r
+}\r
+\r
+.revhistory {\r
+   border-collapse: collapse;\r
+       table-layout: auto;\r
+}
\ No newline at end of file
diff --git a/doc/build/custom-cfg/style-eclipse.css b/doc/build/custom-cfg/style-eclipse.css
new file mode 100644 (file)
index 0000000..f43bf3e
--- /dev/null
@@ -0,0 +1,109 @@
+body  {font-size: 10pt;\r
+       font-family: SansSerif, Arial, Helvetica, sans-serif;\r
+       margin-left: 10;\r
+       margin-right: 5;\r
+       color: Black;\r
+       background-color: White}\r
+\r
+h1 {\r
+  font-size: 18pt;\r
+}\r
+\r
+h2 {\r
+  font-size: 16pt;\r
+}\r
+\r
+h3 {\r
+  font-size: 14pt;\r
+}\r
+\r
+h4 {\r
+  font-size: 12pt;\r
+}\r
+\r
+table {\r
+  font-size: 10pt;\r
+  border-style: none;\r
+  border-color: silver;\r
+  margin-top: 5;\r
+  margin-bottom: 5\r
+}\r
+\r
+td {font-size: 10pt;\r
+    font-family: SansSerif, Arial, Helvetica, sans-serif;\r
+    border-color: silver;\r
+    padding-left: 1;\r
+    padding-right: 1;\r
+    padding-top: 1;\r
+    padding-bottom: 1}\r
+\r
+th {border-style: none;\r
+    font-weight: bold;\r
+    border-color: silver;\r
+    padding-left: 1;\r
+    padding-right: 1;\r
+    padding-top: 1;\r
+    padding-bottom: 1}\r
+\r
+kbd {\r
+  font-family: monospace;\r
+  font-weight: bold;\r
+}\r
+\r
+var {\r
+  font-style: italic;\r
+}\r
+\r
+ol {\r
+  margin-bottom: 1em;\r
+}\r
+\r
+dt {\r
+  font-weight: bold;\r
+  margin-top: 1em;\r
+}\r
+\r
+li {\r
+  margin-top: 1em;\r
+}\r
+\r
+span.control {\r
+  font-weight: bold;\r
+}\r
+\r
+span.name {\r
+  font-style: italic;\r
+  font-weight: bold;\r
+}\r
+\r
+span.action {\r
+  font-style: italic;\r
+}\r
+\r
+span.code {\r
+  font-family: monospace;\r
+}\r
+\r
+span.menu {\r
+  color: #660033;\r
+  font-weight: bold;\r
+}\r
+\r
+span.filefolder {\r
+  font-family: monospace;\r
+}\r
+\r
+blockquote {\r
+  background-color: #e8e8e8;\r
+  border: 1pt black;\r
+  margin: 2em; border: 1px solid black;\r
+  padding: 1em;\r
+}\r
+\r
+.tasks, .reference, .faq {\r
+  padding-left: 18px;\r
+  font-size: 14pt;\r
+  background-image:url(images/bullet14.png);\r
+  background-repeat: no-repeat;\r
+  background-position: left;\r
+ }
\ No newline at end of file
diff --git a/doc/build/custom-cfg/style-javahelp.css b/doc/build/custom-cfg/style-javahelp.css
new file mode 100644 (file)
index 0000000..29440e5
--- /dev/null
@@ -0,0 +1,76 @@
+/*\r
+ * jhexamples.css      06/17/2003\r
+ *\r
+ * Copyright 2002 Sun Microsystems, Inc. All rights reserved.\r
+ * Use is subject to license terms.\r
+ *\r
+ */\r
+\r
+body  {font-size: 12pt;\r
+       font-family: SansSerif, Arial, Helvetica, sans-serif;\r
+       margin-left: 10;\r
+       margin-right: 5;\r
+       color: Black;\r
+       background-color: White}\r
+\r
+p  {font-size: 12pt;\r
+     margin-top: 5;\r
+     margin-bottom: 5}\r
+\r
+\r
+h1 { font-size: 22pt;\r
+     font-weight: bold;\r
+     margin-top: 0;\r
+     margin-bottom: 10}\r
+\r
+h2 { font-size: 18pt;\r
+     font-weight: bold;\r
+     margin-top: 20;\r
+     margin-bottom: 10}\r
+\r
+h3 { font-size: 14pt;\r
+     font-weight: bold;\r
+     margin-top: 10;\r
+     margin-bottom: 5}\r
+\r
+h4 { font-size: 12pt;\r
+     font-weight: bold;\r
+     margin-top: 10;\r
+     margin-bottom: 5}\r
+\r
+ol {margin-top: 5;\r
+     margin-bottom: 0;\r
+     margin-left: 30}\r
+\r
+li {margin-top: 0;\r
+    margin-bottom: 5}\r
+        \r
+li p{margin-top: 5;\r
+        margin-bottom: 0}\r
+\r
+ul {margin-top: 5;\r
+    margin-bottom: 0;\r
+    margin-left: 30}\r
+        \r
+table {border-style: none;\r
+       border-color: silver;\r
+       margin-top: 5;\r
+       margin-bottom: 5}\r
+\r
+td {font-size: 12pt;\r
+    font-family: SansSerif, Arial, Helvetica, sans-serif;\r
+    border-color: silver;\r
+    padding-left: 1;\r
+    padding-right: 1;\r
+    padding-top: 1;\r
+    padding-bottom: 1}\r
+\r
+th {border-style: none;\r
+    border-color: silver;\r
+    padding-left: 1;\r
+    padding-right: 1;\r
+    padding-top: 1;\r
+    padding-bottom: 1}\r
+\r
+small {font-size: x-small}\r
+\r
diff --git a/doc/build/custom-cfg/wordml.xsl b/doc/build/custom-cfg/wordml.xsl
new file mode 100644 (file)
index 0000000..3eecdf5
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+                version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/wordml-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>\r
diff --git a/doc/build/custom-cfg/xhtml.xsl b/doc/build/custom-cfg/xhtml.xsl
new file mode 100644 (file)
index 0000000..2ced74b
--- /dev/null
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8"?>\r
+\r
+<!-- This file is part of DobuDish                                           -->\r
+\r
+<!-- DobuDish is free software; you can redistribute it and/or modify        -->\r
+<!-- it under the terms of the GNU General Public License as published by    -->\r
+<!-- the Free Software Foundation; either version 2 of the License, or       -->\r
+<!-- (at your option) any later version.                                     -->\r
+\r
+<!-- DobuDish is distributed in the hope that it will be useful,             -->\r
+<!-- but WITHOUT ANY WARRANTY; without even the implied warranty of          -->\r
+<!-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the           -->\r
+<!-- GNU General Public License for more details.                            -->\r
+\r
+<!-- You should have received a copy of the GNU General Public License       -->\r
+<!-- along with DobuDish; if not, write to the Free Software                 -->\r
+<!-- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -->\r
+\r
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"\r
+                xmlns:doc="http://nwalsh.com/xsl/documentation/1.0"\r
+                xmlns:exsl="http://exslt.org/common"\r
+                xmlns:set="http://exslt.org/sets"\r
+               version="1.0"\r
+                exclude-result-prefixes="doc exsl set">\r
+\r
+  <xsl:import href="../../../system/custom-xsl/xhtml-book.xsl"/>\r
+  <xsl:import href="common.xsl"/>\r
+\r
+</xsl:stylesheet>\r
diff --git a/doc/dokumentation.pdf b/doc/dokumentation.pdf
new file mode 100644 (file)
index 0000000..00ec0d5
Binary files /dev/null and b/doc/dokumentation.pdf differ
diff --git a/doc/dokumentation.xml b/doc/dokumentation.xml
new file mode 100644 (file)
index 0000000..b2bc708
--- /dev/null
@@ -0,0 +1,5524 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+<book id="ding.xml" lang="de">
+  <title>Lx-Office: Installation, Konfiguration, Entwicklung</title>
+
+  <chapter id="Aktuelle-Hinweise">
+    <title>Aktuelle Hinweise</title>
+
+    <para>Aktuelle Installations- und Konfigurationshinweise gibt es:</para>
+
+    <itemizedlist>
+      <listitem>
+        <para>auf der Lx-Office-Homepage unter <ulink
+        url="http://lx-office.org/index.php?id=dokumentation">http://lx-office.org/index.php?id=dokumentation</ulink></para>
+      </listitem>
+
+      <listitem>
+        <para>im Lx-Office-Wiki unter Dokumentation (<ulink
+        url="http://wiki.lx-office.org/index.php/Lx-Office_ERP">http://wiki.lx-office.org/index.php/Lx-Office_ERP</ulink>)</para>
+      </listitem>
+
+      <listitem>
+        <para>im Lx-Office-Forum: <ulink
+        url="http://www.lx-office.org/forum/">http://www.lx-office.org/forum/</ulink></para>
+      </listitem>
+    </itemizedlist>
+
+    <!--  -->
+  </chapter>
+
+  <chapter id="config">
+    <title>Installation und Grundkonfiguration</title>
+
+    <sect1 id="Benötigte-Software-und-Pakete">
+      <title>Benötigte Software und Pakete</title>
+
+      <sect2 id="Betriebssystem">
+        <title>Betriebssystem</title>
+
+        <para>Lx-Office ist für Linux konzipiert, und sollte auf jedem
+        unixoiden Betriebssystem zum Laufen zu kriegen sein. Getestet ist
+        diese Version im speziellen auf Debian und Ubuntu, grundsätzlich wurde
+        bei der Auswahl der Pakete aber darauf Rücksicht genommen, dass es
+        ohne große Probleme auf den derzeit aktuellen verbreiteten
+        Distributionen läuft.</para>
+
+        <para>Anfang 2012 sind das folgende Systeme, von denen bekannt ist, dass Lx-Office auf ihnen läuft:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>Ubuntu 8.04 LTS Hardy Heron, 10.04 LTS Lucid Lynx bis 11.10 Oneiric Ocelot</para>
+          </listitem>
+
+          <listitem>
+            <para>Debian 5.0 Lenny und 6.0 Squeeze</para>
+          </listitem>
+
+          <listitem>
+            <para>openSUSE 11.2 und 11.3</para>
+          </listitem>
+
+          <listitem>
+            <para>SuSE Linux Enterprice Server 11</para>
+          </listitem>
+
+          <listitem>
+            <para>Fedora 13 bis 15</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Ubuntu 8.04 LTS hat zusätzlich die Schwierigkeit, dass die
+        Module im Archiv recht alt sind, und das viele der benötigten Module
+        nicht einfach zu installieren sind. Dafür sollte es kurz nach dem
+        Release ein eigenes .deb geben.</para>
+
+        <para>Alternativ dazu kann die normale Installation durchgeführt
+        werden (siehe <xref
+        linkend="Manuelle-Installation-des-Programmpaketes"/>), wenn vorher
+        ein Kompatibilitätspaket installiert wird, das die fehlenden Pakete
+        bereitstellt. Das Paket ist auf <ulink
+        url="https://sourceforge.net/projects/lx-office/files/Lx-Office%20ERP/2.6.2/">Sourceforge</ulink>
+        unter dem Namen <filename>lx-erp-perl-libs-compat-v2.tar.gz</filename>
+        hinterlegt.</para>
+
+        <para>Zur Installation das Paket in das entpackte Lx-Office
+        Verzeichnis entpacken:</para>
+
+        <programlisting>tar xzf lx-erp-perl-libs-compat-v2.tar.gz /path/to/lx-office/</programlisting>
+
+        <para>Zusätzlich müssen dann noch die folgenden Pakete installiert
+        weerden</para>
+
+        <programlisting>apt-get install libbit-vector-perl libsub-exporter-perl libclone-perl libclass-factory-util-perl</programlisting>
+
+        <para>Danach sollte der Installationscheck (siehe <xref
+        linkend="Pakete"/>) die enthaltenen Pakete erkennen.</para>
+      </sect2>
+
+      <sect2 id="Pakete" xreflabel="Pakete">
+        <title>Pakete</title>
+
+        <para>Zum Betrieb von Lx-Office werden zwingend ein Webserver (meist
+        Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.2)
+        benötigt.</para>
+
+        <para>Zusätzlich benötigt Lx-Office die folgenden Perl-Pakete, die
+        nicht Bestandteil einer Standard-Perl-Installation sind:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para>parent</para>
+          </listitem>
+
+          <listitem>
+            <para>Archive::Zip</para>
+          </listitem>
+
+          <listitem>
+            <para>Config::Std</para>
+          </listitem>
+
+          <listitem>
+            <para>DateTime</para>
+          </listitem>
+
+          <listitem>
+            <para>DBI</para>
+          </listitem>
+
+          <listitem>
+            <para>DBD::Pg</para>
+          </listitem>
+
+          <listitem>
+            <para>Email::Address</para>
+          </listitem>
+
+          <listitem>
+            <para>JSON</para>
+          </listitem>
+
+          <listitem>
+            <para>List::MoreUtils</para>
+          </listitem>
+
+          <listitem>
+            <para>Params::Validate</para>
+          </listitem>
+
+          <listitem>
+            <para>PDF::API2</para>
+          </listitem>
+
+          <listitem>
+            <para>Rose::Object</para>
+          </listitem>
+
+          <listitem>
+            <para>Rose::DB</para>
+          </listitem>
+
+          <listitem>
+            <para>Rose::DB::Object</para>
+          </listitem>
+
+          <listitem>
+            <para>Template</para>
+          </listitem>
+
+          <listitem>
+            <para>Text::CSV_XS</para>
+          </listitem>
+
+          <listitem>
+            <para>Text::Iconv</para>
+          </listitem>
+
+          <listitem>
+            <para>URI</para>
+          </listitem>
+
+          <listitem>
+            <para>XML::Writer</para>
+          </listitem>
+
+          <listitem>
+            <para>YAML</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete
+        hinzugekommen, <literal>URI</literal> und
+        <literal>XML::Writer</literal> sind notwendig. Ohne startet Lx-Office
+        nicht.</para>
+
+        <para>Gegenüber Version 2.6.1 sind <literal>parent</literal>,
+        <literal>DateTime</literal>, <literal>Rose::Object</literal>,
+        <literal>Rose::DB</literal> und <literal>Rose::DB::Object</literal>
+        neu hinzugekommen. <literal>IO::Wrap</literal> wurde entfernt.</para>
+
+        <para>Gegenüber Version 2.6.3 ist <literal>JSON</literal> neu
+        hinzugekommen.</para>
+
+        <para><literal>Email::Address</literal> und
+        <literal>List::MoreUtils</literal> sind schon länger feste
+        Abhängigkeiten, wurden aber bisher mit Lx-Office mitgeliefert. Beide
+        sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
+        zukünftigen Version aber aus dem Paket entfernt werden. Es wird
+        empfohlen diese Module zusammen mit den anderen als Bibliotheken zu
+        installieren.</para>
+
+        <para>Die zu installierenden Pakete können in den verschiedenen
+        Distributionen unterschiedlich heißen.</para>
+
+        <para>Für Debian oder Ubuntu benötigen Sie diese Pakete:</para>
+
+        <programlisting>apt-get install apache2 postgresql libparent-perl libarchive-zip-perl \
+  libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl \
+  libemail-address-perl liblist-moreutils-perl libpdf-api2-perl \
+  librose-object-perl librose-db-perl librose-db-object-perl \
+  libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl \
+  libxml-writer-perl libyaml-perl libconfig-std-perl \
+  libparams-validate-perl libjson-perl</programlisting>
+
+        <para>Für Fedora Core benötigen Sie diese Pakete:</para>
+
+        <programlisting>yum install httpd postgresql-server perl-parent perl-DateTime \
+  perl-DBI perl-DBD-Pg perl-Email-Address perl-List-MoreUtils \
+  perl-PDF-API2 perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object \
+  perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
+  perl-XML-Writer perl-YAML</programlisting>
+
+        <para>Für OpenSuSE benötigen Sie diese Pakete:</para>
+
+        <programlisting>zypper install apache2 postgresql-server perl-Archive-Zip \
+  perl-DateTime perl-DBI perl-DBD-Pg perl-MailTools perl-List-MoreUtils \
+  perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv \
+  perl-URI perl-XML-Writer perl-YAML</programlisting>
+
+        <para>Bei openSuSE 11 ist <literal>parent</literal> bereits enthalten,
+        und braucht nicht nachinstalliert werden. Die
+        <literal>Rose::*</literal> Pakete sind derzeit nicht für SuSE gepackt,
+        und müssen anderweitig nachinstalliert werden.</para>
+
+        <para>Lx-Office enthält ein Script, mit dem überprüft werden kann, ob
+        alle benötigten Perl-Module installiert sind. Der Aufruf lautet wie
+        folgt:</para>
+
+        <programlisting>./scripts/installation_check.pl</programlisting>
+      </sect2>
+    </sect1>
+
+    <sect1 id="Manuelle-Installation-des-Programmpaketes"
+           xreflabel="Manuelle Installation des Programmpaketes">
+      <title>Manuelle Installation des Programmpaketes</title>
+
+      <para>Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.3.tgz) wird
+      im Dokumentenverzeichnis des Webservers (z.B.
+      <filename>/var/www/html/</filename>,
+      <filename>/srv/www/htdocs</filename> oder
+      <filename>/var/www/</filename>) entpackt:</para>
+
+      <programlisting>cd /var/www tar xvzf
+lxoffice-erp-2.6.2.tgz</programlisting>
+
+      <para>Verändern Sie evtl. noch den Namen des Verzeichnisses mit</para>
+
+      <programlisting>mv lxoffice-erp/ lx-erp/</programlisting>
+
+      <para>Alternativ können Sie auch einen Alias in der
+      Webserverkonfiguration benutzen, um auf das tatsächliche
+      Installationsverzeichnis zu verweisen.</para>
+
+      <para>Die Verzeichnisse <filename>users</filename>,
+      <filename>spool</filename> und <filename>webdav</filename> müssen für
+      den Benutzer beschreibbar sein, unter dem der Webserver läuft. Die
+      restlichen Dateien müssen für diesen Benutzer lesbar sein. Der
+      Benutzername ist bei verschiedenen Distributionen unterschiedlich (z.B.
+      bei Debian/Ubuntu <constant>www-data</constant>, bei Fedora core
+      <constant>apache</constant> oder bei OpenSuSE
+      <constant>wwwrun</constant>).</para>
+
+      <para>Der folgende Befehl ändert den Besitzer für die oben genannten
+      Verzeichnisse auf einem Debian/Ubuntu-System:</para>
+
+      <programlisting>chown -R www-data lx-office-erp/users lx-office-erp/spool lx-office-erp/webdav</programlisting>
+
+      <para>Weiterhin muss der Webserver-Benutzer im Verzeichnis
+      <filename>templates</filename> Verzeichnisse für jeden neuen Benutzer,
+      der in lx-office angelegt wird, anlegen dürfen:</para>
+
+      <programlisting>chgrp www-data lx-office-erp/templates
+chmod g+w lx-office-erp/templates</programlisting>
+    </sect1>
+
+    <sect1 id="config.config-file">
+     <title>Lx-Office-Konfigurationsdatei</title>
+
+     <sect2 id="config.config-file.introduction" xreflabel="Einführung in die Konfigurationsdatei">
+      <title>Einführung</title>
+
+      <para>
+       Seit Lx-Office 2.6.3. gibt es nur noch eine Konfigurationsdatei die benötigt wird: <filename>config/lx_office.conf</filename> (kurz:
+       "die Hauptkonfigurationsdatei"). Diese muss bei der Erstinstallation von Lx-Office bzw. der Migration von älteren Versionen angelegt
+       werden.
+      </para>
+
+      <para>
+       Als Vorlage dient die Datei <filename>config/lx_office.conf.default</filename> (kurz: "die Default-Datei"):
+      </para>
+
+      <programlisting>$ cp config/lx_office.conf.default config/lx_office.conf</programlisting>
+
+      <para>
+       Die Default-Datei wird immer zuerst eingelesen. Werte, die in der Hauptkonfigurationsdatei stehen, überschreiben die
+       Werte aus der Default-Datei. Die Hauptkonfigurationsdatei muss also nur die Abschintte und Werte
+       enthalten, die von denen der Default-Datei abweichen.
+      </para>
+
+      <para>
+       Diese Hauptkonfigurationsdatei ist dann eine installationsspezifische Datei, d.h. sie enthält bspw. lokale Passwörter und wird auch
+       nicht im Versionsmanagement (git) verwaltet.
+      </para>
+
+      <para>
+       Die Konfiguration ist ferner serverabhängig, d.h. für alle Mandaten, bzw. Datenbanken gleich.
+      </para>
+     </sect2>
+
+     <sect2 id="config.config-file.sections-parameters">
+      <title>Abschnitte und Parameter</title>
+
+      <para>
+       Die Konfigurationsdatei besteht aus mehreren Teilen, die entsprechend kommentiert sind:
+      </para>
+
+      <itemizedlist>
+       <listitem><para><literal>authentication</literal></para></listitem>
+       <listitem><para><literal>authentication/database</literal></para></listitem>
+       <listitem><para><literal>authentication/ldap</literal></para></listitem>
+       <listitem><para><literal>system</literal></para></listitem>
+       <listitem><para><literal>features</literal></para></listitem>
+       <listitem><para><literal>paths</literal></para></listitem>
+       <listitem><para><literal>applications</literal></para></listitem>
+       <listitem><para><literal>environment</literal></para></listitem>
+       <listitem><para><literal>print_templates</literal></para></listitem>
+       <listitem><para><literal>task_server</literal></para></listitem>
+       <listitem><para><literal>periodic_invoices</literal></para></listitem>
+       <listitem><para><literal>console</literal></para></listitem>
+       <listitem><para><literal>debug</literal></para></listitem>
+      </itemizedlist>
+
+      <para>
+       Die üblicherweise wichtigsten Parameter, die am Anfang einzustellen oder zu kontrollieren sind, sind:
+      </para>
+
+      <programlisting>[authentication]
+admin_password = geheim
+
+[authentication/database]
+host     = localhost
+port     = 5432
+db       = lxerp_auth
+user     = postgres
+password =
+
+[system]
+eur = 1
+dbcharset = UTF-8</programlisting>
+
+       <para>
+        Nutzt man wiederkehrende Rechnungen, kann man unter <varname>[periodic_invoices]</varname> den Login eines Benutzers angeben, der
+        nach Erstellung der Rechnungen eine entsprechende E-Mail mit Informationen über die erstellten Rechnungen bekommt.
+       </para>
+
+       <para>
+        Nutzt man den <link linkend="config.task-server">Taskserver</link> für <link
+        linkend="features.periodic-invoices">wiederkehrende Rechnungen</link>, muss unter <varname>[task_server]</varname> ein Login eines
+        Benutzers angegeben werden, mit dem sich der Taskserver an Lx-Office bei der Datenbank anmeldet, die dem Benutzer zugewiesen ist.
+       </para>
+
+       <para>
+        Für Entwickler finden sich unter <varname>[debug]</varname> wichtige Funktionen, um die Fehlersuche zu erleichtern.
+       </para>
+     </sect2>
+
+     <sect2 id="config.config-file.prior-versions">
+      <title>Versionen vor 2.6.3</title>
+
+      <para>
+       In älteren Lx-Office Versionen gab es im Verzeichnis <filename>config</filename> die Dateien <filename>authentication.pl</filename>
+       und <filename>lx-erp.conf</filename>, die jeweils Perl-Dateien waren. Es gab auch die Möglichkeit, eine lokale Version der
+       Konfigurationsdatei zu erstellen (<filename>lx-erp-local.conf</filename>). Dies ist ab 2.6.3 nicht mehr möglich, aber auch nicht mehr
+       nötig.
+      </para>
+
+      <para>
+       Beim Update von einer Lx-Office-Version vor 2.6.3 auf 2.6.3 oder jünger müssen die Einstellungen aus den alten Konfigurationsdateien
+       manuell übertragen und die alten Konfigurationsdateien anschließend gelöscht oder verschoben werden. Ansonsten zeigt Lx-Office eine
+       entsprechende Fehlermeldung an.
+      </para>
+     </sect2>
+    </sect1>
+
+    <sect1 id="Anpassung-der-PostgreSQL-Konfiguration">
+      <title>Anpassung der PostgreSQL-Konfiguration</title>
+
+      <para>PostgreSQL muss auf verschiedene Weisen angepasst werden.</para>
+
+      <sect2 id="Zeichensätze-die-Verwendung-von-UTF-8">
+        <title>Zeichensätze/die Verwendung von UTF-8</title>
+
+        <para>Lx-Office kann komplett mit UTF-8 als Zeichensatz verwendet
+        werden. Dabei gibt es zwei Punkte zu beachten: PostgreSQL muss in
+        Version 8.2 oder neuer benutzt werden, und der
+        PostgreSQL-Datenbankcluster muss ebenfalls mit UTF-8 als Locale
+        angelegt worden sein.</para>
+
+        <para>Dieses ist kann überprüft werden: ist das Encoding der Datenbank “template1” “UTF8”, so kann auch Lx-Office mit UTF-8
+        betrieben werden.  Andernfalls ist es notwendig, einen neuen Datenbankcluster mit UTF-8-Encoding anzulegen und diesen zu
+        verwenden. Unter Debian und Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl getan werden:</para>
+
+        <programlisting>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername</programlisting>
+
+        <para>Die Datenbankversionsnummer muss an die tatsächlich verwendete Versionsnummer angepasst werden.</para>
+
+        <para>Unter anderen Distributionen gibt es ähnliche Methoden.</para>
+
+        <para>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und
+        ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
+        Lx-Office mit ISO-8859-15 als Encoding betrieben werden.</para>
+
+        <para>Das Encoding einer Datenbank kann in <command>psql</command> mit <literal>\l</literal> geprüft werden.</para>
+      </sect2>
+
+      <sect2 id="Änderungen-an-Konfigurationsdateien">
+        <title>Änderungen an Konfigurationsdateien</title>
+
+        <para>In der Datei <filename>postgresql.conf</filename>, die je nach
+        Distribution in verschiedenen Verzeichnissen liegen kann (z.B.
+        <filename>/var/lib/pgsql/data/</filename> oder
+        <filename>/etc/postgresql/</filename>, muss sichergestellt werden, dass
+        TCP/IP-Verbindungen aktiviert sind. Das Verhalten wird über den
+        Parameter <varname>listen_address</varname> gesteuert. Laufen
+        PostgreSQL und Lx-Office auf demselben Rechner, so kann dort der Wert
+        <literal>localhost</literal> verwendet werden. Andernfalls müssen
+        Datenbankverbindungen auch von anderen Rechnern aus zugelassen werden,
+        was mit dem Wert <literal>*</literal> geschieht.</para>
+
+        <para>In der Datei <filename>pg_hba.conf</filename>, die im gleichen
+        Verzeichnis wie die <filename>postgresql.conf</filename> zu finden sein
+        sollte, müssen die Berichtigungen für den Zugriff geändert werden.
+        Hier gibt es mehrere Möglichkeiten. Eine besteht darin, lokale
+        Verbindungen immer zuzulassen:</para>
+
+        <programlisting>local all all trust
+host all all 127.0.0.1 255.0.0.0 trust</programlisting>
+
+        <para>Besser ist es, für eine bestimmte Datenbank Zugriff nur per
+        Passwort zuzulassen. Beispielsweise:</para>
+
+        <programlisting>local all lxoffice password
+host all lxoffice 127.0.0.1 255.255.255.255 password</programlisting>
+
+        <!--  -->
+      </sect2>
+
+      <sect2 id="Erweiterung-für-servergespeicherte-Prozeduren">
+        <title>Erweiterung für servergespeicherte Prozeduren</title>
+
+        <para>In der Datenbank <literal>template1</literal> muss die
+        Unterstützung für servergespeicherte Prozeduren eingerichet werden.
+        Melden Sie sich dafür als Benutzer “postgres” an der Datenbank an, und
+        führen Sie die folgenden Kommandos aus:</para>
+
+        <programlisting>create language 'plpgsql';</programlisting>
+        <!--  -->
+      </sect2>
+
+      <sect2 id="Datenbankbenutzer-anlegen">
+        <title>Datenbankbenutzer anlegen</title>
+
+        <para>Wenn Sie nicht den Datenbanksuperuser “postgres” zum Zugriff
+        benutzen wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer
+        anlegen. Ein Beispiel, wie Sie einen neuen Benutzer anlegen
+        können:</para>
+
+        <programlisting>su - postgres createuser -d -P lxoffice</programlisting>
+
+        <para>Wenn Sie später einen Datenbankzugriff konfigurieren, verändern
+        Sie den evtl. voreingestellten Benutzer “postgres” auf “lxoffice” bzw.
+        den hier gewählten Benutzernamen.</para>
+
+        <!--  -->
+      </sect2>
+    </sect1>
+
+    <sect1 id="Apache-Konfiguration">
+      <title>Webserver-Konfiguration</title>
+
+      <sect2>
+        <title>Grundkonfiguration mittels CGI</title>
+
+        <note>
+          <para>Für einen deutlichen Performanceschub sorgt die Ausführung
+          mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
+          <xref linkend="Apache-Konfiguration.FCGI"/> beschrieben.</para>
+        </note>
+
+        <para>Der Zugriff auf das Programmverzeichnis muss in der Apache
+        Webserverkonfigurationsdatei <literal>httpd.conf</literal> eingestellt
+        werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
+        anderen Datei hinzu, die beim Starten des Webservers eingelesen
+        wird:</para>
+
+        <programlisting>AddHandler cgi-script .pl
+Alias /lx-erp/ /var/www/lx-erp/
+
+&lt;Directory /var/www/lx-erp&gt;
+ Options ExecCGI
+ Includes FollowSymlinks
+&lt;/Directory&gt;
+
+&lt;Directory /var/www/lx-erp/users&gt;
+ Order Deny,Allow
+ Deny from All
+&lt;/Directory&gt;</programlisting>
+
+        <para>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
+        das Lx-Office-Archiv entpacket haben.</para>
+
+        <note>
+         <para>Vor den einzelnen Optionen muss bei einigen Distributionen ein Plus ‘<literal>+</literal>’ gesetzt werden.</para>
+        </note>
+
+        <para>Auf einigen Webservern werden manchmal die Grafiken und
+        Style-Sheets nicht ausgeliefert. In solchen Fällen hat es oft
+        geholfen, die folgende Option in die Konfiguration aufzunehmen:</para>
+
+        <programlisting>EnableSendfile Off</programlisting>
+      </sect2>
+
+      <sect2 id="Apache-Konfiguration.FCGI"
+             xreflabel="Konfiguration für FastCGI/FCGI">
+        <title>Konfiguration für FastCGI/FCGI</title>
+
+        <sect3 id="Apache-Konfiguration.FCGI.WasIstEs">
+          <title>Was ist FastCGI?</title>
+
+          <para>Direkt aus <ulink
+          url="http://de.wikipedia.org/wiki/FastCGI">Wikipedia</ulink>
+          kopiert:</para>
+
+          <para><citation> FastCGI ist ein Standard für die Einbindung
+          externer Software zur Generierung dynamischer Webseiten in einem
+          Webserver. FastCGI ist vergleichbar zum Common Gateway Interface
+          (CGI), wurde jedoch entwickelt, um dessen Performance-Probleme zu
+          umgehen. </citation></para>
+        </sect3>
+
+        <sect3 id="Apache-Konfiguration.FCGI.Warum">
+          <title>Warum FastCGI?</title>
+
+          <para>Perl Programme (wie Lx-Office eines ist) werden nicht statisch
+          kompiliert. Stattdessen werden die Quelldateien bei jedem Start
+          übersetzt, was bei kurzen Laufzeiten einen Großteil der Laufzeit
+          ausmacht. Während SQL Ledger einen Großteil der Funktionalität in
+          einzelne Module kapselt, um immer nur einen kleinen Teil laden zu
+          müssen, ist die Funktionalität von Lx-Office soweit gewachsen, dass
+          immer mehr Module auf den Rest des Programms zugreifen. Zusätzlich
+          benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
+          entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies
+          führt dazu dass ein Lx-Office Aufruf der Kernmasken mittlerweile
+          deutlich länger dauert als früher, und dass davon 90% für das Laden
+          der Module verwendet wird.</para>
+
+          <para>Mit FastCGI werden nun die Module einmal geladen, und danach
+          wird nur die eigentliche Programmlogik ausgeführt.</para>
+        </sect3>
+
+        <sect3 id="Apache-Konfiguration.FCGI.WebserverUndPlugin">
+          <title>Getestete Kombinationen aus Webservern und Plugin</title>
+
+          <para>Folgende Kombinationen sind getestet:</para>
+
+          <itemizedlist>
+            <listitem>
+              <para>Apache 2.2.11 (Ubuntu) und mod_fcgid.</para>
+            </listitem>
+
+            <listitem>
+              <para>Apache 2.2.11 (Ubuntu) und mod_fastcgi.</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>Dabei wird mod_fcgid empfohlen, weil mod_fastcgi seit geraumer
+          Zeit nicht mehr weiter entwickelt wird. Im Folgenden wird auf
+          mod_fastcgi nicht mehr explizit eingegangen.</para>
+
+          <para>Als Perl Backend wird das Modul <filename>FCGI.pm</filename>
+          verwendet.</para>
+
+          <warning>
+            <para>
+             FCGI 0.69 und höher ist extrem strict in der Behandlung von Unicode, und verweigert bestimmte Eingaben von Lx-Office. Falls es
+             Probleme mit Umlauten in Ihrere Installation gibt, muss auf die Vorgängerversion FCGI 0.68 ausgewichen werden.
+            </para>
+
+            <para>
+             Mit CPAN lässt sie sich die Vorgängerversion wie folgt installieren:
+            </para>
+
+            <programlisting>force install M/MS/MSTROUT/FCGI-0.68.tar.gz</programlisting>
+          </warning>
+        </sect3>
+
+        <sect3 id="Apache-Konfiguration.FCGI.Konfiguration">
+          <title>Konfiguration des Webservers</title>
+
+          <para>Bevor Sie versuchen, eine Lx-Office Installation unter FCGI
+          laufen zu lassen, empfliehlt es sich die Installation ersteinmal
+          unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
+          debuggen die beim ersten aufsetzen auftreten können. Sollte die
+          Installation schon funktionieren, lesen Sie weiter.</para>
+
+          <para>Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
+          unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:</para>
+
+          <programlisting>a2enmod fcgid</programlisting>
+
+          <para>Die Konfiguration für die Verwendung von Lx-Office mit FastCGI
+          erfolgt durch Anpassung der vorhandenen <function>Alias</function>-
+          und <function>Directory</function>-Direktiven. Dabei wird zwischen
+          dem Installationspfad von Lx-Office im Dateisystem
+          ("<filename>/path/to/lx-office-erp</filename>") und der URL
+          unterschieden, unter der Lx-Office im Webbrowser erreichbar ist
+          ("<filename>/url/for/lx-office-erp</filename>").</para>
+
+          <para>Folgender Konfigurationsschnipsel funktioniert mit
+          mod_fastcgi:</para>
+
+          <programlisting>AliasMatch ^/url/for/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fcgi
+Alias       /url/for/lx-office-erp/          /path/to/lx-office-erp/
+
+&lt;Directory /path/to/lx-office-erp&gt;
+  AllowOverride All
+  Options ExecCGI Includes FollowSymlinks
+  Order Allow,Deny
+  Allow from All
+&lt;/Directory&gt;
+
+&lt;DirectoryMatch /path/to/lx-office-erp/users&gt;
+  Order Deny,Allow
+  Deny from All
+&lt;/DirectoryMatch&gt;</programlisting>
+
+          <para>Seit mod_fcgid-Version 2.6.3 gelten sehr kleine Grenzen für
+          die maximale Größe eines Requests. Diese sollte wie folgt
+          hochgesetzt werden:</para>
+
+          <programlisting>FcgidMaxRequestLen 10485760</programlisting>
+
+          <para>Das ganze sollte dann so aussehen:</para>
+
+          <programlisting>AddHandler fcgid-script .fpl
+AliasMatch ^/url/for/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
+Alias       /url/for/lx-office-erp/          /path/to/lx-office-erp/
+FcgidMaxRequestLen 10485760
+
+&lt;Directory /path/to/lx-office-erp&gt;
+  AllowOverride All
+  Options ExecCGI Includes FollowSymlinks
+  Order Allow,Deny
+  Allow from All
+&lt;/Directory&gt;
+
+&lt;DirectoryMatch /path/to/lx-office-erp/users&gt;
+  Order Deny,Allow
+  Deny from All
+&lt;/DirectoryMatch&gt;</programlisting>
+
+          <para>Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle
+          Zugriffe auf die einzelnen Scripte werden auf diesen umgeleitet.
+          Dadurch, dass zur Laufzeit öfter mal Scripte neu geladen werden,
+          gibt es hier kleine Performance-Einbußen.</para>
+
+          <para>Es ist möglich, die gleiche Lx-Office Version parallel unter
+          CGI und FastCGI zu betreiben. Dafür bleiben die Directorydirektiven
+          wie oben beschrieben, die URLs werden aber umgeleitet:</para>
+
+          <programlisting># Zugriff über CGI
+Alias       /url/for/lx-office-erp                /path/to/lx-office-erp
+
+# Zugriff mit mod_fcgid:
+AliasMatch ^/url/for/lx-office-erp-fcgid/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
+Alias       /url/for/lx-office-erp-fcgid/          /path/to/lx-office-erp/</programlisting>
+
+          <para>Dann ist unter <filename>/url/for/lx-office-erp/</filename> die normale Version erreichbar, und unter
+          <constant>/url/for/lx-office-erp-fcgid/</constant> die FastCGI-Version.</para>
+        </sect3>
+      </sect2>
+    </sect1>
+
+    <sect1 id="config.task-server">
+      <title>Der Task-Server</title>
+
+      <para>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
+      regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese zu
+      festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess
+      wird bisher nur für die Erzeugung der wiederkehrenden Rechnungen
+      benutzt, wird aber in Zukunft deutlich mehr Aufgaben übertragen
+      bekommen.</para>
+
+      <sect2 id="Konfiguration-des-Task-Servers">
+        <title>Verfügbare und notwendige Konfigurationsoptionen</title>
+
+        <para>Die Konfiguration erfolgt über den Abschnitt
+        <literal>[task_server]</literal> in der Datei
+        <filename>config/lx_office.conf</filename>. Die dort verfügbaren
+        Optionen sind:</para>
+
+        <variablelist>
+         <varlistentry>
+          <term><varname>login</varname></term>
+          <listitem>
+           <para>
+            gültiger Lx-Office-Benutzername, der benutzt wird, um die zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss in
+            der Administration angelegt werden. Diese Option muss angegeben werden.
+           </para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><varname>run_as</varname></term>
+          <listitem>
+            <para>
+             Wird der Server vom Systembenutzer <literal>root</literal> gestartet, so wechselt er auf den mit <literal>run_as</literal>
+             angegebenen Systembenutzer.  Der Systembenutzer muss dieselben Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
+             (siehe see <xref linkend="Manuelle-Installation-des-Programmpaketes"/>). Daher ist es sinnvoll, hier denselben Systembenutzer
+             einzutragen, unter dem auch der Webserver läuft.
+            </para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><varname>debug</varname></term>
+          <listitem>
+            <para>
+             Schaltet Debug-Informationen an und aus.
+            </para>
+          </listitem>
+         </varlistentry>
+        </variablelist>
+      </sect2>
+
+      <sect2 id="Einbinden-in-den-Boot-Prozess">
+        <title>Automatisches Starten des Task-Servers beim Booten</title>
+
+        <para>Der Task-Server verhält sich von seinen Optionen her wie ein
+        reguläres SystemV-kompatibles Boot-Script. Außerdem wechselt er beim
+        Starten automatisch in das Lx-Office-Installationsverzeichnis.</para>
+
+        <para>Deshalb ist es möglich, ihn durch Setzen eines symbolischen
+        Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
+        einzubinden. Da das bei neueren Linux-Distributionen aber nicht
+        zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
+        anstelle eines symbolischen Links verwendet werden können.</para>
+
+        <sect3>
+          <title>SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora
+          Core)</title>
+
+          <para>Kopieren Sie die Datei
+          <filename>scripts/boot/system-v/lx-office-task-server</filename>
+          nach <filename>/etc/init.d/lx-office-task-server</filename>. Passen
+          Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
+          <literal>DAEMON=....</literal>). Binden Sie das Script in den
+          Boot-Prozess ein. Dies ist distributionsabhängig:</para>
+
+          <itemizedlist>
+            <listitem>
+              <para>Debian-basierende Systeme:</para>
+
+              <programlisting>update-rc.d lx-office-task-server defaults
+# Nur bei Debian Squeeze und neuer:
+insserv lx-office-task-server</programlisting>
+            </listitem>
+
+            <listitem>
+              <para>OpenSuSE und Fedora Core:</para>
+
+              <programlisting>chkconfig --add lx-office-task-server</programlisting>
+            </listitem>
+          </itemizedlist>
+
+          <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet werden: <command>/etc/init.d/lx-office-task-server
+          start</command></para>
+        </sect3>
+
+        <sect3>
+          <title>Upstart-basierende Systeme (z.B. Ubuntu)</title>
+
+          <para>Kopieren Sie die Datei
+          <filename>scripts/boot/upstart/lx-office-task-server.conf</filename>
+          nach <filename>/etc/init/lx-office-task-server.conf</filename>.
+          Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
+          <literal>exec ....</literal>).</para>
+
+          <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet werden: <command>service lx-office-task-server
+          start</command></para>
+        </sect3>
+      </sect2>
+
+      <sect2 id="Prozesskontrolle">
+        <title>Wie der Task-Server gestartet und beendet wird</title>
+
+        <para>Der Task-Server wird wie folgt kontrolliert:</para>
+
+        <programlisting>./scripts/task_server.pl Befehl</programlisting>
+
+        <para><literal>Befehl</literal> ist dabei eine der folgenden
+        Optionen:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><literal>start</literal> startet eine neue Instanz des
+            Task-Servers. Die Prozess-ID wird innerhalb des
+            <filename>users</filename>-Verzeichnisses abgelegt.</para>
+          </listitem>
+
+          <listitem>
+            <para><literal>stop</literal> beendet einen laufenden
+            Task-Server.</para>
+          </listitem>
+
+          <listitem>
+            <para><literal>restart</literal> beendet und startet ihn
+            neu.</para>
+          </listitem>
+
+          <listitem>
+            <para><literal>status</literal> berichtet, ob der Task-Server
+            läuft.</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Der Task-Server wechselt beim Starten automatisch in das
+        Lx-Office-Installationsverzeichnis.</para>
+
+        <para>Dieselben Optionen können auch für die SystemV-basierenden
+        Runlevel-Scripte benutzt werden (siehe oben).</para>
+
+        <!--  -->
+      </sect2>
+    </sect1>
+
+    <sect1 id="Benutzerauthentifizierung-und-Administratorpasswort">
+      <title>Benutzerauthentifizierung und Administratorpasswort</title>
+
+      <para>Informationen über die Einrichtung der Benutzerauthentifizierung,
+      über die Verwaltung von Gruppen und weitere Einstellungen</para>
+
+      <!--  -->
+
+      <sect2 id="Grundlagen-zur-Benutzerauthentifizierung">
+        <title>Grundlagen zur Benutzerauthentifizierung</title>
+
+        <para>Lx-Office verwaltet die Benutzerinformationen in einer
+        Datenbank, die im folgenden “Authentifizierungsdatenbank” genannt
+        wird. Für jeden Benutzer kann dort eine eigene Datenbank für die
+        eigentlichen Finanzdaten hinterlegt sein. Diese beiden Datenbanken
+        können, müssen aber nicht unterschiedlich sein.</para>
+
+        <para>Im einfachsten Fall gibt es für Lx-Office nur eine einzige
+        Datenbank, in der sowohl die Benutzerinformationen als auch die Daten
+        abgelegt werden.</para>
+
+        <para>Zusätzlich ermöglicht es Lx-Office, dass die Benutzerpasswörter
+        entweder gegen die Authentifizierungsdatenbank oder gegen einen
+        LDAP-Server überprüft werden.</para>
+
+        <para>Welche Art der Passwortüberprüfung Lx-Office benutzt und wie
+        Lx-Office die Authentifizierungsdatenbank erreichen kann, wird in der
+        Konfigurationsdatei <filename>config/lx_office.conf</filename>
+        festgelegt. Diese muss bei der Installation und bei einem Upgrade von
+        einer Version vor v2.6.0 angelegt werden. Eine
+        Beispielkonfigurationsdatei
+        <filename>config/lx_office.conf.default</filename> existiert, die als
+        Vorlage benutzt werden kann.</para>
+      </sect2>
+
+      <sect2 id="Administratorpasswort">
+        <title>Administratorpasswort</title>
+
+        <para>Das Passwort, das zum Zugriff auf das Aministrationsinterface benutzt wird, wird ebenfalls in dieser Datei gespeichert. Es
+        kann auch nur dort und nicht mehr im Administrationsinterface selber geändert werden. Der Parameter dazu heißt
+        <varname>admin_password</varname> im Abschnitt <varname>[authentication]</varname>.</para>
+      </sect2>
+
+      <sect2 id="Authentifizierungsdatenbank">
+        <title>Authentifizierungsdatenbank</title>
+
+        <para>Die Verbindung zur Authentifizierungsdatenbank wird mit den Parametern in <varname>[authentication/database]</varname>
+        konfiguriert.  Hier sind die folgenden Parameter anzugeben:</para>
+
+        <variablelist>
+         <varlistentry>
+          <term><literal>host</literal></term>
+          <listitem>
+           <para>Der Rechnername oder die IP-Adresse des Datenbankservers</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>port</literal></term>
+          <listitem>
+            <para>Die Portnummer des Datenbankservers, meist 5432</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>db</literal></term>
+          <listitem>
+           <para>Der Name der Authentifizierungsdatenbank</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>user</literal></term>
+          <listitem>
+            <para>Der Benutzername, mit dem sich Lx-Office beim Datenbankserver anmeldet (z.B. "<literal>postgres</literal>")</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>password</literal></term>
+          <listitem>
+            <para>Das Passwort für den Datenbankbenutzer</para>
+          </listitem>
+         </varlistentry>
+        </variablelist>
+
+        <para>Die Datenbank muss noch nicht existieren. Lx-Office kann sie
+        automatisch anlegen (mehr dazu siehe unten).</para>
+      </sect2>
+
+      <sect2 id="Passwortüberprüfung">
+        <title>Passwortüberprüfung</title>
+
+        <para>Lx-Office unterstützt Passwortüberprüfung auf zwei Arten: gegen die Authentifizierungsdatenbank und gegen einen externen LDAP-
+        oder Active-Directory-Server. Welche davon benutzt wird, regelt der Parameter <varname>module</varname> im Abschnitt
+        <varname>[authentication]</varname>.</para>
+
+        <para>Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank gespeichert werden, so muss der Parameter
+        <varname>module</varname> den Wert <literal>DB</literal> enthalten. In diesem Fall können sowohl der Administrator als auch die
+        Benutzer selber ihre Psaswörter in Lx-Office ändern.</para>
+
+        <para>Soll hingegen ein externer LDAP- oder Active-Directory-Server benutzt werden, so muss der Parameter <varname>module</varname>
+        auf <literal>LDAP</literal> gesetzt werden. In diesem Fall müssen zusätzliche Informationen über den LDAP-Server im Abschnitt
+        <literal>[authentication/ldap]</literal> angegeben werden:</para>
+
+        <variablelist>
+         <varlistentry>
+          <term><literal>host</literal></term>
+          <listitem>
+            <para>Der Rechnername oder die IP-Adresse des LDAP- oder Active-Directory-Servers. Diese Angabe ist zwingend
+            erforderlich.</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>port</literal></term>
+          <listitem>
+            <para>Die Portnummer des LDAP-Servers; meist 389.</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>tls</literal></term>
+          <listitem>
+            <para>Wenn Verbindungsverschlüsselung gewünscht ist, so diesen Wert auf ‘<literal>1</literal>’ setzen, andernfalls auf
+            ‘<literal>0</literal>’ belassen</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>attribute</literal></term>
+          <listitem>
+            <para>Das LDAP-Attribut, in dem der Benutzername steht, den der Benutzer eingegeben hat. Für Active-Directory-Server ist dies
+            meist ‘<literal>sAMAccountName</literal>’, für andere LDAP-Server hingegen ‘<literal>uid</literal>’. Diese Angabe ist zwingend
+            erforderlich.</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>base_dn</literal></term>
+          <listitem>
+            <para>Der Abschnitt des LDAP-Baumes, der durchsucht werden soll. Diese Angabe ist zwingend erforderlich.</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>filter</literal></term>
+          <listitem>
+            <para>Ein optionaler LDAP-Filter.  Enthält dieser Filter das Wort <literal>&lt;%login%&gt;</literal>, so wird dieses durch den
+            vom Benutzer eingegebenen Benutzernamen ersetzt. Andernfalls wird der LDAP-Baum nach einem Element durchsucht, bei dem das oben
+            angegebene Attribut mit dem Benutzernamen identisch ist.</para>
+          </listitem>
+         </varlistentry>
+
+         <varlistentry>
+          <term><literal>bind_dn</literal> und <literal>bind_password</literal></term>
+          <listitem>
+            <para>Wenn der LDAP-Server eine Anmeldung erfordert, bevor er durchsucht werden kann (z.B. ist dies bei Active-Directory-Servern
+            der Fall), so kann diese hier angegeben werden. Für Active-Directory-Server kann als ‘<literal>bind_dn</literal>’ entweder eine
+            komplette LDAP-DN wie z.B. ‘<literal>cn=Martin Mustermann,cn=Users,dc=firmendomain</literal>’ auch nur der volle Name des
+            Benutzers eingegeben werden; in diesem Beispiel also ‘<literal>Martin Mustermann</literal>’.</para>
+          </listitem>
+         </varlistentry>
+        </variablelist>
+      </sect2>
+
+      <sect2 id="Name-des-Session-Cookies">
+        <title>Name des Session-Cookies</title>
+
+        <para>Sollen auf einem Server mehrere Lx-Office-Installationen aufgesetzt werden, so müssen die Namen der Session-Cookies für alle
+        Installationen unterschiedlich sein. Der Name des Cookies wird mit dem Parameter <varname>cookie_name</varname> im Abschnitt
+        <varname>[authentication]</varname>gesetzt.</para>
+
+        <para>Diese Angabe ist optional, wenn nur eine Installation auf dem
+        Server existiert.</para>
+      </sect2>
+
+      <sect2 id="Anlegen-der-Authentifizierungsdatenbank">
+        <title>Anlegen der Authentifizierungsdatenbank</title>
+
+        <para>Nachdem alle Einstellungen in
+        <filename>config/lx_office.conf</filename> vorgenommen wurden, muss
+        Lx-Office die Authentifizierungsdatenbank anlegen. Dieses geschieht
+        automatisch, wenn Sie sich im Administrationsmodul anmelden, das unter
+        der folgenden URL erreichbar sein sollte:</para>
+
+        <para><ulink
+        url="http://localhost/lx-erp/admin.pl">http://localhost/lx-erp/admin.pl</ulink></para>
+
+        <!--  -->
+      </sect2>
+    </sect1>
+
+    <sect1 id="Benutzer--und-Gruppenverwaltung">
+      <title>Benutzer- und Gruppenverwaltung</title>
+
+      <para>Nach der Installation müssen Benutzer, Gruppen und Datenbanken
+      angelegt werden. Dieses geschieht im Administrationsmenü, das Sie unter
+      folgender URL finden:</para>
+
+      <para><ulink
+      url="http://localhost/lx-erp/admin.pl">http://localhost/lx-erp/admin.pl</ulink></para>
+
+      <para>Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
+      <filename>config/lx_office.conf</filename> eingetragen haben.</para>
+
+      <sect2 id="Zusammenhänge">
+        <title>Zusammenhänge</title>
+
+        <para>Lx-Office verwendet eine Datenbank zum Speichern all seiner
+        Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
+        mit Lx-Office arbeiten zu können, muss eine Person einen
+        Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
+        Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
+        möglich und normal, dass mehreren Benutzern die selbe Datenbank
+        zugewiesen wird, sodass sie alle mit den selben Daten arbeiten
+        können.</para>
+
+        <para>Die Basisdaten der Benutzer, die in der Administration
+        eingegeben werden können, werden in einer zweiten Datenbank
+        gespeichert, der bereits erwähnten Authentifizierungsdatenbank. Diese
+        ist also den Produktivdaten enthaltenden Datenbanken vorgeschaltet.
+        Pro Lx-Office-Installation gibt es nur eine
+        Authentifizierungsdatenbank, aber beliebig viele Datenbanken mit
+        Firmendaten.</para>
+
+        <para>Lx-Office kann seinen Benutzern Zugriff auf bestimmte
+        Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
+        gestattet, so werden der entsprechenden Menüpunkte auch nicht
+        angezeigt. Diese Rechte werden ebenfalls in der
+        Authentifizierungsdatenbank gespeichert.</para>
+
+        <para>Um Rechte verteilen zu können, verwendet Lx-Office ein
+        Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
+        erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
+        mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
+        Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
+        Benutzer Mitglied ist.</para>
+
+        <para>Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und
+        Benutzer angelegt werden sollten, lautet:</para>
+
+        <orderedlist numeration="arabic">
+          <listitem>
+            <para>Datenbank anlegen</para>
+          </listitem>
+
+          <listitem>
+            <para>Gruppen anlegen</para>
+          </listitem>
+
+          <listitem>
+            <para>Benutzer anlegen</para>
+          </listitem>
+
+          <listitem>
+            <para>Benutzer den Gruppen zuordnen</para>
+          </listitem>
+        </orderedlist>
+      </sect2>
+
+      <sect2 id="Datenbanken-anlegen">
+        <title>Datenbanken anlegen</title>
+
+        <para>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
+        den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
+        Beispielen ist dies ‘<literal>lxoffice</literal>’).</para>
+
+        <para>Wenn Sie für die Lx-Office-Installation nicht den europäischen
+        Schriftsatz ISO-8859-15 sondern UTF-8 (Unicode) benutzen wollen, so
+        müssen Sie vor dem Anlegen der Datenbank in der Datei
+        <filename>config/lx_office.conf</filename> die Variable
+        <literal>dbcharset</literal> im Abschnitt <literal>system</literal>
+        auf den Wert ‘<literal>UTF-8</literal>’ setzen. Zusätzlich muss beim
+        Anlegen der Datenbank ‘<literal>UTF-8 Unicode</literal>’ als
+        Schriftsatz ausgewählt werden.</para>
+
+        <para>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
+        verwenden müssen, da diese Einstellungen momentan global in Lx-Office
+        vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
+        Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
+        angelegt worden sein.</para>
+      </sect2>
+
+      <sect2 id="Gruppen-anlegen">
+        <title>Gruppen anlegen</title>
+
+        <para>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein
+        Name gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
+        Anlegen können Sie die verschiedenen Bereiche wählen, auf die
+        Mitglieder dieser Gruppe Zugriff haben sollen.</para>
+
+        <para>Benutzergruppen sind unabhängig von Datenbanken, da sie in der
+        Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
+        Datenbanken, die in dieser Installation verwaltet werden.</para>
+      </sect2>
+
+      <sect2 id="Benutzer-anlegen">
+        <title>Benutzer anlegen</title>
+
+        <para>Beim Anlegen von Benutzern werden für viele Parameter
+        Standardeinstellungen vorgenommen, die den Gepflogenheiten des
+        deutschen Raumes entsprechen.</para>
+
+        <para>Zwingend anzugeben sind der Loginname sowie die komplette
+        Datenbankkonfiguration. Wenn die Passwortauthentifizierung über die
+        Datenbank eingestellt ist, so kann hier auch das Benutzerpasswort
+        gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung
+        aktiv, so ist das Passwort-Feld deaktiviert.</para>
+
+        <para>In der Datenbankkonfiguration müssen die Zugriffsdaten einer der
+        eben angelegten Datenbanken eingetragen werden.</para>
+      </sect2>
+
+      <sect2 id="Gruppenmitgliedschaften-verwalten">
+        <title>Gruppenmitgliedschaften verwalten</title>
+
+        <para>Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den
+        Gruppen zugewiesen werden. Dazu gibt es zwei Möglichkeiten:</para>
+
+        <orderedlist numeration="arabic">
+          <listitem>
+            <para>In der Gruppenverwaltung wählt man eine Gruppe aus. Im
+            folgenden Dialog kann man dann einzeln die Benutzer der Gruppe
+            hinzufügen.</para>
+          </listitem>
+
+          <listitem>
+            <para>In der Gruppenverwaltung wählt man das Tool zur Verwaltung
+            der Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die
+            alle im System angelegten Gruppen und Benutzer enthält. Durch
+            Setzen der Häkchen wird der Benutzer in der ausgewählten Zeile der
+            Gruppe in der ausgewählten Spalte hinzugefügt.</para>
+          </listitem>
+        </orderedlist>
+      </sect2>
+
+      <sect2 id="Migration-alter-Installationen">
+        <title>Migration alter Installationen</title>
+
+        <para>Wenn Lx-Office 2.6.2 über eine ältere Version installiert wird,
+        in der die Benutzerdaten noch im Dateisystem im Verzeichnis
+        <literal>users</literal> verwaltet wurden, so bietet Lx-Office die
+        Möglichkeit, diese Benutzerdaten automatisch in die
+        Authentifizierungsdatenbank zu übernehmen. Dies geschieht, wenn man
+        sich nach dem Update der Installation das erste Mal im
+        Administrationsbereich anmeldet. Findet Lx-Office die Datei
+        <literal>users/members</literal>, so wird der Migrationsprozess
+        gestartet.</para>
+
+        <para>Der Migrationsprozess ist nahezu vollautomatisch. Alle
+        Benutzerdaten können übernommen werden. Nach den Benutzerdaten bietet
+        Lx-Office noch die Möglichkeit an, dass automatisch eine
+        Benutzergruppe angelegt wird. Dieser Gruppe wird Zugriff auf alle
+        Funktionen von Lx-Office gewährt. Alle migrierten Benutzern werden
+        Mitglied in dieser Gruppe. Damit wird das Verhalten von Lx-Office bis
+        Version 2.4.3 inklusive wiederhergestellt, und die Benutzer können
+        sich sofort wieder anmelden und mit dem System arbeiten.</para>
+
+        <!--  -->
+      </sect2>
+    </sect1>
+
+    <sect1 id="Drucken-mit-Lx-Office">
+      <title>Drucken mit Lx-Office</title>
+
+      <para>Das Drucksystem von Lx-Office benutzt von Haus aus LaTeX Vorlagen.
+      Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
+      einfachsten ist dazu eine <literal>texlive</literal> Installation. Unter
+      Debianoiden Betriebssystemen sind das die Pakete:</para>
+
+      <para><literal>texlive-latex-base texlive-latex-extra
+      texlive-fonts-recommended</literal></para>
+
+      <para>Diese hinteren beiden enthalten Bibliotheken und Schriftarten die
+      von den Standardvorlagen verwendet werden.</para>
+
+      <para>TODO: rpm Pakete.</para>
+
+      <para>In den allermeisten Installationen sollte drucken jetzt schon
+      funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange
+      Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite
+      die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum
+      Beispiel:</para>
+
+      <itemizedlist>
+        <listitem>
+          <para>! LaTeX Error: File `eurosym.sty' not found. Die entsprechende
+          LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem bei
+          Vorlagen aus der Community auf. Installieren Sie die entsprechenden
+          Pakete.</para>
+        </listitem>
+
+        <listitem>
+          <para>! Package inputenc Error: Unicode char \u8:æ¡\9c not set up for
+          use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
+          einer Standardinstallation exotische utf8 Zeichen zu drucken.
+          TeXLive unterstützt von Haus nur romanische Schriften und muss mit
+          diversen Tricks dazu gebracht werden andere Zeichen zu akzeptieren.
+          Adere TeX Systeme wie XeTeX schaffen hier Abhilfe.</para>
+        </listitem>
+      </itemizedlist>
+
+      <para>Wird garkein Fehler angezeigt sondern nur der Name des Templates,
+      heißt das normalerweise, dass das LaTeX Binary nicht gefunden wurde.
+      Prüfen Sie den Namen in der Konfiguration (Standard:
+      <literal>pdflatex</literal>), und stellen Sie sicher, dass pdflatex
+      (oder das von Ihnen verwendete System) vom Webserver ausgeführt werden
+      darf.</para>
+
+      <!--  -->
+    </sect1>
+
+    <sect1 id="OpenDocument-Vorlagen">
+      <title>OpenDocument-Vorlagen</title>
+
+      <para>Lx-Office unterstützt die Verwendung von Vorlagen im
+      OpenDocument-Format, wie es OpenOffice.org ab Version 2 erzeugt.
+      Lx-Office kann dabei sowohl neue OpenDocument-Dokumente als auch aus
+      diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
+      OpenDocument-Vorlagen zu aktivieren muss in der Datei
+      <filename>config/lx_office.conf</filename> die Variable
+      <literal>opendocument</literal> im Abschnitt
+      <literal>print_templates</literal> auf ‘<literal>1</literal>’ stehen.
+      Dieses ist die Standardeinstellung.</para>
+
+      <para>Weiterhin muss in der Datei
+      <filename>config/lx_office.conf</filename> die Variable
+      <literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf
+      die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der
+      Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen
+      "UTF-8".</para>
+
+      <para>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
+      weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
+      OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
+      neben OpenOffice.org ab Version 2 auch der “X virtual frame buffer”
+      (xvfb) installiert werden. Bei Debian ist er im Paket “xvfb” enthalten.
+      Andere Distributionen enthalten ihn in anderen Paketen.</para>
+
+      <para>Nach der Installation müssen in der Datei
+      <filename>config/lx_config.conf</filename> zwei weitere Variablen
+      angepasst werden: <literal>openofficeorg_writer</literal> muss den
+      vollständigen Pfad zur OpenOffice.org Writer-Anwendung enthalten.
+      <literal>xvfb</literal> muss den Pfad zum “X virtual frame buffer”
+      enthalten. Beide stehen im Abschnitt
+      <literal>applications</literal>.</para>
+
+      <para>Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit
+      OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn die
+      Variable <literal>$openofficeorg_daemon</literal> gesetzt ist, startet
+      ein OpenOffice, das auch nach der Umwandlung des Dokumentes gestartet
+      bleibt. Bei weiteren Umwandlungen wird dann diese laufende Instanz
+      benutzt. Der Vorteil ist, dass die Zeit zur Umwandlung deutlich
+      reduziert wird, weil nicht für jedes Dokument ein OpenOffice gestartet
+      werden muss. Der Nachteil ist, dass diese Methode Python und die
+      Python-UNO-Bindings benötigt, die Bestandteil von OpenOffice 2
+      sind.</para>
+
+      <para>Ist <literal>$openofficeorg_daemon</literal> nicht gesetzt, so
+      wird für jedes Dokument OpenOffice neu gestartet und die Konvertierung
+      mit Hilfe eines Makros durchgeführt. Dieses Makro muss in der
+      Dokumentenvorlage enthalten sein und
+      “Standard.Conversion.ConvertSelfToPDF()” heißen. Die Beispielvorlage
+      ‘<literal>templates/mastertemplates/German/invoice.odt</literal>’
+      enthält ein solches Makro, das in jeder anderen Dokumentenvorlage
+      ebenfalls enthalten sein muss.</para>
+
+      <para>Als letztes muss herausgefunden werden, welchen Namen
+      OpenOffice.org Writer dem Verzeichnis mit den Benutzereinstellungen
+      gibt. Unter Debian ist dies momentan
+      <literal>~/.openoffice.org2</literal>. Sollte der Name bei Ihrer
+      OpenOffice.org-Installation anders sein, so muss das Verzeichnis
+      <literal>users/.openoffice.org2</literal> entsprechend umbenannt werden.
+      Ist der Name z.B. einfach nur <literal>.openoffice</literal>, so wäre
+      folgender Befehl auszuführen:</para>
+
+      <para><literal>mv users/.openoffice.org2
+      users/.openoffice</literal></para>
+
+      <para>Dieses Verzeichnis, wie auch das komplette
+      <literal>users</literal>-Verzeichnis, muss vom Webserver beschreibbar
+      sein. Dieses wurde bereits erledigt (siehe <xref
+      linkend="Manuelle-Installation-des-Programmpaketes"/>), kann aber erneut
+      überprüft werden, wenn die Konvertierung nach PDF fehlschlägt.</para>
+
+      <!--  -->
+    </sect1>
+
+    <sect1 id="config.eur">
+      <title>Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR</title>
+
+      <sect2 id="config.eur.introduction" xreflabel="Einführung in die Konfiguration zur EUR">
+       <title>Einführung</title>
+
+       <para>
+        Lx-Office besaß bis inklusive Version 2.6.3 einen Konfigurationsparameter namens <varname>eur</varname>, der sich in der
+        Konfigurationsdatei <filename>config/lx_office.conf</filename> befindet. Somit galt er für alle Mandanten, die in dieser
+        Installation benutzt wurden.
+       </para>
+
+       <para>
+        Mit der nachfolgenden Version wurde der Parameter zum Einen in die Mandantendatenbank verschoben und dabei auch gleich in drei
+        Einzelparameter aufgeteilt, mit denen sich das Verhalten genauer steuern lässt.
+       </para>
+      </sect2>
+
+      <sect2 id="config.eur.parameters" xreflabel="Konfigurationsparameter für EUR">
+       <title>Konfigurationsparameter</title>
+
+       <para>
+        Es gibt drei Parameter, die die Gewinnermittlungsart, Versteuerungsart und die Warenbuchungsmethode regeln:
+       </para>
+
+       <variablelist>
+        <varlistentry>
+         <term><varname>profit_determination</varname></term>
+         <listitem>
+          <para>
+           Dieser Parameter legt die Berechnungsmethode für die Gewinnermittlung fest. Er enthält entweder <literal>balance</literal> für
+           Betriebsvermögensvergleich/Bilanzierung oder <literal>income</literal> für die Einnahmen-Überschuss-Rechnung.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry>
+         <term><varname>accounting_method</varname></term>
+         <listitem>
+          <para>
+           Dieser Parameter steuert die Buchungs- und Berechnungsmethoden für die Versteuerungsart. Er enthält entweder
+           <literal>accrual</literal> für die Soll-Versteuerung oder <literal>cash</literal> für die Ist-Versteuerung.
+          </para>
+         </listitem>
+        </varlistentry>
+
+        <varlistentry>
+         <term><varname>inventory_system</varname></term>
+         <listitem>
+          <para>
+           Dieser Parameter legt die Warenbuchungsmethode fest. Er enthält entweder <literal>perpetual</literal> für die Bestandsmethode
+           oder <literal>periodic</literal> für die Aufwandsmethode.
+          </para>
+         </listitem>
+        </varlistentry>
+       </variablelist>
+
+       <para>
+        Zum Vergleich der Funktionalität bis und nach 2.6.3: <varname>eur</varname> = 1 bedeutete Einnahmen-Überschuss-Rechnung,
+        Ist-Versteuerung und Aufwandsmethode. <varname>eur</varname> = 0 bedeutete hingegen Bilanzierung, Soll-Versteuerung und
+        Bestandsmethode.
+       </para>
+
+       <para>
+        Die Konfiguration "<varname>eur</varname>" unter <varname>[system]</varname> in der <link
+        linkend="config.config-file">Konfigurationsdatei</link> <filename>config/lx_office.conf</filename> wird nun nicht mehr benötigt und
+        kann entfernt werden. Dies muss manuell geschehen.
+       </para>
+      </sect2>
+
+      <sect2 id="config.eur.setting-parameters">
+       <title>Festlegen der Parameter</title>
+
+       <para>
+        Beim Anlegen eines neuen Mandanten bzw. einer neuen Datenbank in der Admininstration können diese Optionen nun unabhängig
+        voneinander eingestellt werden.
+       </para>
+
+       <para>
+        Beim Upgrade bestehender Mandanten wird eur ausgelesen und die Variablen werden so gesetzt, daß sich an der Funktionalität nichts
+        ändert.
+       </para>
+
+       <para>
+        Die aktuelle Konfiguration wird unter Nummernkreise und Standardkonten unter dem neuen Punkt "Einstellungen" angezeigt (read-only).
+        Eine spätere Änderung ist für einen bestehenden Mandanten nicht mehr möglich. Dies war auch vorher nicht möglich, bzw. vorhandene
+        Daten wurden so belassen und haben damit die Ergebnisse verfälscht.
+       </para>
+      </sect2>
+
+      <sect2 id="config.eur.inventory-system-perpetual">
+       <title>Bemerkungen zu Bestandsmethode</title>
+
+       <para>
+        Die Bestandsmethode ist eigentlich eine sehr elegante Methode, funktioniert in Lx-Office aber nur unter bestimmten Bedingungen:
+        Voraussetzung ist, daß auch immer alle Einkaufsrechnungen gepflegt werden, und man beim Jahreswechsel nicht mit einer leeren
+        Datenbank anfängt, da bei jedem Verkauf anhand der gesamten Rechnungshistorie der Einkaufswert der Ware nach dem FIFO-Prinzip aus
+        den Einkaufsrechnungen berechnet wird.
+       </para>
+
+       <para>
+        Die Bestandsmethode kann vom Prinzip her also nur funktioneren, wenn man mit den Buchungen bei Null anfängt, und man kann auch nicht
+        im laufenden Betrieb von der Aufwandsmethode zur Bestandsmethode wechseln.
+       </para>
+      </sect2>
+
+      <sect2 id="config.eur.knonw-issues">
+       <title>Bekannte Probleme</title>
+
+       <para>
+        Bei bestimmten Berichten kann man derzeit noch inviduell einstellen, ob man nach Ist- oder Sollversteuerung auswertet, und es werden
+        im Code Variablen wie $accrual oder $cash gesetzt. Diese Codestellen wurden noch nicht angepasst, sondern nur die, wo bisher
+        die Konfigurationsvariable <varname>$::lx_office_conf{system}->{eur}</varname> ausgewertet wurde.
+       </para>
+
+       <para>
+        Es fehlen Hilfetext beim Neuanlegen eines Mandanten, was die Optionen bewirken, z.B. mit zwei Standardfällen.
+       </para>
+      </sect2>
+    </sect1>
+
+    <sect1 id="Lx-Office-ERP-verwenden">
+      <title>Lx-Office ERP verwenden</title>
+
+      <para>Nach erfolgreicher Installation ist der Loginbildschirm unter
+      folgender URL erreichbar:</para>
+
+      <para><ulink
+      url="http://localhost/lx-office-erp/login.pl">http://localhost/lx-office-erp/login.pl</ulink></para>
+
+      <para>Die Administrationsseite erreichen Sie unter:</para>
+
+      <para><ulink
+      url="http://localhost/lx-office-erp/admin.pl">http://localhost/lx-office-erp/admin.pl</ulink></para>
+    </sect1>
+  </chapter>
+
+  <chapter id="features" xreflabel="Features und Funktionen">
+    <title>Features und Funktionen</title>
+
+    <sect1 id="features.periodic-invoices" xreflabel="Wiedekehrende Rechnungen">
+     <title>Wiederkehrende Rechnungen</title>
+
+     <sect2 id="features.periodic-invoices.introduction" xreflabel="Einführung in wiederkehrende Rechnungen">
+      <title>Einführung</title>
+
+      <para>
+       Wiederkehrende Rechnungen werden als normale Aufträge definiert und konfiguriert, mit allen dazugehörigen Kunden- und
+       Artikelangaben. Die konfigurierten Aufträge werden später automatisch in Rechnungen umgewandelt, so als ob man den Workflow benutzen
+       würde, und auch die Auftragsnummer wird übernommen, sodass alle wiederkehrenden Rechnungen, die aus einem Auftrag erstellt wurden,
+       später leicht wiederzufinden sind.
+      </para>
+
+     </sect2>
+
+     <sect2 id="features.periodic-invoices.configuration" xreflabel="Konfiguration von wiederkehrenden Rechnungen">
+      <title>Konfiguration</title>
+
+      <para>
+       Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren, findet sich beim Bearbeiten des Auftrags ein neuer Knopf
+       "Konfigurieren", der ein neues Fenster öffnet, in dem man die nötigen Parameter einstellen kann.  Hinter dem Knopf wird außerdem noch
+       angezeigt, ob der Auftrag als wiederkehrende Rechnung konfiguriert ist oder nicht.
+      </para>
+
+      <para>
+       Folgende Parameter kann man konfigurieren:
+      </para>
+
+      <variablelist>
+       <varlistentry>
+        <term>Status</term>
+        <listitem>
+         <para>
+          Bei aktiven Rechnungen wird automatisch eine Rechnung erstellt, wenn die Periodizität erreicht ist (z.B. Anfang eines neuen
+          Monats).
+         </para>
+
+         <para>
+          Ist ein Auftrag nicht aktiv, so werden für ihn auch keine wiederkehrenden Rechnungen erzeugt. Stellt man nach längerer
+          nicht-aktiver Zeit einen Auftrag wieder auf aktiv, wird beim nächsten Periodenwechsel für alle Perioden, seit der letzten aktiven
+          Periode, jeweils eine Rechnung erstellt. Möchte man dies verhindern, muss man vorher das Startdatum neu setzen.
+         </para>
+
+         <para>
+          Für gekündigte Aufträge werden nie mehr Rechnungen erstellt. Man kann sich diese Aufträge aber gesondert in den Berichten anzeigen
+          lassen.
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term>Periodizität</term>
+        <listitem>
+         <para>
+          Ob monatlich, quartalsweise oder jährlich auf neue Rechnungen überprüft werden soll. Für jede Periode seit dem Startdatum wird
+          überprüft, ob für die Periode (beginnend immer mit dem ersten Tag der Periode) schon eine Rechnung erstellt wurde. Unter Umständen
+          können bei einem Startdatum in der Vergangenheit gleich mehrere Rechnungen erstellt werden.
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term>Buchen auf</term>
+        <listitem>
+         <para>
+          Das Forderungskonto, in der Regel "Forderungen aus Lieferungen und Leistungen". Das Gegenkonto ergibt sich aus den Buchungsgruppen
+          der betreffenden Waren.
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term>Startdatum</term>
+        <listitem>
+         <para>
+          ab welchem Datum auf Rechnungserstellung geprüft werden soll
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term>Enddatum</term>
+        <listitem>
+         <para>
+          ab wann keine Rechnungen mehr erstellt werden sollen
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term>Automatische Verlängerung um x Monate</term>
+        <listitem>
+         <para>
+          Sollen die wiederkehrenden Rechnungen bei Erreichen des eingetragenen Enddatums weiterhin erstellt werden, so kann man hier die
+          Anzahl der Monate eingeben, um die das Enddatum automatisch nach hinten geschoben wird.
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term>Drucken</term>
+        <listitem>
+         <para>
+          Sind Drucker konfiguriert, so kann man sich die erstellten Rechnungen auch gleich ausdrucken lassen.
+         </para>
+        </listitem>
+       </varlistentry>
+      </variablelist>
+
+      <para>
+       Nach Erstellung der Rechnungen kann eine E-Mail mit Informationen zu den erstellten Rechnungen verschickt werden. Konfiguriert wird
+       dies in der <link linkend="config.config-file.sections-parameters">Konfigurationsdatei</link>
+       <filename>config/lx_office.conf</filename> im Abschnitt <varname>[periodic_invoices]</varname>.
+      </para>
+     </sect2>
+
+     <sect2 id="features.periodic-invoices.reports">
+      <title>Auflisten</title>
+
+      <para>
+       Unter Verkauf-&gt;Berichte-&gt;Aufträge finden sich zwei neue Checkboxen, &quot;Wiederkehrende Rechnungen aktiv&quot; und
+       &quot;Wiederkehrende Rechnungen inaktiv&quot;, mit denen man sich einen Überglick über die wiederkehrenden Rechnungen verschaffen
+       kann.
+      </para>
+     </sect2>
+
+     <sect2 id="features.periodic-invoices.task-server">
+      <title>Erzeugung der eigentlichen Rechnungen</title>
+
+      <para>
+       Die zeitliche und periodische Überprüfung, ob eine wiederkehrende Rechnung automatisch erstellt werden soll, geschieht durch den
+       <link linkend="config.task-server">Taskserver</link>, einen externen Dienst, der automatisch beim Start des Servers gestartet
+       werden sollte.
+      </para>
+     </sect2>
+
+     <sect2 id="features.periodic-invoices.create-for-current-month">
+      <title>Erste Rechnung für aktuellen Monat erstellen</title>
+
+      <para>
+       Will man im laufenden Monat eine monatlich wiederkehrende Rechnung inkl. des laufenden Monats starten, stellt man das Startdatum auf
+       den Monatsanfang und wartet ein paar Minuten, bis der Taskserver den neu konfigurieren Auftrag erkennt und daraus eine Rechnung
+       generiert hat. Alternativ setzt man das Startdatum auf den Monatsersten des Folgemonats und erstellt die erste Rechnung direkt
+       manuell über den Workflow.
+      </para>
+     </sect2>
+    </sect1>
+
+    <sect1 id="dokumentenvorlagen-und-variablen">
+      <title>Dokumentenvorlagen und verfügbare Variablen</title>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.einführung">
+        <title>Einführung</title>
+
+        <para>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
+        <function>&lt;%variablenname%&gt;</function> verwendet wird. Für
+        LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
+        (siehe <xref
+        linkend="dokumentenvorlagen-und-variablen.tag-style"/>).</para>
+
+        <para>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.</para>
+
+        <para>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:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><filename>SL/Form.pm</filename> öffnen und am Anfang die
+            Zeile "<command>use Data::Dumper;</command>" einfügen.</para>
+          </listitem>
+
+          <listitem>
+            <para>In <filename>Form.pm</filename> die Funktion
+            <function>parse_template</function> suchen und hier die Zeile
+            <command>print(STDERR Dumper($self));</command> einfügen.</para>
+          </listitem>
+
+          <listitem>
+            <para>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
+            ein PDF für eine Rechnung erzeugen.</para>
+          </listitem>
+
+          <listitem>
+            <para>Im <filename>error.log</filename> Apache steht die Ausgabe
+            der Variablen <varname>$self</varname> in der Form <varname>'key'
+            =&gt; 'value',</varname>. Alle <varname>key</varname>s sind
+            verfügbar.</para>
+          </listitem>
+        </itemizedlist>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.variablen-ausgeben">
+        <title>Variablen ausgeben</title>
+
+        <para>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
+        Tags geschrieben werden, also z.B.
+        <varname>&lt;%variablenname%&gt;</varname>.</para>
+
+        <para>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
+        die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
+        <varname>&lt;%variablenname FLAG1 FLAG2%&gt;</varname>. Momentan
+        werden die folgenden Flags unterstützt:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><option>NOFORMAT</option> gilt nur für Zahlenwerte und gibt
+            den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
+            mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
+            damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</para>
+          </listitem>
+
+          <listitem>
+            <para><option>NOESCAPE</option> unterdrückt das Escapen von
+            Sonderzeichen für die Vorlagensprache. Wenn also in einer
+            Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
+            auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
+            ist dieses Flag sinnvoll.</para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Beispiel:</para>
+
+        <programlisting>&lt;%quototal NOFORMAT%&gt;</programlisting>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">
+        <title>Verwendung in Druckbefehlen</title>
+
+        <para>In der Admininstration können Drucker definiert werden. Auch im
+        dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
+        und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
+        den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
+        <function>`...`</function> nicht zu unerwünschtem Verhalten
+        führen.</para>
+
+        <para>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
+        für das die Telefonnummer eines Ansprechpartners als Teil der
+        Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
+        z.B. wie folgt aussehen:</para>
+
+        <programlisting>send_fax --number &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</programlisting>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.tag-style"
+             xreflabel="Anfang und Ende der Tags verändern">
+        <title>Anfang und Ende der Tags verändern</title>
+
+        <para>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
+        <function>&lt;%customer%&gt;</function>. 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.</para>
+
+        <para>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
+        Format gültigen Kommentarzeichen anfangen, dann
+        <function>config:</function> enthalten, die entsprechende Option
+        setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
+        enden. Beispiel für LaTeX:</para>
+
+        <programlisting>% config: tag-style=($ $)</programlisting>
+
+        <para>Dies würde Lx-Office dazu veranlassen, Variablen zu ersetzen,
+        wenn sie wie folgt aussehen: <function>($customer$)</function>. Das
+        äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</para>
+
+        <programlisting>&lt;!-- config: tag-style=($ $) --&gt;</programlisting>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">
+        <title>Zuordnung von den Dateinamen zu den Funktionen</title>
+
+        <para>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
+        welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
+        "<filename>.ext</filename>" geeignet zu ersetzen:
+        "<filename>.tex</filename>" für LaTeX-Vorlagen und
+        "<filename>.odt</filename>" für OpenDocument-Vorlagen.</para>
+
+        <variablelist>
+          <varlistentry>
+            <term><filename>bin_list.ext</filename></term>
+
+            <listitem>
+              <para>Lagerliste</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>check.ext</filename></term>
+
+            <listitem>
+              <para>?</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>invoice.ext</filename></term>
+
+            <listitem>
+              <para>Rechnung</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>packing_list.ext</filename></term>
+
+            <listitem>
+              <para>Packliste</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>pick_list.ext</filename></term>
+
+            <listitem>
+              <para>Sammelliste</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>purchase_delivery_order.ext</filename></term>
+
+            <listitem>
+              <para>Lieferschein (Einkauf)</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>purcharse_order.ext</filename></term>
+
+            <listitem>
+              <para>Bestellung an Lieferanten</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>request_quotation.ext</filename></term>
+
+            <listitem>
+              <para>Anfrage an Lieferanten</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>sales_delivery_order.ext</filename></term>
+
+            <listitem>
+              <para>Lieferschein (Verkauf)</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>sales_order.ext</filename></term>
+
+            <listitem>
+              <para>Bestellung</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>sales_quotation.ext</filename></term>
+
+            <listitem>
+              <para>Angebot an Kunden</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>zahlungserinnerung.ext</filename></term>
+
+            <listitem>
+              <para>Mahnung (Dateiname im Programm konfigurierbar)</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><filename>zahlungserinnerung_invoice.ext</filename></term>
+
+            <listitem>
+              <para>Rechnung über Mahngebühren (Dateiname im Programm
+              konfigurierbar)</para>
+            </listitem>
+          </varlistentry>
+        </variablelist>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.dateinamen-erweitert">
+        <title>Sprache, Drucker und E-Mail</title>
+
+        <para>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
+        eingearbeitet. So wird aus der Vorlage
+        <filename>sales_order.ext</filename> bei Sprache
+        <function>de</function> und Druckerkürzel <function>lpr2</function>
+        der Vorlagenname <filename>sales_order_de_lpr2.ext</filename>.
+        Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
+        bekommen dann noch das Kürzel <filename>_email</filename>, der
+        vollständige Vorlagenname wäre dann
+        <filename>sales_order_email_de_lpr2.ext</filename>. In allen Fällen
+        kann eine Standarddatei <filename>default.ext</filename> hinterlegt
+        werden. Diese wird verwendet, wenn keine der anderen Varianten
+        gefunden wird.</para>
+
+        <para>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
+        der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
+        verschickt wird, ist:</para>
+
+        <orderedlist>
+          <listitem>
+            <para><filename>sales_order_email_de_lpr2.tex</filename></para>
+          </listitem>
+
+          <listitem>
+            <para><filename>sales_order_de_lpr2.tex</filename></para>
+          </listitem>
+
+          <listitem>
+            <para><filename>sales_order.tex</filename></para>
+          </listitem>
+
+          <listitem>
+            <para><filename>default.tex</filename></para>
+          </listitem>
+        </orderedlist>
+
+        <para>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
+        Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
+        siehe dazu <xref
+        linkend="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"/>.</para>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.allgemeine-variablen">
+        <title>Allgemeine Variablen, die in allen Vorlagen vorhanden
+        sind</title>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"
+               xreflabel="Metainformationen zur angeforderten Vorlage">
+          <title>Metainformationen zur angeforderten Vorlage</title>
+
+          <para>Diese Variablen liefern Informationen darüber welche Variante
+          einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
+          Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
+          Formulare einbinden möchten.</para>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>template_meta.formname</varname></term>
+
+              <listitem>
+                <para>Basisname der Vorlage. Identisch mit der <link
+                linkend="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">Zurordnung
+                zu den Dateinamen</link> ohne die Erweiterung. Ein
+                Verkaufsauftrag enthält hier
+                <constant>sales_order</constant>.</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.language.description</varname></term>
+
+              <listitem>
+                <para>Beschreibung der verwendeten Sprache</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.language.template_code</varname></term>
+
+              <listitem>
+                <para>Vorlagenürzel der verwendeten Sprache, identisch mit dem
+                Kürzel das im Dateinamen verwendetet wird.</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.language.output_numberformat</varname></term>
+
+              <listitem>
+                <para>Zahlenformat der verwendeten Sprache in der Form
+                "<constant>1.000,00</constant>". Experimentell! Nur
+                interessant für Vorlagen die mit unformatierten Werten
+                arbeiten.</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.language.output_dateformat</varname></term>
+
+              <listitem>
+                <para>Datumsformat der verwendeten Sprache in der Form
+                "<constant>dd.mm.yyyy</constant>". Experimentell! Nur
+                interessant für Vorlagen die mit unformatierten Werten
+                arbeiten.</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.format</varname></term>
+
+              <listitem>
+                <para>Das angeforderte Format. Kann im Moment die Werte
+                <constant>pdf</constant>, <constant>postscript</constant>,
+                <constant>html</constant>, <constant>opendocument</constant>,
+                <constant>opendocument_pdf</constant> und
+                <constant>excel</constant> enthalten.</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.extension</varname></term>
+
+              <listitem>
+                <para>Dateierweiterung, wie im Dateinamen. Wird aus
+                <constant>format</constant> entschieden.</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.media</varname></term>
+
+              <listitem>
+                <para>Ausgabemedium. Kann zur Zeit die Werte
+                <constant>screen</constant> für Bildschirm,
+                <constant>email</constant> für E-Mmail (triggert das
+                <constant>_email</constant> Kürzel im Dateinamen),
+                <constant>printer</constant> für Drucker, und
+                <constant>queue</constant> für Warteschlange enthalten.</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.printer.description</varname></term>
+
+              <listitem>
+                <para>Beschreibung des ausgewählten Druckers</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>template_meta.printer.template_code</varname></term>
+
+              <listitem>
+                <para>Vorlagenürzel des ausgewählten Druckers, identisch mit
+                dem Kürzel das im Dateinamen verwendetet wird.</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.kunden-lieferanten">
+          <title>Stammdaten von Kunden und Lieferanten</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>account_number</varname></term>
+
+              <listitem>
+                <para>Kontonummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>bank</varname></term>
+
+              <listitem>
+                <para>Name der Bank</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>bank_code</varname></term>
+
+              <listitem>
+                <para>Bankleitzahl</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>bic</varname></term>
+
+              <listitem>
+                <para>Bank-Identifikations-Code (Bank Identifier Code,
+                BIC)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>business</varname></term>
+
+              <listitem>
+                <para>Kunden-/Lieferantentyp</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>city</varname></term>
+
+              <listitem>
+                <para>Stadt</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>contact</varname></term>
+
+              <listitem>
+                <para>Kontakt</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>country</varname></term>
+
+              <listitem>
+                <para>Land</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>cp_email</varname></term>
+
+              <listitem>
+                <para>Email des Ansprechpartners</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>cp_givenname</varname></term>
+
+              <listitem>
+                <para>Vorname des Ansprechpartners</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>cp_greeting</varname></term>
+
+              <listitem>
+                <para>Anrede des Ansprechpartners</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>cp_name</varname></term>
+
+              <listitem>
+                <para>Name des Ansprechpartners</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>cp_phone1</varname></term>
+
+              <listitem>
+                <para>Telefonnummer 1 des Ansprechpartners</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>cp_phone2</varname></term>
+
+              <listitem>
+                <para>Telefonnummer 2 des Ansprechpartners</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>cp_title</varname></term>
+
+              <listitem>
+                <para>Titel des Ansprechpartners</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>creditlimit</varname></term>
+
+              <listitem>
+                <para>Kreditlimit</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>customeremail</varname></term>
+
+              <listitem>
+                <para>Email des Kunden; nur für Kunden</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>customerfax</varname></term>
+
+              <listitem>
+                <para>Faxnummer des Kunden; nur für Kunden</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>customernotes</varname></term>
+
+              <listitem>
+                <para>Bemerkungen beim Kunden; nur für Kunden</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>customernumber</varname></term>
+
+              <listitem>
+                <para>Kundennummer; nur für Kunden</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>customerphone</varname></term>
+
+              <listitem>
+                <para>Telefonnummer des Kunden; nur für Kunden</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>discount</varname></term>
+
+              <listitem>
+                <para>Rabatt</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>email</varname></term>
+
+              <listitem>
+                <para>Emailadresse</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>fax</varname></term>
+
+              <listitem>
+                <para>Faxnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>homepage</varname></term>
+
+              <listitem>
+                <para>Homepage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>iban</varname></term>
+
+              <listitem>
+                <para>Internationale Kontonummer (International Bank Account
+                Number, IBAN)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>language</varname></term>
+
+              <listitem>
+                <para>Sprache</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>name</varname></term>
+
+              <listitem>
+                <para>Firmenname</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>payment_description</varname></term>
+
+              <listitem>
+                <para>Name der Zahlart</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>payment_terms</varname></term>
+
+              <listitem>
+                <para>Zahlungskonditionen</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>phone</varname></term>
+
+              <listitem>
+                <para>Telefonnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptocity</varname></term>
+
+              <listitem>
+                <para>Stadt (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptocontact</varname></term>
+
+              <listitem>
+                <para>Kontakt (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptocountry</varname></term>
+
+              <listitem>
+                <para>Land (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptodepartment1</varname></term>
+
+              <listitem>
+                <para>Abteilung 1 (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptodepartment2</varname></term>
+
+              <listitem>
+                <para>Abteilung 2 (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptoemail</varname></term>
+
+              <listitem>
+                <para>Email (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptofax</varname></term>
+
+              <listitem>
+                <para>Fax (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptoname</varname></term>
+
+              <listitem>
+                <para>Firmenname (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptophone</varname></term>
+
+              <listitem>
+                <para>Telefonnummer (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptostreet</varname></term>
+
+              <listitem>
+                <para>Straße und Hausnummer (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shiptozipcode</varname></term>
+
+              <listitem>
+                <para>Postleitzahl (Lieferadresse) <link
+                linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>street</varname></term>
+
+              <listitem>
+                <para>Straße und Hausnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>taxnumber</varname></term>
+
+              <listitem>
+                <para>Steuernummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>ustid</varname></term>
+
+              <listitem>
+                <para>Umsatzsteuer-Identifikationsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>vendoremail</varname></term>
+
+              <listitem>
+                <para>Email des Lieferanten; nur für Lieferanten</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>vendorfax</varname></term>
+
+              <listitem>
+                <para>Faxnummer des Lieferanten; nur für Lieferanten</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>vendornotes</varname></term>
+
+              <listitem>
+                <para>Bemerkungen beim Lieferanten; nur für Lieferanten</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>vendornumber</varname></term>
+
+              <listitem>
+                <para>Lieferantennummer; nur für Lieferanten</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>vendorphone</varname></term>
+
+              <listitem>
+                <para>Telefonnummer des Lieferanten; nur für
+                Lieferanten</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>zipcode</varname></term>
+
+              <listitem>
+                <para>Postleitzahl</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+
+          <note id="dokumentenvorlagen-und-variablen.anmerkung-shipto">
+            <para>Anmerkung: Sind die <varname>shipto*</varname>-Felder in den
+            Stammdaten nicht eingetragen, so haben die Variablen
+            <varname>shipto*</varname> den gleichen Wert wie die die
+            entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich
+            einige <varname>shipto*</varname>-Variablen so nicht in den
+            Stammdaten wiederfinden sondern schlicht Kopien der
+            Lieferdatenvariablen sind (z.B.
+            <varname>shiptocontact</varname>).</para>
+          </note>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.allgemein-bearbeiter">
+          <title>Informationen über den Bearbeiter</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>employee_address</varname></term>
+
+              <listitem>
+                <para>Adressfeld</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_businessnumber</varname></term>
+
+              <listitem>
+                <para>Firmennummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_company</varname></term>
+
+              <listitem>
+                <para>Firmenname</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_co_ustid</varname></term>
+
+              <listitem>
+                <para>Usatzsteuer-Identifikationsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_duns</varname></term>
+
+              <listitem>
+                <para>DUNS-Nummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_email</varname></term>
+
+              <listitem>
+                <para>Email</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_fax</varname></term>
+
+              <listitem>
+                <para>Fax</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_name</varname></term>
+
+              <listitem>
+                <para>voller Name</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_signature</varname></term>
+
+              <listitem>
+                <para>Signatur</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_taxnumber</varname></term>
+
+              <listitem>
+                <para>Steuernummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>employee_tel</varname></term>
+
+              <listitem>
+                <para>Telefonnummer</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.allgemein-verkaeufer">
+          <title>Informationen über den Bearbeiter</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>salesman_address</varname></term>
+
+              <listitem>
+                <para>Adressfeld</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_businessnumber</varname></term>
+
+              <listitem>
+                <para>Firmennummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_company</varname></term>
+
+              <listitem>
+                <para>Firmenname</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_co_ustid</varname></term>
+
+              <listitem>
+                <para>Usatzsteuer-Identifikationsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_duns</varname></term>
+
+              <listitem>
+                <para>DUNS-Nummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_email</varname></term>
+
+              <listitem>
+                <para>Email</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_fax</varname></term>
+
+              <listitem>
+                <para>Fax</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_name</varname></term>
+
+              <listitem>
+                <para>voller Name</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_signature</varname></term>
+
+              <listitem>
+                <para>Signatur</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_taxnumber</varname></term>
+
+              <listitem>
+                <para>Steuernummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>salesman_tel</varname></term>
+
+              <listitem>
+                <para>Telefonnummer</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.allgemein-steuern">
+          <title>Variablen für die einzelnen Steuern</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>tax</varname></term>
+
+              <listitem>
+                <para>Steuer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>taxbase</varname></term>
+
+              <listitem>
+                <para>zu versteuernder Betrag</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>taxdescription</varname></term>
+
+              <listitem>
+                <para>Name der Steuer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>taxrate</varname></term>
+
+              <listitem>
+                <para>Steuersatz</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.invoice">
+        <title>Variablen in Rechnungen</title>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.invoice-allgemein">
+          <title>Allgemeine Variablen</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>creditremaining</varname></term>
+
+              <listitem>
+                <para>Verbleibender Kredit</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>currency</varname></term>
+
+              <listitem>
+                <para>Währung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>cusordnumber</varname></term>
+
+              <listitem>
+                <para>Bestellnummer beim Kunden</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>deliverydate</varname></term>
+
+              <listitem>
+                <para>Lieferdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>duedate</varname></term>
+
+              <listitem>
+                <para>Fälligkeitsdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>globalprojectnumber</varname></term>
+
+              <listitem>
+                <para>Projektnummer des ganzen Beleges</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>globalprojectdescription</varname></term>
+
+              <listitem>
+                <para>Projekbeschreibung des ganzen Beleges</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>intnotes</varname></term>
+
+              <listitem>
+                <para>Interne Bemerkungen</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>invdate</varname></term>
+
+              <listitem>
+                <para>Rechnungsdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>invnumber</varname></term>
+
+              <listitem>
+                <para>Rechnungsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>invtotal</varname></term>
+
+              <listitem>
+                <para>gesamter Rechnungsbetrag</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>notes</varname></term>
+
+              <listitem>
+                <para>Bemerkungen der Rechnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>orddate</varname></term>
+
+              <listitem>
+                <para>Auftragsdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>ordnumber</varname></term>
+
+              <listitem>
+                <para>Auftragsnummer, wenn die Rechnung aus einem Auftrag
+                erstellt wurde</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>payment_description</varname></term>
+
+              <listitem>
+                <para>Name der Zahlart</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>payment_terms</varname></term>
+
+              <listitem>
+                <para>Zahlungskonditionen</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>quodate</varname></term>
+
+              <listitem>
+                <para>Angebotsdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>quonumber</varname></term>
+
+              <listitem>
+                <para>Angebotsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shippingpoint</varname></term>
+
+              <listitem>
+                <para>Versandort</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>shipvia</varname></term>
+
+              <listitem>
+                <para>Transportmittel</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>subtotal</varname></term>
+
+              <listitem>
+                <para>Zwischensumme aller Posten ohne Steuern</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>total</varname></term>
+
+              <listitem>
+                <para>Restsumme der Rechnung (Summe abzüglich bereits
+                bezahlter Posten)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>transaction_description</varname></term>
+
+              <listitem>
+                <para>Vorgangsbezeichnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>transdate</varname></term>
+
+              <listitem>
+                <para>Auftragsdatum wenn die Rechnung aus einem Auftrag
+                erstellt wurde</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.invoice-posten">
+          <title>Variablen für jeden Posten auf der Rechnung</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>bin</varname></term>
+
+              <listitem>
+                <para>Stellage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>description</varname></term>
+
+              <listitem>
+                <para>Artikelbeschreibung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>discount</varname></term>
+
+              <listitem>
+                <para>Rabatt als Betrag</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>discount_sub</varname></term>
+
+              <listitem>
+                <para>Zwischensumme mit Rabatt</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>drawing</varname></term>
+
+              <listitem>
+                <para>Zeichnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>ean</varname></term>
+
+              <listitem>
+                <para>EAN-Code</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>image</varname></term>
+
+              <listitem>
+                <para>Grafik</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>linetotal</varname></term>
+
+              <listitem>
+                <para>Zeilensumme (Anzahl * Einzelpreis)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>longdescription</varname></term>
+
+              <listitem>
+                <para>Langtext</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>microfiche</varname></term>
+
+              <listitem>
+                <para>Mikrofilm</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>netprice</varname></term>
+
+              <listitem>
+                <para>Nettopreis</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>nodiscount_linetotal</varname></term>
+
+              <listitem>
+                <para>Zeilensumme ohne Rabatt</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>nodiscount_sub</varname></term>
+
+              <listitem>
+                <para>Zwischensumme ohne Rabatt</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>number</varname></term>
+
+              <listitem>
+                <para>Artikelnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>ordnumber_oe</varname></term>
+
+              <listitem>
+                <para>Auftragsnummer des Originalauftrags, wenn die Rechnung
+                aus einem Sammelauftrag erstellt wurde</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>p_discount</varname></term>
+
+              <listitem>
+                <para>Rabatt in Prozent</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>partnotes</varname></term>
+
+              <listitem>
+                <para>Die beim Artikel gespeicherten Bemerkungen</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>partsgroup</varname></term>
+
+              <listitem>
+                <para>Warengruppe</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>price_factor</varname></term>
+
+              <listitem>
+                <para>Der Preisfaktor als Zahl, sofern einer eingestellt
+                ist</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>price_factor_name</varname></term>
+
+              <listitem>
+                <para>Der Name des Preisfaktors, sofern einer eingestellt
+                ist</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>projectnumber</varname></term>
+
+              <listitem>
+                <para>Projektnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>projectdescription</varname></term>
+
+              <listitem>
+                <para>Projektbeschreibung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>qty</varname></term>
+
+              <listitem>
+                <para>Anzahl</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>reqdate</varname></term>
+
+              <listitem>
+                <para>Lieferdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>runningnumber</varname></term>
+
+              <listitem>
+                <para>Position auf der Rechnung (1, 2, 3...)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>sellprice</varname></term>
+
+              <listitem>
+                <para>Verkaufspreis</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>serialnumber</varname></term>
+
+              <listitem>
+                <para>Seriennummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>tax_rate</varname></term>
+
+              <listitem>
+                <para>Steuersatz</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>transdate_oe</varname></term>
+
+              <listitem>
+                <para>Auftragsdatum des Originalauftrags, wenn die Rechnung
+                aus einem Sammelauftrag erstellt wurde</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>unit</varname></term>
+
+              <listitem>
+                <para>Einheit</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>weight</varname></term>
+
+              <listitem>
+                <para>Gewicht</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+
+          <para>Für jeden Posten gibt es ein Unterarray mit den Informationen
+          über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
+          einer <function>foreach</function>-Schleife ausgegeben werden, da
+          für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
+          können. Die Variablen dafür lauten:</para>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>make</varname></term>
+
+              <listitem>
+                <para>Lieferant</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>model</varname></term>
+
+              <listitem>
+                <para>Lieferantenartikelnummer</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.invoice-zahlungen">
+          <title>Variablen für die einzelnen Zahlungseingänge</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>payment</varname></term>
+
+              <listitem>
+                <para>Betrag</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>paymentaccount</varname></term>
+
+              <listitem>
+                <para>Konto</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>paymentdate</varname></term>
+
+              <listitem>
+                <para>Datum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>paymentmemo</varname></term>
+
+              <listitem>
+                <para>Memo</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>paymentsource</varname></term>
+
+              <listitem>
+                <para>Beleg</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc">
+          <title>Benutzerdefinierte Kunden- und Lieferantenvariablen</title>
+
+          <para>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
+          <varname>vc_cvar_</varname> und dem vom Benutzer festgelegten
+          Variablennamen zusammen.</para>
+
+          <para>Beispiel: Der Benutzer hat eine Variable namens
+          <varname>number_of_employees</varname> definiert, die die Anzahl der
+          Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
+          unter dem Namen <varname>vc_cvar_number_of_employees</varname> zur
+          Verfügung.</para>
+        </sect3>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.dunning">
+        <title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
+          <title>Namen der Vorlagen</title>
+
+          <para>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
+          <constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
+          für die ausgewählte Sprache und den ausgewählten Drucker
+          angehängt.</para>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
+          <title>Allgemeine Variablen in Mahnungen</title>
+
+          <para>Die Variablen des Verkäufers stehen wie gewohnt als
+          <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
+          Kunden stehen als Variablen <varname>name</varname>,
+          <varname>street</varname>, <varname>zipcode</varname>,
+          <varname>city</varname>, <varname>country</varname>,
+          <varname>department_1</varname>, <varname>department_2</varname>,
+          und <varname>email</varname> zur Verfügung.</para>
+
+          <para>Weitere Variablen beinhalten:</para>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>dunning_date</varname></term>
+
+              <listitem>
+                <para>Datum der Mahnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dunning_duedate</varname></term>
+
+              <listitem>
+                <para>Fälligkeitsdatum für diese Mahhnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dunning_id</varname></term>
+
+              <listitem>
+                <para>Mahnungsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>fee</varname></term>
+
+              <listitem>
+                <para>Kummulative Mahngebühren</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>interest_rate</varname></term>
+
+              <listitem>
+                <para>Zinssatz per anno in Prozent</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>total_amount</varname></term>
+
+              <listitem>
+                <para>Gesamter noch zu zahlender Betrag als
+                <function>fee</function> + <function>total_interest</function>
+                + <function>total_open_amount</function></para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>total_interest</varname></term>
+
+              <listitem>
+                <para>Zinsen per anno über alle Rechnungen</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>total_open_amount</varname></term>
+
+              <listitem>
+                <para>Summe über alle offene Beträge der Rechnungen</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
+          <title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>dn_amount</varname></term>
+
+              <listitem>
+                <para>Rechnungssumme (brutto)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_duedate</varname></term>
+
+              <listitem>
+                <para>Originales Fälligkeitsdatum der Rechnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_dunning_date</varname></term>
+
+              <listitem>
+                <para>Datum der Mahnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_dunning_duedate</varname></term>
+
+              <listitem>
+                <para>Fälligkeitsdatum der Mahnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_fee</varname></term>
+
+              <listitem>
+                <para>Kummulative Mahngebühr</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_interest</varname></term>
+
+              <listitem>
+                <para>Zinsen per anno für diese Rechnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_invnumber</varname></term>
+
+              <listitem>
+                <para>Rechnungsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_linetotal</varname></term>
+
+              <listitem>
+                <para>Noch zu zahlender Betrag (ergibt sich aus
+                <varname>dn_open_amount</varname> + <varname>dn_fee</varname>
+                + <varname>dn_interest</varname>)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_netamount</varname></term>
+
+              <listitem>
+                <para>Rechnungssumme (netto)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_open_amount</varname></term>
+
+              <listitem>
+                <para>Offener Rechnungsbetrag</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_ordnumber</varname></term>
+
+              <listitem>
+                <para>Bestellnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_transdate</varname></term>
+
+              <listitem>
+                <para>Rechnungsdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dn_curr</varname></term>
+
+              <listitem>
+                <para>Währung, in der die Rechnung erstellt wurde. (Die
+                Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
+          <title>Variablen in automatisch erzeugten Rechnungen über
+          Mahngebühren</title>
+
+          <para>Die Variablen des Verkäufers stehen wie gewohnt als
+          <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
+          Kunden stehen als Variablen <varname>name</varname>,
+          <varname>street</varname>, <varname>zipcode</varname>,
+          <varname>city</varname>, <varname>country</varname>,
+          <varname>department_1</varname>, <varname>department_2</varname>,
+          und <varname>email</varname> zur Verfügung.</para>
+
+          <para>Weitere Variablen beinhalten:</para>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>duedate</varname></term>
+
+              <listitem>
+                <para>Fälligkeitsdatum der Rechnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>dunning_id</varname></term>
+
+              <listitem>
+                <para>Mahnungsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>fee</varname></term>
+
+              <listitem>
+                <para>Mahngebühren</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>interest</varname></term>
+
+              <listitem>
+                <para>Zinsen</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>invamount</varname></term>
+
+              <listitem>
+                <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
+                <varname>interest</varname>)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>invdate</varname></term>
+
+              <listitem>
+                <para>Rechnungsdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>invnumber</varname></term>
+
+              <listitem>
+                <para>Rechnungsnummer</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
+        <title>Variablen in anderen Vorlagen</title>
+
+        <sect3>
+          <title>Einführung</title>
+
+          <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
+          Rechnung. Allerdings heißen die Variablen, die mit
+          <varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
+          fangen sie mit <varname>quo</varname> für "quotation" an:
+          <varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
+          wiederum fangen sie mit <varname>ord</varname> für "order" an:
+          <varname>ordnumber</varname> für Bestellnummer etc.</para>
+
+          <para>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.</para>
+
+          <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
+          in Rechnungen aufgeführt.</para>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
+          <title>Angebote und Preisanfragen</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>quonumber</varname></term>
+
+              <listitem>
+                <para>Angebots- bzw. Anfragenummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>reqdate</varname></term>
+
+              <listitem>
+                <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
+                Preisanfragen)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>transdate</varname></term>
+
+              <listitem>
+                <para>Angebots- bzw. Anfragedatum</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
+          <title>Auftragsbestätigungen und Lieferantenaufträge</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>ordnumber</varname></term>
+
+              <listitem>
+                <para>Auftragsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>reqdate</varname></term>
+
+              <listitem>
+                <para>Lieferdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>transdate</varname></term>
+
+              <listitem>
+                <para>Auftragsdatum</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
+          <title>Lieferscheine (Verkauf und Einkauf)</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>cusordnumber</varname></term>
+
+              <listitem>
+                <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
+                des Lieferanten (im Einkauf)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>donumber</varname></term>
+
+              <listitem>
+                <para>Lieferscheinnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>transdate</varname></term>
+
+              <listitem>
+                <para>Lieferscheindatum</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+
+          <para>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
+          <function>foreach</function>-Schleife ausgegeben werden. Diese
+          Variablen sind:</para>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>si_bin</varname></term>
+
+              <listitem>
+                <para>Lagerplatz</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>si_chargenumber</varname></term>
+
+              <listitem>
+                <para>Chargennummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>si_bestbefore</varname></term>
+
+              <listitem>
+                <para>Mindesthaltbarkeit</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>si_number</varname></term>
+
+              <listitem>
+                <para>Artikelnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>si_qty</varname></term>
+
+              <listitem>
+                <para>Anzahl bzw. Menge</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>si_runningnumber</varname></term>
+
+              <listitem>
+                <para>Positionsnummer (1, 2, 3 etc)</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>si_unit</varname></term>
+
+              <listitem>
+                <para>Einheit</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>si_warehouse</varname></term>
+
+              <listitem>
+                <para>Lager</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
+          <title>Variablen für Sammelrechnung</title>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>c0total</varname></term>
+
+              <listitem>
+                <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
+                Tage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>c30total</varname></term>
+
+              <listitem>
+                <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
+                und &lt; 60 Tage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>c60total</varname></term>
+
+              <listitem>
+                <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
+                und &lt; 90 Tage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>c90total</varname></term>
+
+              <listitem>
+                <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
+                Tage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>total</varname></term>
+
+              <listitem>
+                <para>Gesamtbetrag aller Rechnungen</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+
+          <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
+
+          <variablelist>
+            <varlistentry>
+              <term><varname>invnumber</varname></term>
+
+              <listitem>
+                <para>Rechnungsnummer</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>invdate</varname></term>
+
+              <listitem>
+                <para>Rechnungsdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>duedate</varname></term>
+
+              <listitem>
+                <para>Fälligkeitsdatum</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>amount</varname></term>
+
+              <listitem>
+                <para>Summe der Rechnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>open</varname></term>
+
+              <listitem>
+                <para>Noch offener Betrag der Rechnung</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>c0</varname></term>
+
+              <listitem>
+                <para>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
+                Tage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>c30</varname></term>
+
+              <listitem>
+                <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
+                &lt; 60 Tage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>c60</varname></term>
+
+              <listitem>
+                <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
+                &lt; 90 Tage</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term><varname>c90</varname></term>
+
+              <listitem>
+                <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
+                Tage</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
+        <title>Blöcke, bedingte Anweisungen und Schleifen</title>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
+          <title>Einfürhung</title>
+
+          <para>Der Parser kennt neben den Variablen einige weitere
+          Konstrukte, die gesondert behandelt werden. Diese sind wie
+          Variablennamen in spezieller Weise markiert:
+          <command>&lt;%anweisung%&gt; ... &lt;%end%&gt;</command></para>
+
+          <para>Anmerkung zum <command>&lt;%end%&gt;</command>: Der besseren
+          Verständlichkeit halber kann man nach dem <command>end</command>
+          noch beliebig weitere Wörter schreiben, um so zu markieren, welche
+          Anweisung (z.B. <command>if</command> oder
+          <command>foreach</command>) damit abgeschlossen wird.</para>
+
+          <para>Beispiel: Lautet der Beginn eines Blockes z.B.
+          <command>&lt;%if type == "sales_quotation"%&gt;</command>, so könnte
+          er mit <command>&lt;%end%&gt;</command> genauso abgeschlossen werden
+          wie mit <command>&lt;%end if%&gt;</command> oder auch
+          <command>&lt;%end type == "sales_quotation"%&gt;</command>.</para>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
+          <title>Der if-Block</title>
+
+          <programlisting>&lt;%if variablenname%&gt;
+...
+&lt;%end%&gt;</programlisting>
+
+          <para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
+          und dem "end" werden nur ausgegeben, wenn die Variable
+          <varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
+
+          <para>Die Bedingung kann auch negiert werden, indem das Wort
+          <function>not</function> nach dem <filename>if</filename> verwendet
+          wird. Beispiel:</para>
+
+          <programlisting>&lt;%if not cp_greeting%&gt;
+...
+&lt;%end%&gt;</programlisting>
+
+          <para>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:</para>
+
+          <programlisting>&lt;%if var1 == "Wert"%&gt;</programlisting>
+
+          <para>Testet die Variable <varname>var1</varname> auf
+          übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
+          Mittels <function>!=</function> anstelle von <function>==</function>
+          würde auf Ungleichheit getestet.</para>
+
+          <programlisting>%if var1 == var2%&gt;</programlisting>
+
+          <para>Testet die Variable <varname>var1</varname> auf
+          übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
+          <function>!=</function> anstelle von <function>==</function> würde
+          auf Ungleichheit getestet.</para>
+
+          <para>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 <function>=~</function> und
+          <function>!~</function> als Vergleichsoperatoren.</para>
+
+          <para>Beispiel für einen Test, ob die Variable
+          <varname>intnotes</varname> (interne Bemerkungen) das Wort
+          <constant>schwierig</constant> enthält:</para>
+
+          <programlisting>&lt;%if intnotes =~ "schwierig"%&gt;</programlisting>
+        </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
+          <title>Der foreach-Block</title>
+
+          <programlisting>&lt;%foreach variablenname%&gt;
+...
+&lt;%end%&gt;</programlisting>
+
+          <para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
+          wie das Perl-Array der Variablen <varname>variablenname</varname>
+          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 <link
+          linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
+          Variablen</link> jeweils auf den Wert für die aktuelle Position
+          gesetzt.</para>
+
+          <para>Die Syntax sieht normalerweise wie folgt aus:</para>
+
+          <programlisting>&lt;%foreach number%&gt;
+Position: &lt;%runningnumber%&gt;
+Anzahl: &lt;%qty%&gt;
+Artikelnummer: &lt;%number%&gt;
+Beschreibung: &lt;%description%&gt;
+...
+&lt;%end%&gt;</programlisting>
+
+          <para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
+          <function>&lt;%foreach%&gt;</function>-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 <function>&lt;%foreach%&gt;</function> und
+          <function>&lt;%end%&gt;</function> wiederholt, nicht aber die
+          komplette Zeile, in der er steht.</para>
+        </sect3>
+      </sect2>
+
+      <sect2 id="dokumentenvorlagen-und-variablen.markup">
+        <title>Markup-Code zur Textformatierung innerhalb von
+        Formularen</title>
+
+        <para>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.</para>
+
+        <para>Die unterstützen Formatierungen sind:</para>
+
+        <variablelist>
+          <varlistentry>
+            <term>&lt;b&gt;Text&lt;/b&gt;</term>
+
+            <listitem>
+              <para>Text wird in Fettdruck gesetzt.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>&lt;i&gt;Text&lt;/i&gt;</term>
+
+            <listitem>
+              <para>Text wird kursiv gesetzt.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>&lt;u&gt;Text&lt;/u&gt;</term>
+
+            <listitem>
+              <para>Text wird unterstrichen.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>&lt;s&gt;Text&lt;/s&gt;</term>
+
+            <listitem>
+              <para>Text wird durchgestrichen. Diese Formatierung ist nicht
+              bei der Ausgabe als PDF über LaTeX verfügbar.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>&lt;bullet&gt;</term>
+
+            <listitem>
+              <para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
+              unten).</para>
+            </listitem>
+          </varlistentry>
+        </variablelist>
+
+        <para>Der Befehl <command>&lt;bullet&gt;</command> funktioniert
+        momentan auch nur in Latex-Vorlagen.</para>
+      </sect2>
+    </sect1>
+
+    <sect1 id="excel-templates">
+      <title>Excel-Vorlagen</title>
+
+      <sect2 id="excel-templates.summary">
+        <title>Zusammenfassung</title>
+
+        <para>Dieses Dokument beschreibt den Mechanismus, mit dem
+        Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
+        einhergehen.</para>
+      </sect2>
+
+      <sect2 id="excel-templates.usage">
+        <title>Bedienung</title>
+
+        <para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
+        werden. Die Konfigurationsoption heißt <varname>excel_templates =
+        1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
+
+        <para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
+        anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
+        werden. In den normalen Verkaufsmasken taucht nun
+        <constant>Excel</constant> als auswählbares Format auf und kann von da
+        an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
+
+        <para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
+        eine Angebotsvorlage und wird unter dem internen Namen der Angebote
+        <filename>sales_quotation.xls</filename> gespeichert.</para>
+      </sect2>
+
+      <sect2 id="excel-templates.syntax">
+        <title>Variablensyntax</title>
+
+        <para>Einfache Syntax:
+        <command>&lt;&lt;varname&gt;&gt;</command></para>
+
+        <para>Dabei sind <constant>&lt;&lt;</constant> und
+        <constant>&gt;&gt;</constant> die Delimiter. Da Excel auf festen
+        Breiten besteht, kann der Tag künstlich verlängert werden, indem
+        weitere <constant>&lt;</constant> oder <constant>&gt;</constant>
+        eingefügt werden. Der Tag muss nicht symmetrisch sein.
+        Beispiel:</para>
+
+        <programlisting>&lt;&lt;&lt;&lt;&lt;varname&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</programlisting>
+
+        <para>Um die Limitierung der festen Breite zu reduzieren, können
+        weitere Variablen in einem Block interpoliert werden. Whitespace wird
+        dazwishen dann erhalten. Beispiel:</para>
+
+        <programlisting>&lt;&lt;&lt;&lt;&lt;varname1 varname2   varname3&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</programlisting>
+
+        <para>Die Variablen werden interpoliert, und linksbündig mit
+        Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
+        lang, werden überzählige Zeichen abgeschnitten.</para>
+
+        <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
+        der Block mit einem Leerzeichen anfängt. Beispiel:</para>
+
+        <programlisting>&lt;&lt;&lt;&lt;&lt;&lt;            varname&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</programlisting>
+
+        <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
+        Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
+        entfernt.</para>
+      </sect2>
+
+      <sect2 id="excel-templates.limitations">
+        <title>Einschränkungen</title>
+
+        <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
+        mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
+        beschränkt sich daher darauf, Textstellen exakt durch einen anderen
+        Text zu ersetzen.</para>
+
+        <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
+        <command>&lt;%if%&gt;</command> und
+        <command>&lt;%foreach%&gt;</command> nicht vorhanden. Der Delimiter
+        <constant>&lt;% %&gt;</constant> kommt in den Headerinformationen
+        evtl. vor. Deshalb wurde auf den sichereren Delimiter
+        <constant>&lt;&lt;</constant> und <constant>&gt;&gt;</constant>
+        gewechselt.</para>
+      </sect2>
+    </sect1>
+  </chapter>
+
+  <chapter>
+    <title>Entwicklerdokumentation</title>
+
+    <sect1 id="devel.globals" xreflabel="Globale Variablen">
+      <title>Globale Variablen</title>
+
+      <sect2>
+        <title>Wie sehen globale Variablen in Perl aus?</title>
+
+        <para>Globale Variablen liegen in einem speziellen namespace namens
+        "main", der von überall erreichbar ist. Darüber hinaus sind bareword
+        globs global und die meisten speziellen Variablen sind...
+        speziell.</para>
+
+        <para>Daraus ergeben sich folgende Formen:</para>
+
+        <variablelist>
+          <varlistentry>
+            <term><literal>$main::form</literal></term>
+
+            <listitem>
+              <para>expliziter Namespace "main"</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><literal>$::form</literal></term>
+
+            <listitem>
+              <para>impliziter Namespace "main"</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><literal>open FILE, "file.txt"</literal></term>
+
+            <listitem>
+              <para><varname>FILE</varname> ist global</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><literal>$_</literal></term>
+
+            <listitem>
+              <para>speziell</para>
+            </listitem>
+          </varlistentry>
+        </variablelist>
+
+        <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
+        Schlüsselwort wie "<function>global</function>", mit dem man
+        importieren kann. <function>my</function>, <function>our</function>
+        und <function>local</function> machen was anderes.</para>
+
+        <variablelist>
+          <varlistentry>
+            <term><literal>my $form</literal></term>
+
+            <listitem>
+              <para>lexikalische Variable, gültig bis zum Ende des
+              Scopes</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><literal>our $form</literal></term>
+
+            <listitem>
+              <para><varname>$form</varname> referenziert ab hier
+              <varname>$PACKAGE::form</varname>.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term><literal>local $form</literal></term>
+
+            <listitem>
+              <para>Alle Änderungen an <varname>$form</varname> werden am Ende
+              des scopes zurückgesetzt</para>
+            </listitem>
+          </varlistentry>
+        </variablelist>
+      </sect2>
+
+      <sect2>
+        <title>Warum sind globale Variablen ein Problem?</title>
+
+        <para>Das erste Problem ist <productname>FCGI</productname>.</para>
+
+        <para><productname>SQL-Ledger</productname> hat fast alles im globalen
+        namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
+        Unter <productname>FCGI</productname> müssen diese Sachen auch wieder
+        aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
+        Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
+        Datenbankverbindungen, weil die ne Ewigkeit zum initialisieren
+        brauchen.</para>
+
+        <para>Das zweite Problem ist <function>strict</function>. Unter
+        <function>strict</function> werden alle Variablen die nicht explizit
+        mit <function>Package</function>, <function>my</function> oder
+        <function>our</function> angegeben werden als Tippfehler angemarkert,
+        was einen vor so mancher Stunde suchen nach einem Bug erspart. Da
+        globale Variablen aber implizit mit Package angegeben werden, werden
+        die nicht geprüft, und ein Tippfehler da fällt niemandem auf.</para>
+      </sect2>
+
+      <sect2>
+        <title>Kanonische globale Variablen</title>
+
+        <para>Um dieses Problem im Griff zu halten gibt es einige wenige
+        globale Variablen, die kanonisch sind, und alles andere sollte
+        anderweitig umhergereicht werden.</para>
+
+        <para>Diese Variablen sind im Moment die folgenden neun:</para>
+
+        <itemizedlist>
+          <listitem>
+            <para><varname>$::form</varname></para>
+          </listitem>
+
+          <listitem>
+            <para><varname>%::myconfig</varname></para>
+          </listitem>
+
+          <listitem>
+            <para><varname>$::locale</varname></para>
+          </listitem>
+
+          <listitem>
+            <para><varname>$::lxdebug</varname></para>
+          </listitem>
+
+          <listitem>
+            <para><varname>$::auth</varname></para>
+          </listitem>
+
+          <listitem>
+            <para><varname>$::lx_office_conf</varname></para>
+          </listitem>
+
+          <listitem>
+            <para><varname>$::instance_conf</varname></para>
+          </listitem>
+
+          <listitem>
+            <para><varname>$::dispatcher</varname></para>
+          </listitem>
+
+          <listitem>
+            <para><varname>$::request</varname></para>
+          </listitem>
+        </itemizedlist>
+
+        <para>Damit diese nicht als Müllhalde misbrauch werden, im Folgenden
+        eine kurze Erläuterung was man von denn erwarten kann.</para>
+
+        <sect3>
+          <title>$::form</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Ist ein Objekt der Klasse
+              "<classname>Form</classname>"</para>
+            </listitem>
+
+            <listitem>
+              <para>Wird nach jedem Request gelöscht</para>
+            </listitem>
+
+            <listitem>
+              <para>Muss auch in Tests und Konsolenscripts vorhanden
+              sein.</para>
+            </listitem>
+
+            <listitem>
+              <para>Enthält am Anfang eines Requests die Requestparameter vom
+              User</para>
+            </listitem>
+
+            <listitem>
+              <para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
+              cachen, das wird aber momentan absichtlich zerstört</para>
+            </listitem>
+          </itemizedlist>
+
+          <para><varname>$::form</varname> wurde unter <productname>SQL
+          Ledger</productname> als Gottobjekt für alles misbraucht. Sämtliche
+          alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
+          heißt, alles was einem lieb ist, sollte man vor einem Aufruf von zum
+          Beispiel <function>IS-&gt;retrieve_customer()</function> in
+          Sicherheit bringen.</para>
+
+          <para>Das Objekt der Klasse Form hat leider im Moment noch viele
+          zentrale Funktionen Gdie vom internen Zustand abhängen, deshalb
+          bitte nie einfach zerstören oder überschreiben. Es geht ziemlich
+          sicher etwas kaputt.</para>
+
+          <para><varname>$::form</varname> ist gleichzeitig der Standard Scope
+          in den <productname>Template::Toolkit</productname> Templates
+          außerhalb der Controller: der Ausdruck <function>[% var
+          %]</function> greift auf <varname>$::form-&gt;{var}</varname> zu.
+          Unter Controllern ist der Standard Scope anders, da lautet der
+          Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
+          normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
+          <function>&lt;%var%&gt;</function> zeigt auf
+          <varname>$::form-&gt;{var}</varname>. Innerhalb von Schleifen wird
+          <varname>$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</varname>
+          bevorzugt, wenn vorhanden.</para>
+        </sect3>
+
+        <sect3>
+          <title>%::myconfig</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Das einzige Hash unter den globalen Variablen</para>
+            </listitem>
+
+            <listitem>
+              <para>Wird spätestens benötigt wenn auf die Datenbank
+              zugegriffen wird</para>
+            </listitem>
+
+            <listitem>
+              <para>Wird bei jedem Request neu erstellt.</para>
+            </listitem>
+
+            <listitem>
+              <para>Enthält die Userdaten des aktuellen Logins</para>
+            </listitem>
+
+            <listitem>
+              <para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
+              extern serialisiert werden, weil da auch der Datenbankzugriff
+              für diesenuser drinsteht.</para>
+            </listitem>
+
+            <listitem>
+              <para>Enthält unter anderem Listenbegrenzung vclimit,
+              Datumsformat dateformat und Nummernformat numberformat</para>
+            </listitem>
+
+            <listitem>
+              <para>Enthält Datenbankzugriffinformationen</para>
+            </listitem>
+          </itemizedlist>
+
+          <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
+          ein Userobjekt. Die meisten Funktionen, die etwas anhand des
+          aktuellen Users entscheiden müssen, befragen
+          <varname>%::myconfig</varname>.</para>
+        </sect3>
+
+        <sect3>
+          <title>$::locale</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Objekt der Klasse "Locale"</para>
+            </listitem>
+
+            <listitem>
+              <para>Wird pro Request erstellt</para>
+            </listitem>
+
+            <listitem>
+              <para>Muss auch für Tests und Scripte immer verfügbar
+              sein.</para>
+            </listitem>
+
+            <listitem>
+              <para>Cached intern über Requestgrenzen hinweg benutzte
+              Locales</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
+          Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
+        </sect3>
+
+        <sect3>
+          <title>$::lxdebug</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Objekt der Klasse "LXDebug"</para>
+            </listitem>
+
+            <listitem>
+              <para>Wird global gecached</para>
+            </listitem>
+
+            <listitem>
+              <para>Muss immer verfügbar sein, in nahezu allen
+              Funktionen</para>
+            </listitem>
+          </itemizedlist>
+
+          <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
+          bereit, wie "<function>enter_sub</function>" und
+          "<function>leave_sub</function>", mit denen in den alten Modulen ein
+          brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
+          der man die Wallclockzeit seit Requeststart loggen kann, sowie
+          "<function>message</function>" und "<function>dump</function>" mit
+          denen man flott Informationen ins Log packen kann.</para>
+        </sect3>
+
+        <sect3>
+          <title>$::auth</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Objekt der Klasse "SL::Auth"</para>
+            </listitem>
+
+            <listitem>
+              <para>Wird global gecached</para>
+            </listitem>
+
+            <listitem>
+              <para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
+            </listitem>
+
+            <listitem>
+              <para>Wird nach jedem Request resettet.</para>
+            </listitem>
+          </itemizedlist>
+
+          <para><varname>$::auth</varname> stellt Funktionen bereit um die
+          Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
+          vom aktuellen User abhängen wird das Objekt aus
+          Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
+          Request kurz resettet.</para>
+        </sect3>
+
+        <sect3>
+          <title>$::lx_office_conf</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Objekt der Klasse
+              "<classname>SL::LxOfficeConf</classname>"</para>
+            </listitem>
+
+            <listitem>
+              <para>Global gecached</para>
+            </listitem>
+
+            <listitem>
+              <para>Repräsentation der
+              <filename>config/lx_office.conf[.default]</filename>-Dateien</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>Globale Konfiguration. Configdateien werden zum Start gelesen,
+          und nicht mehr angefasst. Es ist derzeit nicht geplant, dass das
+          Programm die Konfiguration ändern kann oder sollte.</para>
+
+          <para>Für die folgende Konfigurationsdatei:</para>
+
+          <programlisting>[debug]
+file = /tmp/lxoffice_debug_log.txt</programlisting>
+
+          <para>ist der Key <varname>file</varname> im Programm als
+          <varname>$::lx_office_conf-&gt;{debug}{file}</varname>
+          erreichbar.</para>
+
+          <warning>
+            <para>Zugriff auf die Konfiguration erfolgt im Moment über
+            Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
+          </warning>
+        </sect3>
+
+        <sect3>
+          <title>$::instance_conf</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Objekt der Klasse
+              "<classname>SL::InstanceConfiguration</classname>"</para>
+            </listitem>
+
+            <listitem>
+              <para>wird pro Request neu erstellt</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
+          speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
+          ist hier eine Mandantendatenbank. Prominentestes Datum ist "eur",
+          die Information ob Bilanz oder Einnahmenüberschussrechnung gemacht
+          wird.</para>
+        </sect3>
+
+        <sect3>
+          <title>$::dispatcher</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Objekt der Klasse
+              "<varname>SL::Dispatcher</varname>"</para>
+            </listitem>
+
+            <listitem>
+              <para>wird pro Serverprozess erstellt.</para>
+            </listitem>
+
+            <listitem>
+              <para>enthält Informationen über die technische Verbindung zum
+              Server</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
+          global gespeichert wird. Wird vermutlich irgendwann in einem anderen
+          Objekt untergebracht.</para>
+        </sect3>
+
+        <sect3>
+          <title>$::request</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>Hashref (evtl später Objekt)</para>
+            </listitem>
+
+            <listitem>
+              <para>Wird pro Request neu initialisiert.</para>
+            </listitem>
+
+            <listitem>
+              <para>Keine Unterstruktur garantiert.</para>
+            </listitem>
+          </itemizedlist>
+
+          <para><varname>$::request</varname> ist ein generischer Platz um
+          Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
+          at a distance benutzt werden, sondern um lokales memoizing zu
+          ermöglichen, das garantiert am Ende des Requests zerstört
+          wird.</para>
+
+          <para>Vieles von dem, was im moment in <varname>$::form</varname>
+          liegt, sollte eigentlich hier liegen. Die groben
+          Differentialkriterien sind:</para>
+
+          <itemizedlist>
+            <listitem>
+              <para>Kommt es vom User, und soll unverändert wieder an den User? Dann <varname>$::form</varname>, steht da eh schon</para>
+            </listitem>
+
+            <listitem>
+              <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des Requests gebraucht werden? Dann
+              <varname>$::request</varname></para>
+            </listitem>
+
+            <listitem>
+              <para>Muss ich von anderen Teilen des Programms lesend drauf zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
+              Wrappermethode</para>
+            </listitem>
+          </itemizedlist>
+        </sect3>
+      </sect2>
+
+      <sect2>
+        <title>Ehemalige globale Variablen</title>
+
+        <para>Die folgenden Variablen waren einmal im Programm, und wurden
+        entfernt.</para>
+
+        <sect3>
+          <title>$::cgi</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>war nötig, weil cookie Methoden nicht als
+              Klassenfunktionen funktionieren</para>
+            </listitem>
+
+            <listitem>
+              <para>Aufruf als Klasse erzeugt Dummyobjekt was im
+              Klassennamespace gehalten wird und über Requestgrenzen
+              leaked</para>
+            </listitem>
+
+            <listitem>
+              <para>liegt jetzt unter
+              <varname>$::request-&gt;{cgi}</varname></para>
+            </listitem>
+          </itemizedlist>
+        </sect3>
+
+        <sect3>
+          <title>$::all_units</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>war nötig, weil einige Funktionen in Schleifen zum Teil
+              ein paar hundert mal pro Request eine Liste der Einheiten
+              brauchen, und de als Parameter durch einen Riesenstack von
+              Funktionen geschleift werden müssten.</para>
+            </listitem>
+
+            <listitem>
+              <para>Liegt jetzt unter
+              <varname>$::request-&gt;{cache}{all_units}</varname></para>
+            </listitem>
+
+            <listitem>
+              <para>Wird nur in
+              <function>AM-&gt;retrieve_all_units()</function> gesetzt oder
+              gelesen.</para>
+            </listitem>
+          </itemizedlist>
+        </sect3>
+
+        <sect3>
+          <title>%::called_subs</title>
+
+          <itemizedlist>
+            <listitem>
+              <para>wurde benutzt um callsub deep recursions
+              abzufangen.</para>
+            </listitem>
+
+            <listitem>
+              <para>Wurde entfernt, weil callsub nur einen Bruchteil der
+              möglichen Rekursioenen darstellt, und da nie welche
+              auftreten.</para>
+            </listitem>
+
+            <listitem>
+              <para>komplette recursion protection wurde entfernt.</para>
+            </listitem>
+          </itemizedlist>
+        </sect3>
+      </sect2>
+    </sect1>
+
+    <sect1 id="devel.fcgi">
+      <title>Entwicklung unter FastCGI</title>
+
+      <sect2 id="devel.fcgi.general">
+        <title>Allgemeines</title>
+
+        <para>Wenn Änderungen in der Konfiguration von Lx-Office gemacht
+        werden, muss der Webserver neu gestartet werden.</para>
+
+        <para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
+        achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
+        müssen folgende Aspekte beachtet werden.</para>
+      </sect2>
+
+      <sect2 id="devel.fcgi.exiting">
+        <title>Programmende und Ausnahmen</title>
+
+        <para>Betrifft die Funktionen <function>warn</function>,
+        <function>die</function>, <function>exit</function>,
+        <function>carp</function> und <function>confess</function>.</para>
+
+        <para>Fehler, die dass Programm normalerweise sofort beenden (fatale
+        Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
+        am Laufen zu halten. Man kann mit <function>die</function>,
+        <function>confess</function> oder <function>carp</function> Fehler
+        ausgeben, die dann vom Dispatcher angezeigt werden. Die Lx-Office
+        eigene <function>$::form-</function>error()&gt; tut im Prinzip das
+        Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
+        <function>exit</function> hingegen werden nicht abgefangen.
+        <function>warn</function> wird direkt nach STDERR, also in Server Log
+        eine Nachricht schreiben (sofern in der Konfiguration nicht die
+        Warnungen in das Lx-Office Log umgeleitet wurden), und
+        <function>exit</function> wird die Ausführung beenden.</para>
+
+        <para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
+        beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
+        Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
+        benutzen, alle anderen Exceptionmechanismen sind ok.</para>
+      </sect2>
+
+      <sect2 id="devel.fcgi.globals">
+        <title>Globale Variablen</title>
+
+        <para>Um zu vermeiden, dass Informationen von einem Request in einen
+        anderen gelangen, müssen alle globalen Variablen vor einem Request
+        sauber initialisiert werden. Das ist besonders wichtig im
+        <varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
+        diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
+        werden.</para>
+
+        <para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
+        abgetrennten Block, der alle kanonischen globalen Variablen listet und
+        erklärt. Bitte keine anderen einführen ohne das sauber zu
+        dokumentieren.</para>
+
+        <para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
+        man sicher geht, dass man die richtige erwischt.</para>
+      </sect2>
+
+      <sect2 id="devel.fcgi.performance">
+        <title>Performance und Statistiken</title>
+
+        <para>Die kritischen Pfade des Programms sind die Belegmasken, und
+        unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
+        Rechnungsmaske in Lx-Office 2.4.3 stable dauert auf einem Core2duo mit
+        4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
+        sind es je nach Menge der definierten Variablen 1-2s. Ab der
+        Moose/Rose::DB Version sind es 5-6s.</para>
+
+        <para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
+        den kritischen Pfaden, unter 0,15 sonst.</para>
+      </sect2>
+
+      <sect2 id="devel.fcgi.known-issues">
+        <title>Bekannte Probleme</title>
+
+        <sect3 id="devel.fcgi.known-issues.encoding">
+          <title>Encoding Awareness</title>
+
+          <para>UTF-8 kodierte Installationen sind sehr anfällig gegen
+          fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
+          falsch kodierte Zeichen eher unwissend, und geben sie einfach
+          weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
+          das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
+          beseitigen.</para>
+        </sect3>
+      </sect2>
+    </sect1>
+
+    <sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
+     <title>SQL-Upgradedateien</title>
+
+     <sect2 id="db-upgrade-files.introduction" xreflabel="Einführung in die Datenbank-Upgradedateien">
+      <title>Einführung</title>
+
+      <para>
+       Der alte Mechanismus für SQL-Upgradescripte, der auf einer Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
+       diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele Entwicklung im stable- und unstable-Baum betrifft.
+      </para>
+
+      <para>
+       Dieser Mechanismus wurde für Lx-Office 2.4.1 deutlich erweitert. Es werden weiterhin alle Scripte aus sql/Pg-upgrade
+       ausgeführt. Zusätzlich gibt es aber ein zweites Verzeichnis, sql/Pg-upgrade2. In diesem Verzeichnis muss pro Datenbankupgrade eine
+       Datei existieren, die neben den eigentlich auszuführenden SQL- oder Perl-Befehlen einige Kontrollinformationen enthält.
+      </para>
+
+      <para>
+       Neu sind die Kontrollinformationen, die Abhängigkeiten und Prioritäten definieren können werden, sodass Datenbankscripte zwar in
+       einer sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER TABLE" erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE"
+       angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man keine Versionsnummern mehr braucht.
+      </para>
+
+      <para>
+       Lx-Office merkt sich dabei, welches der Upgradescripte in sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht erneut
+       aus. Dazu dient die Tabelle "schema_info", die bei der Anmeldung automatisch angelegt wird.
+      </para>
+     </sect2>
+
+     <sect2 id="db-upgrade-files.format" xreflabel="Format der Upgradedateien">
+      <title>Format der Kontrollinformationen</title>
+
+      <para>
+       Die Kontrollinformationen sollten sich am Anfang der jeweiligen Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
+       hat dabei das folgende Format:
+      </para>
+
+      <para>
+       Für SQL-Upgradedateien:
+      </para>
+
+      <programlisting>-- @key: value</programlisting>
+
+      <para>
+       Für Perl-Upgradedateien:
+      </para>
+
+      <programlisting># @key: value</programlisting>
+
+      <para>
+       Leerzeichen vor "<varname>value</varname>" werden entfernt.
+      </para>
+
+      <para>
+       Die folgenden Schlüsselworte werden verarbeitet:
+      </para>
+
+      <variablelist>
+       <varlistentry>
+        <term><varname>tag</varname></term>
+        <listitem>
+         <para>
+          Wird zwingend benötigt. Dies ist der "Name" des Upgrades. Dieser "tag" kann von anderen Kontrolldateien in ihren Abhängigkeiten
+          verwendet werden (Schlüsselwort "<varname>depends</varname>"). Der "tag" ist auch der Name, der in der Datenbank eingetragen wird.
+         </para>
+
+         <para>
+          Normalerweise sollte die Kontrolldatei genau so heißen wie der "tag", nur mit der Endung ".sql" bzw. "pl".
+         </para>
+
+         <para>
+          Ein Tag darf nur aus alphanumerischen Zeichen sowie den Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht erlaubt und
+          sollten stattdessen mit Unterstrichen ersetzt werden.
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term><varname>charset</varname></term>
+        <listitem>
+         <para>
+          Empfohlen. Gibt den Zeichensatz an, in dem das Script geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
+          Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei Abwesenheit des Tags der Zeichensatz "<literal>ISO-8859-15</literal>"
+          angenommen.
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term><varname>description</varname></term>
+        <listitem>
+         <para>
+          Benötigt. Eine Beschreibung, was in diesem Update passiert. Diese wird dem Benutzer beim eigentlichen Datenbankupdate
+          angezeigt. Während der Tag in englisch gehalten sein sollte, sollte die Beschreibung auf Deutsch erfolgen.
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term><varname>depends</varname></term>
+        <listitem>
+         <para>
+          Optional. Eine mit Leerzeichen getrennte Liste von "tags", von denen dieses Upgradescript abhängt. Lx-Office stellt sicher, dass
+          die in dieser Liste aufgeführten Scripte bereits durchgeführt wurden, bevor dieses Script ausgeführt wird.
+         </para>
+
+         <para>
+          Abhängigkeiten werden rekursiv betrachtet. Wenn also ein Script "b" existiert, das von Änderungen in "a" abhängt, und eine neue
+          Kontrolldatei für "c" erstellt wird, die von Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den Tag "b" als
+          Abhängigkeit zu definieren.
+         </para>
+
+         <para>
+          Es ist nicht erlaubt, sich selbst referenzierende Abhängigkeiten zu definieren (z.B. &quot;a&quot; -&gt; &quot;b&quot;,
+          &quot;b&quot; -&gt; &quot;c&quot; und &quot;c&quot; -&gt; &quot;a&quot;).
+         </para>
+        </listitem>
+       </varlistentry>
+
+       <varlistentry>
+        <term><varname>priority</varname></term>
+        <listitem>
+         <para>
+          Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in der Scripte ausgeführt werden, die die gleichen Abhängigkeitstiefen
+          besitzen. Fehlt dieser Parameter, so wird der Wert 1000 benutzt.
+         </para>
+
+         <para>
+          Dies ist reine Kosmetik. Für echte Reihenfolgen muss "depends" benutzt werden. Lx-Office sortiert die auszuführenden Scripte
+          zuerst nach der Abhängigkeitstiefe (wenn "z" von "y" abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von 2, "y" von 1
+          und "x" von 0. "x" würde hier zuerst ausgeführt, dann "y", dann "z"), dann nach der Priorität und bei gleicher Priorität
+          alphabetisch nach dem "tag".
+         </para>
+        </listitem>
+       </varlistentry>
+      </variablelist>
+     </sect2>
+
+     <sect2 id="db-upgrade-files.dbupgrade-tool" xreflabel="Hilfsscript dbupgrade2_tool.pl">
+      <title>Hilfsscript dbupgrade2_tool.pl</title>
+
+      <para>
+       Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern, existiert ein Hilfsscript namens
+       "<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem Lx-Office-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses
+       Tool liest alle Datenbankupgradescripte aus dem Verzeichnis <filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die gleichen
+       Methoden wie Lx-Office selber, sodass alle Fehlersituationen von der Kommandozeile überprüft werden können.
+      </para>
+
+      <para>
+       Wird dem Script kein weiterer Parameter übergeben, so wird nur eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
+       sich aber auch Informationen auf verschiedene Art ausgeben lassen:
+      </para>
+
+      <itemizedlist>
+       <listitem>
+        <para>Listenform: "<command>./scripts/dbupgrade2_tool.pl --list</command>"</para>
+
+        <para>
+         Gibt eine Liste aller Scripte aus. Die Liste ist in der Reihenfolge sortiert, in der Lx-Office die Scripte ausführen würde. Es
+         werden neben der Listenposition der Tag, die Abhängigkeitstiefe und die Priorität ausgegeben.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>Baumform: "<command>./scripts/dbupgrade2_tool.pl --tree</command>"</para>
+
+        <para>
+         Listet alle Tags in Baumform basierend auf den Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von denen keine
+         anderen abhängen. Die Unterknoten sind Scripte, die beim übergeordneten Script als Abhängigkeit eingetragen sind.
+        </para>
+       </listitem>
+
+       <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
+        <para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl --rtree</command>"</para>
+
+        <para>
+         Listet alle Tags in Baumform basierend auf den Abhängigkeiten auf.  Die "Wurzelknoten" sind dabei die Scripte mit der geringsten
+         Abhängigkeitstiefe. Die Unterknoten sind Scripte, die das übergeordnete Script als Abhängigkeit eingetragen haben.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>Baumform mit Postscriptausgabe: "<command>./scripts/dbupgrade2_tool.pl --graphviz</command>"</para>
+
+        <para>
+         Benötigt das Tool "<command>graphviz</command>", um mit seiner Hilfe die <link
+         linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte Baumform</link> in eine Postscriptdatei namens
+         "<filename>db_dependencies.ps</filename>" auszugeben. Dies ist vermutlich die übersichtlichste Form, weil hierbei jeder Knoten nur
+         einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben werden.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Scripte, von denen kein anderes Script abhängt: "<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"
+        </para>
+
+        <para>
+         Listet die Tags aller Scripte auf, von denen keine anderen Scripte abhängen.
+        </para>
+       </listitem>
+      </itemizedlist>
+     </sect2>
+    </sect1>
+
+    <sect1 id="translations-languages" xreflabel="Translations and languages">
+      <title>Translations and languages</title>
+
+      <sect2 id="translations-languages.introduction"
+             xreflabel="Introduction to translations and languages">
+        <title>Introduction</title>
+
+        <note>
+          <para>Dieser Abschnitt ist in Englisch geschrieben, um
+          internationalen Übersetzern die Arbeit zu erleichtern.</para>
+        </note>
+
+        <para>This section describes how localization packages in Lx-Office
+        are built. Currently the only language fully supported is German, and
+        since most of the internal messages are held in English the English
+        version is usable too.</para>
+
+        <para>A stub version of French is included but not functunal at this
+        point.</para>
+      </sect2>
+
+      <sect2 id="translations-languages.file-structure"
+             xreflabel="File structure">
+        <title>File structure</title>
+
+        <para>The structure of locales in Lx-Office is:</para>
+
+        <programlisting>lx-office/locale/&lt;langcode&gt;/</programlisting>
+
+        <para>where &lt;langcode&gt; stands for an abbreviation of the
+        language package. The builtin packages use two letter <ulink
+        url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
+        but the actual name is not relevant for the program and can easily be
+        extended to <ulink
+        url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
+        tags</ulink> (i.e. "en_GB"). In fact the original language packages
+        from SQL Ledger are named in this way.</para>
+
+        <para>In such a language directory the following files are
+        recognized:</para>
+
+        <variablelist>
+          <varlistentry>
+            <term>LANGUAGE</term>
+
+            <listitem>
+              <para>This file is mandatory.</para>
+
+              <para>The <filename>LANGUAGE</filename> file contains the self
+              descripted name of the language. It should contain a native
+              representation first, and in parenthesis an english translation
+              after that. Example:</para>
+
+              <programlisting>Deutsch (German)</programlisting>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>charset</term>
+
+            <listitem>
+              <para>This file should be present.</para>
+
+              <para>The <filename>charset</filename> file describes which
+              charset a language package is written in and applies to all
+              other language files in the package. It is possible to write
+              some language packages without an explicit charset, but it is
+              still strongly recommended. You'll never know in what
+              environment your language package will be used, and neither
+              UTF-8 nor Latin1 are guaranteed.</para>
+
+              <para>The whole content of this file is a string that can be
+              recognized as a valid charset encoding. Example:</para>
+
+              <programlisting>UTF-8</programlisting>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>all</term>
+
+            <listitem>
+              <para>This file is mandatory.</para>
+
+              <para>The central translation file. It is essentially an inline
+              Perl script autogenerated by <command>locales.pl</command>. To
+              generate it, generate the directory and the two files mentioned
+              above, and execute the following command:</para>
+
+              <programlisting>scripts/locales.pl &lt;langcode&gt;</programlisting>
+
+              <para>Otherwise you can simply copy one of the other languages.
+              You will be told how many are missing like this:</para>
+
+              <programlisting>$ scripts/locales.pl en
+English - 0.6% - 2015/2028 missing</programlisting>
+
+              <para>A file named "<filename>missing</filename>" will be
+              generated and can be edited. You can also edit the
+              "<filename>all</filename>" file directly. Edit everything you
+              like to fit the target language and execute
+              <command>locales.pl</command> again. See how the missing words
+              get fewer.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>Num2text</term>
+
+            <listitem>
+              <para>Legacy code from SQL Ledger. It provides a means for
+              numbers to be converted into natural language, like
+              <literal>1523 =&gt; one thousand five hundred twenty
+              three</literal>. If you want to provide it, it must be inlinable
+              Perl code which provides a <function>num2text</function> sub. If
+              an <function>init</function> sub exists it will be executed
+              first.</para>
+
+              <para>Only used in the check and receipt printing module.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>special_chars</term>
+
+            <listitem>
+              <para>Lx-Office comes with a lot of interfaces to different
+              formats, some of which are rather picky with their accepted
+              charset. The <filename>special_chars</filename> file contains a
+              listing of chars not suited for different file format and
+              provides substitutions. It is written in "Simple Ini" style,
+              containing a block for every file format.</para>
+
+              <para>First entry should be the order of substitution for
+              entries as a whitespace separated list. All entries are
+              interpolated, so <literal>\n</literal>, <literal>\x20</literal>
+              and <literal>\\</literal> all work.</para>
+
+              <para>After that every entry is a special char that should be
+              translated when writing text into such a file.</para>
+
+              <para>Example:</para>
+
+              <programlisting>[Template/XML]
+order=&amp; &lt; &gt; \n
+&amp;=&amp;amp;
+&lt;=&amp;lt;
+&gt;=&amp;gt;
+\n=&lt;br&gt;</programlisting>
+
+              <para>Note the importance of the order in this example.
+              Substituting &lt; and &gt; befor &amp; would lead to $gt; become
+              &amp;amp;gt;</para>
+
+              <para>For a list of valid formats, see the German
+              <filename>special_chars</filename> entry. As of this writing the
+              following are recognized:</para>
+
+              <programlisting>HTML
+URL@HTML
+Template/HTML
+Template/XML
+Template/LaTeX
+Template/OpenDocument
+filenames</programlisting>
+
+              <para>The last of which is very machine dependant. Remember that
+              a lot of characters are forbidden by some filesystems, for
+              exmaple MS Windows doesn't like ':' in its files where Linux
+              doesn't mind that. If you want the files created with your
+              language pack to be portable, find all chars that could cause
+              trouble.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>missing</term>
+
+            <listitem>
+              <para>This file is not a part of the language package
+              itself.</para>
+
+              <para>This is a file generated by
+              <command>scripts/locales.pl</command> while processing your
+              locales. It's only to have the missing entries singled out and
+              does not belong to a language package.</para>
+            </listitem>
+          </varlistentry>
+
+          <varlistentry>
+            <term>lost</term>
+
+            <listitem>
+              <para>This file is not a part of the language package
+              itself.</para>
+
+              <para>Another file generated by
+              <command>scripts/locales.pl</command>. If for any reason a
+              translation does not appear anymore and can be deleted, it gets
+              moved here. The last 50 or so entries deleted are saved here in
+              case you made a typo, so that you don't have to translate
+              everything again. If a tranlsation is missing, the lost file is
+              checked first. If you maintain a language package, you might
+              want to keep this safe somewhere.</para>
+            </listitem>
+          </varlistentry>
+        </variablelist>
+      </sect2>
+    </sect1>
+
+     <sect1 id="devel.style-guide">
+      <title>Stil-Richtlinien</title>
+
+      <para>
+       Die folgenden Regeln haben das Ziel, den Code möglichst gut les- und wartbar zu machen. Dazu gehört zum Einen, dass der Code
+       einheitlich eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden wird (Stichworte "Klammern" oder "Hash-Keys").
+      </para>
+
+      <para>
+       Diese Regeln sind keine Schikane sondern erleichtern allen das Leben!
+      </para>
+
+      <para>
+       Jeder, der einen Patch schickt, sollte seinen Code vorher überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
+       nicht.
+      </para>
+
+      <orderedlist>
+       <listitem>
+        <para>
+         Es werden keine echten Tabs sondern Leerzeichen verwendet.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Die Einrückung beträgt zwei Leerzeichen. Beispiel:
+        </para>
+
+        <programlisting>foreach my $row (@data) {
+  if ($flag) {
+    # do something with $row
+  }
+
+  if ($use_modules) {
+    $row-&gt;{modules} = MODULE-&gt;retrieve(
+      id   =&gt; $row-&gt;{id},
+      date =&gt; $use_now ? localtime() : $row-&gt;{time},
+    );
+  }
+
+  $report-&gt;add($row);
+}</programlisting>
+       </listitem>
+
+       <listitem>
+        <para>Öffnende geschweifte Klammern befinden sich auf der gleichen Zeile wie der letzte Befehl. Beispiele:</para>
+
+        <programlisting>sub debug {
+  ...
+}</programlisting>
+
+        <para>oder</para>
+
+        <programlisting>if ($form-&gt;{item_rows} &gt; 0) {
+  ...
+}</programlisting>
+       </listitem>
+
+       <listitem>
+        <para>
+         Schließende geschweifte Klammern sind so weit eingerückt wie der Befehl / die öffnende schließende Klammer, die den Block gestartet
+         hat, und nicht auf der Ebene des Inhalts. Die gleichen Beispiele wie bei 3. gelten.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Die Wörter "<function>else</function>", "<function>elsif</function>", "<function>while</function>" befinden sich auf der gleichen
+         Zeile wie schließende geschweifte Klammern. Beispiele:
+        </para>
+
+        <programlisting>if ($form-&gt;{sum} &gt; 1000) {
+  ...
+} elsif ($form-&gt;{sum} &gt; 0) {
+  ...
+} else {
+  ...
+}
+
+do {
+  ...
+} until ($a &gt; 0);</programlisting>
+       </listitem>
+
+       <listitem>
+        <para>
+         Parameter von Funktionsaufrufen müssen mit runden Klammern versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
+         und grep-ähnliche Operatoren. Beispiel:
+        </para>
+
+        <programlisting>$main::lxdebug-&gt;message(&quot;Could not find file.&quot;);
+%options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</programlisting>
+       </listitem>
+
+       <listitem>
+        <para>
+         Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:
+        </para>
+
+        <para>
+         Generell gilt: Hashkeys und Arrayindices sollten nicht durch Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
+         Blöcke schon. Beispiel:
+        </para>
+
+        <programlisting>if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
+  ...
+}
+
+$array[$i + 1]             = 4;
+$form-&gt;{sum}              += $form-&gt;{&quot;row_$i&quot;};
+$form-&gt;{ $form-&gt;{index} } += 1;
+
+map { $form-&gt;{sum} += $form-&gt;{&quot;row_$_&quot;} } 1..$rowcount;</programlisting>
+       </listitem>
+
+       <listitem>
+        <para>
+         Mehrzeilige Befehle
+        </para>
+
+        <orderedlist>
+         <listitem>
+          <para>
+           Werden die Parameter eines Funktionsaufrufes auf mehrere Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
+           werden, in der die ersten Funktionsparameter in der ersten Zeile stehen. Beispiel:
+          </para>
+
+          <programlisting>$sth = $dbh-&gt;prepare(&quot;SELECT * FROM some_table WHERE col = ?&quot;,
+                    $form-&gt;{some_col_value});</programlisting>
+         </listitem>
+
+         <listitem>
+          <para>
+           Ein Spezialfall ist der ternäre Oprator "?:", der am besten in einer übersichtlichen Tabellenstruktur organisiert
+           wird. Beispiel:
+          </para>
+
+          <programlisting>my $rowcount = $form-&gt;{&quot;row_$i&quot;} ? $i
+             : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
+             :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</programlisting>
+         </listitem>
+        </orderedlist>
+       </listitem>
+
+       <listitem>
+        <para>
+         Kommentare
+        </para>
+
+        <orderedlist>
+         <listitem>
+          <para>Kommentare, die alleine in einer Zeile stehen, sollten soweit wie der Code eingerückt sein.</para>
+         </listitem>
+
+         <listitem>
+          <para>Seitliche hängende Kommentare sollten einheitlich formatiert werden.</para>
+         </listitem>
+
+         <listitem>
+          <para>
+           Sämtliche Kommentare und Sonstiges im Quellcode ist bitte auf Englisch zu verfassen. So wie ich keine Lust habe, französischen
+           Quelltext zu lesen, sollte auch der Lx-Office Quelltext für nicht-Deutschsprachige lesbar sein. Beispiel:
+          </para>
+
+          <programlisting>my $found = 0;
+while (1) {
+  last if $found;
+
+  # complicated check
+  $found = 1 if //
+}
+
+$i  = 0        # initialize $i
+$n  = $i;      # save $i
+$i *= $const;  # do something crazy
+$i  = $n;      # recover $i</programlisting>
+         </listitem>
+        </orderedlist>
+       </listitem>
+
+       <listitem>
+        <para>
+         Hashkeys sollten nur in Anführungszeichen stehen, wenn die Interpolation gewünscht ist. Beispiel:
+        </para>
+
+        <programlisting>$form-&gt;{sum}      = 0;
+$form-&gt;{&quot;row_$i&quot;} = $form-&gt;{&quot;row_$i&quot;} - 5;
+$some_hash{42}    = 54;</programlisting>
+       </listitem>
+
+       <listitem>
+        <para>
+         Die maximale Zeilenlänge ist nicht bescränkt. Zeilenlängen unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
+         wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in grossen Tabellen), dann ist Lesbarkeit vorzuziehen.
+        </para>
+
+        <para>
+         Als Beispiel sei die Funktion <function>print_options</function> aus <filename>bin/mozilla/io.pl</filename> angeführt.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die
+         diffs verfälschen.
+        </para>
+
+        <para>
+         Emacs und vim haben beide recht einfache Methoden zur Entfernung von trailing whitespace. Emacs kennt das Kommande
+         <command>nuke-trailing-whitespace</command>, vim macht das gleiche manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
+         BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern gebunden.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Es wird kein <command>perltidy</command> verwendet.
+        </para>
+
+        <para>
+         In der Vergangenheit wurde versucht, <command>perltidy</command> zu verwenden, um einen einheitlichen Stil zu erlangen. Es hat
+         sich aber gezeigt, dass <command>perltidy</command>s sehr eigenwilliges Verhalten, was Zeilenumbrüche angeht, oftmals gut
+         formatierten Code zerstört. Für den Interessierten sind hier die <command>perltidy</command>-Optionen, die grob den
+         beschriebenen Richtlinien entsprechen:
+        </para>
+
+        <programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
+-aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
+-lp -vt=1 -vtc=1</programlisting>
+       </listitem>
+
+       <listitem>
+        <para>
+         <varname>STDERR</varname> ist tabu. Unkonditionale Debugmeldungen auch.
+        </para>
+
+        <para>
+         Lx-Office bietet mit dem Modul <classname>LXDebug</classname> einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
+         Grund, nach <varname>STDERR</varname> zu schreiben.
+        </para>
+
+        <para>
+         Die <classname>LXDebug</classname>-Methode "<function>message</function>" nimmt als ersten Paramter außerdem eine Flagmaske, für
+         die die Meldung angezeigt wird, wobei "0" immer angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden und werden in
+         den meisten Fällen auch vom Repository zurückgewiesen.
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Alle neuen Module müssen use strict verwenden.
+        </para>
+
+        <para>
+         <varname>$form</varname>, <varname>$auth</varname>, <varname>$locale</varname>, <varname>$lxdebug</varname> und
+         <varname>%myconfig</varname> werden derzeit aus dem main package importiert (siehe <xref linkend="devel.globals"/>. Alle anderen
+         Konstrukte sollten lexikalisch lokal gehalten werden.
+        </para>
+       </listitem>
+      </orderedlist>
+    </sect1>
+
+    <sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
+     <title>Dokumentation erstellen</title>
+
+     <sect2 id="devel.build-doc.introduction">
+      <title>Einführung</title>
+
+      <para>
+       Diese Dokumentation ist in <productname>DocBook</productname> XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein
+       Text-Editor. Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen Editor nutzt, der spezielle Unterstützung für
+       <productname>DocBook</productname> mitbringt. Wir empfehlen dafür den <ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
+       Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos ist.
+      </para>
+     </sect2>
+
+     <sect2 id="devel.build-doc.required-software">
+      <title>Benötigte Software</title>
+
+      <para>
+       Bei <productname>DocBook</productname> ist Prinzip, dass ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden dann
+       mit entsprechenden Stylesheets andere Formate wie PDF oder HTML erzeugt. Bei Lx-Office übernimmt diese Aufgabe das Shell-Script
+       <command>scripts/build_doc.sh</command>.
+      </para>
+
+      <para>
+       Das Script benötigt zur Konvertierung verschiedene Softwarekomponenten, die im normalen Lx-Office-Betrieb nicht benötigt werden:
+      </para>
+
+      <itemizedlist>
+       <listitem>
+        <para>
+         <ulink url="http://www.oracle.com/technetwork/java/index.html">Java</ulink> in einer halbwegs aktuellen Version
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Das Java-Build-System <ulink url="http://ant.apache.org/">Apache Ant</ulink>
+        </para>
+       </listitem>
+
+       <listitem>
+        <para>
+         Das Dokumentations-System Dobudish für <productname>DocBook</productname> 4.5, eine Zusammenstellung diverser Stylesheets und
+         Grafiken zur Konvertierung von <productname>DocBook</productname> XML in andere Formate. Das Paket, das benötigt wird, ist zum
+         Zeitpunkt der Dokumentationserstellung <filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
+         url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink> bereitsteht.
+        </para>
+       </listitem>
+      </itemizedlist>
+
+      <para>
+       Apache Ant sowie ein dazu passendes Java Runtime Environment sind auf allen gängigen Plattformen verfügbar. Beispiel für
+       Debian/Ubuntu:
+      </para>
+
+      <programlisting>apt-get install ant openjdk-7-jre</programlisting>
+
+      <para>
+       Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis <filename>doc/build</filename> entpackt werden. Beispiel unter der
+       Annahme, das <productname>Dobudish</productname> in <filename>$HOME/Downloads</filename> heruntergeladen wurde:
+      </para>
+
+      <programlisting>cd doc/build
+unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
+     </sect2>
+
+     <sect2 id="devel.build-doc.build">
+      <title>PDFs und HTML-Seiten erstellen</title>
+
+      <para>
+       Die eigentliche Konvertierung erfolgt nach Installation der benötigten Software mit einem einfachen Aufruf direkt aus dem
+       Lx-Office-Installationsverzeichnis heraus:
+      </para>
+
+      <programlisting>./scripts/build_doc.sh</programlisting>
+     </sect2>
+
+     <sect2 id="devel.build-doc.repository">
+      <title>Einchecken in das Git-Repository</title>
+
+      <para>
+       Sowohl die XML-Datei als auch die erzeugten PDF- und HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass nach
+       Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut und alles zusammen in einem Commit eingecheckt werden sollten.
+      </para>
+
+      <para>
+       Die "<filename>dobudish</filename>"-Verzeichnisse bzw. symbolischen Links gehören hingegen nicht in das Repository.
+      </para>
+     </sect2>
+    </sect1>
+  </chapter>
+</book>
diff --git a/doc/dokumentenvorlagen-und-variablen.html b/doc/dokumentenvorlagen-und-variablen.html
deleted file mode 100644 (file)
index e1dac11..0000000
+++ /dev/null
@@ -1,1660 +0,0 @@
-<html>
- <head>
-  <title>Dokumentenvorlagen und verf&uuml;gbare Variablen</title>
-  <style type="text/css">
-  <!--
-.blue {
-           color: #000000;
-           background-color: #b0ecff;
-           border: 1px solid blue;
-           padding-left: 2px;
-           padding-right: 2px;
-           }
-
-table {
-        color: #000000;
-        background-color: #fae8b8;
-        border: 1px solid #be5303;
-        border-collapse: collapse;
-        }
-
-td {
-     border: 1px solid #be5303;
-     padding: 3px;
-     }
-    -->
-  </style>
-
- </head>
-
-<body>
-
- <h1>Dokumentenvorlagen und verf&uuml;gbare Variablen</h1>
-
- <p>geschrieben von <a href="mailto:m.bunkus@linet-services.de">Moritz
-   Bunkus</a>. Version: $Id$ </p>
-
- <hr>
-
- <h2><a name="inhaltsverzeichnis">Inhaltsverzeichnis</a></h2>
-
- <ol>
-  <li><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-    Inhaltsverzeichnis</a></li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#einfuehrung">Einf&uuml;hrung</a>
-  </li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#zuordnung_dateinamen">
-    Zuordnung von Dateinamen zu den Funktionen</a></li>
-
-  <li><a href="#variablen_ausgeben">Variablen ausgeben</a>
-  </li>
-
-  <li><a href="#verwendung_in_druckbefehlen">Verwendung in Druckbefehlen</a>
-  </li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#tag_style">
-    Anfang und Ende der Tags ver&auml;ndern</a></li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#allgemeine_variablen">
-    Allgemeine Variablen, die in allen Vorlagen vorhanden sind</a><br>
-
-   <ol>
-    <li><a href="dokumentenvorlagen-und-variablen.html#allgemein_stammdaten">
-      Stammdaten von Kunden und Lieferanten</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#allgemein_bearbeiter">
-      Informationen &uuml;ber den Bearbeiter</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#allgemein_verkaeufer">
-      Informationen &uuml;ber den Verk&auml;ufer</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#allgemein_steuern">
-      Variablen f&uuml;r jede Steuer</a></li>
-   </ol>
-  </li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#invoice">
-    Variablen in Rechnungen</a>
-
-   <ol>
-    <li><a href="dokumentenvorlagen-und-variablen.html#invoice_allgemein">
-      Allgemeine Variablen</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#invoice_posten">
-      Variablen f&uuml;r jeden Posten auf der Rechnung</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#invoice_zahlungen">
-      Variablen f&uuml;r die Zahlungseing&auml;nge</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#invoice_benutzerdefinierte_variablen_vc">
-      Benutzerdefinierte Kunden- und Lieferantenvariablen</a></li>
-   </ol>
-  </li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#dunning">
-    Variablen in Mahnungen und Rechnungen &uuml;ber Mahngeb&uuml;hren</a>
-
-   <ol>
-    <li><a href="dokumentenvorlagen-und-variablen.html#dunning_vorlagennamen">
-      Namen der Vorlagen</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#dunning_allgemein">
-      Allgemeine Variablen in Mahnungen</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#dunning_details">
-      Variablen f&uuml;r jede gemahnte Rechnung in einer Mahnung</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#dunning_invoice">
-      Variablen in automatisch erzeugten Rechnungen &uuml;ber Mahngeb&uuml;hren</a></li>
-   </ol>
-  </li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen">
-    Variablen in anderen Vorlagen</a>
-
-   <ol>
-    <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen_quotations">Angebote und Preisanfragen</a></li>
-    <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen_orders">Auftragsbest&auml;tigungen und Lieferantenauftr&auml;ge</a></li>
-    <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen_delivery_orders">Lieferscheine (Verkauf und Einkauf)</a></li>
-    <li><a href="dokumentenvorlagen-und-variablen.html#anderevorlagen_statement">Sammelrechnung</a></li>
-   </ol>
-  </li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#bloecke">
-    Bl&ouml;cke, bedingte Anweisungen und Schleifen</a>
-
-   <ol>
-    <li><a href="dokumentenvorlagen-und-variablen.html#bloecke_if">
-      Der <code>if</code>-Block</a></li>
-
-    <li><a href="dokumentenvorlagen-und-variablen.html#bloecke_foreach">
-      Die <code>foreach</code>-Schleife</a></li>
-   </ol>
-  </li>
-
-  <li><a href="dokumentenvorlagen-und-variablen.html#markup">
-    Markup-Code, der innerhalb von Formularen zur Textformatierung verwendet
-    werden kann</a></li>
-
- </ol>
-
- <hr>
-
- <h2><a name="einfuehrung">Einf&uuml;hrung</a></h2>
-
- <p>Dies ist eine Auflistung der Standard-Dokumentenvorlagen und aller
-  zur Bearbeitung verf&uuml;gbaren Variablen. Eine Variable wird in
-  einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form
-  <code>&lt;%variablenname%&gt;</code> verwendet wird. F&uuml;r LaTeX-
-  und HTML-Vorlagen kann man die Form dieser Tags auch
-  <a href="dokumentenvorlagen-und-variablen.html#tag_style">
-   ver&auml;ndern</a>.
- </p>
-
- <p>Einige Zahlenwerte werden auch in unformatierter Form zur Verf&uuml;gung
-  gestellt (also z.B. 35 statt 35,00 oder 12.3 statt 12,30). Der Dezimaltrenner
-  ist dabei also immer ein Punkt unabhaengig vom eingestellten Zahlenformat.
-  Diese Variabelen kann man mit der Erweiterung _nofmt (f&uuml;r  no-format) aufrufen
-  (also z.B. netprice = 12,30 -- netprice_nofmt = 12.3). Variabeln die zus&auml;tzlich
-  unformatiert zur Verf&uuml;gung stehen sind unten als variable[_nofmt] gelistet.
-  Die Eckigen Klammern weisen also auf eine optionale Verw&auml;ndung der Erweiterung hin.
-  </p>
-
- <p>Fr&uuml;her wurde hier nur &uuml;ber LaTeX gesprochen. Inzwischen
-  unterst&uuml;tzt Lx-Office aber auch OpenDocument-Vorlagen. Sofern
-  es nicht ausdr&uuml;cklich eingeschr&auml;nkt wird, gilt das im
-  Folgenden gesagte f&uuml;r alle Vorlagenarten.</p>
-
- <p>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
-  verf&uuml;gbar als hier aufgelistet werden. Die meisten davon k&ouml;nnen
-  allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
-  werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann diese wie
-  folgt erhalten werden:</p>
-
- <ol>
-
-  <li><code>SL/Form.pm</code> &ouml;ffnen und am Anfang die Zeile
-   <pre>"use Data::Dumper;"</pre> einf&uuml;gen.</li>
-
-  <li>In <code>Form.pm</code> die Funktion <code>parse_template</code>
-   suchen und hier die Zeile <pre>print(STDERR Dumper($self));</pre>
-   einf&uuml;gen.</li>
-
-  <li>Einmal per Browser die gew&uuml;nschte Vorlage "benutzen", z.B. ein PDF
-   f&uuml;r eine Rechnung erzeugen.</li>
-
-  <li>Im <code>error.log</code> vom Apache steht die Ausgabe der Variablen
-   <code>$self</code> in der Form <code>'key' =&gt; 'value',</code>. Alle
-   <code>key</code>s sind verf&uuml;gbar.</li>
-
- </ol>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="variablen_ausgeben">Variablen ausgeben</a></h2>
-
- <p>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
-  Tags geschrieben werden, also
-  z.B. <code>&lt;%variablenname%&gt;</code>.</p>
-
- <p>
-  Optional kann man auch mit Leerzeichen getrennte Flags angeben, die
-  man aber nur selten brauchen wird. Die Syntax sieht also so
-  aus: <code>&lt;%variablenname FLAG1 FLAG2%&gt;</code>. Momentan werden
-  die folgenden Flags unterstützt:
- </p>
-
- <ul>
-  <li>
-   <code>NOFORMAT</code> gilt nur für Zahlenwerte und gibt den Wert
-   ohne Formatierung, also ohne Tausendertrennzeichen mit mit einem
-   Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn damit in der
-   Vorlage z.B. von LaTeX gerechnet werden soll.
-  </li>
-
-  <li>
-   <code>NOESCAPE</code> unterdrückt das Escapen von Sonderzeichen für
-   die Vorlagensprache. Wenn also in einer Variablen bereits gültiger
-   LaTeX-Code steht und dieser von LaTeX auch ausgewertet und nicht
-   wortwörtlich angezeigt werden soll, so ist dieses Flag sinnvoll.
-  </li>
- </ul>
-
- <p>
-  Beispiel: <code class="blue">&lt;%quototal NOFORMAT%&gt;</code>
- </p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="verwendung_in_druckbefehlen">Verwendung in Druckbefehlen</a></h2>
-
- <p>
-  In der Admininstration können Drucker definiert werden. Auch im dort
-  eingebbaren Druckbefehl können die hier aufgelisteten Variablen und
-  Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach den
-  Regeln der gängigen Shells formatiert, sodass Sonderzeichen
-  wie <code>`...`</code> nicht zu unerwünschtem Verhalten führen.
- </p>
-
- <p>
-  Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl, für
-  das die Telefonnummer eines Ansprechpartners als Teil der
-  Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
-  z.B. wie folgt aussehen:
- </p>
-
- <p>
-  <code>send_fax --number &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</code>
- </p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="tag_style">
-   Anfang und Ende der Tags ver&auml;ndern</a></h2>
-
- <p>Der Standardstil f&uuml;r Tags sieht vor, dass ein Tag mit dem
-  Kleinerzeichen und einem Prozentzeichen beginnt und mit dem
-  Prozentzeichen und dem Gr&ouml;&szlig;erzeichen endet,
-  beispielsweise <code>&lt;%customer%&gt;</code>. Da diese Form aber
-  z.B. in LaTeX zu Problemen f&uuml;hren kann, weil das Prozentzeichen
-  dort Kommentare einleitet, kann pro HTML- oder
-  LaTeX-Dokumentenvorlage der Stil umgestellt werden.</p>
-
- <p>Dazu werden in die Datei Zeilen geschrieben, die mit dem f&uuml;r
-  das Format g&uuml;ltigen Kommentarzeichen anfangen,
-  dann <code>config:</code> enthalten, die entsprechende Option setzen
-  und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
-  enden. Beispiel f&uuml;r LaTeX:</p>
-
- <p><code>% config: tag-style=($ $)</code></p>
-
- <p>Dies w&uuml;rde Lx-Office dazu veranlassen, Variablen zu ersetzen,
-  wenn sie wie folgt aussehen: <code>($customer$)</code>. Das
-  &auml;quivalente Beispiel f&uuml;r HTML-Dokumentenvorlagen sieht so
-  aus:</p>
-
- <p><code>&lt;!-- config: tag-style=($ $) --&gt;</code></p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="zuordnung_dateinamen">
-   Zuordnung von den Dateinamen zu den Funktionen</a></h2>
-
- <p>Diese folgende kurze Auflistung zeigt, welche Vorlage bei welcher
-  Funktion ausgelesen wird. Dabei ist die Dateiendung &quot;.ext&quot;
-  geeignet zu ersetzen: &quot;.tex&quot; f&uuml; LaTeX-Vorlagen und
-  &quot;.odt&quot; f&uuml;r OpenDocument-Vorlagen.</p>
-
- <p>
-  <table border="1">
-   <tr>
-    <th>Dateiname</th>
-    <th>Bedeutung</th>
-   </tr>
-   <tr>
-    <td><code>bin_list.ext</code></td>
-    <td>Lagerliste</td>
-   </tr>
-   <tr>
-    <td><code>check.ext</code></td>
-    <td>?</td>
-   </tr>
-   <tr>
-    <td><code>invoice.ext</code></td>
-    <td>Rechnung</td>
-   </tr>
-   <tr>
-    <td><code>packing_list.ext</code></td>
-    <td>Packliste</td>
-   </tr>
-   <tr>
-    <td><code>pick_list.ext</code></td>
-    <td>Sammelliste</td>
-   </tr>
-   <tr>
-    <td><code>purchase_delivery_order.ext</code></td>
-    <td>Lieferschein (Einkauf)</td>
-   </tr>
-   <tr>
-    <td><code>purcharse_order.ext</code></td>
-    <td>Bestellung an Lieferanten</td>
-   </tr>
-   <tr>
-    <td><code>request_quotation.ext</code></td>
-    <td>Anfrage an Lieferanten</td>
-   </tr>
-   <tr>
-    <td><code>sales_delivery_order.ext</code></td>
-    <td>Lieferschein (Verkauf)</td>
-   </tr>
-   <tr>
-    <td><code>sales_order.ext</code></td>
-    <td>Bestellung</td>
-   </tr>
-   <tr>
-    <td><code>sales_quotation.ext</code></td>
-    <td>Angebot an Kunden</td>
-   </tr>
-   <tr>
-    <td><code>zahlungserinnerung.ext</code></td>
-    <td>Mahnung (Dateiname im Programm konfigurierbar)</td>
-   </tr>
-   <tr>
-    <td><code>zahlungserinnerung_invoice.ext</code></td>
-    <td>Rechnung &uuml;ber Mahngeb&uuml;hren (Dateiname im Programm konfigurierbar)</td>
-   </tr>
-  </table>
- </p>
-
- <a name="#dateinamen_erweitert"<h3>Sprache, Drucker und E-Mail</h3>
-
- <p>Angeforderte Sprache und Druckerk&uuml;rzel in den Dateinamen mit eingearbeitet. So wird aus der Vorlage <code>sales_order.ext</code> bei Sprache <code>de</code> und Druckerk&uuml;rzel <code>lpr2</code> der Vorlagenname <code>sales_order_de_lpr2.ext</code>. Zus&auml;tzlich k&ouml;nnen f&uuml;r E-Mails andere Vorlagen erstellt werden, diese bekommen dann noch das K&uuml;rzel <code>_email</code>, der vollst&auml;ndige Vorlagenname w&auml;re dann <code>sales_order_email_de_lpr2.ext</code>. In allen F&auml;llen kann eine Standarddatei <code>default.ext</code> hinterlegt werden. Diese wird verwendet, wenn keine der anderen Varianten gefunden wird.</p>
-
- <p>Die vollst&auml;ndige Suchreihenfolge f&uuml;r einen Verkaufsauftrag mit der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF verschickt wird, ist:</p>
- <p>
-  <table border='1'>
-   <tr><th>Reihenfolge der m&ouml;glichen Vorlagennamen</th></tr>
-   <tr><td><code>sales_order_email_de_lpr2.tex</code></td></tr>
-   <tr><td><code>sales_order_de_lpr2.tex</code></td></tr>
-   <tr><td><code>sales_order.tex</code></td></tr>
-   <tr><td><code>default.tex</code></td></tr>
-  </table>
- </p>
-
- <p>Die kurzen Varianten dieser Vorlagentitel m&uuml;ssen dann entweder Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten, siehe dazu <a href="#allgemein_meta">Metadaten in Vorlagen</a></p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="allgemeine_variablen">
-   Allgemeine Variablen, die in allen Vorlagen vorhanden sind</a></h2>
-
- <h3><a name="allgemein_meta">
-   Metainformationen zur angeforderten Vorlage:</a></h3>
-
- <p>Diese Variablen liefern Informationen dar&uuml;ber welche Variante einer Vorlage der Benutzer angefragt hat. Sie sind n&uuml;tzlich f&uuml;r Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen Formulare einbinden m&ouml;chten.</p>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>template_meta.formname</code></td>
-    <td>Basisname der Vorlage. Identisch mit der <a href="#zuordnung_dateinamen">Zurordnung zu den Dateinamen</a> ohne die Erweiterung. Ein Verkaufsauftrag enth&auml;lt hier <code>sales_order</code>.</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.language.description</code></td>
-    <td>Beschreibung der verwendeten Sprache</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.language.template_code</code></td>
-    <td>Vorlagen&uuml;rzel der verwendeten Sprache, identisch mit dem K&uuml;rzel das im Dateinamen verwendetet wird.</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.language.output_numberformat</code></td>
-    <td>Zahlenformat der verwendeten Sprache in der Form "1.000,00". <em>Experimentell!</em>. Nur interessant f&uuml;r Vorlagen die mit unformatierten Werten arbeiten.</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.language.output_dateformat</code></td>
-    <td>Datumsformat der verwendeten Sprache in der Form "dd.mm.yyyy". <em>Experimentell!</em>. Nur interessant f&uuml;r Vorlagen die mit unformatierten Werten arbeiten.</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.format</code></td>
-    <td>Das angeforderte Format. Kann im Moment die Werte <code>pdf</code>, <code>postscript</code>, <code>html</code>, <code>opendocument</code>, <code>opendocument_pdf</code> und <code>excel</code> enthalten.</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.extension</code></td>
-    <td>Dateierweiterung, wie im Dateinamen. Wird aus <code>format</code> entschieden.</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.media</code></td>
-    <td>Ausgabemedium. Kann zur Zeit die Werte <code>screen</code> f&uuml;r Bildschirm, <code>email</code> f&uuml;r E-Mmail (triggert das <code>_email</code> K&uuml;rzel im Dateinamen), <code>printer</code> f&uuml;r Drucker, und <code>queue</code> f&uuml;r Warteschlange enthalten.</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.printer.description</code></td>
-    <td>Beschreibung des ausgew&auml;hlten Druckers</td>
-   </tr>
-   <tr>
-    <td><code>template_meta.printer.template_code</code></td>
-    <td>Vorlagen&uuml;rzel des ausgew&auml;hlten Druckers, identisch mit dem K&uuml;rzel das im Dateinamen verwendetet wird.</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="allgemein_stammdaten">
-   Stammdaten von Kunden und Lieferanten:</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>account_number</code></td>
-    <td>Kontonummer</td>
-   </tr>
-   <tr>
-    <td><code>bank</code></td>
-    <td>Name der Bank</td>
-   </tr>
-   <tr>
-    <td><code>bank_code</code></td>
-    <td>Bankleitzahl</td>
-   </tr>
-   <tr>
-    <td><code>bic</code></td>
-    <td>Bank-Identifikations-Code (Bank Identifier Code, BIC)</td>
-   </tr>
-   <tr>
-    <td><code>business</code></td>
-    <td>Kunden-/Lieferantentyp</td>
-   </tr>
-   <tr>
-    <td><code>city</code></td>
-    <td>Stadt</td>
-   </tr>
-   <tr>
-    <td><code>contact</code></td>
-    <td>Kontakt</td>
-   </tr>
-   <tr>
-    <td><code>country</code></td>
-    <td>Land</td>
-   </tr>
-   <tr>
-    <td><code>cp_email</code></td>
-    <td>Email des Ansprechpartners</td>
-   </tr>
-   <tr>
-    <td><code>cp_givenname</code></td>
-    <td>Vorname des Ansprechpartners</td>
-   </tr>
-   <tr>
-    <td><code>cp_greeting</code></td>
-    <td>Anrede des Ansprechpartners</td>
-   </tr>
-   <tr>
-    <td><code>cp_name</code></td>
-    <td>Name des Ansprechpartners</td>
-   </tr>
-   <tr>
-    <td><code>cp_phone1</code></td>
-    <td>Telefonnummer 1 des Ansprechpartners</td>
-   </tr>
-   <tr>
-    <td><code>cp_phone2</code></td>
-    <td>Telefonnummer 2 des Ansprechpartners</td>
-   </tr>
-   <tr>
-    <td><code>cp_title</code></td>
-    <td>Titel des Ansprechpartners</td>
-   </tr>
-   <tr>
-    <td><code>creditlimit</code></td>
-    <td>Kreditlimit</td>
-   </tr>
-   <tr>
-    <td><code>customeremail</code></td>
-    <td>Email des Kunden; nur f&uuml;r Kunden</td>
-   </tr>
-   <tr>
-    <td><code>customerfax</code></td>
-    <td>Faxnummer des Kunden; nur f&uuml;r Kunden</td>
-   </tr>
-   <tr>
-    <td><code>customernotes</code></td>
-    <td>Bemerkungen beim Kunden; nur f&uuml;r Kunden</td>
-   </tr>
-   <tr>
-    <td><code>customernumber</code></td>
-    <td>Kundennummer; nur f&uuml;r Kunden</td>
-   </tr>
-   <tr>
-    <td><code>customerphone</code></td>
-    <td>Telefonnummer des Kunden; nur f&uuml;r Kunden</td>
-   </tr>
-   <tr>
-    <td><code>discount</code></td>
-    <td>Rabatt</td>
-   </tr>
-   <tr>
-    <td><code>email</code></td>
-    <td>Emailadresse</td>
-   </tr>
-   <tr>
-    <td><code>fax</code></td>
-    <td>Faxnummer</td>
-   </tr>
-   <tr>
-    <td><code>homepage</code></td>
-    <td>Homepage</td>
-   </tr>
-   <tr>
-    <td><code>iban</code></td>
-    <td>Internationale Kontonummer (International Bank Account Number, IBAN)</td>
-   </tr>
-   <tr>
-    <td><code>language</code></td>
-    <td>Sprache</td>
-   </tr>
-   <tr>
-    <td><code>name</code></td>
-    <td>Firmenname</td>
-   </tr>
-   <tr>
-    <td><code>payment_description</code></td>
-    <td>Name der Zahlart</td>
-   </tr>
-   <tr>
-    <td><code>payment_terms</code></td>
-    <td>Zahlungskonditionen</td>
-   </tr>
-   <tr>
-    <td><code>phone</code></td>
-    <td>Telefonnummer</td>
-   </tr>
-   <tr>
-    <td><code>shiptocity</code></td>
-    <td>Stadt (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptocontact</code></td>
-    <td>Kontakt (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptocountry</code></td>
-    <td>Land (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptodepartment1</code></td>
-    <td>Abteilung 1 (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptodepartment2</code></td>
-    <td>Abteilung 2 (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptoemail</code></td>
-    <td>Email (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptofax</code></td>
-    <td>Fax (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptoname</code></td>
-    <td>Firmenname (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptophone</code></td>
-    <td>Telefonnummer (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptostreet</code></td>
-    <td>Stra&szlig;e und Hausnummer (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>shiptozipcode</code></td>
-    <td>Postleitzahl (Lieferadresse)
-     <a href="dokumentenvorlagen-und-variablen.html#anmerkung_shipto">*</a></td>
-   </tr>
-   <tr>
-    <td><code>street</code></td>
-    <td>Stra&szlig;e und Hausnummer</td>
-   </tr>
-   <tr>
-    <td><code>taxnumber</code></td>
-    <td>Steuernummer</td>
-   </tr>
-   <tr>
-    <td><code>ustid</code></td>
-    <td>Umsatzsteuer-Identifikationsnummer</td>
-   </tr>
-   <tr>
-   <tr>
-    <td><code>vendoremail</code></td>
-    <td>Email des Lieferanten; nur f&uuml;r Lieferanten</td>
-   </tr>
-   <tr>
-    <td><code>vendorfax</code></td>
-    <td>Faxnummer des Lieferanten; nur f&uuml;r Lieferanten</td>
-   </tr>
-   <tr>
-    <td><code>vendornotes</code></td>
-    <td>Bemerkungen beim Lieferanten; nur f&uuml;r Lieferanten</td>
-   </tr>
-   <tr>
-    <td><code>vendornumber</code></td>
-    <td>Lieferantennummer; nur f&uuml;r Lieferanten</td>
-   </tr>
-   <tr>
-    <td><code>vendorphone</code></td>
-    <td>Telefonnummer des Lieferanten; nur f&uuml;r Lieferanten</td>
-   </tr>
-   <tr>
-    <td><code>zipcode</code></td>
-    <td>Postleitzahl</td>
-   </tr>
-  </table>
- </p>
-
- <p><a name="anmerkung_shipto"><em>Anmerkung</em></a>: Sind die
-  <code>shipto*</code>-Felder in den Stammdaten nicht eingetragen, so haben
-  die Variablen <code>shipto*</code> den gleichen Wert wie die die
-  entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich einige
-  <code>shipto*</code>-Variablen so nicht in den Stammdaten wiederfinden
-  sondern schlicht Kopien der Lieferdatenvariablen sind
-  (z.B. <code>shiptocontact</code>).</p>
-
- <h3><a name="allgemein_bearbeiter">
-   Informationen &uuml;ber den Bearbeiter:</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>employee_address</code></td>
-    <td>Adressfeld</td>
-   </tr>
-   <tr>
-    <td><code>employee_businessnumber</code></td>
-    <td>Firmennummer</td>
-   </tr>
-   <tr>
-    <td><code>employee_company</code></td>
-    <td>Firmenname</td>
-   </tr>
-   <tr>
-    <td><code>employee_co_ustid</code></td>
-    <td>Usatzsteuer-Identifikationsnummer</td>
-   </tr>
-   <tr>
-    <td><code>employee_duns</code></td>
-    <td>DUNS-Nummer</td>
-   </tr>
-   <tr>
-    <td><code>employee_email</code></td>
-    <td>Email</td>
-   </tr>
-   <tr>
-    <td><code>employee_fax</code></td>
-    <td>Fax</td>
-   </tr>
-   <tr>
-    <td><code>employee_name</code></td>
-    <td>voller Name</td>
-   </tr>
-   <tr>
-    <td><code>employee_signature</code></td>
-    <td>Signatur</td>
-   </tr>
-   <tr>
-    <td><code>employee_taxnumber</code></td>
-    <td>Steuernummer</td>
-   </tr>
-   <tr>
-    <td><code>employee_tel</code></td>
-    <td>Telefonnummer</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="allgemein_verkaeufer">
-   Informationen &uuml;ber den Verk&auml;ufer (nur bei Verkaufsmasken):</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>salesman_address</code></td>
-    <td>Adressfeld</td>
-   </tr>
-   <tr>
-    <td><code>salesman_businessnumber</code></td>
-    <td>Firmennummer</td>
-   </tr>
-   <tr>
-    <td><code>salesman_company</code></td>
-    <td>Firmenname</td>
-   </tr>
-   <tr>
-    <td><code>salesman_co_ustid</code></td>
-    <td>Usatzsteuer-Identifikationsnummer</td>
-   </tr>
-   <tr>
-    <td><code>salesman_duns</code></td>
-    <td>DUNS-Nummer</td>
-   </tr>
-   <tr>
-    <td><code>salesman_email</code></td>
-    <td>Email</td>
-   </tr>
-   <tr>
-    <td><code>salesman_fax</code></td>
-    <td>Fax</td>
-   </tr>
-   <tr>
-    <td><code>salesman_name</code></td>
-    <td>voller Name</td>
-   </tr>
-   <tr>
-    <td><code>salesman_signature</code></td>
-    <td>Signatur</td>
-   </tr>
-   <tr>
-    <td><code>salesman_taxnumber</code></td>
-    <td>Steuernummer</td>
-   </tr>
-   <tr>
-    <td><code>salesman_tel</code></td>
-    <td>Telefonnummer</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="allgemein_steuern">
-   Variablen f&uuml;r die einzelnen Steuern:</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>tax</code></td>
-    <td>Steuer</td>
-   </tr>
-   <tr>
-    <td><code>taxbase</code></td>
-    <td>zu versteuernder Betrag</td>
-   </tr>
-   <tr>
-    <td><code>taxdescription</code></td>
-    <td>Name der Steuer</td>
-   </tr>
-   <tr>
-    <td><code>taxrate</code></td>
-    <td>Steuersatz</td>
-   </tr>
-  </table>
- </p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="invoice">Variablen in Rechnungen</a></h2>
-
- <h3><a name="invoice_allgemein">Allgemeine Variablen:</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>creditremaining</code></td>
-    <td>Verbleibender Kredit</td>
-   </tr>
-   <tr>
-    <td><code>currency</code></td>
-    <td>W&auml;hrung</td>
-   </tr>
-   <tr>
-    <td><code>cusordnumber</code></td>
-    <td>Bestellnummer beim Kunden</td>
-   </tr>
-   <tr>
-    <td><code>deliverydate</code></td>
-    <td>Lieferdatum</td>
-   </tr>
-   <tr>
-    <td><code>duedate</code></td>
-    <td>F&auml;lligkeitsdatum</td>
-   </tr>
-   <tr>
-    <td><code>globalprojectnumber</code></td>
-    <td>Projektnummer des ganzen Beleges</td>
-   </tr>
-   <tr>
-    <td><code>globalprojectdescription</code></td>
-    <td>Projekbeschreibung des ganzen Beleges</td>
-   </tr>
-   <tr>
-    <td><code>intnotes</code></td>
-    <td>Interne Bemerkungen</td>
-   </tr>
-   <tr>
-    <td><code>invdate</code></td>
-    <td>Rechnungsdatum</td>
-   </tr>
-   <tr>
-    <td><code>invnumber</code></td>
-    <td>Rechnungsnummer</td>
-   </tr>
-   <tr>
-    <td><code>invtotal</code></td>
-    <td>gesamter Rechnungsbetrag</td>
-   </tr>
-   <tr>
-    <td><code>notes</code></td>
-    <td>Bemerkungen der Rechnung</td>
-   </tr>
-   <tr>
-    <td><code>orddate</code></td>
-    <td>Auftragsdatum</td>
-   </tr>
-   <tr>
-    <td><code>ordnumber</code></td>
-    <td>Auftragsnummer, wenn die Rechnung aus einem Auftrag erstellt wurde</td>
-   </tr>
-   <tr>
-    <td><code>payment_description</code></td>
-    <td>Name der Zahlart</td>
-   </tr>
-   <tr>
-    <td><code>payment_terms</code></td>
-    <td>Zahlungskonditionen</td>
-   </tr>
-   <tr>
-    <td><code>quodate</code></td>
-    <td>Angebotsdatum</td>
-   </tr>
-   <tr>
-    <td><code>quonumber</code></td>
-    <td>Angebotsnummer</td>
-   </tr>
-   <tr>
-    <td><code>shippingpoint</code></td>
-    <td>Versandort</td>
-   </tr>
-   <tr>
-    <td><code>shipvia</code></td>
-    <td>Transportmittel</td>
-   </tr>
-   <tr>
-    <td><code>subtotal[_nofmt]</code></td>
-    <td>Zwischensumme aller Posten ohne Steuern</td>
-   </tr>
-   <tr>
-    <td><code>total</code></td>
-    <td>Restsumme der Rechnung (Summe abz&uuml;glich bereits bezahlter Posten)</td>
-   </tr>
-   <tr>
-    <td><code>transaction_description</code></td>
-    <td>Vorgangsbezeichnung</td>
-   </tr>
-   <tr>
-    <td><code>transdate</code></td>
-    <td>Auftragsdatum wenn die Rechnung aus einem Auftrag erstellt wurde</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="invoice_posten">
-   Variablen f&uuml;r jeden Posten auf der Rechnung:</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>bin</code></td>
-    <td>Stellage</td>
-   </tr>
-   <tr>
-    <td><code>description</code></td>
-    <td>Artikelbeschreibung</td>
-   </tr>
-   <tr>
-    <td><code>discount[_nofmt]</code></td>
-    <td>Rabatt als Betrag</td>
-   </tr>
-   <tr>
-    <td><code>discount_sub[_nofmt]</code></td>
-    <td>Zwischensumme mit Rabatt</td>
-   </tr>
-   <tr>
-    <td><code>drawing</code></td>
-    <td>Zeichnung</td>
-   </tr>
-   <tr>
-    <td><code>ean</code></td>
-    <td>EAN-Code</td>
-   </tr>
-   <tr>
-    <td><code>image</code></td>
-    <td>Grafik</td>
-   </tr>
-   <tr>
-    <td><code>linetotal[_nofmt]</code></td>
-    <td>Zeilensumme (Anzahl * Einzelpreis)</td>
-   </tr>
-   <tr>
-    <td><code>longdescription</code></td>
-    <td>Langtext</td>
-   </tr>
-   <tr>
-    <td><code>microfiche</code></td>
-    <td>Mikrofilm</td>
-   </tr>
-   <tr>
-    <td><code>netprice[_nofmt]</code></td>
-    <td>Nettopreis</td>
-   </tr>
-   <tr>
-    <td><code>nodiscount_linetotal[_nofmt]</code></td>
-    <td>Zeilensumme ohne Rabatt</td>
-   </tr>
-   <tr>
-    <td><code>nodiscount_sub[_nofmt]</code></td>
-    <td>Zwischensumme ohne Rabatt</td>
-   </tr>
-   <tr>
-    <td><code>number</code></td>
-    <td>Artikelnummer</td>
-   </tr>
-   <tr>
-    <td><code>ordnumber_oe</code></td>
-    <td>Auftragsnummer des Originalauftrags, wenn die Rechnung aus einem Sammelauftrag erstellt wurde</td>
-   </tr>
-   <tr>
-   <td><code>p_discount</code></td>
-    <td>Rabatt in Prozent</td>
-   </tr>
-   <tr>
-    <td><code>partnotes</code></td>
-    <td>Die beim Artikel gespeicherten Bemerkungen</td>
-   </tr>
-   <tr>
-    <td><code>partsgroup</code></td>
-    <td>Warengruppe</td>
-   </tr>
-   <tr>
-    <td><code>price_factor</code></td>
-    <td>Der Preisfaktor als Zahl, sofern einer eingestellt ist</td>
-   </tr>
-   <tr>
-    <td><code>price_factor_name</code></td>
-    <td>Der Name des Preisfaktors, sofern einer eingestellt ist</td>
-   </tr>
-   <tr>
-    <td><code>projectnumber</code></td>
-    <td>Projektnummer</td>
-   </tr>
-   <tr>
-    <td><code>projectdescription</code></td>
-    <td>Projektbeschreibung</td>
-   </tr>
-   <tr>
-    <td><code>qty[_nofmt]</code></td>
-    <td>Anzahl</td>
-   </tr>
-   <tr>
-    <td><code>reqdate</code></td>
-    <td>Lieferdatum</td>
-   </tr>
-   <tr>
-    <td><code>runningnumber</code></td>
-    <td>Position auf der Rechnung (1, 2, 3...)</td>
-   </tr>
-   <tr>
-    <td><code>sellprice[_nofmt]</code></td>
-    <td>Verkaufspreis</td>
-   </tr>
-   <tr>
-    <td><code>serialnumber</code></td>
-    <td>Seriennummer</td>
-   </tr>
-   <tr>
-    <td><code>tax_rate</code></td>
-    <td>Steuersatz</td>
-   </tr>
-   <tr>
-    <td><code>transdate_oe</code></td>
-    <td>Auftragsdatum des Originalauftrags, wenn die Rechnung aus einem Sammelauftrag erstellt wurde</td>
-   </tr>
-   <tr>
-    <td><code>unit</code></td>
-    <td>Einheit</td>
-   </tr>
-   <tr>
-    <td><code>weight</code></td>
-    <td>Gewicht</td>
-   </tr>
-  </table>
- </p>
-
- <p>F&uuml;r jeden Posten gibt es ein Unterarray mit den Informationen &uuml;ber
-  Lieferanten und Lieferantenartikelnummer. Diese m&uuml;ssen mit
-  einer <code>foreach</code>-Schleife ausgegeben werden, da f&uuml;r jeden
-  Artikel mehrere Lieferanteninformationen hinterlegt sein k&ouml;nnen. Die
-  Variablen daf&uuml;r lauten:</p>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>make</code></td>
-    <td>Lieferant</td>
-   </tr>
-   <tr>
-    <td><code>model</code></td>
-    <td>Lieferantenartikelnummer</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="invoice_zahlungen">
-   Variablen f&uuml;r die einzelnen Zahlungseing&auml;nge:</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>payment</code></td>
-    <td>Betrag</td>
-   </tr>
-   <tr>
-    <td><code>paymentaccount</code></td>
-    <td>Konto</td>
-   </tr>
-   <tr>
-    <td><code>paymentdate</code></td>
-    <td>Datum</td>
-   </tr>
-   <tr>
-    <td><code>paymentmemo</code></td>
-    <td>Memo</td>
-   </tr>
-   <tr>
-    <td><code>paymentsource</code></td>
-    <td>Beleg</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="invoice_benutzerdefinierte_variablen_vc">
-   Benutzerdefinierte Kunden- und Lieferantenvariablen:</a></h3>
-
- <p>
-  Die vom Benutzer definierten Variablen f&uuml;r Kunden und
-  Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
-  ebenfalls zur Verf&uuml;gung. Ihre Namen setzen sich aus dem
-  Pr&auml;fix <code>vc_cvar_</code> und dem vom Benutzer festgelegten
-  Variablennamen zusammen.</p>
-
- <p>Beispiel: Der Benutzer hat eine Variable
-  namens <code>number_of_employees</code> definiert, die die Anzahl
-  der Mitarbeiter des Unternehmens enth&auml;lt. Diese Variable steht
-  dann unter dem Namen <code>vc_cvar_number_of_employees</code> zur
-  Verf&uuml;gung.</p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="dunning">Variablen in Mahnungen und Rechnungen &uuml;ber Mahngeb&uuml;hren</a></h2>
-
- <h3><a name="dunning_vorlagennamen">Namen der Vorlagen</a></h3>
-
- <p>Die Namen der Vorlagen werden im System-Men&uuml; vom Benutzer
-  eingegeben. Wird f&uuml;r ein Mahnlevel die Option zur automatischen
-  Erstellung einer Rechnung &uuml;ber die Mahngeb&uuml;hren und Zinsen
-  aktiviert, so wird der Name der Vorlage f&uuml;r diese Rechnung aus
-  dem Vorlagenname f&uuml;r diese Mahnstufe mit dem
-  Zusatz <code>_invoice</code> gebildet. Weiterhin werden die
-  K&uuml;rzel f&uuml;r die ausgew&auml;hlte Sprache und den
-  ausgew&auml;hlten Drucker angeh&auml;ngt.</p>
-
- <h3><a name="dunning_allgemein">Allgemeine Variablen in Mahnungen:</a></h3>
-
- <p>Die Variablen des Verk&auml;ufers stehen wie gewohnt
-  als <code>employee_...</code> zur Verf&uuml;gung. Die Adressdaten des
-  Kunden stehen als Variablen <code>name</code>, <code>street</code>,
-  <code>zipcode</code>, <code>city</code>, <code>country</code>,
-  <code>department_1</code>, <code>department_2</code>, und
-  <code>email</code> zur Verf&uuml;gung.
- </p>
-
- <p>Weitere Variablen beinhalten:</p>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>dunning_date</code></td>
-    <td>Datum der Mahnung</td>
-   </tr>
-   <tr>
-    <td><code>dunning_duedate</code></td>
-    <td>F&auml;lligkeitsdatum f&uuml;r diese Mahhnung</td>
-   </tr>
-   <tr>
-    <td><code>dunning_id</code></td>
-    <td>Mahnungsnummer</td>
-   </tr>
-   <tr>
-    <td><code>fee</code></td>
-    <td>Kummulative Mahngeb&uuml;hren</td>
-   </tr>
-   <tr>
-    <td><code>interest_rate</code></td>
-    <td>Zinssatz per anno in Prozent</td>
-   </tr>
-   <tr>
-    <td><code>total_amount</code></td>
-    <td>Gesamter noch zu zahlender Betrag als <code>fee</code> + <code>total_interest</code> + <code>total_open_amount</code></td>
-   </tr>
-   <tr>
-    <td><code>total_interest</code></td>
-    <td>Zinsen per anno &uuml;ber alle Rechnungen</td>
-   </tr>
-   <tr>
-    <td><code>total_open_amount</code></td>
-    <td>Summe &uuml;ber alle offene Betr&auml;ge der Rechnungen</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="dunning_details">
-   Variablen f&uuml;r jede gemahnte Rechnung in einer Mahnung:</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>dn_amount</code></td>
-    <td>Rechnungssumme (brutto)</td>
-   </tr>
-   <tr>
-    <td><code>dn_duedate</code></td>
-    <td>Originales F&auml;lligkeitsdatum der Rechnung</td>
-   </tr>
-   <tr>
-    <td><code>dn_dunning_date</code></td>
-    <td>Datum der Mahnung</td>
-   </tr>
-   <tr>
-    <td><code>dn_dunning_duedate</code></td>
-    <td>F&auml;lligkeitsdatum der Mahnung</td>
-   </tr>
-   <tr>
-    <td><code>dn_fee</code></td>
-    <td>Kummulative Mahngeb&uuml;hr</td>
-   </tr>
-   <tr>
-    <td><code>dn_interest</code></td>
-    <td>Zinsen per anno f&uuml;r diese Rechnung</td>
-   </tr>
-   <tr>
-    <td><code>dn_invnumber</code></td>
-    <td>Rechnungsnummer</td>
-   </tr>
-   <tr>
-    <td><code>dn_linetotal</code></td>
-    <td>Noch zu zahlender Betrag (ergibt sich aus <code>dn_open_amount + dn_fee + dn_interest</code>)</td>
-   </tr>
-   <tr>
-    <td><code>dn_netamount</code></td>
-    <td>Rechnungssumme (netto)</td>
-   </tr>
-   <tr>
-    <td><code>dn_open_amount</code></td>
-    <td>Offener Rechnungsbetrag</td>
-   </tr>
-   <tr>
-    <td><code>dn_ordnumber</code></td>
-    <td>Bestellnummer</td>
-   </tr>
-   <tr>
-    <td><code>dn_transdate</code></td>
-    <td>Rechnungsdatum</td>
-   </tr>
-   <tr>
-    <td><code>dn_curr</code></td>
-    <td>W&auml;hrung, in der die Rechnung erstellt wurde. (Die Rechnungsbetr&auml;ge
-      sind aber immer in der Hauptw&auml;hrung)</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="dunning_invoice">Variablen in automatisch erzeugten
-   Rechnungen &uuml;ber Mahngeb&uuml;hren</a></h3>
-
- <p>Die Variablen des Verk&auml;ufers stehen wie gewohnt
-  als <code>employee_...</code> zur Verf&uuml;gung. Die Adressdaten des
-  Kunden stehen als Variablen <code>name</code>, <code>street</code>,
-  <code>zipcode</code>, <code>city</code>, <code>country</code>,
-  <code>department_1</code>, <code>department_2</code>, und
-  <code>email</code> zur Verf&uuml;gung.
- </p>
-
- <p>Weitere Variablen beinhalten:</p>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>duedate</code></td>
-    <td>F&auml;lligkeitsdatum der Rechnung</td>
-   </tr>
-   <tr>
-    <td><code>dunning_id</code></td>
-    <td>Mahnungsnummer</td>
-   </tr>
-   <tr>
-    <td><code>fee</code></td>
-    <td>Mahngeb&uuml;hren</td>
-   </tr>
-   <tr>
-    <td><code>interest</code></td>
-    <td>Zinsen</td>
-   </tr>
-   <tr>
-    <td><code>invamount</code></td>
-    <td>Rechnungssumme (ergibt sich aus <code>fee + interest</code>)</td>
-   </tr>
-   <tr>
-    <td><code>invdate</code></td>
-    <td>Rechnungsdatum</td>
-   </tr>
-   <tr>
-    <td><code>invnumber</code></td>
-    <td>Rechnungsnummer</td>
-   </tr>
-  </table>
- </p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="anderevorlagen">
-   Variablen in anderen Vorlagen</a></h2>
-
- <p>Die Variablen in anderen Vorlagen sind &auml;hnlich wie in der
-  Rechnung. Allerdings hei&szlig;en die Variablen, die mit <code>inv</code>
-  beginnen, jetzt anders. Bei den Angeboten fangen sie mit <code>quo</code>
-  f&uuml;r "quotation" an: <code>quodate</code> f&uuml;r Angebotsdatum
-  etc. Bei Bestellungen wiederum fangen sie mit <code>ord</code> f&uuml;r
-  "order" an: <code>ordnumber</code> f&uuml;r Bestellnummer etc.</p>
-
- <p>Manche Variablen sind in anderen Vorlagen hingegen gar nicht vorhanden wie
-  z.B. die f&uuml;r bereits verbuchte Zahlungseing&auml;nge. Dies sind
-  Variablen, die vom Gesch&auml;ftsablauf her in der entsprechenden Vorlage
-  keine Bedeutung haben oder noch nicht belegt sein k&ouml;nnen.</p>
-
- <p>Im Folgenden werden nur wichtige Unterschiede zu den Variablen in
-  Rechnungen aufgef&uuml;hrt.</p>
-
- <h3><a name="anderevorlagen_quotations">Angebote und Preisanfragen</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>quonumber</code></td>
-    <td>Angebots- bzw. Anfragenummer</td>
-   </tr>
-   <tr>
-    <td><code>reqdate</code></td>
-    <td>G&uuml;ltigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei Preisanfragen)</td>
-   </tr>
-   <tr>
-    <td><code>transdate</code></td>
-    <td>Angebots- bzw. Anfragedatum</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="anderevorlagen_orders">Auftragsbest&auml;tigungen und Lieferantenauftr&auml;ge</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>ordnumber</code></td>
-    <td>Auftragsnummer</td>
-   </tr>
-   <tr>
-    <td><code>reqdate</code></td>
-    <td>Lieferdatum</td>
-   </tr>
-   <tr>
-    <td><code>transdate</code></td>
-    <td>Auftragsdatum</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="anderevorlagen_delivery_orders">Lieferscheine (Verkauf und Einkauf)</a></h3>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>cusordnumber</code></td>
-    <td>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer des Lieferanten (im Einkauf)</td>
-   </tr>
-   <tr>
-    <td><code>donumber</code></td>
-    <td>Lieferscheinnummer</td>
-   </tr>
-   <tr>
-    <td><code>transdate</code></td>
-    <td>Lieferscheindatum</td>
-   </tr>
-  </table>
- </p>
-
- <p>F&uuml;r jede Position eines Lieferscheines gibt es ein Unterarray mit
-  den Informationen dar&uuml;ber, von welchem Lager und Lagerplatz aus die
-  Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
-  Lagerplatz sie eingelagert wurden. Diese m&uuml;ssen mittels
-  einer <code>foreach</code>-Schleife ausgegeben werden. Diese
-  Variablen sind:</p>
-
-
- <p>F&uuml;r jede Position eines Lieferscheines gibt es ein Unterarray mit
-  den Informationen dar&uuml;ber, von welchem Lager und Lagerplatz aus die
-  Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
-  Lagerplatz sie eingelagert wurden. Diese m&uuml;ssen mittels
-  einer <code>foreach</code>-Schleife ausgegeben werden. Diese
-  Variablen sind:</p>
-
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>si_bin</code></td>
-    <td>Lagerplatz</td>
-   </tr>
-   <tr>
-    <td><code>si_chargenumber</code></td>
-    <td>Chargennummer</td>
-   </tr>
-   <tr>
-    <td><code>si_bestbefore</code></td>
-    <td>Mindesthaltbarkeit</td>
-   </tr>
-   <tr>
-    <td><code>si_number</code></td>
-    <td>Artikelnummer</td>
-   </tr>
-   <tr>
-    <td><code>si_qty</code></td>
-    <td>Anzahl bzw. Menge</td>
-   </tr>
-   <tr>
-    <td><code>si_runningnumber</code></td>
-    <td>Positionsnummer (1, 2, 3 etc)</td>
-   </tr>
-   <tr>
-    <td><code>si_unit</code></td>
-    <td>Einheit</td>
-   </tr>
-   <tr>
-    <td><code>si_warehouse</code></td>
-    <td>Lager</td>
-   </tr>
-  </table>
- </p>
-
- <h3><a name="anderevorlagen_statement">Sammelrechnung</a></h3>
-
- <h3> Variablen f&uuml;r Sammelrechnung:</h3>
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>c0total</code></td>
-    <td>Gesamtbetrag aller Rechnungen mit F&auml;lligkeit &lt; 30 Tage</td>
-   </tr>
-   <tr>
-    <td><code>c30total</code></td>
-    <td>Gesamtbetrag aller Rechnungen mit F&auml;lligkeit &gt;= 30 und &lt; 60 Tage</td>
-   </tr>
-   <tr>
-    <td><code>c60total</code></td>
-    <td>Gesamtbetrag aller Rechnungen mit F&auml;lligkeit &gt;= 60 und &lt; 90 Tage</td>
-   </tr>
-   <tr>
-    <td><code>c90total</code></td>
-    <td>Gesamtbetrag aller Rechnungen mit F&auml;lligkeit &gt;= 90 Tage</td>
-   </tr>
-   <tr>
-    <td><code>total</code></td>
-    <td>Gesamtbetrag aller Rechnungen</td>
-   </tr>
-  </table>
- </p>
-
- <h3> Variablen f&uuml;r jede Rechnungsposition in Sammelrechnung:</h3>
- <p>
-  <table border="1">
-   <tr><th>Variablenname</th><th>Bedeutung</th></tr>
-   <tr>
-    <td><code>invnumber</code></td>
-    <td>Rechnungsnummer</td>
-   </tr>
-   <tr>
-    <td><code>invdate</code></td>
-    <td>Rechnungsdatum</td>
-   </tr>
-   <tr>
-    <td><code>duedate</code></td>
-    <td>F&auml;lligkeitsdatum</td>
-   </tr>
-   <tr>
-    <td><code>amount</code></td>
-    <td>Summe der Rechnung</td>
-   </tr>
-   <tr>
-    <td><code>open</code></td>
-    <td>Noch offener Betrag der Rechnung</td>
-   </tr>
-   <tr>
-    <td><code>c0</code></td>
-    <td>Noch offener Rechnungsbetrag mit F&auml;lligkeit &lt; 30 Tage</td>
-   </tr>
-   <tr>
-    <td><code>c30</code></td>
-    <td>Noch offener Rechnungsbetrag mit F&auml;lligkeit &gt;= 30 und &lt; 60 Tage</td>
-   </tr>
-   <tr>
-    <td><code>c60</code></td>
-    <td>Noch offener Rechnungsbetrag mit F&auml;lligkeit &gt;= 60 und &lt; 90 Tage</td>
-   </tr>
-   <tr>
-    <td><code>c90</code></td>
-    <td>Noch offener Rechnungsbetrag mit F&auml;lligkeit &gt;= 90 Tage</td>
-   </tr>
-  </table>
- </p>
-
-
-
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="bloecke">
-   Bl&ouml;cke, bedingte Anweisungen und Schleifen</a></h2>
-
- <p>Der Parser kennt neben den Variablen einige weitere Konstrukte,
-  die gesondert behandelt werden. Diese sind wie Variablennamen in
-  spezieller Weise markiert: <code>&lt;%anweisung%&gt;
-  ... &lt;%end%&gt;</code></p>
-
- <p>Anmerkung zum <code>&lt;%end%&gt;</code>: Der besseren
-  Verst&auml;ndlichkeit halber kann man nach dem <code>end</code> noch
-  beliebig weitere W&ouml;rter schreiben, um so zu markieren, welche
-  Anweisung (z.B. <code>if</code> oder <code>foreach</code>) damit
-  abgeschlossen wird.</p>
-
- <p>Beispiel: Lautet der Beginn eines Blockes
-   z.B. <code class="blue">&lt;%if type ==
-   &quot;sales_quotation&quot;%&gt;</code>, so k&ouml;nnte er mit
-  <code class="blue">&lt;%end%&gt;</code> genauso abgeschlossen werden
-  wie mit
-  <code class="blue">&lt;%end if%&gt;</code> oder auch
-  <code class="blue">&lt;%end type ==
-  &quot;sales_quotation&quot;%&gt;</code>.</p>
-
- <h3><a name="bloecke_if">Der <code>if</code>-Block</a></h3>
-
- <p class="blue"><code>&lt;%if variablenname%&gt;<br>
-   ...<br>
-   &lt;%end%&gt;</code></p>
-
- <p>Eine normale &quot;if-then&quot;-Bedingung. Die Zeilen zwischen
-  dem &quot;if&quot; und dem &quot;end&quot; werden nur ausgegeben,
-  wenn die Variable &quot;variablenname&quot; gesetzt und ungleich 0
-  ist.</p>
-
- <p>Die Bedingung kann auch negiert werden, indem das Wort
-  &quot;not&quot; nach dem &quot;if&quot; verwendet
-  wird. Beispiel: <code class="blue">&lt;%if not
-  cp_greeting%&gt;</code></p>
-
- <p>Zus&auml;tzlich zu dem einfachen Test, ob eine Variable gesetzt ist
-  oder nicht, bietet dieser Block auch die M&ouml;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&auml;ngt davon ab, ob
-  die rechte Seite des Vergleichsoperators in Anf&uuml;hrungszeichen
-  gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
-  anderer Variablen). Zwei Beispiele, die beide Vergleiche zeigen:</p>
-
- <p><code class="blue">&lt;%if var1 == &quot;Wert&quot;%&gt;</code>
-  testet die Variable &quot;var1&quot; auf &Uuml;bereinstimmung mit der
-  Zeichenkette &quot;Wert&quot;. Mittels &quot;!=&quot; anstelle von
-  &quot;==&quot; w&uuml;rde auf Ungleichheit getestet.</p>
-
- <p><code class="blue">&lt;%if var1 == var2%&gt;</code> testet die
-  Variable &quot;var1&quot; auf &Uuml;bereinstimmung mit der Variablen
-  &quot;var2&quot;. Mittels &quot;!=&quot; anstelle von &quot;==&quot;
-  w&uuml;rde auf Ungleichheit getestet.</p>
-
- <p>Erfahrere Benutzer k&ouml;nnen neben der Tests auf (Un-)Gleichheit auch
-  Tests auf &Uuml;bereinstimmung mit regul&auml;ren Ausdr&uuml;cken ohne
-  Ber&uuml;cksichtung der Gro&szlig;- und Kleinschreibung durchf&uuml;hren. Dazu dient
-  dieselbe Syntax wie oben nur mit &quot;=~&quot; und &quot;!~&quot;
-  als Vergleichsoperatoren.</p>
-
- <p>Beispiel f&uuml;r einen Test, ob die Variable &quot;intnotes&quot;
-  (interne Bemerkungen) das Wort &quot;schwierig&quot; enth&auml;lt:
-  <code class="blue">&lt;%if intnotes =~
-  &quot;schwierig&quot;%&gt;</code></p>
-
- <h3><a name="bloecke_foreach">Die <code>foreach</code>-Schleife</a></h3>
-
- <p class="blue"><code>&lt;%foreach variablenname%&gt;<br>
-   ...<br>
-   &lt;%end%&gt;</code></p>
-
- <p>F&uuml;gt die Zeilen zwischen den beiden Anweisungen so oft ein, wie das
-  Perl-Array der Variablen "variablenname" Elemente enth&auml;t. Dieses
-  Konstrukt wird zur Ausgabe der einzelnen Posten einer Rechnung / eines
-  Angebots sowie zur Ausgabe der Steuern benutzt. In jedem Durchlauf werden
-  die <a href="dokumentenvorlagen-und-variablen.html#invoice_posten">zeilenbezogenen
-  Variablen</a> jeweils auf den Wert f&uuml;r die aktuelle Position
-  gesetzt.</p>
-
- <p>Die Syntax sieht normalerweise wie folgt aus:</p>
-
- <p class="blue"><code>&lt;%foreach number%&gt;<br>
-   Position: &lt;%runningnumber%&gt;<br>
-   Anzahl: &lt;%qty%&gt;<br>
-   Artikelnummer: &lt;%number%&gt;<br>
-   Beschreibung: &lt;%description%&gt;<br>
-   ...<br>
-   &lt;%end%&gt;</code></p>
-
- <p>Besonderheit in OpenDocument-Vorlagen: Tritt ein
-  <code>&lt;%foreach%&gt;</code>-Block innerhalb einer Tabellenzelle
-  auf, so wird die komplette Tabellenzeile so oft wiederholt wie
-  notwendig. Tritt er au&szlig;erhalb auf, so wird nur der Inhalt
-  zwischen <code>&lt;%foreach%&gt;</code> und <code>&lt;%end%&gt;</code>
-  wiederholt, nicht aber die komplette Zeile, in der er steht.</p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
- <h2><a name="markup">
-   Markup-Code, der innerhalb von Formularen zur Textformatierung
-   verwendet werden kann</a></h2>
-
- <p>Wenn der Benutzer innhalb von Formularen in Lx-Office Text anders
-  formatiert haben m&ouml;chte, so ist dies begrenzt m&ouml;glich. Lx-Office
-  unterst&uuml;tzt die Textformatierung mit HTML-&auml;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&uuml;r das ausgew&auml;hlte Vorlagenformat (HTML oder
-  PDF &uuml;ber LaTeX) umgesetzt.</p>
-
- <p>Die unterst&uuml;tzen Formatierungen sind:</p>
-
- <p>
-  <table border="1">
-   <tr><th>Formatierung</th><th>Auswirkung</th></tr>
-   <tr>
-    <td><code>&lt;b&gt;Text&lt;/b&gt;</code></td>
-    <td>Text wird in <b>fettdruck</b> gesetzt.</td>
-   </tr>
-   <tr>
-    <td><code>&lt;i&gt;Text&lt;/i&gt;</code></td>
-    <td>Text wird <i>kursiv</i> gesetzt.</td>
-   </tr>
-   <tr>
-    <td><code>&lt;u&gt;Text&lt;/u&gt;</code></td>
-    <td>Text wird <u>unterstrichen</u>.</td>
-   </tr>
-   <tr>
-    <td><code>&lt;s&gt;Text&lt;/s&gt;</code></td>
-    <td>Text wird <s>durchgestrichen</s>. Diese Formatierung ist nicht bei der
-     Ausgabe als PDF &uuml;ber LaTeX verf&uuml;gbar.</td>
-   </tr>
-   <tr>
-    <td><code>&lt;pagebreak&gt;</code></td>
-    <td>Erzwingt einen Seitenumbruch (siehe unten).</td>
-   </tr>
-   <tr>
-    <td><code>&lt;bullet&gt;</code></td>
-    <td>Erzeugt einen ausgef&uuml;llten Kreis f&uuml;r Aufz&auml;hlungen (&bull;) (siehe unten).</td>
-   </tr>
-  </table>
- </p>
-
- <p>Eine Besonderheit ist der Befehl <code>&lt;pagebreak&gt;</code>,
-  der nur in LaTeX-Vorlagen funktioniert und in anderen Vorlagen
-  einfach gel&ouml;scht wird. Dieser erzwingt einen Seitenumbruch nach
-  der aktuellen Rechnungsposition. Dementsprechend funktioniert er nur
-  innerhalb von
-  <code>&lt;%foreach...%&gt;</code>-Schleifen. Weiterhin ben&ouml;tigt
-  er kein Endtag.</p>
-
- <p>Auch <code>&lt;bullet&gt;</code> funktioniert momentan auch nur in Latex-Vorlagen.</p>
-
- <small><a href="dokumentenvorlagen-und-variablen.html#inhaltsverzeichnis">
-   zum Inhaltsverzeichnis</a></small><br>
- <hr>
-
-</body>
-</html>
diff --git a/doc/excel_templates.txt b/doc/excel_templates.txt
deleted file mode 100644 (file)
index fe16d6d..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-Table of Contents
------------------
-
-Inhalt der Anleitung
-1 Zusammenfassung
-2 Bedienung
-3 Exceltemplate Syntax
-4 Einschränkungen
-
-
-
-Zusammenfassung
----------------
-
-Dieses Dokument beschreibt den Mechanismus, mit dem Exceltemplates abgearbeitet
-werden, und die Einschränkungen die damit einhergehen.
-
-
-
-Bedienung
----------
-
-Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert werden. Die
-Konfigurationsoption heißt:
-
-  $excel_templates = 1;
-
-Eine Excelvorlage kann dann unter dem Namen einer beliebigen anderen Vorlage mit
-der Endung .xls gespeichert werden. In den normalen Verkaufsmasken taucht nun
-"Excel" als auswählbares Format auf, und kann von da an bnutzt weren wie Latex
-oder OpenOffice Vorlagen.
-
-Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls eine
-Angebotsvorlage, und wird unter dem internen Namen der Angebote
-"sales_quotation.xls" gespeichert.
-
-
-
-Exceltemplate Syntax
---------------------
-
-Einfache Syntax:  <<varname>>
-
-Wobei "<<" und ">>" die Delimiter sind. Da Excel auf festen Breiten besteht,
-kann der Tag künstlich verlängert werden, indem weitere "<" oder ">" gegefügt
-werden. Der Tag muss nicht symmetrisch sein.
-
-Beispiel: <<<<<varname>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
-Um die Limitierung der festen Breite zu reduzieren, können weitere Variablen in
-einem Block interpoliert werden. Whitespace wird dazwishen dann erhalten.
-
-Beispiel: <<<<<varname1 varname2   varname3>>>>>>>>>>>>>>>>>>>>>>>>>>
-
-Die Variablen werden interpoliert, und linksbündig mit Leerzeichen auf die
-gewünschte Länge aufgefüllt. Ist der String zu lang, werden überzählige Zeichen
-abgeschnitten.
-
-Es ist ausserdem möglich Daten rechtsbündig darzustellen, wenn der Block mit
-einem Leerzeichen anfängt.
-
-Beispiel:  <<<<<<            varname>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
-
-würde rechtsbündig triggern. Wenn bei rechtsbündiger Ausrichtung Text
-abgeschnitten werden muss, wird er vom linken Ende entfernt.
-
-
-
-Einschränkungen
----------------
-
-Das Excelformat bis 2002 ist ein binäres Format, und kann nicht mit vertretbarem
-Aufwand editiert werden. Der Templatemechanismus beschränkt sich daher darauf,
-Textstellen _exakt_ durch einen anderen Text zu ersetzen.
-
-Aus dem gleichen Grund sind die Templatekonstrukte <% if %> und <% foreach %>
-nicht vorhanden. Der Delimiter <% %> kommt in den Headerinformationen evtl vor,
-deshalb wurde auf den sichereren "<<"/">>" gewechselt.
-
diff --git a/doc/html/ch01.html b/doc/html/ch01.html
new file mode 100644 (file)
index 0000000..814031d
--- /dev/null
@@ -0,0 +1,5 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>Kapitel 1. Aktuelle Hinweise</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="prev" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 1. Aktuelle Hinweise</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="index.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 1. Aktuelle Hinweise"><div class="titlepage"><div><div><h2 class="title"><a name="Aktuelle-Hinweise"></a>Kapitel 1. Aktuelle Hinweise</h2></div></div></div><p>Aktuelle Installations- und Konfigurationshinweise gibt es:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>auf der Lx-Office-Homepage unter <a class="ulink" href="http://lx-office.org/index.php?id=dokumentation" target="_top">http://lx-office.org/index.php?id=dokumentation</a>
+            </p></li><li class="listitem"><p>im Lx-Office-Wiki unter Dokumentation (<a class="ulink" href="http://wiki.lx-office.org/index.php/Lx-Office_ERP" target="_top">http://wiki.lx-office.org/index.php/Lx-Office_ERP</a>)</p></li><li class="listitem"><p>im Lx-Office-Forum: <a class="ulink" href="http://www.lx-office.org/forum/" target="_top">http://www.lx-office.org/forum/</a>
+            </p></li></ul></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="index.html">Zurück</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Lx-Office: Installation, Konfiguration, Entwicklung&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;Kapitel 2. Installation und Grundkonfiguration</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02.html b/doc/html/ch02.html
new file mode 100644 (file)
index 0000000..17a8cfe
--- /dev/null
@@ -0,0 +1,54 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>Kapitel 2. Installation und Grundkonfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"><link rel="next" href="ch02s02.html" title="2.2. Manuelle Installation des Programmpaketes"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 2. Installation und Grundkonfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch01.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 2. Installation und Grundkonfiguration"><div class="titlepage"><div><div><h2 class="title"><a name="config"></a>Kapitel 2. Installation und Grundkonfiguration</h2></div></div></div><div class="sect1" title="2.1. Benötigte Software und Pakete"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Ben%C3%B6tigte-Software-und-Pakete"></a>2.1. Benötigte Software und Pakete</h2></div></div></div><div class="sect2" title="2.1.1. Betriebssystem"><div class="titlepage"><div><div><h3 class="title"><a name="Betriebssystem"></a>2.1.1. Betriebssystem</h3></div></div></div><p>Lx-Office ist für Linux konzipiert, und sollte auf jedem
+        unixoiden Betriebssystem zum Laufen zu kriegen sein. Getestet ist
+        diese Version im speziellen auf Debian und Ubuntu, grundsätzlich wurde
+        bei der Auswahl der Pakete aber darauf Rücksicht genommen, dass es
+        ohne große Probleme auf den derzeit aktuellen verbreiteten
+        Distributionen läuft.</p><p>Anfang 2012 sind das folgende Systeme, von denen bekannt ist, dass Lx-Office auf ihnen läuft:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ubuntu 8.04 LTS Hardy Heron, 10.04 LTS Lucid Lynx bis 11.10 Oneiric Ocelot</p></li><li class="listitem"><p>Debian 5.0 Lenny und 6.0 Squeeze</p></li><li class="listitem"><p>openSUSE 11.2 und 11.3</p></li><li class="listitem"><p>SuSE Linux Enterprice Server 11</p></li><li class="listitem"><p>Fedora 13 bis 15</p></li></ul></div><p>Ubuntu 8.04 LTS hat zusätzlich die Schwierigkeit, dass die
+        Module im Archiv recht alt sind, und das viele der benötigten Module
+        nicht einfach zu installieren sind. Dafür sollte es kurz nach dem
+        Release ein eigenes .deb geben.</p><p>Alternativ dazu kann die normale Installation durchgeführt
+        werden (siehe <a class="xref" href="ch02s02.html" title="2.2. Manuelle Installation des Programmpaketes">Manuelle Installation des Programmpaketes</a>), wenn vorher
+        ein Kompatibilitätspaket installiert wird, das die fehlenden Pakete
+        bereitstellt. Das Paket ist auf <a class="ulink" href="https://sourceforge.net/projects/lx-office/files/Lx-Office%20ERP/2.6.2/" target="_top">Sourceforge</a>
+        unter dem Namen <code class="filename">lx-erp-perl-libs-compat-v2.tar.gz</code>
+        hinterlegt.</p><p>Zur Installation das Paket in das entpackte Lx-Office
+        Verzeichnis entpacken:</p><pre class="programlisting">tar xzf lx-erp-perl-libs-compat-v2.tar.gz /path/to/lx-office/</pre><p>Zusätzlich müssen dann noch die folgenden Pakete installiert
+        weerden</p><pre class="programlisting">apt-get install libbit-vector-perl libsub-exporter-perl libclone-perl libclass-factory-util-perl</pre><p>Danach sollte der Installationscheck (siehe <a class="xref" href="ch02.html#Pakete" title="2.1.2. Pakete">Pakete</a>) die enthaltenen Pakete erkennen.</p></div><div class="sect2" title="2.1.2. Pakete"><div class="titlepage"><div><div><h3 class="title"><a name="Pakete"></a>2.1.2. Pakete</h3></div></div></div><p>Zum Betrieb von Lx-Office werden zwingend ein Webserver (meist
+        Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.2)
+        benötigt.</p><p>Zusätzlich benötigt Lx-Office die folgenden Perl-Pakete, die
+        nicht Bestandteil einer Standard-Perl-Installation sind:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>parent</p></li><li class="listitem"><p>Archive::Zip</p></li><li class="listitem"><p>Config::Std</p></li><li class="listitem"><p>DateTime</p></li><li class="listitem"><p>DBI</p></li><li class="listitem"><p>DBD::Pg</p></li><li class="listitem"><p>Email::Address</p></li><li class="listitem"><p>JSON</p></li><li class="listitem"><p>List::MoreUtils</p></li><li class="listitem"><p>Params::Validate</p></li><li class="listitem"><p>PDF::API2</p></li><li class="listitem"><p>Rose::Object</p></li><li class="listitem"><p>Rose::DB</p></li><li class="listitem"><p>Rose::DB::Object</p></li><li class="listitem"><p>Template</p></li><li class="listitem"><p>Text::CSV_XS</p></li><li class="listitem"><p>Text::Iconv</p></li><li class="listitem"><p>URI</p></li><li class="listitem"><p>XML::Writer</p></li><li class="listitem"><p>YAML</p></li></ul></div><p>Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete
+        hinzugekommen, <code class="literal">URI</code> und
+        <code class="literal">XML::Writer</code> sind notwendig. Ohne startet Lx-Office
+        nicht.</p><p>Gegenüber Version 2.6.1 sind <code class="literal">parent</code>,
+        <code class="literal">DateTime</code>, <code class="literal">Rose::Object</code>,
+        <code class="literal">Rose::DB</code> und <code class="literal">Rose::DB::Object</code>
+        neu hinzugekommen. <code class="literal">IO::Wrap</code> wurde entfernt.</p><p>Gegenüber Version 2.6.3 ist <code class="literal">JSON</code> neu
+        hinzugekommen.</p><p>
+               <code class="literal">Email::Address</code> und
+        <code class="literal">List::MoreUtils</code> sind schon länger feste
+        Abhängigkeiten, wurden aber bisher mit Lx-Office mitgeliefert. Beide
+        sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
+        zukünftigen Version aber aus dem Paket entfernt werden. Es wird
+        empfohlen diese Module zusammen mit den anderen als Bibliotheken zu
+        installieren.</p><p>Die zu installierenden Pakete können in den verschiedenen
+        Distributionen unterschiedlich heißen.</p><p>Für Debian oder Ubuntu benötigen Sie diese Pakete:</p><pre class="programlisting">apt-get install apache2 postgresql libparent-perl libarchive-zip-perl \
+  libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl \
+  libemail-address-perl liblist-moreutils-perl libpdf-api2-perl \
+  librose-object-perl librose-db-perl librose-db-object-perl \
+  libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl \
+  libxml-writer-perl libyaml-perl libconfig-std-perl \
+  libparams-validate-perl libjson-perl</pre><p>Für Fedora Core benötigen Sie diese Pakete:</p><pre class="programlisting">yum install httpd postgresql-server perl-parent perl-DateTime \
+  perl-DBI perl-DBD-Pg perl-Email-Address perl-List-MoreUtils \
+  perl-PDF-API2 perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object \
+  perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
+  perl-XML-Writer perl-YAML</pre><p>Für OpenSuSE benötigen Sie diese Pakete:</p><pre class="programlisting">zypper install apache2 postgresql-server perl-Archive-Zip \
+  perl-DateTime perl-DBI perl-DBD-Pg perl-MailTools perl-List-MoreUtils \
+  perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv \
+  perl-URI perl-XML-Writer perl-YAML</pre><p>Bei openSuSE 11 ist <code class="literal">parent</code> bereits enthalten,
+        und braucht nicht nachinstalliert werden. Die
+        <code class="literal">Rose::*</code> Pakete sind derzeit nicht für SuSE gepackt,
+        und müssen anderweitig nachinstalliert werden.</p><p>Lx-Office enthält ein Script, mit dem überprüft werden kann, ob
+        alle benötigten Perl-Module installiert sind. Der Aufruf lautet wie
+        folgt:</p><pre class="programlisting">./scripts/installation_check.pl</pre></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch01.html">Zurück</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 1. Aktuelle Hinweise&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.2. Manuelle Installation des Programmpaketes</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s02.html b/doc/html/ch02s02.html
new file mode 100644 (file)
index 0000000..e4a8d8f
--- /dev/null
@@ -0,0 +1,21 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.2. Manuelle Installation des Programmpaketes</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="next" href="ch02s03.html" title="2.3. Lx-Office-Konfigurationsdatei"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.2. Manuelle Installation des Programmpaketes</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s03.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.2. Manuelle Installation des Programmpaketes"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Manuelle-Installation-des-Programmpaketes"></a>2.2. Manuelle Installation des Programmpaketes</h2></div></div></div><p>Die Lx-Office ERP Installationsdatei (lxoffice-erp-2.6.3.tgz) wird
+      im Dokumentenverzeichnis des Webservers (z.B.
+      <code class="filename">/var/www/html/</code>,
+      <code class="filename">/srv/www/htdocs</code> oder
+      <code class="filename">/var/www/</code>) entpackt:</p><pre class="programlisting">cd /var/www tar xvzf
+lxoffice-erp-2.6.2.tgz</pre><p>Verändern Sie evtl. noch den Namen des Verzeichnisses mit</p><pre class="programlisting">mv lxoffice-erp/ lx-erp/</pre><p>Alternativ können Sie auch einen Alias in der
+      Webserverkonfiguration benutzen, um auf das tatsächliche
+      Installationsverzeichnis zu verweisen.</p><p>Die Verzeichnisse <code class="filename">users</code>,
+      <code class="filename">spool</code> und <code class="filename">webdav</code> müssen für
+      den Benutzer beschreibbar sein, unter dem der Webserver läuft. Die
+      restlichen Dateien müssen für diesen Benutzer lesbar sein. Der
+      Benutzername ist bei verschiedenen Distributionen unterschiedlich (z.B.
+      bei Debian/Ubuntu <code class="constant">www-data</code>, bei Fedora core
+      <code class="constant">apache</code> oder bei OpenSuSE
+      <code class="constant">wwwrun</code>).</p><p>Der folgende Befehl ändert den Besitzer für die oben genannten
+      Verzeichnisse auf einem Debian/Ubuntu-System:</p><pre class="programlisting">chown -R www-data lx-office-erp/users lx-office-erp/spool lx-office-erp/webdav</pre><p>Weiterhin muss der Webserver-Benutzer im Verzeichnis
+      <code class="filename">templates</code> Verzeichnisse für jeden neuen Benutzer,
+      der in lx-office angelegt wird, anlegen dürfen:</p><pre class="programlisting">chgrp www-data lx-office-erp/templates
+chmod g+w lx-office-erp/templates</pre></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 2. Installation und Grundkonfiguration&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.3. Lx-Office-Konfigurationsdatei</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s03.html b/doc/html/ch02s03.html
new file mode 100644 (file)
index 0000000..54aaec6
--- /dev/null
@@ -0,0 +1,77 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.3. Lx-Office-Konfigurationsdatei</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s02.html" title="2.2. Manuelle Installation des Programmpaketes"><link rel="next" href="ch02s04.html" title="2.4. Anpassung der PostgreSQL-Konfiguration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.3. Lx-Office-Konfigurationsdatei</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s02.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s04.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.3. Lx-Office-Konfigurationsdatei"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="config.config-file"></a>2.3. Lx-Office-Konfigurationsdatei</h2></div></div></div><div class="sect2" title="2.3.1. Einführung"><div class="titlepage"><div><div><h3 class="title"><a name="config.config-file.introduction"></a>2.3.1. Einführung</h3></div></div></div><p>
+       Seit Lx-Office 2.6.3. gibt es nur noch eine Konfigurationsdatei die benötigt wird: <code class="filename">config/lx_office.conf</code> (kurz:
+       "die Hauptkonfigurationsdatei"). Diese muss bei der Erstinstallation von Lx-Office bzw. der Migration von älteren Versionen angelegt
+       werden.
+      </p><p>
+       Als Vorlage dient die Datei <code class="filename">config/lx_office.conf.default</code> (kurz: "die Default-Datei"):
+      </p><pre class="programlisting">$ cp config/lx_office.conf.default config/lx_office.conf</pre><p>
+       Die Default-Datei wird immer zuerst eingelesen. Werte, die in der Hauptkonfigurationsdatei stehen, überschreiben die
+       Werte aus der Default-Datei. Die Hauptkonfigurationsdatei muss also nur die Abschintte und Werte
+       enthalten, die von denen der Default-Datei abweichen.
+      </p><p>
+       Diese Hauptkonfigurationsdatei ist dann eine installationsspezifische Datei, d.h. sie enthält bspw. lokale Passwörter und wird auch
+       nicht im Versionsmanagement (git) verwaltet.
+      </p><p>
+       Die Konfiguration ist ferner serverabhängig, d.h. für alle Mandaten, bzw. Datenbanken gleich.
+      </p></div><div class="sect2" title="2.3.2. Abschnitte und Parameter"><div class="titlepage"><div><div><h3 class="title"><a name="config.config-file.sections-parameters"></a>2.3.2. Abschnitte und Parameter</h3></div></div></div><p>
+       Die Konfigurationsdatei besteht aus mehreren Teilen, die entsprechend kommentiert sind:
+      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+                     <code class="literal">authentication</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">authentication/database</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">authentication/ldap</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">system</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">features</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">paths</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">applications</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">environment</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">print_templates</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">task_server</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">periodic_invoices</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">console</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="literal">debug</code>
+                  </p></li></ul></div><p>
+       Die üblicherweise wichtigsten Parameter, die am Anfang einzustellen oder zu kontrollieren sind, sind:
+      </p><pre class="programlisting">[authentication]
+admin_password = geheim
+
+[authentication/database]
+host     = localhost
+port     = 5432
+db       = lxerp_auth
+user     = postgres
+password =
+
+[system]
+eur = 1
+dbcharset = UTF-8</pre><p>
+        Nutzt man wiederkehrende Rechnungen, kann man unter <code class="varname">[periodic_invoices]</code> den Login eines Benutzers angeben, der
+        nach Erstellung der Rechnungen eine entsprechende E-Mail mit Informationen über die erstellten Rechnungen bekommt.
+       </p><p>
+        Nutzt man den <a class="link" href="ch02s06.html" title="2.6. Der Task-Server">Taskserver</a> für <a class="link" href="ch03.html#features.periodic-invoices" title="3.1. Wiederkehrende Rechnungen">wiederkehrende Rechnungen</a>, muss unter <code class="varname">[task_server]</code> ein Login eines
+        Benutzers angegeben werden, mit dem sich der Taskserver an Lx-Office bei der Datenbank anmeldet, die dem Benutzer zugewiesen ist.
+       </p><p>
+        Für Entwickler finden sich unter <code class="varname">[debug]</code> wichtige Funktionen, um die Fehlersuche zu erleichtern.
+       </p></div><div class="sect2" title="2.3.3. Versionen vor 2.6.3"><div class="titlepage"><div><div><h3 class="title"><a name="config.config-file.prior-versions"></a>2.3.3. Versionen vor 2.6.3</h3></div></div></div><p>
+       In älteren Lx-Office Versionen gab es im Verzeichnis <code class="filename">config</code> die Dateien <code class="filename">authentication.pl</code>
+       und <code class="filename">lx-erp.conf</code>, die jeweils Perl-Dateien waren. Es gab auch die Möglichkeit, eine lokale Version der
+       Konfigurationsdatei zu erstellen (<code class="filename">lx-erp-local.conf</code>). Dies ist ab 2.6.3 nicht mehr möglich, aber auch nicht mehr
+       nötig.
+      </p><p>
+       Beim Update von einer Lx-Office-Version vor 2.6.3 auf 2.6.3 oder jünger müssen die Einstellungen aus den alten Konfigurationsdateien
+       manuell übertragen und die alten Konfigurationsdateien anschließend gelöscht oder verschoben werden. Ansonsten zeigt Lx-Office eine
+       entsprechende Fehlermeldung an.
+      </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s02.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s04.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.2. Manuelle Installation des Programmpaketes&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.4. Anpassung der PostgreSQL-Konfiguration</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s04.html b/doc/html/ch02s04.html
new file mode 100644 (file)
index 0000000..942e21c
--- /dev/null
@@ -0,0 +1,35 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.4. Anpassung der PostgreSQL-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s03.html" title="2.3. Lx-Office-Konfigurationsdatei"><link rel="next" href="ch02s05.html" title="2.5. Webserver-Konfiguration"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.4. Anpassung der PostgreSQL-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s03.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s05.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.4. Anpassung der PostgreSQL-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Anpassung-der-PostgreSQL-Konfiguration"></a>2.4. Anpassung der PostgreSQL-Konfiguration</h2></div></div></div><p>PostgreSQL muss auf verschiedene Weisen angepasst werden.</p><div class="sect2" title="2.4.1. Zeichensätze/die Verwendung von UTF-8"><div class="titlepage"><div><div><h3 class="title"><a name="Zeichens%C3%A4tze-die-Verwendung-von-UTF-8"></a>2.4.1. Zeichensätze/die Verwendung von UTF-8</h3></div></div></div><p>Lx-Office kann komplett mit UTF-8 als Zeichensatz verwendet
+        werden. Dabei gibt es zwei Punkte zu beachten: PostgreSQL muss in
+        Version 8.2 oder neuer benutzt werden, und der
+        PostgreSQL-Datenbankcluster muss ebenfalls mit UTF-8 als Locale
+        angelegt worden sein.</p><p>Dieses ist kann überprüft werden: ist das Encoding der Datenbank &#8220;template1&#8221; &#8220;UTF8&#8221;, so kann auch Lx-Office mit UTF-8
+        betrieben werden.  Andernfalls ist es notwendig, einen neuen Datenbankcluster mit UTF-8-Encoding anzulegen und diesen zu
+        verwenden. Unter Debian und Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl getan werden:</p><pre class="programlisting">pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername</pre><p>Die Datenbankversionsnummer muss an die tatsächlich verwendete Versionsnummer angepasst werden.</p><p>Unter anderen Distributionen gibt es ähnliche Methoden.</p><p>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und
+        ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
+        Lx-Office mit ISO-8859-15 als Encoding betrieben werden.</p><p>Das Encoding einer Datenbank kann in <span class="command"><strong>psql</strong></span> mit <code class="literal">\l</code> geprüft werden.</p></div><div class="sect2" title="2.4.2. Änderungen an Konfigurationsdateien"><div class="titlepage"><div><div><h3 class="title"><a name="%C3%84nderungen-an-Konfigurationsdateien"></a>2.4.2. Änderungen an Konfigurationsdateien</h3></div></div></div><p>In der Datei <code class="filename">postgresql.conf</code>, die je nach
+        Distribution in verschiedenen Verzeichnissen liegen kann (z.B.
+        <code class="filename">/var/lib/pgsql/data/</code> oder
+        <code class="filename">/etc/postgresql/</code>, muss sichergestellt werden, dass
+        TCP/IP-Verbindungen aktiviert sind. Das Verhalten wird über den
+        Parameter <code class="varname">listen_address</code> gesteuert. Laufen
+        PostgreSQL und Lx-Office auf demselben Rechner, so kann dort der Wert
+        <code class="literal">localhost</code> verwendet werden. Andernfalls müssen
+        Datenbankverbindungen auch von anderen Rechnern aus zugelassen werden,
+        was mit dem Wert <code class="literal">*</code> geschieht.</p><p>In der Datei <code class="filename">pg_hba.conf</code>, die im gleichen
+        Verzeichnis wie die <code class="filename">postgresql.conf</code> zu finden sein
+        sollte, müssen die Berichtigungen für den Zugriff geändert werden.
+        Hier gibt es mehrere Möglichkeiten. Eine besteht darin, lokale
+        Verbindungen immer zuzulassen:</p><pre class="programlisting">local all all trust
+host all all 127.0.0.1 255.0.0.0 trust</pre><p>Besser ist es, für eine bestimmte Datenbank Zugriff nur per
+        Passwort zuzulassen. Beispielsweise:</p><pre class="programlisting">local all lxoffice password
+host all lxoffice 127.0.0.1 255.255.255.255 password</pre></div><div class="sect2" title="2.4.3. Erweiterung für servergespeicherte Prozeduren"><div class="titlepage"><div><div><h3 class="title"><a name="Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren"></a>2.4.3. Erweiterung für servergespeicherte Prozeduren</h3></div></div></div><p>In der Datenbank <code class="literal">template1</code> muss die
+        Unterstützung für servergespeicherte Prozeduren eingerichet werden.
+        Melden Sie sich dafür als Benutzer &#8220;postgres&#8221; an der Datenbank an, und
+        führen Sie die folgenden Kommandos aus:</p><pre class="programlisting">create language 'plpgsql';</pre></div><div class="sect2" title="2.4.4. Datenbankbenutzer anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Datenbankbenutzer-anlegen"></a>2.4.4. Datenbankbenutzer anlegen</h3></div></div></div><p>Wenn Sie nicht den Datenbanksuperuser &#8220;postgres&#8221; zum Zugriff
+        benutzen wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer
+        anlegen. Ein Beispiel, wie Sie einen neuen Benutzer anlegen
+        können:</p><pre class="programlisting">su - postgres createuser -d -P lxoffice</pre><p>Wenn Sie später einen Datenbankzugriff konfigurieren, verändern
+        Sie den evtl. voreingestellten Benutzer &#8220;postgres&#8221; auf &#8220;lxoffice&#8221; bzw.
+        den hier gewählten Benutzernamen.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s03.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s05.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.3. Lx-Office-Konfigurationsdatei&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.5. Webserver-Konfiguration</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s05.html b/doc/html/ch02s05.html
new file mode 100644 (file)
index 0000000..f1cb228
--- /dev/null
@@ -0,0 +1,103 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.5. Webserver-Konfiguration</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s04.html" title="2.4. Anpassung der PostgreSQL-Konfiguration"><link rel="next" href="ch02s06.html" title="2.6. Der Task-Server"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.5. Webserver-Konfiguration</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s04.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s06.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.5. Webserver-Konfiguration"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Apache-Konfiguration"></a>2.5. Webserver-Konfiguration</h2></div></div></div><div class="sect2" title="2.5.1. Grundkonfiguration mittels CGI"><div class="titlepage"><div><div><h3 class="title"><a name="d0e508"></a>2.5.1. Grundkonfiguration mittels CGI</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="../../../../system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Für einen deutlichen Performanceschub sorgt die Ausführung
+          mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
+          <a class="xref" href="ch02s05.html#Apache-Konfiguration.FCGI" title="2.5.2. Konfiguration für FastCGI/FCGI">Konfiguration für FastCGI/FCGI</a> beschrieben.</p></td></tr></table></div><p>Der Zugriff auf das Programmverzeichnis muss in der Apache
+        Webserverkonfigurationsdatei <code class="literal">httpd.conf</code> eingestellt
+        werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
+        anderen Datei hinzu, die beim Starten des Webservers eingelesen
+        wird:</p><pre class="programlisting">AddHandler cgi-script .pl
+Alias /lx-erp/ /var/www/lx-erp/
+
+&lt;Directory /var/www/lx-erp&gt;
+ Options ExecCGI
+ Includes FollowSymlinks
+&lt;/Directory&gt;
+
+&lt;Directory /var/www/lx-erp/users&gt;
+ Order Deny,Allow
+ Deny from All
+&lt;/Directory&gt;</pre><p>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
+        das Lx-Office-Archiv entpacket haben.</p><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="../../../../system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Vor den einzelnen Optionen muss bei einigen Distributionen ein Plus &#8216;<code class="literal">+</code>&#8217; gesetzt werden.</p></td></tr></table></div><p>Auf einigen Webservern werden manchmal die Grafiken und
+        Style-Sheets nicht ausgeliefert. In solchen Fällen hat es oft
+        geholfen, die folgende Option in die Konfiguration aufzunehmen:</p><pre class="programlisting">EnableSendfile Off</pre></div><div class="sect2" title="2.5.2. Konfiguration für FastCGI/FCGI"><div class="titlepage"><div><div><h3 class="title"><a name="Apache-Konfiguration.FCGI"></a>2.5.2. Konfiguration für FastCGI/FCGI</h3></div></div></div><div class="sect3" title="2.5.2.1. Was ist FastCGI?"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.WasIstEs"></a>2.5.2.1. Was ist FastCGI?</h4></div></div></div><p>Direkt aus <a class="ulink" href="http://de.wikipedia.org/wiki/FastCGI" target="_top">Wikipedia</a>
+          kopiert:</p><p>
+                  [<span class="citation"> FastCGI ist ein Standard für die Einbindung
+          externer Software zur Generierung dynamischer Webseiten in einem
+          Webserver. FastCGI ist vergleichbar zum Common Gateway Interface
+          (CGI), wurde jedoch entwickelt, um dessen Performance-Probleme zu
+          umgehen. </span>]
+               </p></div><div class="sect3" title="2.5.2.2. Warum FastCGI?"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.Warum"></a>2.5.2.2. Warum FastCGI?</h4></div></div></div><p>Perl Programme (wie Lx-Office eines ist) werden nicht statisch
+          kompiliert. Stattdessen werden die Quelldateien bei jedem Start
+          übersetzt, was bei kurzen Laufzeiten einen Großteil der Laufzeit
+          ausmacht. Während SQL Ledger einen Großteil der Funktionalität in
+          einzelne Module kapselt, um immer nur einen kleinen Teil laden zu
+          müssen, ist die Funktionalität von Lx-Office soweit gewachsen, dass
+          immer mehr Module auf den Rest des Programms zugreifen. Zusätzlich
+          benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
+          entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies
+          führt dazu dass ein Lx-Office Aufruf der Kernmasken mittlerweile
+          deutlich länger dauert als früher, und dass davon 90% für das Laden
+          der Module verwendet wird.</p><p>Mit FastCGI werden nun die Module einmal geladen, und danach
+          wird nur die eigentliche Programmlogik ausgeführt.</p></div><div class="sect3" title="2.5.2.3. Getestete Kombinationen aus Webservern und Plugin"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.WebserverUndPlugin"></a>2.5.2.3. Getestete Kombinationen aus Webservern und Plugin</h4></div></div></div><p>Folgende Kombinationen sind getestet:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Apache 2.2.11 (Ubuntu) und mod_fcgid.</p></li><li class="listitem"><p>Apache 2.2.11 (Ubuntu) und mod_fastcgi.</p></li></ul></div><p>Dabei wird mod_fcgid empfohlen, weil mod_fastcgi seit geraumer
+          Zeit nicht mehr weiter entwickelt wird. Im Folgenden wird auf
+          mod_fastcgi nicht mehr explizit eingegangen.</p><p>Als Perl Backend wird das Modul <code class="filename">FCGI.pm</code>
+          verwendet.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="../../../../system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>
+             FCGI 0.69 und höher ist extrem strict in der Behandlung von Unicode, und verweigert bestimmte Eingaben von Lx-Office. Falls es
+             Probleme mit Umlauten in Ihrere Installation gibt, muss auf die Vorgängerversion FCGI 0.68 ausgewichen werden.
+            </p><p>
+             Mit CPAN lässt sie sich die Vorgängerversion wie folgt installieren:
+            </p><pre class="programlisting">force install M/MS/MSTROUT/FCGI-0.68.tar.gz</pre></td></tr></table></div></div><div class="sect3" title="2.5.2.4. Konfiguration des Webservers"><div class="titlepage"><div><div><h4 class="title"><a name="Apache-Konfiguration.FCGI.Konfiguration"></a>2.5.2.4. Konfiguration des Webservers</h4></div></div></div><p>Bevor Sie versuchen, eine Lx-Office Installation unter FCGI
+          laufen zu lassen, empfliehlt es sich die Installation ersteinmal
+          unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
+          debuggen die beim ersten aufsetzen auftreten können. Sollte die
+          Installation schon funktionieren, lesen Sie weiter.</p><p>Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
+          unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:</p><pre class="programlisting">a2enmod fcgid</pre><p>Die Konfiguration für die Verwendung von Lx-Office mit FastCGI
+          erfolgt durch Anpassung der vorhandenen <code class="function">Alias</code>-
+          und <code class="function">Directory</code>-Direktiven. Dabei wird zwischen
+          dem Installationspfad von Lx-Office im Dateisystem
+          ("<code class="filename">/path/to/lx-office-erp</code>") und der URL
+          unterschieden, unter der Lx-Office im Webbrowser erreichbar ist
+          ("<code class="filename">/url/for/lx-office-erp</code>").</p><p>Folgender Konfigurationsschnipsel funktioniert mit
+          mod_fastcgi:</p><pre class="programlisting">AliasMatch ^/url/for/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fcgi
+Alias       /url/for/lx-office-erp/          /path/to/lx-office-erp/
+
+&lt;Directory /path/to/lx-office-erp&gt;
+  AllowOverride All
+  Options ExecCGI Includes FollowSymlinks
+  Order Allow,Deny
+  Allow from All
+&lt;/Directory&gt;
+
+&lt;DirectoryMatch /path/to/lx-office-erp/users&gt;
+  Order Deny,Allow
+  Deny from All
+&lt;/DirectoryMatch&gt;</pre><p>Seit mod_fcgid-Version 2.6.3 gelten sehr kleine Grenzen für
+          die maximale Größe eines Requests. Diese sollte wie folgt
+          hochgesetzt werden:</p><pre class="programlisting">FcgidMaxRequestLen 10485760</pre><p>Das ganze sollte dann so aussehen:</p><pre class="programlisting">AddHandler fcgid-script .fpl
+AliasMatch ^/url/for/lx-office-erp/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
+Alias       /url/for/lx-office-erp/          /path/to/lx-office-erp/
+FcgidMaxRequestLen 10485760
+
+&lt;Directory /path/to/lx-office-erp&gt;
+  AllowOverride All
+  Options ExecCGI Includes FollowSymlinks
+  Order Allow,Deny
+  Allow from All
+&lt;/Directory&gt;
+
+&lt;DirectoryMatch /path/to/lx-office-erp/users&gt;
+  Order Deny,Allow
+  Deny from All
+&lt;/DirectoryMatch&gt;</pre><p>Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle
+          Zugriffe auf die einzelnen Scripte werden auf diesen umgeleitet.
+          Dadurch, dass zur Laufzeit öfter mal Scripte neu geladen werden,
+          gibt es hier kleine Performance-Einbußen.</p><p>Es ist möglich, die gleiche Lx-Office Version parallel unter
+          CGI und FastCGI zu betreiben. Dafür bleiben die Directorydirektiven
+          wie oben beschrieben, die URLs werden aber umgeleitet:</p><pre class="programlisting"># Zugriff über CGI
+Alias       /url/for/lx-office-erp                /path/to/lx-office-erp
+
+# Zugriff mit mod_fcgid:
+AliasMatch ^/url/for/lx-office-erp-fcgid/[^/]+\.pl /path/to/lx-office-erp/dispatcher.fpl
+Alias       /url/for/lx-office-erp-fcgid/          /path/to/lx-office-erp/</pre><p>Dann ist unter <code class="filename">/url/for/lx-office-erp/</code> die normale Version erreichbar, und unter
+          <code class="constant">/url/for/lx-office-erp-fcgid/</code> die FastCGI-Version.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s04.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s06.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.4. Anpassung der PostgreSQL-Konfiguration&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.6. Der Task-Server</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s06.html b/doc/html/ch02s06.html
new file mode 100644 (file)
index 0000000..4fe9a32
--- /dev/null
@@ -0,0 +1,62 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.6. Der Task-Server</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s05.html" title="2.5. Webserver-Konfiguration"><link rel="next" href="ch02s07.html" title="2.7. Benutzerauthentifizierung und Administratorpasswort"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.6. Der Task-Server</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s07.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.6. Der Task-Server"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="config.task-server"></a>2.6. Der Task-Server</h2></div></div></div><p>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
+      regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese zu
+      festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess
+      wird bisher nur für die Erzeugung der wiederkehrenden Rechnungen
+      benutzt, wird aber in Zukunft deutlich mehr Aufgaben übertragen
+      bekommen.</p><div class="sect2" title="2.6.1. Verfügbare und notwendige Konfigurationsoptionen"><div class="titlepage"><div><div><h3 class="title"><a name="Konfiguration-des-Task-Servers"></a>2.6.1. Verfügbare und notwendige Konfigurationsoptionen</h3></div></div></div><p>Die Konfiguration erfolgt über den Abschnitt
+        <code class="literal">[task_server]</code> in der Datei
+        <code class="filename">config/lx_office.conf</code>. Die dort verfügbaren
+        Optionen sind:</p><div class="variablelist"><dl><dt><span class="term">
+                     <code class="varname">login</code>
+                  </span></dt><dd><p>
+            gültiger Lx-Office-Benutzername, der benutzt wird, um die zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss in
+            der Administration angelegt werden. Diese Option muss angegeben werden.
+           </p></dd><dt><span class="term">
+                     <code class="varname">run_as</code>
+                  </span></dt><dd><p>
+             Wird der Server vom Systembenutzer <code class="literal">root</code> gestartet, so wechselt er auf den mit <code class="literal">run_as</code>
+             angegebenen Systembenutzer.  Der Systembenutzer muss dieselben Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
+             (siehe see <a class="xref" href="ch02s02.html" title="2.2. Manuelle Installation des Programmpaketes">Manuelle Installation des Programmpaketes</a>). Daher ist es sinnvoll, hier denselben Systembenutzer
+             einzutragen, unter dem auch der Webserver läuft.
+            </p></dd><dt><span class="term">
+                     <code class="varname">debug</code>
+                  </span></dt><dd><p>
+             Schaltet Debug-Informationen an und aus.
+            </p></dd></dl></div></div><div class="sect2" title="2.6.2. Automatisches Starten des Task-Servers beim Booten"><div class="titlepage"><div><div><h3 class="title"><a name="Einbinden-in-den-Boot-Prozess"></a>2.6.2. Automatisches Starten des Task-Servers beim Booten</h3></div></div></div><p>Der Task-Server verhält sich von seinen Optionen her wie ein
+        reguläres SystemV-kompatibles Boot-Script. Außerdem wechselt er beim
+        Starten automatisch in das Lx-Office-Installationsverzeichnis.</p><p>Deshalb ist es möglich, ihn durch Setzen eines symbolischen
+        Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
+        einzubinden. Da das bei neueren Linux-Distributionen aber nicht
+        zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
+        anstelle eines symbolischen Links verwendet werden können.</p><div class="sect3" title="2.6.2.1. SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora Core)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e692"></a>2.6.2.1. SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora
+          Core)</h4></div></div></div><p>Kopieren Sie die Datei
+          <code class="filename">scripts/boot/system-v/lx-office-task-server</code>
+          nach <code class="filename">/etc/init.d/lx-office-task-server</code>. Passen
+          Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
+          <code class="literal">DAEMON=....</code>). Binden Sie das Script in den
+          Boot-Prozess ein. Dies ist distributionsabhängig:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Debian-basierende Systeme:</p><pre class="programlisting">update-rc.d lx-office-task-server defaults
+# Nur bei Debian Squeeze und neuer:
+insserv lx-office-task-server</pre></li><li class="listitem"><p>OpenSuSE und Fedora Core:</p><pre class="programlisting">chkconfig --add lx-office-task-server</pre></li></ul></div><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet werden: <span class="command"><strong>/etc/init.d/lx-office-task-server
+          start</strong></span>
+               </p></div><div class="sect3" title="2.6.2.2. Upstart-basierende Systeme (z.B. Ubuntu)"><div class="titlepage"><div><div><h4 class="title"><a name="d0e722"></a>2.6.2.2. Upstart-basierende Systeme (z.B. Ubuntu)</h4></div></div></div><p>Kopieren Sie die Datei
+          <code class="filename">scripts/boot/upstart/lx-office-task-server.conf</code>
+          nach <code class="filename">/etc/init/lx-office-task-server.conf</code>.
+          Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
+          <code class="literal">exec ....</code>).</p><p>Danach kann der Task-Server mit dem folgenden Befehl gestartet werden: <span class="command"><strong>service lx-office-task-server
+          start</strong></span>
+               </p></div></div><div class="sect2" title="2.6.3. Wie der Task-Server gestartet und beendet wird"><div class="titlepage"><div><div><h3 class="title"><a name="Prozesskontrolle"></a>2.6.3. Wie der Task-Server gestartet und beendet wird</h3></div></div></div><p>Der Task-Server wird wie folgt kontrolliert:</p><pre class="programlisting">./scripts/task_server.pl Befehl</pre><p>
+               <code class="literal">Befehl</code> ist dabei eine der folgenden
+        Optionen:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+                     <code class="literal">start</code> startet eine neue Instanz des
+            Task-Servers. Die Prozess-ID wird innerhalb des
+            <code class="filename">users</code>-Verzeichnisses abgelegt.</p></li><li class="listitem"><p>
+                     <code class="literal">stop</code> beendet einen laufenden
+            Task-Server.</p></li><li class="listitem"><p>
+                     <code class="literal">restart</code> beendet und startet ihn
+            neu.</p></li><li class="listitem"><p>
+                     <code class="literal">status</code> berichtet, ob der Task-Server
+            läuft.</p></li></ul></div><p>Der Task-Server wechselt beim Starten automatisch in das
+        Lx-Office-Installationsverzeichnis.</p><p>Dieselben Optionen können auch für die SystemV-basierenden
+        Runlevel-Scripte benutzt werden (siehe oben).</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s05.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s07.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.5. Webserver-Konfiguration&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.7. Benutzerauthentifizierung und Administratorpasswort</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s07.html b/doc/html/ch02s07.html
new file mode 100644 (file)
index 0000000..cad0eb8
--- /dev/null
@@ -0,0 +1,71 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.7. Benutzerauthentifizierung und Administratorpasswort</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s06.html" title="2.6. Der Task-Server"><link rel="next" href="ch02s08.html" title="2.8. Benutzer- und Gruppenverwaltung"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.7. Benutzerauthentifizierung und Administratorpasswort</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s06.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s08.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.7. Benutzerauthentifizierung und Administratorpasswort"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Benutzerauthentifizierung-und-Administratorpasswort"></a>2.7. Benutzerauthentifizierung und Administratorpasswort</h2></div></div></div><p>Informationen über die Einrichtung der Benutzerauthentifizierung,
+      über die Verwaltung von Gruppen und weitere Einstellungen</p><div class="sect2" title="2.7.1. Grundlagen zur Benutzerauthentifizierung"><div class="titlepage"><div><div><h3 class="title"><a name="Grundlagen-zur-Benutzerauthentifizierung"></a>2.7.1. Grundlagen zur Benutzerauthentifizierung</h3></div></div></div><p>Lx-Office verwaltet die Benutzerinformationen in einer
+        Datenbank, die im folgenden &#8220;Authentifizierungsdatenbank&#8221; genannt
+        wird. Für jeden Benutzer kann dort eine eigene Datenbank für die
+        eigentlichen Finanzdaten hinterlegt sein. Diese beiden Datenbanken
+        können, müssen aber nicht unterschiedlich sein.</p><p>Im einfachsten Fall gibt es für Lx-Office nur eine einzige
+        Datenbank, in der sowohl die Benutzerinformationen als auch die Daten
+        abgelegt werden.</p><p>Zusätzlich ermöglicht es Lx-Office, dass die Benutzerpasswörter
+        entweder gegen die Authentifizierungsdatenbank oder gegen einen
+        LDAP-Server überprüft werden.</p><p>Welche Art der Passwortüberprüfung Lx-Office benutzt und wie
+        Lx-Office die Authentifizierungsdatenbank erreichen kann, wird in der
+        Konfigurationsdatei <code class="filename">config/lx_office.conf</code>
+        festgelegt. Diese muss bei der Installation und bei einem Upgrade von
+        einer Version vor v2.6.0 angelegt werden. Eine
+        Beispielkonfigurationsdatei
+        <code class="filename">config/lx_office.conf.default</code> existiert, die als
+        Vorlage benutzt werden kann.</p></div><div class="sect2" title="2.7.2. Administratorpasswort"><div class="titlepage"><div><div><h3 class="title"><a name="Administratorpasswort"></a>2.7.2. Administratorpasswort</h3></div></div></div><p>Das Passwort, das zum Zugriff auf das Aministrationsinterface benutzt wird, wird ebenfalls in dieser Datei gespeichert. Es
+        kann auch nur dort und nicht mehr im Administrationsinterface selber geändert werden. Der Parameter dazu heißt
+        <code class="varname">admin_password</code> im Abschnitt <code class="varname">[authentication]</code>.</p></div><div class="sect2" title="2.7.3. Authentifizierungsdatenbank"><div class="titlepage"><div><div><h3 class="title"><a name="Authentifizierungsdatenbank"></a>2.7.3. Authentifizierungsdatenbank</h3></div></div></div><p>Die Verbindung zur Authentifizierungsdatenbank wird mit den Parametern in <code class="varname">[authentication/database]</code>
+        konfiguriert.  Hier sind die folgenden Parameter anzugeben:</p><div class="variablelist"><dl><dt><span class="term">
+                     <code class="literal">host</code>
+                  </span></dt><dd><p>Der Rechnername oder die IP-Adresse des Datenbankservers</p></dd><dt><span class="term">
+                     <code class="literal">port</code>
+                  </span></dt><dd><p>Die Portnummer des Datenbankservers, meist 5432</p></dd><dt><span class="term">
+                     <code class="literal">db</code>
+                  </span></dt><dd><p>Der Name der Authentifizierungsdatenbank</p></dd><dt><span class="term">
+                     <code class="literal">user</code>
+                  </span></dt><dd><p>Der Benutzername, mit dem sich Lx-Office beim Datenbankserver anmeldet (z.B. "<code class="literal">postgres</code>")</p></dd><dt><span class="term">
+                     <code class="literal">password</code>
+                  </span></dt><dd><p>Das Passwort für den Datenbankbenutzer</p></dd></dl></div><p>Die Datenbank muss noch nicht existieren. Lx-Office kann sie
+        automatisch anlegen (mehr dazu siehe unten).</p></div><div class="sect2" title="2.7.4. Passwortüberprüfung"><div class="titlepage"><div><div><h3 class="title"><a name="Passwort%C3%BCberpr%C3%BCfung"></a>2.7.4. Passwortüberprüfung</h3></div></div></div><p>Lx-Office unterstützt Passwortüberprüfung auf zwei Arten: gegen die Authentifizierungsdatenbank und gegen einen externen LDAP-
+        oder Active-Directory-Server. Welche davon benutzt wird, regelt der Parameter <code class="varname">module</code> im Abschnitt
+        <code class="varname">[authentication]</code>.</p><p>Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank gespeichert werden, so muss der Parameter
+        <code class="varname">module</code> den Wert <code class="literal">DB</code> enthalten. In diesem Fall können sowohl der Administrator als auch die
+        Benutzer selber ihre Psaswörter in Lx-Office ändern.</p><p>Soll hingegen ein externer LDAP- oder Active-Directory-Server benutzt werden, so muss der Parameter <code class="varname">module</code>
+        auf <code class="literal">LDAP</code> gesetzt werden. In diesem Fall müssen zusätzliche Informationen über den LDAP-Server im Abschnitt
+        <code class="literal">[authentication/ldap]</code> angegeben werden:</p><div class="variablelist"><dl><dt><span class="term">
+                     <code class="literal">host</code>
+                  </span></dt><dd><p>Der Rechnername oder die IP-Adresse des LDAP- oder Active-Directory-Servers. Diese Angabe ist zwingend
+            erforderlich.</p></dd><dt><span class="term">
+                     <code class="literal">port</code>
+                  </span></dt><dd><p>Die Portnummer des LDAP-Servers; meist 389.</p></dd><dt><span class="term">
+                     <code class="literal">tls</code>
+                  </span></dt><dd><p>Wenn Verbindungsverschlüsselung gewünscht ist, so diesen Wert auf &#8216;<code class="literal">1</code>&#8217; setzen, andernfalls auf
+            &#8216;<code class="literal">0</code>&#8217; belassen</p></dd><dt><span class="term">
+                     <code class="literal">attribute</code>
+                  </span></dt><dd><p>Das LDAP-Attribut, in dem der Benutzername steht, den der Benutzer eingegeben hat. Für Active-Directory-Server ist dies
+            meist &#8216;<code class="literal">sAMAccountName</code>&#8217;, für andere LDAP-Server hingegen &#8216;<code class="literal">uid</code>&#8217;. Diese Angabe ist zwingend
+            erforderlich.</p></dd><dt><span class="term">
+                     <code class="literal">base_dn</code>
+                  </span></dt><dd><p>Der Abschnitt des LDAP-Baumes, der durchsucht werden soll. Diese Angabe ist zwingend erforderlich.</p></dd><dt><span class="term">
+                     <code class="literal">filter</code>
+                  </span></dt><dd><p>Ein optionaler LDAP-Filter.  Enthält dieser Filter das Wort <code class="literal">&lt;%login%&gt;</code>, so wird dieses durch den
+            vom Benutzer eingegebenen Benutzernamen ersetzt. Andernfalls wird der LDAP-Baum nach einem Element durchsucht, bei dem das oben
+            angegebene Attribut mit dem Benutzernamen identisch ist.</p></dd><dt><span class="term">
+                     <code class="literal">bind_dn</code> und <code class="literal">bind_password</code>
+                  </span></dt><dd><p>Wenn der LDAP-Server eine Anmeldung erfordert, bevor er durchsucht werden kann (z.B. ist dies bei Active-Directory-Servern
+            der Fall), so kann diese hier angegeben werden. Für Active-Directory-Server kann als &#8216;<code class="literal">bind_dn</code>&#8217; entweder eine
+            komplette LDAP-DN wie z.B. &#8216;<code class="literal">cn=Martin Mustermann,cn=Users,dc=firmendomain</code>&#8217; auch nur der volle Name des
+            Benutzers eingegeben werden; in diesem Beispiel also &#8216;<code class="literal">Martin Mustermann</code>&#8217;.</p></dd></dl></div></div><div class="sect2" title="2.7.5. Name des Session-Cookies"><div class="titlepage"><div><div><h3 class="title"><a name="Name-des-Session-Cookies"></a>2.7.5. Name des Session-Cookies</h3></div></div></div><p>Sollen auf einem Server mehrere Lx-Office-Installationen aufgesetzt werden, so müssen die Namen der Session-Cookies für alle
+        Installationen unterschiedlich sein. Der Name des Cookies wird mit dem Parameter <code class="varname">cookie_name</code> im Abschnitt
+        <code class="varname">[authentication]</code>gesetzt.</p><p>Diese Angabe ist optional, wenn nur eine Installation auf dem
+        Server existiert.</p></div><div class="sect2" title="2.7.6. Anlegen der Authentifizierungsdatenbank"><div class="titlepage"><div><div><h3 class="title"><a name="Anlegen-der-Authentifizierungsdatenbank"></a>2.7.6. Anlegen der Authentifizierungsdatenbank</h3></div></div></div><p>Nachdem alle Einstellungen in
+        <code class="filename">config/lx_office.conf</code> vorgenommen wurden, muss
+        Lx-Office die Authentifizierungsdatenbank anlegen. Dieses geschieht
+        automatisch, wenn Sie sich im Administrationsmodul anmelden, das unter
+        der folgenden URL erreichbar sein sollte:</p><p>
+               <a class="ulink" href="http://localhost/lx-erp/admin.pl" target="_top">http://localhost/lx-erp/admin.pl</a>
+            </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s06.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s08.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.6. Der Task-Server&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.8. Benutzer- und Gruppenverwaltung</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s08.html b/doc/html/ch02s08.html
new file mode 100644 (file)
index 0000000..7a8f386
--- /dev/null
@@ -0,0 +1,78 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.8. Benutzer- und Gruppenverwaltung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s07.html" title="2.7. Benutzerauthentifizierung und Administratorpasswort"><link rel="next" href="ch02s09.html" title="2.9. Drucken mit Lx-Office"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.8. Benutzer- und Gruppenverwaltung</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s07.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s09.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.8. Benutzer- und Gruppenverwaltung"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Benutzer--und-Gruppenverwaltung"></a>2.8. Benutzer- und Gruppenverwaltung</h2></div></div></div><p>Nach der Installation müssen Benutzer, Gruppen und Datenbanken
+      angelegt werden. Dieses geschieht im Administrationsmenü, das Sie unter
+      folgender URL finden:</p><p>
+            <a class="ulink" href="http://localhost/lx-erp/admin.pl" target="_top">http://localhost/lx-erp/admin.pl</a>
+         </p><p>Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
+      <code class="filename">config/lx_office.conf</code> eingetragen haben.</p><div class="sect2" title="2.8.1. Zusammenhänge"><div class="titlepage"><div><div><h3 class="title"><a name="Zusammenh%C3%A4nge"></a>2.8.1. Zusammenhänge</h3></div></div></div><p>Lx-Office verwendet eine Datenbank zum Speichern all seiner
+        Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
+        mit Lx-Office arbeiten zu können, muss eine Person einen
+        Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
+        Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
+        möglich und normal, dass mehreren Benutzern die selbe Datenbank
+        zugewiesen wird, sodass sie alle mit den selben Daten arbeiten
+        können.</p><p>Die Basisdaten der Benutzer, die in der Administration
+        eingegeben werden können, werden in einer zweiten Datenbank
+        gespeichert, der bereits erwähnten Authentifizierungsdatenbank. Diese
+        ist also den Produktivdaten enthaltenden Datenbanken vorgeschaltet.
+        Pro Lx-Office-Installation gibt es nur eine
+        Authentifizierungsdatenbank, aber beliebig viele Datenbanken mit
+        Firmendaten.</p><p>Lx-Office kann seinen Benutzern Zugriff auf bestimmte
+        Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
+        gestattet, so werden der entsprechenden Menüpunkte auch nicht
+        angezeigt. Diese Rechte werden ebenfalls in der
+        Authentifizierungsdatenbank gespeichert.</p><p>Um Rechte verteilen zu können, verwendet Lx-Office ein
+        Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
+        erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
+        mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
+        Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
+        Benutzer Mitglied ist.</p><p>Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und
+        Benutzer angelegt werden sollten, lautet:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>Datenbank anlegen</p></li><li class="listitem"><p>Gruppen anlegen</p></li><li class="listitem"><p>Benutzer anlegen</p></li><li class="listitem"><p>Benutzer den Gruppen zuordnen</p></li></ol></div></div><div class="sect2" title="2.8.2. Datenbanken anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Datenbanken-anlegen"></a>2.8.2. Datenbanken anlegen</h3></div></div></div><p>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
+        den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
+        Beispielen ist dies &#8216;<code class="literal">lxoffice</code>&#8217;).</p><p>Wenn Sie für die Lx-Office-Installation nicht den europäischen
+        Schriftsatz ISO-8859-15 sondern UTF-8 (Unicode) benutzen wollen, so
+        müssen Sie vor dem Anlegen der Datenbank in der Datei
+        <code class="filename">config/lx_office.conf</code> die Variable
+        <code class="literal">dbcharset</code> im Abschnitt <code class="literal">system</code>
+        auf den Wert &#8216;<code class="literal">UTF-8</code>&#8217; setzen. Zusätzlich muss beim
+        Anlegen der Datenbank &#8216;<code class="literal">UTF-8 Unicode</code>&#8217; als
+        Schriftsatz ausgewählt werden.</p><p>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
+        verwenden müssen, da diese Einstellungen momentan global in Lx-Office
+        vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
+        Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
+        angelegt worden sein.</p></div><div class="sect2" title="2.8.3. Gruppen anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Gruppen-anlegen"></a>2.8.3. Gruppen anlegen</h3></div></div></div><p>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein
+        Name gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
+        Anlegen können Sie die verschiedenen Bereiche wählen, auf die
+        Mitglieder dieser Gruppe Zugriff haben sollen.</p><p>Benutzergruppen sind unabhängig von Datenbanken, da sie in der
+        Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
+        Datenbanken, die in dieser Installation verwaltet werden.</p></div><div class="sect2" title="2.8.4. Benutzer anlegen"><div class="titlepage"><div><div><h3 class="title"><a name="Benutzer-anlegen"></a>2.8.4. Benutzer anlegen</h3></div></div></div><p>Beim Anlegen von Benutzern werden für viele Parameter
+        Standardeinstellungen vorgenommen, die den Gepflogenheiten des
+        deutschen Raumes entsprechen.</p><p>Zwingend anzugeben sind der Loginname sowie die komplette
+        Datenbankkonfiguration. Wenn die Passwortauthentifizierung über die
+        Datenbank eingestellt ist, so kann hier auch das Benutzerpasswort
+        gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung
+        aktiv, so ist das Passwort-Feld deaktiviert.</p><p>In der Datenbankkonfiguration müssen die Zugriffsdaten einer der
+        eben angelegten Datenbanken eingetragen werden.</p></div><div class="sect2" title="2.8.5. Gruppenmitgliedschaften verwalten"><div class="titlepage"><div><div><h3 class="title"><a name="Gruppenmitgliedschaften-verwalten"></a>2.8.5. Gruppenmitgliedschaften verwalten</h3></div></div></div><p>Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den
+        Gruppen zugewiesen werden. Dazu gibt es zwei Möglichkeiten:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>In der Gruppenverwaltung wählt man eine Gruppe aus. Im
+            folgenden Dialog kann man dann einzeln die Benutzer der Gruppe
+            hinzufügen.</p></li><li class="listitem"><p>In der Gruppenverwaltung wählt man das Tool zur Verwaltung
+            der Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die
+            alle im System angelegten Gruppen und Benutzer enthält. Durch
+            Setzen der Häkchen wird der Benutzer in der ausgewählten Zeile der
+            Gruppe in der ausgewählten Spalte hinzugefügt.</p></li></ol></div></div><div class="sect2" title="2.8.6. Migration alter Installationen"><div class="titlepage"><div><div><h3 class="title"><a name="Migration-alter-Installationen"></a>2.8.6. Migration alter Installationen</h3></div></div></div><p>Wenn Lx-Office 2.6.2 über eine ältere Version installiert wird,
+        in der die Benutzerdaten noch im Dateisystem im Verzeichnis
+        <code class="literal">users</code> verwaltet wurden, so bietet Lx-Office die
+        Möglichkeit, diese Benutzerdaten automatisch in die
+        Authentifizierungsdatenbank zu übernehmen. Dies geschieht, wenn man
+        sich nach dem Update der Installation das erste Mal im
+        Administrationsbereich anmeldet. Findet Lx-Office die Datei
+        <code class="literal">users/members</code>, so wird der Migrationsprozess
+        gestartet.</p><p>Der Migrationsprozess ist nahezu vollautomatisch. Alle
+        Benutzerdaten können übernommen werden. Nach den Benutzerdaten bietet
+        Lx-Office noch die Möglichkeit an, dass automatisch eine
+        Benutzergruppe angelegt wird. Dieser Gruppe wird Zugriff auf alle
+        Funktionen von Lx-Office gewährt. Alle migrierten Benutzern werden
+        Mitglied in dieser Gruppe. Damit wird das Verhalten von Lx-Office bis
+        Version 2.4.3 inklusive wiederhergestellt, und die Benutzer können
+        sich sofort wieder anmelden und mit dem System arbeiten.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s07.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s09.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.7. Benutzerauthentifizierung und Administratorpasswort&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.9. Drucken mit Lx-Office</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s09.html b/doc/html/ch02s09.html
new file mode 100644 (file)
index 0000000..0328fdf
--- /dev/null
@@ -0,0 +1,27 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.9. Drucken mit Lx-Office</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s08.html" title="2.8. Benutzer- und Gruppenverwaltung"><link rel="next" href="ch02s10.html" title="2.10. OpenDocument-Vorlagen"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.9. Drucken mit Lx-Office</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s08.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s10.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.9. Drucken mit Lx-Office"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Drucken-mit-Lx-Office"></a>2.9. Drucken mit Lx-Office</h2></div></div></div><p>Das Drucksystem von Lx-Office benutzt von Haus aus LaTeX Vorlagen.
+      Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
+      einfachsten ist dazu eine <code class="literal">texlive</code> Installation. Unter
+      Debianoiden Betriebssystemen sind das die Pakete:</p><p>
+            <code class="literal">texlive-latex-base texlive-latex-extra
+      texlive-fonts-recommended</code>
+         </p><p>Diese hinteren beiden enthalten Bibliotheken und Schriftarten die
+      von den Standardvorlagen verwendet werden.</p><p>TODO: rpm Pakete.</p><p>In den allermeisten Installationen sollte drucken jetzt schon
+      funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange
+      Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite
+      die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum
+      Beispiel:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>! LaTeX Error: File `eurosym.sty' not found. Die entsprechende
+          LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem bei
+          Vorlagen aus der Community auf. Installieren Sie die entsprechenden
+          Pakete.</p></li><li class="listitem"><p>! Package inputenc Error: Unicode char \u8:桜 not set up for
+          use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
+          einer Standardinstallation exotische utf8 Zeichen zu drucken.
+          TeXLive unterstützt von Haus nur romanische Schriften und muss mit
+          diversen Tricks dazu gebracht werden andere Zeichen zu akzeptieren.
+          Adere TeX Systeme wie XeTeX schaffen hier Abhilfe.</p></li></ul></div><p>Wird garkein Fehler angezeigt sondern nur der Name des Templates,
+      heißt das normalerweise, dass das LaTeX Binary nicht gefunden wurde.
+      Prüfen Sie den Namen in der Konfiguration (Standard:
+      <code class="literal">pdflatex</code>), und stellen Sie sicher, dass pdflatex
+      (oder das von Ihnen verwendete System) vom Webserver ausgeführt werden
+      darf.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s08.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s10.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.8. Benutzer- und Gruppenverwaltung&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.10. OpenDocument-Vorlagen</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s10.html b/doc/html/ch02s10.html
new file mode 100644 (file)
index 0000000..83935f5
--- /dev/null
@@ -0,0 +1,56 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.10. OpenDocument-Vorlagen</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s09.html" title="2.9. Drucken mit Lx-Office"><link rel="next" href="ch02s11.html" title="2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.10. OpenDocument-Vorlagen</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s09.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s11.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.10. OpenDocument-Vorlagen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="OpenDocument-Vorlagen"></a>2.10. OpenDocument-Vorlagen</h2></div></div></div><p>Lx-Office unterstützt die Verwendung von Vorlagen im
+      OpenDocument-Format, wie es OpenOffice.org ab Version 2 erzeugt.
+      Lx-Office kann dabei sowohl neue OpenDocument-Dokumente als auch aus
+      diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
+      OpenDocument-Vorlagen zu aktivieren muss in der Datei
+      <code class="filename">config/lx_office.conf</code> die Variable
+      <code class="literal">opendocument</code> im Abschnitt
+      <code class="literal">print_templates</code> auf &#8216;<code class="literal">1</code>&#8217; stehen.
+      Dieses ist die Standardeinstellung.</p><p>Weiterhin muss in der Datei
+      <code class="filename">config/lx_office.conf</code> die Variable
+      <code class="literal">dbcharset</code> im Abschnitt <code class="literal">system</code> auf
+      die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der
+      Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen
+      "UTF-8".</p><p>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
+      weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
+      OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
+      neben OpenOffice.org ab Version 2 auch der &#8220;X virtual frame buffer&#8221;
+      (xvfb) installiert werden. Bei Debian ist er im Paket &#8220;xvfb&#8221; enthalten.
+      Andere Distributionen enthalten ihn in anderen Paketen.</p><p>Nach der Installation müssen in der Datei
+      <code class="filename">config/lx_config.conf</code> zwei weitere Variablen
+      angepasst werden: <code class="literal">openofficeorg_writer</code> muss den
+      vollständigen Pfad zur OpenOffice.org Writer-Anwendung enthalten.
+      <code class="literal">xvfb</code> muss den Pfad zum &#8220;X virtual frame buffer&#8221;
+      enthalten. Beide stehen im Abschnitt
+      <code class="literal">applications</code>.</p><p>Zusätzlich gibt es zwei verschiedene Arten, wie Lx-Office mit
+      OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn die
+      Variable <code class="literal">$openofficeorg_daemon</code> gesetzt ist, startet
+      ein OpenOffice, das auch nach der Umwandlung des Dokumentes gestartet
+      bleibt. Bei weiteren Umwandlungen wird dann diese laufende Instanz
+      benutzt. Der Vorteil ist, dass die Zeit zur Umwandlung deutlich
+      reduziert wird, weil nicht für jedes Dokument ein OpenOffice gestartet
+      werden muss. Der Nachteil ist, dass diese Methode Python und die
+      Python-UNO-Bindings benötigt, die Bestandteil von OpenOffice 2
+      sind.</p><p>Ist <code class="literal">$openofficeorg_daemon</code> nicht gesetzt, so
+      wird für jedes Dokument OpenOffice neu gestartet und die Konvertierung
+      mit Hilfe eines Makros durchgeführt. Dieses Makro muss in der
+      Dokumentenvorlage enthalten sein und
+      &#8220;Standard.Conversion.ConvertSelfToPDF()&#8221; heißen. Die Beispielvorlage
+      &#8216;<code class="literal">templates/mastertemplates/German/invoice.odt</code>&#8217;
+      enthält ein solches Makro, das in jeder anderen Dokumentenvorlage
+      ebenfalls enthalten sein muss.</p><p>Als letztes muss herausgefunden werden, welchen Namen
+      OpenOffice.org Writer dem Verzeichnis mit den Benutzereinstellungen
+      gibt. Unter Debian ist dies momentan
+      <code class="literal">~/.openoffice.org2</code>. Sollte der Name bei Ihrer
+      OpenOffice.org-Installation anders sein, so muss das Verzeichnis
+      <code class="literal">users/.openoffice.org2</code> entsprechend umbenannt werden.
+      Ist der Name z.B. einfach nur <code class="literal">.openoffice</code>, so wäre
+      folgender Befehl auszuführen:</p><p>
+            <code class="literal">mv users/.openoffice.org2
+      users/.openoffice</code>
+         </p><p>Dieses Verzeichnis, wie auch das komplette
+      <code class="literal">users</code>-Verzeichnis, muss vom Webserver beschreibbar
+      sein. Dieses wurde bereits erledigt (siehe <a class="xref" href="ch02s02.html" title="2.2. Manuelle Installation des Programmpaketes">Manuelle Installation des Programmpaketes</a>), kann aber erneut
+      überprüft werden, wenn die Konvertierung nach PDF fehlschlägt.</p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s09.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s11.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.9. Drucken mit Lx-Office&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s11.html b/doc/html/ch02s11.html
new file mode 100644 (file)
index 0000000..3856d30
--- /dev/null
@@ -0,0 +1,59 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s10.html" title="2.10. OpenDocument-Vorlagen"><link rel="next" href="ch02s12.html" title="2.12. Lx-Office ERP verwenden"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s10.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch02s12.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="config.eur"></a>2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR</h2></div></div></div><div class="sect2" title="2.11.1. Einführung"><div class="titlepage"><div><div><h3 class="title"><a name="config.eur.introduction"></a>2.11.1. Einführung</h3></div></div></div><p>
+        Lx-Office besaß bis inklusive Version 2.6.3 einen Konfigurationsparameter namens <code class="varname">eur</code>, der sich in der
+        Konfigurationsdatei <code class="filename">config/lx_office.conf</code> befindet. Somit galt er für alle Mandanten, die in dieser
+        Installation benutzt wurden.
+       </p><p>
+        Mit der nachfolgenden Version wurde der Parameter zum Einen in die Mandantendatenbank verschoben und dabei auch gleich in drei
+        Einzelparameter aufgeteilt, mit denen sich das Verhalten genauer steuern lässt.
+       </p></div><div class="sect2" title="2.11.2. Konfigurationsparameter"><div class="titlepage"><div><div><h3 class="title"><a name="config.eur.parameters"></a>2.11.2. Konfigurationsparameter</h3></div></div></div><p>
+        Es gibt drei Parameter, die die Gewinnermittlungsart, Versteuerungsart und die Warenbuchungsmethode regeln:
+       </p><div class="variablelist"><dl><dt><span class="term">
+                     <code class="varname">profit_determination</code>
+                  </span></dt><dd><p>
+           Dieser Parameter legt die Berechnungsmethode für die Gewinnermittlung fest. Er enthält entweder <code class="literal">balance</code> für
+           Betriebsvermögensvergleich/Bilanzierung oder <code class="literal">income</code> für die Einnahmen-Überschuss-Rechnung.
+          </p></dd><dt><span class="term">
+                     <code class="varname">accounting_method</code>
+                  </span></dt><dd><p>
+           Dieser Parameter steuert die Buchungs- und Berechnungsmethoden für die Versteuerungsart. Er enthält entweder
+           <code class="literal">accrual</code> für die Soll-Versteuerung oder <code class="literal">cash</code> für die Ist-Versteuerung.
+          </p></dd><dt><span class="term">
+                     <code class="varname">inventory_system</code>
+                  </span></dt><dd><p>
+           Dieser Parameter legt die Warenbuchungsmethode fest. Er enthält entweder <code class="literal">perpetual</code> für die Bestandsmethode
+           oder <code class="literal">periodic</code> für die Aufwandsmethode.
+          </p></dd></dl></div><p>
+        Zum Vergleich der Funktionalität bis und nach 2.6.3: <code class="varname">eur</code> = 1 bedeutete Einnahmen-Überschuss-Rechnung,
+        Ist-Versteuerung und Aufwandsmethode. <code class="varname">eur</code> = 0 bedeutete hingegen Bilanzierung, Soll-Versteuerung und
+        Bestandsmethode.
+       </p><p>
+        Die Konfiguration "<code class="varname">eur</code>" unter <code class="varname">[system]</code> in der <a class="link" href="ch02s03.html" title="2.3. Lx-Office-Konfigurationsdatei">Konfigurationsdatei</a> 
+               <code class="filename">config/lx_office.conf</code> wird nun nicht mehr benötigt und
+        kann entfernt werden. Dies muss manuell geschehen.
+       </p></div><div class="sect2" title="2.11.3. Festlegen der Parameter"><div class="titlepage"><div><div><h3 class="title"><a name="config.eur.setting-parameters"></a>2.11.3. Festlegen der Parameter</h3></div></div></div><p>
+        Beim Anlegen eines neuen Mandanten bzw. einer neuen Datenbank in der Admininstration können diese Optionen nun unabhängig
+        voneinander eingestellt werden.
+       </p><p>
+        Beim Upgrade bestehender Mandanten wird eur ausgelesen und die Variablen werden so gesetzt, daß sich an der Funktionalität nichts
+        ändert.
+       </p><p>
+        Die aktuelle Konfiguration wird unter Nummernkreise und Standardkonten unter dem neuen Punkt "Einstellungen" angezeigt (read-only).
+        Eine spätere Änderung ist für einen bestehenden Mandanten nicht mehr möglich. Dies war auch vorher nicht möglich, bzw. vorhandene
+        Daten wurden so belassen und haben damit die Ergebnisse verfälscht.
+       </p></div><div class="sect2" title="2.11.4. Bemerkungen zu Bestandsmethode"><div class="titlepage"><div><div><h3 class="title"><a name="config.eur.inventory-system-perpetual"></a>2.11.4. Bemerkungen zu Bestandsmethode</h3></div></div></div><p>
+        Die Bestandsmethode ist eigentlich eine sehr elegante Methode, funktioniert in Lx-Office aber nur unter bestimmten Bedingungen:
+        Voraussetzung ist, daß auch immer alle Einkaufsrechnungen gepflegt werden, und man beim Jahreswechsel nicht mit einer leeren
+        Datenbank anfängt, da bei jedem Verkauf anhand der gesamten Rechnungshistorie der Einkaufswert der Ware nach dem FIFO-Prinzip aus
+        den Einkaufsrechnungen berechnet wird.
+       </p><p>
+        Die Bestandsmethode kann vom Prinzip her also nur funktioneren, wenn man mit den Buchungen bei Null anfängt, und man kann auch nicht
+        im laufenden Betrieb von der Aufwandsmethode zur Bestandsmethode wechseln.
+       </p></div><div class="sect2" title="2.11.5. Bekannte Probleme"><div class="titlepage"><div><div><h3 class="title"><a name="config.eur.knonw-issues"></a>2.11.5. Bekannte Probleme</h3></div></div></div><p>
+        Bei bestimmten Berichten kann man derzeit noch inviduell einstellen, ob man nach Ist- oder Sollversteuerung auswertet, und es werden
+        im Code Variablen wie $accrual oder $cash gesetzt. Diese Codestellen wurden noch nicht angepasst, sondern nur die, wo bisher
+        die Konfigurationsvariable <code class="varname">$::lx_office_conf{system}-&gt;{eur}</code> ausgewertet wurde.
+       </p><p>
+        Es fehlen Hilfetext beim Neuanlegen eines Mandanten, was die Optionen bewirken, z.B. mit zwei Standardfällen.
+       </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s10.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch02s12.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.10. OpenDocument-Vorlagen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;2.12. Lx-Office ERP verwenden</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch02s12.html b/doc/html/ch02s12.html
new file mode 100644 (file)
index 0000000..a2cd592
--- /dev/null
@@ -0,0 +1,8 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>2.12. Lx-Office ERP verwenden</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch02.html" title="Kapitel 2. Installation und Grundkonfiguration"><link rel="prev" href="ch02s11.html" title="2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR"><link rel="next" href="ch03.html" title="Kapitel 3. Features und Funktionen"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">2.12. Lx-Office ERP verwenden</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s11.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="2.12. Lx-Office ERP verwenden"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="Lx-Office-ERP-verwenden"></a>2.12. Lx-Office ERP verwenden</h2></div></div></div><p>Nach erfolgreicher Installation ist der Loginbildschirm unter
+      folgender URL erreichbar:</p><p>
+            <a class="ulink" href="http://localhost/lx-office-erp/login.pl" target="_top">http://localhost/lx-office-erp/login.pl</a>
+         </p><p>Die Administrationsseite erreichen Sie unter:</p><p>
+            <a class="ulink" href="http://localhost/lx-office-erp/admin.pl" target="_top">http://localhost/lx-office-erp/admin.pl</a>
+         </p></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s11.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;Kapitel 3. Features und Funktionen</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch03.html b/doc/html/ch03.html
new file mode 100644 (file)
index 0000000..6cf2cef
--- /dev/null
@@ -0,0 +1,58 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>Kapitel 3. Features und Funktionen</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch02s12.html" title="2.12. Lx-Office ERP verwenden"><link rel="next" href="ch03s02.html" title="3.2. Dokumentenvorlagen und verfügbare Variablen"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 3. Features und Funktionen</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch02s12.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 3. Features und Funktionen"><div class="titlepage"><div><div><h2 class="title"><a name="features"></a>Kapitel 3. Features und Funktionen</h2></div></div></div><div class="sect1" title="3.1. Wiederkehrende Rechnungen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="features.periodic-invoices"></a>3.1. Wiederkehrende Rechnungen</h2></div></div></div><div class="sect2" title="3.1.1. Einführung"><div class="titlepage"><div><div><h3 class="title"><a name="features.periodic-invoices.introduction"></a>3.1.1. Einführung</h3></div></div></div><p>
+       Wiederkehrende Rechnungen werden als normale Aufträge definiert und konfiguriert, mit allen dazugehörigen Kunden- und
+       Artikelangaben. Die konfigurierten Aufträge werden später automatisch in Rechnungen umgewandelt, so als ob man den Workflow benutzen
+       würde, und auch die Auftragsnummer wird übernommen, sodass alle wiederkehrenden Rechnungen, die aus einem Auftrag erstellt wurden,
+       später leicht wiederzufinden sind.
+      </p></div><div class="sect2" title="3.1.2. Konfiguration"><div class="titlepage"><div><div><h3 class="title"><a name="features.periodic-invoices.configuration"></a>3.1.2. Konfiguration</h3></div></div></div><p>
+       Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren, findet sich beim Bearbeiten des Auftrags ein neuer Knopf
+       "Konfigurieren", der ein neues Fenster öffnet, in dem man die nötigen Parameter einstellen kann.  Hinter dem Knopf wird außerdem noch
+       angezeigt, ob der Auftrag als wiederkehrende Rechnung konfiguriert ist oder nicht.
+      </p><p>
+       Folgende Parameter kann man konfigurieren:
+      </p><div class="variablelist"><dl><dt><span class="term">Status</span></dt><dd><p>
+          Bei aktiven Rechnungen wird automatisch eine Rechnung erstellt, wenn die Periodizität erreicht ist (z.B. Anfang eines neuen
+          Monats).
+         </p><p>
+          Ist ein Auftrag nicht aktiv, so werden für ihn auch keine wiederkehrenden Rechnungen erzeugt. Stellt man nach längerer
+          nicht-aktiver Zeit einen Auftrag wieder auf aktiv, wird beim nächsten Periodenwechsel für alle Perioden, seit der letzten aktiven
+          Periode, jeweils eine Rechnung erstellt. Möchte man dies verhindern, muss man vorher das Startdatum neu setzen.
+         </p><p>
+          Für gekündigte Aufträge werden nie mehr Rechnungen erstellt. Man kann sich diese Aufträge aber gesondert in den Berichten anzeigen
+          lassen.
+         </p></dd><dt><span class="term">Periodizität</span></dt><dd><p>
+          Ob monatlich, quartalsweise oder jährlich auf neue Rechnungen überprüft werden soll. Für jede Periode seit dem Startdatum wird
+          überprüft, ob für die Periode (beginnend immer mit dem ersten Tag der Periode) schon eine Rechnung erstellt wurde. Unter Umständen
+          können bei einem Startdatum in der Vergangenheit gleich mehrere Rechnungen erstellt werden.
+         </p></dd><dt><span class="term">Buchen auf</span></dt><dd><p>
+          Das Forderungskonto, in der Regel "Forderungen aus Lieferungen und Leistungen". Das Gegenkonto ergibt sich aus den Buchungsgruppen
+          der betreffenden Waren.
+         </p></dd><dt><span class="term">Startdatum</span></dt><dd><p>
+          ab welchem Datum auf Rechnungserstellung geprüft werden soll
+         </p></dd><dt><span class="term">Enddatum</span></dt><dd><p>
+          ab wann keine Rechnungen mehr erstellt werden sollen
+         </p></dd><dt><span class="term">Automatische Verlängerung um x Monate</span></dt><dd><p>
+          Sollen die wiederkehrenden Rechnungen bei Erreichen des eingetragenen Enddatums weiterhin erstellt werden, so kann man hier die
+          Anzahl der Monate eingeben, um die das Enddatum automatisch nach hinten geschoben wird.
+         </p></dd><dt><span class="term">Drucken</span></dt><dd><p>
+          Sind Drucker konfiguriert, so kann man sich die erstellten Rechnungen auch gleich ausdrucken lassen.
+         </p></dd></dl></div><p>
+       Nach Erstellung der Rechnungen kann eine E-Mail mit Informationen zu den erstellten Rechnungen verschickt werden. Konfiguriert wird
+       dies in der <a class="link" href="ch02s03.html#config.config-file.sections-parameters" title="2.3.2. Abschnitte und Parameter">Konfigurationsdatei</a>
+       
+               <code class="filename">config/lx_office.conf</code> im Abschnitt <code class="varname">[periodic_invoices]</code>.
+      </p></div><div class="sect2" title="3.1.3. Auflisten"><div class="titlepage"><div><div><h3 class="title"><a name="features.periodic-invoices.reports"></a>3.1.3. Auflisten</h3></div></div></div><p>
+       Unter Verkauf-&gt;Berichte-&gt;Aufträge finden sich zwei neue Checkboxen, "Wiederkehrende Rechnungen aktiv" und
+       "Wiederkehrende Rechnungen inaktiv", mit denen man sich einen Überglick über die wiederkehrenden Rechnungen verschaffen
+       kann.
+      </p></div><div class="sect2" title="3.1.4. Erzeugung der eigentlichen Rechnungen"><div class="titlepage"><div><div><h3 class="title"><a name="features.periodic-invoices.task-server"></a>3.1.4. Erzeugung der eigentlichen Rechnungen</h3></div></div></div><p>
+       Die zeitliche und periodische Überprüfung, ob eine wiederkehrende Rechnung automatisch erstellt werden soll, geschieht durch den
+       <a class="link" href="ch02s06.html" title="2.6. Der Task-Server">Taskserver</a>, einen externen Dienst, der automatisch beim Start des Servers gestartet
+       werden sollte.
+      </p></div><div class="sect2" title="3.1.5. Erste Rechnung für aktuellen Monat erstellen"><div class="titlepage"><div><div><h3 class="title"><a name="features.periodic-invoices.create-for-current-month"></a>3.1.5. Erste Rechnung für aktuellen Monat erstellen</h3></div></div></div><p>
+       Will man im laufenden Monat eine monatlich wiederkehrende Rechnung inkl. des laufenden Monats starten, stellt man das Startdatum auf
+       den Monatsanfang und wartet ein paar Minuten, bis der Taskserver den neu konfigurieren Auftrag erkennt und daraus eine Rechnung
+       generiert hat. Alternativ setzt man das Startdatum auf den Monatsersten des Folgemonats und erstellt die erste Rechnung direkt
+       manuell über den Workflow.
+      </p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch02s12.html">Zurück</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.12. Lx-Office ERP verwenden&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;3.2. Dokumentenvorlagen und verfügbare Variablen</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch03s02.html b/doc/html/ch03s02.html
new file mode 100644 (file)
index 0000000..8c93765
--- /dev/null
@@ -0,0 +1,715 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>3.2. Dokumentenvorlagen und verfügbare Variablen</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch03.html" title="Kapitel 3. Features und Funktionen"><link rel="prev" href="ch03.html" title="Kapitel 3. Features und Funktionen"><link rel="next" href="ch03s03.html" title="3.3. Excel-Vorlagen"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3.2. Dokumentenvorlagen und verfügbare Variablen</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 3. Features und Funktionen</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch03s03.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="3.2. Dokumentenvorlagen und verfügbare Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="dokumentenvorlagen-und-variablen"></a>3.2. Dokumentenvorlagen und verfügbare Variablen</h2></div></div></div><div class="sect2" title="3.2.1. Einführung"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.einf%C3%BChrung"></a>3.2.1. Einführung</h3></div></div></div><p>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
+        <code class="function">&lt;%variablenname%&gt;</code> verwendet wird. Für
+        LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
+        (siehe <a class="xref" href="ch03s02.html#dokumentenvorlagen-und-variablen.tag-style" title="3.2.4. Anfang und Ende der Tags verändern">Anfang und Ende der Tags verändern</a>).</p><p>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.</p><p>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:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+                     <code class="filename">SL/Form.pm</code> öffnen und am Anfang die
+            Zeile "<span class="command"><strong>use Data::Dumper;</strong></span>" einfügen.</p></li><li class="listitem"><p>In <code class="filename">Form.pm</code> die Funktion
+            <code class="function">parse_template</code> suchen und hier die Zeile
+            <span class="command"><strong>print(STDERR Dumper($self));</strong></span> einfügen.</p></li><li class="listitem"><p>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
+            ein PDF für eine Rechnung erzeugen.</p></li><li class="listitem"><p>Im <code class="filename">error.log</code> Apache steht die Ausgabe
+            der Variablen <code class="varname">$self</code> in der Form <code class="varname">'key'
+            =&gt; 'value',</code>. Alle <code class="varname">key</code>s sind
+            verfügbar.</p></li></ul></div></div><div class="sect2" title="3.2.2. Variablen ausgeben"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.variablen-ausgeben"></a>3.2.2. Variablen ausgeben</h3></div></div></div><p>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
+        Tags geschrieben werden, also z.B.
+        <code class="varname">&lt;%variablenname%&gt;</code>.</p><p>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
+        die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
+        <code class="varname">&lt;%variablenname FLAG1 FLAG2%&gt;</code>. Momentan
+        werden die folgenden Flags unterstützt:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+                     <code class="option">NOFORMAT</code> gilt nur für Zahlenwerte und gibt
+            den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
+            mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
+            damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</p></li><li class="listitem"><p>
+                     <code class="option">NOESCAPE</code> unterdrückt das Escapen von
+            Sonderzeichen für die Vorlagensprache. Wenn also in einer
+            Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
+            auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
+            ist dieses Flag sinnvoll.</p></li></ul></div><p>Beispiel:</p><pre class="programlisting">&lt;%quototal NOFORMAT%&gt;</pre></div><div class="sect2" title="3.2.3. Verwendung in Druckbefehlen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen"></a>3.2.3. Verwendung in Druckbefehlen</h3></div></div></div><p>In der Admininstration können Drucker definiert werden. Auch im
+        dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
+        und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
+        den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
+        <code class="function">`...`</code> nicht zu unerwünschtem Verhalten
+        führen.</p><p>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
+        für das die Telefonnummer eines Ansprechpartners als Teil der
+        Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
+        z.B. wie folgt aussehen:</p><pre class="programlisting">send_fax --number &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</pre></div><div class="sect2" title="3.2.4. Anfang und Ende der Tags verändern"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.tag-style"></a>3.2.4. Anfang und Ende der Tags verändern</h3></div></div></div><p>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
+        <code class="function">&lt;%customer%&gt;</code>. 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.</p><p>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
+        Format gültigen Kommentarzeichen anfangen, dann
+        <code class="function">config:</code> enthalten, die entsprechende Option
+        setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
+        enden. Beispiel für LaTeX:</p><pre class="programlisting">% config: tag-style=($ $)</pre><p>Dies würde Lx-Office dazu veranlassen, Variablen zu ersetzen,
+        wenn sie wie folgt aussehen: <code class="function">($customer$)</code>. Das
+        äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</p><pre class="programlisting">&lt;!-- config: tag-style=($ $) --&gt;</pre></div><div class="sect2" title="3.2.5. Zuordnung von den Dateinamen zu den Funktionen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.zuordnung-dateinamen"></a>3.2.5. Zuordnung von den Dateinamen zu den Funktionen</h3></div></div></div><p>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
+        welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
+        "<code class="filename">.ext</code>" geeignet zu ersetzen:
+        "<code class="filename">.tex</code>" für LaTeX-Vorlagen und
+        "<code class="filename">.odt</code>" für OpenDocument-Vorlagen.</p><div class="variablelist"><dl><dt><span class="term">
+                     <code class="filename">bin_list.ext</code>
+                  </span></dt><dd><p>Lagerliste</p></dd><dt><span class="term">
+                     <code class="filename">check.ext</code>
+                  </span></dt><dd><p>?</p></dd><dt><span class="term">
+                     <code class="filename">invoice.ext</code>
+                  </span></dt><dd><p>Rechnung</p></dd><dt><span class="term">
+                     <code class="filename">packing_list.ext</code>
+                  </span></dt><dd><p>Packliste</p></dd><dt><span class="term">
+                     <code class="filename">pick_list.ext</code>
+                  </span></dt><dd><p>Sammelliste</p></dd><dt><span class="term">
+                     <code class="filename">purchase_delivery_order.ext</code>
+                  </span></dt><dd><p>Lieferschein (Einkauf)</p></dd><dt><span class="term">
+                     <code class="filename">purcharse_order.ext</code>
+                  </span></dt><dd><p>Bestellung an Lieferanten</p></dd><dt><span class="term">
+                     <code class="filename">request_quotation.ext</code>
+                  </span></dt><dd><p>Anfrage an Lieferanten</p></dd><dt><span class="term">
+                     <code class="filename">sales_delivery_order.ext</code>
+                  </span></dt><dd><p>Lieferschein (Verkauf)</p></dd><dt><span class="term">
+                     <code class="filename">sales_order.ext</code>
+                  </span></dt><dd><p>Bestellung</p></dd><dt><span class="term">
+                     <code class="filename">sales_quotation.ext</code>
+                  </span></dt><dd><p>Angebot an Kunden</p></dd><dt><span class="term">
+                     <code class="filename">zahlungserinnerung.ext</code>
+                  </span></dt><dd><p>Mahnung (Dateiname im Programm konfigurierbar)</p></dd><dt><span class="term">
+                     <code class="filename">zahlungserinnerung_invoice.ext</code>
+                  </span></dt><dd><p>Rechnung über Mahngebühren (Dateiname im Programm
+              konfigurierbar)</p></dd></dl></div></div><div class="sect2" title="3.2.6. Sprache, Drucker und E-Mail"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.dateinamen-erweitert"></a>3.2.6. Sprache, Drucker und E-Mail</h3></div></div></div><p>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
+        eingearbeitet. So wird aus der Vorlage
+        <code class="filename">sales_order.ext</code> bei Sprache
+        <code class="function">de</code> und Druckerkürzel <code class="function">lpr2</code>
+        der Vorlagenname <code class="filename">sales_order_de_lpr2.ext</code>.
+        Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
+        bekommen dann noch das Kürzel <code class="filename">_email</code>, der
+        vollständige Vorlagenname wäre dann
+        <code class="filename">sales_order_email_de_lpr2.ext</code>. In allen Fällen
+        kann eine Standarddatei <code class="filename">default.ext</code> hinterlegt
+        werden. Diese wird verwendet, wenn keine der anderen Varianten
+        gefunden wird.</p><p>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
+        der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
+        verschickt wird, ist:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+                     <code class="filename">sales_order_email_de_lpr2.tex</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="filename">sales_order_de_lpr2.tex</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="filename">sales_order.tex</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="filename">default.tex</code>
+                  </p></li></ol></div><p>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
+        Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
+        siehe dazu <a class="xref" href="ch03s02.html#dokumentenvorlagen-und-variablen.allgemeine-variablen.meta" title="3.2.7.1. Metainformationen zur angeforderten Vorlage">Metainformationen zur angeforderten Vorlage</a>.</p></div><div class="sect2" title="3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden sind"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.allgemeine-variablen"></a>3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden
+        sind</h3></div></div></div><div class="sect3" title="3.2.7.1. Metainformationen zur angeforderten Vorlage"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"></a>3.2.7.1. Metainformationen zur angeforderten Vorlage</h4></div></div></div><p>Diese Variablen liefern Informationen darüber welche Variante
+          einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
+          Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
+          Formulare einbinden möchten.</p><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">template_meta.formname</code>
+                     </span></dt><dd><p>Basisname der Vorlage. Identisch mit der <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.zuordnung-dateinamen" title="3.2.5. Zuordnung von den Dateinamen zu den Funktionen">Zurordnung
+                zu den Dateinamen</a> ohne die Erweiterung. Ein
+                Verkaufsauftrag enthält hier
+                <code class="constant">sales_order</code>.</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.language.description</code>
+                     </span></dt><dd><p>Beschreibung der verwendeten Sprache</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.language.template_code</code>
+                     </span></dt><dd><p>Vorlagenürzel der verwendeten Sprache, identisch mit dem
+                Kürzel das im Dateinamen verwendetet wird.</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.language.output_numberformat</code>
+                     </span></dt><dd><p>Zahlenformat der verwendeten Sprache in der Form
+                "<code class="constant">1.000,00</code>". Experimentell! Nur
+                interessant für Vorlagen die mit unformatierten Werten
+                arbeiten.</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.language.output_dateformat</code>
+                     </span></dt><dd><p>Datumsformat der verwendeten Sprache in der Form
+                "<code class="constant">dd.mm.yyyy</code>". Experimentell! Nur
+                interessant für Vorlagen die mit unformatierten Werten
+                arbeiten.</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.format</code>
+                     </span></dt><dd><p>Das angeforderte Format. Kann im Moment die Werte
+                <code class="constant">pdf</code>, <code class="constant">postscript</code>,
+                <code class="constant">html</code>, <code class="constant">opendocument</code>,
+                <code class="constant">opendocument_pdf</code> und
+                <code class="constant">excel</code> enthalten.</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.extension</code>
+                     </span></dt><dd><p>Dateierweiterung, wie im Dateinamen. Wird aus
+                <code class="constant">format</code> entschieden.</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.media</code>
+                     </span></dt><dd><p>Ausgabemedium. Kann zur Zeit die Werte
+                <code class="constant">screen</code> für Bildschirm,
+                <code class="constant">email</code> für E-Mmail (triggert das
+                <code class="constant">_email</code> Kürzel im Dateinamen),
+                <code class="constant">printer</code> für Drucker, und
+                <code class="constant">queue</code> für Warteschlange enthalten.</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.printer.description</code>
+                     </span></dt><dd><p>Beschreibung des ausgewählten Druckers</p></dd><dt><span class="term">
+                        <code class="varname">template_meta.printer.template_code</code>
+                     </span></dt><dd><p>Vorlagenürzel des ausgewählten Druckers, identisch mit
+                dem Kürzel das im Dateinamen verwendetet wird.</p></dd></dl></div></div><div class="sect3" title="3.2.7.2. Stammdaten von Kunden und Lieferanten"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.allgemeine-variablen.kunden-lieferanten"></a>3.2.7.2. Stammdaten von Kunden und Lieferanten</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">account_number</code>
+                     </span></dt><dd><p>Kontonummer</p></dd><dt><span class="term">
+                        <code class="varname">bank</code>
+                     </span></dt><dd><p>Name der Bank</p></dd><dt><span class="term">
+                        <code class="varname">bank_code</code>
+                     </span></dt><dd><p>Bankleitzahl</p></dd><dt><span class="term">
+                        <code class="varname">bic</code>
+                     </span></dt><dd><p>Bank-Identifikations-Code (Bank Identifier Code,
+                BIC)</p></dd><dt><span class="term">
+                        <code class="varname">business</code>
+                     </span></dt><dd><p>Kunden-/Lieferantentyp</p></dd><dt><span class="term">
+                        <code class="varname">city</code>
+                     </span></dt><dd><p>Stadt</p></dd><dt><span class="term">
+                        <code class="varname">contact</code>
+                     </span></dt><dd><p>Kontakt</p></dd><dt><span class="term">
+                        <code class="varname">country</code>
+                     </span></dt><dd><p>Land</p></dd><dt><span class="term">
+                        <code class="varname">cp_email</code>
+                     </span></dt><dd><p>Email des Ansprechpartners</p></dd><dt><span class="term">
+                        <code class="varname">cp_givenname</code>
+                     </span></dt><dd><p>Vorname des Ansprechpartners</p></dd><dt><span class="term">
+                        <code class="varname">cp_greeting</code>
+                     </span></dt><dd><p>Anrede des Ansprechpartners</p></dd><dt><span class="term">
+                        <code class="varname">cp_name</code>
+                     </span></dt><dd><p>Name des Ansprechpartners</p></dd><dt><span class="term">
+                        <code class="varname">cp_phone1</code>
+                     </span></dt><dd><p>Telefonnummer 1 des Ansprechpartners</p></dd><dt><span class="term">
+                        <code class="varname">cp_phone2</code>
+                     </span></dt><dd><p>Telefonnummer 2 des Ansprechpartners</p></dd><dt><span class="term">
+                        <code class="varname">cp_title</code>
+                     </span></dt><dd><p>Titel des Ansprechpartners</p></dd><dt><span class="term">
+                        <code class="varname">creditlimit</code>
+                     </span></dt><dd><p>Kreditlimit</p></dd><dt><span class="term">
+                        <code class="varname">customeremail</code>
+                     </span></dt><dd><p>Email des Kunden; nur für Kunden</p></dd><dt><span class="term">
+                        <code class="varname">customerfax</code>
+                     </span></dt><dd><p>Faxnummer des Kunden; nur für Kunden</p></dd><dt><span class="term">
+                        <code class="varname">customernotes</code>
+                     </span></dt><dd><p>Bemerkungen beim Kunden; nur für Kunden</p></dd><dt><span class="term">
+                        <code class="varname">customernumber</code>
+                     </span></dt><dd><p>Kundennummer; nur für Kunden</p></dd><dt><span class="term">
+                        <code class="varname">customerphone</code>
+                     </span></dt><dd><p>Telefonnummer des Kunden; nur für Kunden</p></dd><dt><span class="term">
+                        <code class="varname">discount</code>
+                     </span></dt><dd><p>Rabatt</p></dd><dt><span class="term">
+                        <code class="varname">email</code>
+                     </span></dt><dd><p>Emailadresse</p></dd><dt><span class="term">
+                        <code class="varname">fax</code>
+                     </span></dt><dd><p>Faxnummer</p></dd><dt><span class="term">
+                        <code class="varname">homepage</code>
+                     </span></dt><dd><p>Homepage</p></dd><dt><span class="term">
+                        <code class="varname">iban</code>
+                     </span></dt><dd><p>Internationale Kontonummer (International Bank Account
+                Number, IBAN)</p></dd><dt><span class="term">
+                        <code class="varname">language</code>
+                     </span></dt><dd><p>Sprache</p></dd><dt><span class="term">
+                        <code class="varname">name</code>
+                     </span></dt><dd><p>Firmenname</p></dd><dt><span class="term">
+                        <code class="varname">payment_description</code>
+                     </span></dt><dd><p>Name der Zahlart</p></dd><dt><span class="term">
+                        <code class="varname">payment_terms</code>
+                     </span></dt><dd><p>Zahlungskonditionen</p></dd><dt><span class="term">
+                        <code class="varname">phone</code>
+                     </span></dt><dd><p>Telefonnummer</p></dd><dt><span class="term">
+                        <code class="varname">shiptocity</code>
+                     </span></dt><dd><p>Stadt (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptocontact</code>
+                     </span></dt><dd><p>Kontakt (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptocountry</code>
+                     </span></dt><dd><p>Land (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptodepartment1</code>
+                     </span></dt><dd><p>Abteilung 1 (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptodepartment2</code>
+                     </span></dt><dd><p>Abteilung 2 (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptoemail</code>
+                     </span></dt><dd><p>Email (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptofax</code>
+                     </span></dt><dd><p>Fax (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptoname</code>
+                     </span></dt><dd><p>Firmenname (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptophone</code>
+                     </span></dt><dd><p>Telefonnummer (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptostreet</code>
+                     </span></dt><dd><p>Straße und Hausnummer (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">shiptozipcode</code>
+                     </span></dt><dd><p>Postleitzahl (Lieferadresse) <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.anmerkung-shipto" title="Anmerkung">*</a>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">street</code>
+                     </span></dt><dd><p>Straße und Hausnummer</p></dd><dt><span class="term">
+                        <code class="varname">taxnumber</code>
+                     </span></dt><dd><p>Steuernummer</p></dd><dt><span class="term">
+                        <code class="varname">ustid</code>
+                     </span></dt><dd><p>Umsatzsteuer-Identifikationsnummer</p></dd><dt><span class="term">
+                        <code class="varname">vendoremail</code>
+                     </span></dt><dd><p>Email des Lieferanten; nur für Lieferanten</p></dd><dt><span class="term">
+                        <code class="varname">vendorfax</code>
+                     </span></dt><dd><p>Faxnummer des Lieferanten; nur für Lieferanten</p></dd><dt><span class="term">
+                        <code class="varname">vendornotes</code>
+                     </span></dt><dd><p>Bemerkungen beim Lieferanten; nur für Lieferanten</p></dd><dt><span class="term">
+                        <code class="varname">vendornumber</code>
+                     </span></dt><dd><p>Lieferantennummer; nur für Lieferanten</p></dd><dt><span class="term">
+                        <code class="varname">vendorphone</code>
+                     </span></dt><dd><p>Telefonnummer des Lieferanten; nur für
+                Lieferanten</p></dd><dt><span class="term">
+                        <code class="varname">zipcode</code>
+                     </span></dt><dd><p>Postleitzahl</p></dd></dl></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="../../../../system/docbook-xsl/images/note.png"></td><th align="left"><a name="dokumentenvorlagen-und-variablen.anmerkung-shipto"></a>Anmerkung</th></tr><tr><td align="left" valign="top"><p>Anmerkung: Sind die <code class="varname">shipto*</code>-Felder in den
+            Stammdaten nicht eingetragen, so haben die Variablen
+            <code class="varname">shipto*</code> den gleichen Wert wie die die
+            entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich
+            einige <code class="varname">shipto*</code>-Variablen so nicht in den
+            Stammdaten wiederfinden sondern schlicht Kopien der
+            Lieferdatenvariablen sind (z.B.
+            <code class="varname">shiptocontact</code>).</p></td></tr></table></div></div><div class="sect3" title="3.2.7.3. Informationen über den Bearbeiter"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.allgemein-bearbeiter"></a>3.2.7.3. Informationen über den Bearbeiter</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">employee_address</code>
+                     </span></dt><dd><p>Adressfeld</p></dd><dt><span class="term">
+                        <code class="varname">employee_businessnumber</code>
+                     </span></dt><dd><p>Firmennummer</p></dd><dt><span class="term">
+                        <code class="varname">employee_company</code>
+                     </span></dt><dd><p>Firmenname</p></dd><dt><span class="term">
+                        <code class="varname">employee_co_ustid</code>
+                     </span></dt><dd><p>Usatzsteuer-Identifikationsnummer</p></dd><dt><span class="term">
+                        <code class="varname">employee_duns</code>
+                     </span></dt><dd><p>DUNS-Nummer</p></dd><dt><span class="term">
+                        <code class="varname">employee_email</code>
+                     </span></dt><dd><p>Email</p></dd><dt><span class="term">
+                        <code class="varname">employee_fax</code>
+                     </span></dt><dd><p>Fax</p></dd><dt><span class="term">
+                        <code class="varname">employee_name</code>
+                     </span></dt><dd><p>voller Name</p></dd><dt><span class="term">
+                        <code class="varname">employee_signature</code>
+                     </span></dt><dd><p>Signatur</p></dd><dt><span class="term">
+                        <code class="varname">employee_taxnumber</code>
+                     </span></dt><dd><p>Steuernummer</p></dd><dt><span class="term">
+                        <code class="varname">employee_tel</code>
+                     </span></dt><dd><p>Telefonnummer</p></dd></dl></div></div><div class="sect3" title="3.2.7.4. Informationen über den Bearbeiter"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.allgemein-verkaeufer"></a>3.2.7.4. Informationen über den Bearbeiter</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">salesman_address</code>
+                     </span></dt><dd><p>Adressfeld</p></dd><dt><span class="term">
+                        <code class="varname">salesman_businessnumber</code>
+                     </span></dt><dd><p>Firmennummer</p></dd><dt><span class="term">
+                        <code class="varname">salesman_company</code>
+                     </span></dt><dd><p>Firmenname</p></dd><dt><span class="term">
+                        <code class="varname">salesman_co_ustid</code>
+                     </span></dt><dd><p>Usatzsteuer-Identifikationsnummer</p></dd><dt><span class="term">
+                        <code class="varname">salesman_duns</code>
+                     </span></dt><dd><p>DUNS-Nummer</p></dd><dt><span class="term">
+                        <code class="varname">salesman_email</code>
+                     </span></dt><dd><p>Email</p></dd><dt><span class="term">
+                        <code class="varname">salesman_fax</code>
+                     </span></dt><dd><p>Fax</p></dd><dt><span class="term">
+                        <code class="varname">salesman_name</code>
+                     </span></dt><dd><p>voller Name</p></dd><dt><span class="term">
+                        <code class="varname">salesman_signature</code>
+                     </span></dt><dd><p>Signatur</p></dd><dt><span class="term">
+                        <code class="varname">salesman_taxnumber</code>
+                     </span></dt><dd><p>Steuernummer</p></dd><dt><span class="term">
+                        <code class="varname">salesman_tel</code>
+                     </span></dt><dd><p>Telefonnummer</p></dd></dl></div></div><div class="sect3" title="3.2.7.5. Variablen für die einzelnen Steuern"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.allgemein-steuern"></a>3.2.7.5. Variablen für die einzelnen Steuern</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">tax</code>
+                     </span></dt><dd><p>Steuer</p></dd><dt><span class="term">
+                        <code class="varname">taxbase</code>
+                     </span></dt><dd><p>zu versteuernder Betrag</p></dd><dt><span class="term">
+                        <code class="varname">taxdescription</code>
+                     </span></dt><dd><p>Name der Steuer</p></dd><dt><span class="term">
+                        <code class="varname">taxrate</code>
+                     </span></dt><dd><p>Steuersatz</p></dd></dl></div></div></div><div class="sect2" title="3.2.8. Variablen in Rechnungen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.invoice"></a>3.2.8. Variablen in Rechnungen</h3></div></div></div><div class="sect3" title="3.2.8.1. Allgemeine Variablen"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.invoice-allgemein"></a>3.2.8.1. Allgemeine Variablen</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">creditremaining</code>
+                     </span></dt><dd><p>Verbleibender Kredit</p></dd><dt><span class="term">
+                        <code class="varname">currency</code>
+                     </span></dt><dd><p>Währung</p></dd><dt><span class="term">
+                        <code class="varname">cusordnumber</code>
+                     </span></dt><dd><p>Bestellnummer beim Kunden</p></dd><dt><span class="term">
+                        <code class="varname">deliverydate</code>
+                     </span></dt><dd><p>Lieferdatum</p></dd><dt><span class="term">
+                        <code class="varname">duedate</code>
+                     </span></dt><dd><p>Fälligkeitsdatum</p></dd><dt><span class="term">
+                        <code class="varname">globalprojectnumber</code>
+                     </span></dt><dd><p>Projektnummer des ganzen Beleges</p></dd><dt><span class="term">
+                        <code class="varname">globalprojectdescription</code>
+                     </span></dt><dd><p>Projekbeschreibung des ganzen Beleges</p></dd><dt><span class="term">
+                        <code class="varname">intnotes</code>
+                     </span></dt><dd><p>Interne Bemerkungen</p></dd><dt><span class="term">
+                        <code class="varname">invdate</code>
+                     </span></dt><dd><p>Rechnungsdatum</p></dd><dt><span class="term">
+                        <code class="varname">invnumber</code>
+                     </span></dt><dd><p>Rechnungsnummer</p></dd><dt><span class="term">
+                        <code class="varname">invtotal</code>
+                     </span></dt><dd><p>gesamter Rechnungsbetrag</p></dd><dt><span class="term">
+                        <code class="varname">notes</code>
+                     </span></dt><dd><p>Bemerkungen der Rechnung</p></dd><dt><span class="term">
+                        <code class="varname">orddate</code>
+                     </span></dt><dd><p>Auftragsdatum</p></dd><dt><span class="term">
+                        <code class="varname">ordnumber</code>
+                     </span></dt><dd><p>Auftragsnummer, wenn die Rechnung aus einem Auftrag
+                erstellt wurde</p></dd><dt><span class="term">
+                        <code class="varname">payment_description</code>
+                     </span></dt><dd><p>Name der Zahlart</p></dd><dt><span class="term">
+                        <code class="varname">payment_terms</code>
+                     </span></dt><dd><p>Zahlungskonditionen</p></dd><dt><span class="term">
+                        <code class="varname">quodate</code>
+                     </span></dt><dd><p>Angebotsdatum</p></dd><dt><span class="term">
+                        <code class="varname">quonumber</code>
+                     </span></dt><dd><p>Angebotsnummer</p></dd><dt><span class="term">
+                        <code class="varname">shippingpoint</code>
+                     </span></dt><dd><p>Versandort</p></dd><dt><span class="term">
+                        <code class="varname">shipvia</code>
+                     </span></dt><dd><p>Transportmittel</p></dd><dt><span class="term">
+                        <code class="varname">subtotal</code>
+                     </span></dt><dd><p>Zwischensumme aller Posten ohne Steuern</p></dd><dt><span class="term">
+                        <code class="varname">total</code>
+                     </span></dt><dd><p>Restsumme der Rechnung (Summe abzüglich bereits
+                bezahlter Posten)</p></dd><dt><span class="term">
+                        <code class="varname">transaction_description</code>
+                     </span></dt><dd><p>Vorgangsbezeichnung</p></dd><dt><span class="term">
+                        <code class="varname">transdate</code>
+                     </span></dt><dd><p>Auftragsdatum wenn die Rechnung aus einem Auftrag
+                erstellt wurde</p></dd></dl></div></div><div class="sect3" title="3.2.8.2. Variablen für jeden Posten auf der Rechnung"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.invoice-posten"></a>3.2.8.2. Variablen für jeden Posten auf der Rechnung</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">bin</code>
+                     </span></dt><dd><p>Stellage</p></dd><dt><span class="term">
+                        <code class="varname">description</code>
+                     </span></dt><dd><p>Artikelbeschreibung</p></dd><dt><span class="term">
+                        <code class="varname">discount</code>
+                     </span></dt><dd><p>Rabatt als Betrag</p></dd><dt><span class="term">
+                        <code class="varname">discount_sub</code>
+                     </span></dt><dd><p>Zwischensumme mit Rabatt</p></dd><dt><span class="term">
+                        <code class="varname">drawing</code>
+                     </span></dt><dd><p>Zeichnung</p></dd><dt><span class="term">
+                        <code class="varname">ean</code>
+                     </span></dt><dd><p>EAN-Code</p></dd><dt><span class="term">
+                        <code class="varname">image</code>
+                     </span></dt><dd><p>Grafik</p></dd><dt><span class="term">
+                        <code class="varname">linetotal</code>
+                     </span></dt><dd><p>Zeilensumme (Anzahl * Einzelpreis)</p></dd><dt><span class="term">
+                        <code class="varname">longdescription</code>
+                     </span></dt><dd><p>Langtext</p></dd><dt><span class="term">
+                        <code class="varname">microfiche</code>
+                     </span></dt><dd><p>Mikrofilm</p></dd><dt><span class="term">
+                        <code class="varname">netprice</code>
+                     </span></dt><dd><p>Nettopreis</p></dd><dt><span class="term">
+                        <code class="varname">nodiscount_linetotal</code>
+                     </span></dt><dd><p>Zeilensumme ohne Rabatt</p></dd><dt><span class="term">
+                        <code class="varname">nodiscount_sub</code>
+                     </span></dt><dd><p>Zwischensumme ohne Rabatt</p></dd><dt><span class="term">
+                        <code class="varname">number</code>
+                     </span></dt><dd><p>Artikelnummer</p></dd><dt><span class="term">
+                        <code class="varname">ordnumber_oe</code>
+                     </span></dt><dd><p>Auftragsnummer des Originalauftrags, wenn die Rechnung
+                aus einem Sammelauftrag erstellt wurde</p></dd><dt><span class="term">
+                        <code class="varname">p_discount</code>
+                     </span></dt><dd><p>Rabatt in Prozent</p></dd><dt><span class="term">
+                        <code class="varname">partnotes</code>
+                     </span></dt><dd><p>Die beim Artikel gespeicherten Bemerkungen</p></dd><dt><span class="term">
+                        <code class="varname">partsgroup</code>
+                     </span></dt><dd><p>Warengruppe</p></dd><dt><span class="term">
+                        <code class="varname">price_factor</code>
+                     </span></dt><dd><p>Der Preisfaktor als Zahl, sofern einer eingestellt
+                ist</p></dd><dt><span class="term">
+                        <code class="varname">price_factor_name</code>
+                     </span></dt><dd><p>Der Name des Preisfaktors, sofern einer eingestellt
+                ist</p></dd><dt><span class="term">
+                        <code class="varname">projectnumber</code>
+                     </span></dt><dd><p>Projektnummer</p></dd><dt><span class="term">
+                        <code class="varname">projectdescription</code>
+                     </span></dt><dd><p>Projektbeschreibung</p></dd><dt><span class="term">
+                        <code class="varname">qty</code>
+                     </span></dt><dd><p>Anzahl</p></dd><dt><span class="term">
+                        <code class="varname">reqdate</code>
+                     </span></dt><dd><p>Lieferdatum</p></dd><dt><span class="term">
+                        <code class="varname">runningnumber</code>
+                     </span></dt><dd><p>Position auf der Rechnung (1, 2, 3...)</p></dd><dt><span class="term">
+                        <code class="varname">sellprice</code>
+                     </span></dt><dd><p>Verkaufspreis</p></dd><dt><span class="term">
+                        <code class="varname">serialnumber</code>
+                     </span></dt><dd><p>Seriennummer</p></dd><dt><span class="term">
+                        <code class="varname">tax_rate</code>
+                     </span></dt><dd><p>Steuersatz</p></dd><dt><span class="term">
+                        <code class="varname">transdate_oe</code>
+                     </span></dt><dd><p>Auftragsdatum des Originalauftrags, wenn die Rechnung
+                aus einem Sammelauftrag erstellt wurde</p></dd><dt><span class="term">
+                        <code class="varname">unit</code>
+                     </span></dt><dd><p>Einheit</p></dd><dt><span class="term">
+                        <code class="varname">weight</code>
+                     </span></dt><dd><p>Gewicht</p></dd></dl></div><p>Für jeden Posten gibt es ein Unterarray mit den Informationen
+          über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
+          einer <code class="function">foreach</code>-Schleife ausgegeben werden, da
+          für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
+          können. Die Variablen dafür lauten:</p><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">make</code>
+                     </span></dt><dd><p>Lieferant</p></dd><dt><span class="term">
+                        <code class="varname">model</code>
+                     </span></dt><dd><p>Lieferantenartikelnummer</p></dd></dl></div></div><div class="sect3" title="3.2.8.3. Variablen für die einzelnen Zahlungseingänge"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.invoice-zahlungen"></a>3.2.8.3. Variablen für die einzelnen Zahlungseingänge</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">payment</code>
+                     </span></dt><dd><p>Betrag</p></dd><dt><span class="term">
+                        <code class="varname">paymentaccount</code>
+                     </span></dt><dd><p>Konto</p></dd><dt><span class="term">
+                        <code class="varname">paymentdate</code>
+                     </span></dt><dd><p>Datum</p></dd><dt><span class="term">
+                        <code class="varname">paymentmemo</code>
+                     </span></dt><dd><p>Memo</p></dd><dt><span class="term">
+                        <code class="varname">paymentsource</code>
+                     </span></dt><dd><p>Beleg</p></dd></dl></div></div><div class="sect3" title="3.2.8.4. Benutzerdefinierte Kunden- und Lieferantenvariablen"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc"></a>3.2.8.4. Benutzerdefinierte Kunden- und Lieferantenvariablen</h4></div></div></div><p>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
+          <code class="varname">vc_cvar_</code> und dem vom Benutzer festgelegten
+          Variablennamen zusammen.</p><p>Beispiel: Der Benutzer hat eine Variable namens
+          <code class="varname">number_of_employees</code> definiert, die die Anzahl der
+          Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
+          unter dem Namen <code class="varname">vc_cvar_number_of_employees</code> zur
+          Verfügung.</p></div></div><div class="sect2" title="3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.dunning"></a>3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren</h3></div></div></div><div class="sect3" title="3.2.9.1. Namen der Vorlagen"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.dunning-vorlagennamen"></a>3.2.9.1. Namen der Vorlagen</h4></div></div></div><p>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
+          <code class="constant">_invoice</code> gebildet. Weiterhin werden die Kürzel
+          für die ausgewählte Sprache und den ausgewählten Drucker
+          angehängt.</p></div><div class="sect3" title="3.2.9.2. Allgemeine Variablen in Mahnungen"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.dunning-allgemein"></a>3.2.9.2. Allgemeine Variablen in Mahnungen</h4></div></div></div><p>Die Variablen des Verkäufers stehen wie gewohnt als
+          <code class="varname">employee_...</code> zur Verfügung. Die Adressdaten des
+          Kunden stehen als Variablen <code class="varname">name</code>,
+          <code class="varname">street</code>, <code class="varname">zipcode</code>,
+          <code class="varname">city</code>, <code class="varname">country</code>,
+          <code class="varname">department_1</code>, <code class="varname">department_2</code>,
+          und <code class="varname">email</code> zur Verfügung.</p><p>Weitere Variablen beinhalten:</p><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">dunning_date</code>
+                     </span></dt><dd><p>Datum der Mahnung</p></dd><dt><span class="term">
+                        <code class="varname">dunning_duedate</code>
+                     </span></dt><dd><p>Fälligkeitsdatum für diese Mahhnung</p></dd><dt><span class="term">
+                        <code class="varname">dunning_id</code>
+                     </span></dt><dd><p>Mahnungsnummer</p></dd><dt><span class="term">
+                        <code class="varname">fee</code>
+                     </span></dt><dd><p>Kummulative Mahngebühren</p></dd><dt><span class="term">
+                        <code class="varname">interest_rate</code>
+                     </span></dt><dd><p>Zinssatz per anno in Prozent</p></dd><dt><span class="term">
+                        <code class="varname">total_amount</code>
+                     </span></dt><dd><p>Gesamter noch zu zahlender Betrag als
+                <code class="function">fee</code> + <code class="function">total_interest</code>
+                + <code class="function">total_open_amount</code>
+                        </p></dd><dt><span class="term">
+                        <code class="varname">total_interest</code>
+                     </span></dt><dd><p>Zinsen per anno über alle Rechnungen</p></dd><dt><span class="term">
+                        <code class="varname">total_open_amount</code>
+                     </span></dt><dd><p>Summe über alle offene Beträge der Rechnungen</p></dd></dl></div></div><div class="sect3" title="3.2.9.3. Variablen für jede gemahnte Rechnung in einer Mahnung"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.dunning-details"></a>3.2.9.3. Variablen für jede gemahnte Rechnung in einer Mahnung</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">dn_amount</code>
+                     </span></dt><dd><p>Rechnungssumme (brutto)</p></dd><dt><span class="term">
+                        <code class="varname">dn_duedate</code>
+                     </span></dt><dd><p>Originales Fälligkeitsdatum der Rechnung</p></dd><dt><span class="term">
+                        <code class="varname">dn_dunning_date</code>
+                     </span></dt><dd><p>Datum der Mahnung</p></dd><dt><span class="term">
+                        <code class="varname">dn_dunning_duedate</code>
+                     </span></dt><dd><p>Fälligkeitsdatum der Mahnung</p></dd><dt><span class="term">
+                        <code class="varname">dn_fee</code>
+                     </span></dt><dd><p>Kummulative Mahngebühr</p></dd><dt><span class="term">
+                        <code class="varname">dn_interest</code>
+                     </span></dt><dd><p>Zinsen per anno für diese Rechnung</p></dd><dt><span class="term">
+                        <code class="varname">dn_invnumber</code>
+                     </span></dt><dd><p>Rechnungsnummer</p></dd><dt><span class="term">
+                        <code class="varname">dn_linetotal</code>
+                     </span></dt><dd><p>Noch zu zahlender Betrag (ergibt sich aus
+                <code class="varname">dn_open_amount</code> + <code class="varname">dn_fee</code>
+                + <code class="varname">dn_interest</code>)</p></dd><dt><span class="term">
+                        <code class="varname">dn_netamount</code>
+                     </span></dt><dd><p>Rechnungssumme (netto)</p></dd><dt><span class="term">
+                        <code class="varname">dn_open_amount</code>
+                     </span></dt><dd><p>Offener Rechnungsbetrag</p></dd><dt><span class="term">
+                        <code class="varname">dn_ordnumber</code>
+                     </span></dt><dd><p>Bestellnummer</p></dd><dt><span class="term">
+                        <code class="varname">dn_transdate</code>
+                     </span></dt><dd><p>Rechnungsdatum</p></dd><dt><span class="term">
+                        <code class="varname">dn_curr</code>
+                     </span></dt><dd><p>Währung, in der die Rechnung erstellt wurde. (Die
+                Rechnungsbeträge sind aber immer in der Hauptwährung)</p></dd></dl></div></div><div class="sect3" title="3.2.9.4. Variablen in automatisch erzeugten Rechnungen über Mahngebühren"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.dunning-invoice"></a>3.2.9.4. Variablen in automatisch erzeugten Rechnungen über
+          Mahngebühren</h4></div></div></div><p>Die Variablen des Verkäufers stehen wie gewohnt als
+          <code class="varname">employee_...</code> zur Verfügung. Die Adressdaten des
+          Kunden stehen als Variablen <code class="varname">name</code>,
+          <code class="varname">street</code>, <code class="varname">zipcode</code>,
+          <code class="varname">city</code>, <code class="varname">country</code>,
+          <code class="varname">department_1</code>, <code class="varname">department_2</code>,
+          und <code class="varname">email</code> zur Verfügung.</p><p>Weitere Variablen beinhalten:</p><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">duedate</code>
+                     </span></dt><dd><p>Fälligkeitsdatum der Rechnung</p></dd><dt><span class="term">
+                        <code class="varname">dunning_id</code>
+                     </span></dt><dd><p>Mahnungsnummer</p></dd><dt><span class="term">
+                        <code class="varname">fee</code>
+                     </span></dt><dd><p>Mahngebühren</p></dd><dt><span class="term">
+                        <code class="varname">interest</code>
+                     </span></dt><dd><p>Zinsen</p></dd><dt><span class="term">
+                        <code class="varname">invamount</code>
+                     </span></dt><dd><p>Rechnungssumme (ergibt sich aus <code class="varname">fee</code> +
+                <code class="varname">interest</code>)</p></dd><dt><span class="term">
+                        <code class="varname">invdate</code>
+                     </span></dt><dd><p>Rechnungsdatum</p></dd><dt><span class="term">
+                        <code class="varname">invnumber</code>
+                     </span></dt><dd><p>Rechnungsnummer</p></dd></dl></div></div></div><div class="sect2" title="3.2.10. Variablen in anderen Vorlagen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen"></a>3.2.10. Variablen in anderen Vorlagen</h3></div></div></div><div class="sect3" title="3.2.10.1. Einführung"><div class="titlepage"><div><div><h4 class="title"><a name="d0e3643"></a>3.2.10.1. Einführung</h4></div></div></div><p>Die Variablen in anderen Vorlagen sind ähnlich wie in der
+          Rechnung. Allerdings heißen die Variablen, die mit
+          <code class="varname">inv</code> beginnen, jetzt anders. Bei den Angeboten
+          fangen sie mit <code class="varname">quo</code> für "quotation" an:
+          <code class="varname">quodate</code> für Angebotsdatum etc. Bei Bestellungen
+          wiederum fangen sie mit <code class="varname">ord</code> für "order" an:
+          <code class="varname">ordnumber</code> für Bestellnummer etc.</p><p>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.</p><p>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
+          in Rechnungen aufgeführt.</p></div><div class="sect3" title="3.2.10.2. Angebote und Preisanfragen"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations"></a>3.2.10.2. Angebote und Preisanfragen</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">quonumber</code>
+                     </span></dt><dd><p>Angebots- bzw. Anfragenummer</p></dd><dt><span class="term">
+                        <code class="varname">reqdate</code>
+                     </span></dt><dd><p>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
+                Preisanfragen)</p></dd><dt><span class="term">
+                        <code class="varname">transdate</code>
+                     </span></dt><dd><p>Angebots- bzw. Anfragedatum</p></dd></dl></div></div><div class="sect3" title="3.2.10.3. Auftragsbestätigungen und Lieferantenaufträge"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen-orders"></a>3.2.10.3. Auftragsbestätigungen und Lieferantenaufträge</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">ordnumber</code>
+                     </span></dt><dd><p>Auftragsnummer</p></dd><dt><span class="term">
+                        <code class="varname">reqdate</code>
+                     </span></dt><dd><p>Lieferdatum</p></dd><dt><span class="term">
+                        <code class="varname">transdate</code>
+                     </span></dt><dd><p>Auftragsdatum</p></dd></dl></div></div><div class="sect3" title="3.2.10.4. Lieferscheine (Verkauf und Einkauf)"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders"></a>3.2.10.4. Lieferscheine (Verkauf und Einkauf)</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">cusordnumber</code>
+                     </span></dt><dd><p>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
+                des Lieferanten (im Einkauf)</p></dd><dt><span class="term">
+                        <code class="varname">donumber</code>
+                     </span></dt><dd><p>Lieferscheinnummer</p></dd><dt><span class="term">
+                        <code class="varname">transdate</code>
+                     </span></dt><dd><p>Lieferscheindatum</p></dd></dl></div><p>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
+          <code class="function">foreach</code>-Schleife ausgegeben werden. Diese
+          Variablen sind:</p><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">si_bin</code>
+                     </span></dt><dd><p>Lagerplatz</p></dd><dt><span class="term">
+                        <code class="varname">si_chargenumber</code>
+                     </span></dt><dd><p>Chargennummer</p></dd><dt><span class="term">
+                        <code class="varname">si_bestbefore</code>
+                     </span></dt><dd><p>Mindesthaltbarkeit</p></dd><dt><span class="term">
+                        <code class="varname">si_number</code>
+                     </span></dt><dd><p>Artikelnummer</p></dd><dt><span class="term">
+                        <code class="varname">si_qty</code>
+                     </span></dt><dd><p>Anzahl bzw. Menge</p></dd><dt><span class="term">
+                        <code class="varname">si_runningnumber</code>
+                     </span></dt><dd><p>Positionsnummer (1, 2, 3 etc)</p></dd><dt><span class="term">
+                        <code class="varname">si_unit</code>
+                     </span></dt><dd><p>Einheit</p></dd><dt><span class="term">
+                        <code class="varname">si_warehouse</code>
+                     </span></dt><dd><p>Lager</p></dd></dl></div></div><div class="sect3" title="3.2.10.5. Variablen für Sammelrechnung"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.andere-vorlagen-statement"></a>3.2.10.5. Variablen für Sammelrechnung</h4></div></div></div><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">c0total</code>
+                     </span></dt><dd><p>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
+                Tage</p></dd><dt><span class="term">
+                        <code class="varname">c30total</code>
+                     </span></dt><dd><p>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
+                und &lt; 60 Tage</p></dd><dt><span class="term">
+                        <code class="varname">c60total</code>
+                     </span></dt><dd><p>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
+                und &lt; 90 Tage</p></dd><dt><span class="term">
+                        <code class="varname">c90total</code>
+                     </span></dt><dd><p>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
+                Tage</p></dd><dt><span class="term">
+                        <code class="varname">total</code>
+                     </span></dt><dd><p>Gesamtbetrag aller Rechnungen</p></dd></dl></div><p>Variablen für jede Rechnungsposition in Sammelrechnung:</p><div class="variablelist"><dl><dt><span class="term">
+                        <code class="varname">invnumber</code>
+                     </span></dt><dd><p>Rechnungsnummer</p></dd><dt><span class="term">
+                        <code class="varname">invdate</code>
+                     </span></dt><dd><p>Rechnungsdatum</p></dd><dt><span class="term">
+                        <code class="varname">duedate</code>
+                     </span></dt><dd><p>Fälligkeitsdatum</p></dd><dt><span class="term">
+                        <code class="varname">amount</code>
+                     </span></dt><dd><p>Summe der Rechnung</p></dd><dt><span class="term">
+                        <code class="varname">open</code>
+                     </span></dt><dd><p>Noch offener Betrag der Rechnung</p></dd><dt><span class="term">
+                        <code class="varname">c0</code>
+                     </span></dt><dd><p>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
+                Tage</p></dd><dt><span class="term">
+                        <code class="varname">c30</code>
+                     </span></dt><dd><p>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
+                &lt; 60 Tage</p></dd><dt><span class="term">
+                        <code class="varname">c60</code>
+                     </span></dt><dd><p>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
+                &lt; 90 Tage</p></dd><dt><span class="term">
+                        <code class="varname">c90</code>
+                     </span></dt><dd><p>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
+                Tage</p></dd></dl></div></div></div><div class="sect2" title="3.2.11. Blöcke, bedingte Anweisungen und Schleifen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.bloecke"></a>3.2.11. Blöcke, bedingte Anweisungen und Schleifen</h3></div></div></div><div class="sect3" title="3.2.11.1. Einfürhung"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.bloecke.einfuehrung"></a>3.2.11.1. Einfürhung</h4></div></div></div><p>Der Parser kennt neben den Variablen einige weitere
+          Konstrukte, die gesondert behandelt werden. Diese sind wie
+          Variablennamen in spezieller Weise markiert:
+          <span class="command"><strong>&lt;%anweisung%&gt; ... &lt;%end%&gt;</strong></span>
+               </p><p>Anmerkung zum <span class="command"><strong>&lt;%end%&gt;</strong></span>: Der besseren
+          Verständlichkeit halber kann man nach dem <span class="command"><strong>end</strong></span>
+          noch beliebig weitere Wörter schreiben, um so zu markieren, welche
+          Anweisung (z.B. <span class="command"><strong>if</strong></span> oder
+          <span class="command"><strong>foreach</strong></span>) damit abgeschlossen wird.</p><p>Beispiel: Lautet der Beginn eines Blockes z.B.
+          <span class="command"><strong>&lt;%if type == "sales_quotation"%&gt;</strong></span>, so könnte
+          er mit <span class="command"><strong>&lt;%end%&gt;</strong></span> genauso abgeschlossen werden
+          wie mit <span class="command"><strong>&lt;%end if%&gt;</strong></span> oder auch
+          <span class="command"><strong>&lt;%end type == "sales_quotation"%&gt;</strong></span>.</p></div><div class="sect3" title="3.2.11.2. Der if-Block"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.bloecke.if"></a>3.2.11.2. Der if-Block</h4></div></div></div><pre class="programlisting">&lt;%if variablenname%&gt;
+...
+&lt;%end%&gt;</pre><p>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
+          und dem "end" werden nur ausgegeben, wenn die Variable
+          <code class="varname">variablenname</code> gesetzt und ungleich 0 ist.</p><p>Die Bedingung kann auch negiert werden, indem das Wort
+          <code class="function">not</code> nach dem <code class="filename">if</code> verwendet
+          wird. Beispiel:</p><pre class="programlisting">&lt;%if not cp_greeting%&gt;
+...
+&lt;%end%&gt;</pre><p>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:</p><pre class="programlisting">&lt;%if var1 == "Wert"%&gt;</pre><p>Testet die Variable <code class="varname">var1</code> auf
+          übereinstimmung mit der Zeichenkette <code class="constant">Wert</code>.
+          Mittels <code class="function">!=</code> anstelle von <code class="function">==</code>
+          würde auf Ungleichheit getestet.</p><pre class="programlisting">%if var1 == var2%&gt;</pre><p>Testet die Variable <code class="varname">var1</code> auf
+          übereinstimmung mit der Variablen <code class="varname">var2</code>. Mittel
+          <code class="function">!=</code> anstelle von <code class="function">==</code> würde
+          auf Ungleichheit getestet.</p><p>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 <code class="function">=~</code> und
+          <code class="function">!~</code> als Vergleichsoperatoren.</p><p>Beispiel für einen Test, ob die Variable
+          <code class="varname">intnotes</code> (interne Bemerkungen) das Wort
+          <code class="constant">schwierig</code> enthält:</p><pre class="programlisting">&lt;%if intnotes =~ "schwierig"%&gt;</pre></div><div class="sect3" title="3.2.11.3. Der foreach-Block"><div class="titlepage"><div><div><h4 class="title"><a name="dokumentenvorlagen-und-variablen.bloecke.foreach"></a>3.2.11.3. Der foreach-Block</h4></div></div></div><pre class="programlisting">&lt;%foreach variablenname%&gt;
+...
+&lt;%end%&gt;</pre><p>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
+          wie das Perl-Array der Variablen <code class="varname">variablenname</code>
+          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 <a class="link" href="ch03s02.html#dokumentenvorlagen-und-variablen.invoice-posten" title="3.2.8.2. Variablen für jeden Posten auf der Rechnung">zeilenbezogenen
+          Variablen</a> jeweils auf den Wert für die aktuelle Position
+          gesetzt.</p><p>Die Syntax sieht normalerweise wie folgt aus:</p><pre class="programlisting">&lt;%foreach number%&gt;
+Position: &lt;%runningnumber%&gt;
+Anzahl: &lt;%qty%&gt;
+Artikelnummer: &lt;%number%&gt;
+Beschreibung: &lt;%description%&gt;
+...
+&lt;%end%&gt;</pre><p>Besonderheit in OpenDocument-Vorlagen: Tritt ein
+          <code class="function">&lt;%foreach%&gt;</code>-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 <code class="function">&lt;%foreach%&gt;</code> und
+          <code class="function">&lt;%end%&gt;</code> wiederholt, nicht aber die
+          komplette Zeile, in der er steht.</p></div></div><div class="sect2" title="3.2.12. Markup-Code zur Textformatierung innerhalb von Formularen"><div class="titlepage"><div><div><h3 class="title"><a name="dokumentenvorlagen-und-variablen.markup"></a>3.2.12. Markup-Code zur Textformatierung innerhalb von
+        Formularen</h3></div></div></div><p>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.</p><p>Die unterstützen Formatierungen sind:</p><div class="variablelist"><dl><dt><span class="term">&lt;b&gt;Text&lt;/b&gt;</span></dt><dd><p>Text wird in Fettdruck gesetzt.</p></dd><dt><span class="term">&lt;i&gt;Text&lt;/i&gt;</span></dt><dd><p>Text wird kursiv gesetzt.</p></dd><dt><span class="term">&lt;u&gt;Text&lt;/u&gt;</span></dt><dd><p>Text wird unterstrichen.</p></dd><dt><span class="term">&lt;s&gt;Text&lt;/s&gt;</span></dt><dd><p>Text wird durchgestrichen. Diese Formatierung ist nicht
+              bei der Ausgabe als PDF über LaTeX verfügbar.</p></dd><dt><span class="term">&lt;bullet&gt;</span></dt><dd><p>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
+              unten).</p></dd></dl></div><p>Der Befehl <span class="command"><strong>&lt;bullet&gt;</strong></span> funktioniert
+        momentan auch nur in Latex-Vorlagen.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch03s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 3. Features und Funktionen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;3.3. Excel-Vorlagen</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch03s03.html b/doc/html/ch03s03.html
new file mode 100644 (file)
index 0000000..f4133e9
--- /dev/null
@@ -0,0 +1,36 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>3.3. Excel-Vorlagen</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch03.html" title="Kapitel 3. Features und Funktionen"><link rel="prev" href="ch03s02.html" title="3.2. Dokumentenvorlagen und verfügbare Variablen"><link rel="next" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">3.3. Excel-Vorlagen</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s02.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 3. Features und Funktionen</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="3.3. Excel-Vorlagen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="excel-templates"></a>3.3. Excel-Vorlagen</h2></div></div></div><div class="sect2" title="3.3.1. Zusammenfassung"><div class="titlepage"><div><div><h3 class="title"><a name="excel-templates.summary"></a>3.3.1. Zusammenfassung</h3></div></div></div><p>Dieses Dokument beschreibt den Mechanismus, mit dem
+        Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
+        einhergehen.</p></div><div class="sect2" title="3.3.2. Bedienung"><div class="titlepage"><div><div><h3 class="title"><a name="excel-templates.usage"></a>3.3.2. Bedienung</h3></div></div></div><p>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
+        werden. Die Konfigurationsoption heißt <code class="varname">excel_templates =
+        1</code> im Abschnitt <code class="varname">[print_templates]</code>.</p><p>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
+        anderen Vorlage mit der Endung <code class="filename">.xls</code> gespeichert
+        werden. In den normalen Verkaufsmasken taucht nun
+        <code class="constant">Excel</code> als auswählbares Format auf und kann von da
+        an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</p><p>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
+        eine Angebotsvorlage und wird unter dem internen Namen der Angebote
+        <code class="filename">sales_quotation.xls</code> gespeichert.</p></div><div class="sect2" title="3.3.3. Variablensyntax"><div class="titlepage"><div><div><h3 class="title"><a name="excel-templates.syntax"></a>3.3.3. Variablensyntax</h3></div></div></div><p>Einfache Syntax:
+        <span class="command"><strong>&lt;&lt;varname&gt;&gt;</strong></span>
+            </p><p>Dabei sind <code class="constant">&lt;&lt;</code> und
+        <code class="constant">&gt;&gt;</code> die Delimiter. Da Excel auf festen
+        Breiten besteht, kann der Tag künstlich verlängert werden, indem
+        weitere <code class="constant">&lt;</code> oder <code class="constant">&gt;</code>
+        eingefügt werden. Der Tag muss nicht symmetrisch sein.
+        Beispiel:</p><pre class="programlisting">&lt;&lt;&lt;&lt;&lt;varname&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</pre><p>Um die Limitierung der festen Breite zu reduzieren, können
+        weitere Variablen in einem Block interpoliert werden. Whitespace wird
+        dazwishen dann erhalten. Beispiel:</p><pre class="programlisting">&lt;&lt;&lt;&lt;&lt;varname1 varname2   varname3&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</pre><p>Die Variablen werden interpoliert, und linksbündig mit
+        Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
+        lang, werden überzählige Zeichen abgeschnitten.</p><p>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
+        der Block mit einem Leerzeichen anfängt. Beispiel:</p><pre class="programlisting">&lt;&lt;&lt;&lt;&lt;&lt;            varname&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</pre><p>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
+        Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
+        entfernt.</p></div><div class="sect2" title="3.3.4. Einschränkungen"><div class="titlepage"><div><div><h3 class="title"><a name="excel-templates.limitations"></a>3.3.4. Einschränkungen</h3></div></div></div><p>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
+        mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
+        beschränkt sich daher darauf, Textstellen exakt durch einen anderen
+        Text zu ersetzen.</p><p>Aus dem gleichen Grund sind die Kontrolllstrukturen
+        <span class="command"><strong>&lt;%if%&gt;</strong></span> und
+        <span class="command"><strong>&lt;%foreach%&gt;</strong></span> nicht vorhanden. Der Delimiter
+        <code class="constant">&lt;% %&gt;</code> kommt in den Headerinformationen
+        evtl. vor. Deshalb wurde auf den sichereren Delimiter
+        <code class="constant">&lt;&lt;</code> und <code class="constant">&gt;&gt;</code>
+        gewechselt.</p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s02.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.2. Dokumentenvorlagen und verfügbare Variablen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;Kapitel 4. Entwicklerdokumentation</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch04.html b/doc/html/ch04.html
new file mode 100644 (file)
index 0000000..2936dea
--- /dev/null
@@ -0,0 +1,153 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>Kapitel 4. Entwicklerdokumentation</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="prev" href="ch03s03.html" title="3.3. Excel-Vorlagen"><link rel="next" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Kapitel 4. Entwicklerdokumentation</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a>&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr></table><hr></div><div class="chapter" title="Kapitel 4. Entwicklerdokumentation"><div class="titlepage"><div><div><h2 class="title"><a name="d0e4243"></a>Kapitel 4. Entwicklerdokumentation</h2></div></div></div><div class="sect1" title="4.1. Globale Variablen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.globals"></a>4.1. Globale Variablen</h2></div></div></div><div class="sect2" title="4.1.1. Wie sehen globale Variablen in Perl aus?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4249"></a>4.1.1. Wie sehen globale Variablen in Perl aus?</h3></div></div></div><p>Globale Variablen liegen in einem speziellen namespace namens
+        "main", der von überall erreichbar ist. Darüber hinaus sind bareword
+        globs global und die meisten speziellen Variablen sind...
+        speziell.</p><p>Daraus ergeben sich folgende Formen:</p><div class="variablelist"><dl><dt><span class="term">
+                     <code class="literal">$main::form</code>
+                  </span></dt><dd><p>expliziter Namespace "main"</p></dd><dt><span class="term">
+                     <code class="literal">$::form</code>
+                  </span></dt><dd><p>impliziter Namespace "main"</p></dd><dt><span class="term">
+                     <code class="literal">open FILE, "file.txt"</code>
+                  </span></dt><dd><p>
+                        <code class="varname">FILE</code> ist global</p></dd><dt><span class="term">
+                     <code class="literal">$_</code>
+                  </span></dt><dd><p>speziell</p></dd></dl></div><p>Im Gegensatz zu <span class="productname">PHP</span>&#8482; gibt es kein
+        Schlüsselwort wie "<code class="function">global</code>", mit dem man
+        importieren kann. <code class="function">my</code>, <code class="function">our</code>
+        und <code class="function">local</code> machen was anderes.</p><div class="variablelist"><dl><dt><span class="term">
+                     <code class="literal">my $form</code>
+                  </span></dt><dd><p>lexikalische Variable, gültig bis zum Ende des
+              Scopes</p></dd><dt><span class="term">
+                     <code class="literal">our $form</code>
+                  </span></dt><dd><p>
+                        <code class="varname">$form</code> referenziert ab hier
+              <code class="varname">$PACKAGE::form</code>.</p></dd><dt><span class="term">
+                     <code class="literal">local $form</code>
+                  </span></dt><dd><p>Alle Änderungen an <code class="varname">$form</code> werden am Ende
+              des scopes zurückgesetzt</p></dd></dl></div></div><div class="sect2" title="4.1.2. Warum sind globale Variablen ein Problem?"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4350"></a>4.1.2. Warum sind globale Variablen ein Problem?</h3></div></div></div><p>Das erste Problem ist <span class="productname">FCGI</span>&#8482;.</p><p>
+               <span class="productname">SQL-Ledger</span>&#8482; hat fast alles im globalen
+        namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
+        Unter <span class="productname">FCGI</span>&#8482; müssen diese Sachen auch wieder
+        aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
+        Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
+        Datenbankverbindungen, weil die ne Ewigkeit zum initialisieren
+        brauchen.</p><p>Das zweite Problem ist <code class="function">strict</code>. Unter
+        <code class="function">strict</code> werden alle Variablen die nicht explizit
+        mit <code class="function">Package</code>, <code class="function">my</code> oder
+        <code class="function">our</code> angegeben werden als Tippfehler angemarkert,
+        was einen vor so mancher Stunde suchen nach einem Bug erspart. Da
+        globale Variablen aber implizit mit Package angegeben werden, werden
+        die nicht geprüft, und ein Tippfehler da fällt niemandem auf.</p></div><div class="sect2" title="4.1.3. Kanonische globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4383"></a>4.1.3. Kanonische globale Variablen</h3></div></div></div><p>Um dieses Problem im Griff zu halten gibt es einige wenige
+        globale Variablen, die kanonisch sind, und alles andere sollte
+        anderweitig umhergereicht werden.</p><p>Diese Variablen sind im Moment die folgenden neun:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+                     <code class="varname">$::form</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="varname">%::myconfig</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="varname">$::locale</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="varname">$::lxdebug</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="varname">$::auth</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="varname">$::lx_office_conf</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="varname">$::instance_conf</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="varname">$::dispatcher</code>
+                  </p></li><li class="listitem"><p>
+                     <code class="varname">$::request</code>
+                  </p></li></ul></div><p>Damit diese nicht als Müllhalde misbrauch werden, im Folgenden
+        eine kurze Erläuterung was man von denn erwarten kann.</p><div class="sect3" title="4.1.3.1. $::form"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4447"></a>4.1.3.1. $::form</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Ist ein Objekt der Klasse
+              "<code class="classname">Form</code>"</p></li><li class="listitem"><p>Wird nach jedem Request gelöscht</p></li><li class="listitem"><p>Muss auch in Tests und Konsolenscripts vorhanden
+              sein.</p></li><li class="listitem"><p>Enthält am Anfang eines Requests die Requestparameter vom
+              User</p></li><li class="listitem"><p>Kann zwar intern über Requestgrenzen ein Datenbankhandle
+              cachen, das wird aber momentan absichtlich zerstört</p></li></ul></div><p>
+                  <code class="varname">$::form</code> wurde unter <span class="productname">SQL
+          Ledger</span>&#8482; als Gottobjekt für alles misbraucht. Sämtliche
+          alten Funktionen unter SL/ mutieren <code class="varname">$::form</code>, das
+          heißt, alles was einem lieb ist, sollte man vor einem Aufruf von zum
+          Beispiel <code class="function">IS-&gt;retrieve_customer()</code> in
+          Sicherheit bringen.</p><p>Das Objekt der Klasse Form hat leider im Moment noch viele
+          zentrale Funktionen Gdie vom internen Zustand abhängen, deshalb
+          bitte nie einfach zerstören oder überschreiben. Es geht ziemlich
+          sicher etwas kaputt.</p><p>
+                  <code class="varname">$::form</code> ist gleichzeitig der Standard Scope
+          in den <span class="productname">Template::Toolkit</span>&#8482; Templates
+          außerhalb der Controller: der Ausdruck <code class="function">[% var
+          %]</code> greift auf <code class="varname">$::form-&gt;{var}</code> zu.
+          Unter Controllern ist der Standard Scope anders, da lautet der
+          Zugriff <code class="function">[% FORM.var %]</code>. In Druckvorlagen sind
+          normale Variablen ebenfall im <code class="varname">$::form</code> Scope, d.h.
+          <code class="function">&lt;%var%&gt;</code> zeigt auf
+          <code class="varname">$::form-&gt;{var}</code>. Innerhalb von Schleifen wird
+          <code class="varname">$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</code>
+          bevorzugt, wenn vorhanden.</p></div><div class="sect3" title="4.1.3.2. %::myconfig"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4514"></a>4.1.3.2. %::myconfig</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Das einzige Hash unter den globalen Variablen</p></li><li class="listitem"><p>Wird spätestens benötigt wenn auf die Datenbank
+              zugegriffen wird</p></li><li class="listitem"><p>Wird bei jedem Request neu erstellt.</p></li><li class="listitem"><p>Enthält die Userdaten des aktuellen Logins</p></li><li class="listitem"><p>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
+              extern serialisiert werden, weil da auch der Datenbankzugriff
+              für diesenuser drinsteht.</p></li><li class="listitem"><p>Enthält unter anderem Listenbegrenzung vclimit,
+              Datumsformat dateformat und Nummernformat numberformat</p></li><li class="listitem"><p>Enthält Datenbankzugriffinformationen</p></li></ul></div><p>
+                  <code class="varname">%::myconfig</code> ist im Moment der Ersatz für
+          ein Userobjekt. Die meisten Funktionen, die etwas anhand des
+          aktuellen Users entscheiden müssen, befragen
+          <code class="varname">%::myconfig</code>.</p></div><div class="sect3" title="4.1.3.3. $::locale"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4547"></a>4.1.3.3. $::locale</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "Locale"</p></li><li class="listitem"><p>Wird pro Request erstellt</p></li><li class="listitem"><p>Muss auch für Tests und Scripte immer verfügbar
+              sein.</p></li><li class="listitem"><p>Cached intern über Requestgrenzen hinweg benutzte
+              Locales</p></li></ul></div><p>Lokalisierung für den aktuellen User. Alle Übersetzungen,
+          Zahlen- und Datumsformatierungen laufen über dieses Objekt.</p></div><div class="sect3" title="4.1.3.4. $::lxdebug"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4565"></a>4.1.3.4. $::lxdebug</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "LXDebug"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Muss immer verfügbar sein, in nahezu allen
+              Funktionen</p></li></ul></div><p>
+                  <code class="varname">$::lxdebug</code> stellt Debuggingfunktionen
+          bereit, wie "<code class="function">enter_sub</code>" und
+          "<code class="function">leave_sub</code>", mit denen in den alten Modulen ein
+          brauchbares Tracing gebaut ist, "<code class="function">log_time</code>", mit
+          der man die Wallclockzeit seit Requeststart loggen kann, sowie
+          "<code class="function">message</code>" und "<code class="function">dump</code>" mit
+          denen man flott Informationen ins Log packen kann.</p></div><div class="sect3" title="4.1.3.5. $::auth"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4598"></a>4.1.3.5. $::auth</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse "SL::Auth"</p></li><li class="listitem"><p>Wird global gecached</p></li><li class="listitem"><p>Hat eine permanente DB Verbindung zur Authdatenbank</p></li><li class="listitem"><p>Wird nach jedem Request resettet.</p></li></ul></div><p>
+                  <code class="varname">$::auth</code> stellt Funktionen bereit um die
+          Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
+          vom aktuellen User abhängen wird das Objekt aus
+          Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
+          Request kurz resettet.</p></div><div class="sect3" title="4.1.3.6. $::lx_office_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4619"></a>4.1.3.6. $::lx_office_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
+              "<code class="classname">SL::LxOfficeConf</code>"</p></li><li class="listitem"><p>Global gecached</p></li><li class="listitem"><p>Repräsentation der
+              <code class="filename">config/lx_office.conf[.default]</code>-Dateien</p></li></ul></div><p>Globale Konfiguration. Configdateien werden zum Start gelesen,
+          und nicht mehr angefasst. Es ist derzeit nicht geplant, dass das
+          Programm die Konfiguration ändern kann oder sollte.</p><p>Für die folgende Konfigurationsdatei:</p><pre class="programlisting">[debug]
+file = /tmp/lxoffice_debug_log.txt</pre><p>ist der Key <code class="varname">file</code> im Programm als
+          <code class="varname">$::lx_office_conf-&gt;{debug}{file}</code>
+          erreichbar.</p><div class="warning" title="Warnung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Warning"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Warnung]" src="../../../../system/docbook-xsl/images/warning.png"></td><th align="left">Warnung</th></tr><tr><td align="left" valign="top"><p>Zugriff auf die Konfiguration erfolgt im Moment über
+            Hashkeys, sind also nicht gegen Tippfehler abgesichert.</p></td></tr></table></div></div><div class="sect3" title="4.1.3.7. $::instance_conf"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4655"></a>4.1.3.7. $::instance_conf</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
+              "<code class="classname">SL::InstanceConfiguration</code>"</p></li><li class="listitem"><p>wird pro Request neu erstellt</p></li></ul></div><p>Funktioniert wie <code class="varname">$::lx_office_conf</code>,
+          speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
+          ist hier eine Mandantendatenbank. Prominentestes Datum ist "eur",
+          die Information ob Bilanz oder Einnahmenüberschussrechnung gemacht
+          wird.</p></div><div class="sect3" title="4.1.3.8. $::dispatcher"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4673"></a>4.1.3.8. $::dispatcher</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Objekt der Klasse
+              "<code class="varname">SL::Dispatcher</code>"</p></li><li class="listitem"><p>wird pro Serverprozess erstellt.</p></li><li class="listitem"><p>enthält Informationen über die technische Verbindung zum
+              Server</p></li></ul></div><p>Der dritte Punkt ist auch der einzige Grund warum das Objekt
+          global gespeichert wird. Wird vermutlich irgendwann in einem anderen
+          Objekt untergebracht.</p></div><div class="sect3" title="4.1.3.9. $::request"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4691"></a>4.1.3.9. $::request</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Hashref (evtl später Objekt)</p></li><li class="listitem"><p>Wird pro Request neu initialisiert.</p></li><li class="listitem"><p>Keine Unterstruktur garantiert.</p></li></ul></div><p>
+                  <code class="varname">$::request</code> ist ein generischer Platz um
+          Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
+          at a distance benutzt werden, sondern um lokales memoizing zu
+          ermöglichen, das garantiert am Ende des Requests zerstört
+          wird.</p><p>Vieles von dem, was im moment in <code class="varname">$::form</code>
+          liegt, sollte eigentlich hier liegen. Die groben
+          Differentialkriterien sind:</p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Kommt es vom User, und soll unverändert wieder an den User? Dann <code class="varname">$::form</code>, steht da eh schon</p></li><li class="listitem"><p>Sind es Daten aus der Datenbank, die nur bis zum Ende des Requests gebraucht werden? Dann
+              <code class="varname">$::request</code>
+                     </p></li><li class="listitem"><p>Muss ich von anderen Teilen des Programms lesend drauf zugreifen? Dann <code class="varname">$::request</code>, aber Zugriff über
+              Wrappermethode</p></li></ul></div></div></div><div class="sect2" title="4.1.4. Ehemalige globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="d0e4733"></a>4.1.4. Ehemalige globale Variablen</h3></div></div></div><p>Die folgenden Variablen waren einmal im Programm, und wurden
+        entfernt.</p><div class="sect3" title="4.1.4.1. $::cgi"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4738"></a>4.1.4.1. $::cgi</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil cookie Methoden nicht als
+              Klassenfunktionen funktionieren</p></li><li class="listitem"><p>Aufruf als Klasse erzeugt Dummyobjekt was im
+              Klassennamespace gehalten wird und über Requestgrenzen
+              leaked</p></li><li class="listitem"><p>liegt jetzt unter
+              <code class="varname">$::request-&gt;{cgi}</code>
+                     </p></li></ul></div></div><div class="sect3" title="4.1.4.2. $::all_units"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4754"></a>4.1.4.2. $::all_units</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>war nötig, weil einige Funktionen in Schleifen zum Teil
+              ein paar hundert mal pro Request eine Liste der Einheiten
+              brauchen, und de als Parameter durch einen Riesenstack von
+              Funktionen geschleift werden müssten.</p></li><li class="listitem"><p>Liegt jetzt unter
+              <code class="varname">$::request-&gt;{cache}{all_units}</code>
+                     </p></li><li class="listitem"><p>Wird nur in
+              <code class="function">AM-&gt;retrieve_all_units()</code> gesetzt oder
+              gelesen.</p></li></ul></div></div><div class="sect3" title="4.1.4.3. %::called_subs"><div class="titlepage"><div><div><h4 class="title"><a name="d0e4773"></a>4.1.4.3. %::called_subs</h4></div></div></div><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>wurde benutzt um callsub deep recursions
+              abzufangen.</p></li><li class="listitem"><p>Wurde entfernt, weil callsub nur einen Bruchteil der
+              möglichen Rekursioenen darstellt, und da nie welche
+              auftreten.</p></li><li class="listitem"><p>komplette recursion protection wurde entfernt.</p></li></ul></div></div></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch03s03.html">Zurück</a>&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.3. Excel-Vorlagen&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.2. Entwicklung unter FastCGI</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch04s02.html b/doc/html/ch04s02.html
new file mode 100644 (file)
index 0000000..e8b7b7b
--- /dev/null
@@ -0,0 +1,42 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>4.2. Entwicklung unter FastCGI</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="next" href="ch04s03.html" title="4.3. SQL-Upgradedateien"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.2. Entwicklung unter FastCGI</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="4.2. Entwicklung unter FastCGI"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.fcgi"></a>4.2. Entwicklung unter FastCGI</h2></div></div></div><div class="sect2" title="4.2.1. Allgemeines"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.general"></a>4.2.1. Allgemeines</h3></div></div></div><p>Wenn Änderungen in der Konfiguration von Lx-Office gemacht
+        werden, muss der Webserver neu gestartet werden.</p><p>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
+        achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
+        müssen folgende Aspekte beachtet werden.</p></div><div class="sect2" title="4.2.2. Programmende und Ausnahmen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.exiting"></a>4.2.2. Programmende und Ausnahmen</h3></div></div></div><p>Betrifft die Funktionen <code class="function">warn</code>,
+        <code class="function">die</code>, <code class="function">exit</code>,
+        <code class="function">carp</code> und <code class="function">confess</code>.</p><p>Fehler, die dass Programm normalerweise sofort beenden (fatale
+        Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
+        am Laufen zu halten. Man kann mit <code class="function">die</code>,
+        <code class="function">confess</code> oder <code class="function">carp</code> Fehler
+        ausgeben, die dann vom Dispatcher angezeigt werden. Die Lx-Office
+        eigene <code class="function">$::form-</code>error()&gt; tut im Prinzip das
+        Gleiche, mit ein paar Extraoptionen. <code class="function">warn</code> und
+        <code class="function">exit</code> hingegen werden nicht abgefangen.
+        <code class="function">warn</code> wird direkt nach STDERR, also in Server Log
+        eine Nachricht schreiben (sofern in der Konfiguration nicht die
+        Warnungen in das Lx-Office Log umgeleitet wurden), und
+        <code class="function">exit</code> wird die Ausführung beenden.</p><p>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
+        beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
+        Ausnahme sein. Quintessenz: Bitte kein <code class="function">exit</code>
+        benutzen, alle anderen Exceptionmechanismen sind ok.</p></div><div class="sect2" title="4.2.3. Globale Variablen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.globals"></a>4.2.3. Globale Variablen</h3></div></div></div><p>Um zu vermeiden, dass Informationen von einem Request in einen
+        anderen gelangen, müssen alle globalen Variablen vor einem Request
+        sauber initialisiert werden. Das ist besonders wichtig im
+        <code class="varname">$::cgi</code> und <code class="varname">$::auth</code> Objekt, weil
+        diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
+        werden.</p><p>In <code class="classname">SL::Dispatcher</code> gibt es einen sauber
+        abgetrennten Block, der alle kanonischen globalen Variablen listet und
+        erklärt. Bitte keine anderen einführen ohne das sauber zu
+        dokumentieren.</p><p>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
+        man sicher geht, dass man die richtige erwischt.</p></div><div class="sect2" title="4.2.4. Performance und Statistiken"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.performance"></a>4.2.4. Performance und Statistiken</h3></div></div></div><p>Die kritischen Pfade des Programms sind die Belegmasken, und
+        unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
+        Rechnungsmaske in Lx-Office 2.4.3 stable dauert auf einem Core2duo mit
+        4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
+        sind es je nach Menge der definierten Variablen 1-2s. Ab der
+        Moose/Rose::DB Version sind es 5-6s.</p><p>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
+        den kritischen Pfaden, unter 0,15 sonst.</p></div><div class="sect2" title="4.2.5. Bekannte Probleme"><div class="titlepage"><div><div><h3 class="title"><a name="devel.fcgi.known-issues"></a>4.2.5. Bekannte Probleme</h3></div></div></div><div class="sect3" title="4.2.5.1. Encoding Awareness"><div class="titlepage"><div><div><h4 class="title"><a name="devel.fcgi.known-issues.encoding"></a>4.2.5.1. Encoding Awareness</h4></div></div></div><p>UTF-8 kodierte Installationen sind sehr anfällig gegen
+          fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
+          falsch kodierte Zeichen eher unwissend, und geben sie einfach
+          weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
+          das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
+          beseitigen.</p></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 4. Entwicklerdokumentation&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.3. SQL-Upgradedateien</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch04s03.html b/doc/html/ch04s03.html
new file mode 100644 (file)
index 0000000..41d3b50
--- /dev/null
@@ -0,0 +1,96 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>4.3. SQL-Upgradedateien</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04s02.html" title="4.2. Entwicklung unter FastCGI"><link rel="next" href="ch04s04.html" title="4.4. Translations and languages"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.3. SQL-Upgradedateien</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s02.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s04.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="4.3. SQL-Upgradedateien"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="db-upgrade-files"></a>4.3. SQL-Upgradedateien</h2></div></div></div><div class="sect2" title="4.3.1. Einführung"><div class="titlepage"><div><div><h3 class="title"><a name="db-upgrade-files.introduction"></a>4.3.1. Einführung</h3></div></div></div><p>
+       Der alte Mechanismus für SQL-Upgradescripte, der auf einer Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
+       diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele Entwicklung im stable- und unstable-Baum betrifft.
+      </p><p>
+       Dieser Mechanismus wurde für Lx-Office 2.4.1 deutlich erweitert. Es werden weiterhin alle Scripte aus sql/Pg-upgrade
+       ausgeführt. Zusätzlich gibt es aber ein zweites Verzeichnis, sql/Pg-upgrade2. In diesem Verzeichnis muss pro Datenbankupgrade eine
+       Datei existieren, die neben den eigentlich auszuführenden SQL- oder Perl-Befehlen einige Kontrollinformationen enthält.
+      </p><p>
+       Neu sind die Kontrollinformationen, die Abhängigkeiten und Prioritäten definieren können werden, sodass Datenbankscripte zwar in
+       einer sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER TABLE" erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE"
+       angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man keine Versionsnummern mehr braucht.
+      </p><p>
+       Lx-Office merkt sich dabei, welches der Upgradescripte in sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht erneut
+       aus. Dazu dient die Tabelle "schema_info", die bei der Anmeldung automatisch angelegt wird.
+      </p></div><div class="sect2" title="4.3.2. Format der Kontrollinformationen"><div class="titlepage"><div><div><h3 class="title"><a name="db-upgrade-files.format"></a>4.3.2. Format der Kontrollinformationen</h3></div></div></div><p>
+       Die Kontrollinformationen sollten sich am Anfang der jeweiligen Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
+       hat dabei das folgende Format:
+      </p><p>
+       Für SQL-Upgradedateien:
+      </p><pre class="programlisting">-- @key: value</pre><p>
+       Für Perl-Upgradedateien:
+      </p><pre class="programlisting"># @key: value</pre><p>
+       Leerzeichen vor "<code class="varname">value</code>" werden entfernt.
+      </p><p>
+       Die folgenden Schlüsselworte werden verarbeitet:
+      </p><div class="variablelist"><dl><dt><span class="term">
+                     <code class="varname">tag</code>
+                  </span></dt><dd><p>
+          Wird zwingend benötigt. Dies ist der "Name" des Upgrades. Dieser "tag" kann von anderen Kontrolldateien in ihren Abhängigkeiten
+          verwendet werden (Schlüsselwort "<code class="varname">depends</code>"). Der "tag" ist auch der Name, der in der Datenbank eingetragen wird.
+         </p><p>
+          Normalerweise sollte die Kontrolldatei genau so heißen wie der "tag", nur mit der Endung ".sql" bzw. "pl".
+         </p><p>
+          Ein Tag darf nur aus alphanumerischen Zeichen sowie den Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht erlaubt und
+          sollten stattdessen mit Unterstrichen ersetzt werden.
+         </p></dd><dt><span class="term">
+                     <code class="varname">charset</code>
+                  </span></dt><dd><p>
+          Empfohlen. Gibt den Zeichensatz an, in dem das Script geschrieben wurde, z.B. "<code class="literal">UTF-8</code>". Aus
+          Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei Abwesenheit des Tags der Zeichensatz "<code class="literal">ISO-8859-15</code>"
+          angenommen.
+         </p></dd><dt><span class="term">
+                     <code class="varname">description</code>
+                  </span></dt><dd><p>
+          Benötigt. Eine Beschreibung, was in diesem Update passiert. Diese wird dem Benutzer beim eigentlichen Datenbankupdate
+          angezeigt. Während der Tag in englisch gehalten sein sollte, sollte die Beschreibung auf Deutsch erfolgen.
+         </p></dd><dt><span class="term">
+                     <code class="varname">depends</code>
+                  </span></dt><dd><p>
+          Optional. Eine mit Leerzeichen getrennte Liste von "tags", von denen dieses Upgradescript abhängt. Lx-Office stellt sicher, dass
+          die in dieser Liste aufgeführten Scripte bereits durchgeführt wurden, bevor dieses Script ausgeführt wird.
+         </p><p>
+          Abhängigkeiten werden rekursiv betrachtet. Wenn also ein Script "b" existiert, das von Änderungen in "a" abhängt, und eine neue
+          Kontrolldatei für "c" erstellt wird, die von Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den Tag "b" als
+          Abhängigkeit zu definieren.
+         </p><p>
+          Es ist nicht erlaubt, sich selbst referenzierende Abhängigkeiten zu definieren (z.B. "a" -&gt; "b",
+          "b" -&gt; "c" und "c" -&gt; "a").
+         </p></dd><dt><span class="term">
+                     <code class="varname">priority</code>
+                  </span></dt><dd><p>
+          Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in der Scripte ausgeführt werden, die die gleichen Abhängigkeitstiefen
+          besitzen. Fehlt dieser Parameter, so wird der Wert 1000 benutzt.
+         </p><p>
+          Dies ist reine Kosmetik. Für echte Reihenfolgen muss "depends" benutzt werden. Lx-Office sortiert die auszuführenden Scripte
+          zuerst nach der Abhängigkeitstiefe (wenn "z" von "y" abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von 2, "y" von 1
+          und "x" von 0. "x" würde hier zuerst ausgeführt, dann "y", dann "z"), dann nach der Priorität und bei gleicher Priorität
+          alphabetisch nach dem "tag".
+         </p></dd></dl></div></div><div class="sect2" title="4.3.3. Hilfsscript dbupgrade2_tool.pl"><div class="titlepage"><div><div><h3 class="title"><a name="db-upgrade-files.dbupgrade-tool"></a>4.3.3. Hilfsscript dbupgrade2_tool.pl</h3></div></div></div><p>
+       Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern, existiert ein Hilfsscript namens
+       "<code class="filename">scripts/dbupgrade2_tool.pl</code>". Es muss aus dem Lx-Office-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses
+       Tool liest alle Datenbankupgradescripte aus dem Verzeichnis <code class="filename">sql/Pg-upgrade2</code> aus. Es benutzt dafür die gleichen
+       Methoden wie Lx-Office selber, sodass alle Fehlersituationen von der Kommandozeile überprüft werden können.
+      </p><p>
+       Wird dem Script kein weiterer Parameter übergeben, so wird nur eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
+       sich aber auch Informationen auf verschiedene Art ausgeben lassen:
+      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>Listenform: "<span class="command"><strong>./scripts/dbupgrade2_tool.pl --list</strong></span>"</p><p>
+         Gibt eine Liste aller Scripte aus. Die Liste ist in der Reihenfolge sortiert, in der Lx-Office die Scripte ausführen würde. Es
+         werden neben der Listenposition der Tag, die Abhängigkeitstiefe und die Priorität ausgegeben.
+        </p></li><li class="listitem"><p>Baumform: "<span class="command"><strong>./scripts/dbupgrade2_tool.pl --tree</strong></span>"</p><p>
+         Listet alle Tags in Baumform basierend auf den Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von denen keine
+         anderen abhängen. Die Unterknoten sind Scripte, die beim übergeordneten Script als Abhängigkeit eingetragen sind.
+        </p></li><li class="listitem"><p><a name="db-upgrade-files.dbupgrade-tool.reverse-tree"></a>Umgekehrte Baumform: "<span class="command"><strong>./scripts/dbupgrade2_tool.pl --rtree</strong></span>"</p><p>
+         Listet alle Tags in Baumform basierend auf den Abhängigkeiten auf.  Die "Wurzelknoten" sind dabei die Scripte mit der geringsten
+         Abhängigkeitstiefe. Die Unterknoten sind Scripte, die das übergeordnete Script als Abhängigkeit eingetragen haben.
+        </p></li><li class="listitem"><p>Baumform mit Postscriptausgabe: "<span class="command"><strong>./scripts/dbupgrade2_tool.pl --graphviz</strong></span>"</p><p>
+         Benötigt das Tool "<span class="command"><strong>graphviz</strong></span>", um mit seiner Hilfe die <a class="link" href="ch04s03.html#db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte Baumform</a> in eine Postscriptdatei namens
+         "<code class="filename">db_dependencies.ps</code>" auszugeben. Dies ist vermutlich die übersichtlichste Form, weil hierbei jeder Knoten nur
+         einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben werden.
+        </p></li><li class="listitem"><p>
+         Scripte, von denen kein anderes Script abhängt: "<span class="command"><strong>./scripts/dbupgrade2_tool.pl --nodeps</strong></span>"
+        </p><p>
+         Listet die Tags aller Scripte auf, von denen keine anderen Scripte abhängen.
+        </p></li></ul></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04s02.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s04.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">4.2. Entwicklung unter FastCGI&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.4. Translations and languages</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch04s04.html b/doc/html/ch04s04.html
new file mode 100644 (file)
index 0000000..e744c4f
--- /dev/null
@@ -0,0 +1,81 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>4.4. Translations and languages</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04s03.html" title="4.3. SQL-Upgradedateien"><link rel="next" href="ch04s05.html" title="4.5. Stil-Richtlinien"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.4. Translations and languages</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s03.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s05.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="4.4. Translations and languages"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="translations-languages"></a>4.4. Translations and languages</h2></div></div></div><div class="sect2" title="4.4.1. Introduction"><div class="titlepage"><div><div><h3 class="title"><a name="translations-languages.introduction"></a>4.4.1. Introduction</h3></div></div></div><div class="note" title="Anmerkung" style="margin-left: 0.5in; margin-right: 0.5in;"><table border="0" summary="Note"><tr><td rowspan="2" align="center" valign="top" width="25"><img alt="[Anmerkung]" src="../../../../system/docbook-xsl/images/note.png"></td><th align="left">Anmerkung</th></tr><tr><td align="left" valign="top"><p>Dieser Abschnitt ist in Englisch geschrieben, um
+          internationalen Übersetzern die Arbeit zu erleichtern.</p></td></tr></table></div><p>This section describes how localization packages in Lx-Office
+        are built. Currently the only language fully supported is German, and
+        since most of the internal messages are held in English the English
+        version is usable too.</p><p>A stub version of French is included but not functunal at this
+        point.</p></div><div class="sect2" title="4.4.2. File structure"><div class="titlepage"><div><div><h3 class="title"><a name="translations-languages.file-structure"></a>4.4.2. File structure</h3></div></div></div><p>The structure of locales in Lx-Office is:</p><pre class="programlisting">lx-office/locale/&lt;langcode&gt;/</pre><p>where &lt;langcode&gt; stands for an abbreviation of the
+        language package. The builtin packages use two letter <a class="ulink" href="http://en.wikipedia.org/wiki/ISO_639-1" target="_top">ISO 639-1</a> codes,
+        but the actual name is not relevant for the program and can easily be
+        extended to <a class="ulink" href="http://en.wikipedia.org/wiki/IETF_language_tag" target="_top">IETF language
+        tags</a> (i.e. "en_GB"). In fact the original language packages
+        from SQL Ledger are named in this way.</p><p>In such a language directory the following files are
+        recognized:</p><div class="variablelist"><dl><dt><span class="term">LANGUAGE</span></dt><dd><p>This file is mandatory.</p><p>The <code class="filename">LANGUAGE</code> file contains the self
+              descripted name of the language. It should contain a native
+              representation first, and in parenthesis an english translation
+              after that. Example:</p><pre class="programlisting">Deutsch (German)</pre></dd><dt><span class="term">charset</span></dt><dd><p>This file should be present.</p><p>The <code class="filename">charset</code> file describes which
+              charset a language package is written in and applies to all
+              other language files in the package. It is possible to write
+              some language packages without an explicit charset, but it is
+              still strongly recommended. You'll never know in what
+              environment your language package will be used, and neither
+              UTF-8 nor Latin1 are guaranteed.</p><p>The whole content of this file is a string that can be
+              recognized as a valid charset encoding. Example:</p><pre class="programlisting">UTF-8</pre></dd><dt><span class="term">all</span></dt><dd><p>This file is mandatory.</p><p>The central translation file. It is essentially an inline
+              Perl script autogenerated by <span class="command"><strong>locales.pl</strong></span>. To
+              generate it, generate the directory and the two files mentioned
+              above, and execute the following command:</p><pre class="programlisting">scripts/locales.pl &lt;langcode&gt;</pre><p>Otherwise you can simply copy one of the other languages.
+              You will be told how many are missing like this:</p><pre class="programlisting">$ scripts/locales.pl en
+English - 0.6% - 2015/2028 missing</pre><p>A file named "<code class="filename">missing</code>" will be
+              generated and can be edited. You can also edit the
+              "<code class="filename">all</code>" file directly. Edit everything you
+              like to fit the target language and execute
+              <span class="command"><strong>locales.pl</strong></span> again. See how the missing words
+              get fewer.</p></dd><dt><span class="term">Num2text</span></dt><dd><p>Legacy code from SQL Ledger. It provides a means for
+              numbers to be converted into natural language, like
+              <code class="literal">1523 =&gt; one thousand five hundred twenty
+              three</code>. If you want to provide it, it must be inlinable
+              Perl code which provides a <code class="function">num2text</code> sub. If
+              an <code class="function">init</code> sub exists it will be executed
+              first.</p><p>Only used in the check and receipt printing module.</p></dd><dt><span class="term">special_chars</span></dt><dd><p>Lx-Office comes with a lot of interfaces to different
+              formats, some of which are rather picky with their accepted
+              charset. The <code class="filename">special_chars</code> file contains a
+              listing of chars not suited for different file format and
+              provides substitutions. It is written in "Simple Ini" style,
+              containing a block for every file format.</p><p>First entry should be the order of substitution for
+              entries as a whitespace separated list. All entries are
+              interpolated, so <code class="literal">\n</code>, <code class="literal">\x20</code>
+              and <code class="literal">\\</code> all work.</p><p>After that every entry is a special char that should be
+              translated when writing text into such a file.</p><p>Example:</p><pre class="programlisting">[Template/XML]
+order=&amp; &lt; &gt; \n
+&amp;=&amp;amp;
+&lt;=&amp;lt;
+&gt;=&amp;gt;
+\n=&lt;br&gt;</pre><p>Note the importance of the order in this example.
+              Substituting &lt; and &gt; befor &amp; would lead to $gt; become
+              &amp;amp;gt;</p><p>For a list of valid formats, see the German
+              <code class="filename">special_chars</code> entry. As of this writing the
+              following are recognized:</p><pre class="programlisting">HTML
+URL@HTML
+Template/HTML
+Template/XML
+Template/LaTeX
+Template/OpenDocument
+filenames</pre><p>The last of which is very machine dependant. Remember that
+              a lot of characters are forbidden by some filesystems, for
+              exmaple MS Windows doesn't like ':' in its files where Linux
+              doesn't mind that. If you want the files created with your
+              language pack to be portable, find all chars that could cause
+              trouble.</p></dd><dt><span class="term">missing</span></dt><dd><p>This file is not a part of the language package
+              itself.</p><p>This is a file generated by
+              <span class="command"><strong>scripts/locales.pl</strong></span> while processing your
+              locales. It's only to have the missing entries singled out and
+              does not belong to a language package.</p></dd><dt><span class="term">lost</span></dt><dd><p>This file is not a part of the language package
+              itself.</p><p>Another file generated by
+              <span class="command"><strong>scripts/locales.pl</strong></span>. If for any reason a
+              translation does not appear anymore and can be deleted, it gets
+              moved here. The last 50 or so entries deleted are saved here in
+              case you made a typo, so that you don't have to translate
+              everything again. If a tranlsation is missing, the lost file is
+              checked first. If you maintain a language package, you might
+              want to keep this safe somewhere.</p></dd></dl></div></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04s03.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s05.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">4.3. SQL-Upgradedateien&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.5. Stil-Richtlinien</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch04s05.html b/doc/html/ch04s05.html
new file mode 100644 (file)
index 0000000..442f3e0
--- /dev/null
@@ -0,0 +1,134 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>4.5. Stil-Richtlinien</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04s04.html" title="4.4. Translations and languages"><link rel="next" href="ch04s06.html" title="4.6. Dokumentation erstellen"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.5. Stil-Richtlinien</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s04.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch04s06.html">Weiter</a></td></tr></table><hr></div><div class="sect1" title="4.5. Stil-Richtlinien"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.style-guide"></a>4.5. Stil-Richtlinien</h2></div></div></div><p>
+       Die folgenden Regeln haben das Ziel, den Code möglichst gut les- und wartbar zu machen. Dazu gehört zum Einen, dass der Code
+       einheitlich eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden wird (Stichworte "Klammern" oder "Hash-Keys").
+      </p><p>
+       Diese Regeln sind keine Schikane sondern erleichtern allen das Leben!
+      </p><p>
+       Jeder, der einen Patch schickt, sollte seinen Code vorher überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
+       nicht.
+      </p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p>
+         Es werden keine echten Tabs sondern Leerzeichen verwendet.
+        </p></li><li class="listitem"><p>
+         Die Einrückung beträgt zwei Leerzeichen. Beispiel:
+        </p><pre class="programlisting">foreach my $row (@data) {
+  if ($flag) {
+    # do something with $row
+  }
+
+  if ($use_modules) {
+    $row-&gt;{modules} = MODULE-&gt;retrieve(
+      id   =&gt; $row-&gt;{id},
+      date =&gt; $use_now ? localtime() : $row-&gt;{time},
+    );
+  }
+
+  $report-&gt;add($row);
+}</pre></li><li class="listitem"><p>Öffnende geschweifte Klammern befinden sich auf der gleichen Zeile wie der letzte Befehl. Beispiele:</p><pre class="programlisting">sub debug {
+  ...
+}</pre><p>oder</p><pre class="programlisting">if ($form-&gt;{item_rows} &gt; 0) {
+  ...
+}</pre></li><li class="listitem"><p>
+         Schließende geschweifte Klammern sind so weit eingerückt wie der Befehl / die öffnende schließende Klammer, die den Block gestartet
+         hat, und nicht auf der Ebene des Inhalts. Die gleichen Beispiele wie bei 3. gelten.
+        </p></li><li class="listitem"><p>
+         Die Wörter "<code class="function">else</code>", "<code class="function">elsif</code>", "<code class="function">while</code>" befinden sich auf der gleichen
+         Zeile wie schließende geschweifte Klammern. Beispiele:
+        </p><pre class="programlisting">if ($form-&gt;{sum} &gt; 1000) {
+  ...
+} elsif ($form-&gt;{sum} &gt; 0) {
+  ...
+} else {
+  ...
+}
+
+do {
+  ...
+} until ($a &gt; 0);</pre></li><li class="listitem"><p>
+         Parameter von Funktionsaufrufen müssen mit runden Klammern versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
+         und grep-ähnliche Operatoren. Beispiel:
+        </p><pre class="programlisting">$main::lxdebug-&gt;message("Could not find file.");
+%options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</pre></li><li class="listitem"><p>
+         Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:
+        </p><p>
+         Generell gilt: Hashkeys und Arrayindices sollten nicht durch Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
+         Blöcke schon. Beispiel:
+        </p><pre class="programlisting">if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
+  ...
+}
+
+$array[$i + 1]             = 4;
+$form-&gt;{sum}              += $form-&gt;{"row_$i"};
+$form-&gt;{ $form-&gt;{index} } += 1;
+
+map { $form-&gt;{sum} += $form-&gt;{"row_$_"} } 1..$rowcount;</pre></li><li class="listitem"><p>
+         Mehrzeilige Befehle
+        </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>
+           Werden die Parameter eines Funktionsaufrufes auf mehrere Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
+           werden, in der die ersten Funktionsparameter in der ersten Zeile stehen. Beispiel:
+          </p><pre class="programlisting">$sth = $dbh-&gt;prepare("SELECT * FROM some_table WHERE col = ?",
+                    $form-&gt;{some_col_value});</pre></li><li class="listitem"><p>
+           Ein Spezialfall ist der ternäre Oprator "?:", der am besten in einer übersichtlichen Tabellenstruktur organisiert
+           wird. Beispiel:
+          </p><pre class="programlisting">my $rowcount = $form-&gt;{"row_$i"} ? $i
+             : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
+             :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</pre></li></ol></div></li><li class="listitem"><p>
+         Kommentare
+        </p><div class="orderedlist"><ol class="orderedlist" type="a"><li class="listitem"><p>Kommentare, die alleine in einer Zeile stehen, sollten soweit wie der Code eingerückt sein.</p></li><li class="listitem"><p>Seitliche hängende Kommentare sollten einheitlich formatiert werden.</p></li><li class="listitem"><p>
+           Sämtliche Kommentare und Sonstiges im Quellcode ist bitte auf Englisch zu verfassen. So wie ich keine Lust habe, französischen
+           Quelltext zu lesen, sollte auch der Lx-Office Quelltext für nicht-Deutschsprachige lesbar sein. Beispiel:
+          </p><pre class="programlisting">my $found = 0;
+while (1) {
+  last if $found;
+
+  # complicated check
+  $found = 1 if //
+}
+
+$i  = 0        # initialize $i
+$n  = $i;      # save $i
+$i *= $const;  # do something crazy
+$i  = $n;      # recover $i</pre></li></ol></div></li><li class="listitem"><p>
+         Hashkeys sollten nur in Anführungszeichen stehen, wenn die Interpolation gewünscht ist. Beispiel:
+        </p><pre class="programlisting">$form-&gt;{sum}      = 0;
+$form-&gt;{"row_$i"} = $form-&gt;{"row_$i"} - 5;
+$some_hash{42}    = 54;</pre></li><li class="listitem"><p>
+         Die maximale Zeilenlänge ist nicht bescränkt. Zeilenlängen unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
+         wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in grossen Tabellen), dann ist Lesbarkeit vorzuziehen.
+        </p><p>
+         Als Beispiel sei die Funktion <code class="function">print_options</code> aus <code class="filename">bin/mozilla/io.pl</code> angeführt.
+        </p></li><li class="listitem"><p>
+         Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die
+         diffs verfälschen.
+        </p><p>
+         Emacs und vim haben beide recht einfache Methoden zur Entfernung von trailing whitespace. Emacs kennt das Kommande
+         <span class="command"><strong>nuke-trailing-whitespace</strong></span>, vim macht das gleiche manuell über <code class="literal">:%s/\s\+$//e</code> Mit <code class="literal">:au
+         BufWritePre * :%s/\s\+$//e</code> wird das an Speichern gebunden.
+        </p></li><li class="listitem"><p>
+         Es wird kein <span class="command"><strong>perltidy</strong></span> verwendet.
+        </p><p>
+         In der Vergangenheit wurde versucht, <span class="command"><strong>perltidy</strong></span> zu verwenden, um einen einheitlichen Stil zu erlangen. Es hat
+         sich aber gezeigt, dass <span class="command"><strong>perltidy</strong></span>s sehr eigenwilliges Verhalten, was Zeilenumbrüche angeht, oftmals gut
+         formatierten Code zerstört. Für den Interessierten sind hier die <span class="command"><strong>perltidy</strong></span>-Optionen, die grob den
+         beschriebenen Richtlinien entsprechen:
+        </p><pre class="programlisting">-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
+-aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
+-lp -vt=1 -vtc=1</pre></li><li class="listitem"><p>
+         
+                  <code class="varname">STDERR</code> ist tabu. Unkonditionale Debugmeldungen auch.
+        </p><p>
+         Lx-Office bietet mit dem Modul <code class="classname">LXDebug</code> einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
+         Grund, nach <code class="varname">STDERR</code> zu schreiben.
+        </p><p>
+         Die <code class="classname">LXDebug</code>-Methode "<code class="function">message</code>" nimmt als ersten Paramter außerdem eine Flagmaske, für
+         die die Meldung angezeigt wird, wobei "0" immer angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden und werden in
+         den meisten Fällen auch vom Repository zurückgewiesen.
+        </p></li><li class="listitem"><p>
+         Alle neuen Module müssen use strict verwenden.
+        </p><p>
+         
+                  <code class="varname">$form</code>, <code class="varname">$auth</code>, <code class="varname">$locale</code>, <code class="varname">$lxdebug</code> und
+         <code class="varname">%myconfig</code> werden derzeit aus dem main package importiert (siehe <a class="xref" href="ch04.html#devel.globals" title="4.1. Globale Variablen">Globale Variablen</a>. Alle anderen
+         Konstrukte sollten lexikalisch lokal gehalten werden.
+        </p></li></ol></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04s04.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch04s06.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">4.4. Translations and languages&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;4.6. Dokumentation erstellen</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/ch04s06.html b/doc/html/ch04s06.html
new file mode 100644 (file)
index 0000000..2c152a5
--- /dev/null
@@ -0,0 +1,39 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>4.6. Dokumentation erstellen</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="up" href="ch04.html" title="Kapitel 4. Entwicklerdokumentation"><link rel="prev" href="ch04s05.html" title="4.5. Stil-Richtlinien"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">4.6. Dokumentation erstellen</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="ch04s05.html">Zurück</a>&nbsp;</td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right">&nbsp;</td></tr></table><hr></div><div class="sect1" title="4.6. Dokumentation erstellen"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="devel.build-doc"></a>4.6. Dokumentation erstellen</h2></div></div></div><div class="sect2" title="4.6.1. Einführung"><div class="titlepage"><div><div><h3 class="title"><a name="devel.build-doc.introduction"></a>4.6.1. Einführung</h3></div></div></div><p>
+       Diese Dokumentation ist in <span class="productname">DocBook</span>&#8482; XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein
+       Text-Editor. Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen Editor nutzt, der spezielle Unterstützung für
+       <span class="productname">DocBook</span>&#8482; mitbringt. Wir empfehlen dafür den <a class="ulink" href="http://www.xmlmind.com/xmleditor/" target="_top">XMLmind XML
+       Editor</a>, der bei nicht kommerzieller Nutzung kostenlos ist.
+      </p></div><div class="sect2" title="4.6.2. Benötigte Software"><div class="titlepage"><div><div><h3 class="title"><a name="devel.build-doc.required-software"></a>4.6.2. Benötigte Software</h3></div></div></div><p>
+       Bei <span class="productname">DocBook</span>&#8482; ist Prinzip, dass ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden dann
+       mit entsprechenden Stylesheets andere Formate wie PDF oder HTML erzeugt. Bei Lx-Office übernimmt diese Aufgabe das Shell-Script
+       <span class="command"><strong>scripts/build_doc.sh</strong></span>.
+      </p><p>
+       Das Script benötigt zur Konvertierung verschiedene Softwarekomponenten, die im normalen Lx-Office-Betrieb nicht benötigt werden:
+      </p><div class="itemizedlist"><ul class="itemizedlist" type="disc"><li class="listitem"><p>
+         
+                     <a class="ulink" href="http://www.oracle.com/technetwork/java/index.html" target="_top">Java</a> in einer halbwegs aktuellen Version
+        </p></li><li class="listitem"><p>
+         Das Java-Build-System <a class="ulink" href="http://ant.apache.org/" target="_top">Apache Ant</a>
+        
+                  </p></li><li class="listitem"><p>
+         Das Dokumentations-System Dobudish für <span class="productname">DocBook</span>&#8482; 4.5, eine Zusammenstellung diverser Stylesheets und
+         Grafiken zur Konvertierung von <span class="productname">DocBook</span>&#8482; XML in andere Formate. Das Paket, das benötigt wird, ist zum
+         Zeitpunkt der Dokumentationserstellung <code class="filename">dobudish-nojre-1.1.4.zip</code>, aus auf <a class="ulink" href="http://code.google.com/p/dobudish/downloads/list" target="_top">code.google.com</a> bereitsteht.
+        </p></li></ul></div><p>
+       Apache Ant sowie ein dazu passendes Java Runtime Environment sind auf allen gängigen Plattformen verfügbar. Beispiel für
+       Debian/Ubuntu:
+      </p><pre class="programlisting">apt-get install ant openjdk-7-jre</pre><p>
+       Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis <code class="filename">doc/build</code> entpackt werden. Beispiel unter der
+       Annahme, das <span class="productname">Dobudish</span>&#8482; in <code class="filename">$HOME/Downloads</code> heruntergeladen wurde:
+      </p><pre class="programlisting">cd doc/build
+unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</pre></div><div class="sect2" title="4.6.3. PDFs und HTML-Seiten erstellen"><div class="titlepage"><div><div><h3 class="title"><a name="devel.build-doc.build"></a>4.6.3. PDFs und HTML-Seiten erstellen</h3></div></div></div><p>
+       Die eigentliche Konvertierung erfolgt nach Installation der benötigten Software mit einem einfachen Aufruf direkt aus dem
+       Lx-Office-Installationsverzeichnis heraus:
+      </p><pre class="programlisting">./scripts/build_doc.sh</pre></div><div class="sect2" title="4.6.4. Einchecken in das Git-Repository"><div class="titlepage"><div><div><h3 class="title"><a name="devel.build-doc.repository"></a>4.6.4. Einchecken in das Git-Repository</h3></div></div></div><p>
+       Sowohl die XML-Datei als auch die erzeugten PDF- und HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass nach
+       Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut und alles zusammen in einem Commit eingecheckt werden sollten.
+      </p><p>
+       Die "<code class="filename">dobudish</code>"-Verzeichnisse bzw. symbolischen Links gehören hingegen nicht in das Repository.
+      </p></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="ch04s05.html">Zurück</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right">&nbsp;</td></tr><tr><td width="40%" align="left" valign="top">4.5. Stil-Richtlinien&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top">&nbsp;</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/images/admon/blank.png b/doc/html/images/admon/blank.png
new file mode 100644 (file)
index 0000000..764bf4f
Binary files /dev/null and b/doc/html/images/admon/blank.png differ
diff --git a/doc/html/images/admon/caution.png b/doc/html/images/admon/caution.png
new file mode 100644 (file)
index 0000000..5b7809c
Binary files /dev/null and b/doc/html/images/admon/caution.png differ
diff --git a/doc/html/images/admon/caution.svg b/doc/html/images/admon/caution.svg
new file mode 100644 (file)
index 0000000..dd84f3f
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill:#FFFFFF;stroke:none;">
+       <!ENTITY st1 "fill:#FFFFFF;stroke-width:6.6112;stroke-linecap:round;stroke-linejoin:round;">
+       <!ENTITY st2 "stroke:#FFFFFF;stroke-width:6.6112;">
+       <!ENTITY st3 "fill:none;stroke:none;">
+       <!ENTITY st4 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st5 "stroke:none;">
+]>
+<svg  width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+       <g id="Layer_x0020_3" style="&st4;">
+               <g>
+                       <path style="&st2;" d="M41.7,35.3L26.6,9.4c-0.6-1-1.7-1.7-2.9-1.6c-1.2,0-2.3,0.7-2.9,1.7L6.3,35.4c-0.6,1-0.6,2.3,0,3.3c0.6,1,1.7,1.6,2.9,1.6h29.6c1.2,0,2.3-0.6,2.9-1.7c0.6-1,0.6-2.3,0-3.3z"/>
+                       <path style="&st1;" d="M23.7,11L9.2,37h29.6L23.7,11z"/>
+                       <path style="&st0;" d="M23.7,11.9L10.3,36.1h27.5l-14-24.1z"/>
+                       <g>
+                               <path style="&st5;" d="M24.1,34c-1.1,0-1.8-0.8-1.8-1.8c0-1.1,0.7-1.8,1.8-1.8c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.8-1.8,1.8h0z M22.9,29.3l-0.4-9.1h3.2l-0.4,9.1h-2.3z"/>
+                       </g>
+               </g>
+       </g>
+       <g id="crop_x0020_marks" style="&st4;">
+               <path style="&st3;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/admon/draft.png b/doc/html/images/admon/draft.png
new file mode 100644 (file)
index 0000000..59673fe
Binary files /dev/null and b/doc/html/images/admon/draft.png differ
diff --git a/doc/html/images/admon/home.png b/doc/html/images/admon/home.png
new file mode 100644 (file)
index 0000000..cbb711d
Binary files /dev/null and b/doc/html/images/admon/home.png differ
diff --git a/doc/html/images/admon/home.svg b/doc/html/images/admon/home.svg
new file mode 100644 (file)
index 0000000..e803a31
--- /dev/null
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill-rule:nonzero;clip-rule:nonzero;fill:#FFFFFF;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st1 "fill:none;stroke:none;">
+       <!ENTITY st2 "fill:#000000;">
+       <!ENTITY st3 "fill:none;stroke:#FFFFFF;stroke-width:6.3469;stroke-linejoin:round;">
+       <!ENTITY st4 "fill-rule:evenodd;clip-rule:evenodd;stroke:none;">
+       <!ENTITY st5 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+]>
+<svg  width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+       <g id="Layer_x0020_3" style="&st0;">
+               <g style="&st4;">
+                       <path style="&st3;" d="M22.9,7.1L5.1,21.8l0,0c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.2,0,0.4,0.1,0.6c0.3,0.6,0.9,1,1.6,1c0,0,1.1,0,2.2,0c0,2.4,0,14.2,0,14.2c0,1.1,0.8,1.9,1.8,1.9h27.4c1.1,0,1.9-0.9,1.9-2c0,0,0-11.8,0-14.2c1,0,2,0,2,0c0.8,0,1.4-0.5,1.7-1.2
+                               c0.1-0.2,0.1-0.4,0.1-0.6c0-0.5-0.2-1-0.7-1.4c0,0-3.6-3-4.5-3.7c0-1.2,0-6.9,0-6.9c0-1.2-0.8-2-2-2h-4.8c-1,0-1.7,0.6-1.9,1.5c-1.9-1.6-4.1-3.5-4.1-3.5l0.1,0.1c-0.7-0.7-1.8-0.8-2.7-0.1z"/>
+                       <path style="&st2;" d="M22.9,7.1L5.1,21.8l0,0c-0.3,0.3-0.5,0.8-0.5,1.2c0,0.2,0,0.4,0.1,0.6c0.3,0.6,0.9,1,1.6,1c0,0,1.1,0,2.2,0c0,2.4,0,14.2,0,14.2c0,1.1,0.8,1.9,1.8,1.9h27.4c1.1,0,1.9-0.9,1.9-2c0,0,0-11.8,0-14.2c1,0,2,0,2,0c0.8,0,1.4-0.5,1.7-1.2
+                               c0.1-0.2,0.1-0.4,0.1-0.6c0-0.5-0.2-1-0.7-1.4c0,0-3.6-3-4.5-3.7c0-1.2,0-6.9,0-6.9c0-1.2-0.8-2-2-2h-4.8c-1,0-1.7,0.6-1.9,1.5c-1.9-1.6-4.1-3.5-4.1-3.5l0.1,0.1c-0.7-0.7-1.8-0.8-2.7-0.1z"/>
+                       <path style="&st2;" d="M41.8,22.8l-5.1-4.2v-0.1L31,13.7v0l-6.5-5.5C24.2,8,24,8,23.8,8.2L6.2,22.9c-0.1,0.1-0.1,0.3,0.1,0.3h1.6H10h28.1h1.2h2.3c0.2,0,0.4-0.2,0.2-0.4z"/>
+                       <path d="M35.8,16.8l0-5.1c0-0.2-0.1-0.4-0.3-0.4h-3.2c-0.2,0-0.3,0.1-0.3,0.3v2.2l3.9,2.9z"/>
+                       <path d="M11.9,24.7V37c0,0.3,0.1,0.4,0.3,0.4h23.6c0.3,0,0.4-0.2,0.4-0.4V24.7H11.9z"/>
+               </g>
+       </g>
+       <g id="crop_x0020_marks" style="&st5;">
+               <path style="&st1;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/admon/important.png b/doc/html/images/admon/important.png
new file mode 100644 (file)
index 0000000..12c90f6
Binary files /dev/null and b/doc/html/images/admon/important.png differ
diff --git a/doc/html/images/admon/important.svg b/doc/html/images/admon/important.svg
new file mode 100644 (file)
index 0000000..dd84f3f
--- /dev/null
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill:#FFFFFF;stroke:none;">
+       <!ENTITY st1 "fill:#FFFFFF;stroke-width:6.6112;stroke-linecap:round;stroke-linejoin:round;">
+       <!ENTITY st2 "stroke:#FFFFFF;stroke-width:6.6112;">
+       <!ENTITY st3 "fill:none;stroke:none;">
+       <!ENTITY st4 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st5 "stroke:none;">
+]>
+<svg  width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+       <g id="Layer_x0020_3" style="&st4;">
+               <g>
+                       <path style="&st2;" d="M41.7,35.3L26.6,9.4c-0.6-1-1.7-1.7-2.9-1.6c-1.2,0-2.3,0.7-2.9,1.7L6.3,35.4c-0.6,1-0.6,2.3,0,3.3c0.6,1,1.7,1.6,2.9,1.6h29.6c1.2,0,2.3-0.6,2.9-1.7c0.6-1,0.6-2.3,0-3.3z"/>
+                       <path style="&st1;" d="M23.7,11L9.2,37h29.6L23.7,11z"/>
+                       <path style="&st0;" d="M23.7,11.9L10.3,36.1h27.5l-14-24.1z"/>
+                       <g>
+                               <path style="&st5;" d="M24.1,34c-1.1,0-1.8-0.8-1.8-1.8c0-1.1,0.7-1.8,1.8-1.8c1.1,0,1.8,0.7,1.8,1.8c0,1-0.7,1.8-1.8,1.8h0z M22.9,29.3l-0.4-9.1h3.2l-0.4,9.1h-2.3z"/>
+                       </g>
+               </g>
+       </g>
+       <g id="crop_x0020_marks" style="&st4;">
+               <path style="&st3;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/admon/next.png b/doc/html/images/admon/next.png
new file mode 100644 (file)
index 0000000..45835bf
Binary files /dev/null and b/doc/html/images/admon/next.png differ
diff --git a/doc/html/images/admon/next.svg b/doc/html/images/admon/next.svg
new file mode 100644 (file)
index 0000000..75fa83e
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill:none;stroke:none;">
+       <!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
+       <!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st3 "stroke:none;">
+]>
+<svg  width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+       <g id="Layer_x0020_3" style="&st2;">
+               <g>
+                       <path style="&st1;" d="M22.4,41.1c0,0.3,0.3,0.3,0.5,0.2l16.6-16.9c0.5-0.5,0.4-0.7,0-1L22.9,6.7c-0.1-0.1-0.4-0.1-0.4,0.1v10H8.9c-0.3,0-0.5,0.2-0.5,0.4l0,13.3C8.4,30.9,8.6,31,9,31h13.5l-0.1,10.1z"/>
+                       <path style="&st3;" d="M22.4,41.1c0,0.3,0.3,0.3,0.5,0.2l16.6-16.9c0.5-0.5,0.4-0.7,0-1L22.9,6.7c-0.1-0.1-0.4-0.1-0.4,0.1v10H8.9c-0.3,0-0.5,0.2-0.5,0.4l0,13.3C8.4,30.9,8.6,31,9,31h13.5l-0.1,10.1z"/>
+               </g>
+       </g>
+       <g id="crop_x0020_marks" style="&st2;">
+               <path style="&st0;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/admon/note.png b/doc/html/images/admon/note.png
new file mode 100644 (file)
index 0000000..d0c3c64
Binary files /dev/null and b/doc/html/images/admon/note.png differ
diff --git a/doc/html/images/admon/note.svg b/doc/html/images/admon/note.svg
new file mode 100644 (file)
index 0000000..648299d
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill:none;stroke:#FFFFFF;stroke-width:12.1438;stroke-linejoin:round;">
+       <!ENTITY st1 "fill:none;stroke-width:1.2429;">
+       <!ENTITY st2 "fill:#FFFFFF;stroke:none;">
+       <!ENTITY st3 "fill:none;stroke:#FFFFFF;stroke-width:12.7649;stroke-linejoin:round;">
+       <!ENTITY st4 "fill:#FFFFFF;stroke-width:6.3824;stroke-linejoin:round;">
+       <!ENTITY st5 "fill:none;stroke:none;">
+       <!ENTITY st6 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st7 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:12.7649;stroke-linejoin:round;">
+       <!ENTITY st8 "stroke:none;">
+       <!ENTITY st9 "fill:none;stroke-width:4.9715;stroke-linejoin:round;">
+]>
+<svg  xmlns="http://www.w3.org/2000/svg" width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve">
+       <g id="Layer_x0020_1" style="&st6;">
+               <path style="&st0;" d="M35.7,19.8v18.9H11V8.8h13.9l10.8,11z"/>
+               <path style="&st3;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
+               <path style="&st7;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
+               <path style="&st4;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
+               <path style="&st2;" d="M35.7,8.8H11v29.9h24.7V8.8z"/>
+       </g>
+       <g id="Layer_x0020_4" style="&st6;">
+               <path style="&st9;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
+               <path style="&st8;" d="M38.7,30.4L25,16.7l-7.7-3l2.7,8.7l13.3,13.4l5.4-5.4z"/>
+               <path style="&st8;" d="M20.6,14.7l-2.5,2.5L17,13.4l3.6,1.3z"/>
+               <path style="&st1;" d="M19.6,22.2l3-0.3l2.4-2.4l0.4-2.8"/>
+               <path style="&st2;" d="M20.4,14.9L18.3,17l1.6,5.2l2.7-0.3l2.4-2.4l0.3-2.4l-5-2.2z"/>
+       </g>
+       <g id="crop" style="&st6;">
+               <path style="&st5;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/admon/prev.png b/doc/html/images/admon/prev.png
new file mode 100644 (file)
index 0000000..cf24654
Binary files /dev/null and b/doc/html/images/admon/prev.png differ
diff --git a/doc/html/images/admon/prev.svg b/doc/html/images/admon/prev.svg
new file mode 100644 (file)
index 0000000..6d88ffd
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill:none;stroke:none;">
+       <!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
+       <!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st3 "stroke:none;">
+]>
+<svg  width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+       <g id="Layer_x0020_3" style="&st2;">
+               <g>
+                       <path style="&st1;" d="M25.6,6.9c0-0.3-0.3-0.3-0.5-0.2L8.4,23.6c-0.5,0.5-0.4,0.7,0,1l16.6,16.6c0.1,0.1,0.4,0.1,0.4-0.1v-10h13.6c0.3,0,0.5-0.2,0.5-0.4l0-13.3c0-0.3-0.2-0.5-0.5-0.5H25.5l0.1-10.1z"/>
+                       <path style="&st3;" d="M25.6,6.9c0-0.3-0.3-0.3-0.5-0.2L8.4,23.6c-0.5,0.5-0.4,0.7,0,1l16.6,16.6c0.1,0.1,0.4,0.1,0.4-0.1v-10h13.6c0.3,0,0.5-0.2,0.5-0.4l0-13.3c0-0.3-0.2-0.5-0.5-0.5H25.5l0.1-10.1z"/>
+               </g>
+       </g>
+       <g id="crop_x0020_marks" style="&st2;">
+               <path style="&st0;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/admon/tip.png b/doc/html/images/admon/tip.png
new file mode 100644 (file)
index 0000000..5c4aab3
Binary files /dev/null and b/doc/html/images/admon/tip.png differ
diff --git a/doc/html/images/admon/tip.svg b/doc/html/images/admon/tip.svg
new file mode 100644 (file)
index 0000000..4a64a15
--- /dev/null
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill:none;stroke:#000000;stroke-width:1.0944;">
+       <!ENTITY st1 "fill:#FFFFFF;stroke:none;">
+       <!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#FFFFFF;stroke-width:5.6139;stroke-miterlimit:4;">
+       <!ENTITY st3 "fill:none;stroke:none;">
+       <!ENTITY st4 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st5 "stroke:none;">
+]>
+<svg  width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+       <g id="Layer_x0020_3" style="&st2;">
+               <g>
+                       <path d="M9.5,18.6c0,8,6.5,14.4,14.4,14.4c8,0,14.4-6.5,14.4-14.4c0-8-6.5-14.4-14.4-14.4c-8,0-14.4,6.5-14.4,14.4z M12.8,18.6c0-6.2,5-11.2,11.2-11.2c6.2,0,11.2,5,11.2,11.2c0,6.2-5,11.2-11.2,11.2c-6.2,0-11.2-5-11.2-11.2z"/>
+                       <path d="M28.1,37.9l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+                       <path d="M28.1,34.8l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+                       <path d="M28.1,31.6l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8s0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8s-0.9-1.5-1.8-1.4z"/>
+                       <path d="M23.1,41.3v0.9c0,0.9,0.7,1.6,1.6,1.6c0.9,0,1.6-0.7,1.6-1.6v-0.9h-3.3z"/>
+                       <path style="&st1;" d="M35.9,18.7c0,6.6-5.4,12-12,12c-6.6,0-12-5.4-12-12s5.4-12,12-12c6.6,0,12,5.4,12,12z"/>
+                       <path style="&st5;" d="M9.6,18.6c0,8,6.5,14.4,14.4,14.4c8,0,14.4-6.5,14.4-14.4c0-8-6.5-14.4-14.4-14.4c-8,0-14.4,6.5-14.4,14.4z M12.9,18.6c0-6.2,5-11.2,11.2-11.2c6.2,0,11.2,5,11.2,11.2c0,6.2-5,11.2-11.2,11.2c-6.2,0-11.2-5-11.2-11.2z"/>
+                       <path style="&st5;" d="M28.2,37.9l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+                       <path style="&st5;" d="M28.2,34.7l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+                       <path style="&st5;" d="M28.2,31.6l-7.6,0.8c-0.9,0.1-1.5,0.9-1.4,1.8c0.1,0.9,0.9,1.5,1.8,1.4l7.6-0.8c0.9-0.1,1.5-0.9,1.4-1.8c-0.1-0.9-0.9-1.5-1.8-1.4z"/>
+                       <path style="&st5;" d="M23.1,41.3v0.9c0,0.9,0.7,1.6,1.6,1.6s1.6-0.7,1.6-1.6v-0.9h-3.3z"/>
+                       <path style="&st0;" d="M22.3,28.3l-3.5-10.7c0,0,6.6,3.9,10.5,0"/>
+               </g>
+       </g>
+       <g id="crop_x0020_marks" style="&st4;">
+               <path style="&st3;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/admon/toc-blank.png b/doc/html/images/admon/toc-blank.png
new file mode 100644 (file)
index 0000000..6ffad17
Binary files /dev/null and b/doc/html/images/admon/toc-blank.png differ
diff --git a/doc/html/images/admon/toc-minus.png b/doc/html/images/admon/toc-minus.png
new file mode 100644 (file)
index 0000000..abbb020
Binary files /dev/null and b/doc/html/images/admon/toc-minus.png differ
diff --git a/doc/html/images/admon/toc-plus.png b/doc/html/images/admon/toc-plus.png
new file mode 100644 (file)
index 0000000..941312c
Binary files /dev/null and b/doc/html/images/admon/toc-plus.png differ
diff --git a/doc/html/images/admon/up.png b/doc/html/images/admon/up.png
new file mode 100644 (file)
index 0000000..07634de
Binary files /dev/null and b/doc/html/images/admon/up.png differ
diff --git a/doc/html/images/admon/up.svg b/doc/html/images/admon/up.svg
new file mode 100644 (file)
index 0000000..d31aa9c
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill:none;stroke:none;">
+       <!ENTITY st1 "fill:#FFFFFF;stroke:#FFFFFF;stroke-width:7.5901;stroke-linejoin:round;">
+       <!ENTITY st2 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st3 "stroke:none;">
+]>
+<svg  width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+       <g id="Layer_x0020_3" style="&st2;">
+               <g>
+                       <path style="&st1;" d="M41.1,25.6c0.3,0,0.3-0.3,0.2-0.5L24.4,8.4c-0.5-0.5-0.7-0.4-1,0L6.7,25.1c-0.1,0.1-0.1,0.4,0.1,0.4h10v13.6c0,0.3,0.2,0.5,0.4,0.5l13.3,0c0.3,0,0.5-0.2,0.5-0.5V25.5l10.1,0.1z"/>
+                       <path style="&st3;" d="M41.1,25.6c0.3,0,0.3-0.3,0.2-0.5L24.4,8.4c-0.5-0.5-0.7-0.4-1,0L6.7,25.1c-0.1,0.1-0.1,0.4,0.1,0.4h10v13.6c0,0.3,0.2,0.5,0.4,0.5l13.3,0c0.3,0,0.5-0.2,0.5-0.5V25.5l10.1,0.1z"/>
+               </g>
+       </g>
+       <g id="crop_x0020_marks" style="&st2;">
+               <path style="&st0;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/admon/warning.png b/doc/html/images/admon/warning.png
new file mode 100644 (file)
index 0000000..1c33db8
Binary files /dev/null and b/doc/html/images/admon/warning.png differ
diff --git a/doc/html/images/admon/warning.svg b/doc/html/images/admon/warning.svg
new file mode 100644 (file)
index 0000000..fc8d748
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 9.0, SVG Export Plug-In  -->
+<!DOCTYPE svg [
+       <!ENTITY st0 "fill:#000000;stroke:#FFFFFF;stroke-width:7.9139;stroke-linejoin:round;">
+       <!ENTITY st1 "fill-rule:nonzero;clip-rule:nonzero;fill:#FFFFFF;stroke:#000000;stroke-miterlimit:4;">
+       <!ENTITY st2 "fill:none;stroke:none;">
+       <!ENTITY st3 "fill:#000000;">
+       <!ENTITY st4 "fill-rule:evenodd;clip-rule:evenodd;stroke:none;">
+       <!ENTITY st5 "fill-rule:nonzero;clip-rule:nonzero;stroke:#000000;stroke-miterlimit:4;">
+]>
+<svg  width="48pt" height="48pt" viewBox="0 0 48 48" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
+       <g id="Layer_x0020_4" style="&st1;">
+               <g style="&st4;">
+                       <path style="&st0;" d="M16.4,42.3L5.7,31.6V16.4L16.4,5.7h15.2l10.7,10.7v15.2L31.6,42.3H16.4z"/>
+                       <path style="&st3;" d="M16.4,42.3L5.7,31.6V16.4L16.4,5.7h15.2l10.7,10.7v15.2L31.6,42.3H16.4z"/>
+                       <path d="M11.7,17.7l18.7,18.7l5.9-5.9L17.6,11.7l-5.9,5.9z"/>
+                       <path d="M11.7,30.5l5.9,5.9l18.7-18.7l-5.9-5.9L11.7,30.5z"/>
+               </g>
+       </g>
+       <g id="crop_x0020_marks" style="&st5;">
+               <path style="&st2;" d="M48,48H0V0h48v48z"/>
+       </g>
+</svg>
diff --git a/doc/html/images/aquadot.jpg b/doc/html/images/aquadot.jpg
new file mode 100644 (file)
index 0000000..853a0d8
Binary files /dev/null and b/doc/html/images/aquadot.jpg differ
diff --git a/doc/html/images/callouts/1.png b/doc/html/images/callouts/1.png
new file mode 100644 (file)
index 0000000..7d47343
Binary files /dev/null and b/doc/html/images/callouts/1.png differ
diff --git a/doc/html/images/callouts/10.png b/doc/html/images/callouts/10.png
new file mode 100644 (file)
index 0000000..997bbc8
Binary files /dev/null and b/doc/html/images/callouts/10.png differ
diff --git a/doc/html/images/callouts/2.png b/doc/html/images/callouts/2.png
new file mode 100644 (file)
index 0000000..5d09341
Binary files /dev/null and b/doc/html/images/callouts/2.png differ
diff --git a/doc/html/images/callouts/3.png b/doc/html/images/callouts/3.png
new file mode 100644 (file)
index 0000000..ef7b700
Binary files /dev/null and b/doc/html/images/callouts/3.png differ
diff --git a/doc/html/images/callouts/4.png b/doc/html/images/callouts/4.png
new file mode 100644 (file)
index 0000000..adb8364
Binary files /dev/null and b/doc/html/images/callouts/4.png differ
diff --git a/doc/html/images/callouts/5.png b/doc/html/images/callouts/5.png
new file mode 100644 (file)
index 0000000..4d7eb46
Binary files /dev/null and b/doc/html/images/callouts/5.png differ
diff --git a/doc/html/images/callouts/6.png b/doc/html/images/callouts/6.png
new file mode 100644 (file)
index 0000000..0ba694a
Binary files /dev/null and b/doc/html/images/callouts/6.png differ
diff --git a/doc/html/images/callouts/7.png b/doc/html/images/callouts/7.png
new file mode 100644 (file)
index 0000000..472e96f
Binary files /dev/null and b/doc/html/images/callouts/7.png differ
diff --git a/doc/html/images/callouts/8.png b/doc/html/images/callouts/8.png
new file mode 100644 (file)
index 0000000..5e60973
Binary files /dev/null and b/doc/html/images/callouts/8.png differ
diff --git a/doc/html/images/callouts/9.png b/doc/html/images/callouts/9.png
new file mode 100644 (file)
index 0000000..a0676d2
Binary files /dev/null and b/doc/html/images/callouts/9.png differ
diff --git a/doc/html/images/draft.png b/doc/html/images/draft.png
new file mode 100644 (file)
index 0000000..1c9d23c
Binary files /dev/null and b/doc/html/images/draft.png differ
diff --git a/doc/html/images/out.png b/doc/html/images/out.png
new file mode 100644 (file)
index 0000000..c3ae876
Binary files /dev/null and b/doc/html/images/out.png differ
diff --git a/doc/html/images/quoleft.gif b/doc/html/images/quoleft.gif
new file mode 100644 (file)
index 0000000..b16218b
Binary files /dev/null and b/doc/html/images/quoleft.gif differ
diff --git a/doc/html/images/skr04-update-3804/konto3804.png b/doc/html/images/skr04-update-3804/konto3804.png
new file mode 100644 (file)
index 0000000..e66b66a
Binary files /dev/null and b/doc/html/images/skr04-update-3804/konto3804.png differ
diff --git a/doc/html/images/skr04-update-3804/konto4315.png b/doc/html/images/skr04-update-3804/konto4315.png
new file mode 100644 (file)
index 0000000..d9971cf
Binary files /dev/null and b/doc/html/images/skr04-update-3804/konto4315.png differ
diff --git a/doc/html/images/skr04-update-3804/steuer3803.png b/doc/html/images/skr04-update-3804/steuer3803.png
new file mode 100644 (file)
index 0000000..361c0b3
Binary files /dev/null and b/doc/html/images/skr04-update-3804/steuer3803.png differ
diff --git a/doc/html/images/skr04-update-3804/steuer3804.png b/doc/html/images/skr04-update-3804/steuer3804.png
new file mode 100644 (file)
index 0000000..fad5986
Binary files /dev/null and b/doc/html/images/skr04-update-3804/steuer3804.png differ
diff --git a/doc/html/images/skr04-update-3804/steuerliste.png b/doc/html/images/skr04-update-3804/steuerliste.png
new file mode 100644 (file)
index 0000000..2c4945c
Binary files /dev/null and b/doc/html/images/skr04-update-3804/steuerliste.png differ
diff --git a/doc/html/images/somerights.png b/doc/html/images/somerights.png
new file mode 100644 (file)
index 0000000..1792d8b
Binary files /dev/null and b/doc/html/images/somerights.png differ
diff --git a/doc/html/index.html b/doc/html/index.html
new file mode 100644 (file)
index 0000000..e045d18
--- /dev/null
@@ -0,0 +1,5 @@
+<html><head>
+      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
+   <title>Lx-Office: Installation, Konfiguration, Entwicklung</title><link rel="stylesheet" type="text/css" href="style.css"><meta name="generator" content="DocBook XSL Stylesheets V1.76.1-RC2"><link rel="home" href="index.html" title="Lx-Office: Installation, Konfiguration, Entwicklung"><link rel="next" href="ch01.html" title="Kapitel 1. Aktuelle Hinweise"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><div class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Lx-Office: Installation, Konfiguration, Entwicklung</th></tr><tr><td width="20%" align="left">&nbsp;</td><th width="60%" align="center">&nbsp;</th><td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Weiter</a></td></tr></table><hr></div><div lang="de" class="book" title="Lx-Office: Installation, Konfiguration, Entwicklung"><div class="titlepage"><div><div><h1 class="title"><a name="ding.xml"></a>Lx-Office: Installation, Konfiguration, Entwicklung</h1></div></div><hr></div><div class="toc"><p><b>Inhaltsverzeichnis</b></p><dl><dt><span class="chapter"><a href="ch01.html">1. Aktuelle Hinweise</a></span></dt><dt><span class="chapter"><a href="ch02.html">2. Installation und Grundkonfiguration</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch02.html#Ben%C3%B6tigte-Software-und-Pakete">2.1. Benötigte Software und Pakete</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02.html#Betriebssystem">2.1.1. Betriebssystem</a></span></dt><dt><span class="sect2"><a href="ch02.html#Pakete">2.1.2. Pakete</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s02.html">2.2. Manuelle Installation des Programmpaketes</a></span></dt><dt><span class="sect1"><a href="ch02s03.html">2.3. Lx-Office-Konfigurationsdatei</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s03.html#config.config-file.introduction">2.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#config.config-file.sections-parameters">2.3.2. Abschnitte und Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s03.html#config.config-file.prior-versions">2.3.3. Versionen vor 2.6.3</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s04.html">2.4. Anpassung der PostgreSQL-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s04.html#Zeichens%C3%A4tze-die-Verwendung-von-UTF-8">2.4.1. Zeichensätze/die Verwendung von UTF-8</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#%C3%84nderungen-an-Konfigurationsdateien">2.4.2. Änderungen an Konfigurationsdateien</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#Erweiterung-f%C3%BCr-servergespeicherte-Prozeduren">2.4.3. Erweiterung für servergespeicherte Prozeduren</a></span></dt><dt><span class="sect2"><a href="ch02s04.html#Datenbankbenutzer-anlegen">2.4.4. Datenbankbenutzer anlegen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s05.html">2.5. Webserver-Konfiguration</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s05.html#d0e508">2.5.1. Grundkonfiguration mittels CGI</a></span></dt><dt><span class="sect2"><a href="ch02s05.html#Apache-Konfiguration.FCGI">2.5.2. Konfiguration für FastCGI/FCGI</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s06.html">2.6. Der Task-Server</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s06.html#Konfiguration-des-Task-Servers">2.6.1. Verfügbare und notwendige Konfigurationsoptionen</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Einbinden-in-den-Boot-Prozess">2.6.2. Automatisches Starten des Task-Servers beim Booten</a></span></dt><dt><span class="sect2"><a href="ch02s06.html#Prozesskontrolle">2.6.3. Wie der Task-Server gestartet und beendet wird</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s07.html">2.7. Benutzerauthentifizierung und Administratorpasswort</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s07.html#Grundlagen-zur-Benutzerauthentifizierung">2.7.1. Grundlagen zur Benutzerauthentifizierung</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Administratorpasswort">2.7.2. Administratorpasswort</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Authentifizierungsdatenbank">2.7.3. Authentifizierungsdatenbank</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Passwort%C3%BCberpr%C3%BCfung">2.7.4. Passwortüberprüfung</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Name-des-Session-Cookies">2.7.5. Name des Session-Cookies</a></span></dt><dt><span class="sect2"><a href="ch02s07.html#Anlegen-der-Authentifizierungsdatenbank">2.7.6. Anlegen der Authentifizierungsdatenbank</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s08.html">2.8. Benutzer- und Gruppenverwaltung</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s08.html#Zusammenh%C3%A4nge">2.8.1. Zusammenhänge</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Datenbanken-anlegen">2.8.2. Datenbanken anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Gruppen-anlegen">2.8.3. Gruppen anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Benutzer-anlegen">2.8.4. Benutzer anlegen</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Gruppenmitgliedschaften-verwalten">2.8.5. Gruppenmitgliedschaften verwalten</a></span></dt><dt><span class="sect2"><a href="ch02s08.html#Migration-alter-Installationen">2.8.6. Migration alter Installationen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s09.html">2.9. Drucken mit Lx-Office</a></span></dt><dt><span class="sect1"><a href="ch02s10.html">2.10. OpenDocument-Vorlagen</a></span></dt><dt><span class="sect1"><a href="ch02s11.html">2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch02s11.html#config.eur.introduction">2.11.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#config.eur.parameters">2.11.2. Konfigurationsparameter</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#config.eur.setting-parameters">2.11.3. Festlegen der Parameter</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#config.eur.inventory-system-perpetual">2.11.4. Bemerkungen zu Bestandsmethode</a></span></dt><dt><span class="sect2"><a href="ch02s11.html#config.eur.knonw-issues">2.11.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch02s12.html">2.12. Lx-Office ERP verwenden</a></span></dt></dl></dd><dt><span class="chapter"><a href="ch03.html">3. Features und Funktionen</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch03.html#features.periodic-invoices">3.1. Wiederkehrende Rechnungen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.introduction">3.1.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.configuration">3.1.2. Konfiguration</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.reports">3.1.3. Auflisten</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.task-server">3.1.4. Erzeugung der eigentlichen Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03.html#features.periodic-invoices.create-for-current-month">3.1.5. Erste Rechnung für aktuellen Monat erstellen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s02.html">3.2. Dokumentenvorlagen und verfügbare Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.einf%C3%BChrung">3.2.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.variablen-ausgeben">3.2.2. Variablen ausgeben</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">3.2.3. Verwendung in Druckbefehlen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.tag-style">3.2.4. Anfang und Ende der Tags verändern</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.zuordnung-dateinamen">3.2.5. Zuordnung von den Dateinamen zu den Funktionen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.dateinamen-erweitert">3.2.6. Sprache, Drucker und E-Mail</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.allgemeine-variablen">3.2.7. Allgemeine Variablen, die in allen Vorlagen vorhanden
+        sind</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.invoice">3.2.8. Variablen in Rechnungen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.dunning">3.2.9. Variablen in Mahnungen und Rechnungen über Mahngebühren</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.andere-vorlagen">3.2.10. Variablen in anderen Vorlagen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.bloecke">3.2.11. Blöcke, bedingte Anweisungen und Schleifen</a></span></dt><dt><span class="sect2"><a href="ch03s02.html#dokumentenvorlagen-und-variablen.markup">3.2.12. Markup-Code zur Textformatierung innerhalb von
+        Formularen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch03s03.html">3.3. Excel-Vorlagen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch03s03.html#excel-templates.summary">3.3.1. Zusammenfassung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.usage">3.3.2. Bedienung</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.syntax">3.3.3. Variablensyntax</a></span></dt><dt><span class="sect2"><a href="ch03s03.html#excel-templates.limitations">3.3.4. Einschränkungen</a></span></dt></dl></dd></dl></dd><dt><span class="chapter"><a href="ch04.html">4. Entwicklerdokumentation</a></span></dt><dd><dl><dt><span class="sect1"><a href="ch04.html#devel.globals">4.1. Globale Variablen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04.html#d0e4249">4.1.1. Wie sehen globale Variablen in Perl aus?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e4350">4.1.2. Warum sind globale Variablen ein Problem?</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e4383">4.1.3. Kanonische globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04.html#d0e4733">4.1.4. Ehemalige globale Variablen</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s02.html">4.2. Entwicklung unter FastCGI</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.general">4.2.1. Allgemeines</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.exiting">4.2.2. Programmende und Ausnahmen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.globals">4.2.3. Globale Variablen</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.performance">4.2.4. Performance und Statistiken</a></span></dt><dt><span class="sect2"><a href="ch04s02.html#devel.fcgi.known-issues">4.2.5. Bekannte Probleme</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s03.html">4.3. SQL-Upgradedateien</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.introduction">4.3.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.format">4.3.2. Format der Kontrollinformationen</a></span></dt><dt><span class="sect2"><a href="ch04s03.html#db-upgrade-files.dbupgrade-tool">4.3.3. Hilfsscript dbupgrade2_tool.pl</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s04.html">4.4. Translations and languages</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s04.html#translations-languages.introduction">4.4.1. Introduction</a></span></dt><dt><span class="sect2"><a href="ch04s04.html#translations-languages.file-structure">4.4.2. File structure</a></span></dt></dl></dd><dt><span class="sect1"><a href="ch04s05.html">4.5. Stil-Richtlinien</a></span></dt><dt><span class="sect1"><a href="ch04s06.html">4.6. Dokumentation erstellen</a></span></dt><dd><dl><dt><span class="sect2"><a href="ch04s06.html#devel.build-doc.introduction">4.6.1. Einführung</a></span></dt><dt><span class="sect2"><a href="ch04s06.html#devel.build-doc.required-software">4.6.2. Benötigte Software</a></span></dt><dt><span class="sect2"><a href="ch04s06.html#devel.build-doc.build">4.6.3. PDFs und HTML-Seiten erstellen</a></span></dt><dt><span class="sect2"><a href="ch04s06.html#devel.build-doc.repository">4.6.4. Einchecken in das Git-Repository</a></span></dt></dl></dd></dl></dd></dl></div></div><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">&nbsp;</td><td width="20%" align="center">&nbsp;</td><td width="40%" align="right" valign="top">&nbsp;Kapitel 1. Aktuelle Hinweise</td></tr></table></div></body></html>
\ No newline at end of file
diff --git a/doc/html/style.css b/doc/html/style.css
new file mode 100644 (file)
index 0000000..b001aba
--- /dev/null
@@ -0,0 +1,453 @@
+/* Basic Settings:                                                            */\r
+\r
+body {\r
+       background-color: White; /* black foreground */\r
+       color: Black; /* center the body content in browser window */\r
+       margin: auto; /* padding ("inner margin") leaves space between */\r
+       padding: 24px; /* set width according to browser window width */\r
+       width: auto; /* text alignment */\r
+       text-align: justify; /* text-align: left; */\r
+}\r
+\r
+/* para */\r
+p {\r
+  /* font size, line height, font */\r
+  /* list of fonts provides fallbacks if a font is not present */\r
+  font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+  /* margin (top - right - bottom - left) */\r
+  margin: 0 15px 6px 15px;\r
+}\r
+\r
+\r
+\r
+\r
+/* NEEDS TO BE CLEARED UP */\r
+\r
+\r
+p, td, li, dt, dd\r
+{\r
+  /* font size, line height, font */\r
+  /* list of fonts provides fallbacks if a font is not present */\r
+  font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+}\r
+\r
+\r
+\r
+/* set font for most elements                    */\r
+/* p: paragraphs (regular text, docbook <para>)  */\r
+/* (...) */\r
+/* body: anything else  */\r
+body, p, td, li, dt, dd,\r
+{\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+}\r
+\r
+/* images */\r
+/* docbook: <imageobject> */\r
+img {\r
+/* no margin */\r
+margin: 0;\r
+\r
+/* no padding ("inner margin") */\r
+padding: 0;\r
+\r
+/* no border */\r
+border: 0;\r
+}\r
+\r
+\r
+/* emphasized text, can occur in most places */\r
+/* docbook: <emphasis> */\r
+em {\r
+/* bold face, higher number is more bold */\r
+font-weight: 600;\r
+/* italic */\r
+font-style: italic;\r
+}\r
+\r
+\r
+/* sect(ion)1 title */\r
+h2 {\r
+       font-family: Georgia, Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 125%; /* bold face, higher number is more bold */\r
+       font-weight: 600; /* underlined text */\r
+       text-decoration: none; /* foreground color: dark blue */\r
+       color: Black; /* background color: gray */\r
+       background-color: Orange; /* margin settings are top - right - bottom - left (think clockwise) */\r
+       margin: 15px 0 15px 0; /* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+       padding: 8px 15px 8px 15px; \r
+       /* border: 1px solid #000; */\r
+}\r
+\r
+\r
+/* sect(ion)2 title */\r
+h3 {\r
+       font-family: Georgia, Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 110%; /* bold face, higher number is more bold */\r
+       font-weight: 600; /* underlined text */\r
+       text-decoration: none; /* foreground color: dark blue */\r
+       color: Black; /* background-color is a very light grey */\r
+       background-color: #fefefe; /* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+       padding: 0 0 0 15px;\r
+}\r
+\r
+\r
+/* sect(ion)3 title */\r
+h4 {\r
+       font-family: Georgia, Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 100%; /* bold face, higher number is more bold */\r
+       font-weight: 600; /* underlined text */\r
+       text-decoration: none; /* foreground color: dark blue */\r
+       color: Black; /* background-color is a very light grey */\r
+       background-color: #fefefe; /* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+       padding: 0 0 0 15px;\r
+}\r
+\r
+\r
+/* sect(ion)4 title */\r
+h5 {\r
+       font-family: Georgia, Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 100%; /* bold face, higher number is more bold */\r
+       font-weight: 300; /* not underlined */\r
+       text-decoration: none; /* foreground color: dark blue */\r
+       color: Black; /* background-color is a very light grey */\r
+       background-color: #fefefe; /* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+       padding: 0 0 0 15px;\r
+}\r
+\r
+/* the following formats refer to the docbook tags of the same name           */\r
+/* for more information, see the docbook reference at                         */\r
+/* http://www.docbook.org/tdg/en/html/docbook.html                            */\r
+\r
+.mediaobject\r
+{\r
+/* center */\r
+text-align: center;\r
+}\r
+\r
+\r
+/*  */\r
+.calloutlist, .figure, .table\r
+{\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 15px 30px 15px 30px;\r
+}\r
+\r
+\r
+/*  */\r
+.itemizedlist, .variablelist {\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 15px 30px 15px 15px;\r
+}\r
+\r
+/* blockquote formatting is a little more complex    */\r
+/* because block quotes are rendered as a html table */\r
+\r
+/* blockquote block */\r
+.blockquote\r
+{\r
+/* override bottom margin, the other margins are inherited */\r
+margin-bottom: 30px;\r
+}\r
+\r
+.blockquote p, .blockquote td\r
+{\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* bold face, higher number is more bold */\r
+font-weight: 450;\r
+}\r
+\r
+\r
+.epigraph\r
+{\r
+/* override bottom margin, the other margins are inherited */\r
+margin-bottom: 30px;\r
+}\r
+\r
+.epigraph p, .epigraph td\r
+{\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font: 10px/14px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* bold face, higher number is more bold */\r
+font-weight: 600;\r
+}\r
+\r
+\r
+\r
+/* custom header and footer that are displayed on all pages */\r
+#customheader, #customfooter\r
+{\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font-family: Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* font size, relative to body font size */\r
+font-size: 80%;\r
+\r
+/* line height, relative to body font size */\r
+line-height: 200%;\r
+\r
+\r
+text-align: center;\r
+vertical-align: middle;\r
+color: #fff;\r
+background-color: #009;\r
+}\r
+\r
+\r
+/* leave more space between last paragraph and footer  */\r
+/* some browser do not add up the bottom margin of the prior element */\r
+/* and the top margin of the footer */\r
+#customfooter {\r
+margin-top: 15px;\r
+}\r
+\r
+\r
+\r
+/* table { margin: 0 15px 6px 15px; } */\r
+\r
+\r
+/* title and navigation links in header and footer */\r
+.navheader th, .navheader td, .navfooter th, .navfooter td\r
+{\r
+font-size: 11px;\r
+font-weight: 450;\r
+}\r
+\r
+\r
+/* table of contents, list of figures and list of tables */\r
+.toc, .list-of-figures, .list-of-tables, .list-of-examples\r
+{\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 15px 30px 15px 15px;\r
+}\r
+\r
+\r
+/* the "headings" are rendered as paragraphs */\r
+.toc p, .list-of-figures p, .list-of-tables p, .list-of-examples p\r
+{\r
+/* no margin */\r
+margin: 0;\r
+}\r
+\r
+\r
+.figure\r
+{\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 5px 5px 5px 5px;\r
+\r
+/* no padding ("inner border") */\r
+padding: 0;\r
+\r
+/* no border */\r
+border: 0;\r
+\r
+/* center text */\r
+text-align: center;\r
+}\r
+\r
+\r
+/* figure title */\r
+.figure p, .table p, .example p\r
+{\r
+font-size: 80%;\r
+}\r
+\r
+\r
+/*\r
+acronym {\r
+      border-bottom: 1px dashed #00cc00;\r
+      cursor: help;\r
+}\r
+*/\r
+\r
+\r
+/* admonition headings */\r
+div.note, div.important, div.warning, div.caution, div.tip\r
+{\r
+padding: 0px 15px 0px 0px;\r
+}\r
+\r
+div.note th, div.important th, div.warning th, div.caution th, div.tip th\r
+{\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+font-weight: 600;\r
+\r
+text-decoration: underline;\r
+\r
+/* left align */\r
+text-align: left;\r
+}\r
+\r
+.note p, .important p, .warning p, .caution p, .tip p\r
+{\r
+margin: 0;\r
+}\r
+\r
+.note img, .important img, .warning img, .caution img, .tip img\r
+{\r
+margin: 0px 15px 0px 15px;\r
+}\r
+\r
+\r
+/* programlisting */\r
+pre.programlisting\r
+{\r
+/* non-proportional font */\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font-family: "Courier New", Courier, Monospace;\r
+\r
+/* color: black */\r
+color: #000;\r
+\r
+/* background color: gray */\r
+background-color: #eee;\r
+\r
+/* no margin */\r
+margin: 0;\r
+\r
+/* gray dotted border, 1 px wide */\r
+border: 1px dotted #ddd;\r
+\r
+/* padding ("inner margin") settings are top - right - bottom - left */\r
+/* (think clockwise)                                                 */\r
+padding: 6px 6px 6px 6px;\r
+}\r
+\r
+\r
+/* title page */\r
+\r
+\r
+/* heading1 is used for document title */\r
+h1\r
+{\r
+       font-family: Georgia,Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 150%; /* bold face, higher number is more bold */\r
+       font-weight: 600; /* line height, relative to body line height */\r
+       line-height: 250%; /* center */\r
+       text-align: center; /* foreground color: dark blue */\r
+       color: Black; /* background color: gray */\r
+       background-color: Orange; /* margin settings are top - right - bottom - left (think clockwise) */\r
+       margin: 15px 0 15px 0; /* no padding ("inner margin") */\r
+       padding: 15;\r
+       border: 1px solid #000; \r
+}\r
+\r
+\r
+\r
+/* author on title page is formatted as h3          */\r
+/* these settings overwrite the regular h3 settings */\r
+h3.author {\r
+/* set font size and line height                             */\r
+/* list of fonts provides fallbacks in case selected fonts are not present */\r
+font: 12px/18px Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* bold face, higher number is more bold */\r
+font-weight: 600;\r
+\r
+/* do not underline */\r
+text-decoration: none;\r
+\r
+/* center text */\r
+text-align: center;\r
+\r
+/* color: black */\r
+color: #000;\r
+\r
+/* background-color is a very light grey */\r
+/* alternative: #fff = white             */\r
+background-color: #fefefe;\r
+\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 0 15px 15px 15px;\r
+\r
+/* no padding */\r
+padding: 0;\r
+\r
+/* no border */\r
+border: 0;\r
+}\r
+\r
+\r
+/* copyright and date */\r
+.copyright, .pubdate\r
+{\r
+/* list of fonts provides fallbacks if a font is not present */\r
+font-family: Verdana, Arial, Helvetica, Sans-Serif;\r
+\r
+/* font size, relative to body font size */\r
+font-size: 90%;\r
+\r
+/* center */\r
+text-align: center;\r
+\r
+/* margin settings are top - right - bottom - left (think clockwise) */\r
+margin: 15px 15px 15px 15px;\r
+\r
+/* no padding ("inner margin") */\r
+padding: 0;\r
+\r
+/* no border */\r
+border: 0;\r
+}\r
+\r
+\r
+/* legal notice box */\r
+div.legalnotice\r
+{\r
+       font-family: Verdana, Arial, Helvetica, Sans-Serif; /* font size, relative to body font size */\r
+       font-size: 90%; /* color: black */\r
+       color: #000; /* background color: gray */\r
+       background-color: Orange; /* margin settings are top - right - bottom - left (think clockwise) */\r
+       margin: 10px 45px 10px 45px; /* padding ("inner margin") settings are top - right - bottom - left */\r
+       padding: 5px 5px 5px 5px; /* solid black border, 1px wide */\r
+       border: 1px solid #000;\r
+}\r
+\r
+\r
+table {\r
+       /* border: thin solid orange; */\r
+       border-spacing: 0pt;\r
+       margin-top: 5;\r
+       margin-bottom: 5;\r
+}\r
+\r
+td {\r
+       font-family: SansSerif, Arial, Helvetica, sans-serif;\r
+    padding-left: 1;\r
+    padding-right: 1;\r
+    padding-top: 1;\r
+    padding-bottom: 1  \r
+}\r
+\r
+th {\r
+        /* border: thin solid orange; */        \r
+    padding-left: 1;\r
+    padding-right: 1;\r
+    padding-top: 1;\r
+    padding-bottom: 1  \r
+}\r
+\r
+.informaltable {\r
+   border-collapse: collapse;\r
+       table-layout: auto;\r
+}\r
+\r
+.revhistory {\r
+   border-collapse: collapse;\r
+       table-layout: auto;\r
+}
\ No newline at end of file
diff --git a/doc/konfigurationsdatei.txt b/doc/konfigurationsdatei.txt
deleted file mode 100644 (file)
index 128365b..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-== Lx-Office Konfigurationsdatei ab Version 2.6.3 ==
-
-Seit Lx-Office 2.6.3. gibt es nur noch eine Konfigurationsdatei die benötigt wird -  die: config/lx_office.conf.
-
-Diese muß bei der Erstinstallation von Lx-Office (oder Migration von älteren Versionen) angelegt werden.
-
-Als Vorlage dient die Datei config/lx_office.conf.default.
-
- $ cp config/lx_office.conf.default config/lx_office.conf
-
-Die Datei config/lx_office.conf.default wird immer eingelesen, Werte die in
-config/lx_office.conf stehen überschreiben die Werte aus
-config/lx_office.conf.default. Die Datei config/lx_office.conf muss also nur
-die Abschintte und Werte enthalten die von config/lx_office.conf.default abweichen.
-
-Diese Datei (lx_office.conf) ist dann eine installationsspezifische Datei,
-d.h. sie enthält bspw. lokale Passwörter und wird auch nicht im Versionsmanagement (git) verwaltet.
-
-Die Konfiguration ist ferner serverabhängig, d.h. für alle Mandaten, bzw. Datenbanken gleich.
-
-
-Die Konfigurationsdatei besteht aus mehreren Teilen, die entsprechend kommentiert sind:
-
-* authentication
-* authentication/database
-* authentication/ldap
-* system
-* features
-* paths
-* applications
-* environment
-* print_templates
-* task_server
-* periodic_invoices
-* console
-* debug
-
-Die üblicherweise wichtigsten Parameter, die am Anfang einzustellen oder zu kontrollieren sind, sind:
-
-[authentication]
-admin_password = geheim
-
-[authentication/database]
-host     = localhost
-port     = 5432
-db       = lxerp_auth
-user     = postgres
-password =
-
-[system]:
-* eur
-* dbcharset
-
-Nutzt man wiederkehrende Rechnungen kann man unter [periodic_invoices] den
-Login eines Benutzers angeben, der nach Erstellung der Rechnungen eine
-entsprechende E-Mail mit Informationen über die erstellten Rechnungen bekommt.
-
-Nutzt man den Taskserver für wiederkehrende Rechnungen, muß unter [task_server]
-ein Login eines Benutzers angegeben werden, mit dem sich der Taskserver an
-Lx-Office bei der Datenbank anmeldet, die dem Benutzer zugewiesen ist.
-
-Für Entwickler finden sich unter [debug] wichtige Funktionen, um die
-Fehlersuche zu erleichtern.
-
-
-== Versionen vor 2.6.3 ==
-
-In älteren Lx-Office Versionen gab es im Verzeichnis config die Dateien
-authentication.pl und lx-erp.conf, die jeweils Perl-Dateien waren. Es gab auch
-die Möglichkeit, eine lokale Version der Konfigurationsdatei zu erstellen
-(lx-erp-local.conf), dies ist ab 2.6.3 auch nicht mehr möglich/nötig.
-
-Beim Update von einer älteren Lx-Office Version auf 2.6.3 müssen die
-Einstellungen aus den alten Konfigurationsdateien manuell übertragen werden und
-die alten Konfigurationsdateien gelöscht oder verschoben werden, sonst kommt es
-zu einer Fehlermeldung.
diff --git a/doc/languages_howto.txt b/doc/languages_howto.txt
deleted file mode 100644 (file)
index 15c3b2d..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-Table of Contents
-=================
-
-1. What's this?
-2. File Structue
-  * LANGUAGE
-  * charset
-  * all
-  * Num2text
-  * special_chars
-  * missing
-  * lost
-
-
-What's this?
-============
-
-This document describes how localization packages in Lx-Office are built.
-Currently the only language fully supported is german, and since most of the
-internal messages are held in english the english version is usable too.
-
-A stub version of french is included, but not functunal at this point.
-
-
-File Structure
-==============
-
-The structure of locales in Lx-Office is:
-
-  lx-office/locale/<langcode>/
-
-where <langcode> stands for an abbreviation of the language package. The builtin
-packages use two letter ISO 639-1 codes, but the actual name is not relevant for
-the program and can easily be extended to IETF language tags (i.e.  "en_GB"). In
-fact the original language packages from sql ledger are named in this way.
-
-In such a language directory the following files are recognized:
-
-LANGUAGE (mandatory)
---------------------
-
-The LANGUAGE file contains the self descripted name of the language. It should
-contain a native representation first, and in parenthesis an english
-translation after that.
-
-Example:
-
-  Deutsch (German)
-
-
-charset (encouraged)
---------------------
-
-The charset file describes which charset a language package is written in and
-applies to all other language files in the package. It is possible to write some
-language packages without an explicit charset, but it is still strongly
-recommended. You'll never know in what environment your language package will be
-used, and neither utf-8 nor latin1 are guaranteed.
-
-The whole content of this file is a string that can be recognized as a valid
-charset encoding.
-
-Example:
-
-  ISO-8859-1
-
-
-all (mandatory)
----------------
-
-The central translation file. It is essentially an inline perlscript
-autogenerated by locales.pl. To generate it, generate the directory and the two
-files mentioned above, and execute
-
-  scripts/locales.pl <langcode>
-
-or simply copy one of the other languages. You will be told how many are missing
-like this:
-
-  $ scripts/locales.pl en
-
-  English - 0.6% - 2015/2028 missing
-
-A "missing" file will be generated and can be edited. You can also edit the "all" file
-directly. Edit everything you like to fit the target language, and execute
-locales.pl again. See how the missing words get fewer.
-
-
-
-These three files are necessary for a localization to be working. Other files
-are optional, but will have special effects:
-
-
-Num2text (optional)
--------------------
-
-Legacy code from sql ledger. It provides a means for numbers to be converted
-into natural language, like 1523 => one thousand five hundred twenty three. If
-you want to provide it, it must be inlinable perl code which provides a num2text
-sub. If an init sub exists, it will be executed first.
-
-Only used in the check and receipt printing module.
-
-special_chars
--------------
-
-Lx-Office comes with a lot of interfaces to different formats, some of which are
-rather picky with their accepted charset. The special_chars file contains a
-listing of chars not suited for different file format, and provides
-substitutions. It is written in "Simple Ini" style, containing a block for every
-file format.
-
-First entry should be the order of substitution for entries as a whitespace
-separated list. All entries are interpolated, so \n, \x20 and \\ all work.
-
-After that every entry is a special char that should be translated when writing
-text into such a file.
-
-Example:
-
-  [Template/XML]
-  order=& < > \n
-  &=&amp;
-  <=&lt;
-  >=&gt;
-  \n=<br>
-
-Note the importance of the order in this example. Substituting < and > befor &
-would lead to $gt; become &amp;gt;
-
-For a list of valid formats, see the german special_chars entry. As of this
-writing the following are recognized:
-
-  HTML
-  URL@HTML
-  Template/HTML
-  Template/XML
-  Template/LaTeX
-  Template/OpenDocument
-  filenames
-
-The last of which is very machine dependant. Remember that a lot of characters
-are forbidden by some filesystems, for exmaple MS Windows doesn't like ':' in
-its files where Linux doesn't mind that. If you want the files created with your
-language pack to be portable, find all chars that could cause trouble.
-
-
-missing (not part of language package)
---------------------------------------
-
-This is a file generated by scripts/locales.pl while processing your locales.
-It's only to have the missing entries singled out and does not belong to a
-language package.
-
-
-lost (not part of language package)
------------------------------------
-
-Another file generated by scripts/locales.pl. If for any reason a translation
-does not appear anymore and can be deleted, it gets moved here. The last 50 or
-so entries deleted are saved here in case you made a typo, so that you don't
-have to translate everything again. If a tranlsation is missing, the lost file
-is checked first. If you maintain a language package, you might want to keep
-this safe somewhere.  It is not part of a language package.
-
-
-
diff --git a/doc/programmierstilrichtlinien.txt b/doc/programmierstilrichtlinien.txt
deleted file mode 100644 (file)
index 4b8b201..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-Lx-Office Style Guide
----------------------
-
-Die folgenden Regeln haben das Ziel, den Code möglichst gut les- und wartbar
-zu machen. Dazu gehört zum Einen, dass der Code einheitlich eingerückt ist,
-aber auch, dass Mehrdeutigkeit so weit es geht vermieden wird (Stichworte
-"Klammern" oder "Hash-Keys").
-
-Diese Regeln sind keine Schikane, sondern erleichtern allen das Leben!
-
-Jeder, der einen Patch schickt, sollte seinen Code vorher überprüfen.
-Einige der Regeln lassen sich automatisch überprüfen, andere nicht.
-
---------------------------------------------------------------------------
-
-1. Es werden keine echten iTabs sondern Leerzeichen verwendet.
-
-2. Die Einrückung beträgt zwei Leerzeichen.
-   Beispiel:
-
-   foreach my $row (@data) {
-     if ($flag) {
-       # do something with $row
-     }
-
-     if ($use_modules) {
-       $row->{modules} = MODULE->retrieve(
-         id   => $row->{id},
-         date => $use_now ? localtime() : $row->{time},
-       );
-     }
-
-     $report->add($row);
-   }
-
-
-3. Öffnende geschweifte Klammern befinden sich auf der gleichen Zeile wie
-   der letzte Befehl.
-   Beispiele:
-
-   sub debug {
-     ...
-   }
-
-   oder
-
-   if ($form->{item_rows} > 0) {
-     ...
-   }
-
-4. Schließende geschweifte Klammern sind so weit eingerückt wie der Befehl/
-   die öffnende schließende Klammer, die den Block gestartet hat, und nicht
-   auf der Ebene des Inhalts. Die gleichen Beispiele wie bei 3. gelten.
-
-5. Die Wörter "else" "elsif", "while" befinden sich auf der gleichen
-   Zeile wie schließende geschweifte Klammern.
-   Beispiele:
-
-   if ($form->{sum} > 1000) {
-     ...
-   } elsif ($form->{sum} > 0) {
-     ...
-   } else {
-     ...
-   }
-
-   do {
-     ...
-   } until ($a > 0);
-
-6. Parameter von Funktionsaufrufen müssen mit runden Klammern versehen
-   werden. Davon nicht betroffen sind interne perl Funktionen,
-   und grep ähnliche Operatoren.
-
-   Beispiel:
-
-   $main::lxdebug->message("Could not find file.");
-   %options = map { $_ => 1 } grep { !/^#/ } @config_file;
-
-7. Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:
-
-  Generell gilt: Hashkeys und Arrayindices sollten _nicht_ durch Leerzeichen
-  abgesetzt werden. Logische Klammerungen ebensowenig, Blöcke schon.
-
-
-  Beispiel:
-
-      if (($form->{debug} == 1) && ($form->{sum} - 100 < 0)) {
-        ...
-      }
-
-      $array[$i + 1]             = 4;
-      $form->{sum}              += $form->{"row_$i"};
-      $form->{ $form->{index} } += 1;
-
-      map { $form->{sum} += $form->{"row_$_"} } 1..$rowcount;
-
-8. Mehrzeilige Befehle
-
-  8.1 Werden die Parameter eines Funktionsaufrufes auf mehrere Zeilen
-      aufgeteilt, so sollten diese bis zu der Spalte eingerückt werden,
-      in der die ersten Funktionsparameter in der ersten Zeile stehen.
-      Beispiel:
-
-      $sth = $dbh->prepare("SELECT * FROM some_table WHERE col = ?",
-                           $form->{some_col_value});
-
-  8.3 Ein Spezialfall ist der ternäre Oprator "?:", der am besten in einer
-      übersichtlichen Tabellenstruktur organisiert wird.
-
-      Beispiel:
-
-      my $rowcount = $form->{"row_$i"} ? $i
-                   : $form->{oldcount} ? $form->{oldcount} + 1
-                   :                     $form->{rowcount} - $form->{rowbase};
-
-9. Kommentare
-
-  9.1 Kommentare, die alleine in einer Zeile stehen, sollten soweit wie der
-      Code eingerückt sein.
-  9.2 Seitliche hängende Kommentare sollten einheitlich formatiert werden.
-
-  9.3 Sämtliche Kommentare und Sonstiges im Quellcode ist bitte auf Englisch
-      zu verfassen. So wie ich keine Lust habe französischen Quelltext zu lesen,
-      sollte auch der Lx-Office Quelltext für nicht-Deutschsprachige lesbar sein.
-
-      Beispiel:
-
-      my $found = 0;
-      while (1) {
-        last if $found;
-
-        # complicated check
-        $found = 1 if //
-      }
-
-      $i = 0         # initialize $i
-      $n = $i;       # save $i
-      $i *= $const;  # do something crazy
-      $i = $n;       # recover $i
-
-10. Hashkeys sollten nur in Anführungszeichen stehen, wenn die Interpolation
-    gewünscht ist.
-
-    Beispiele:
-
-    $form->{sum}      = 0;
-    $form->{"row_$i"} = $form->{"row_$i"} - 5;
-    $some_hash{42}    = 54;
-
-11. Die maximale Zeilenlänge ist nicht bescränkt. Zeilenlängen <= 79
-    helfen unter bestimmten Bedingungen, aber wenn die Lesbarkeit unter
-    kurzen Zeilen leidet (wie zum Biespiel in grossen Tabellen), dann
-    ist Lesbarkeit vorzuziehen.
-
-    Als Beispiel sei print_options aus bin/mozilla/io.pl angeführt.
-
-12. Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind unerwünscht.
-    Sie führen zu unnötigen Whitespaceänderungen die diffs verfälschen.
-
-    Emacs und vim haben beide recht einfache Methoden dafür:
-    emacs kennt das Kommande nuke-trailing-whitespace,
-    vim macht das gleiche manuell über :%s/\s\+$//e, mit
-      :au BufWritePre * :%s/\s\+$//e
-    wird das an speichern gebunden.
-
-12. Es wird kein perltidy verwendet.
-
-    In der Vergangenheit wurde versucht perltidy zu verwenden um einen
-    einheitlichen Stil zu erlangen, es hat sich aber gezeigt, dass Perltidys
-    sehr eigenwilliges Verhaltes was Zeilenumbrüche angeht oftmals gut
-    formatierten Code zerstört. Für den Interessierten sind hier die perltidy
-    Optionen, die grob den beschriebenen Richtlinien entsprechen.
-
-  -syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
-  -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
-  -lp -vt=1 -vtc=1
-
-13. STDERR ist tabu. Unkonditionale Debugmeldungen auch.
-
-    Lx-Office bietet mit dem LXDebug Modul einen brauchbaren Trace/Debug
-    Mechanismus, es gibt also keinen Grund nach STDERR zu schreiben.
-
-    Die LXDebug Methode "message" nimmt als ersten Paramter außerdem eine
-    Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer angezeigt
-    wird. Sollte Meldungen sollten nicht eingecheckt werden, und werden in den
-    meisten Fällen auch vom Repository zurückgewiesen.
-
-14. Alle neuen Module müssen use strict verwenden.
-
-    $form, $auth, $locale, $lxdebug und %myconfig werden derzeit aus dem main
-    package importiert. Alle anderen Konstrukte sollten lexikalisch lokal
-    gehalten werden.
diff --git a/doc/sql-upgrade-dateien.txt b/doc/sql-upgrade-dateien.txt
deleted file mode 100644 (file)
index 0d75069..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-Neuer Mechanismus für SQL-Upgradedateien
-----------------------------------------
-
-Der alte Mechanismus für SQL-Upgradescripte, der auf einer
-Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
-diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele
-Entwicklung im stable- und unstable-Baum betrifft.
-
-Dieser Mechanismus wurde für Lx-Office 2.4.1 deutlich erweitert. Es
-werden weiterhin alle Scripte aus sql/Pg-upgrade
-ausgeführt. Zusätzlich gibt es aber ein zweites Verzeichnis,
-sql/Pg-upgrade2. In diesem Verzeichnis muss pro Datenbankupgrade eine
-Datei existieren, die neben den eigentlich auszuführenden SQL- oder
-Perl-Befehlen einige Kontrollinformationen enthält.
-
-Neu sind die Kontrollinformationen, die Abhängigkeiten und Prioritäten
-definieren können werden, sodass Datenbankscripte zwar in einer
-sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER TABLE"
-erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE" angelegt
-wurde), diese Reihenfolge aber so flexibel ist, dass man keine
-Versionsnummern mehr braucht.
-
-Lx-Office merkt sich dabei, welches der Upgradescripte in
-sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht
-erneut aus. Dazu dient die Tabelle "schema_info", die bei der
-Anmeldung automatisch angelegt wird.
-
-Format der Kontrollinformationen
---------------------------------
-
-Die Kontrollinformationen sollten sich am Anfang der jeweiligen
-Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
-hat dabei das folgende Format:
-
-Für SQL-Upgradedateien:
-
--- @key: value
-
-
-Für Perl-Upgradedateien:
-
-# @key: value
-
-
-Leerzeichen vor "value" werden entfernt.
-
-Die folgenden Schlüsselworte werden verarbeitet:
-
-* tag: Wird zwingend benötigt. Dies ist der "Name" des
-  Upgrades. Dieser "tag" kann von anderen Kontrolldateien in ihren
-  Abhängigkeiten verwendet werden (Schlüsselwort "depends"). Der "tag"
-  ist auch der Name, der in der Datenbank eingetragen wird.
-
-  Normalerweise sollte die Kontrolldatei genau so heißen wie der
-  "tag", nur mit der Endung ".sql" bzw. "pl".
-
-  Ein Tag darf nur aus alphanumerischen Zeichen sowie den Zeichen _ -
-  ( ) bestehen. Insbesondere sind Leerzeichen nicht erlaubt und
-  sollten stattdessen mit Unterstrichen ersetzt werden.
-
-* description: Benötigt. Eine Beschreibung, was in diesem Update
-  passiert. Diese wird dem Benutzer beim eigentlichen Datenbankupdate
-  angezeigt. Während der Tag in englisch gehalten sein sollte, sollte
-  die Beschreibung auf Deutsch erfolgen.
-
-* depends: Optional. Eine mit Leerzeichen getrennte Liste von "tags",
-  von denen dieses Upgradescript abhängt. Lx-Office stellt sicher,
-  dass die in dieser Liste aufgeführten Scripte bereits durchgeführt
-  wurden, bevor dieses Script ausgeführt wird.
-
-  Abhängigkeiten werden rekursiv betrachtet. Wenn also ein Script "b"
-  existiert, das von Änderungen in "a" abhängt, und eine neue
-  Kontrolldatei für "c" erstellt wird, die von Änderungen in "a" und
-  "b" abhängt, so genügt es, in "c" nur den Tag "b" als Abhängigkeit
-  zu definieren.
-
-  Es ist nicht erlaubt, sich selbst referenzierende Abhängigkeiten zu
-  definieren (z.B. "a" -> "b", "b" -> "c" und "c" -> "a").
-
-* priority: Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
-  der Scripte ausgeführt werden, die die gleichen Abhängigkeitstiefen
-  besitzen. Fehlt dieser Parameter, so wird der Wert 1000 benutzt.
-
-  Dies ist reine Kosmetik. Für echte Reihenfolgen muss "depends"
-  benutzt werden. Lx-Office sortiert die auszuführenden Scripte zuerst
-  nach der Abhängigkeitstiefe (wenn "z" von "y" abhängt und "y" von
-  "x", so hat "z" eine Abhängigkeitstiefe von 2, "y" von 1 und "x" von
-  0. "x" würde hier zuerst ausgeführt, dann "y", dann "z"), dann nach
-  der Priorität und bei gleicher Priorität alphabetisch nach dem
-  "tag".
-
-Hilfsscript dbupgrade2_tool.pl
-------------------------------
-
-Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern, existiert
-ein Hilfsscript namens "scripts/dbupgrade2_tool.pl". Es muss aus dem
-Lx-Office-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
-liest alle Datenbankupgradescripte aus dem Verzeichnis sql/Pg-upgrade2
-aus. Es benutzt dafür die gleichen Methoden wie Lx-Office selber,
-sodass alle Fehlersituationen von der Kommandozeile überprüft werden
-können.
-
-Wird dem Script kein weiterer Parameter übergeben, so wird nur eine
-Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann sich
-aber auch Informationen auf verschiedene Art ausgeben lassen:
-
-1. Listenform: "./scripts/dbupgrade2_tool.pl --list"
-
-   Gibt eine Liste aller Scripte aus. Die Liste ist in der Reihenfolge
-   sortiert, in der Lx-Office die Scripte ausführen würde. Es werden
-   neben der Listenposition der Tag, die Abhängigkeitstiefe und die
-   Priorität ausgegeben.
-
-2. Baumform: "./scripts/dbupgrade2_tool.pl --tree"
-
-   Listet alle Tags in Baumform basierend auf den Abhängigkeiten
-   auf. Die "Wurzelknoten" sind dabei die Scripte, von denen keine
-   anderen abhängen. Die Unterknoten sind Scripte, die beim
-   übergeordneten Script als Abhängigkeit eingetragen sind.
-
-3. Umgekehrte Baumform: "./scripts/dbupgrade2_tool.pl --rtree"
-
-   Listet alle Tags in Baumform basierend auf den Abhängigkeiten auf.
-   Die "Wurzelknoten" sind dabei die Scripte mit der geringsten
-   Abhängigkeitstiefe. Die Unterknoten sind Scripte, die das
-   übergeordnete Script als Abhängigkeit eingetragen haben.
-
-4. Baumform mit Postscriptausgabe: "./scripts/dbupgrade2_tool.pl --graphviz"
-
-   Benötigt das Tool "graphviz", um mit seiner Hilfe die Baumform aus
-   3. in eine Postscriptdatei namens "db_dependencies.ps"
-   auszugeben. Dies ist vermutlich die übersichtlichste Form, weil
-   hierbei jeder Knoten nur einmal ausgegeben wird. Bei den
-   Textmodusbaumformen hingegen können Knoten und all ihre
-   Abhängigkeiten mehrfach ausgegeben werden.
-
-5. Scripte, von denen kein anderes Script abhängt:
-   "./scripts/dbupgrade2_tool.pl --nodeps"
-
-   Listet die Tags aller Scripte auf, von denen keine anderen Scripte
-   abhängen.
-
diff --git a/doc/umstellung_eur.txt b/doc/umstellung_eur.txt
deleted file mode 100644 (file)
index 310b34a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-Anstelle des Parameters eur in lx_office.conf werden drei neue Parameter
-eingeführt, die in defaults bereitgehalten werden, und damit mandantenabhängig
-konfiguriert werden können.
-
-Die drei Parameter regeln Gewinnermittlungsart, Versteuerungsart und
-Warenbuchungsmethode:
-
-profit_determination (Gewinnermittlung)
-* balance (Betriebsvermögensvergleich/Bilanzierung)
-* income (Einnahmen-Überschuß-Rechnung)
-
-accounting_method (Versteuerungsart)
-* accrual (Sollversteuerung)
-* cash (Istversteuerung)
-
-inventory_system (Warenbuchungsmethode)
-* perpetual (Bestandsmethode)
-* periodic (Aufwandsmethode)
-
-Beim Anlegen eines neuen Mandanten können diese Optionen nun unabhängig
-voneinander eingestellt werden.
-
-Beim Upgrade bestehender Mandanten wird eur ausgelesen und die Variablen werden
-so gesetzt, daß sich an der Funktionalität nichts ändert.
-
-Bisher galt:
-eur = 1: cash + periodic + income
-eur = 0: accrual + perpetual + balance
-
-Die aktuelle Konfiguration wird unter Nummernkreise und Standardkonten unter
-dem neuen Punkt "Einstellungen" angezeigt (read-only).
-
-Für die Umstellung eines bestehenden Mandanten gibt es an der Oberfläche
-derzeit keine Möglichkeit (gab es aber vorher auch nicht).
-
-Die Konfiguration "eur" unter [system] in lx_office.conf wird nun nicht mehr
-benötigt und kann aus der Konfigurationsdatei gelöscht werden (dies muß manuell
-geschehen).
-
-
-Bemerkungen zu Bestandsmethode:
-
-Die Bestandsmethode ist eigentlich eine sehr elegante Methode, funktioniert in
-Lx-Office aber nur unter bestimmten Bedingungen: Voraussetzung ist, daß auch
-immer alle Einkaufsrechnungen gepflegt werden, und man beim Jahreswechsel nicht
-mit einer leeren Datenbank anfängt, da bei jedem Verkauf anhand der gesamten
-Rechnungshistorie der Einkaufswert der Ware nach dem FIFO-Prinzip aus den
-Einkaufsrechnungen berechnet wird.
-
-Die Bestandsmethode kann vom Prinzip her also nur funktioneren, wenn man mit
-den Buchungen bei Null anfängt, und man kann auch nicht im laufenden Betrieb
-von der Aufwandsmethode zur Bestandsmethode wechseln.
-
-
-TODO:
-
-* bei bestimmten Berichten kann man derzeit noch inviduell einstellen, ob man
-  nach Ist- oder Sollversteuerung auswertet, und es werden im Code Variablen
-  wie $accrual oder $cash gesetzt. Diese Codestellen wurden noch nicht
-  angefasst, sondern nur die wo bisher $::lx_office_conf{system}->{eur}
-  ausgewertet wurde.
-
-* Hilfetext beim Neuanlegen eines Mandanten, was die Optionen bedeuten, z.B.
-  mit zwei Standardfällen
diff --git a/doc/wiederkehrende_rechnungen.txt b/doc/wiederkehrende_rechnungen.txt
deleted file mode 100755 (executable)
index fe9a07c..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-Wiederkehrende Rechnungen werden als normale Aufträge definiert und\r
-konfiguriert, mit allen dazugehörigen Kunden- und Artikelangaben. Die\r
-konfigurierten Aufträge werden später automatisch in Rechnungen\r
-umgewandelt, so als ob man den Workflow benutzen würde, und auch die\r
-Auftragsnummer wird übernommen, sodass alle wiederkehrenden\r
-Rechnungen, die aus einem Auftrag erstellt wurden, später leicht\r
-wiederzufinden sind.\r
-\r
-Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren, findet sich beim\r
-Bearbeiten des Auftrags ein neuer Knopf "Konfigurieren", der ein neues Fenster\r
-öffnet, in dem man die nötigen Parameter einstellen kann.  Hinter dem Knopf\r
-wird außerdem noch angezeigt, ob der Auftrag als wiederkehrende Rechnung\r
-konfiguriert ist oder nicht.\r
-\r
-Folgende Parameter kann man konfigurieren:\r
-\r
-* Status:\r
- Bei aktiven Rechnungen wird automatisch eine Rechnung erstellt, wenn die\r
- Periodizität erreicht ist (z.B. Anfang eines neuen Monats).\r
-\r
- Ist ein Auftrag nicht aktiv, so werden für ihn auch keine wiederkehrenden\r
- Rechnungen erzeugt. Stellt man nach längerer nicht-aktiver Zeit einen Auftrag\r
- wieder auf aktiv, wird beim nächsten Periodenwechsel für alle Perioden, seit\r
- der letzten aktiven Periode, jeweils eine Rechnung erstellt. Möchte man dies\r
- verhindern, muss man vorher das Startdatum neu setzen.\r
-\r
- Für gekündigte Aufträge werden nie mehr Rechnungen erstellt. Man kann sich\r
- diese Aufträge aber gesondert in den Berichten anzeigen lassen.\r
-\r
-* Periodizität:\r
-  Ob monatlich, quartalsweise oder jährlich auf neue Rechnungen überprüft\r
-  werden soll. Für jede Periode seit dem Startdatum wird überprüft, ob für die\r
-  Periode (beginnend immer mit dem ersten Tag der Periode) schon eine Rechnung\r
-  erstellt wurde. Unter Umständen können bei einem Startdatum in der\r
-  Vergangenheit gleich mehrere Rechnungen erstellt werden.\r
-\r
-* Buchen auf:\r
-  Das Forderungskonto, in der Regel "Forderungen aus Lieferungen\r
-  und Leistungen". Das Gegenkonto ergibt sich aus den Buchungsgruppen der\r
-  betreffenden Waren.\r
-\r
-* Startdatum: ab welchem Datum auf Rechnungserstellung geprüft werden soll\r
-\r
-* Enddatum: ab wann keine Rechnungen mehr erstellt werden sollen.\r
-\r
-* Automatische Verlängerung um x Monate:\r
-  Sollen die wiederkehrenden Rechnungen bei Erreichen des\r
-  eingetragenen Enddatums weiterhin erstellt werden, so kann man hier\r
-  die Anzahl der Monate eingeben, um die das Enddatum automatisch nach\r
-  hinten geschoben wird.\r
-\r
-* Drucken:\r
-  Sind Drucker konfiguriert, so kann man sich die erstellten Rechnungen auch\r
-  gleich ausdrucken lassen.\r
-\r
-Unter Verkauf->Berichte->Aufträge finden sich zwei neue Checkboxen,\r
-"Wiederkehrende Rechnungen aktiv" und "Wiederkehrende Rechnungen inaktiv", mit\r
-denen man sich einen Überglick über die wiederkehrenden Rechnungen verschaffen\r
-kann.\r
-\r
-Die zeitliche und periodische Überprüfung, ob eine wiederkehrende\r
-Rechnung automatisch erstellt werden soll, geschieht durch den\r
-Taskserver, einen externen Dienst, der automatisch beim Start des\r
-Servers gestartet werden sollte.\r
-\r
-Nach Erstellung der Rechnungen kann eine E-Mail mit Informationen zu\r
-den erstellten Rechnungen verschickt werden. Konfiguriert wird dies in\r
-der Konfigurationsdatei config/lx_office.conf im Abschnitt\r
-[periodic_invoices].\r
-\r
-Will man im laufenden Monat eine monatlich wiederkehrende Rechnung inkl. des\r
-laufenden Monats starten, stellt man das Startdatum auf den Monatsanfang und\r
-wartet ein paar Minuten, bis der Taskserver den neu konfigurieren Auftrag\r
-erkennt und daraus eine Rechnung generiert hat. Alternativ setzt man das\r
-Startdatum auf den Monatsersten des Folgemonats und erstellt die erste Rechnung\r
-direkt manuell über den Workflow.\r
-\r
-\r
diff --git a/scripts/build_doc.sh b/scripts/build_doc.sh
new file mode 100755 (executable)
index 0000000..ce96ffe
--- /dev/null
@@ -0,0 +1,69 @@
+#!/bin/bash
+
+# Usage:
+#   cd /path/to/lx-office
+#   ./scripts/build_doc.sh
+
+set -e
+
+if [[ ! -d doc ]]; then
+  echo "Please run this from the installation directory."
+  exit 1
+fi
+
+html=1
+pdf=1
+
+if [[ ! -z $1 ]] ; then
+  html=0
+  pdf=0
+  while [[ ! -z $1 ]] ; do
+    case $1 in
+      html) html=1 ;;
+      pdf)  pdf=1  ;;
+      *)
+        echo "Unknown parameter $1"
+        exit 1
+        ;;
+    esac
+
+    shift
+  done
+fi
+
+dobudish=$(ls -d doc/build/dobudish* 2> /dev/null)
+
+if [[ -z $dobudish ]] || [[ ! -d ${dobudish} ]]; then
+  echo "There's no dobudish directory inside doc/build."
+  exit 1
+fi
+
+cd ${dobudish}
+
+base=documents/dokumentation
+if [[ ! -d $base ]]; then
+  ./generator.sh dokumentation create book
+fi
+
+input=${base}/input
+output=${base}/output
+custom=${base}/custom-cfg
+
+rm -rf ${input} ${custom}
+mkdir ${input} ${input}/copy_to_output ${custom}
+
+cp ../../dokumentation.xml ${input}/
+cp -R ../../images ${input}/copy_to_output/
+cp -R ../custom-cfg/* ${custom}/
+
+if [[ $pdf = 1 ]] ; then
+  ./generator.sh dokumentation pdf
+  cp ${output}/pdf/dokumentation.pdf ../../
+fi
+
+if [[ $html = 1 ]]; then
+  ./generator.sh dokumentation html
+  rm -rf ../../html
+  mkdir ../../html
+  cp -R ${output}/html ../../
+fi