--- /dev/null
+<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> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <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> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Lx-Office: Installation, Konfiguration, Entwicklung </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> Kapitel 2. Installation und Grundkonfiguration</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <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> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch02s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 1. Aktuelle Hinweise </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.2. Manuelle Installation des Programmpaketes</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 2. Installation und Grundkonfiguration </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.3. Lx-Office-Konfigurationsdatei</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s04.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.2. Manuelle Installation des Programmpaketes </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.4. Anpassung der PostgreSQL-Konfiguration</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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 “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:</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 “postgres” 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 “postgres” 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 “postgres” auf “lxoffice” 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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s05.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.3. Lx-Office-Konfigurationsdatei </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.5. Webserver-Konfiguration</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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/
+
+<Directory /var/www/lx-erp>
+ Options ExecCGI
+ Includes FollowSymlinks
+</Directory>
+
+<Directory /var/www/lx-erp/users>
+ Order Deny,Allow
+ Deny from All
+</Directory></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 ‘<code class="literal">+</code>’ 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/
+
+<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></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
+
+<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></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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s06.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.4. Anpassung der PostgreSQL-Konfiguration </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.6. Der Task-Server</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s07.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.5. Webserver-Konfiguration </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.7. Benutzerauthentifizierung und Administratorpasswort</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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 “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.</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 ‘<code class="literal">1</code>’ setzen, andernfalls auf
+ ‘<code class="literal">0</code>’ 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 ‘<code class="literal">sAMAccountName</code>’, für andere LDAP-Server hingegen ‘<code class="literal">uid</code>’. 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"><%login%></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 ‘<code class="literal">bind_dn</code>’ entweder eine
+ komplette LDAP-DN wie z.B. ‘<code class="literal">cn=Martin Mustermann,cn=Users,dc=firmendomain</code>’ auch nur der volle Name des
+ Benutzers eingegeben werden; in diesem Beispiel also ‘<code class="literal">Martin Mustermann</code>’.</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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s08.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.6. Der Task-Server </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.8. Benutzer- und Gruppenverwaltung</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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 ‘<code class="literal">lxoffice</code>’).</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 ‘<code class="literal">UTF-8</code>’ setzen. Zusätzlich muss beim
+ Anlegen der Datenbank ‘<code class="literal">UTF-8 Unicode</code>’ 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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s09.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.7. Benutzerauthentifizierung und Administratorpasswort </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.9. Drucken mit Lx-Office</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s10.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.8. Benutzer- und Gruppenverwaltung </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.10. OpenDocument-Vorlagen</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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 ‘<code class="literal">1</code>’ 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 “X virtual frame buffer”
+ (xvfb) installiert werden. Bei Debian ist er im Paket “xvfb” 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 “X virtual frame buffer”
+ 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
+ “Standard.Conversion.ConvertSelfToPDF()” heißen. Die Beispielvorlage
+ ‘<code class="literal">templates/mastertemplates/German/invoice.odt</code>’
+ 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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s11.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.9. Drucken mit Lx-Office </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.11. Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung: EUR</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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}->{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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch02s12.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.10. OpenDocument-Vorlagen </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 2.12. Lx-Office ERP verwenden</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 2. Installation und Grundkonfiguration</th><td width="20%" align="right"> <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> </td><td width="20%" align="center"><a accesskey="u" href="ch02.html">Nach oben</a></td><td width="40%" align="right"> <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 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> Kapitel 3. Features und Funktionen</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <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->Berichte->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> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch03s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">2.12. Lx-Office ERP verwenden </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 3.2. Dokumentenvorlagen und verfügbare Variablen</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 3. Features und Funktionen</th><td width="20%" align="right"> <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"><%variablenname%></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'
+ => '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"><%variablenname%></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"><%variablenname FLAG1 FLAG2%></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"><%quototal NOFORMAT%></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 <%if cp_phone2%><%cp_phone2%><%else%><%cp_phone1%><%end%></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"><%customer%></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"><!-- config: tag-style=($ $) --></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 < 30
+ Tage</p></dd><dt><span class="term">
+ <code class="varname">c30total</code>
+ </span></dt><dd><p>Gesamtbetrag aller Rechnungen mit Fälligkeit >= 30
+ und < 60 Tage</p></dd><dt><span class="term">
+ <code class="varname">c60total</code>
+ </span></dt><dd><p>Gesamtbetrag aller Rechnungen mit Fälligkeit >= 60
+ und < 90 Tage</p></dd><dt><span class="term">
+ <code class="varname">c90total</code>
+ </span></dt><dd><p>Gesamtbetrag aller Rechnungen mit Fälligkeit >= 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 < 30
+ Tage</p></dd><dt><span class="term">
+ <code class="varname">c30</code>
+ </span></dt><dd><p>Noch offener Rechnungsbetrag mit Fälligkeit >= 30 und
+ < 60 Tage</p></dd><dt><span class="term">
+ <code class="varname">c60</code>
+ </span></dt><dd><p>Noch offener Rechnungsbetrag mit Fälligkeit >= 60 und
+ < 90 Tage</p></dd><dt><span class="term">
+ <code class="varname">c90</code>
+ </span></dt><dd><p>Noch offener Rechnungsbetrag mit Fälligkeit >= 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><%anweisung%> ... <%end%></strong></span>
+ </p><p>Anmerkung zum <span class="command"><strong><%end%></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><%if type == "sales_quotation"%></strong></span>, so könnte
+ er mit <span class="command"><strong><%end%></strong></span> genauso abgeschlossen werden
+ wie mit <span class="command"><strong><%end if%></strong></span> oder auch
+ <span class="command"><strong><%end type == "sales_quotation"%></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"><%if variablenname%>
+...
+<%end%></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"><%if not cp_greeting%>
+...
+<%end%></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"><%if var1 == "Wert"%></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%></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"><%if intnotes =~ "schwierig"%></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"><%foreach variablenname%>
+...
+<%end%></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"><%foreach number%>
+Position: <%runningnumber%>
+Anzahl: <%qty%>
+Artikelnummer: <%number%>
+Beschreibung: <%description%>
+...
+<%end%></pre><p>Besonderheit in OpenDocument-Vorlagen: Tritt ein
+ <code class="function"><%foreach%></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"><%foreach%></code> und
+ <code class="function"><%end%></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"><b>Text</b></span></dt><dd><p>Text wird in Fettdruck gesetzt.</p></dd><dt><span class="term"><i>Text</i></span></dt><dd><p>Text wird kursiv gesetzt.</p></dd><dt><span class="term"><u>Text</u></span></dt><dd><p>Text wird unterstrichen.</p></dd><dt><span class="term"><s>Text</s></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"><bullet></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><bullet></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> </td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch03s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 3. Features und Funktionen </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 3.3. Excel-Vorlagen</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 3. Features und Funktionen</th><td width="20%" align="right"> <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><<varname>></strong></span>
+ </p><p>Dabei sind <code class="constant"><<</code> und
+ <code class="constant">>></code> die Delimiter. Da Excel auf festen
+ Breiten besteht, kann der Tag künstlich verlängert werden, indem
+ weitere <code class="constant"><</code> oder <code class="constant">></code>
+ eingefügt werden. Der Tag muss nicht symmetrisch sein.
+ Beispiel:</p><pre class="programlisting"><<<<<varname>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></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"><<<<<varname1 varname2 varname3>>>>>>>>>>>>>>>>>>>>>>>>>></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"><<<<<< varname>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></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><%if%></strong></span> und
+ <span class="command"><strong><%foreach%></strong></span> nicht vorhanden. Der Delimiter
+ <code class="constant"><% %></code> kommt in den Headerinformationen
+ evtl. vor. Deshalb wurde auf den sichereren Delimiter
+ <code class="constant"><<</code> und <code class="constant">>></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> </td><td width="20%" align="center"><a accesskey="u" href="ch03.html">Nach oben</a></td><td width="40%" align="right"> <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 </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> Kapitel 4. Entwicklerdokumentation</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <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>™ 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>™.</p><p>
+ <span class="productname">SQL-Ledger</span>™ hat fast alles im globalen
+ namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
+ Unter <span class="productname">FCGI</span>™ 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>™ 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->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>™ Templates
+ außerhalb der Controller: der Ausdruck <code class="function">[% var
+ %]</code> greift auf <code class="varname">$::form->{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"><%var%></code> zeigt auf
+ <code class="varname">$::form->{var}</code>. Innerhalb von Schleifen wird
+ <code class="varname">$::form->{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->{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->{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->{cache}{all_units}</code>
+ </p></li><li class="listitem"><p>Wird nur in
+ <code class="function">AM->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> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch04s02.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">3.3. Excel-Vorlagen </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.2. Entwicklung unter FastCGI</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right"> <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()> 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> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s03.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">Kapitel 4. Entwicklerdokumentation </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.3. SQL-Upgradedateien</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right"> <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" -> "b",
+ "b" -> "c" und "c" -> "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> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s04.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">4.2. Entwicklung unter FastCGI </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.4. Translations and languages</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right"> <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/<langcode>/</pre><p>where <langcode> 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 <langcode></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 => 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=& < > \n
+&=&amp;
+<=&lt;
+>=&gt;
+\n=<br></pre><p>Note the importance of the order in this example.
+ Substituting < and > befor & would lead to $gt; become
+ &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> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s05.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">4.3. SQL-Upgradedateien </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.5. Stil-Richtlinien</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right"> <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->{modules} = MODULE->retrieve(
+ id => $row->{id},
+ date => $use_now ? localtime() : $row->{time},
+ );
+ }
+
+ $report->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->{item_rows} > 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->{sum} > 1000) {
+ ...
+} elsif ($form->{sum} > 0) {
+ ...
+} else {
+ ...
+}
+
+do {
+ ...
+} until ($a > 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->message("Could not find file.");
+%options = map { $_ => 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->{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;</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->prepare("SELECT * FROM some_table WHERE col = ?",
+ $form->{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->{"row_$i"} ? $i
+ : $form->{oldcount} ? $form->{oldcount} + 1
+ : $form->{rowcount} - $form->{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->{sum} = 0;
+$form->{"row_$i"} = $form->{"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> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> <a accesskey="n" href="ch04s06.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top">4.4. Translations and languages </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> 4.6. Dokumentation erstellen</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<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> </td><th width="60%" align="center">Kapitel 4. Entwicklerdokumentation</th><td width="20%" align="right"> </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>™ 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>™ 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>™ 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>™ 4.5, eine Zusammenstellung diverser Stylesheets und
+ Grafiken zur Konvertierung von <span class="productname">DocBook</span>™ 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>™ 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> </td><td width="20%" align="center"><a accesskey="u" href="ch04.html">Nach oben</a></td><td width="40%" align="right"> </td></tr><tr><td width="40%" align="left" valign="top">4.5. Stil-Richtlinien </td><td width="20%" align="center"><a accesskey="h" href="index.html">Zum Anfang</a></td><td width="40%" align="right" valign="top"> </td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<?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>
--- /dev/null
+<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"> </td><th width="60%" align="center"> </th><td width="20%" align="right"> <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"> </td><td width="20%" align="center"> </td><td width="40%" align="right"> <a accesskey="n" href="ch01.html">Weiter</a></td></tr><tr><td width="40%" align="left" valign="top"> </td><td width="20%" align="center"> </td><td width="40%" align="right" valign="top"> Kapitel 1. Aktuelle Hinweise</td></tr></table></div></body></html>
\ No newline at end of file
--- /dev/null
+/* 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
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
output=${base}/output
custom=${base}/custom-cfg
-rm -f ${input}/*.xml
-cp ../../dokumentation.xml ${input}/
+rm -rf ${input} ${custom}
+mkdir ${input} ${input}/copy_to_output ${custom}
-rm -f ${custom}/*
+cp ../../dokumentation.xml ${input}/
+cp -R ../../images ${input}/copy_to_output/
cp -R ../custom-cfg/* ${custom}/
-./generator.sh dokumentation pdf
-cp ${output}/pdf/dokumentation.pdf ../../
+if [[ $pdf = 1 ]] ; then
+ ./generator.sh dokumentation pdf
+ cp ${output}/pdf/dokumentation.pdf ../../
+fi
-./generator.sh dokumentation html
-rm -rf ../../html
-mkdir ../../html
-cp -R ${output}/html ../../html
+if [[ $html = 1 ]]; then
+ ./generator.sh dokumentation html
+ rm -rf ../../html
+ mkdir ../../html
+ cp -R ${output}/html ../../
+fi