Doku: Formatverschönerungen
[kivitendo-erp.git] / doc / dokumentation.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4 <book id="kivitendo-documentation" lang="de">
5   <title>kivitendo: Installation, Konfiguration, Entwicklung</title>
6
7   <chapter id="Aktuelle-Hinweise">
8     <title>Aktuelle Hinweise</title>
9
10     <para>Aktuelle Installations- und Konfigurationshinweise gibt es:</para>
11
12     <itemizedlist>
13       <listitem>
14         <para>im kivitendo-Forum: <ulink
15         url="https://forum.kivitendo.org/">https://forum.kivitendo.org/</ulink></para>
16       </listitem>
17
18       <listitem>
19         <para>im alten Lx-Office-Wiki unter Dokumentation (<ulink
20         url="http://wiki.lx-office.org/index.php?title=Installation_Lx-Office_ERP">http://wiki.lx-office.org/index.php?title=Installation_Lx-Office_ERP</ulink>)</para>
21       </listitem>
22     </itemizedlist>
23   </chapter>
24
25   <chapter id="config">
26     <title>Installation und Grundkonfiguration</title>
27
28     <sect1 id="Benötigte-Software-und-Pakete">
29       <title>Benötigte Software und Pakete</title>
30
31       <sect2 id="Betriebssystem">
32         <title>Betriebssystem</title>
33
34         <para>kivitendo ist für Linux konzipiert, und sollte auf jedem
35         unixoiden Betriebssystem zum Laufen zu kriegen sein. Getestet ist
36         diese Version im speziellen auf Debian und Ubuntu, grundsätzlich wurde
37         bei der Auswahl der Pakete aber darauf Rücksicht genommen, dass es
38         ohne große Probleme auf den derzeit aktuellen verbreiteten
39         Distributionen läuft.</para>
40
41         <para>Mitte 2012 sind das folgende Systeme, von denen bekannt ist,
42         dass kivitendo auf ihnen läuft:</para>
43
44         <itemizedlist>
45           <listitem>
46             <para>Ubuntu 10.04 LTS Lucid Lynx bis 12.10 Oneiric Ocelot</para>
47           </listitem>
48
49           <listitem>
50             <para>Debian 5.0 Lenny und 6.0 Squeeze</para>
51           </listitem>
52
53           <listitem>
54             <para>openSUSE 11.2 und 11.3</para>
55           </listitem>
56
57           <listitem>
58             <para>SuSE Linux Enterprice Server 11</para>
59           </listitem>
60
61           <listitem>
62             <para>Fedora 13 bis 16</para>
63           </listitem>
64         </itemizedlist>
65       </sect2>
66
67       <sect2 id="Pakete" xreflabel="Pakete">
68         <title>Pakete</title>
69
70         <para>Zum Betrieb von kivitendo werden zwingend ein Webserver (meist
71         Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.2)
72         benötigt.</para>
73
74         <para>Zusätzlich benötigt kivitendo die folgenden Perl-Pakete, die
75         nicht Bestandteil einer Standard-Perl-Installation sind:</para>
76
77         <itemizedlist>
78           <listitem><para><literal>parent</literal></para></listitem>
79
80           <listitem><para><literal>Archive::Zip</literal></para></listitem>
81
82           <listitem><para><literal>Config::Std</literal></para></listitem>
83
84           <listitem><para><literal>DateTime</literal></para></listitem>
85
86           <listitem><para><literal>DBI</literal></para></listitem>
87
88           <listitem><para><literal>DBD::Pg</literal></para></listitem>
89
90           <listitem><para><literal>Email::Address</literal></para></listitem>
91
92           <listitem><para><literal>Email::MIME</literal></para></listitem>
93
94           <listitem><para><literal>JSON</literal></para></listitem>
95
96           <listitem><para><literal>List::MoreUtils</literal></para></listitem>
97
98           <listitem><para><literal>Net::SMTP::SSL</literal> (optional, bei E-Mail-Versand über SSL; siehe Abschnitt "<xref
99           linkend="config.sending-email.smtp"/>")</para></listitem>
100
101           <listitem><para><literal>Net::SSLGlue</literal> (optional, bei E-Mail-Versand über TLS; siehe Abschnitt "<xref
102           linkend="config.sending-email.smtp"/>")</para></listitem>
103
104           <listitem><para><literal>Params::Validate</literal></para></listitem>
105
106           <listitem><para><literal>PDF::API2</literal></para></listitem>
107
108           <listitem><para><literal>Rose::Object</literal></para></listitem>
109
110           <listitem><para><literal>Rose::DB</literal></para></listitem>
111
112           <listitem><para><literal>Rose::DB::Object</literal></para></listitem>
113
114           <listitem><para><literal>Template</literal></para></listitem>
115
116           <listitem><para><literal>Text::CSV_XS</literal></para></listitem>
117
118           <listitem><para><literal>Text::Iconv</literal></para></listitem>
119
120           <listitem><para><literal>URI</literal></para></listitem>
121
122           <listitem><para><literal>XML::Writer</literal></para></listitem>
123
124           <listitem><para><literal>YAML</literal></para></listitem>
125         </itemizedlist>
126
127         <para>Seit v2.7.0 sind die folgenden Pakete hinzugekommen: <literal>Email::MIME</literal>, <literal>Net::SMTP::SSL</literal>,
128         <literal>Net::SSLGlue</literal>.</para>
129
130         <para>Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete
131         hinzugekommen, <literal>URI</literal> und
132         <literal>XML::Writer</literal> sind notwendig. Ohne startet kivitendo
133         nicht.</para>
134
135         <para>Gegenüber Version 2.6.1 sind <literal>parent</literal>,
136         <literal>DateTime</literal>, <literal>Rose::Object</literal>,
137         <literal>Rose::DB</literal> und <literal>Rose::DB::Object</literal>
138         neu hinzugekommen. <literal>IO::Wrap</literal> wurde entfernt.</para>
139
140         <para>Gegenüber Version 2.6.3 ist <literal>JSON</literal> neu
141         hinzugekommen.</para>
142
143         <para><literal>Email::Address</literal> und
144         <literal>List::MoreUtils</literal> sind schon länger feste
145         Abhängigkeiten, wurden aber bisher mit kivitendo mitgeliefert. Beide
146         sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
147         zukünftigen Version aber aus dem Paket entfernt werden. Es wird
148         empfohlen diese Module zusammen mit den anderen als Bibliotheken zu
149         installieren.</para>
150
151         <para>Die zu installierenden Pakete können in den verschiedenen
152         Distributionen unterschiedlich heißen.</para>
153
154         <para>Für Debian oder Ubuntu benötigen Sie diese Pakete:</para>
155
156         <programlisting>apt-get install apache2 postgresql libparent-perl libarchive-zip-perl \
157   libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl \
158   libemail-address-perl libemail-mime-perl liblist-moreutils-perl libpdf-api2-perl \
159   librose-object-perl librose-db-perl librose-db-object-perl \
160   libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl \
161   libxml-writer-perl libyaml-perl libconfig-std-perl \
162   libparams-validate-perl libjson-perl libclass-accessor-perl \
163   libnet-sslglue-perl libnet-smtp-ssl-perl</programlisting>
164
165         <para>Für Fedora Core benötigen Sie diese Pakete:</para>
166
167         <programlisting>yum install httpd postgresql-server perl-parent perl-DateTime \
168   perl-DBI perl-DBD-Pg perl-Email-Address perl-Email-MIME perl-List-MoreUtils \
169   perl-PDF-API2 perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object \
170   perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
171   perl-XML-Writer perl-YAML perl-Net-SSLGlue perl-Net-SMTP-SSL</programlisting>
172
173         <para>Für OpenSuSE benötigen Sie diese Pakete:</para>
174
175         <programlisting>zypper install apache2 postgresql-server perl-Archive-Zip \
176   perl-DateTime perl-DBI perl-DBD-Pg perl-Email-MIME perl-MailTools perl-List-MoreUtils \
177   perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv \
178   perl-URI perl-XML-Writer perl-YAML perl-Net-SSLGlue perl-Net-SMTP-SSL</programlisting>
179
180         <para>kivitendo enthält ein Script, mit dem überprüft werden kann, ob
181         alle benötigten Perl-Module installiert sind. Der Aufruf lautet wie
182         folgt:</para>
183
184         <programlisting>./scripts/installation_check.pl</programlisting>
185       </sect2>
186     </sect1>
187
188     <sect1 id="Manuelle-Installation-des-Programmpaketes"
189            xreflabel="Manuelle Installation des Programmpaketes">
190       <title>Manuelle Installation des Programmpaketes</title>
191
192       <para>Die kivitendo ERP Installationsdatei (kivitendo-erp-2.6.3.tgz) wird
193       im Dokumentenverzeichnis des Webservers (z.B.
194       <filename>/var/www/html/</filename>,
195       <filename>/srv/www/htdocs</filename> oder
196       <filename>/var/www/</filename>) entpackt:</para>
197
198       <programlisting>cd /var/www
199 tar xvzf kivitendo-erp-2.6.3.tgz</programlisting>
200
201       <para>Wechseln Sie in das entpackte Verzeichnis:</para>
202
203       <programlisting>cd kivitendo-erp</programlisting>
204
205       <para>Alternativ können Sie auch einen Alias in der
206       Webserverkonfiguration benutzen, um auf das tatsächliche
207       Installationsverzeichnis zu verweisen.</para>
208
209       <para>Die Verzeichnisse <filename>users</filename>, <filename>spool</filename> und <filename>webdav</filename> müssen für den Benutzer
210       beschreibbar sein, unter dem der Webserver läuft. Die restlichen Dateien müssen für diesen Benutzer lesbar sein. Die Benutzer- und
211       Gruppennamen sind bei verschiedenen Distributionen unterschiedlich (z.B. bei Debian/Ubuntu <constant>www-data</constant>, bei Fedora
212       core <constant>apache</constant> oder bei OpenSuSE <constant>wwwrun</constant>).</para>
213
214       <para>Der folgende Befehl ändert den Besitzer für die oben genannten
215       Verzeichnisse auf einem Debian/Ubuntu-System:</para>
216
217       <programlisting>chown -R www-data users spool webdav</programlisting>
218
219       <para>Weiterhin muss der Webserver-Benutzer in den Verzeichnissen <filename>templates</filename> und <filename>users</filename>
220       Unterverzeichnisse für jeden neuen Benutzer anlegen dürfen, der in kivitendo angelegt wird:</para>
221
222       <programlisting>chown www-data templates users</programlisting>
223     </sect1>
224
225     <sect1 id="config.config-file">
226       <title>kivitendo-Konfigurationsdatei</title>
227
228       <sect2 id="config.config-file.introduction"
229              xreflabel="Einführung in die Konfigurationsdatei">
230         <title>Einführung</title>
231
232         <para>In kivitendo gibt es nur noch eine Konfigurationsdatei,
233         die benötigt wird: <filename>config/kivitendo.conf</filename> (kurz:
234         "die Hauptkonfigurationsdatei"). Diese muss bei der Erstinstallation
235         von kivitendo bzw. der Migration von älteren Versionen angelegt
236         werden.</para>
237
238         <para>Als Vorlage dient die Datei
239         <filename>config/kivitendo.conf.default</filename> (kurz: "die
240         Default-Datei"):</para>
241
242         <programlisting>$ cp config/kivitendo.conf.default config/kivitendo.conf</programlisting>
243
244         <para>Die Default-Datei wird immer zuerst eingelesen. Werte, die in
245         der Hauptkonfigurationsdatei stehen, überschreiben die Werte aus der
246         Default-Datei. Die Hauptkonfigurationsdatei muss also nur die
247         Abschnitte und Werte enthalten, die von denen der Default-Datei
248         abweichen.</para>
249
250         <note>
251          <para>
252           Vor der Umbenennung in kivitendo hieß diese Datei noch <filename>config/lx_office.conf</filename>. Aus Gründen der Kompatibilität
253           wird diese Datei eingelesen, sofern die Datei <filename>config/kivitendo.conf</filename> nicht existiert.
254          </para>
255         </note>
256
257         <para>Diese Hauptkonfigurationsdatei ist dann eine
258         installationsspezifische Datei, d.h. sie enthält bspw. lokale
259         Passwörter und wird auch nicht im Versionsmanagement (git)
260         verwaltet.</para>
261
262         <para>Die Konfiguration ist ferner serverabhängig, d.h. für alle
263         Mandaten, bzw. Datenbanken gleich.</para>
264       </sect2>
265
266       <sect2 id="config.config-file.sections-parameters">
267         <title>Abschnitte und Parameter</title>
268
269         <para>Die Konfigurationsdatei besteht aus mehreren Teilen, die
270         entsprechend kommentiert sind:</para>
271
272         <itemizedlist>
273           <listitem><para><literal>authentication</literal> (siehe Abschnitt "<xref
274           linkend="Benutzerauthentifizierung-und-Administratorpasswort"/>" in diesem Kapitel)</para></listitem>
275
276           <listitem><para><literal>authentication/database</literal></para></listitem>
277
278           <listitem><para><literal>authentication/ldap</literal></para></listitem>
279
280           <listitem><para><literal>system</literal></para></listitem>
281
282           <listitem><para><literal>features</literal> (siehe Kapitel "<xref linkend="features"/>")</para></listitem>
283
284           <listitem><para><literal>paths</literal></para></listitem>
285
286           <listitem><para><literal>applications</literal></para></listitem>
287
288           <listitem><para><literal>environment</literal></para></listitem>
289
290           <listitem><para><literal>mail_delivery</literal> (siehe Abschnitt "<xref linkend="config.sending-email.smtp"/>)</para></listitem>
291
292           <listitem><para><literal>print_templates</literal></para></listitem>
293
294           <listitem><para><literal>task_server</literal></para></listitem>
295
296           <listitem><para><literal>periodic_invoices</literal></para></listitem>
297
298           <listitem><para><literal>console</literal></para></listitem>
299
300           <listitem><para><literal>debug</literal></para></listitem>
301         </itemizedlist>
302
303         <para>Die üblicherweise wichtigsten Parameter, die am Anfang
304         einzustellen oder zu kontrollieren sind, sind:</para>
305
306         <programlisting>[authentication]
307 admin_password = geheim
308
309 [authentication/database]
310 host     = localhost
311 port     = 5432
312 db       = kivitendo_auth
313 user     = postgres
314 password =
315
316 [system]
317 dbcharset = UTF-8</programlisting>
318
319         <para>Nutzt man wiederkehrende Rechnungen, kann man unter
320         <varname>[periodic_invoices]</varname> den Login eines Benutzers
321         angeben, der nach Erstellung der Rechnungen eine entsprechende E-Mail
322         mit Informationen über die erstellten Rechnungen bekommt.</para>
323
324         <para>Nutzt man den <link
325         linkend="config.task-server">Taskserver</link> für <link
326         linkend="features.periodic-invoices">wiederkehrende Rechnungen</link>,
327         muss unter <varname>[task_server]</varname> ein Login eines Benutzers
328         angegeben werden, mit dem sich der Taskserver an kivitendo bei der
329         Datenbank anmeldet, die dem Benutzer zugewiesen ist.</para>
330
331         <para>Für Entwickler finden sich unter <varname>[debug]</varname>
332         wichtige Funktionen, um die Fehlersuche zu erleichtern.</para>
333       </sect2>
334
335       <sect2 id="config.config-file.prior-versions">
336         <title>Versionen vor 2.6.3</title>
337
338         <para>In älteren kivitendo Versionen gab es im Verzeichnis
339         <filename>config</filename> die Dateien
340         <filename>authentication.pl</filename> und
341         <filename>lx-erp.conf</filename>, die jeweils Perl-Dateien waren. Es
342         gab auch die Möglichkeit, eine lokale Version der Konfigurationsdatei
343         zu erstellen (<filename>lx-erp-local.conf</filename>). Dies ist ab
344         2.6.3 nicht mehr möglich, aber auch nicht mehr nötig.</para>
345
346         <para>Beim Update von einer kivitendo-Version vor 2.6.3 auf 2.6.3 oder
347         jünger müssen die Einstellungen aus den alten Konfigurationsdateien
348         manuell übertragen und die alten Konfigurationsdateien anschließend
349         gelöscht oder verschoben werden. Ansonsten zeigt kivitendo eine
350         entsprechende Fehlermeldung an.</para>
351       </sect2>
352     </sect1>
353
354     <sect1 id="Anpassung-der-PostgreSQL-Konfiguration">
355       <title>Anpassung der PostgreSQL-Konfiguration</title>
356
357       <para>PostgreSQL muss auf verschiedene Weisen angepasst werden.</para>
358
359       <sect2 id="Zeichensätze-die-Verwendung-von-UTF-8">
360         <title>Zeichensätze/die Verwendung von UTF-8</title>
361
362         <para>Bei aktuellen Serverinstallationen braucht man hier meist nicht
363         eingreifen</para>
364
365         <para>Dieses kann überprüft werden: ist das Encoding der Datenbank
366         “template1” “UTF8”, so braucht man nichts weiteres diesbezueglich
367         unternehmen. Zum Testen:
368
369         <programlisting>su postgres
370 echo '\l' | psql
371 exit </programlisting>
372
373         Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
374         UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
375         Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl
376         getan werden:</para>
377
378         <programlisting>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername</programlisting>
379
380         <para>Die Datenbankversionsnummer muss an die tatsächlich verwendete
381         Versionsnummer angepasst werden.</para>
382
383         <para>Unter anderen Distributionen gibt es ähnliche Methoden.</para>
384
385         <para>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und
386         ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
387         kivitendo mit ISO-8859-15 als Encoding betrieben werden.</para>
388
389         <para>Das Encoding einer Datenbank kann in <command>psql</command> mit
390         <literal>\l</literal> geprüft werden.</para>
391       </sect2>
392
393       <sect2 id="Änderungen-an-Konfigurationsdateien">
394         <title>Änderungen an Konfigurationsdateien</title>
395
396         <para>In der Datei <filename>postgresql.conf</filename>, die je nach
397         Distribution in verschiedenen Verzeichnissen liegen kann (z.B.
398         <filename>/var/lib/pgsql/data/</filename> oder
399         <filename>/etc/postgresql/</filename>, muss sichergestellt werden,
400         dass TCP/IP-Verbindungen aktiviert sind. Das Verhalten wird über den
401         Parameter <varname>listen_address</varname> gesteuert. Laufen
402         PostgreSQL und kivitendo auf demselben Rechner, so kann dort der Wert
403         <literal>localhost</literal> verwendet werden. Andernfalls müssen
404         Datenbankverbindungen auch von anderen Rechnern aus zugelassen werden,
405         was mit dem Wert <literal>*</literal> geschieht.</para>
406
407         <para>In der Datei <filename>pg_hba.conf</filename>, die im gleichen
408         Verzeichnis wie die <filename>postgresql.conf</filename> zu finden
409         sein sollte, müssen die Berichtigungen für den Zugriff geändert
410         werden. Hier gibt es mehrere Möglichkeiten. sinnvoll ist es nur die
411         nögiten Verbindungen immer zuzulassen, für eine lokal laufenden
412         Datenbank zum Beispiel:</para>
413
414         <programlisting>local all kivitendo password
415 host all kivitendo 127.0.0.1 255.255.255.255 password</programlisting>
416       </sect2>
417
418       <sect2 id="Erweiterung-für-servergespeicherte-Prozeduren">
419         <title>Erweiterung für servergespeicherte Prozeduren</title>
420
421         <para>In der Datenbank <literal>template1</literal> muss die
422         Unterstützung für servergespeicherte Prozeduren eingerichet werden.
423         Melden Sie sich dafür als Benutzer “postgres” an der Datenbank an:
424         <programlisting>su - postgres
425 psql template1</programlisting>
426
427         führen Sie die folgenden Kommandos aus:</para>
428
429         <programlisting>create language 'plpgsql';
430 \q</programlisting>
431       </sect2>
432
433       <sect2 id="Datenbankbenutzer-anlegen">
434         <title>Datenbankbenutzer anlegen</title>
435
436         <para>Wenn Sie nicht den Datenbanksuperuser “postgres” zum Zugriff
437         benutzen wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer
438         anlegen. Ein Beispiel, wie Sie einen neuen Benutzer anlegen
439         können:</para>
440
441               <programlisting>su - postgres
442 createuser -d -P kivitendo
443 exit</programlisting>
444
445         <para>Wenn Sie später einen Datenbankzugriff konfigurieren, verändern
446         Sie den evtl. voreingestellten Benutzer “postgres” auf “kivitendo” bzw.
447         den hier gewählten Benutzernamen.</para>
448       </sect2>
449     </sect1>
450
451     <sect1 id="Apache-Konfiguration">
452       <title>Webserver-Konfiguration</title>
453
454       <sect2>
455         <title>Grundkonfiguration mittels CGI</title>
456
457         <note>
458           <para>Für einen deutlichen Performanceschub sorgt die Ausführung
459           mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
460           <xref linkend="Apache-Konfiguration.FCGI" /> beschrieben.</para>
461         </note>
462
463         <para>Der Zugriff auf das Programmverzeichnis muss in der Apache
464         Webserverkonfigurationsdatei <literal>httpd.conf</literal> eingestellt
465         werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
466         anderen Datei hinzu, die beim Starten des Webservers eingelesen
467         wird:</para>
468
469         <programlisting>AddHandler cgi-script .pl
470 Alias /kivitendo-erp/ /var/www/kiviteno-erp/
471
472 &lt;Directory /var/www/kivitendo-erp&gt;
473  Options ExecCGI Includes FollowSymlinks
474 &lt;/Directory&gt;
475
476 &lt;Directory /var/www/kivitendo-erp/users&gt;
477  Order Deny,Allow
478  Deny from All
479 &lt;/Directory&gt;</programlisting>
480
481         <para>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
482         das kivitendo-Archiv entpacket haben.</para>
483
484         <note>
485           <para>Vor den einzelnen Optionen muss bei einigen Distributionen ein
486           Plus ‘<literal>+</literal>’ gesetzt werden.</para>
487         </note>
488
489         <para>Auf einigen Webservern werden manchmal die Grafiken und
490         Style-Sheets nicht ausgeliefert. In solchen Fällen hat es oft
491         geholfen, die folgende Option in die Konfiguration aufzunehmen:</para>
492
493         <programlisting>EnableSendfile Off</programlisting>
494       </sect2>
495
496       <sect2 id="Apache-Konfiguration.FCGI"
497              xreflabel="Konfiguration für FastCGI/FCGI">
498         <title>Konfiguration für FastCGI/FCGI</title>
499
500         <sect3 id="Apache-Konfiguration.FCGI.WasIstEs">
501           <title>Was ist FastCGI?</title>
502
503           <para>Direkt aus <ulink
504           url="http://de.wikipedia.org/wiki/FastCGI">Wikipedia</ulink>
505           kopiert:</para>
506
507           <para><citation> FastCGI ist ein Standard für die Einbindung
508           externer Software zur Generierung dynamischer Webseiten in einem
509           Webserver. FastCGI ist vergleichbar zum Common Gateway Interface
510           (CGI), wurde jedoch entwickelt, um dessen Performance-Probleme zu
511           umgehen. </citation></para>
512         </sect3>
513
514         <sect3 id="Apache-Konfiguration.FCGI.Warum">
515           <title>Warum FastCGI?</title>
516
517           <para>Perl Programme (wie kivitendo eines ist) werden nicht statisch
518           kompiliert. Stattdessen werden die Quelldateien bei jedem Start
519           übersetzt, was bei kurzen Laufzeiten einen Großteil der Laufzeit
520           ausmacht. Während SQL Ledger einen Großteil der Funktionalität in
521           einzelne Module kapselt, um immer nur einen kleinen Teil laden zu
522           müssen, ist die Funktionalität von kivitendo soweit gewachsen, dass
523           immer mehr Module auf den Rest des Programms zugreifen. Zusätzlich
524           benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
525           entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies
526           führt dazu dass ein kivitendo Aufruf der Kernmasken mittlerweile
527           deutlich länger dauert als früher, und dass davon 90% für das Laden
528           der Module verwendet wird.</para>
529
530           <para>Mit FastCGI werden nun die Module einmal geladen, und danach
531           wird nur die eigentliche Programmlogik ausgeführt.</para>
532         </sect3>
533
534         <sect3 id="Apache-Konfiguration.FCGI.WebserverUndPlugin">
535           <title>Getestete Kombinationen aus Webservern und Plugin</title>
536
537           <para>Folgende Kombinationen sind getestet:</para>
538
539           <itemizedlist>
540             <listitem>
541               <para>Apache 2.2.11 (Ubuntu) und mod_fcgid.</para>
542             </listitem>
543
544             <listitem>
545               <para>Apache 2.2.11 (Ubuntu) und mod_fastcgi.</para>
546             </listitem>
547           </itemizedlist>
548
549           <para>Dabei wird mod_fcgid empfohlen, weil mod_fastcgi seit geraumer
550           Zeit nicht mehr weiter entwickelt wird. Im Folgenden wird auf
551           mod_fastcgi nicht mehr explizit eingegangen.</para>
552
553           <para>Als Perl Backend wird das Modul <filename>FCGI.pm</filename>
554           verwendet.</para>
555
556           <warning>
557             <para>FCGI-Versionen ab 0.69 und bis zu 0.71 inklusive sind extrem strict in der Behandlung von Unicode, und verweigern
558             bestimmte Eingaben von kivitendo. Falls es Probleme mit Umlauten in Ihrere Installation gibt, muss zwingend Version 0.68 oder
559             aber Version 0.72 und neuer eingesetzt werden.</para>
560
561             <para>Mit CPAN lässt sie sich die Vorgängerversion wie folgt
562             installieren:</para>
563
564             <programlisting>force install M/MS/MSTROUT/FCGI-0.68.tar.gz</programlisting>
565           </warning>
566         </sect3>
567
568         <sect3 id="Apache-Konfiguration.FCGI.Konfiguration">
569           <title>Konfiguration des Webservers</title>
570
571           <para>Bevor Sie versuchen, eine kivitendo Installation unter FCGI
572           laufen zu lassen, empfliehlt es sich die Installation ersteinmal
573           unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
574           debuggen die beim ersten aufsetzen auftreten können. Sollte die
575           Installation schon funktionieren, lesen Sie weiter.</para>
576
577           <para>Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
578           unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:</para>
579
580           <programlisting>a2enmod fcgid</programlisting>
581
582           <para>Die Konfiguration für die Verwendung von kivitendo mit FastCGI
583           erfolgt durch Anpassung der vorhandenen <function>Alias</function>-
584           und <function>Directory</function>-Direktiven. Dabei wird zwischen
585           dem Installationspfad von kivitendo im Dateisystem
586           ("<filename>/path/to/kivitendo-erp</filename>") und der URL
587           unterschieden, unter der kivitendo im Webbrowser erreichbar ist
588           ("<filename>/url/for/kivitendo-erp</filename>").</para>
589
590           <para>Folgender Konfigurationsschnipsel funktioniert mit
591           mod_fastcgi:</para>
592
593           <programlisting>AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fcgi
594 Alias       /url/for/kivitendo-erp/          /path/to/kivitendo-erp/
595
596 &lt;Directory /path/to/kivitendo-erp&gt;
597   AllowOverride All
598   Options ExecCGI Includes FollowSymlinks
599   Order Allow,Deny
600   Allow from All
601 &lt;/Directory&gt;
602
603 &lt;DirectoryMatch /path/to/kivitendo-erp/users&gt;
604   Order Deny,Allow
605   Deny from All
606 &lt;/DirectoryMatch&gt;</programlisting>
607
608           <para>Seit mod_fcgid-Version 2.6.3 gelten sehr kleine Grenzen für
609           die maximale Größe eines Requests. Diese sollte wie folgt
610           hochgesetzt werden:</para>
611
612           <programlisting>FcgidMaxRequestLen 10485760</programlisting>
613
614           <para>Das ganze sollte dann so aussehen:</para>
615
616           <programlisting>AddHandler fcgid-script .fpl
617 AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
618 Alias       /url/for/kivitendo-erp/          /path/to/kivitendo-erp/
619 FcgidMaxRequestLen 10485760
620
621 &lt;Directory /path/to/kivitendo-erp&gt;
622   AllowOverride All
623   Options ExecCGI Includes FollowSymlinks
624   Order Allow,Deny
625   Allow from All
626 &lt;/Directory&gt;
627
628 &lt;DirectoryMatch /path/to/kivitendo-erp/users&gt;
629   Order Deny,Allow
630   Deny from All
631 &lt;/DirectoryMatch&gt;</programlisting>
632
633           <para>Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle
634           Zugriffe auf die einzelnen Scripte werden auf diesen umgeleitet.
635           Dadurch, dass zur Laufzeit öfter mal Scripte neu geladen werden,
636           gibt es hier kleine Performance-Einbußen.</para>
637
638           <para>Es ist möglich, die gleiche kivitendo Version parallel unter
639           CGI und FastCGI zu betreiben. Dafür bleiben die Directorydirektiven
640           wie oben beschrieben, die URLs werden aber umgeleitet:</para>
641
642           <programlisting># Zugriff über CGI
643 Alias       /url/for/kivitendo-erp                /path/to/kivitendo-erp
644
645 # Zugriff mit mod_fcgid:
646 AliasMatch ^/url/for/kivitendo-erp-fcgid/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
647 Alias       /url/for/kivitendo-erp-fcgid/          /path/to/kivitendo-erp/</programlisting>
648
649           <para>Dann ist unter <filename>/url/for/kivitendo-erp/</filename>
650           die normale Version erreichbar, und unter
651           <constant>/url/for/kivitendo-erp-fcgid/</constant> die
652           FastCGI-Version.</para>
653         </sect3>
654       </sect2>
655     </sect1>
656
657     <sect1 id="config.task-server">
658       <title>Der Task-Server</title>
659
660       <para>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
661       regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese zu
662       festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess
663       wird bisher nur für die Erzeugung der wiederkehrenden Rechnungen
664       benutzt, wird aber in Zukunft deutlich mehr Aufgaben übertragen
665       bekommen.</para>
666
667       <sect2 id="Konfiguration-des-Task-Servers">
668         <title>Verfügbare und notwendige Konfigurationsoptionen</title>
669
670         <para>Die Konfiguration erfolgt über den Abschnitt
671         <literal>[task_server]</literal> in der Datei
672         <filename>config/kivitendo.conf</filename>. Die dort verfügbaren
673         Optionen sind:</para>
674
675         <variablelist>
676           <varlistentry>
677             <term><varname>login</varname></term>
678
679             <listitem>
680               <para>gültiger kivitendo-Benutzername, der benutzt wird, um die
681               zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss
682               in der Administration angelegt werden. Diese Option muss
683               angegeben werden.</para>
684             </listitem>
685           </varlistentry>
686
687           <varlistentry>
688             <term><varname>run_as</varname></term>
689
690             <listitem>
691               <para>Wird der Server vom Systembenutzer <literal>root</literal>
692               gestartet, so wechselt er auf den mit <literal>run_as</literal>
693               angegebenen Systembenutzer. Der Systembenutzer muss dieselben
694               Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
695               (siehe see <xref
696               linkend="Manuelle-Installation-des-Programmpaketes" />). Daher
697               ist es sinnvoll, hier denselben Systembenutzer einzutragen,
698               unter dem auch der Webserver läuft.</para>
699             </listitem>
700           </varlistentry>
701
702           <varlistentry>
703             <term><varname>debug</varname></term>
704
705             <listitem>
706               <para>Schaltet Debug-Informationen an und aus.</para>
707             </listitem>
708           </varlistentry>
709         </variablelist>
710       </sect2>
711
712       <sect2 id="Einbinden-in-den-Boot-Prozess">
713         <title>Automatisches Starten des Task-Servers beim Booten</title>
714
715         <para>Der Task-Server verhält sich von seinen Optionen her wie ein
716         reguläres SystemV-kompatibles Boot-Script. Außerdem wechselt er beim
717         Starten automatisch in das kivitendo-Installationsverzeichnis.</para>
718
719         <para>Deshalb ist es möglich, ihn durch Setzen eines symbolischen
720         Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
721         einzubinden. Da das bei neueren Linux-Distributionen aber nicht
722         zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
723         anstelle eines symbolischen Links verwendet werden können.</para>
724
725         <sect3>
726           <title>SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora
727           Core)</title>
728
729           <para>Kopieren Sie die Datei
730           <filename>scripts/boot/system-v/kivitendo-server</filename>
731           nach <filename>/etc/init.d/kivitendo-server</filename>. Passen
732           Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
733           <literal>DAEMON=....</literal>). Binden Sie das Script in den
734           Boot-Prozess ein. Dies ist distributionsabhängig:</para>
735
736           <itemizedlist>
737             <listitem>
738               <para>Debian-basierende Systeme:</para>
739
740               <programlisting>update-rc.d kivitendo-task-server defaults
741 # Nur bei Debian Squeeze und neuer:
742 insserv kivitendo-task-server</programlisting>
743             </listitem>
744
745             <listitem>
746               <para>OpenSuSE und Fedora Core:</para>
747
748               <programlisting>chkconfig --add kivitendo-task-server</programlisting>
749             </listitem>
750           </itemizedlist>
751
752           <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
753           werden: <command>/etc/init.d/kivitendo-task-server
754           start</command></para>
755         </sect3>
756
757         <sect3>
758           <title>Upstart-basierende Systeme (z.B. Ubuntu)</title>
759
760           <para>Kopieren Sie die Datei
761           <filename>scripts/boot/upstart/kivitendo-task-server.conf</filename>
762           nach <filename>/etc/init/kivitendo-task-server.conf</filename>.
763           Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
764           <literal>exec ....</literal>).</para>
765
766           <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
767           werden: <command>service kivitendo-task-server
768           start</command></para>
769         </sect3>
770       </sect2>
771
772       <sect2 id="Prozesskontrolle">
773         <title>Wie der Task-Server gestartet und beendet wird</title>
774
775         <para>Der Task-Server wird wie folgt kontrolliert:</para>
776
777         <programlisting>./scripts/task_server.pl Befehl</programlisting>
778
779         <para><literal>Befehl</literal> ist dabei eine der folgenden
780         Optionen:</para>
781
782         <itemizedlist>
783           <listitem>
784             <para><literal>start</literal> startet eine neue Instanz des
785             Task-Servers. Die Prozess-ID wird innerhalb des
786             <filename>users</filename>-Verzeichnisses abgelegt.</para>
787           </listitem>
788
789           <listitem>
790             <para><literal>stop</literal> beendet einen laufenden
791             Task-Server.</para>
792           </listitem>
793
794           <listitem>
795             <para><literal>restart</literal> beendet und startet ihn
796             neu.</para>
797           </listitem>
798
799           <listitem>
800             <para><literal>status</literal> berichtet, ob der Task-Server
801             läuft.</para>
802           </listitem>
803         </itemizedlist>
804
805         <para>Der Task-Server wechselt beim Starten automatisch in das
806         kivitendo-Installationsverzeichnis.</para>
807
808         <para>Dieselben Optionen können auch für die SystemV-basierenden
809         Runlevel-Scripte benutzt werden (siehe oben).</para>
810       </sect2>
811       <sect2 id="Prozesskontrolle2">
812         <title>Task-Server mit mehreren Mandanten</title>
813
814         <para>Beim Task-Server wird der Login-Name des Benutzers, unter dem der
815         Task-Server laufen soll, in die Konfigurationsdatei geschrieben. Hat
816         man mehrere Mandanten muß man auch mehrere Konfigurationsdateien
817         anlegen.</para>
818
819         <para>Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf,
820         wo in der Kategorie [task_server] der gewünschte "login" steht.</para>
821
822         <para>Der alternative Task-Server wird dann mit folgendem Befehl
823         gestartet:</para>
824
825         <programlisting>./scripts/task_server.pl -c config/DATEINAME.conf</programlisting>
826       </sect2>
827     </sect1>
828
829     <sect1 id="Benutzerauthentifizierung-und-Administratorpasswort">
830       <title>Benutzerauthentifizierung und Administratorpasswort</title>
831
832       <para>Informationen über die Einrichtung der Benutzerauthentifizierung,
833       über die Verwaltung von Gruppen und weitere Einstellungen</para>
834
835       <sect2 id="Grundlagen-zur-Benutzerauthentifizierung">
836         <title>Grundlagen zur Benutzerauthentifizierung</title>
837
838         <para>kivitendo verwaltet die Benutzerinformationen in einer
839         Datenbank, die im folgenden “Authentifizierungsdatenbank” genannt
840         wird. Für jeden Benutzer kann dort eine eigene Datenbank für die
841         eigentlichen Finanzdaten hinterlegt sein. Diese beiden Datenbanken
842         können, müssen aber nicht unterschiedlich sein.</para>
843
844         <para>Im einfachsten Fall gibt es für kivitendo nur eine einzige
845         Datenbank, in der sowohl die Benutzerinformationen als auch die Daten
846         abgelegt werden.</para>
847
848         <para>Zusätzlich ermöglicht es kivitendo, dass die Benutzerpasswörter
849         entweder gegen die Authentifizierungsdatenbank oder gegen einen
850         LDAP-Server überprüft werden.</para>
851
852         <para>Welche Art der Passwortüberprüfung kivitendo benutzt und wie
853         kivitendo die Authentifizierungsdatenbank erreichen kann, wird in der
854         Konfigurationsdatei <filename>config/kivitendo.conf</filename>
855         festgelegt. Diese muss bei der Installation und bei einem Upgrade von
856         einer Version vor v2.6.0 angelegt werden. Eine
857         Beispielkonfigurationsdatei
858         <filename>config/kivitendo.conf.default</filename> existiert, die als
859         Vorlage benutzt werden kann.</para>
860       </sect2>
861
862       <sect2 id="Administratorpasswort">
863         <title>Administratorpasswort</title>
864
865         <para>Das Passwort, das zum Zugriff auf das Aministrationsinterface
866         benutzt wird, wird ebenfalls in dieser Datei gespeichert. Es kann auch
867         nur dort und nicht mehr im Administrationsinterface selber geändert
868         werden. Der Parameter dazu heißt <varname>admin_password</varname> im
869         Abschnitt <varname>[authentication]</varname>.</para>
870       </sect2>
871
872       <sect2 id="Authentifizierungsdatenbank">
873         <title>Authentifizierungsdatenbank</title>
874
875         <para>Die Verbindung zur Authentifizierungsdatenbank wird mit den
876         Parametern in <varname>[authentication/database]</varname>
877         konfiguriert. Hier sind die folgenden Parameter anzugeben:</para>
878
879         <variablelist>
880           <varlistentry>
881             <term><literal>host</literal></term>
882
883             <listitem>
884               <para>Der Rechnername oder die IP-Adresse des
885               Datenbankservers</para>
886             </listitem>
887           </varlistentry>
888
889           <varlistentry>
890             <term><literal>port</literal></term>
891
892             <listitem>
893               <para>Die Portnummer des Datenbankservers, meist 5432</para>
894             </listitem>
895           </varlistentry>
896
897           <varlistentry>
898             <term><literal>db</literal></term>
899
900             <listitem>
901               <para>Der Name der Authentifizierungsdatenbank</para>
902             </listitem>
903           </varlistentry>
904
905           <varlistentry>
906             <term><literal>user</literal></term>
907
908             <listitem>
909               <para>Der Benutzername, mit dem sich kivitendo beim
910               Datenbankserver anmeldet (z.B.
911               "<literal>postgres</literal>")</para>
912             </listitem>
913           </varlistentry>
914
915           <varlistentry>
916             <term><literal>password</literal></term>
917
918             <listitem>
919               <para>Das Passwort für den Datenbankbenutzer</para>
920             </listitem>
921           </varlistentry>
922         </variablelist>
923
924         <para>Die Datenbank muss noch nicht existieren. kivitendo kann sie
925         automatisch anlegen (mehr dazu siehe unten).</para>
926       </sect2>
927
928       <sect2 id="Passwortüberprüfung">
929         <title>Passwortüberprüfung</title>
930
931         <para>kivitendo unterstützt Passwortüberprüfung auf zwei Arten: gegen
932         die Authentifizierungsdatenbank und gegen einen externen LDAP- oder
933         Active-Directory-Server. Welche davon benutzt wird, regelt der
934         Parameter <varname>module</varname> im Abschnitt
935         <varname>[authentication]</varname>.</para>
936
937         <para>Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank
938         gespeichert werden, so muss der Parameter <varname>module</varname>
939         den Wert <literal>DB</literal> enthalten. In diesem Fall können sowohl
940         der Administrator als auch die Benutzer selber ihre Psaswörter in
941         kivitendo ändern.</para>
942
943         <para>Soll hingegen ein externer LDAP- oder Active-Directory-Server
944         benutzt werden, so muss der Parameter <varname>module</varname> auf
945         <literal>LDAP</literal> gesetzt werden. In diesem Fall müssen
946         zusätzliche Informationen über den LDAP-Server im Abschnitt
947         <literal>[authentication/ldap]</literal> angegeben werden:</para>
948
949         <variablelist>
950           <varlistentry>
951             <term><literal>host</literal></term>
952
953             <listitem>
954               <para>Der Rechnername oder die IP-Adresse des LDAP- oder
955               Active-Directory-Servers. Diese Angabe ist zwingend
956               erforderlich.</para>
957             </listitem>
958           </varlistentry>
959
960           <varlistentry>
961             <term><literal>port</literal></term>
962
963             <listitem>
964               <para>Die Portnummer des LDAP-Servers; meist 389.</para>
965             </listitem>
966           </varlistentry>
967
968           <varlistentry>
969             <term><literal>tls</literal></term>
970
971             <listitem>
972               <para>Wenn Verbindungsverschlüsselung gewünscht ist, so diesen
973               Wert auf ‘<literal>1</literal>’ setzen, andernfalls auf
974               ‘<literal>0</literal>’ belassen</para>
975             </listitem>
976           </varlistentry>
977
978           <varlistentry>
979             <term><literal>attribute</literal></term>
980
981             <listitem>
982               <para>Das LDAP-Attribut, in dem der Benutzername steht, den der
983               Benutzer eingegeben hat. Für Active-Directory-Server ist dies
984               meist ‘<literal>sAMAccountName</literal>’, für andere
985               LDAP-Server hingegen ‘<literal>uid</literal>’. Diese Angabe ist
986               zwingend erforderlich.</para>
987             </listitem>
988           </varlistentry>
989
990           <varlistentry>
991             <term><literal>base_dn</literal></term>
992
993             <listitem>
994               <para>Der Abschnitt des LDAP-Baumes, der durchsucht werden soll.
995               Diese Angabe ist zwingend erforderlich.</para>
996             </listitem>
997           </varlistentry>
998
999           <varlistentry>
1000             <term><literal>filter</literal></term>
1001
1002             <listitem>
1003               <para>Ein optionaler LDAP-Filter. Enthält dieser Filter das Wort
1004               <literal>&lt;%login%&gt;</literal>, so wird dieses durch den vom
1005               Benutzer eingegebenen Benutzernamen ersetzt. Andernfalls wird
1006               der LDAP-Baum nach einem Element durchsucht, bei dem das oben
1007               angegebene Attribut mit dem Benutzernamen identisch ist.</para>
1008             </listitem>
1009           </varlistentry>
1010
1011           <varlistentry>
1012             <term><literal>bind_dn</literal> und
1013             <literal>bind_password</literal></term>
1014
1015             <listitem>
1016               <para>Wenn der LDAP-Server eine Anmeldung erfordert, bevor er
1017               durchsucht werden kann (z.B. ist dies bei
1018               Active-Directory-Servern der Fall), so kann diese hier angegeben
1019               werden. Für Active-Directory-Server kann als
1020               ‘<literal>bind_dn</literal>’ entweder eine komplette LDAP-DN wie
1021               z.B. ‘<literal>cn=Martin
1022               Mustermann,cn=Users,dc=firmendomain</literal>’ auch nur der
1023               volle Name des Benutzers eingegeben werden; in diesem Beispiel
1024               also ‘<literal>Martin Mustermann</literal>’.</para>
1025             </listitem>
1026           </varlistentry>
1027         </variablelist>
1028       </sect2>
1029
1030       <sect2 id="Name-des-Session-Cookies">
1031         <title>Name des Session-Cookies</title>
1032
1033         <para>Sollen auf einem Server mehrere kivitendo-Installationen
1034         aufgesetzt werden, so müssen die Namen der Session-Cookies für alle
1035         Installationen unterschiedlich sein. Der Name des Cookies wird mit dem
1036         Parameter <varname>cookie_name</varname> im Abschnitt
1037         <varname>[authentication]</varname>gesetzt.</para>
1038
1039         <para>Diese Angabe ist optional, wenn nur eine Installation auf dem
1040         Server existiert.</para>
1041       </sect2>
1042
1043       <sect2 id="Anlegen-der-Authentifizierungsdatenbank">
1044         <title>Anlegen der Authentifizierungsdatenbank</title>
1045
1046         <para>Nachdem alle Einstellungen in
1047         <filename>config/kivitendo.conf</filename> vorgenommen wurden, muss
1048         kivitendo die Authentifizierungsdatenbank anlegen. Dieses geschieht
1049         automatisch, wenn Sie sich im Administrationsmodul anmelden, das unter
1050         der folgenden URL erreichbar sein sollte:</para>
1051
1052         <para><ulink
1053         url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
1054       </sect2>
1055     </sect1>
1056
1057     <sect1 id="Benutzer--und-Gruppenverwaltung">
1058       <title>Benutzer- und Gruppenverwaltung</title>
1059
1060       <para>Nach der Installation müssen Benutzer, Gruppen und Datenbanken
1061       angelegt werden. Dieses geschieht im Administrationsmenü, das Sie unter
1062       folgender URL finden:</para>
1063
1064       <para><ulink
1065       url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
1066
1067       <para>Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
1068       <filename>config/kivitendo.conf</filename> eingetragen haben.</para>
1069
1070       <sect2 id="Zusammenhänge">
1071         <title>Zusammenhänge</title>
1072
1073         <para>kivitendo verwendet eine Datenbank zum Speichern all seiner
1074         Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
1075         mit kivitendo arbeiten zu können, muss eine Person einen
1076         Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
1077         Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
1078         möglich und normal, dass mehreren Benutzern die selbe Datenbank
1079         zugewiesen wird, sodass sie alle mit den selben Daten arbeiten
1080         können.</para>
1081
1082         <para>Die Basisdaten der Benutzer, die in der Administration
1083         eingegeben werden können, werden in einer zweiten Datenbank
1084         gespeichert, der bereits erwähnten Authentifizierungsdatenbank. Diese
1085         ist also den Produktivdaten enthaltenden Datenbanken vorgeschaltet.
1086         Pro kivitendo-Installation gibt es nur eine
1087         Authentifizierungsdatenbank, aber beliebig viele Datenbanken mit
1088         Firmendaten.</para>
1089
1090         <para>kivitendo kann seinen Benutzern Zugriff auf bestimmte
1091         Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
1092         gestattet, so werden der entsprechenden Menüpunkte auch nicht
1093         angezeigt. Diese Rechte werden ebenfalls in der
1094         Authentifizierungsdatenbank gespeichert.</para>
1095
1096         <para>Um Rechte verteilen zu können, verwendet kivitendo ein
1097         Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
1098         erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
1099         mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
1100         Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
1101         Benutzer Mitglied ist.</para>
1102
1103         <para>Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und
1104         Benutzer angelegt werden sollten, lautet:</para>
1105
1106         <orderedlist numeration="arabic">
1107           <listitem>
1108             <para>Datenbank anlegen</para>
1109           </listitem>
1110
1111           <listitem>
1112             <para>Gruppen anlegen</para>
1113           </listitem>
1114
1115           <listitem>
1116             <para>Benutzer anlegen</para>
1117           </listitem>
1118
1119           <listitem>
1120             <para>Benutzer den Gruppen zuordnen</para>
1121           </listitem>
1122         </orderedlist>
1123       </sect2>
1124
1125       <sect2 id="Datenbanken-anlegen">
1126         <title>Datenbanken anlegen</title>
1127
1128         <para>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
1129         den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
1130         Beispielen ist dies ‘<literal>kivitendo</literal>’).</para>
1131
1132         <para>Wenn Sie für die kivitendo-Installation nicht Unicode (UTF-8) sondern den europäischen Schriftsatz ISO-8859-15 benutzen
1133         wollen, so müssen Sie vor dem Anlegen der Datenbank in der Datei <filename>config/kivitendo.conf</filename> die Variable
1134         <literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf den Wert ‘<literal>ISO-8859-15</literal>’ setzen.</para>
1135
1136         <para>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
1137         verwenden müssen, da diese Einstellungen momentan global in kivitendo
1138         vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
1139         Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
1140         angelegt worden sein.</para>
1141       </sect2>
1142
1143       <sect2 id="Gruppen-anlegen">
1144         <title>Gruppen anlegen</title>
1145
1146         <para>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein
1147         Name gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
1148         Anlegen können Sie die verschiedenen Bereiche wählen, auf die
1149         Mitglieder dieser Gruppe Zugriff haben sollen.</para>
1150
1151         <para>Benutzergruppen sind unabhängig von Datenbanken, da sie in der
1152         Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
1153         Datenbanken, die in dieser Installation verwaltet werden.</para>
1154       </sect2>
1155
1156       <sect2 id="Benutzer-anlegen">
1157         <title>Benutzer anlegen</title>
1158
1159         <para>Beim Anlegen von Benutzern werden für viele Parameter
1160         Standardeinstellungen vorgenommen, die den Gepflogenheiten des
1161         deutschen Raumes entsprechen.</para>
1162
1163         <para>Zwingend anzugeben sind der Loginname sowie die komplette
1164         Datenbankkonfiguration. Wenn die Passwortauthentifizierung über die
1165         Datenbank eingestellt ist, so kann hier auch das Benutzerpasswort
1166         gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung
1167         aktiv, so ist das Passwort-Feld deaktiviert.</para>
1168
1169         <para>In der Datenbankkonfiguration müssen die Zugriffsdaten einer der
1170         eben angelegten Datenbanken eingetragen werden.</para>
1171       </sect2>
1172
1173       <sect2 id="Gruppenmitgliedschaften-verwalten">
1174         <title>Gruppenmitgliedschaften verwalten</title>
1175
1176         <para>Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den
1177         Gruppen zugewiesen werden. Dazu gibt es zwei Möglichkeiten:</para>
1178
1179         <orderedlist numeration="arabic">
1180           <listitem>
1181             <para>In der Gruppenverwaltung wählt man eine Gruppe aus. Im
1182             folgenden Dialog kann man dann einzeln die Benutzer der Gruppe
1183             hinzufügen.</para>
1184           </listitem>
1185
1186           <listitem>
1187             <para>In der Gruppenverwaltung wählt man das Tool zur Verwaltung
1188             der Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die
1189             alle im System angelegten Gruppen und Benutzer enthält. Durch
1190             Setzen der Häkchen wird der Benutzer in der ausgewählten Zeile der
1191             Gruppe in der ausgewählten Spalte hinzugefügt.</para>
1192           </listitem>
1193         </orderedlist>
1194       </sect2>
1195
1196       <sect2 id="Migration-alter-Installationen">
1197         <title>Migration alter Installationen</title>
1198
1199         <para>Wenn kivitendo 2.6.3 über eine ältere Version installiert wird,
1200         in der die Benutzerdaten noch im Dateisystem im Verzeichnis
1201         <literal>users</literal> verwaltet wurden, so bietet kivitendo die
1202         Möglichkeit, diese Benutzerdaten automatisch in die
1203         Authentifizierungsdatenbank zu übernehmen. Dies geschieht, wenn man
1204         sich nach dem Update der Installation das erste Mal im
1205         Administrationsbereich anmeldet. Findet kivitendo die Datei
1206         <literal>users/members</literal>, so wird der Migrationsprozess
1207         gestartet.</para>
1208
1209         <para>Der Migrationsprozess ist nahezu vollautomatisch. Alle
1210         Benutzerdaten können übernommen werden. Nach den Benutzerdaten bietet
1211         kivitendo noch die Möglichkeit an, dass automatisch eine
1212         Benutzergruppe angelegt wird. Dieser Gruppe wird Zugriff auf alle
1213         Funktionen von kivitendo gewährt. Alle migrierten Benutzern werden
1214         Mitglied in dieser Gruppe. Damit wird das Verhalten von kivitendo bis
1215         Version 2.4.3 inklusive wiederhergestellt, und die Benutzer können
1216         sich sofort wieder anmelden und mit dem System arbeiten.</para>
1217       </sect2>
1218     </sect1>
1219
1220     <sect1 id="config.sending-email" xreflabel="E-Mail-Versand aus kivitendo heraus">
1221       <title>E-Mail-Versand aus kivitendo heraus</title>
1222
1223       <para>kivitendo kann direkt aus dem Programm heraus E-Mails versenden, z.B. um ein Angebot direkt an einen Kunden zu
1224       verschicken. Damit dies funktioniert, muss eingestellt werden, über welchen Server die E-Mails verschickt werden sollen. kivitendo
1225       unterstützt dabei zwei Mechanismen: Versand über einen lokalen E-Mail-Server (z.B. mit <productname>Postfix</productname> oder
1226       <productname>Exim</productname>, was auch die standardmäßig aktive Methode ist) sowie Versand über einen SMTP-Server (z.B. der des
1227       eigenen Internet-Providers).</para>
1228
1229       <para>Welche Methode und welcher Server verwendet werden, wird über die Konfigurationsdatei <filename>config/kivitendo.conf</filename>
1230       festgelegt. Dort befinden sich alle Einstellungen zu diesem Thema im Abschnitt '<literal>[mail_delivery]</literal>'.</para>
1231
1232       <sect2 id="config.sending-email.sendmail" xreflabel="E-Mail-Versand über lokalen E-Mail-Server">
1233         <title>Versand über lokalen E-Mail-Server</title>
1234
1235         <para>Diese Methode bietet sich an, wenn auf dem Server, auf dem kivitendo läuft, bereits ein funktionsfähiger E-Mail-Server wie
1236         z.B. <productname>Postfix</productname>, <productname>Exim</productname> oder <productname>Sendmail</productname> läuft.</para>
1237
1238         <para>Um diese Methode auszuwählen, muss der Konfigurationsparameter '<literal>method = sendmail</literal>' gesetzt sein. Dies ist
1239         gleichzeitig der Standardwert, falls er nicht verändert wird.</para>
1240
1241         <para>Um zu kontrollieren, wie das Programm zum Einliefern gestartet wird, dient der Parameter '<literal>sendmail =
1242         ...</literal>'. Der Standardwert verweist auf das Programm <filename>/usr/bin/sendmail</filename>, das bei allen oben genannten
1243         E-Mail-Serverprodukten für diesen Zweck funktionieren sollte.</para>
1244
1245         <para>Die Konfiguration des E-Mail-Servers selber würde den Rahmen dieses sprengen. Hierfür sei auf die Dokumentation des
1246         E-Mail-Servers verwiesen.</para>
1247       </sect2>
1248
1249       <sect2 id="config.sending-email.smtp" xreflabel="E-Mail-Versand über einen SMTP-Server">
1250         <title>Versand über einen SMTP-Server</title>
1251
1252         <para>Diese Methode bietet sich an, wenn kein lokaler E-Mail-Server vorhanden oder zwar einer vorhanden, dieser aber nicht
1253         konfiguriert ist.</para>
1254
1255         <para>Um diese Methode auszuwählen, muss der Konfigurationsparameter '<literal>method = smtp</literal>' gesetzt sein. Die folgenden
1256         Parameter dienen dabei der weiteren Konfiguration:</para>
1257
1258         <variablelist>
1259           <varlistentry>
1260             <term><varname>hostname</varname></term>
1261
1262             <listitem><para>Name oder IP-Adresse des SMTP-Servers. Standardwert: '<literal>localhost</literal>'</para></listitem>
1263           </varlistentry>
1264
1265           <varlistentry>
1266             <term><varname>port</varname></term>
1267
1268             <listitem><para>Portnummer. Der Standardwert hängt von der verwendeten Verschlüsselungsmethode ab. Gilt '<literal>security =
1269             none</literal>' oder '<literal>security = tls</literal>', so ist 25 die Standardportnummer. Für '<literal>security =
1270             ssl</literal>' ist 465 die Portnummer. Muss normalerweise nicht geändert werden.</para></listitem>
1271           </varlistentry>
1272
1273           <varlistentry>
1274             <term><varname>security</varname></term>
1275
1276             <listitem><para>Wahl der zu verwendenden Verschlüsselung der Verbindung mit dem Server. Standardwert ist
1277             '<literal>none</literal>', wodurch keine Verschlüsselung verwendet wird. Mit '<literal>tls</literal>' wird TLS-Verschlüsselung
1278             eingeschaltet, und mit '<literal>ssl</literal>' wird Verschlüsselung via SSL eingeschaltet. Achtung: Für
1279             '<literal>tls</literal>' und '<literal>ssl</literal>' werden zusätzliche Perl-Module benötigt (siehe unten).</para></listitem>
1280           </varlistentry>
1281
1282           <varlistentry>
1283             <term><varname>login</varname> und <varname>password</varname></term>
1284
1285             <listitem><para>Falls der E-Mail-Server eine Authentifizierung verlangt, so können mit diesen zwei Parametern der Benutzername
1286             und das Passwort angegeben werden. Wird Authentifizierung verwendet, so sollte aus Sicherheitsgründen auch eine Form von
1287             Verschlüsselung aktiviert werden.</para></listitem>
1288           </varlistentry>
1289         </variablelist>
1290
1291         <para>Wird Verschlüsselung über TLS oder SSL aktiviert, so werden zusätzliche Perl-Module benötigt. Diese sind:</para>
1292
1293         <itemizedlist>
1294           <listitem><para>TLS-Verschlüsselung: Modul <literal>Net::SSLGlue</literal> (Debian-Paketname
1295           <literal>libnet-sslglue-perl</literal>, Fedora Core: <literal>perl-Net-SSLGlue</literal>, openSuSE:
1296           <literal>perl-Net-SSLGlue</literal></para></listitem>
1297
1298           <listitem><para>SSL-Verschlüsselung: Modul <literal>Net::SMTP::SSL</literal> (Debian-Paketname
1299           <literal>libnet-smtp-ssl-perl</literal>, Fedora Core: <literal>perl-Net-SMTP-SSL</literal>, openSuSE:
1300           <literal>perl-Net-SMTP-SSL</literal></para></listitem>
1301         </itemizedlist>
1302       </sect2>
1303     </sect1>
1304
1305     <sect1 id="Drucken-mit-kivitendo">
1306       <title>Drucken mit kivitendo</title>
1307
1308       <para>Das Drucksystem von kivitendo benutzt von Haus aus LaTeX Vorlagen.
1309       Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
1310       einfachsten ist dazu eine <literal>texlive</literal> Installation. Unter
1311       Debianoiden Betriebssystemen sind das die Pakete:</para>
1312
1313       <para><literal>texlive-latex-base texlive-latex-extra
1314       texlive-fonts-recommended</literal></para>
1315
1316       <para>Diese hinteren beiden enthalten Bibliotheken und Schriftarten die
1317       von den Standardvorlagen verwendet werden.</para>
1318
1319       <para>TODO: rpm Pakete.</para>
1320
1321       <para>In den allermeisten Installationen sollte drucken jetzt schon
1322       funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange
1323       Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite
1324       die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum
1325       Beispiel:</para>
1326
1327       <itemizedlist>
1328         <listitem>
1329           <para>! LaTeX Error: File `eurosym.sty' not found. Die entsprechende
1330           LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem bei
1331           Vorlagen aus der Community auf. Installieren Sie die entsprechenden
1332           Pakete.</para>
1333         </listitem>
1334
1335         <listitem>
1336           <para>! Package inputenc Error: Unicode char \u8:æ¡\9c not set up for
1337           use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
1338           einer Standardinstallation exotische utf8 Zeichen zu drucken.
1339           TeXLive unterstützt von Haus nur romanische Schriften und muss mit
1340           diversen Tricks dazu gebracht werden andere Zeichen zu akzeptieren.
1341           Adere TeX Systeme wie XeTeX schaffen hier Abhilfe.</para>
1342         </listitem>
1343       </itemizedlist>
1344
1345       <para>Wird garkein Fehler angezeigt sondern nur der Name des Templates,
1346       heißt das normalerweise, dass das LaTeX Binary nicht gefunden wurde.
1347       Prüfen Sie den Namen in der Konfiguration (Standard:
1348       <literal>pdflatex</literal>), und stellen Sie sicher, dass pdflatex
1349       (oder das von Ihnen verwendete System) vom Webserver ausgeführt werden
1350       darf.</para>
1351     </sect1>
1352
1353     <sect1 id="OpenDocument-Vorlagen">
1354       <title>OpenDocument-Vorlagen</title>
1355
1356       <para>kivitendo unterstützt die Verwendung von Vorlagen im
1357       OpenDocument-Format, wie es OpenOffice.org ab Version 2 erzeugt.
1358       kivitendo kann dabei sowohl neue OpenDocument-Dokumente als auch aus
1359       diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
1360       OpenDocument-Vorlagen zu aktivieren muss in der Datei
1361       <filename>config/kivitendo.conf</filename> die Variable
1362       <literal>opendocument</literal> im Abschnitt
1363       <literal>print_templates</literal> auf ‘<literal>1</literal>’ stehen.
1364       Dieses ist die Standardeinstellung.</para>
1365
1366       <para>Weiterhin muss in der Datei
1367       <filename>config/kivitendo.conf</filename> die Variable
1368       <literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf
1369       die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der
1370       Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen
1371       "UTF-8".</para>
1372
1373       <para>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
1374       weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
1375       OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
1376       neben OpenOffice.org ab Version 2 auch der “X virtual frame buffer”
1377       (xvfb) installiert werden. Bei Debian ist er im Paket “xvfb” enthalten.
1378       Andere Distributionen enthalten ihn in anderen Paketen.</para>
1379
1380       <para>Nach der Installation müssen in der Datei
1381       <filename>config/kivitendo.conf</filename> zwei weitere Variablen
1382       angepasst werden: <literal>openofficeorg_writer</literal> muss den
1383       vollständigen Pfad zur OpenOffice.org Writer-Anwendung enthalten.
1384       <literal>xvfb</literal> muss den Pfad zum “X virtual frame buffer”
1385       enthalten. Beide stehen im Abschnitt
1386       <literal>applications</literal>.</para>
1387
1388       <para>Zusätzlich gibt es zwei verschiedene Arten, wie kivitendo mit
1389       OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn die
1390       Variable <literal>$openofficeorg_daemon</literal> gesetzt ist, startet
1391       ein OpenOffice, das auch nach der Umwandlung des Dokumentes gestartet
1392       bleibt. Bei weiteren Umwandlungen wird dann diese laufende Instanz
1393       benutzt. Der Vorteil ist, dass die Zeit zur Umwandlung deutlich
1394       reduziert wird, weil nicht für jedes Dokument ein OpenOffice gestartet
1395       werden muss. Der Nachteil ist, dass diese Methode Python und die
1396       Python-UNO-Bindings benötigt, die Bestandteil von OpenOffice 2
1397       sind.</para>
1398
1399       <para>Ist <literal>$openofficeorg_daemon</literal> nicht gesetzt, so
1400       wird für jedes Dokument OpenOffice neu gestartet und die Konvertierung
1401       mit Hilfe eines Makros durchgeführt. Dieses Makro muss in der
1402       Dokumentenvorlage enthalten sein und
1403       “Standard.Conversion.ConvertSelfToPDF()” heißen. Die Beispielvorlage
1404       ‘<literal>templates/mastertemplates/German/invoice.odt</literal>’
1405       enthält ein solches Makro, das in jeder anderen Dokumentenvorlage
1406       ebenfalls enthalten sein muss.</para>
1407
1408       <para>Als letztes muss herausgefunden werden, welchen Namen
1409       OpenOffice.org Writer dem Verzeichnis mit den Benutzereinstellungen
1410       gibt. Unter Debian ist dies momentan
1411       <literal>~/.openoffice.org2</literal>. Sollte der Name bei Ihrer
1412       OpenOffice.org-Installation anders sein, so muss das Verzeichnis
1413       <literal>users/.openoffice.org2</literal> entsprechend umbenannt werden.
1414       Ist der Name z.B. einfach nur <literal>.openoffice</literal>, so wäre
1415       folgender Befehl auszuführen:</para>
1416
1417       <para><literal>mv users/.openoffice.org2
1418       users/.openoffice</literal></para>
1419
1420       <para>Dieses Verzeichnis, wie auch das komplette
1421       <literal>users</literal>-Verzeichnis, muss vom Webserver beschreibbar
1422       sein. Dieses wurde bereits erledigt (siehe <xref
1423       linkend="Manuelle-Installation-des-Programmpaketes" />), kann aber
1424       erneut überprüft werden, wenn die Konvertierung nach PDF
1425       fehlschlägt.</para>
1426     </sect1>
1427
1428     <sect1 id="config.eur">
1429       <title>Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
1430       EUR</title>
1431
1432       <sect2 id="config.eur.introduction"
1433              xreflabel="Einführung in die Konfiguration zur EUR">
1434         <title>Einführung</title>
1435
1436         <para>kivitendo besaß bis inklusive Version 2.6.3 einen
1437         Konfigurationsparameter namens <varname>eur</varname>, der sich in der
1438         Konfigurationsdatei <filename>config/lx_office.conf</filename>
1439         befand. Somit galt er für alle Mandanten, die in dieser Installation
1440         benutzt wurden.</para>
1441
1442         <para>Mit der nachfolgenden Version wurde der Parameter zum Einen in
1443         die Mandantendatenbank verschoben und dabei auch gleich in drei
1444         Einzelparameter aufgeteilt, mit denen sich das Verhalten genauer
1445         steuern lässt.</para>
1446       </sect2>
1447
1448       <sect2 id="config.eur.parameters"
1449              xreflabel="Konfigurationsparameter für EUR">
1450         <title>Konfigurationsparameter</title>
1451
1452         <para>Es gibt drei Parameter, die die Gewinnermittlungsart,
1453         Versteuerungsart und die Warenbuchungsmethode regeln:</para>
1454
1455         <variablelist>
1456           <varlistentry>
1457             <term><varname>profit_determination</varname></term>
1458
1459             <listitem>
1460               <para>Dieser Parameter legt die Berechnungsmethode für die
1461               Gewinnermittlung fest. Er enthält entweder
1462               <literal>balance</literal> für
1463               Betriebsvermögensvergleich/Bilanzierung oder
1464               <literal>income</literal> für die
1465               Einnahmen-Überschuss-Rechnung.</para>
1466             </listitem>
1467           </varlistentry>
1468
1469           <varlistentry>
1470             <term><varname>accounting_method</varname></term>
1471
1472             <listitem>
1473               <para>Dieser Parameter steuert die Buchungs- und
1474               Berechnungsmethoden für die Versteuerungsart. Er enthält
1475               entweder <literal>accrual</literal> für die Soll-Versteuerung
1476               oder <literal>cash</literal> für die Ist-Versteuerung.</para>
1477             </listitem>
1478           </varlistentry>
1479
1480           <varlistentry>
1481             <term><varname>inventory_system</varname></term>
1482
1483             <listitem>
1484               <para>Dieser Parameter legt die Warenbuchungsmethode fest. Er
1485               enthält entweder <literal>perpetual</literal> für die
1486               Bestandsmethode oder <literal>periodic</literal> für die
1487               Aufwandsmethode.</para>
1488             </listitem>
1489           </varlistentry>
1490         </variablelist>
1491
1492         <para>Zum Vergleich der Funktionalität bis und nach 2.6.3:
1493         <varname>eur</varname> = 1 bedeutete Einnahmen-Überschuss-Rechnung,
1494         Ist-Versteuerung und Aufwandsmethode. <varname>eur</varname> = 0
1495         bedeutete hingegen Bilanzierung, Soll-Versteuerung und
1496         Bestandsmethode.</para>
1497
1498         <para>Die Konfiguration "<varname>eur</varname>" unter
1499         <varname>[system]</varname> in der <link
1500         linkend="config.config-file">Konfigurationsdatei</link>
1501         <filename>config/kivitendo.conf</filename> wird nun nicht mehr
1502         benötigt und kann entfernt werden. Dies muss manuell geschehen.</para>
1503       </sect2>
1504
1505       <sect2 id="config.eur.setting-parameters">
1506         <title>Festlegen der Parameter</title>
1507
1508         <para>Beim Anlegen eines neuen Mandanten bzw. einer neuen Datenbank in
1509         der Admininstration können diese Optionen nun unabhängig voneinander
1510         eingestellt werden.</para>
1511
1512         <para>Beim Upgrade bestehender Mandanten wird eur ausgelesen und die
1513         Variablen werden so gesetzt, daß sich an der Funktionalität nichts
1514         ändert.</para>
1515
1516         <para>Die aktuelle Konfiguration wird unter Nummernkreise und
1517         Standardkonten unter dem neuen Punkt "Einstellungen" angezeigt
1518         (read-only). Eine spätere Änderung ist für einen bestehenden Mandanten
1519         nicht mehr möglich. Dies war auch vorher nicht möglich, bzw.
1520         vorhandene Daten wurden so belassen und haben damit die Ergebnisse
1521         verfälscht.</para>
1522       </sect2>
1523
1524       <sect2 id="config.eur.inventory-system-perpetual">
1525         <title>Bemerkungen zu Bestandsmethode</title>
1526
1527         <para>Die Bestandsmethode ist eigentlich eine sehr elegante Methode,
1528         funktioniert in kivitendo aber nur unter bestimmten Bedingungen:
1529         Voraussetzung ist, daß auch immer alle Einkaufsrechnungen gepflegt
1530         werden, und man beim Jahreswechsel nicht mit einer leeren Datenbank
1531         anfängt, da bei jedem Verkauf anhand der gesamten Rechnungshistorie
1532         der Einkaufswert der Ware nach dem FIFO-Prinzip aus den
1533         Einkaufsrechnungen berechnet wird.</para>
1534
1535         <para>Die Bestandsmethode kann vom Prinzip her also nur funktioneren,
1536         wenn man mit den Buchungen bei Null anfängt, und man kann auch nicht
1537         im laufenden Betrieb von der Aufwandsmethode zur Bestandsmethode
1538         wechseln.</para>
1539       </sect2>
1540
1541       <sect2 id="config.eur.knonw-issues">
1542         <title>Bekannte Probleme</title>
1543
1544         <para>Bei bestimmten Berichten kann man derzeit noch inviduell
1545         einstellen, ob man nach Ist- oder Sollversteuerung auswertet, und es
1546         werden im Code Variablen wie $accrual oder $cash gesetzt. Diese
1547         Codestellen wurden noch nicht angepasst, sondern nur die, wo bisher
1548         die Konfigurationsvariable
1549         <varname>$::lx_office_conf{system}-&gt;{eur}</varname> ausgewertet
1550         wurde.</para>
1551
1552         <para>Es fehlen Hilfetext beim Neuanlegen eines Mandanten, was die
1553         Optionen bewirken, z.B. mit zwei Standardfällen.</para>
1554       </sect2>
1555     </sect1>
1556
1557     <sect1 id="config.skr04-update-3804">
1558       <title>SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</title>
1559
1560       <sect2 id="config.skr04-update-3804.introduction">
1561         <title>Einführung</title>
1562
1563         <para>Die Umsatzsteuerumstellung auf 19% für SKR04 für die
1564         Steuerschlüssel "EU ohne USt-ID Nummer" ist erst 2010 erfolgt.
1565         kivitendo beinhaltet ein Upgradeskript, das das Konto 3804 automatisch
1566         erstellt und die Steuereinstellungen korrekt einstellt. Hat der
1567         Benutzer aber schon selber das Konto 3804 angelegt, oder gab es schon
1568         Buchungen im Zeitraum nach dem 01.01.2007 auf das Konto 3803, wird das
1569         Upgradeskript vorsichtshalber nicht ausgeführt, da der Benutzer sich
1570         vielleicht schon selbst geholfen hat und mit seinen Änderungen
1571         zufrieden ist. Die korrekten Einstellungen kann man aber auch per Hand
1572         ausführen. Nachfolgend werden die entsprechenden Schritte anhand von
1573         Screenshots dargestellt.</para>
1574
1575         <para>Für den Fall, daß Buchungen mit der Steuerschlüssel "EU ohne
1576         USt.-IdNr." nach dem 01.01.2007 erfolgt sind, ist davon auszugehen,
1577         dass diese mit dem alten Umsatzsteuersatz von 16% gebucht worden sind,
1578         und diese Buchungen sollten entsprechend kontrolliert werden.</para>
1579       </sect2>
1580
1581       <sect2 id="config.skr04-update-3804.create-chart">
1582         <title>Konto 3804 manuell anlegen</title>
1583
1584         <para>Die folgenden Schritte sind notwendig, um das Konto manuell
1585         anzulegen und zu konfigurieren. Zuerst wird in
1586         <guimenu>System</guimenu> -&gt;
1587         <guisubmenu>Kontenübersicht</guisubmenu> -&gt; <guimenuitem>Konto
1588         erfassen</guimenuitem> das Konto angelegt.</para>
1589
1590         <screenshot>
1591           <screeninfo>Konto 3804 erfassen</screeninfo>
1592
1593           <mediaobject>
1594             <imageobject>
1595               <imagedata fileref="images/skr04-update-3804/konto3804.png" />
1596             </imageobject>
1597           </mediaobject>
1598         </screenshot>
1599
1600         <para>
1601          Als Zweites muss Steuergruppe 13 für Konto 3803 angepasst werden. Dazu unter <guimenu>System</guimenu> -&gt;
1602          <guisubmenu>Steuern</guisubmenu> -&gt; <guimenuitem>Bearbeiten</guimenuitem> den Eintrag mit Steuerschlüssel 13 auswählen und ihn
1603          wie im folgenden Screenshot angezeigt anpassen.
1604         </para>
1605
1606         <screenshot>
1607           <screeninfo>Steuerschlüssel 13 für 3803 (16%) anpassen</screeninfo>
1608
1609           <mediaobject>
1610             <imageobject>
1611               <imagedata fileref="images/skr04-update-3804/steuer3803.png" />
1612             </imageobject>
1613           </mediaobject>
1614         </screenshot>
1615
1616         <para>
1617          Als Drittes wird ein neuer Eintrag mit Steuerschlüssel 13 für Konto 3804 (19%) angelegt. Dazu unter <guimenu>System</guimenu> -&gt;
1618          <guisubmenu>Steuern</guisubmenu> -&gt; <guimenuitem>Erfassen</guimenuitem> auswählen und die Werte aus dem Screenshot übernehmen.
1619         </para>
1620
1621         <screenshot>
1622           <screeninfo>Steuerschlüssel 13 für 3804 (19%) anlegen</screeninfo>
1623
1624           <mediaobject>
1625             <imageobject>
1626               <imagedata fileref="images/skr04-update-3804/steuer3804.png" />
1627             </imageobject>
1628           </mediaobject>
1629         </screenshot>
1630
1631         <para>
1632          Als Nächstes sind alle Konten anzupassen, die als Steuerautomatikkonto die 3803 haben, sodass sie ab dem 1.1.2007 auch
1633          Steuerautomatik auf 3804 bekommen. Dies betrifft in der Standardkonfiguration die Konten 4315 und 4726. Als Beispiel für 4315
1634          müssen Sie dazu unter <guimenu>System</guimenu> -&gt; <guisubmenu>Kontenübersicht</guisubmenu> -&gt; <guimenuitem>Konten
1635          anzeigen</guimenuitem> das Konto 4315 anklicken und die Einstellungen wie im Screenshot gezeigt vornehmen.
1636         </para>
1637
1638         <screenshot>
1639           <screeninfo>Konto 4315 anpassen</screeninfo>
1640
1641           <mediaobject>
1642             <imageobject>
1643               <imagedata fileref="images/skr04-update-3804/konto4315.png" />
1644             </imageobject>
1645           </mediaobject>
1646         </screenshot>
1647
1648         <para>
1649          Als Letztes sollte die Steuerliste unter <guimenu>System</guimenu> -&gt; <guisubmenu>Steuern</guisubmenu> -&gt;
1650          <guimenuitem>Bearbeiten</guimenuitem> kontrolliert werden. Zum Vergleich der Screenshot.
1651         </para>
1652
1653         <screenshot>
1654           <screeninfo>Steuerliste vergleichen</screeninfo>
1655
1656           <mediaobject>
1657             <imageobject>
1658               <imagedata fileref="images/skr04-update-3804/steuerliste.png" />
1659             </imageobject>
1660           </mediaobject>
1661         </screenshot>
1662       </sect2>
1663     </sect1>
1664
1665     <sect1 id="kivitendo-ERP-verwenden">
1666       <title>kivitendo ERP verwenden</title>
1667
1668       <para>Nach erfolgreicher Installation ist der Loginbildschirm unter
1669       folgender URL erreichbar:</para>
1670
1671       <para><ulink
1672       url="http://localhost/kivitendo-erp/login.pl">http://localhost/kivitendo-erp/login.pl</ulink></para>
1673
1674       <para>Die Administrationsseite erreichen Sie unter:</para>
1675
1676       <para><ulink
1677       url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
1678     </sect1>
1679   </chapter>
1680
1681   <chapter id="features" xreflabel="Features und Funktionen">
1682     <title>Features und Funktionen</title>
1683
1684     <sect1 id="features.periodic-invoices"
1685            xreflabel="Wiedekehrende Rechnungen">
1686       <title>Wiederkehrende Rechnungen</title>
1687
1688       <sect2 id="features.periodic-invoices.introduction"
1689              xreflabel="Einführung in wiederkehrende Rechnungen">
1690         <title>Einführung</title>
1691
1692         <para>Wiederkehrende Rechnungen werden als normale Aufträge definiert
1693         und konfiguriert, mit allen dazugehörigen Kunden- und Artikelangaben.
1694         Die konfigurierten Aufträge werden später automatisch in Rechnungen
1695         umgewandelt, so als ob man den Workflow benutzen würde, und auch die
1696         Auftragsnummer wird übernommen, sodass alle wiederkehrenden
1697         Rechnungen, die aus einem Auftrag erstellt wurden, später leicht
1698         wiederzufinden sind.</para>
1699       </sect2>
1700
1701       <sect2 id="features.periodic-invoices.configuration"
1702              xreflabel="Konfiguration von wiederkehrenden Rechnungen">
1703         <title>Konfiguration</title>
1704
1705         <para>Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren,
1706         findet sich beim Bearbeiten des Auftrags ein neuer Knopf
1707         "Konfigurieren", der ein neues Fenster öffnet, in dem man die nötigen
1708         Parameter einstellen kann. Hinter dem Knopf wird außerdem noch
1709         angezeigt, ob der Auftrag als wiederkehrende Rechnung konfiguriert ist
1710         oder nicht.</para>
1711
1712         <para>Folgende Parameter kann man konfigurieren:</para>
1713
1714         <variablelist>
1715           <varlistentry>
1716             <term>Status</term>
1717
1718             <listitem>
1719               <para>Bei aktiven Rechnungen wird automatisch eine Rechnung
1720               erstellt, wenn die Periodizität erreicht ist (z.B. Anfang eines
1721               neuen Monats).</para>
1722
1723               <para>Ist ein Auftrag nicht aktiv, so werden für ihn auch keine
1724               wiederkehrenden Rechnungen erzeugt. Stellt man nach längerer
1725               nicht-aktiver Zeit einen Auftrag wieder auf aktiv, wird beim
1726               nächsten Periodenwechsel für alle Perioden, seit der letzten
1727               aktiven Periode, jeweils eine Rechnung erstellt. Möchte man dies
1728               verhindern, muss man vorher das Startdatum neu setzen.</para>
1729
1730               <para>Für gekündigte Aufträge werden nie mehr Rechnungen
1731               erstellt. Man kann sich diese Aufträge aber gesondert in den
1732               Berichten anzeigen lassen.</para>
1733             </listitem>
1734           </varlistentry>
1735
1736           <varlistentry>
1737             <term>Periodizität</term>
1738
1739             <listitem>
1740               <para>Ob monatlich, quartalsweise oder jährlich auf neue
1741               Rechnungen überprüft werden soll. Für jede Periode seit dem
1742               Startdatum wird überprüft, ob für die Periode (beginnend immer
1743               mit dem ersten Tag der Periode) schon eine Rechnung erstellt
1744               wurde. Unter Umständen können bei einem Startdatum in der
1745               Vergangenheit gleich mehrere Rechnungen erstellt werden.</para>
1746             </listitem>
1747           </varlistentry>
1748
1749           <varlistentry>
1750             <term>Buchen auf</term>
1751
1752             <listitem>
1753               <para>Das Forderungskonto, in der Regel "Forderungen aus
1754               Lieferungen und Leistungen". Das Gegenkonto ergibt sich aus den
1755               Buchungsgruppen der betreffenden Waren.</para>
1756             </listitem>
1757           </varlistentry>
1758
1759           <varlistentry>
1760             <term>Startdatum</term>
1761
1762             <listitem>
1763               <para>ab welchem Datum auf Rechnungserstellung geprüft werden
1764               soll</para>
1765             </listitem>
1766           </varlistentry>
1767
1768           <varlistentry>
1769             <term>Enddatum</term>
1770
1771             <listitem>
1772               <para>ab wann keine Rechnungen mehr erstellt werden
1773               sollen</para>
1774             </listitem>
1775           </varlistentry>
1776
1777           <varlistentry>
1778             <term>Automatische Verlängerung um x Monate</term>
1779
1780             <listitem>
1781               <para>Sollen die wiederkehrenden Rechnungen bei Erreichen des
1782               eingetragenen Enddatums weiterhin erstellt werden, so kann man
1783               hier die Anzahl der Monate eingeben, um die das Enddatum
1784               automatisch nach hinten geschoben wird.</para>
1785             </listitem>
1786           </varlistentry>
1787
1788           <varlistentry>
1789             <term>Drucken</term>
1790
1791             <listitem>
1792               <para>Sind Drucker konfiguriert, so kann man sich die erstellten
1793               Rechnungen auch gleich ausdrucken lassen.</para>
1794             </listitem>
1795           </varlistentry>
1796         </variablelist>
1797
1798         <para>Nach Erstellung der Rechnungen kann eine E-Mail mit
1799         Informationen zu den erstellten Rechnungen verschickt werden.
1800         Konfiguriert wird dies in der <link
1801         linkend="config.config-file.sections-parameters">Konfigurationsdatei</link>
1802         <filename>config/kivitendo.conf</filename> im Abschnitt
1803         <varname>[periodic_invoices]</varname>.</para>
1804       </sect2>
1805
1806       <sect2 id="features.periodic-invoices.reports">
1807         <title>Auflisten</title>
1808
1809         <para>Unter Verkauf-&gt;Berichte-&gt;Aufträge finden sich zwei neue
1810         Checkboxen, "Wiederkehrende Rechnungen aktiv" und "Wiederkehrende
1811         Rechnungen inaktiv", mit denen man sich einen Überglick über die
1812         wiederkehrenden Rechnungen verschaffen kann.</para>
1813       </sect2>
1814
1815       <sect2 id="features.periodic-invoices.task-server">
1816         <title>Erzeugung der eigentlichen Rechnungen</title>
1817
1818         <para>Die zeitliche und periodische Überprüfung, ob eine
1819         wiederkehrende Rechnung automatisch erstellt werden soll, geschieht
1820         durch den <link linkend="config.task-server">Taskserver</link>, einen
1821         externen Dienst, der automatisch beim Start des Servers gestartet
1822         werden sollte.</para>
1823       </sect2>
1824
1825       <sect2 id="features.periodic-invoices.create-for-current-month">
1826         <title>Erste Rechnung für aktuellen Monat erstellen</title>
1827
1828         <para>Will man im laufenden Monat eine monatlich wiederkehrende
1829         Rechnung inkl. des laufenden Monats starten, stellt man das Startdatum
1830         auf den Monatsanfang und wartet ein paar Minuten, bis der Taskserver
1831         den neu konfigurieren Auftrag erkennt und daraus eine Rechnung
1832         generiert hat. Alternativ setzt man das Startdatum auf den
1833         Monatsersten des Folgemonats und erstellt die erste Rechnung direkt
1834         manuell über den Workflow.</para>
1835       </sect2>
1836     </sect1>
1837
1838     <sect1 id="dokumentenvorlagen-und-variablen">
1839       <title>Dokumentenvorlagen und verfügbare Variablen</title>
1840
1841       <sect2 id="dokumentenvorlagen-und-variablen.einführung">
1842         <title>Einführung</title>
1843
1844         <para>Dies ist eine Auflistung der Standard-Dokumentenvorlagen und
1845         aller zur Bearbeitung verfügbaren Variablen. Eine Variable wird in
1846         einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form
1847         <function>&lt;%variablenname%&gt;</function> verwendet wird. Für
1848         LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
1849         (siehe <xref
1850         linkend="dokumentenvorlagen-und-variablen.tag-style" />).</para>
1851
1852         <para>Früher wurde hier nur über LaTeX gesprochen. Inzwischen
1853         unterstützt kivitendo aber auch OpenDocument-Vorlagen. Sofern es nicht
1854         ausdrücklich eingeschränkt wird, gilt das im Folgenden gesagte für
1855         alle Vorlagenarten.</para>
1856
1857         <para>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
1858         verfügbar als hier aufgelistet werden. Die meisten davon können
1859         allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
1860         werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann
1861         diese wie folgt erhalten werden:</para>
1862
1863         <itemizedlist>
1864           <listitem>
1865             <para><filename>SL/Form.pm</filename> öffnen und am Anfang die
1866             Zeile "<command>use Data::Dumper;</command>" einfügen.</para>
1867           </listitem>
1868
1869           <listitem>
1870             <para>In <filename>Form.pm</filename> die Funktion
1871             <function>parse_template</function> suchen und hier die Zeile
1872             <command>print(STDERR Dumper($self));</command> einfügen.</para>
1873           </listitem>
1874
1875           <listitem>
1876             <para>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
1877             ein PDF für eine Rechnung erzeugen.</para>
1878           </listitem>
1879
1880           <listitem>
1881             <para>Im <filename>error.log</filename> Apache steht die Ausgabe
1882             der Variablen <varname>$self</varname> in der Form <varname>'key'
1883             =&gt; 'value',</varname>. Alle <varname>key</varname>s sind
1884             verfügbar.</para>
1885           </listitem>
1886         </itemizedlist>
1887       </sect2>
1888
1889       <sect2 id="dokumentenvorlagen-und-variablen.variablen-ausgeben">
1890         <title>Variablen ausgeben</title>
1891
1892         <para>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
1893         Tags geschrieben werden, also z.B.
1894         <varname>&lt;%variablenname%&gt;</varname>.</para>
1895
1896         <para>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
1897         die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
1898         <varname>&lt;%variablenname FLAG1 FLAG2%&gt;</varname>. Momentan
1899         werden die folgenden Flags unterstützt:</para>
1900
1901         <itemizedlist>
1902           <listitem>
1903             <para><option>NOFORMAT</option> gilt nur für Zahlenwerte und gibt
1904             den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
1905             mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
1906             damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</para>
1907           </listitem>
1908
1909           <listitem>
1910             <para><option>NOESCAPE</option> unterdrückt das Escapen von
1911             Sonderzeichen für die Vorlagensprache. Wenn also in einer
1912             Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
1913             auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
1914             ist dieses Flag sinnvoll.</para>
1915           </listitem>
1916         </itemizedlist>
1917
1918         <para>Beispiel:</para>
1919
1920         <programlisting>&lt;%quototal NOFORMAT%&gt;</programlisting>
1921       </sect2>
1922
1923       <sect2 id="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">
1924         <title>Verwendung in Druckbefehlen</title>
1925
1926         <para>In der Admininstration können Drucker definiert werden. Auch im
1927         dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
1928         und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
1929         den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
1930         <function>`...`</function> nicht zu unerwünschtem Verhalten
1931         führen.</para>
1932
1933         <para>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
1934         für das die Telefonnummer eines Ansprechpartners als Teil der
1935         Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
1936         z.B. wie folgt aussehen:</para>
1937
1938         <programlisting>send_fax --number &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</programlisting>
1939       </sect2>
1940
1941       <sect2 id="dokumentenvorlagen-und-variablen.tag-style"
1942              xreflabel="Anfang und Ende der Tags verändern">
1943         <title>Anfang und Ende der Tags verändern</title>
1944
1945         <para>Der Standardstil für Tags sieht vor, dass ein Tag mit dem
1946         Kleinerzeichen und einem Prozentzeichen beginnt und mit dem
1947         Prozentzeichen und dem Größerzeichen endet, beispielsweise
1948         <function>&lt;%customer%&gt;</function>. Da diese Form aber z.B. in
1949         LaTeX zu Problemen führen kann, weil das Prozentzeichen dort
1950         Kommentare einleitet, kann pro HTML- oder LaTeX-Dokumentenvorlage der
1951         Stil umgestellt werden.</para>
1952
1953         <para>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
1954         Format gültigen Kommentarzeichen anfangen, dann
1955         <function>config:</function> enthalten, die entsprechende Option
1956         setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
1957         enden. Beispiel für LaTeX:</para>
1958
1959         <programlisting>% config: tag-style=($ $)</programlisting>
1960
1961         <para>Dies würde kivitendo dazu veranlassen, Variablen zu ersetzen,
1962         wenn sie wie folgt aussehen: <function>($customer$)</function>. Das
1963         äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</para>
1964
1965         <programlisting>&lt;!-- config: tag-style=($ $) --&gt;</programlisting>
1966       </sect2>
1967
1968       <sect2 id="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">
1969         <title>Zuordnung von den Dateinamen zu den Funktionen</title>
1970
1971         <para>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
1972         welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
1973         "<filename>.ext</filename>" geeignet zu ersetzen:
1974         "<filename>.tex</filename>" für LaTeX-Vorlagen und
1975         "<filename>.odt</filename>" für OpenDocument-Vorlagen.</para>
1976
1977         <variablelist>
1978           <varlistentry>
1979             <term><filename>bin_list.ext</filename></term>
1980
1981             <listitem>
1982               <para>Lagerliste</para>
1983             </listitem>
1984           </varlistentry>
1985
1986           <varlistentry>
1987             <term><filename>check.ext</filename></term>
1988
1989             <listitem>
1990               <para>?</para>
1991             </listitem>
1992           </varlistentry>
1993
1994           <varlistentry>
1995             <term><filename>invoice.ext</filename></term>
1996
1997             <listitem>
1998               <para>Rechnung</para>
1999             </listitem>
2000           </varlistentry>
2001
2002           <varlistentry>
2003             <term><filename>packing_list.ext</filename></term>
2004
2005             <listitem>
2006               <para>Packliste</para>
2007             </listitem>
2008           </varlistentry>
2009
2010           <varlistentry>
2011             <term><filename>pick_list.ext</filename></term>
2012
2013             <listitem>
2014               <para>Sammelliste</para>
2015             </listitem>
2016           </varlistentry>
2017
2018           <varlistentry>
2019             <term><filename>purchase_delivery_order.ext</filename></term>
2020
2021             <listitem>
2022               <para>Lieferschein (Einkauf)</para>
2023             </listitem>
2024           </varlistentry>
2025
2026           <varlistentry>
2027             <term><filename>purcharse_order.ext</filename></term>
2028
2029             <listitem>
2030               <para>Bestellung an Lieferanten</para>
2031             </listitem>
2032           </varlistentry>
2033
2034           <varlistentry>
2035             <term><filename>request_quotation.ext</filename></term>
2036
2037             <listitem>
2038               <para>Anfrage an Lieferanten</para>
2039             </listitem>
2040           </varlistentry>
2041
2042           <varlistentry>
2043             <term><filename>sales_delivery_order.ext</filename></term>
2044
2045             <listitem>
2046               <para>Lieferschein (Verkauf)</para>
2047             </listitem>
2048           </varlistentry>
2049
2050           <varlistentry>
2051             <term><filename>sales_order.ext</filename></term>
2052
2053             <listitem>
2054               <para>Bestellung</para>
2055             </listitem>
2056           </varlistentry>
2057
2058           <varlistentry>
2059             <term><filename>sales_quotation.ext</filename></term>
2060
2061             <listitem>
2062               <para>Angebot an Kunden</para>
2063             </listitem>
2064           </varlistentry>
2065
2066           <varlistentry>
2067             <term><filename>zahlungserinnerung.ext</filename></term>
2068
2069             <listitem>
2070               <para>Mahnung (Dateiname im Programm konfigurierbar)</para>
2071             </listitem>
2072           </varlistentry>
2073
2074           <varlistentry>
2075             <term><filename>zahlungserinnerung_invoice.ext</filename></term>
2076
2077             <listitem>
2078               <para>Rechnung über Mahngebühren (Dateiname im Programm
2079               konfigurierbar)</para>
2080             </listitem>
2081           </varlistentry>
2082         </variablelist>
2083       </sect2>
2084
2085       <sect2 id="dokumentenvorlagen-und-variablen.dateinamen-erweitert">
2086         <title>Sprache, Drucker und E-Mail</title>
2087
2088         <para>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
2089         eingearbeitet. So wird aus der Vorlage
2090         <filename>sales_order.ext</filename> bei Sprache
2091         <function>de</function> und Druckerkürzel <function>lpr2</function>
2092         der Vorlagenname <filename>sales_order_de_lpr2.ext</filename>.
2093         Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
2094         bekommen dann noch das Kürzel <filename>_email</filename>, der
2095         vollständige Vorlagenname wäre dann
2096         <filename>sales_order_email_de_lpr2.ext</filename>. In allen Fällen
2097         kann eine Standarddatei <filename>default.ext</filename> hinterlegt
2098         werden. Diese wird verwendet, wenn keine der anderen Varianten
2099         gefunden wird.</para>
2100
2101         <para>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
2102         der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
2103         verschickt wird, ist:</para>
2104
2105         <orderedlist>
2106           <listitem>
2107             <para><filename>sales_order_email_de_lpr2.tex</filename></para>
2108           </listitem>
2109
2110           <listitem>
2111             <para><filename>sales_order_de_lpr2.tex</filename></para>
2112           </listitem>
2113
2114           <listitem>
2115             <para><filename>sales_order.tex</filename></para>
2116           </listitem>
2117
2118           <listitem>
2119             <para><filename>default.tex</filename></para>
2120           </listitem>
2121         </orderedlist>
2122
2123         <para>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
2124         Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
2125         siehe dazu <xref
2126         linkend="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta" />.</para>
2127       </sect2>
2128
2129       <sect2 id="dokumentenvorlagen-und-variablen.allgemeine-variablen">
2130         <title>Allgemeine Variablen, die in allen Vorlagen vorhanden
2131         sind</title>
2132
2133         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"
2134                xreflabel="Metainformationen zur angeforderten Vorlage">
2135           <title>Metainformationen zur angeforderten Vorlage</title>
2136
2137           <para>Diese Variablen liefern Informationen darüber welche Variante
2138           einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
2139           Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
2140           Formulare einbinden möchten.</para>
2141
2142           <variablelist>
2143             <varlistentry>
2144               <term><varname>template_meta.formname</varname></term>
2145
2146               <listitem>
2147                 <para>Basisname der Vorlage. Identisch mit der <link
2148                 linkend="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">Zurordnung
2149                 zu den Dateinamen</link> ohne die Erweiterung. Ein
2150                 Verkaufsauftrag enthält hier
2151                 <constant>sales_order</constant>.</para>
2152               </listitem>
2153             </varlistentry>
2154
2155             <varlistentry>
2156               <term><varname>template_meta.language.description</varname></term>
2157
2158               <listitem>
2159                 <para>Beschreibung der verwendeten Sprache</para>
2160               </listitem>
2161             </varlistentry>
2162
2163             <varlistentry>
2164               <term><varname>template_meta.language.template_code</varname></term>
2165
2166               <listitem>
2167                 <para>Vorlagenürzel der verwendeten Sprache, identisch mit dem
2168                 Kürzel das im Dateinamen verwendetet wird.</para>
2169               </listitem>
2170             </varlistentry>
2171
2172             <varlistentry>
2173               <term><varname>template_meta.language.output_numberformat</varname></term>
2174
2175               <listitem>
2176                 <para>Zahlenformat der verwendeten Sprache in der Form
2177                 "<constant>1.000,00</constant>". Experimentell! Nur
2178                 interessant für Vorlagen die mit unformatierten Werten
2179                 arbeiten.</para>
2180               </listitem>
2181             </varlistentry>
2182
2183             <varlistentry>
2184               <term><varname>template_meta.language.output_dateformat</varname></term>
2185
2186               <listitem>
2187                 <para>Datumsformat der verwendeten Sprache in der Form
2188                 "<constant>dd.mm.yyyy</constant>". Experimentell! Nur
2189                 interessant für Vorlagen die mit unformatierten Werten
2190                 arbeiten.</para>
2191               </listitem>
2192             </varlistentry>
2193
2194             <varlistentry>
2195               <term><varname>template_meta.format</varname></term>
2196
2197               <listitem>
2198                 <para>Das angeforderte Format. Kann im Moment die Werte
2199                 <constant>pdf</constant>, <constant>postscript</constant>,
2200                 <constant>html</constant>, <constant>opendocument</constant>,
2201                 <constant>opendocument_pdf</constant> und
2202                 <constant>excel</constant> enthalten.</para>
2203               </listitem>
2204             </varlistentry>
2205
2206             <varlistentry>
2207               <term><varname>template_meta.extension</varname></term>
2208
2209               <listitem>
2210                 <para>Dateierweiterung, wie im Dateinamen. Wird aus
2211                 <constant>format</constant> entschieden.</para>
2212               </listitem>
2213             </varlistentry>
2214
2215             <varlistentry>
2216               <term><varname>template_meta.media</varname></term>
2217
2218               <listitem>
2219                 <para>Ausgabemedium. Kann zur Zeit die Werte
2220                 <constant>screen</constant> für Bildschirm,
2221                 <constant>email</constant> für E-Mmail (triggert das
2222                 <constant>_email</constant> Kürzel im Dateinamen),
2223                 <constant>printer</constant> für Drucker, und
2224                 <constant>queue</constant> für Warteschlange enthalten.</para>
2225               </listitem>
2226             </varlistentry>
2227
2228             <varlistentry>
2229               <term><varname>template_meta.printer.description</varname></term>
2230
2231               <listitem>
2232                 <para>Beschreibung des ausgewählten Druckers</para>
2233               </listitem>
2234             </varlistentry>
2235
2236             <varlistentry>
2237               <term><varname>template_meta.printer.template_code</varname></term>
2238
2239               <listitem>
2240                 <para>Vorlagenürzel des ausgewählten Druckers, identisch mit
2241                 dem Kürzel das im Dateinamen verwendetet wird.</para>
2242               </listitem>
2243             </varlistentry>
2244
2245             <varlistentry>
2246               <term><varname>template_meta.tmpfile</varname></term>
2247
2248               <listitem>
2249                 <para>Datei-Prefix für temporäre Dateien.</para>
2250               </listitem>
2251             </varlistentry>
2252           </variablelist>
2253         </sect3>
2254
2255         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.kunden-lieferanten">
2256           <title>Stammdaten von Kunden und Lieferanten</title>
2257
2258           <variablelist>
2259             <varlistentry>
2260               <term><varname>account_number</varname></term>
2261
2262               <listitem>
2263                 <para>Kontonummer</para>
2264               </listitem>
2265             </varlistentry>
2266
2267             <varlistentry>
2268               <term><varname>bank</varname></term>
2269
2270               <listitem>
2271                 <para>Name der Bank</para>
2272               </listitem>
2273             </varlistentry>
2274
2275             <varlistentry>
2276               <term><varname>bank_code</varname></term>
2277
2278               <listitem>
2279                 <para>Bankleitzahl</para>
2280               </listitem>
2281             </varlistentry>
2282
2283             <varlistentry>
2284               <term><varname>bic</varname></term>
2285
2286               <listitem>
2287                 <para>Bank-Identifikations-Code (Bank Identifier Code,
2288                 BIC)</para>
2289               </listitem>
2290             </varlistentry>
2291
2292             <varlistentry>
2293               <term><varname>business</varname></term>
2294
2295               <listitem>
2296                 <para>Kunden-/Lieferantentyp</para>
2297               </listitem>
2298             </varlistentry>
2299
2300             <varlistentry>
2301               <term><varname>city</varname></term>
2302
2303               <listitem>
2304                 <para>Stadt</para>
2305               </listitem>
2306             </varlistentry>
2307
2308             <varlistentry>
2309               <term><varname>contact</varname></term>
2310
2311               <listitem>
2312                 <para>Kontakt</para>
2313               </listitem>
2314             </varlistentry>
2315
2316             <varlistentry>
2317               <term><varname>country</varname></term>
2318
2319               <listitem>
2320                 <para>Land</para>
2321               </listitem>
2322             </varlistentry>
2323
2324             <varlistentry>
2325               <term><varname>cp_email</varname></term>
2326
2327               <listitem>
2328                 <para>Email des Ansprechpartners</para>
2329               </listitem>
2330             </varlistentry>
2331
2332             <varlistentry>
2333               <term><varname>cp_givenname</varname></term>
2334
2335               <listitem>
2336                 <para>Vorname des Ansprechpartners</para>
2337               </listitem>
2338             </varlistentry>
2339
2340             <varlistentry>
2341               <term><varname>cp_greeting</varname></term>
2342
2343               <listitem>
2344                 <para>Anrede des Ansprechpartners</para>
2345               </listitem>
2346             </varlistentry>
2347
2348             <varlistentry>
2349               <term><varname>cp_name</varname></term>
2350
2351               <listitem>
2352                 <para>Name des Ansprechpartners</para>
2353               </listitem>
2354             </varlistentry>
2355
2356             <varlistentry>
2357               <term><varname>cp_phone1</varname></term>
2358
2359               <listitem>
2360                 <para>Telefonnummer 1 des Ansprechpartners</para>
2361               </listitem>
2362             </varlistentry>
2363
2364             <varlistentry>
2365               <term><varname>cp_phone2</varname></term>
2366
2367               <listitem>
2368                 <para>Telefonnummer 2 des Ansprechpartners</para>
2369               </listitem>
2370             </varlistentry>
2371
2372             <varlistentry>
2373               <term><varname>cp_title</varname></term>
2374
2375               <listitem>
2376                 <para>Titel des Ansprechpartners</para>
2377               </listitem>
2378             </varlistentry>
2379
2380             <varlistentry>
2381               <term><varname>creditlimit</varname></term>
2382
2383               <listitem>
2384                 <para>Kreditlimit</para>
2385               </listitem>
2386             </varlistentry>
2387
2388             <varlistentry>
2389               <term><varname>customeremail</varname></term>
2390
2391               <listitem>
2392                 <para>Email des Kunden; nur für Kunden</para>
2393               </listitem>
2394             </varlistentry>
2395
2396             <varlistentry>
2397               <term><varname>customerfax</varname></term>
2398
2399               <listitem>
2400                 <para>Faxnummer des Kunden; nur für Kunden</para>
2401               </listitem>
2402             </varlistentry>
2403
2404             <varlistentry>
2405               <term><varname>customernotes</varname></term>
2406
2407               <listitem>
2408                 <para>Bemerkungen beim Kunden; nur für Kunden</para>
2409               </listitem>
2410             </varlistentry>
2411
2412             <varlistentry>
2413               <term><varname>customernumber</varname></term>
2414
2415               <listitem>
2416                 <para>Kundennummer; nur für Kunden</para>
2417               </listitem>
2418             </varlistentry>
2419
2420             <varlistentry>
2421               <term><varname>customerphone</varname></term>
2422
2423               <listitem>
2424                 <para>Telefonnummer des Kunden; nur für Kunden</para>
2425               </listitem>
2426             </varlistentry>
2427
2428             <varlistentry>
2429               <term><varname>discount</varname></term>
2430
2431               <listitem>
2432                 <para>Rabatt</para>
2433               </listitem>
2434             </varlistentry>
2435
2436             <varlistentry>
2437               <term><varname>email</varname></term>
2438
2439               <listitem>
2440                 <para>Emailadresse</para>
2441               </listitem>
2442             </varlistentry>
2443
2444             <varlistentry>
2445               <term><varname>fax</varname></term>
2446
2447               <listitem>
2448                 <para>Faxnummer</para>
2449               </listitem>
2450             </varlistentry>
2451
2452             <varlistentry>
2453               <term><varname>homepage</varname></term>
2454
2455               <listitem>
2456                 <para>Homepage</para>
2457               </listitem>
2458             </varlistentry>
2459
2460             <varlistentry>
2461               <term><varname>iban</varname></term>
2462
2463               <listitem>
2464                 <para>Internationale Kontonummer (International Bank Account
2465                 Number, IBAN)</para>
2466               </listitem>
2467             </varlistentry>
2468
2469             <varlistentry>
2470               <term><varname>language</varname></term>
2471
2472               <listitem>
2473                 <para>Sprache</para>
2474               </listitem>
2475             </varlistentry>
2476
2477             <varlistentry>
2478               <term><varname>name</varname></term>
2479
2480               <listitem>
2481                 <para>Firmenname</para>
2482               </listitem>
2483             </varlistentry>
2484
2485             <varlistentry>
2486               <term><varname>payment_description</varname></term>
2487
2488               <listitem>
2489                 <para>Name der Zahlart</para>
2490               </listitem>
2491             </varlistentry>
2492
2493             <varlistentry>
2494               <term><varname>payment_terms</varname></term>
2495
2496               <listitem>
2497                 <para>Zahlungskonditionen</para>
2498               </listitem>
2499             </varlistentry>
2500
2501             <varlistentry>
2502               <term><varname>phone</varname></term>
2503
2504               <listitem>
2505                 <para>Telefonnummer</para>
2506               </listitem>
2507             </varlistentry>
2508
2509             <varlistentry>
2510               <term><varname>shiptocity</varname></term>
2511
2512               <listitem>
2513                 <para>Stadt (Lieferadresse) <link
2514                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2515               </listitem>
2516             </varlistentry>
2517
2518             <varlistentry>
2519               <term><varname>shiptocontact</varname></term>
2520
2521               <listitem>
2522                 <para>Kontakt (Lieferadresse) <link
2523                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2524               </listitem>
2525             </varlistentry>
2526
2527             <varlistentry>
2528               <term><varname>shiptocountry</varname></term>
2529
2530               <listitem>
2531                 <para>Land (Lieferadresse) <link
2532                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2533               </listitem>
2534             </varlistentry>
2535
2536             <varlistentry>
2537               <term><varname>shiptodepartment1</varname></term>
2538
2539               <listitem>
2540                 <para>Abteilung 1 (Lieferadresse) <link
2541                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2542               </listitem>
2543             </varlistentry>
2544
2545             <varlistentry>
2546               <term><varname>shiptodepartment2</varname></term>
2547
2548               <listitem>
2549                 <para>Abteilung 2 (Lieferadresse) <link
2550                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2551               </listitem>
2552             </varlistentry>
2553
2554             <varlistentry>
2555               <term><varname>shiptoemail</varname></term>
2556
2557               <listitem>
2558                 <para>Email (Lieferadresse) <link
2559                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2560               </listitem>
2561             </varlistentry>
2562
2563             <varlistentry>
2564               <term><varname>shiptofax</varname></term>
2565
2566               <listitem>
2567                 <para>Fax (Lieferadresse) <link
2568                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2569               </listitem>
2570             </varlistentry>
2571
2572             <varlistentry>
2573               <term><varname>shiptoname</varname></term>
2574
2575               <listitem>
2576                 <para>Firmenname (Lieferadresse) <link
2577                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2578               </listitem>
2579             </varlistentry>
2580
2581             <varlistentry>
2582               <term><varname>shiptophone</varname></term>
2583
2584               <listitem>
2585                 <para>Telefonnummer (Lieferadresse) <link
2586                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2587               </listitem>
2588             </varlistentry>
2589
2590             <varlistentry>
2591               <term><varname>shiptostreet</varname></term>
2592
2593               <listitem>
2594                 <para>Straße und Hausnummer (Lieferadresse) <link
2595                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2596               </listitem>
2597             </varlistentry>
2598
2599             <varlistentry>
2600               <term><varname>shiptozipcode</varname></term>
2601
2602               <listitem>
2603                 <para>Postleitzahl (Lieferadresse) <link
2604                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2605               </listitem>
2606             </varlistentry>
2607
2608             <varlistentry>
2609               <term><varname>street</varname></term>
2610
2611               <listitem>
2612                 <para>Straße und Hausnummer</para>
2613               </listitem>
2614             </varlistentry>
2615
2616             <varlistentry>
2617               <term><varname>taxnumber</varname></term>
2618
2619               <listitem>
2620                 <para>Steuernummer</para>
2621               </listitem>
2622             </varlistentry>
2623
2624             <varlistentry>
2625               <term><varname>ustid</varname></term>
2626
2627               <listitem>
2628                 <para>Umsatzsteuer-Identifikationsnummer</para>
2629               </listitem>
2630             </varlistentry>
2631
2632             <varlistentry>
2633               <term><varname>vendoremail</varname></term>
2634
2635               <listitem>
2636                 <para>Email des Lieferanten; nur für Lieferanten</para>
2637               </listitem>
2638             </varlistentry>
2639
2640             <varlistentry>
2641               <term><varname>vendorfax</varname></term>
2642
2643               <listitem>
2644                 <para>Faxnummer des Lieferanten; nur für Lieferanten</para>
2645               </listitem>
2646             </varlistentry>
2647
2648             <varlistentry>
2649               <term><varname>vendornotes</varname></term>
2650
2651               <listitem>
2652                 <para>Bemerkungen beim Lieferanten; nur für Lieferanten</para>
2653               </listitem>
2654             </varlistentry>
2655
2656             <varlistentry>
2657               <term><varname>vendornumber</varname></term>
2658
2659               <listitem>
2660                 <para>Lieferantennummer; nur für Lieferanten</para>
2661               </listitem>
2662             </varlistentry>
2663
2664             <varlistentry>
2665               <term><varname>vendorphone</varname></term>
2666
2667               <listitem>
2668                 <para>Telefonnummer des Lieferanten; nur für
2669                 Lieferanten</para>
2670               </listitem>
2671             </varlistentry>
2672
2673             <varlistentry>
2674               <term><varname>zipcode</varname></term>
2675
2676               <listitem>
2677                 <para>Postleitzahl</para>
2678               </listitem>
2679             </varlistentry>
2680           </variablelist>
2681
2682           <note id="dokumentenvorlagen-und-variablen.anmerkung-shipto">
2683             <para>Anmerkung: Sind die <varname>shipto*</varname>-Felder in den
2684             Stammdaten nicht eingetragen, so haben die Variablen
2685             <varname>shipto*</varname> den gleichen Wert wie die die
2686             entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich
2687             einige <varname>shipto*</varname>-Variablen so nicht in den
2688             Stammdaten wiederfinden sondern schlicht Kopien der
2689             Lieferdatenvariablen sind (z.B.
2690             <varname>shiptocontact</varname>).</para>
2691           </note>
2692         </sect3>
2693
2694         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-bearbeiter">
2695           <title>Informationen über den Bearbeiter</title>
2696
2697           <variablelist>
2698             <varlistentry>
2699               <term><varname>employee_address</varname></term>
2700
2701               <listitem>
2702                 <para>Adressfeld</para>
2703               </listitem>
2704             </varlistentry>
2705
2706             <varlistentry>
2707               <term><varname>employee_businessnumber</varname></term>
2708
2709               <listitem>
2710                 <para>Firmennummer</para>
2711               </listitem>
2712             </varlistentry>
2713
2714             <varlistentry>
2715               <term><varname>employee_company</varname></term>
2716
2717               <listitem>
2718                 <para>Firmenname</para>
2719               </listitem>
2720             </varlistentry>
2721
2722             <varlistentry>
2723               <term><varname>employee_co_ustid</varname></term>
2724
2725               <listitem>
2726                 <para>Usatzsteuer-Identifikationsnummer</para>
2727               </listitem>
2728             </varlistentry>
2729
2730             <varlistentry>
2731               <term><varname>employee_duns</varname></term>
2732
2733               <listitem>
2734                 <para>DUNS-Nummer</para>
2735               </listitem>
2736             </varlistentry>
2737
2738             <varlistentry>
2739               <term><varname>employee_email</varname></term>
2740
2741               <listitem>
2742                 <para>Email</para>
2743               </listitem>
2744             </varlistentry>
2745
2746             <varlistentry>
2747               <term><varname>employee_fax</varname></term>
2748
2749               <listitem>
2750                 <para>Fax</para>
2751               </listitem>
2752             </varlistentry>
2753
2754             <varlistentry>
2755               <term><varname>employee_name</varname></term>
2756
2757               <listitem>
2758                 <para>voller Name</para>
2759               </listitem>
2760             </varlistentry>
2761
2762             <varlistentry>
2763               <term><varname>employee_signature</varname></term>
2764
2765               <listitem>
2766                 <para>Signatur</para>
2767               </listitem>
2768             </varlistentry>
2769
2770             <varlistentry>
2771               <term><varname>employee_taxnumber</varname></term>
2772
2773               <listitem>
2774                 <para>Steuernummer</para>
2775               </listitem>
2776             </varlistentry>
2777
2778             <varlistentry>
2779               <term><varname>employee_tel</varname></term>
2780
2781               <listitem>
2782                 <para>Telefonnummer</para>
2783               </listitem>
2784             </varlistentry>
2785           </variablelist>
2786         </sect3>
2787
2788         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-verkaeufer">
2789           <title>Informationen über den Bearbeiter</title>
2790
2791           <variablelist>
2792             <varlistentry>
2793               <term><varname>salesman_address</varname></term>
2794
2795               <listitem>
2796                 <para>Adressfeld</para>
2797               </listitem>
2798             </varlistentry>
2799
2800             <varlistentry>
2801               <term><varname>salesman_businessnumber</varname></term>
2802
2803               <listitem>
2804                 <para>Firmennummer</para>
2805               </listitem>
2806             </varlistentry>
2807
2808             <varlistentry>
2809               <term><varname>salesman_company</varname></term>
2810
2811               <listitem>
2812                 <para>Firmenname</para>
2813               </listitem>
2814             </varlistentry>
2815
2816             <varlistentry>
2817               <term><varname>salesman_co_ustid</varname></term>
2818
2819               <listitem>
2820                 <para>Usatzsteuer-Identifikationsnummer</para>
2821               </listitem>
2822             </varlistentry>
2823
2824             <varlistentry>
2825               <term><varname>salesman_duns</varname></term>
2826
2827               <listitem>
2828                 <para>DUNS-Nummer</para>
2829               </listitem>
2830             </varlistentry>
2831
2832             <varlistentry>
2833               <term><varname>salesman_email</varname></term>
2834
2835               <listitem>
2836                 <para>Email</para>
2837               </listitem>
2838             </varlistentry>
2839
2840             <varlistentry>
2841               <term><varname>salesman_fax</varname></term>
2842
2843               <listitem>
2844                 <para>Fax</para>
2845               </listitem>
2846             </varlistentry>
2847
2848             <varlistentry>
2849               <term><varname>salesman_name</varname></term>
2850
2851               <listitem>
2852                 <para>voller Name</para>
2853               </listitem>
2854             </varlistentry>
2855
2856             <varlistentry>
2857               <term><varname>salesman_signature</varname></term>
2858
2859               <listitem>
2860                 <para>Signatur</para>
2861               </listitem>
2862             </varlistentry>
2863
2864             <varlistentry>
2865               <term><varname>salesman_taxnumber</varname></term>
2866
2867               <listitem>
2868                 <para>Steuernummer</para>
2869               </listitem>
2870             </varlistentry>
2871
2872             <varlistentry>
2873               <term><varname>salesman_tel</varname></term>
2874
2875               <listitem>
2876                 <para>Telefonnummer</para>
2877               </listitem>
2878             </varlistentry>
2879           </variablelist>
2880         </sect3>
2881
2882         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-steuern">
2883           <title>Variablen für die einzelnen Steuern</title>
2884
2885           <variablelist>
2886             <varlistentry>
2887               <term><varname>tax</varname></term>
2888
2889               <listitem>
2890                 <para>Steuer</para>
2891               </listitem>
2892             </varlistentry>
2893
2894             <varlistentry>
2895               <term><varname>taxbase</varname></term>
2896
2897               <listitem>
2898                 <para>zu versteuernder Betrag</para>
2899               </listitem>
2900             </varlistentry>
2901
2902             <varlistentry>
2903               <term><varname>taxdescription</varname></term>
2904
2905               <listitem>
2906                 <para>Name der Steuer</para>
2907               </listitem>
2908             </varlistentry>
2909
2910             <varlistentry>
2911               <term><varname>taxrate</varname></term>
2912
2913               <listitem>
2914                 <para>Steuersatz</para>
2915               </listitem>
2916             </varlistentry>
2917           </variablelist>
2918         </sect3>
2919       </sect2>
2920
2921       <sect2 id="dokumentenvorlagen-und-variablen.invoice">
2922         <title>Variablen in Rechnungen</title>
2923
2924         <sect3 id="dokumentenvorlagen-und-variablen.invoice-allgemein">
2925           <title>Allgemeine Variablen</title>
2926
2927           <variablelist>
2928             <varlistentry>
2929               <term><varname>creditremaining</varname></term>
2930
2931               <listitem>
2932                 <para>Verbleibender Kredit</para>
2933               </listitem>
2934             </varlistentry>
2935
2936             <varlistentry>
2937               <term><varname>currency</varname></term>
2938
2939               <listitem>
2940                 <para>Währung</para>
2941               </listitem>
2942             </varlistentry>
2943
2944             <varlistentry>
2945               <term><varname>cusordnumber</varname></term>
2946
2947               <listitem>
2948                 <para>Bestellnummer beim Kunden</para>
2949               </listitem>
2950             </varlistentry>
2951
2952             <varlistentry>
2953               <term><varname>deliverydate</varname></term>
2954
2955               <listitem>
2956                 <para>Lieferdatum</para>
2957               </listitem>
2958             </varlistentry>
2959
2960             <varlistentry>
2961               <term><varname>duedate</varname></term>
2962
2963               <listitem>
2964                 <para>Fälligkeitsdatum</para>
2965               </listitem>
2966             </varlistentry>
2967
2968             <varlistentry>
2969               <term><varname>globalprojectnumber</varname></term>
2970
2971               <listitem>
2972                 <para>Projektnummer des ganzen Beleges</para>
2973               </listitem>
2974             </varlistentry>
2975
2976             <varlistentry>
2977               <term><varname>globalprojectdescription</varname></term>
2978
2979               <listitem>
2980                 <para>Projekbeschreibung des ganzen Beleges</para>
2981               </listitem>
2982             </varlistentry>
2983
2984             <varlistentry>
2985               <term><varname>intnotes</varname></term>
2986
2987               <listitem>
2988                 <para>Interne Bemerkungen</para>
2989               </listitem>
2990             </varlistentry>
2991
2992             <varlistentry>
2993               <term><varname>invdate</varname></term>
2994
2995               <listitem>
2996                 <para>Rechnungsdatum</para>
2997               </listitem>
2998             </varlistentry>
2999
3000             <varlistentry>
3001               <term><varname>invnumber</varname></term>
3002
3003               <listitem>
3004                 <para>Rechnungsnummer</para>
3005               </listitem>
3006             </varlistentry>
3007
3008             <varlistentry>
3009               <term><varname>invtotal</varname></term>
3010
3011               <listitem>
3012                 <para>gesamter Rechnungsbetrag</para>
3013               </listitem>
3014             </varlistentry>
3015
3016             <varlistentry>
3017               <term><varname>notes</varname></term>
3018
3019               <listitem>
3020                 <para>Bemerkungen der Rechnung</para>
3021               </listitem>
3022             </varlistentry>
3023
3024             <varlistentry>
3025               <term><varname>orddate</varname></term>
3026
3027               <listitem>
3028                 <para>Auftragsdatum</para>
3029               </listitem>
3030             </varlistentry>
3031
3032             <varlistentry>
3033               <term><varname>ordnumber</varname></term>
3034
3035               <listitem>
3036                 <para>Auftragsnummer, wenn die Rechnung aus einem Auftrag
3037                 erstellt wurde</para>
3038               </listitem>
3039             </varlistentry>
3040
3041             <varlistentry>
3042               <term><varname>payment_description</varname></term>
3043
3044               <listitem>
3045                 <para>Name der Zahlart</para>
3046               </listitem>
3047             </varlistentry>
3048
3049             <varlistentry>
3050               <term><varname>payment_terms</varname></term>
3051
3052               <listitem>
3053                 <para>Zahlungskonditionen</para>
3054               </listitem>
3055             </varlistentry>
3056
3057             <varlistentry>
3058               <term><varname>quodate</varname></term>
3059
3060               <listitem>
3061                 <para>Angebotsdatum</para>
3062               </listitem>
3063             </varlistentry>
3064
3065             <varlistentry>
3066               <term><varname>quonumber</varname></term>
3067
3068               <listitem>
3069                 <para>Angebotsnummer</para>
3070               </listitem>
3071             </varlistentry>
3072
3073             <varlistentry>
3074               <term><varname>shippingpoint</varname></term>
3075
3076               <listitem>
3077                 <para>Versandort</para>
3078               </listitem>
3079             </varlistentry>
3080
3081             <varlistentry>
3082               <term><varname>shipvia</varname></term>
3083
3084               <listitem>
3085                 <para>Transportmittel</para>
3086               </listitem>
3087             </varlistentry>
3088
3089             <varlistentry>
3090               <term><varname>subtotal</varname></term>
3091
3092               <listitem>
3093                 <para>Zwischensumme aller Posten ohne Steuern</para>
3094               </listitem>
3095             </varlistentry>
3096
3097             <varlistentry>
3098               <term><varname>total</varname></term>
3099
3100               <listitem>
3101                 <para>Restsumme der Rechnung (Summe abzüglich bereits
3102                 bezahlter Posten)</para>
3103               </listitem>
3104             </varlistentry>
3105
3106             <varlistentry>
3107               <term><varname>transaction_description</varname></term>
3108
3109               <listitem>
3110                 <para>Vorgangsbezeichnung</para>
3111               </listitem>
3112             </varlistentry>
3113
3114             <varlistentry>
3115               <term><varname>transdate</varname></term>
3116
3117               <listitem>
3118                 <para>Auftragsdatum wenn die Rechnung aus einem Auftrag
3119                 erstellt wurde</para>
3120               </listitem>
3121             </varlistentry>
3122           </variablelist>
3123         </sect3>
3124
3125         <sect3 id="dokumentenvorlagen-und-variablen.invoice-posten">
3126           <title>Variablen für jeden Posten auf der Rechnung</title>
3127
3128           <variablelist>
3129             <varlistentry>
3130               <term><varname>bin</varname></term>
3131
3132               <listitem>
3133                 <para>Stellage</para>
3134               </listitem>
3135             </varlistentry>
3136
3137             <varlistentry>
3138               <term><varname>description</varname></term>
3139
3140               <listitem>
3141                 <para>Artikelbeschreibung</para>
3142               </listitem>
3143             </varlistentry>
3144
3145             <varlistentry>
3146               <term><varname>discount</varname></term>
3147
3148               <listitem>
3149                 <para>Rabatt als Betrag</para>
3150               </listitem>
3151             </varlistentry>
3152
3153             <varlistentry>
3154               <term><varname>discount_sub</varname></term>
3155
3156               <listitem>
3157                 <para>Zwischensumme mit Rabatt</para>
3158               </listitem>
3159             </varlistentry>
3160
3161             <varlistentry>
3162               <term><varname>drawing</varname></term>
3163
3164               <listitem>
3165                 <para>Zeichnung</para>
3166               </listitem>
3167             </varlistentry>
3168
3169             <varlistentry>
3170               <term><varname>ean</varname></term>
3171
3172               <listitem>
3173                 <para>EAN-Code</para>
3174               </listitem>
3175             </varlistentry>
3176
3177             <varlistentry>
3178               <term><varname>image</varname></term>
3179
3180               <listitem>
3181                 <para>Grafik</para>
3182               </listitem>
3183             </varlistentry>
3184
3185             <varlistentry>
3186               <term><varname>linetotal</varname></term>
3187
3188               <listitem>
3189                 <para>Zeilensumme (Anzahl * Einzelpreis)</para>
3190               </listitem>
3191             </varlistentry>
3192
3193             <varlistentry>
3194               <term><varname>longdescription</varname></term>
3195
3196               <listitem>
3197                 <para>Langtext</para>
3198               </listitem>
3199             </varlistentry>
3200
3201             <varlistentry>
3202               <term><varname>microfiche</varname></term>
3203
3204               <listitem>
3205                 <para>Mikrofilm</para>
3206               </listitem>
3207             </varlistentry>
3208
3209             <varlistentry>
3210               <term><varname>netprice</varname></term>
3211
3212               <listitem>
3213                 <para>Nettopreis</para>
3214               </listitem>
3215             </varlistentry>
3216
3217             <varlistentry>
3218               <term><varname>nodiscount_linetotal</varname></term>
3219
3220               <listitem>
3221                 <para>Zeilensumme ohne Rabatt</para>
3222               </listitem>
3223             </varlistentry>
3224
3225             <varlistentry>
3226               <term><varname>nodiscount_sub</varname></term>
3227
3228               <listitem>
3229                 <para>Zwischensumme ohne Rabatt</para>
3230               </listitem>
3231             </varlistentry>
3232
3233             <varlistentry>
3234               <term><varname>number</varname></term>
3235
3236               <listitem>
3237                 <para>Artikelnummer</para>
3238               </listitem>
3239             </varlistentry>
3240
3241             <varlistentry>
3242               <term><varname>ordnumber_oe</varname></term>
3243
3244               <listitem>
3245                 <para>Auftragsnummer des Originalauftrags, wenn die Rechnung
3246                 aus einem Sammelauftrag erstellt wurde</para>
3247               </listitem>
3248             </varlistentry>
3249
3250             <varlistentry>
3251               <term><varname>p_discount</varname></term>
3252
3253               <listitem>
3254                 <para>Rabatt in Prozent</para>
3255               </listitem>
3256             </varlistentry>
3257
3258             <varlistentry>
3259               <term><varname>partnotes</varname></term>
3260
3261               <listitem>
3262                 <para>Die beim Artikel gespeicherten Bemerkungen</para>
3263               </listitem>
3264             </varlistentry>
3265
3266             <varlistentry>
3267               <term><varname>partsgroup</varname></term>
3268
3269               <listitem>
3270                 <para>Warengruppe</para>
3271               </listitem>
3272             </varlistentry>
3273
3274             <varlistentry>
3275               <term><varname>price_factor</varname></term>
3276
3277               <listitem>
3278                 <para>Der Preisfaktor als Zahl, sofern einer eingestellt
3279                 ist</para>
3280               </listitem>
3281             </varlistentry>
3282
3283             <varlistentry>
3284               <term><varname>price_factor_name</varname></term>
3285
3286               <listitem>
3287                 <para>Der Name des Preisfaktors, sofern einer eingestellt
3288                 ist</para>
3289               </listitem>
3290             </varlistentry>
3291
3292             <varlistentry>
3293               <term><varname>projectnumber</varname></term>
3294
3295               <listitem>
3296                 <para>Projektnummer</para>
3297               </listitem>
3298             </varlistentry>
3299
3300             <varlistentry>
3301               <term><varname>projectdescription</varname></term>
3302
3303               <listitem>
3304                 <para>Projektbeschreibung</para>
3305               </listitem>
3306             </varlistentry>
3307
3308             <varlistentry>
3309               <term><varname>qty</varname></term>
3310
3311               <listitem>
3312                 <para>Anzahl</para>
3313               </listitem>
3314             </varlistentry>
3315
3316             <varlistentry>
3317               <term><varname>reqdate</varname></term>
3318
3319               <listitem>
3320                 <para>Lieferdatum</para>
3321               </listitem>
3322             </varlistentry>
3323
3324             <varlistentry>
3325               <term><varname>runningnumber</varname></term>
3326
3327               <listitem>
3328                 <para>Position auf der Rechnung (1, 2, 3...)</para>
3329               </listitem>
3330             </varlistentry>
3331
3332             <varlistentry>
3333               <term><varname>sellprice</varname></term>
3334
3335               <listitem>
3336                 <para>Verkaufspreis</para>
3337               </listitem>
3338             </varlistentry>
3339
3340             <varlistentry>
3341               <term><varname>serialnumber</varname></term>
3342
3343               <listitem>
3344                 <para>Seriennummer</para>
3345               </listitem>
3346             </varlistentry>
3347
3348             <varlistentry>
3349               <term><varname>tax_rate</varname></term>
3350
3351               <listitem>
3352                 <para>Steuersatz</para>
3353               </listitem>
3354             </varlistentry>
3355
3356             <varlistentry>
3357               <term><varname>transdate_oe</varname></term>
3358
3359               <listitem>
3360                 <para>Auftragsdatum des Originalauftrags, wenn die Rechnung
3361                 aus einem Sammelauftrag erstellt wurde</para>
3362               </listitem>
3363             </varlistentry>
3364
3365             <varlistentry>
3366               <term><varname>unit</varname></term>
3367
3368               <listitem>
3369                 <para>Einheit</para>
3370               </listitem>
3371             </varlistentry>
3372
3373             <varlistentry>
3374               <term><varname>weight</varname></term>
3375
3376               <listitem>
3377                 <para>Gewicht</para>
3378               </listitem>
3379             </varlistentry>
3380           </variablelist>
3381
3382           <para>Für jeden Posten gibt es ein Unterarray mit den Informationen
3383           über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
3384           einer <function>foreach</function>-Schleife ausgegeben werden, da
3385           für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
3386           können. Die Variablen dafür lauten:</para>
3387
3388           <variablelist>
3389             <varlistentry>
3390               <term><varname>make</varname></term>
3391
3392               <listitem>
3393                 <para>Lieferant</para>
3394               </listitem>
3395             </varlistentry>
3396
3397             <varlistentry>
3398               <term><varname>model</varname></term>
3399
3400               <listitem>
3401                 <para>Lieferantenartikelnummer</para>
3402               </listitem>
3403             </varlistentry>
3404           </variablelist>
3405         </sect3>
3406
3407         <sect3 id="dokumentenvorlagen-und-variablen.invoice-zahlungen">
3408           <title>Variablen für die einzelnen Zahlungseingänge</title>
3409
3410           <variablelist>
3411             <varlistentry>
3412               <term><varname>payment</varname></term>
3413
3414               <listitem>
3415                 <para>Betrag</para>
3416               </listitem>
3417             </varlistentry>
3418
3419             <varlistentry>
3420               <term><varname>paymentaccount</varname></term>
3421
3422               <listitem>
3423                 <para>Konto</para>
3424               </listitem>
3425             </varlistentry>
3426
3427             <varlistentry>
3428               <term><varname>paymentdate</varname></term>
3429
3430               <listitem>
3431                 <para>Datum</para>
3432               </listitem>
3433             </varlistentry>
3434
3435             <varlistentry>
3436               <term><varname>paymentmemo</varname></term>
3437
3438               <listitem>
3439                 <para>Memo</para>
3440               </listitem>
3441             </varlistentry>
3442
3443             <varlistentry>
3444               <term><varname>paymentsource</varname></term>
3445
3446               <listitem>
3447                 <para>Beleg</para>
3448               </listitem>
3449             </varlistentry>
3450           </variablelist>
3451         </sect3>
3452
3453         <sect3 id="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc">
3454           <title>Benutzerdefinierte Kunden- und Lieferantenvariablen</title>
3455
3456           <para>Die vom Benutzer definierten Variablen für Kunden und
3457           Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
3458           ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem Präfix
3459           <varname>vc_cvar_</varname> und dem vom Benutzer festgelegten
3460           Variablennamen zusammen.</para>
3461
3462           <para>Beispiel: Der Benutzer hat eine Variable namens
3463           <varname>number_of_employees</varname> definiert, die die Anzahl der
3464           Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
3465           unter dem Namen <varname>vc_cvar_number_of_employees</varname> zur
3466           Verfügung.</para>
3467         </sect3>
3468       </sect2>
3469
3470       <sect2 id="dokumentenvorlagen-und-variablen.dunning">
3471         <title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
3472
3473         <sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
3474           <title>Namen der Vorlagen</title>
3475
3476           <para>Die Namen der Vorlagen werden im System-Menü vom Benutzer
3477           eingegeben. Wird für ein Mahnlevel die Option zur automatischen
3478           Erstellung einer Rechnung über die Mahngebühren und Zinsen
3479           aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem
3480           Vorlagenname für diese Mahnstufe mit dem Zusatz
3481           <constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
3482           für die ausgewählte Sprache und den ausgewählten Drucker
3483           angehängt.</para>
3484         </sect3>
3485
3486         <sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
3487           <title>Allgemeine Variablen in Mahnungen</title>
3488
3489           <para>Die Variablen des Verkäufers stehen wie gewohnt als
3490           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
3491           Kunden stehen als Variablen <varname>name</varname>,
3492           <varname>street</varname>, <varname>zipcode</varname>,
3493           <varname>city</varname>, <varname>country</varname>,
3494           <varname>department_1</varname>, <varname>department_2</varname>,
3495           und <varname>email</varname> zur Verfügung.</para>
3496
3497           <para>Weitere Variablen beinhalten:</para>
3498
3499           <variablelist>
3500             <varlistentry>
3501               <term><varname>dunning_date</varname></term>
3502
3503               <listitem>
3504                 <para>Datum der Mahnung</para>
3505               </listitem>
3506             </varlistentry>
3507
3508             <varlistentry>
3509               <term><varname>dunning_duedate</varname></term>
3510
3511               <listitem>
3512                 <para>Fälligkeitsdatum für diese Mahhnung</para>
3513               </listitem>
3514             </varlistentry>
3515
3516             <varlistentry>
3517               <term><varname>dunning_id</varname></term>
3518
3519               <listitem>
3520                 <para>Mahnungsnummer</para>
3521               </listitem>
3522             </varlistentry>
3523
3524             <varlistentry>
3525               <term><varname>fee</varname></term>
3526
3527               <listitem>
3528                 <para>Kummulative Mahngebühren</para>
3529               </listitem>
3530             </varlistentry>
3531
3532             <varlistentry>
3533               <term><varname>interest_rate</varname></term>
3534
3535               <listitem>
3536                 <para>Zinssatz per anno in Prozent</para>
3537               </listitem>
3538             </varlistentry>
3539
3540             <varlistentry>
3541               <term><varname>total_amount</varname></term>
3542
3543               <listitem>
3544                 <para>Gesamter noch zu zahlender Betrag als
3545                 <function>fee</function> + <function>total_interest</function>
3546                 + <function>total_open_amount</function></para>
3547               </listitem>
3548             </varlistentry>
3549
3550             <varlistentry>
3551               <term><varname>total_interest</varname></term>
3552
3553               <listitem>
3554                 <para>Zinsen per anno über alle Rechnungen</para>
3555               </listitem>
3556             </varlistentry>
3557
3558             <varlistentry>
3559               <term><varname>total_open_amount</varname></term>
3560
3561               <listitem>
3562                 <para>Summe über alle offene Beträge der Rechnungen</para>
3563               </listitem>
3564             </varlistentry>
3565           </variablelist>
3566         </sect3>
3567
3568         <sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
3569           <title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
3570
3571           <variablelist>
3572             <varlistentry>
3573               <term><varname>dn_amount</varname></term>
3574
3575               <listitem>
3576                 <para>Rechnungssumme (brutto)</para>
3577               </listitem>
3578             </varlistentry>
3579
3580             <varlistentry>
3581               <term><varname>dn_duedate</varname></term>
3582
3583               <listitem>
3584                 <para>Originales Fälligkeitsdatum der Rechnung</para>
3585               </listitem>
3586             </varlistentry>
3587
3588             <varlistentry>
3589               <term><varname>dn_dunning_date</varname></term>
3590
3591               <listitem>
3592                 <para>Datum der Mahnung</para>
3593               </listitem>
3594             </varlistentry>
3595
3596             <varlistentry>
3597               <term><varname>dn_dunning_duedate</varname></term>
3598
3599               <listitem>
3600                 <para>Fälligkeitsdatum der Mahnung</para>
3601               </listitem>
3602             </varlistentry>
3603
3604             <varlistentry>
3605               <term><varname>dn_fee</varname></term>
3606
3607               <listitem>
3608                 <para>Kummulative Mahngebühr</para>
3609               </listitem>
3610             </varlistentry>
3611
3612             <varlistentry>
3613               <term><varname>dn_interest</varname></term>
3614
3615               <listitem>
3616                 <para>Zinsen per anno für diese Rechnung</para>
3617               </listitem>
3618             </varlistentry>
3619
3620             <varlistentry>
3621               <term><varname>dn_invnumber</varname></term>
3622
3623               <listitem>
3624                 <para>Rechnungsnummer</para>
3625               </listitem>
3626             </varlistentry>
3627
3628             <varlistentry>
3629               <term><varname>dn_linetotal</varname></term>
3630
3631               <listitem>
3632                 <para>Noch zu zahlender Betrag (ergibt sich aus
3633                 <varname>dn_open_amount</varname> + <varname>dn_fee</varname>
3634                 + <varname>dn_interest</varname>)</para>
3635               </listitem>
3636             </varlistentry>
3637
3638             <varlistentry>
3639               <term><varname>dn_netamount</varname></term>
3640
3641               <listitem>
3642                 <para>Rechnungssumme (netto)</para>
3643               </listitem>
3644             </varlistentry>
3645
3646             <varlistentry>
3647               <term><varname>dn_open_amount</varname></term>
3648
3649               <listitem>
3650                 <para>Offener Rechnungsbetrag</para>
3651               </listitem>
3652             </varlistentry>
3653
3654             <varlistentry>
3655               <term><varname>dn_ordnumber</varname></term>
3656
3657               <listitem>
3658                 <para>Bestellnummer</para>
3659               </listitem>
3660             </varlistentry>
3661
3662             <varlistentry>
3663               <term><varname>dn_transdate</varname></term>
3664
3665               <listitem>
3666                 <para>Rechnungsdatum</para>
3667               </listitem>
3668             </varlistentry>
3669
3670             <varlistentry>
3671               <term><varname>dn_curr</varname></term>
3672
3673               <listitem>
3674                 <para>Währung, in der die Rechnung erstellt wurde. (Die
3675                 Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
3676               </listitem>
3677             </varlistentry>
3678           </variablelist>
3679         </sect3>
3680
3681         <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
3682           <title>Variablen in automatisch erzeugten Rechnungen über
3683           Mahngebühren</title>
3684
3685           <para>Die Variablen des Verkäufers stehen wie gewohnt als
3686           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
3687           Kunden stehen als Variablen <varname>name</varname>,
3688           <varname>street</varname>, <varname>zipcode</varname>,
3689           <varname>city</varname>, <varname>country</varname>,
3690           <varname>department_1</varname>, <varname>department_2</varname>,
3691           und <varname>email</varname> zur Verfügung.</para>
3692
3693           <para>Weitere Variablen beinhalten:</para>
3694
3695           <variablelist>
3696             <varlistentry>
3697               <term><varname>duedate</varname></term>
3698
3699               <listitem>
3700                 <para>Fälligkeitsdatum der Rechnung</para>
3701               </listitem>
3702             </varlistentry>
3703
3704             <varlistentry>
3705               <term><varname>dunning_id</varname></term>
3706
3707               <listitem>
3708                 <para>Mahnungsnummer</para>
3709               </listitem>
3710             </varlistentry>
3711
3712             <varlistentry>
3713               <term><varname>fee</varname></term>
3714
3715               <listitem>
3716                 <para>Mahngebühren</para>
3717               </listitem>
3718             </varlistentry>
3719
3720             <varlistentry>
3721               <term><varname>interest</varname></term>
3722
3723               <listitem>
3724                 <para>Zinsen</para>
3725               </listitem>
3726             </varlistentry>
3727
3728             <varlistentry>
3729               <term><varname>invamount</varname></term>
3730
3731               <listitem>
3732                 <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
3733                 <varname>interest</varname>)</para>
3734               </listitem>
3735             </varlistentry>
3736
3737             <varlistentry>
3738               <term><varname>invdate</varname></term>
3739
3740               <listitem>
3741                 <para>Rechnungsdatum</para>
3742               </listitem>
3743             </varlistentry>
3744
3745             <varlistentry>
3746               <term><varname>invnumber</varname></term>
3747
3748               <listitem>
3749                 <para>Rechnungsnummer</para>
3750               </listitem>
3751             </varlistentry>
3752           </variablelist>
3753         </sect3>
3754       </sect2>
3755
3756       <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
3757         <title>Variablen in anderen Vorlagen</title>
3758
3759         <sect3>
3760           <title>Einführung</title>
3761
3762           <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
3763           Rechnung. Allerdings heißen die Variablen, die mit
3764           <varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
3765           fangen sie mit <varname>quo</varname> für "quotation" an:
3766           <varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
3767           wiederum fangen sie mit <varname>ord</varname> für "order" an:
3768           <varname>ordnumber</varname> für Bestellnummer etc.</para>
3769
3770           <para>Manche Variablen sind in anderen Vorlagen hingegen gar nicht
3771           vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies
3772           sind Variablen, die vom Geschäftsablauf her in der entsprechenden
3773           Vorlage keine Bedeutung haben oder noch nicht belegt sein
3774           können.</para>
3775
3776           <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
3777           in Rechnungen aufgeführt.</para>
3778         </sect3>
3779
3780         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
3781           <title>Angebote und Preisanfragen</title>
3782
3783           <variablelist>
3784             <varlistentry>
3785               <term><varname>quonumber</varname></term>
3786
3787               <listitem>
3788                 <para>Angebots- bzw. Anfragenummer</para>
3789               </listitem>
3790             </varlistentry>
3791
3792             <varlistentry>
3793               <term><varname>reqdate</varname></term>
3794
3795               <listitem>
3796                 <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
3797                 Preisanfragen)</para>
3798               </listitem>
3799             </varlistentry>
3800
3801             <varlistentry>
3802               <term><varname>transdate</varname></term>
3803
3804               <listitem>
3805                 <para>Angebots- bzw. Anfragedatum</para>
3806               </listitem>
3807             </varlistentry>
3808           </variablelist>
3809         </sect3>
3810
3811         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
3812           <title>Auftragsbestätigungen und Lieferantenaufträge</title>
3813
3814           <variablelist>
3815             <varlistentry>
3816               <term><varname>ordnumber</varname></term>
3817
3818               <listitem>
3819                 <para>Auftragsnummer</para>
3820               </listitem>
3821             </varlistentry>
3822
3823             <varlistentry>
3824               <term><varname>reqdate</varname></term>
3825
3826               <listitem>
3827                 <para>Lieferdatum</para>
3828               </listitem>
3829             </varlistentry>
3830
3831             <varlistentry>
3832               <term><varname>transdate</varname></term>
3833
3834               <listitem>
3835                 <para>Auftragsdatum</para>
3836               </listitem>
3837             </varlistentry>
3838           </variablelist>
3839         </sect3>
3840
3841         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
3842           <title>Lieferscheine (Verkauf und Einkauf)</title>
3843
3844           <variablelist>
3845             <varlistentry>
3846               <term><varname>cusordnumber</varname></term>
3847
3848               <listitem>
3849                 <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
3850                 des Lieferanten (im Einkauf)</para>
3851               </listitem>
3852             </varlistentry>
3853
3854             <varlistentry>
3855               <term><varname>donumber</varname></term>
3856
3857               <listitem>
3858                 <para>Lieferscheinnummer</para>
3859               </listitem>
3860             </varlistentry>
3861
3862             <varlistentry>
3863               <term><varname>transdate</varname></term>
3864
3865               <listitem>
3866                 <para>Lieferscheindatum</para>
3867               </listitem>
3868             </varlistentry>
3869           </variablelist>
3870
3871           <para>Für jede Position eines Lieferscheines gibt es ein Unterarray
3872           mit den Informationen darüber, von welchem Lager und Lagerplatz aus
3873           die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
3874           Lagerplatz sie eingelagert wurden. Diese müssen mittels einer
3875           <function>foreach</function>-Schleife ausgegeben werden. Diese
3876           Variablen sind:</para>
3877
3878           <variablelist>
3879             <varlistentry>
3880               <term><varname>si_bin</varname></term>
3881
3882               <listitem>
3883                 <para>Lagerplatz</para>
3884               </listitem>
3885             </varlistentry>
3886
3887             <varlistentry>
3888               <term><varname>si_chargenumber</varname></term>
3889
3890               <listitem>
3891                 <para>Chargennummer</para>
3892               </listitem>
3893             </varlistentry>
3894
3895             <varlistentry>
3896               <term><varname>si_bestbefore</varname></term>
3897
3898               <listitem>
3899                 <para>Mindesthaltbarkeit</para>
3900               </listitem>
3901             </varlistentry>
3902
3903             <varlistentry>
3904               <term><varname>si_number</varname></term>
3905
3906               <listitem>
3907                 <para>Artikelnummer</para>
3908               </listitem>
3909             </varlistentry>
3910
3911             <varlistentry>
3912               <term><varname>si_qty</varname></term>
3913
3914               <listitem>
3915                 <para>Anzahl bzw. Menge</para>
3916               </listitem>
3917             </varlistentry>
3918
3919             <varlistentry>
3920               <term><varname>si_runningnumber</varname></term>
3921
3922               <listitem>
3923                 <para>Positionsnummer (1, 2, 3 etc)</para>
3924               </listitem>
3925             </varlistentry>
3926
3927             <varlistentry>
3928               <term><varname>si_unit</varname></term>
3929
3930               <listitem>
3931                 <para>Einheit</para>
3932               </listitem>
3933             </varlistentry>
3934
3935             <varlistentry>
3936               <term><varname>si_warehouse</varname></term>
3937
3938               <listitem>
3939                 <para>Lager</para>
3940               </listitem>
3941             </varlistentry>
3942           </variablelist>
3943         </sect3>
3944
3945         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
3946           <title>Variablen für Sammelrechnung</title>
3947
3948           <variablelist>
3949             <varlistentry>
3950               <term><varname>c0total</varname></term>
3951
3952               <listitem>
3953                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
3954                 Tage</para>
3955               </listitem>
3956             </varlistentry>
3957
3958             <varlistentry>
3959               <term><varname>c30total</varname></term>
3960
3961               <listitem>
3962                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
3963                 und &lt; 60 Tage</para>
3964               </listitem>
3965             </varlistentry>
3966
3967             <varlistentry>
3968               <term><varname>c60total</varname></term>
3969
3970               <listitem>
3971                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
3972                 und &lt; 90 Tage</para>
3973               </listitem>
3974             </varlistentry>
3975
3976             <varlistentry>
3977               <term><varname>c90total</varname></term>
3978
3979               <listitem>
3980                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
3981                 Tage</para>
3982               </listitem>
3983             </varlistentry>
3984
3985             <varlistentry>
3986               <term><varname>total</varname></term>
3987
3988               <listitem>
3989                 <para>Gesamtbetrag aller Rechnungen</para>
3990               </listitem>
3991             </varlistentry>
3992           </variablelist>
3993
3994           <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
3995
3996           <variablelist>
3997             <varlistentry>
3998               <term><varname>invnumber</varname></term>
3999
4000               <listitem>
4001                 <para>Rechnungsnummer</para>
4002               </listitem>
4003             </varlistentry>
4004
4005             <varlistentry>
4006               <term><varname>invdate</varname></term>
4007
4008               <listitem>
4009                 <para>Rechnungsdatum</para>
4010               </listitem>
4011             </varlistentry>
4012
4013             <varlistentry>
4014               <term><varname>duedate</varname></term>
4015
4016               <listitem>
4017                 <para>Fälligkeitsdatum</para>
4018               </listitem>
4019             </varlistentry>
4020
4021             <varlistentry>
4022               <term><varname>amount</varname></term>
4023
4024               <listitem>
4025                 <para>Summe der Rechnung</para>
4026               </listitem>
4027             </varlistentry>
4028
4029             <varlistentry>
4030               <term><varname>open</varname></term>
4031
4032               <listitem>
4033                 <para>Noch offener Betrag der Rechnung</para>
4034               </listitem>
4035             </varlistentry>
4036
4037             <varlistentry>
4038               <term><varname>c0</varname></term>
4039
4040               <listitem>
4041                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
4042                 Tage</para>
4043               </listitem>
4044             </varlistentry>
4045
4046             <varlistentry>
4047               <term><varname>c30</varname></term>
4048
4049               <listitem>
4050                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
4051                 &lt; 60 Tage</para>
4052               </listitem>
4053             </varlistentry>
4054
4055             <varlistentry>
4056               <term><varname>c60</varname></term>
4057
4058               <listitem>
4059                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
4060                 &lt; 90 Tage</para>
4061               </listitem>
4062             </varlistentry>
4063
4064             <varlistentry>
4065               <term><varname>c90</varname></term>
4066
4067               <listitem>
4068                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
4069                 Tage</para>
4070               </listitem>
4071             </varlistentry>
4072           </variablelist>
4073         </sect3>
4074       </sect2>
4075
4076       <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
4077         <title>Blöcke, bedingte Anweisungen und Schleifen</title>
4078
4079         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
4080           <title>Einfürhung</title>
4081
4082           <para>Der Parser kennt neben den Variablen einige weitere
4083           Konstrukte, die gesondert behandelt werden. Diese sind wie
4084           Variablennamen in spezieller Weise markiert:
4085           <command>&lt;%anweisung%&gt; ... &lt;%end%&gt;</command></para>
4086
4087           <para>Anmerkung zum <command>&lt;%end%&gt;</command>: Der besseren
4088           Verständlichkeit halber kann man nach dem <command>end</command>
4089           noch beliebig weitere Wörter schreiben, um so zu markieren, welche
4090           Anweisung (z.B. <command>if</command> oder
4091           <command>foreach</command>) damit abgeschlossen wird.</para>
4092
4093           <para>Beispiel: Lautet der Beginn eines Blockes z.B.
4094           <command>&lt;%if type == "sales_quotation"%&gt;</command>, so könnte
4095           er mit <command>&lt;%end%&gt;</command> genauso abgeschlossen werden
4096           wie mit <command>&lt;%end if%&gt;</command> oder auch
4097           <command>&lt;%end type == "sales_quotation"%&gt;</command>.</para>
4098         </sect3>
4099
4100         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
4101           <title>Der if-Block</title>
4102
4103           <programlisting>&lt;%if variablenname%&gt;
4104 ...
4105 &lt;%end%&gt;</programlisting>
4106
4107           <para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
4108           und dem "end" werden nur ausgegeben, wenn die Variable
4109           <varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
4110
4111           <para>Die Bedingung kann auch negiert werden, indem das Wort
4112           <function>not</function> nach dem <filename>if</filename> verwendet
4113           wird. Beispiel:</para>
4114
4115           <programlisting>&lt;%if not cp_greeting%&gt;
4116 ...
4117 &lt;%end%&gt;</programlisting>
4118
4119           <para>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
4120           oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
4121           einer Variablen mit einer festen Zeichenkette oder einer anderen
4122           Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
4123           oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
4124           die rechte Seite des Vergleichsoperators in Anführungszeichen
4125           gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
4126           anderer Variablen). Zwei Beispiele, die beide Vergleiche
4127           zeigen:</para>
4128
4129           <programlisting>&lt;%if var1 == "Wert"%&gt;</programlisting>
4130
4131           <para>Testet die Variable <varname>var1</varname> auf
4132           übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
4133           Mittels <function>!=</function> anstelle von <function>==</function>
4134           würde auf Ungleichheit getestet.</para>
4135
4136           <programlisting>&lt;%if var1 == var2%&gt;</programlisting>
4137
4138           <para>Testet die Variable <varname>var1</varname> auf
4139           übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
4140           <function>!=</function> anstelle von <function>==</function> würde
4141           auf Ungleichheit getestet.</para>
4142
4143           <para>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit
4144           auch Tests auf übereinstimmung mit regulären Ausdrücken ohne
4145           Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
4146           dieselbe Syntax wie oben nur mit <function>=~</function> und
4147           <function>!~</function> als Vergleichsoperatoren.</para>
4148
4149           <para>Beispiel für einen Test, ob die Variable
4150           <varname>intnotes</varname> (interne Bemerkungen) das Wort
4151           <constant>schwierig</constant> enthält:</para>
4152
4153           <programlisting>&lt;%if intnotes =~ "schwierig"%&gt;</programlisting>
4154         </sect3>
4155
4156         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
4157           <title>Der foreach-Block</title>
4158
4159           <programlisting>&lt;%foreach variablenname%&gt;
4160 ...
4161 &lt;%end%&gt;</programlisting>
4162
4163           <para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
4164           wie das Perl-Array der Variablen <varname>variablenname</varname>
4165           Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen
4166           Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern
4167           benutzt. In jedem Durchlauf werden die <link
4168           linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
4169           Variablen</link> jeweils auf den Wert für die aktuelle Position
4170           gesetzt.</para>
4171
4172           <para>Die Syntax sieht normalerweise wie folgt aus:</para>
4173
4174           <programlisting>&lt;%foreach number%&gt;
4175 Position: &lt;%runningnumber%&gt;
4176 Anzahl: &lt;%qty%&gt;
4177 Artikelnummer: &lt;%number%&gt;
4178 Beschreibung: &lt;%description%&gt;
4179 ...
4180 &lt;%end%&gt;</programlisting>
4181
4182           <para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
4183           <function>&lt;%foreach%&gt;</function>-Block innerhalb einer
4184           Tabellenzelle auf, so wird die komplette Tabellenzeile so oft
4185           wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der
4186           Inhalt zwischen <function>&lt;%foreach%&gt;</function> und
4187           <function>&lt;%end%&gt;</function> wiederholt, nicht aber die
4188           komplette Zeile, in der er steht.</para>
4189         </sect3>
4190       </sect2>
4191
4192       <sect2 id="dokumentenvorlagen-und-variablen.markup">
4193         <title>Markup-Code zur Textformatierung innerhalb von
4194         Formularen</title>
4195
4196         <para>Wenn der Benutzer innhalb von Formularen in kivitendo Text
4197         anders formatiert haben möchte, so ist dies begrenzt möglich.
4198         kivitendo unterstützt die Textformatierung mit HTML-ähnlichen Tags.
4199         Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung
4200         Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird
4201         dann automatisch in Anweisungen für das ausgewählte Vorlagenformat
4202         (HTML oder PDF über LaTeX) umgesetzt.</para>
4203
4204         <para>Die unterstützen Formatierungen sind:</para>
4205
4206         <variablelist>
4207           <varlistentry>
4208             <term>&lt;b&gt;Text&lt;/b&gt;</term>
4209
4210             <listitem>
4211               <para>Text wird in Fettdruck gesetzt.</para>
4212             </listitem>
4213           </varlistentry>
4214
4215           <varlistentry>
4216             <term>&lt;i&gt;Text&lt;/i&gt;</term>
4217
4218             <listitem>
4219               <para>Text wird kursiv gesetzt.</para>
4220             </listitem>
4221           </varlistentry>
4222
4223           <varlistentry>
4224             <term>&lt;u&gt;Text&lt;/u&gt;</term>
4225
4226             <listitem>
4227               <para>Text wird unterstrichen.</para>
4228             </listitem>
4229           </varlistentry>
4230
4231           <varlistentry>
4232             <term>&lt;s&gt;Text&lt;/s&gt;</term>
4233
4234             <listitem>
4235               <para>Text wird durchgestrichen. Diese Formatierung ist nicht
4236               bei der Ausgabe als PDF über LaTeX verfügbar.</para>
4237             </listitem>
4238           </varlistentry>
4239
4240           <varlistentry>
4241             <term>&lt;bullet&gt;</term>
4242
4243             <listitem>
4244               <para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
4245               unten).</para>
4246             </listitem>
4247           </varlistentry>
4248         </variablelist>
4249
4250         <para>Der Befehl <command>&lt;bullet&gt;</command> funktioniert
4251         momentan auch nur in Latex-Vorlagen.</para>
4252       </sect2>
4253     </sect1>
4254
4255     <sect1 id="excel-templates">
4256       <title>Excel-Vorlagen</title>
4257
4258       <sect2 id="excel-templates.summary">
4259         <title>Zusammenfassung</title>
4260
4261         <para>Dieses Dokument beschreibt den Mechanismus, mit dem
4262         Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
4263         einhergehen.</para>
4264       </sect2>
4265
4266       <sect2 id="excel-templates.usage">
4267         <title>Bedienung</title>
4268
4269         <para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
4270         werden. Die Konfigurationsoption heißt <varname>excel_templates =
4271         1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
4272
4273         <para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
4274         anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
4275         werden. In den normalen Verkaufsmasken taucht nun
4276         <constant>Excel</constant> als auswählbares Format auf und kann von da
4277         an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
4278
4279         <para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
4280         eine Angebotsvorlage und wird unter dem internen Namen der Angebote
4281         <filename>sales_quotation.xls</filename> gespeichert.</para>
4282       </sect2>
4283
4284       <sect2 id="excel-templates.syntax">
4285         <title>Variablensyntax</title>
4286
4287         <para>Einfache Syntax:
4288         <command>&lt;&lt;varname&gt;&gt;</command></para>
4289
4290         <para>Dabei sind <constant>&lt;&lt;</constant> und
4291         <constant>&gt;&gt;</constant> die Delimiter. Da Excel auf festen
4292         Breiten besteht, kann der Tag künstlich verlängert werden, indem
4293         weitere <constant>&lt;</constant> oder <constant>&gt;</constant>
4294         eingefügt werden. Der Tag muss nicht symmetrisch sein.
4295         Beispiel:</para>
4296
4297         <programlisting>&lt;&lt;&lt;&lt;&lt;varname&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</programlisting>
4298
4299         <para>Um die Limitierung der festen Breite zu reduzieren, können
4300         weitere Variablen in einem Block interpoliert werden. Whitespace wird
4301         dazwishen dann erhalten. Beispiel:</para>
4302
4303         <programlisting>&lt;&lt;&lt;&lt;&lt;varname1 varname2   varname3&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</programlisting>
4304
4305         <para>Die Variablen werden interpoliert, und linksbündig mit
4306         Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
4307         lang, werden überzählige Zeichen abgeschnitten.</para>
4308
4309         <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
4310         der Block mit einem Leerzeichen anfängt. Beispiel:</para>
4311
4312         <programlisting>&lt;&lt;&lt;&lt;&lt;&lt;            varname&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;</programlisting>
4313
4314         <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
4315         Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
4316         entfernt.</para>
4317       </sect2>
4318
4319       <sect2 id="excel-templates.limitations">
4320         <title>Einschränkungen</title>
4321
4322         <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
4323         mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
4324         beschränkt sich daher darauf, Textstellen exakt durch einen anderen
4325         Text zu ersetzen.</para>
4326
4327         <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
4328         <command>&lt;%if%&gt;</command> und
4329         <command>&lt;%foreach%&gt;</command> nicht vorhanden. Der Delimiter
4330         <constant>&lt;% %&gt;</constant> kommt in den Headerinformationen
4331         evtl. vor. Deshalb wurde auf den sichereren Delimiter
4332         <constant>&lt;&lt;</constant> und <constant>&gt;&gt;</constant>
4333         gewechselt.</para>
4334       </sect2>
4335     </sect1>
4336   </chapter>
4337
4338   <chapter>
4339     <title>Entwicklerdokumentation</title>
4340
4341     <sect1 id="devel.globals" xreflabel="Globale Variablen">
4342       <title>Globale Variablen</title>
4343
4344       <sect2>
4345         <title>Wie sehen globale Variablen in Perl aus?</title>
4346
4347         <para>Globale Variablen liegen in einem speziellen namespace namens
4348         "main", der von überall erreichbar ist. Darüber hinaus sind bareword
4349         globs global und die meisten speziellen Variablen sind...
4350         speziell.</para>
4351
4352         <para>Daraus ergeben sich folgende Formen:</para>
4353
4354         <variablelist>
4355           <varlistentry>
4356             <term><literal>$main::form</literal></term>
4357
4358             <listitem>
4359               <para>expliziter Namespace "main"</para>
4360             </listitem>
4361           </varlistentry>
4362
4363           <varlistentry>
4364             <term><literal>$::form</literal></term>
4365
4366             <listitem>
4367               <para>impliziter Namespace "main"</para>
4368             </listitem>
4369           </varlistentry>
4370
4371           <varlistentry>
4372             <term><literal>open FILE, "file.txt"</literal></term>
4373
4374             <listitem>
4375               <para><varname>FILE</varname> ist global</para>
4376             </listitem>
4377           </varlistentry>
4378
4379           <varlistentry>
4380             <term><literal>$_</literal></term>
4381
4382             <listitem>
4383               <para>speziell</para>
4384             </listitem>
4385           </varlistentry>
4386         </variablelist>
4387
4388         <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
4389         Schlüsselwort wie "<function>global</function>", mit dem man
4390         importieren kann. <function>my</function>, <function>our</function>
4391         und <function>local</function> machen was anderes.</para>
4392
4393         <variablelist>
4394           <varlistentry>
4395             <term><literal>my $form</literal></term>
4396
4397             <listitem>
4398               <para>lexikalische Variable, gültig bis zum Ende des
4399               Scopes</para>
4400             </listitem>
4401           </varlistentry>
4402
4403           <varlistentry>
4404             <term><literal>our $form</literal></term>
4405
4406             <listitem>
4407               <para><varname>$form</varname> referenziert ab hier
4408               <varname>$PACKAGE::form</varname>.</para>
4409             </listitem>
4410           </varlistentry>
4411
4412           <varlistentry>
4413             <term><literal>local $form</literal></term>
4414
4415             <listitem>
4416               <para>Alle Änderungen an <varname>$form</varname> werden am Ende
4417               des scopes zurückgesetzt</para>
4418             </listitem>
4419           </varlistentry>
4420         </variablelist>
4421       </sect2>
4422
4423       <sect2>
4424         <title>Warum sind globale Variablen ein Problem?</title>
4425
4426         <para>Das erste Problem ist <productname>FCGI</productname>.</para>
4427
4428         <para><productname>SQL-Ledger</productname> hat fast alles im globalen
4429         namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
4430         Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
4431         aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
4432         Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
4433         Datenbankverbindungen, weil die sehr lange zum Initialisieren
4434         brauchen.</para>
4435
4436         <para>Das zweite Problem ist <function>strict</function>. Unter
4437         <function>strict</function> werden alle Variablen die nicht explizit
4438         mit <function>Package</function>, <function>my</function> oder
4439         <function>our</function> angegeben werden als Tippfehler angemarkert,
4440         dies hat, seit der Einführung, u.a. schon so manche langwierige
4441         Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
4442         angegeben werden, werden die nicht geprüft, und somit kann sich
4443         schnell ein Tippfehler einschleichen.</para>
4444       </sect2>
4445
4446       <sect2>
4447         <title>Kanonische globale Variablen</title>
4448
4449         <para>Um dieses Problem im Griff zu halten gibt es einige wenige
4450         globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
4451         vorgegebenen Eigenschaften, und alles andere sollte anderweitig
4452         umhergereicht werden.</para>
4453
4454         <para>Diese Variablen sind im Moment die folgenden neun:</para>
4455
4456         <itemizedlist>
4457           <listitem>
4458             <para><varname>$::form</varname></para>
4459           </listitem>
4460
4461           <listitem>
4462             <para><varname>%::myconfig</varname></para>
4463           </listitem>
4464
4465           <listitem>
4466             <para><varname>$::locale</varname></para>
4467           </listitem>
4468
4469           <listitem>
4470             <para><varname>$::lxdebug</varname></para>
4471           </listitem>
4472
4473           <listitem>
4474             <para><varname>$::auth</varname></para>
4475           </listitem>
4476
4477           <listitem>
4478             <para><varname>$::lx_office_conf</varname></para>
4479           </listitem>
4480
4481           <listitem>
4482             <para><varname>$::instance_conf</varname></para>
4483           </listitem>
4484
4485           <listitem>
4486             <para><varname>$::dispatcher</varname></para>
4487           </listitem>
4488
4489           <listitem>
4490             <para><varname>$::request</varname></para>
4491           </listitem>
4492         </itemizedlist>
4493
4494         <para>Damit diese nicht erneut als Müllhalde missbraucht werden, im
4495         Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
4496         Eigenschaften (Konventionen):</para>
4497
4498         <sect3>
4499           <title>$::form</title>
4500
4501           <itemizedlist>
4502             <listitem>
4503               <para>Ist ein Objekt der Klasse
4504               "<classname>Form</classname>"</para>
4505             </listitem>
4506
4507             <listitem>
4508               <para>Wird nach jedem Request gelöscht</para>
4509             </listitem>
4510
4511             <listitem>
4512               <para>Muss auch in Tests und Konsolenscripts vorhanden
4513               sein.</para>
4514             </listitem>
4515
4516             <listitem>
4517               <para>Enthält am Anfang eines Requests die Requestparameter vom
4518               User</para>
4519             </listitem>
4520
4521             <listitem>
4522               <para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
4523               cachen, das wird aber momentan absichtlich zerstört</para>
4524             </listitem>
4525           </itemizedlist>
4526
4527           <para><varname>$::form</varname> wurde unter <productname>SQL
4528           Ledger</productname> als Gottobjekt für alles misbraucht. Sämtliche
4529           alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
4530           heißt, alles was einem lieb ist (alle Variablen die einem ans Herz
4531           gewachsen sind), sollte man vor einem Aufruf (!) von zum Beispiel
4532           <function>IS-&gt;retrieve_customer()</function> in Sicherheit
4533           bringen.</para>
4534
4535           <para>Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man
4536           Berechnung in einem bestimmten Format durchführt (SL/Form.pm Zeile
4537           3552, Stand version 2.7beta), um dies hinterher wieder auf den
4538           richtigen Wert zu setzen:</para>
4539
4540           <programlisting>  my $saved_numberformat    = $::myconfig{numberformat};
4541   $::myconfig{numberformat} = $numberformat;
4542   # (...) div Berechnungen
4543   $::myconfig{numberformat} = $saved_numberformat;</programlisting>
4544
4545           <para>Das Objekt der Klasse Form hat leider im Moment noch viele
4546           zentrale Funktionen die vom internen Zustand abhängen, deshalb bitte
4547           nie einfach zerstören oder überschreiben (zumindestens nicht kurz
4548           vor einem Release oder in Absprache über bspw. die devel-Liste ;-).
4549           Es geht ziemlich sicher etwas kaputt.</para>
4550
4551           <para><varname>$::form</varname> ist gleichzeitig der Standard Scope
4552           in den <productname>Template::Toolkit</productname> Templates
4553           außerhalb der Controller: der Ausdruck <function>[% var
4554           %]</function> greift auf <varname>$::form-&gt;{var}</varname> zu.
4555           Unter Controllern ist der Standard Scope anders, da lautet der
4556           Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
4557           normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
4558           <function>&lt;%var%&gt;</function> zeigt auf
4559           <varname>$::form-&gt;{var}</varname>. Nochmal von der anderen Seite
4560           erläutert, innerhalb von (Web-)Templates sieht man häufiger solche
4561           Konstrukte:</para>
4562
4563           <programlisting>[%- IF business %]
4564 # (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
4565 [%- END %]</programlisting>
4566
4567           <para>Entweder wird hier dann $::form-&gt;{business} ausgewertet
4568           oder aber der Funktion
4569           <function>$form-&gt;parse_html_template</function> wird explizit
4570           noch ein zusätzlicher Hash übergeben, der dann auch in den
4571           (Web-)Templates zu Verfügung steht, bspw. so:</para>
4572
4573           <programlisting>$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</programlisting>
4574
4575           <para>Innerhalb von Schleifen wird
4576           <varname>$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</varname>
4577           bevorzugt, wenn vorhanden. Ein Beispiel findet sich in SL/DO.pm,
4578           welches über alle Positionen eines Lieferscheins in Schleife
4579           läuft:</para>
4580
4581           <programlisting>for $i (1 .. $form-&gt;{rowcount}) {
4582   # ...
4583   push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
4584   push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
4585   push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
4586   # ...
4587 }</programlisting>
4588         </sect3>
4589
4590         <sect3>
4591           <title>%::myconfig</title>
4592
4593           <itemizedlist>
4594             <listitem>
4595               <para>Das einzige Hash unter den globalen Variablen</para>
4596             </listitem>
4597
4598             <listitem>
4599               <para>Wird spätestens benötigt wenn auf die Datenbank
4600               zugegriffen wird</para>
4601             </listitem>
4602
4603             <listitem>
4604               <para>Wird bei jedem Request neu erstellt.</para>
4605             </listitem>
4606
4607             <listitem>
4608               <para>Enthält die Userdaten des aktuellen Logins</para>
4609             </listitem>
4610
4611             <listitem>
4612               <para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
4613               extern serialisiert werden, weil da auch der Datenbankzugriff
4614               für diesen user drinsteht.</para>
4615             </listitem>
4616
4617             <listitem>
4618               <para>Enthält unter anderem Listenbegrenzung vclimit,
4619               Datumsformat dateformat und Nummernformat numberformat</para>
4620             </listitem>
4621
4622             <listitem>
4623               <para>Enthält Datenbankzugriffinformationen</para>
4624             </listitem>
4625           </itemizedlist>
4626
4627           <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
4628           ein Userobjekt. Die meisten Funktionen, die etwas anhand des
4629           aktuellen Users entscheiden müssen, befragen
4630           <varname>%::myconfig</varname>. Innerhalb der Anwendungen sind dies
4631           überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
4632           -&gt; <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
4633           Informationen über den Benutzer die über die
4634           Administrator-Schnittstelle (admin.pl) eingegeben wurden.</para>
4635         </sect3>
4636
4637         <sect3>
4638           <title>$::locale</title>
4639
4640           <itemizedlist>
4641             <listitem>
4642               <para>Objekt der Klasse "Locale"</para>
4643             </listitem>
4644
4645             <listitem>
4646               <para>Wird pro Request erstellt</para>
4647             </listitem>
4648
4649             <listitem>
4650               <para>Muss auch für Tests und Scripte immer verfügbar
4651               sein.</para>
4652             </listitem>
4653
4654             <listitem>
4655               <para>Cached intern über Requestgrenzen hinweg benutzte
4656               Locales</para>
4657             </listitem>
4658           </itemizedlist>
4659
4660           <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
4661           Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
4662         </sect3>
4663
4664         <sect3>
4665           <title>$::lxdebug</title>
4666
4667           <itemizedlist>
4668             <listitem>
4669               <para>Objekt der Klasse "LXDebug"</para>
4670             </listitem>
4671
4672             <listitem>
4673               <para>Wird global gecached</para>
4674             </listitem>
4675
4676             <listitem>
4677               <para>Muss immer verfügbar sein, in nahezu allen
4678               Funktionen</para>
4679             </listitem>
4680           </itemizedlist>
4681
4682           <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
4683           bereit, wie "<function>enter_sub</function>" und
4684           "<function>leave_sub</function>", mit denen in den alten Modulen ein
4685           brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
4686           der man die Wallclockzeit seit Requeststart loggen kann, sowie
4687           "<function>message</function>" und "<function>dump</function>" mit
4688           denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
4689           packen kann.</para>
4690
4691           <para>Beispielsweise so:</para>
4692
4693           <programlisting>$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
4694 $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</programlisting>
4695         </sect3>
4696
4697         <sect3>
4698           <title>$::auth</title>
4699
4700           <itemizedlist>
4701             <listitem>
4702               <para>Objekt der Klasse "SL::Auth"</para>
4703             </listitem>
4704
4705             <listitem>
4706               <para>Wird global gecached</para>
4707             </listitem>
4708
4709             <listitem>
4710               <para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
4711             </listitem>
4712
4713             <listitem>
4714               <para>Wird nach jedem Request resettet.</para>
4715             </listitem>
4716           </itemizedlist>
4717
4718           <para><varname>$::auth</varname> stellt Funktionen bereit um die
4719           Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
4720           vom aktuellen User abhängen wird das Objekt aus
4721           Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
4722           Request kurz resettet.</para>
4723         </sect3>
4724
4725         <sect3>
4726           <title>$::lx_office_conf</title>
4727
4728           <itemizedlist>
4729             <listitem>
4730               <para>Objekt der Klasse
4731               "<classname>SL::LxOfficeConf</classname>"</para>
4732             </listitem>
4733
4734             <listitem>
4735               <para>Global gecached</para>
4736             </listitem>
4737
4738             <listitem>
4739               <para>Repräsentation der
4740               <filename>config/kivitendo.conf[.default]</filename>-Dateien</para>
4741             </listitem>
4742           </itemizedlist>
4743
4744           <para>Globale Konfiguration. Configdateien werden zum Start gelesen
4745           und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
4746           das Programm die Konfiguration ändern kann oder sollte.</para>
4747
4748           <para>Beispielsweise ist über den Konfigurationseintrag [debug] die
4749           Debug- und Trace-Log-Datei wie folgt konfiguriert und
4750           verfügbar:</para>
4751
4752           <programlisting>[debug]
4753 file = /tmp/kivitendo-debug.log</programlisting>
4754
4755           <para>ist der Key <varname>file</varname> im Programm als
4756           <varname>$::lx_office_conf-&gt;{debug}{file}</varname>
4757           erreichbar.</para>
4758
4759           <warning>
4760             <para>Zugriff auf die Konfiguration erfolgt im Moment über
4761             Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
4762           </warning>
4763         </sect3>
4764
4765         <sect3>
4766           <title>$::instance_conf</title>
4767
4768           <itemizedlist>
4769             <listitem>
4770               <para>Objekt der Klasse
4771               "<classname>SL::InstanceConfiguration</classname>"</para>
4772             </listitem>
4773
4774             <listitem>
4775               <para>wird pro Request neu erstellt</para>
4776             </listitem>
4777           </itemizedlist>
4778
4779           <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
4780           speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
4781           ist hier eine Mandantendatenbank. Beispielsweise überprüft
4782           <programlisting>$::instance_conf-&gt;get_inventory_system eq 'perpetual'</programlisting>
4783           ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para>
4784         </sect3>
4785
4786         <sect3>
4787           <title>$::dispatcher</title>
4788
4789           <itemizedlist>
4790             <listitem>
4791               <para>Objekt der Klasse
4792               "<varname>SL::Dispatcher</varname>"</para>
4793             </listitem>
4794
4795             <listitem>
4796               <para>wird pro Serverprozess erstellt.</para>
4797             </listitem>
4798
4799             <listitem>
4800               <para>enthält Informationen über die technische Verbindung zum
4801               Server</para>
4802             </listitem>
4803           </itemizedlist>
4804
4805           <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
4806           global gespeichert wird. Wird vermutlich irgendwann in einem anderen
4807           Objekt untergebracht.</para>
4808         </sect3>
4809
4810         <sect3>
4811           <title>$::request</title>
4812
4813           <itemizedlist>
4814             <listitem>
4815               <para>Hashref (evtl später Objekt)</para>
4816             </listitem>
4817
4818             <listitem>
4819               <para>Wird pro Request neu initialisiert.</para>
4820             </listitem>
4821
4822             <listitem>
4823               <para>Keine Unterstruktur garantiert.</para>
4824             </listitem>
4825           </itemizedlist>
4826
4827           <para><varname>$::request</varname> ist ein generischer Platz um
4828           Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
4829           at a distance benutzt werden, sondern um lokales memoizing zu
4830           ermöglichen, das garantiert am Ende des Requests zerstört
4831           wird.</para>
4832
4833           <para>Vieles von dem, was im moment in <varname>$::form</varname>
4834           liegt, sollte eigentlich hier liegen. Die groben
4835           Differentialkriterien sind:</para>
4836
4837           <itemizedlist>
4838             <listitem>
4839               <para>Kommt es vom User, und soll unverändert wieder an den
4840               User? Dann <varname>$::form</varname>, steht da eh schon</para>
4841             </listitem>
4842
4843             <listitem>
4844               <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
4845               Requests gebraucht werden? Dann
4846               <varname>$::request</varname></para>
4847             </listitem>
4848
4849             <listitem>
4850               <para>Muss ich von anderen Teilen des Programms lesend drauf
4851               zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
4852               Wrappermethode</para>
4853             </listitem>
4854           </itemizedlist>
4855         </sect3>
4856       </sect2>
4857
4858       <sect2>
4859         <title>Ehemalige globale Variablen</title>
4860
4861         <para>Die folgenden Variablen waren einmal im Programm, und wurden
4862         entfernt.</para>
4863
4864         <sect3>
4865           <title>$::cgi</title>
4866
4867           <itemizedlist>
4868             <listitem>
4869               <para>war nötig, weil cookie Methoden nicht als
4870               Klassenfunktionen funktionieren</para>
4871             </listitem>
4872
4873             <listitem>
4874               <para>Aufruf als Klasse erzeugt Dummyobjekt was im
4875               Klassennamespace gehalten wird und über Requestgrenzen
4876               leaked</para>
4877             </listitem>
4878
4879             <listitem>
4880               <para>liegt jetzt unter
4881               <varname>$::request-&gt;{cgi}</varname></para>
4882             </listitem>
4883           </itemizedlist>
4884         </sect3>
4885
4886         <sect3>
4887           <title>$::all_units</title>
4888
4889           <itemizedlist>
4890             <listitem>
4891               <para>war nötig, weil einige Funktionen in Schleifen zum Teil
4892               ein paar hundert mal pro Request eine Liste der Einheiten
4893               brauchen, und de als Parameter durch einen Riesenstack von
4894               Funktionen geschleift werden müssten.</para>
4895             </listitem>
4896
4897             <listitem>
4898               <para>Liegt jetzt unter
4899               <varname>$::request-&gt;{cache}{all_units}</varname></para>
4900             </listitem>
4901
4902             <listitem>
4903               <para>Wird nur in
4904               <function>AM-&gt;retrieve_all_units()</function> gesetzt oder
4905               gelesen.</para>
4906             </listitem>
4907           </itemizedlist>
4908         </sect3>
4909
4910         <sect3>
4911           <title>%::called_subs</title>
4912
4913           <itemizedlist>
4914             <listitem>
4915               <para>wurde benutzt um callsub deep recursions
4916               abzufangen.</para>
4917             </listitem>
4918
4919             <listitem>
4920               <para>Wurde entfernt, weil callsub nur einen Bruchteil der
4921               möglichen Rekursioenen darstellt, und da nie welche
4922               auftreten.</para>
4923             </listitem>
4924
4925             <listitem>
4926               <para>komplette recursion protection wurde entfernt.</para>
4927             </listitem>
4928           </itemizedlist>
4929         </sect3>
4930       </sect2>
4931     </sect1>
4932
4933     <sect1 id="devel.fcgi">
4934       <title>Entwicklung unter FastCGI</title>
4935
4936       <sect2 id="devel.fcgi.general">
4937         <title>Allgemeines</title>
4938
4939         <para>Wenn Änderungen in der Konfiguration von kivitendo gemacht
4940         werden, muss der Webserver neu gestartet werden.</para>
4941
4942         <para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
4943         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
4944         müssen folgende Aspekte beachtet werden.</para>
4945       </sect2>
4946
4947       <sect2 id="devel.fcgi.exiting">
4948         <title>Programmende und Ausnahmen</title>
4949
4950         <para>Betrifft die Funktionen <function>warn</function>,
4951         <function>die</function>, <function>exit</function>,
4952         <function>carp</function> und <function>confess</function>.</para>
4953
4954         <para>Fehler, die dass Programm normalerweise sofort beenden (fatale
4955         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
4956         am Laufen zu halten. Man kann mit <function>die</function>,
4957         <function>confess</function> oder <function>carp</function> Fehler
4958         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
4959         eigene <function>$::form-</function>error()&gt; tut im Prinzip das
4960         Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
4961         <function>exit</function> hingegen werden nicht abgefangen.
4962         <function>warn</function> wird direkt nach STDERR, also in Server Log
4963         eine Nachricht schreiben (sofern in der Konfiguration nicht die
4964         Warnungen in das kivitendo Log umgeleitet wurden), und
4965         <function>exit</function> wird die Ausführung beenden.</para>
4966
4967         <para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
4968         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
4969         Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
4970         benutzen, alle anderen Exceptionmechanismen sind ok.</para>
4971       </sect2>
4972
4973       <sect2 id="devel.fcgi.globals">
4974         <title>Globale Variablen</title>
4975
4976         <para>Um zu vermeiden, dass Informationen von einem Request in einen
4977         anderen gelangen, müssen alle globalen Variablen vor einem Request
4978         sauber initialisiert werden. Das ist besonders wichtig im
4979         <varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
4980         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
4981         werden.</para>
4982
4983         <para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
4984         abgetrennten Block, der alle kanonischen globalen Variablen listet und
4985         erklärt. Bitte keine anderen einführen ohne das sauber zu
4986         dokumentieren.</para>
4987
4988         <para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
4989         man sicher geht, dass man die richtige erwischt.</para>
4990       </sect2>
4991
4992       <sect2 id="devel.fcgi.performance">
4993         <title>Performance und Statistiken</title>
4994
4995         <para>Die kritischen Pfade des Programms sind die Belegmasken, und
4996         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
4997         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
4998         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
4999         sind es je nach Menge der definierten Variablen 1-2s. Ab der
5000         Moose/Rose::DB Version sind es 5-6s.</para>
5001
5002         <para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
5003         den kritischen Pfaden, unter 0,15 sonst.</para>
5004       </sect2>
5005
5006       <sect2 id="devel.fcgi.known-issues">
5007         <title>Bekannte Probleme</title>
5008
5009         <sect3 id="devel.fcgi.known-issues.encoding">
5010           <title>Encoding Awareness</title>
5011
5012           <para>UTF-8 kodierte Installationen sind sehr anfällig gegen
5013           fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
5014           falsch kodierte Zeichen eher unwissend, und geben sie einfach
5015           weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
5016           das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
5017           beseitigen.</para>
5018         </sect3>
5019       </sect2>
5020     </sect1>
5021
5022     <sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
5023       <title>SQL-Upgradedateien</title>
5024
5025       <sect2 id="db-upgrade-files.introduction"
5026              xreflabel="Einführung in die Datenbank-Upgradedateien">
5027         <title>Einführung</title>
5028
5029         <para>Der alte Mechanismus für SQL-Upgradescripte, der auf einer
5030         Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
5031         diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele
5032         Entwicklung im stable- und unstable-Baum betrifft.</para>
5033
5034         <para>Dieser Mechanismus wurde für kivitendo 2.4.1 deutlich erweitert.
5035         Es werden weiterhin alle Scripte aus sql/Pg-upgrade ausgeführt.
5036         Zusätzlich gibt es aber ein zweites Verzeichnis, sql/Pg-upgrade2. In
5037         diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren,
5038         die neben den eigentlich auszuführenden SQL- oder Perl-Befehlen einige
5039         Kontrollinformationen enthält.</para>
5040
5041         <para>Neu sind die Kontrollinformationen, die Abhängigkeiten und
5042         Prioritäten definieren können werden, sodass Datenbankscripte zwar in
5043         einer sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER
5044         TABLE" erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE"
5045         angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man
5046         keine Versionsnummern mehr braucht.</para>
5047
5048         <para>kivitendo merkt sich dabei, welches der Upgradescripte in
5049         sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht
5050         erneut aus. Dazu dient die Tabelle "schema_info", die bei der
5051         Anmeldung automatisch angelegt wird.</para>
5052       </sect2>
5053
5054       <sect2 id="db-upgrade-files.format"
5055              xreflabel="Format der Upgradedateien">
5056         <title>Format der Kontrollinformationen</title>
5057
5058         <para>Die Kontrollinformationen sollten sich am Anfang der jeweiligen
5059         Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
5060         hat dabei das folgende Format:</para>
5061
5062         <para>Für SQL-Upgradedateien:</para>
5063
5064         <programlisting>-- @key: value</programlisting>
5065
5066         <para>Für Perl-Upgradedateien:</para>
5067
5068         <programlisting># @key: value</programlisting>
5069
5070         <para>Leerzeichen vor "<varname>value</varname>" werden
5071         entfernt.</para>
5072
5073         <para>Die folgenden Schlüsselworte werden verarbeitet:</para>
5074
5075         <variablelist>
5076           <varlistentry>
5077             <term><varname>tag</varname></term>
5078
5079             <listitem>
5080               <para>Wird zwingend benötigt. Dies ist der "Name" des Upgrades.
5081               Dieser "tag" kann von anderen Kontrolldateien in ihren
5082               Abhängigkeiten verwendet werden (Schlüsselwort
5083               "<varname>depends</varname>"). Der "tag" ist auch der Name, der
5084               in der Datenbank eingetragen wird.</para>
5085
5086               <para>Normalerweise sollte die Kontrolldatei genau so heißen wie
5087               der "tag", nur mit der Endung ".sql" bzw. "pl".</para>
5088
5089               <para>Ein Tag darf nur aus alphanumerischen Zeichen sowie den
5090               Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht
5091               erlaubt und sollten stattdessen mit Unterstrichen ersetzt
5092               werden.</para>
5093             </listitem>
5094           </varlistentry>
5095
5096           <varlistentry>
5097             <term><varname>charset</varname></term>
5098
5099             <listitem>
5100               <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script
5101               geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
5102               Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei
5103               Abwesenheit des Tags der Zeichensatz
5104               "<literal>ISO-8859-15</literal>" angenommen.</para>
5105             </listitem>
5106           </varlistentry>
5107
5108           <varlistentry>
5109             <term><varname>description</varname></term>
5110
5111             <listitem>
5112               <para>Benötigt. Eine Beschreibung, was in diesem Update
5113               passiert. Diese wird dem Benutzer beim eigentlichen
5114               Datenbankupdate angezeigt. Während der Tag in englisch gehalten
5115               sein sollte, sollte die Beschreibung auf Deutsch
5116               erfolgen.</para>
5117             </listitem>
5118           </varlistentry>
5119
5120           <varlistentry>
5121             <term><varname>depends</varname></term>
5122
5123             <listitem>
5124               <para>Optional. Eine mit Leerzeichen getrennte Liste von "tags",
5125               von denen dieses Upgradescript abhängt. kivitendo stellt sicher,
5126               dass die in dieser Liste aufgeführten Scripte bereits
5127               durchgeführt wurden, bevor dieses Script ausgeführt wird.</para>
5128
5129               <para>Abhängigkeiten werden rekursiv betrachtet. Wenn also ein
5130               Script "b" existiert, das von Änderungen in "a" abhängt, und
5131               eine neue Kontrolldatei für "c" erstellt wird, die von
5132               Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den
5133               Tag "b" als Abhängigkeit zu definieren.</para>
5134
5135               <para>Es ist nicht erlaubt, sich selbst referenzierende
5136               Abhängigkeiten zu definieren (z.B. "a" -&gt; "b", "b" -&gt; "c"
5137               und "c" -&gt; "a").</para>
5138             </listitem>
5139           </varlistentry>
5140
5141           <varlistentry>
5142             <term><varname>priority</varname></term>
5143
5144             <listitem>
5145               <para>Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
5146               der Scripte ausgeführt werden, die die gleichen
5147               Abhängigkeitstiefen besitzen. Fehlt dieser Parameter, so wird
5148               der Wert 1000 benutzt.</para>
5149
5150               <para>Dies ist reine Kosmetik. Für echte Reihenfolgen muss
5151               "depends" benutzt werden. kivitendo sortiert die auszuführenden
5152               Scripte zuerst nach der Abhängigkeitstiefe (wenn "z" von "y"
5153               abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von
5154               2, "y" von 1 und "x" von 0. "x" würde hier zuerst ausgeführt,
5155               dann "y", dann "z"), dann nach der Priorität und bei gleicher
5156               Priorität alphabetisch nach dem "tag".</para>
5157             </listitem>
5158           </varlistentry>
5159
5160           <varlistentry>
5161             <term><varname>ignore</varname></term>
5162
5163             <listitem>
5164               <para>Optional. Falls der Wert auf 1 (true) steht, wird das
5165               Skript bei der Anmeldung ignoriert und entsprechend nicht
5166               ausgeführt.</para>
5167             </listitem>
5168           </varlistentry>
5169         </variablelist>
5170       </sect2>
5171
5172       <sect2 id="db-upgrade-files.dbupgrade-tool"
5173              xreflabel="Hilfsscript dbupgrade2_tool.pl">
5174         <title>Hilfsscript dbupgrade2_tool.pl</title>
5175
5176         <para>Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern,
5177         existiert ein Hilfsscript namens
5178         "<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem
5179         kivitendo-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
5180         liest alle Datenbankupgradescripte aus dem Verzeichnis
5181         <filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die
5182         gleichen Methoden wie kivitendo selber, sodass alle Fehlersituationen
5183         von der Kommandozeile überprüft werden können.</para>
5184
5185         <para>Wird dem Script kein weiterer Parameter übergeben, so wird nur
5186         eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
5187         sich aber auch Informationen auf verschiedene Art ausgeben
5188         lassen:</para>
5189
5190         <itemizedlist>
5191           <listitem>
5192             <para>Listenform: "<command>./scripts/dbupgrade2_tool.pl
5193             --list</command>"</para>
5194
5195             <para>Gibt eine Liste aller Scripte aus. Die Liste ist in der
5196             Reihenfolge sortiert, in der kivitendo die Scripte ausführen
5197             würde. Es werden neben der Listenposition der Tag, die
5198             Abhängigkeitstiefe und die Priorität ausgegeben.</para>
5199           </listitem>
5200
5201           <listitem>
5202             <para>Baumform: "<command>./scripts/dbupgrade2_tool.pl
5203             --tree</command>"</para>
5204
5205             <para>Listet alle Tags in Baumform basierend auf den
5206             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von
5207             denen keine anderen abhängen. Die Unterknoten sind Scripte, die
5208             beim übergeordneten Script als Abhängigkeit eingetragen
5209             sind.</para>
5210           </listitem>
5211
5212           <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
5213             <para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl
5214             --rtree</command>"</para>
5215
5216             <para>Listet alle Tags in Baumform basierend auf den
5217             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte mit
5218             der geringsten Abhängigkeitstiefe. Die Unterknoten sind Scripte,
5219             die das übergeordnete Script als Abhängigkeit eingetragen
5220             haben.</para>
5221           </listitem>
5222
5223           <listitem>
5224             <para>Baumform mit Postscriptausgabe:
5225             "<command>./scripts/dbupgrade2_tool.pl
5226             --graphviz</command>"</para>
5227
5228             <para>Benötigt das Tool "<command>graphviz</command>", um mit
5229             seiner Hilfe die <link
5230             linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte
5231             Baumform</link> in eine Postscriptdatei namens
5232             "<filename>db_dependencies.ps</filename>" auszugeben. Dies ist
5233             vermutlich die übersichtlichste Form, weil hierbei jeder Knoten
5234             nur einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen
5235             können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben
5236             werden.</para>
5237           </listitem>
5238
5239           <listitem>
5240             <para>Scripte, von denen kein anderes Script abhängt:
5241             "<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"</para>
5242
5243             <para>Listet die Tags aller Scripte auf, von denen keine anderen
5244             Scripte abhängen.</para>
5245           </listitem>
5246         </itemizedlist>
5247       </sect2>
5248     </sect1>
5249
5250     <sect1 id="translations-languages" xreflabel="Translations and languages">
5251       <title>Translations and languages</title>
5252
5253       <sect2 id="translations-languages.introduction"
5254              xreflabel="Introduction to translations and languages">
5255         <title>Introduction</title>
5256
5257         <note>
5258           <para>Dieser Abschnitt ist in Englisch geschrieben, um
5259           internationalen Übersetzern die Arbeit zu erleichtern.</para>
5260         </note>
5261
5262         <para>This section describes how localization packages in kivitendo
5263         are built. Currently the only language fully supported is German, and
5264         since most of the internal messages are held in English the English
5265         version is usable too.</para>
5266
5267         <para>A stub version of French is included but not functunal at this
5268         point.</para>
5269       </sect2>
5270
5271       <sect2 id="translations-languages.file-structure"
5272              xreflabel="File structure">
5273         <title>File structure</title>
5274
5275         <para>The structure of locales in kivitendo is:</para>
5276
5277         <programlisting>kivitendo/locale/&lt;langcode&gt;/</programlisting>
5278
5279         <para>where &lt;langcode&gt; stands for an abbreviation of the
5280         language package. The builtin packages use two letter <ulink
5281         url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
5282         but the actual name is not relevant for the program and can easily be
5283         extended to <ulink
5284         url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
5285         tags</ulink> (i.e. "en_GB"). In fact the original language packages
5286         from SQL Ledger are named in this way.</para>
5287
5288         <para>In such a language directory the following files are
5289         recognized:</para>
5290
5291         <variablelist>
5292           <varlistentry>
5293             <term>LANGUAGE</term>
5294
5295             <listitem>
5296               <para>This file is mandatory.</para>
5297
5298               <para>The <filename>LANGUAGE</filename> file contains the self
5299               descripted name of the language. It should contain a native
5300               representation first, and in parenthesis an english translation
5301               after that. Example:</para>
5302
5303               <programlisting>Deutsch (German)</programlisting>
5304             </listitem>
5305           </varlistentry>
5306
5307           <varlistentry>
5308             <term>charset</term>
5309
5310             <listitem>
5311               <para>This file should be present.</para>
5312
5313               <para>The <filename>charset</filename> file describes which
5314               charset a language package is written in and applies to all
5315               other language files in the package. It is possible to write
5316               some language packages without an explicit charset, but it is
5317               still strongly recommended. You'll never know in what
5318               environment your language package will be used, and neither
5319               UTF-8 nor Latin1 are guaranteed.</para>
5320
5321               <para>The whole content of this file is a string that can be
5322               recognized as a valid charset encoding. Example:</para>
5323
5324               <programlisting>UTF-8</programlisting>
5325             </listitem>
5326           </varlistentry>
5327
5328           <varlistentry>
5329             <term>all</term>
5330
5331             <listitem>
5332               <para>This file is mandatory.</para>
5333
5334               <para>The central translation file. It is essentially an inline
5335               Perl script autogenerated by <command>locales.pl</command>. To
5336               generate it, generate the directory and the two files mentioned
5337               above, and execute the following command:</para>
5338
5339               <programlisting>scripts/locales.pl &lt;langcode&gt;</programlisting>
5340
5341               <para>Otherwise you can simply copy one of the other languages.
5342               You will be told how many are missing like this:</para>
5343
5344               <programlisting>$ scripts/locales.pl en
5345 English - 0.6% - 2015/2028 missing</programlisting>
5346
5347               <para>A file named "<filename>missing</filename>" will be
5348               generated and can be edited. You can also edit the
5349               "<filename>all</filename>" file directly. Edit everything you
5350               like to fit the target language and execute
5351               <command>locales.pl</command> again. See how the missing words
5352               get fewer.</para>
5353             </listitem>
5354           </varlistentry>
5355
5356           <varlistentry>
5357             <term>Num2text</term>
5358
5359             <listitem>
5360               <para>Legacy code from SQL Ledger. It provides a means for
5361               numbers to be converted into natural language, like
5362               <literal>1523 =&gt; one thousand five hundred twenty
5363               three</literal>. If you want to provide it, it must be inlinable
5364               Perl code which provides a <function>num2text</function> sub. If
5365               an <function>init</function> sub exists it will be executed
5366               first.</para>
5367
5368               <para>Only used in the check and receipt printing module.</para>
5369             </listitem>
5370           </varlistentry>
5371
5372           <varlistentry>
5373             <term>special_chars</term>
5374
5375             <listitem>
5376               <para>kivitendo comes with a lot of interfaces to different
5377               formats, some of which are rather picky with their accepted
5378               charset. The <filename>special_chars</filename> file contains a
5379               listing of chars not suited for different file format and
5380               provides substitutions. It is written in "Simple Ini" style,
5381               containing a block for every file format.</para>
5382
5383               <para>First entry should be the order of substitution for
5384               entries as a whitespace separated list. All entries are
5385               interpolated, so <literal>\n</literal>, <literal>\x20</literal>
5386               and <literal>\\</literal> all work.</para>
5387
5388               <para>After that every entry is a special char that should be
5389               translated when writing text into such a file.</para>
5390
5391               <para>Example:</para>
5392
5393               <programlisting>[Template/XML]
5394 order=&amp; &lt; &gt; \n
5395 &amp;=&amp;amp;
5396 &lt;=&amp;lt;
5397 &gt;=&amp;gt;
5398 \n=&lt;br&gt;</programlisting>
5399
5400               <para>Note the importance of the order in this example.
5401               Substituting &lt; and &gt; befor &amp; would lead to $gt; become
5402               &amp;amp;gt;</para>
5403
5404               <para>For a list of valid formats, see the German
5405               <filename>special_chars</filename> entry. As of this writing the
5406               following are recognized:</para>
5407
5408               <programlisting>HTML
5409 URL@HTML
5410 Template/HTML
5411 Template/XML
5412 Template/LaTeX
5413 Template/OpenDocument
5414 filenames</programlisting>
5415
5416               <para>The last of which is very machine dependant. Remember that
5417               a lot of characters are forbidden by some filesystems, for
5418               exmaple MS Windows doesn't like ':' in its files where Linux
5419               doesn't mind that. If you want the files created with your
5420               language pack to be portable, find all chars that could cause
5421               trouble.</para>
5422             </listitem>
5423           </varlistentry>
5424
5425           <varlistentry>
5426             <term>missing</term>
5427
5428             <listitem>
5429               <para>This file is not a part of the language package
5430               itself.</para>
5431
5432               <para>This is a file generated by
5433               <command>scripts/locales.pl</command> while processing your
5434               locales. It's only to have the missing entries singled out and
5435               does not belong to a language package.</para>
5436             </listitem>
5437           </varlistentry>
5438
5439           <varlistentry>
5440             <term>lost</term>
5441
5442             <listitem>
5443               <para>This file is not a part of the language package
5444               itself.</para>
5445
5446               <para>Another file generated by
5447               <command>scripts/locales.pl</command>. If for any reason a
5448               translation does not appear anymore and can be deleted, it gets
5449               moved here. The last 50 or so entries deleted are saved here in
5450               case you made a typo, so that you don't have to translate
5451               everything again. If a tranlsation is missing, the lost file is
5452               checked first. If you maintain a language package, you might
5453               want to keep this safe somewhere.</para>
5454             </listitem>
5455           </varlistentry>
5456         </variablelist>
5457       </sect2>
5458     </sect1>
5459
5460     <sect1 id="devel.testsuite">
5461       <title>Die kivitendo-Test-Suite</title>
5462
5463       <sect2 id="devel.testsuite.intro">
5464         <title>Einführung</title>
5465
5466         <para>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <literal>Test::More</literal>.</para>
5467
5468         <para>Die grundlegenden Fakten sind:</para>
5469
5470         <itemizedlist>
5471           <listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem>
5472
5473           <listitem><para>Ein Script (bzw. ein Test) in <filename>f/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
5474
5475           <listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
5476
5477           <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>f/</filename>, deren
5478           Dateiname auf <literal>.t</literal> endet.</para></listitem>
5479         </itemizedlist>
5480       </sect2>
5481
5482       <sect2 id="devel.testsuite.prerequisites">
5483         <title>Voraussetzungen</title>
5484
5485         <para>Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:</para>
5486
5487         <itemizedlist>
5488           <listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core:
5489           <literal>perl-Test-Deep</literal>; openSuSE: <literal>perl-Test-Deep</literal>)</para></listitem>
5490         </itemizedlist>
5491       </sect2>
5492
5493       <sect2 id="devel.testsuite.execution">
5494         <title>
5495           Existierende Tests ausführen
5496         </title>
5497
5498         <para>Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt
5499         gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.sh</filename>.</para>
5500
5501         <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.sh</filename> ohne weitere Parameter aus
5502         dem kivitendo-Basisverzeichnis heraus ausführen.</para>
5503
5504         <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.sh</filename>. Beispielsweise:</para>
5505
5506         <programlisting>t/test.sh t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
5507       </sect2>
5508
5509
5510       <sect2 id="devel.testsuite.meaning_of_scripts">
5511         <title>
5512           Bedeutung der verschiedenen Test-Scripte
5513         </title>
5514
5515         <para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch
5516         während der Entwicklung nützliche Tests sind:</para>
5517
5518         <itemizedlist>
5519           <listitem><para><filename>t/001compile.t</filename> -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab</para></listitem>
5520           <listitem><para><filename>t/002goodperl.t</filename> -- überprüft alle Perl-Dateien auf Anwesenheit von '<literal>use strict</literal>'-Anweisungen</para></listitem>
5521           <listitem><para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von <function>system()</function> und <function>exec()</function> auf Gültigkeit</para></listitem>
5522           <listitem><para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien Tab-Zeichen enthalten</para></listitem>
5523           <listitem><para><filename>t/006spelling.t</filename> -- sucht nach häufigen Rechtschreibfehlern</para></listitem>
5524           <listitem><para><filename>t/011pod.t</filename> -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit</para></listitem>
5525         </itemizedlist>
5526
5527         <para>Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.</para>
5528       </sect2>
5529
5530       <sect2 id="devel.testsuite.create_new">
5531         <title>
5532           Neue Test-Scripte erstellen
5533         </title>
5534
5535         <para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende
5536         Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.</para>
5537
5538         <sect3 id="devel.testsuite.ideas_for_non_function_tests">
5539           <title>
5540             Ideen für neue Test-Scripte, die keine konkreten Funktionen testen
5541           </title>
5542
5543           <para> Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:</para>
5544
5545           <itemizedlist>
5546             <listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem>
5547             <listitem><para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)</para></listitem>
5548             <listitem><para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para></listitem>
5549             <listitem><para>Überprüfung auf Leerzeichen am Ende von Zeilen</para></listitem>
5550             <listitem><para>Test, ob alle zu übersetzenden Strings in <filename>locale/de/all</filename> vorhanden sind</para></listitem>
5551             <listitem><para>Test, ob alle Webseiten-Templates in <filename>templates/webpages</filename> mit vom Perl-Modul <literal>Template</literal> compiliert werden können</para></listitem>
5552           </itemizedlist>
5553         </sect3>
5554
5555         <sect3 id="devel.testsuite.directory_and_test_names">
5556           <title>
5557             Konvention für Verzeichnis- und Dateinamen
5558           </title>
5559
5560           <para>Es gibt momentan eine wenige Richtlinien, wie Test-Scripte zu benennen sind. Bitte die folgenden Punkte als Richtlinie betrachten und ihnen soweit es geht folgen:</para>
5561
5562           <itemizedlist>
5563             <listitem><para>Die Dateiendung muss <filename>.t</filename> lauten.</para></listitem>
5564
5565             <listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
5566             <filename>bad_function_params.t</filename>).</para></listitem>
5567
5568             <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen
5569             (beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem>
5570
5571             <listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist
5572             (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.</para></listitem>
5573           </itemizedlist>
5574         </sect3>
5575
5576         <sect3 id="devel.testsuite.minimal_example">
5577           <title>
5578             Minimales Skelett für eigene Scripte
5579           </title>
5580
5581           <para>Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:</para>
5582
5583           <programlisting>use Test::More tests =&gt; 0;
5584
5585 use lib 't';
5586
5587 use Support::TestSetup;
5588
5589 Support::TestSetup::login();</programlisting>
5590
5591           <para>Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie
5592           <varname>$::auth</varname>, <varname>$::form</varname> oder <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei
5593           <filename>config/kivitendo.conf</filename> im Abschnitt <literal>testing.login</literal> ein gültiger Login-Name eingetragen
5594           sein. Dieser wird für die Datenbankverbindung benötigt.</para>
5595
5596           <para>Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile <code>Support::TestSetup::login();</code>
5597           weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.</para>
5598         </sect3>
5599       </sect2>
5600     </sect1>
5601
5602     <sect1 id="devel.style-guide">
5603       <title>Stil-Richtlinien</title>
5604
5605       <para>Die folgenden Regeln haben das Ziel, den Code möglichst gut les-
5606       und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich
5607       eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden
5608       wird (Stichworte "Klammern" oder "Hash-Keys").</para>
5609
5610       <para>Diese Regeln sind keine Schikane sondern erleichtern allen das
5611       Leben!</para>
5612
5613       <para>Jeder, der einen Patch schickt, sollte seinen Code vorher
5614       überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
5615       nicht.</para>
5616
5617       <orderedlist>
5618         <listitem>
5619           <para>Es werden keine echten Tabs sondern Leerzeichen
5620           verwendet.</para>
5621         </listitem>
5622
5623         <listitem>
5624           <para>Die Einrückung beträgt zwei Leerzeichen. Beispiel:</para>
5625
5626           <programlisting>foreach my $row (@data) {
5627   if ($flag) {
5628     # do something with $row
5629   }
5630
5631   if ($use_modules) {
5632     $row-&gt;{modules} = MODULE-&gt;retrieve(
5633       id   =&gt; $row-&gt;{id},
5634       date =&gt; $use_now ? localtime() : $row-&gt;{time},
5635     );
5636   }
5637
5638   $report-&gt;add($row);
5639 }</programlisting>
5640         </listitem>
5641
5642         <listitem>
5643           <para>Öffnende geschweifte Klammern befinden sich auf der gleichen
5644           Zeile wie der letzte Befehl. Beispiele:</para>
5645
5646           <programlisting>sub debug {
5647   ...
5648 }</programlisting>
5649
5650           <para>oder</para>
5651
5652           <programlisting>if ($form-&gt;{item_rows} &gt; 0) {
5653   ...
5654 }</programlisting>
5655         </listitem>
5656
5657         <listitem>
5658           <para>Schließende geschweifte Klammern sind so weit eingerückt wie
5659           der Befehl / die öffnende schließende Klammer, die den Block
5660           gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen
5661           Beispiele wie bei 3. gelten.</para>
5662         </listitem>
5663
5664         <listitem>
5665           <para>Die Wörter "<function>else</function>",
5666           "<function>elsif</function>", "<function>while</function>" befinden
5667           sich auf der gleichen Zeile wie schließende geschweifte Klammern.
5668           Beispiele:</para>
5669
5670           <programlisting>if ($form-&gt;{sum} &gt; 1000) {
5671   ...
5672 } elsif ($form-&gt;{sum} &gt; 0) {
5673   ...
5674 } else {
5675   ...
5676 }
5677
5678 do {
5679   ...
5680 } until ($a &gt; 0);</programlisting>
5681         </listitem>
5682
5683         <listitem>
5684           <para>Parameter von Funktionsaufrufen müssen mit runden Klammern
5685           versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
5686           und grep-ähnliche Operatoren. Beispiel:</para>
5687
5688           <programlisting>$main::lxdebug-&gt;message("Could not find file.");
5689 %options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</programlisting>
5690         </listitem>
5691
5692         <listitem>
5693           <para>Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:</para>
5694
5695           <para>Generell gilt: Hashkeys und Arrayindices sollten nicht durch
5696           Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
5697           Blöcke schon. Beispiel:</para>
5698
5699           <programlisting>if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
5700   ...
5701 }
5702
5703 $array[$i + 1]             = 4;
5704 $form-&gt;{sum}              += $form-&gt;{"row_$i"};
5705 $form-&gt;{ $form-&gt;{index} } += 1;
5706
5707 map { $form-&gt;{sum} += $form-&gt;{"row_$_"} } 1..$rowcount;</programlisting>
5708         </listitem>
5709
5710         <listitem>
5711           <para>Mehrzeilige Befehle</para>
5712
5713           <orderedlist>
5714             <listitem>
5715               <para>Werden die Parameter eines Funktionsaufrufes auf mehrere
5716               Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
5717               werden, in der die ersten Funktionsparameter in der ersten Zeile
5718               stehen. Beispiel:</para>
5719
5720               <programlisting>$sth = $dbh-&gt;prepare("SELECT * FROM some_table WHERE col = ?",
5721                     $form-&gt;{some_col_value});</programlisting>
5722             </listitem>
5723
5724             <listitem>
5725               <para>Ein Spezialfall ist der ternäre Oprator "?:", der am
5726               besten in einer übersichtlichen Tabellenstruktur organisiert
5727               wird. Beispiel:</para>
5728
5729               <programlisting>my $rowcount = $form-&gt;{"row_$i"} ? $i
5730              : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
5731              :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</programlisting>
5732             </listitem>
5733           </orderedlist>
5734         </listitem>
5735
5736         <listitem>
5737           <para>Kommentare</para>
5738
5739           <orderedlist>
5740             <listitem>
5741               <para>Kommentare, die alleine in einer Zeile stehen, sollten
5742               soweit wie der Code eingerückt sein.</para>
5743             </listitem>
5744
5745             <listitem>
5746               <para>Seitliche hängende Kommentare sollten einheitlich
5747               formatiert werden.</para>
5748             </listitem>
5749
5750             <listitem>
5751               <para>Sämtliche Kommentare und Sonstiges im Quellcode ist bitte
5752               auf Englisch zu verfassen. So wie ich keine Lust habe,
5753               französischen Quelltext zu lesen, sollte auch der kivitendo
5754               Quelltext für nicht-Deutschsprachige lesbar sein.
5755               Beispiel:</para>
5756
5757               <programlisting>my $found = 0;
5758 while (1) {
5759   last if $found;
5760
5761   # complicated check
5762   $found = 1 if //
5763 }
5764
5765 $i  = 0        # initialize $i
5766 $n  = $i;      # save $i
5767 $i *= $const;  # do something crazy
5768 $i  = $n;      # recover $i</programlisting>
5769             </listitem>
5770           </orderedlist>
5771         </listitem>
5772
5773         <listitem>
5774           <para>Hashkeys sollten nur in Anführungszeichen stehen, wenn die
5775           Interpolation gewünscht ist. Beispiel:</para>
5776
5777           <programlisting>$form-&gt;{sum}      = 0;
5778 $form-&gt;{"row_$i"} = $form-&gt;{"row_$i"} - 5;
5779 $some_hash{42}    = 54;</programlisting>
5780         </listitem>
5781
5782         <listitem>
5783           <para>Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen
5784           unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
5785           wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in
5786           grossen Tabellen), dann ist Lesbarkeit vorzuziehen.</para>
5787
5788           <para>Als Beispiel sei die Funktion
5789           <function>print_options</function> aus
5790           <filename>bin/mozilla/io.pl</filename> angeführt.</para>
5791         </listitem>
5792
5793         <listitem>
5794           <para>Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind
5795           unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs
5796           verfälschen.</para>
5797
5798           <para>Emacs und vim haben beide recht einfache Methoden zur
5799           Entfernung von trailing whitespace. Emacs kennt das Kommande
5800           <command>nuke-trailing-whitespace</command>, vim macht das gleiche
5801           manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
5802           BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern
5803           gebunden.</para>
5804         </listitem>
5805
5806         <listitem>
5807           <para>Es wird kein <command>perltidy</command> verwendet.</para>
5808
5809           <para>In der Vergangenheit wurde versucht,
5810           <command>perltidy</command> zu verwenden, um einen einheitlichen
5811           Stil zu erlangen. Es hat sich aber gezeigt, dass
5812           <command>perltidy</command>s sehr eigenwilliges Verhalten, was
5813           Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für
5814           den Interessierten sind hier die
5815           <command>perltidy</command>-Optionen, die grob den beschriebenen
5816           Richtlinien entsprechen:</para>
5817
5818           <programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
5819 -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
5820 -lp -vt=1 -vtc=1</programlisting>
5821         </listitem>
5822
5823         <listitem>
5824           <para><varname>STDERR</varname> ist tabu. Unkonditionale
5825           Debugmeldungen auch.</para>
5826
5827           <para>kivitendo bietet mit dem Modul <classname>LXDebug</classname>
5828           einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
5829           Grund, nach <varname>STDERR</varname> zu schreiben.</para>
5830
5831           <para>Die <classname>LXDebug</classname>-Methode
5832           "<function>message</function>" nimmt als ersten Paramter außerdem
5833           eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer
5834           angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden
5835           und werden in den meisten Fällen auch vom Repository
5836           zurückgewiesen.</para>
5837         </listitem>
5838
5839         <listitem>
5840           <para>Alle neuen Module müssen use strict verwenden.</para>
5841
5842           <para><varname>$form</varname>, <varname>$auth</varname>,
5843           <varname>$locale</varname>, <varname>$lxdebug</varname> und
5844           <varname>%myconfig</varname> werden derzeit aus dem main package
5845           importiert (siehe <xref linkend="devel.globals" />. Alle anderen
5846           Konstrukte sollten lexikalisch lokal gehalten werden.</para>
5847         </listitem>
5848       </orderedlist>
5849     </sect1>
5850
5851     <sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
5852       <title>Dokumentation erstellen</title>
5853
5854       <sect2 id="devel.build-doc.introduction">
5855         <title>Einführung</title>
5856
5857         <para>Diese Dokumentation ist in <productname>DocBook</productname>
5858         XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor.
5859         Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen
5860         Editor nutzt, der spezielle Unterstützung für
5861         <productname>DocBook</productname> mitbringt. Wir empfehlen dafür den
5862         <ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
5863         Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos
5864         ist.</para>
5865       </sect2>
5866
5867       <sect2 id="devel.build-doc.required-software">
5868         <title>Benötigte Software</title>
5869
5870         <para>Bei <productname>DocBook</productname> ist Prinzip, dass
5871         ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden
5872         dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML
5873         erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script
5874         <command>scripts/build_doc.sh</command>.</para>
5875
5876         <para>Das Script benötigt zur Konvertierung verschiedene
5877         Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt
5878         werden:</para>
5879
5880         <itemizedlist>
5881           <listitem>
5882             <para><ulink
5883             url="http://www.oracle.com/technetwork/java/index.html">Java</ulink>
5884             in einer halbwegs aktuellen Version</para>
5885           </listitem>
5886
5887           <listitem>
5888             <para>Das Java-Build-System <ulink
5889             url="http://ant.apache.org/">Apache Ant</ulink></para>
5890           </listitem>
5891
5892           <listitem>
5893             <para>Das Dokumentations-System Dobudish für
5894             <productname>DocBook</productname> 4.5, eine Zusammenstellung
5895             diverser Stylesheets und Grafiken zur Konvertierung von
5896             <productname>DocBook</productname> XML in andere Formate. Das
5897             Paket, das benötigt wird, ist zum Zeitpunkt der
5898             Dokumentationserstellung
5899             <filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
5900             url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink>
5901             bereitsteht.</para>
5902           </listitem>
5903         </itemizedlist>
5904
5905         <para>Apache Ant sowie ein dazu passendes Java Runtime Environment
5906         sind auf allen gängigen Plattformen verfügbar. Beispiel für
5907         Debian/Ubuntu:</para>
5908
5909         <programlisting>apt-get install ant openjdk-7-jre</programlisting>
5910
5911         <para>Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis
5912         <filename>doc/build</filename> entpackt werden. Beispiel unter der
5913         Annahme, das <productname>Dobudish</productname> in
5914         <filename>$HOME/Downloads</filename> heruntergeladen wurde:</para>
5915
5916         <programlisting>cd doc/build
5917 unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
5918       </sect2>
5919
5920       <sect2 id="devel.build-doc.build">
5921         <title>PDFs und HTML-Seiten erstellen</title>
5922
5923         <para>Die eigentliche Konvertierung erfolgt nach Installation der
5924         benötigten Software mit einem einfachen Aufruf direkt aus dem
5925         kivitendo-Installationsverzeichnis heraus:</para>
5926
5927         <programlisting>./scripts/build_doc.sh</programlisting>
5928       </sect2>
5929
5930       <sect2 id="devel.build-doc.repository">
5931         <title>Einchecken in das Git-Repository</title>
5932
5933         <para>Sowohl die XML-Datei als auch die erzeugten PDF- und
5934         HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass
5935         nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut
5936         und alles zusammen in einem Commit eingecheckt werden sollten.</para>
5937
5938         <para>Die "<filename>dobudish</filename>"-Verzeichnisse bzw.
5939         symbolischen Links gehören hingegen nicht in das Repository.</para>
5940       </sect2>
5941     </sect1>
5942   </chapter>
5943 </book>