Mandantenkonfiguration: Changelog und Hinweis in der Doku.
[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" (read-only)
1518         angezeigt. Unter <guimenu>System</guimenu>
1519         -&gt; <guisubmenu>Mandantenkonfiguration</guisubmenu> können
1520         die Einstellungen auch geändert werden. Dabei ist zu beachten,
1521         dass eine Änderung vorhandene Daten so belässt und damit
1522         evtl. die Ergebnisse verfälscht. Dies gilt vor Allem für die
1523         Warenbuchungsmethode (siehe auch
1524         <link linkend="config.eur.inventory-system-perpetual">
1525         Bemerkungen zu Bestandsmethode</link>).</para>
1526       </sect2>
1527
1528       <sect2 id="config.eur.inventory-system-perpetual">
1529         <title>Bemerkungen zu Bestandsmethode</title>
1530
1531         <para>Die Bestandsmethode ist eigentlich eine sehr elegante Methode,
1532         funktioniert in kivitendo aber nur unter bestimmten Bedingungen:
1533         Voraussetzung ist, daß auch immer alle Einkaufsrechnungen gepflegt
1534         werden, und man beim Jahreswechsel nicht mit einer leeren Datenbank
1535         anfängt, da bei jedem Verkauf anhand der gesamten Rechnungshistorie
1536         der Einkaufswert der Ware nach dem FIFO-Prinzip aus den
1537         Einkaufsrechnungen berechnet wird.</para>
1538
1539         <para>Die Bestandsmethode kann vom Prinzip her also nur funktioneren,
1540         wenn man mit den Buchungen bei Null anfängt, und man kann auch nicht
1541         im laufenden Betrieb von der Aufwandsmethode zur Bestandsmethode
1542         wechseln.</para>
1543       </sect2>
1544
1545       <sect2 id="config.eur.knonw-issues">
1546         <title>Bekannte Probleme</title>
1547
1548         <para>Bei bestimmten Berichten kann man derzeit noch inviduell
1549         einstellen, ob man nach Ist- oder Sollversteuerung auswertet, und es
1550         werden im Code Variablen wie $accrual oder $cash gesetzt. Diese
1551         Codestellen wurden noch nicht angepasst, sondern nur die, wo bisher
1552         die Konfigurationsvariable
1553         <varname>$::lx_office_conf{system}-&gt;{eur}</varname> ausgewertet
1554         wurde.</para>
1555
1556         <para>Es fehlen Hilfetext beim Neuanlegen eines Mandanten, was die
1557         Optionen bewirken, z.B. mit zwei Standardfällen.</para>
1558       </sect2>
1559     </sect1>
1560
1561     <sect1 id="config.skr04-update-3804">
1562       <title>SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</title>
1563
1564       <sect2 id="config.skr04-update-3804.introduction">
1565         <title>Einführung</title>
1566
1567         <para>Die Umsatzsteuerumstellung auf 19% für SKR04 für die
1568         Steuerschlüssel "EU ohne USt-ID Nummer" ist erst 2010 erfolgt.
1569         kivitendo beinhaltet ein Upgradeskript, das das Konto 3804 automatisch
1570         erstellt und die Steuereinstellungen korrekt einstellt. Hat der
1571         Benutzer aber schon selber das Konto 3804 angelegt, oder gab es schon
1572         Buchungen im Zeitraum nach dem 01.01.2007 auf das Konto 3803, wird das
1573         Upgradeskript vorsichtshalber nicht ausgeführt, da der Benutzer sich
1574         vielleicht schon selbst geholfen hat und mit seinen Änderungen
1575         zufrieden ist. Die korrekten Einstellungen kann man aber auch per Hand
1576         ausführen. Nachfolgend werden die entsprechenden Schritte anhand von
1577         Screenshots dargestellt.</para>
1578
1579         <para>Für den Fall, daß Buchungen mit der Steuerschlüssel "EU ohne
1580         USt.-IdNr." nach dem 01.01.2007 erfolgt sind, ist davon auszugehen,
1581         dass diese mit dem alten Umsatzsteuersatz von 16% gebucht worden sind,
1582         und diese Buchungen sollten entsprechend kontrolliert werden.</para>
1583       </sect2>
1584
1585       <sect2 id="config.skr04-update-3804.create-chart">
1586         <title>Konto 3804 manuell anlegen</title>
1587
1588         <para>Die folgenden Schritte sind notwendig, um das Konto manuell
1589         anzulegen und zu konfigurieren. Zuerst wird in
1590         <guimenu>System</guimenu> -&gt;
1591         <guisubmenu>Kontenübersicht</guisubmenu> -&gt; <guimenuitem>Konto
1592         erfassen</guimenuitem> das Konto angelegt.</para>
1593
1594         <screenshot>
1595           <screeninfo>Konto 3804 erfassen</screeninfo>
1596
1597           <mediaobject>
1598             <imageobject>
1599               <imagedata fileref="images/skr04-update-3804/konto3804.png" />
1600             </imageobject>
1601           </mediaobject>
1602         </screenshot>
1603
1604         <para>
1605          Als Zweites muss Steuergruppe 13 für Konto 3803 angepasst werden. Dazu unter <guimenu>System</guimenu> -&gt;
1606          <guisubmenu>Steuern</guisubmenu> -&gt; <guimenuitem>Bearbeiten</guimenuitem> den Eintrag mit Steuerschlüssel 13 auswählen und ihn
1607          wie im folgenden Screenshot angezeigt anpassen.
1608         </para>
1609
1610         <screenshot>
1611           <screeninfo>Steuerschlüssel 13 für 3803 (16%) anpassen</screeninfo>
1612
1613           <mediaobject>
1614             <imageobject>
1615               <imagedata fileref="images/skr04-update-3804/steuer3803.png" />
1616             </imageobject>
1617           </mediaobject>
1618         </screenshot>
1619
1620         <para>
1621          Als Drittes wird ein neuer Eintrag mit Steuerschlüssel 13 für Konto 3804 (19%) angelegt. Dazu unter <guimenu>System</guimenu> -&gt;
1622          <guisubmenu>Steuern</guisubmenu> -&gt; <guimenuitem>Erfassen</guimenuitem> auswählen und die Werte aus dem Screenshot übernehmen.
1623         </para>
1624
1625         <screenshot>
1626           <screeninfo>Steuerschlüssel 13 für 3804 (19%) anlegen</screeninfo>
1627
1628           <mediaobject>
1629             <imageobject>
1630               <imagedata fileref="images/skr04-update-3804/steuer3804.png" />
1631             </imageobject>
1632           </mediaobject>
1633         </screenshot>
1634
1635         <para>
1636          Als Nächstes sind alle Konten anzupassen, die als Steuerautomatikkonto die 3803 haben, sodass sie ab dem 1.1.2007 auch
1637          Steuerautomatik auf 3804 bekommen. Dies betrifft in der Standardkonfiguration die Konten 4315 und 4726. Als Beispiel für 4315
1638          müssen Sie dazu unter <guimenu>System</guimenu> -&gt; <guisubmenu>Kontenübersicht</guisubmenu> -&gt; <guimenuitem>Konten
1639          anzeigen</guimenuitem> das Konto 4315 anklicken und die Einstellungen wie im Screenshot gezeigt vornehmen.
1640         </para>
1641
1642         <screenshot>
1643           <screeninfo>Konto 4315 anpassen</screeninfo>
1644
1645           <mediaobject>
1646             <imageobject>
1647               <imagedata fileref="images/skr04-update-3804/konto4315.png" />
1648             </imageobject>
1649           </mediaobject>
1650         </screenshot>
1651
1652         <para>
1653          Als Letztes sollte die Steuerliste unter <guimenu>System</guimenu> -&gt; <guisubmenu>Steuern</guisubmenu> -&gt;
1654          <guimenuitem>Bearbeiten</guimenuitem> kontrolliert werden. Zum Vergleich der Screenshot.
1655         </para>
1656
1657         <screenshot>
1658           <screeninfo>Steuerliste vergleichen</screeninfo>
1659
1660           <mediaobject>
1661             <imageobject>
1662               <imagedata fileref="images/skr04-update-3804/steuerliste.png" />
1663             </imageobject>
1664           </mediaobject>
1665         </screenshot>
1666       </sect2>
1667     </sect1>
1668
1669     <sect1 id="config.client">
1670       <title>Einstellungen pro Mandant</title>
1671
1672       <para>Einige Einstellungen können von einem Benutzer mit dem
1673       <link linkend="Zusammenhänge">Recht</link> "Administration
1674       (Für die Verwaltung der aktuellen Instanz aus einem Userlogin heraus)"
1675       gemacht werden. Diese Einstellungen sind dann für die aktuellen
1676       Mandanten-Datenbank gültig. Die Einstellungen sind
1677       unter <guimenu>System</guimenu>
1678       -&gt; <guisubmenu>Mandantenkonfiguration</guisubmenu> erreichbar.</para>
1679
1680       <para>Bitte beachten Sie die Hinweise zu den einzelnen
1681       Einstellungen. Einige Einstellungen sollten nicht ohne Weiteres
1682       im laufenden Betrieb geändert werden (siehe
1683       auch <link linkend="config.eur.inventory-system-perpetual">Bemerkungen zu
1684       Bestandsmethode</link>).</para>
1685
1686       <para>Die Einstellungen <literal>show_bestbefore</literal>
1687       und <literal>payments_changeable</literal> aus dem
1688       Abschnitt <literal>features</literal> und die Einstellungen im
1689       Abschnitt <literal>datev_check</literal> (sofern schon vorhanden)
1690       der <link linkend="config.config-file">kivitendo-Konfigurationsdatei</link>
1691       werden bei einem Datenbankupdate einer älteren Version automatisch
1692       übernommen. Diese Einträge können danach aus der Konfigurationsdatei
1693       entfernt werden.</para>
1694     </sect1>
1695
1696     <sect1 id="kivitendo-ERP-verwenden">
1697       <title>kivitendo ERP verwenden</title>
1698
1699       <para>Nach erfolgreicher Installation ist der Loginbildschirm unter
1700       folgender URL erreichbar:</para>
1701
1702       <para><ulink
1703       url="http://localhost/kivitendo-erp/login.pl">http://localhost/kivitendo-erp/login.pl</ulink></para>
1704
1705       <para>Die Administrationsseite erreichen Sie unter:</para>
1706
1707       <para><ulink
1708       url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
1709     </sect1>
1710   </chapter>
1711
1712   <chapter id="features" xreflabel="Features und Funktionen">
1713     <title>Features und Funktionen</title>
1714
1715     <sect1 id="features.periodic-invoices"
1716            xreflabel="Wiedekehrende Rechnungen">
1717       <title>Wiederkehrende Rechnungen</title>
1718
1719       <sect2 id="features.periodic-invoices.introduction"
1720              xreflabel="Einführung in wiederkehrende Rechnungen">
1721         <title>Einführung</title>
1722
1723         <para>Wiederkehrende Rechnungen werden als normale Aufträge definiert
1724         und konfiguriert, mit allen dazugehörigen Kunden- und Artikelangaben.
1725         Die konfigurierten Aufträge werden später automatisch in Rechnungen
1726         umgewandelt, so als ob man den Workflow benutzen würde, und auch die
1727         Auftragsnummer wird übernommen, sodass alle wiederkehrenden
1728         Rechnungen, die aus einem Auftrag erstellt wurden, später leicht
1729         wiederzufinden sind.</para>
1730       </sect2>
1731
1732       <sect2 id="features.periodic-invoices.configuration"
1733              xreflabel="Konfiguration von wiederkehrenden Rechnungen">
1734         <title>Konfiguration</title>
1735
1736         <para>Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren,
1737         findet sich beim Bearbeiten des Auftrags ein neuer Knopf
1738         "Konfigurieren", der ein neues Fenster öffnet, in dem man die nötigen
1739         Parameter einstellen kann. Hinter dem Knopf wird außerdem noch
1740         angezeigt, ob der Auftrag als wiederkehrende Rechnung konfiguriert ist
1741         oder nicht.</para>
1742
1743         <para>Folgende Parameter kann man konfigurieren:</para>
1744
1745         <variablelist>
1746           <varlistentry>
1747             <term>Status</term>
1748
1749             <listitem>
1750               <para>Bei aktiven Rechnungen wird automatisch eine Rechnung
1751               erstellt, wenn die Periodizität erreicht ist (z.B. Anfang eines
1752               neuen Monats).</para>
1753
1754               <para>Ist ein Auftrag nicht aktiv, so werden für ihn auch keine
1755               wiederkehrenden Rechnungen erzeugt. Stellt man nach längerer
1756               nicht-aktiver Zeit einen Auftrag wieder auf aktiv, wird beim
1757               nächsten Periodenwechsel für alle Perioden, seit der letzten
1758               aktiven Periode, jeweils eine Rechnung erstellt. Möchte man dies
1759               verhindern, muss man vorher das Startdatum neu setzen.</para>
1760
1761               <para>Für gekündigte Aufträge werden nie mehr Rechnungen
1762               erstellt. Man kann sich diese Aufträge aber gesondert in den
1763               Berichten anzeigen lassen.</para>
1764             </listitem>
1765           </varlistentry>
1766
1767           <varlistentry>
1768             <term>Periodizität</term>
1769
1770             <listitem>
1771               <para>Ob monatlich, quartalsweise oder jährlich auf neue
1772               Rechnungen überprüft werden soll. Für jede Periode seit dem
1773               Startdatum wird überprüft, ob für die Periode (beginnend immer
1774               mit dem ersten Tag der Periode) schon eine Rechnung erstellt
1775               wurde. Unter Umständen können bei einem Startdatum in der
1776               Vergangenheit gleich mehrere Rechnungen erstellt werden.</para>
1777             </listitem>
1778           </varlistentry>
1779
1780           <varlistentry>
1781             <term>Buchen auf</term>
1782
1783             <listitem>
1784               <para>Das Forderungskonto, in der Regel "Forderungen aus
1785               Lieferungen und Leistungen". Das Gegenkonto ergibt sich aus den
1786               Buchungsgruppen der betreffenden Waren.</para>
1787             </listitem>
1788           </varlistentry>
1789
1790           <varlistentry>
1791             <term>Startdatum</term>
1792
1793             <listitem>
1794               <para>ab welchem Datum auf Rechnungserstellung geprüft werden
1795               soll</para>
1796             </listitem>
1797           </varlistentry>
1798
1799           <varlistentry>
1800             <term>Enddatum</term>
1801
1802             <listitem>
1803               <para>ab wann keine Rechnungen mehr erstellt werden
1804               sollen</para>
1805             </listitem>
1806           </varlistentry>
1807
1808           <varlistentry>
1809             <term>Automatische Verlängerung um x Monate</term>
1810
1811             <listitem>
1812               <para>Sollen die wiederkehrenden Rechnungen bei Erreichen des
1813               eingetragenen Enddatums weiterhin erstellt werden, so kann man
1814               hier die Anzahl der Monate eingeben, um die das Enddatum
1815               automatisch nach hinten geschoben wird.</para>
1816             </listitem>
1817           </varlistentry>
1818
1819           <varlistentry>
1820             <term>Drucken</term>
1821
1822             <listitem>
1823               <para>Sind Drucker konfiguriert, so kann man sich die erstellten
1824               Rechnungen auch gleich ausdrucken lassen.</para>
1825             </listitem>
1826           </varlistentry>
1827         </variablelist>
1828
1829         <para>Nach Erstellung der Rechnungen kann eine E-Mail mit
1830         Informationen zu den erstellten Rechnungen verschickt werden.
1831         Konfiguriert wird dies in der <link
1832         linkend="config.config-file.sections-parameters">Konfigurationsdatei</link>
1833         <filename>config/kivitendo.conf</filename> im Abschnitt
1834         <varname>[periodic_invoices]</varname>.</para>
1835       </sect2>
1836
1837       <sect2 id="features.periodic-invoices.reports">
1838         <title>Auflisten</title>
1839
1840         <para>Unter Verkauf-&gt;Berichte-&gt;Aufträge finden sich zwei neue
1841         Checkboxen, "Wiederkehrende Rechnungen aktiv" und "Wiederkehrende
1842         Rechnungen inaktiv", mit denen man sich einen Überglick über die
1843         wiederkehrenden Rechnungen verschaffen kann.</para>
1844       </sect2>
1845
1846       <sect2 id="features.periodic-invoices.task-server">
1847         <title>Erzeugung der eigentlichen Rechnungen</title>
1848
1849         <para>Die zeitliche und periodische Überprüfung, ob eine
1850         wiederkehrende Rechnung automatisch erstellt werden soll, geschieht
1851         durch den <link linkend="config.task-server">Taskserver</link>, einen
1852         externen Dienst, der automatisch beim Start des Servers gestartet
1853         werden sollte.</para>
1854       </sect2>
1855
1856       <sect2 id="features.periodic-invoices.create-for-current-month">
1857         <title>Erste Rechnung für aktuellen Monat erstellen</title>
1858
1859         <para>Will man im laufenden Monat eine monatlich wiederkehrende
1860         Rechnung inkl. des laufenden Monats starten, stellt man das Startdatum
1861         auf den Monatsanfang und wartet ein paar Minuten, bis der Taskserver
1862         den neu konfigurieren Auftrag erkennt und daraus eine Rechnung
1863         generiert hat. Alternativ setzt man das Startdatum auf den
1864         Monatsersten des Folgemonats und erstellt die erste Rechnung direkt
1865         manuell über den Workflow.</para>
1866       </sect2>
1867     </sect1>
1868
1869     <sect1 id="dokumentenvorlagen-und-variablen">
1870       <title>Dokumentenvorlagen und verfügbare Variablen</title>
1871
1872       <sect2 id="dokumentenvorlagen-und-variablen.einführung">
1873         <title>Einführung</title>
1874
1875         <para>Dies ist eine Auflistung der Standard-Dokumentenvorlagen und
1876         aller zur Bearbeitung verfügbaren Variablen. Eine Variable wird in
1877         einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form
1878         <function>&lt;%variablenname%&gt;</function> verwendet wird. Für
1879         LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
1880         (siehe <xref
1881         linkend="dokumentenvorlagen-und-variablen.tag-style" />).</para>
1882
1883         <para>Früher wurde hier nur über LaTeX gesprochen. Inzwischen
1884         unterstützt kivitendo aber auch OpenDocument-Vorlagen. Sofern es nicht
1885         ausdrücklich eingeschränkt wird, gilt das im Folgenden gesagte für
1886         alle Vorlagenarten.</para>
1887
1888         <para>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
1889         verfügbar als hier aufgelistet werden. Die meisten davon können
1890         allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
1891         werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann
1892         diese wie folgt erhalten werden:</para>
1893
1894         <itemizedlist>
1895           <listitem>
1896             <para><filename>SL/Form.pm</filename> öffnen und am Anfang die
1897             Zeile "<command>use Data::Dumper;</command>" einfügen.</para>
1898           </listitem>
1899
1900           <listitem>
1901             <para>In <filename>Form.pm</filename> die Funktion
1902             <function>parse_template</function> suchen und hier die Zeile
1903             <command>print(STDERR Dumper($self));</command> einfügen.</para>
1904           </listitem>
1905
1906           <listitem>
1907             <para>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
1908             ein PDF für eine Rechnung erzeugen.</para>
1909           </listitem>
1910
1911           <listitem>
1912             <para>Im <filename>error.log</filename> Apache steht die Ausgabe
1913             der Variablen <varname>$self</varname> in der Form <varname>'key'
1914             =&gt; 'value',</varname>. Alle <varname>key</varname>s sind
1915             verfügbar.</para>
1916           </listitem>
1917         </itemizedlist>
1918       </sect2>
1919
1920       <sect2 id="dokumentenvorlagen-und-variablen.variablen-ausgeben">
1921         <title>Variablen ausgeben</title>
1922
1923         <para>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
1924         Tags geschrieben werden, also z.B.
1925         <varname>&lt;%variablenname%&gt;</varname>.</para>
1926
1927         <para>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
1928         die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
1929         <varname>&lt;%variablenname FLAG1 FLAG2%&gt;</varname>. Momentan
1930         werden die folgenden Flags unterstützt:</para>
1931
1932         <itemizedlist>
1933           <listitem>
1934             <para><option>NOFORMAT</option> gilt nur für Zahlenwerte und gibt
1935             den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
1936             mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
1937             damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</para>
1938           </listitem>
1939
1940           <listitem>
1941             <para><option>NOESCAPE</option> unterdrückt das Escapen von
1942             Sonderzeichen für die Vorlagensprache. Wenn also in einer
1943             Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
1944             auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
1945             ist dieses Flag sinnvoll.</para>
1946           </listitem>
1947         </itemizedlist>
1948
1949         <para>Beispiel:</para>
1950
1951         <programlisting>&lt;%quototal NOFORMAT%&gt;</programlisting>
1952       </sect2>
1953
1954       <sect2 id="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">
1955         <title>Verwendung in Druckbefehlen</title>
1956
1957         <para>In der Admininstration können Drucker definiert werden. Auch im
1958         dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
1959         und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
1960         den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
1961         <function>`...`</function> nicht zu unerwünschtem Verhalten
1962         führen.</para>
1963
1964         <para>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
1965         für das die Telefonnummer eines Ansprechpartners als Teil der
1966         Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
1967         z.B. wie folgt aussehen:</para>
1968
1969         <programlisting>send_fax --number &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</programlisting>
1970       </sect2>
1971
1972       <sect2 id="dokumentenvorlagen-und-variablen.tag-style"
1973              xreflabel="Anfang und Ende der Tags verändern">
1974         <title>Anfang und Ende der Tags verändern</title>
1975
1976         <para>Der Standardstil für Tags sieht vor, dass ein Tag mit dem
1977         Kleinerzeichen und einem Prozentzeichen beginnt und mit dem
1978         Prozentzeichen und dem Größerzeichen endet, beispielsweise
1979         <function>&lt;%customer%&gt;</function>. Da diese Form aber z.B. in
1980         LaTeX zu Problemen führen kann, weil das Prozentzeichen dort
1981         Kommentare einleitet, kann pro HTML- oder LaTeX-Dokumentenvorlage der
1982         Stil umgestellt werden.</para>
1983
1984         <para>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
1985         Format gültigen Kommentarzeichen anfangen, dann
1986         <function>config:</function> enthalten, die entsprechende Option
1987         setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
1988         enden. Beispiel für LaTeX:</para>
1989
1990         <programlisting>% config: tag-style=($ $)</programlisting>
1991
1992         <para>Dies würde kivitendo dazu veranlassen, Variablen zu ersetzen,
1993         wenn sie wie folgt aussehen: <function>($customer$)</function>. Das
1994         äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</para>
1995
1996         <programlisting>&lt;!-- config: tag-style=($ $) --&gt;</programlisting>
1997       </sect2>
1998
1999       <sect2 id="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">
2000         <title>Zuordnung von den Dateinamen zu den Funktionen</title>
2001
2002         <para>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
2003         welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
2004         "<filename>.ext</filename>" geeignet zu ersetzen:
2005         "<filename>.tex</filename>" für LaTeX-Vorlagen und
2006         "<filename>.odt</filename>" für OpenDocument-Vorlagen.</para>
2007
2008         <variablelist>
2009           <varlistentry>
2010             <term><filename>bin_list.ext</filename></term>
2011
2012             <listitem>
2013               <para>Lagerliste</para>
2014             </listitem>
2015           </varlistentry>
2016
2017           <varlistentry>
2018             <term><filename>check.ext</filename></term>
2019
2020             <listitem>
2021               <para>?</para>
2022             </listitem>
2023           </varlistentry>
2024
2025           <varlistentry>
2026             <term><filename>invoice.ext</filename></term>
2027
2028             <listitem>
2029               <para>Rechnung</para>
2030             </listitem>
2031           </varlistentry>
2032
2033           <varlistentry>
2034             <term><filename>packing_list.ext</filename></term>
2035
2036             <listitem>
2037               <para>Packliste</para>
2038             </listitem>
2039           </varlistentry>
2040
2041           <varlistentry>
2042             <term><filename>pick_list.ext</filename></term>
2043
2044             <listitem>
2045               <para>Sammelliste</para>
2046             </listitem>
2047           </varlistentry>
2048
2049           <varlistentry>
2050             <term><filename>purchase_delivery_order.ext</filename></term>
2051
2052             <listitem>
2053               <para>Lieferschein (Einkauf)</para>
2054             </listitem>
2055           </varlistentry>
2056
2057           <varlistentry>
2058             <term><filename>purcharse_order.ext</filename></term>
2059
2060             <listitem>
2061               <para>Bestellung an Lieferanten</para>
2062             </listitem>
2063           </varlistentry>
2064
2065           <varlistentry>
2066             <term><filename>request_quotation.ext</filename></term>
2067
2068             <listitem>
2069               <para>Anfrage an Lieferanten</para>
2070             </listitem>
2071           </varlistentry>
2072
2073           <varlistentry>
2074             <term><filename>sales_delivery_order.ext</filename></term>
2075
2076             <listitem>
2077               <para>Lieferschein (Verkauf)</para>
2078             </listitem>
2079           </varlistentry>
2080
2081           <varlistentry>
2082             <term><filename>sales_order.ext</filename></term>
2083
2084             <listitem>
2085               <para>Bestellung</para>
2086             </listitem>
2087           </varlistentry>
2088
2089           <varlistentry>
2090             <term><filename>sales_quotation.ext</filename></term>
2091
2092             <listitem>
2093               <para>Angebot an Kunden</para>
2094             </listitem>
2095           </varlistentry>
2096
2097           <varlistentry>
2098             <term><filename>zahlungserinnerung.ext</filename></term>
2099
2100             <listitem>
2101               <para>Mahnung (Dateiname im Programm konfigurierbar)</para>
2102             </listitem>
2103           </varlistentry>
2104
2105           <varlistentry>
2106             <term><filename>zahlungserinnerung_invoice.ext</filename></term>
2107
2108             <listitem>
2109               <para>Rechnung über Mahngebühren (Dateiname im Programm
2110               konfigurierbar)</para>
2111             </listitem>
2112           </varlistentry>
2113         </variablelist>
2114       </sect2>
2115
2116       <sect2 id="dokumentenvorlagen-und-variablen.dateinamen-erweitert">
2117         <title>Sprache, Drucker und E-Mail</title>
2118
2119         <para>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
2120         eingearbeitet. So wird aus der Vorlage
2121         <filename>sales_order.ext</filename> bei Sprache
2122         <function>de</function> und Druckerkürzel <function>lpr2</function>
2123         der Vorlagenname <filename>sales_order_de_lpr2.ext</filename>.
2124         Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
2125         bekommen dann noch das Kürzel <filename>_email</filename>, der
2126         vollständige Vorlagenname wäre dann
2127         <filename>sales_order_email_de_lpr2.ext</filename>. In allen Fällen
2128         kann eine Standarddatei <filename>default.ext</filename> hinterlegt
2129         werden. Diese wird verwendet, wenn keine der anderen Varianten
2130         gefunden wird.</para>
2131
2132         <para>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
2133         der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
2134         verschickt wird, ist:</para>
2135
2136         <orderedlist>
2137           <listitem>
2138             <para><filename>sales_order_email_de_lpr2.tex</filename></para>
2139           </listitem>
2140
2141           <listitem>
2142             <para><filename>sales_order_de_lpr2.tex</filename></para>
2143           </listitem>
2144
2145           <listitem>
2146             <para><filename>sales_order.tex</filename></para>
2147           </listitem>
2148
2149           <listitem>
2150             <para><filename>default.tex</filename></para>
2151           </listitem>
2152         </orderedlist>
2153
2154         <para>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
2155         Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
2156         siehe dazu <xref
2157         linkend="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta" />.</para>
2158       </sect2>
2159
2160       <sect2 id="dokumentenvorlagen-und-variablen.allgemeine-variablen">
2161         <title>Allgemeine Variablen, die in allen Vorlagen vorhanden
2162         sind</title>
2163
2164         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"
2165                xreflabel="Metainformationen zur angeforderten Vorlage">
2166           <title>Metainformationen zur angeforderten Vorlage</title>
2167
2168           <para>Diese Variablen liefern Informationen darüber welche Variante
2169           einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
2170           Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
2171           Formulare einbinden möchten.</para>
2172
2173           <variablelist>
2174             <varlistentry>
2175               <term><varname>template_meta.formname</varname></term>
2176
2177               <listitem>
2178                 <para>Basisname der Vorlage. Identisch mit der <link
2179                 linkend="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">Zurordnung
2180                 zu den Dateinamen</link> ohne die Erweiterung. Ein
2181                 Verkaufsauftrag enthält hier
2182                 <constant>sales_order</constant>.</para>
2183               </listitem>
2184             </varlistentry>
2185
2186             <varlistentry>
2187               <term><varname>template_meta.language.description</varname></term>
2188
2189               <listitem>
2190                 <para>Beschreibung der verwendeten Sprache</para>
2191               </listitem>
2192             </varlistentry>
2193
2194             <varlistentry>
2195               <term><varname>template_meta.language.template_code</varname></term>
2196
2197               <listitem>
2198                 <para>Vorlagenürzel der verwendeten Sprache, identisch mit dem
2199                 Kürzel das im Dateinamen verwendetet wird.</para>
2200               </listitem>
2201             </varlistentry>
2202
2203             <varlistentry>
2204               <term><varname>template_meta.language.output_numberformat</varname></term>
2205
2206               <listitem>
2207                 <para>Zahlenformat der verwendeten Sprache in der Form
2208                 "<constant>1.000,00</constant>". Experimentell! Nur
2209                 interessant für Vorlagen die mit unformatierten Werten
2210                 arbeiten.</para>
2211               </listitem>
2212             </varlistentry>
2213
2214             <varlistentry>
2215               <term><varname>template_meta.language.output_dateformat</varname></term>
2216
2217               <listitem>
2218                 <para>Datumsformat der verwendeten Sprache in der Form
2219                 "<constant>dd.mm.yyyy</constant>". Experimentell! Nur
2220                 interessant für Vorlagen die mit unformatierten Werten
2221                 arbeiten.</para>
2222               </listitem>
2223             </varlistentry>
2224
2225             <varlistentry>
2226               <term><varname>template_meta.format</varname></term>
2227
2228               <listitem>
2229                 <para>Das angeforderte Format. Kann im Moment die Werte
2230                 <constant>pdf</constant>, <constant>postscript</constant>,
2231                 <constant>html</constant>, <constant>opendocument</constant>,
2232                 <constant>opendocument_pdf</constant> und
2233                 <constant>excel</constant> enthalten.</para>
2234               </listitem>
2235             </varlistentry>
2236
2237             <varlistentry>
2238               <term><varname>template_meta.extension</varname></term>
2239
2240               <listitem>
2241                 <para>Dateierweiterung, wie im Dateinamen. Wird aus
2242                 <constant>format</constant> entschieden.</para>
2243               </listitem>
2244             </varlistentry>
2245
2246             <varlistentry>
2247               <term><varname>template_meta.media</varname></term>
2248
2249               <listitem>
2250                 <para>Ausgabemedium. Kann zur Zeit die Werte
2251                 <constant>screen</constant> für Bildschirm,
2252                 <constant>email</constant> für E-Mmail (triggert das
2253                 <constant>_email</constant> Kürzel im Dateinamen),
2254                 <constant>printer</constant> für Drucker, und
2255                 <constant>queue</constant> für Warteschlange enthalten.</para>
2256               </listitem>
2257             </varlistentry>
2258
2259             <varlistentry>
2260               <term><varname>template_meta.printer.description</varname></term>
2261
2262               <listitem>
2263                 <para>Beschreibung des ausgewählten Druckers</para>
2264               </listitem>
2265             </varlistentry>
2266
2267             <varlistentry>
2268               <term><varname>template_meta.printer.template_code</varname></term>
2269
2270               <listitem>
2271                 <para>Vorlagenürzel des ausgewählten Druckers, identisch mit
2272                 dem Kürzel das im Dateinamen verwendetet wird.</para>
2273               </listitem>
2274             </varlistentry>
2275
2276             <varlistentry>
2277               <term><varname>template_meta.tmpfile</varname></term>
2278
2279               <listitem>
2280                 <para>Datei-Prefix für temporäre Dateien.</para>
2281               </listitem>
2282             </varlistentry>
2283           </variablelist>
2284         </sect3>
2285
2286         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.kunden-lieferanten">
2287           <title>Stammdaten von Kunden und Lieferanten</title>
2288
2289           <variablelist>
2290             <varlistentry>
2291               <term><varname>account_number</varname></term>
2292
2293               <listitem>
2294                 <para>Kontonummer</para>
2295               </listitem>
2296             </varlistentry>
2297
2298             <varlistentry>
2299               <term><varname>bank</varname></term>
2300
2301               <listitem>
2302                 <para>Name der Bank</para>
2303               </listitem>
2304             </varlistentry>
2305
2306             <varlistentry>
2307               <term><varname>bank_code</varname></term>
2308
2309               <listitem>
2310                 <para>Bankleitzahl</para>
2311               </listitem>
2312             </varlistentry>
2313
2314             <varlistentry>
2315               <term><varname>bic</varname></term>
2316
2317               <listitem>
2318                 <para>Bank-Identifikations-Code (Bank Identifier Code,
2319                 BIC)</para>
2320               </listitem>
2321             </varlistentry>
2322
2323             <varlistentry>
2324               <term><varname>business</varname></term>
2325
2326               <listitem>
2327                 <para>Kunden-/Lieferantentyp</para>
2328               </listitem>
2329             </varlistentry>
2330
2331             <varlistentry>
2332               <term><varname>city</varname></term>
2333
2334               <listitem>
2335                 <para>Stadt</para>
2336               </listitem>
2337             </varlistentry>
2338
2339             <varlistentry>
2340               <term><varname>contact</varname></term>
2341
2342               <listitem>
2343                 <para>Kontakt</para>
2344               </listitem>
2345             </varlistentry>
2346
2347             <varlistentry>
2348               <term><varname>country</varname></term>
2349
2350               <listitem>
2351                 <para>Land</para>
2352               </listitem>
2353             </varlistentry>
2354
2355             <varlistentry>
2356               <term><varname>cp_email</varname></term>
2357
2358               <listitem>
2359                 <para>Email des Ansprechpartners</para>
2360               </listitem>
2361             </varlistentry>
2362
2363             <varlistentry>
2364               <term><varname>cp_givenname</varname></term>
2365
2366               <listitem>
2367                 <para>Vorname des Ansprechpartners</para>
2368               </listitem>
2369             </varlistentry>
2370
2371             <varlistentry>
2372               <term><varname>cp_greeting</varname></term>
2373
2374               <listitem>
2375                 <para>Anrede des Ansprechpartners</para>
2376               </listitem>
2377             </varlistentry>
2378
2379             <varlistentry>
2380               <term><varname>cp_name</varname></term>
2381
2382               <listitem>
2383                 <para>Name des Ansprechpartners</para>
2384               </listitem>
2385             </varlistentry>
2386
2387             <varlistentry>
2388               <term><varname>cp_phone1</varname></term>
2389
2390               <listitem>
2391                 <para>Telefonnummer 1 des Ansprechpartners</para>
2392               </listitem>
2393             </varlistentry>
2394
2395             <varlistentry>
2396               <term><varname>cp_phone2</varname></term>
2397
2398               <listitem>
2399                 <para>Telefonnummer 2 des Ansprechpartners</para>
2400               </listitem>
2401             </varlistentry>
2402
2403             <varlistentry>
2404               <term><varname>cp_title</varname></term>
2405
2406               <listitem>
2407                 <para>Titel des Ansprechpartners</para>
2408               </listitem>
2409             </varlistentry>
2410
2411             <varlistentry>
2412               <term><varname>creditlimit</varname></term>
2413
2414               <listitem>
2415                 <para>Kreditlimit</para>
2416               </listitem>
2417             </varlistentry>
2418
2419             <varlistentry>
2420               <term><varname>customeremail</varname></term>
2421
2422               <listitem>
2423                 <para>Email des Kunden; nur für Kunden</para>
2424               </listitem>
2425             </varlistentry>
2426
2427             <varlistentry>
2428               <term><varname>customerfax</varname></term>
2429
2430               <listitem>
2431                 <para>Faxnummer des Kunden; nur für Kunden</para>
2432               </listitem>
2433             </varlistentry>
2434
2435             <varlistentry>
2436               <term><varname>customernotes</varname></term>
2437
2438               <listitem>
2439                 <para>Bemerkungen beim Kunden; nur für Kunden</para>
2440               </listitem>
2441             </varlistentry>
2442
2443             <varlistentry>
2444               <term><varname>customernumber</varname></term>
2445
2446               <listitem>
2447                 <para>Kundennummer; nur für Kunden</para>
2448               </listitem>
2449             </varlistentry>
2450
2451             <varlistentry>
2452               <term><varname>customerphone</varname></term>
2453
2454               <listitem>
2455                 <para>Telefonnummer des Kunden; nur für Kunden</para>
2456               </listitem>
2457             </varlistentry>
2458
2459             <varlistentry>
2460               <term><varname>discount</varname></term>
2461
2462               <listitem>
2463                 <para>Rabatt</para>
2464               </listitem>
2465             </varlistentry>
2466
2467             <varlistentry>
2468               <term><varname>email</varname></term>
2469
2470               <listitem>
2471                 <para>Emailadresse</para>
2472               </listitem>
2473             </varlistentry>
2474
2475             <varlistentry>
2476               <term><varname>fax</varname></term>
2477
2478               <listitem>
2479                 <para>Faxnummer</para>
2480               </listitem>
2481             </varlistentry>
2482
2483             <varlistentry>
2484               <term><varname>homepage</varname></term>
2485
2486               <listitem>
2487                 <para>Homepage</para>
2488               </listitem>
2489             </varlistentry>
2490
2491             <varlistentry>
2492               <term><varname>iban</varname></term>
2493
2494               <listitem>
2495                 <para>Internationale Kontonummer (International Bank Account
2496                 Number, IBAN)</para>
2497               </listitem>
2498             </varlistentry>
2499
2500             <varlistentry>
2501               <term><varname>language</varname></term>
2502
2503               <listitem>
2504                 <para>Sprache</para>
2505               </listitem>
2506             </varlistentry>
2507
2508             <varlistentry>
2509               <term><varname>name</varname></term>
2510
2511               <listitem>
2512                 <para>Firmenname</para>
2513               </listitem>
2514             </varlistentry>
2515
2516             <varlistentry>
2517               <term><varname>payment_description</varname></term>
2518
2519               <listitem>
2520                 <para>Name der Zahlart</para>
2521               </listitem>
2522             </varlistentry>
2523
2524             <varlistentry>
2525               <term><varname>payment_terms</varname></term>
2526
2527               <listitem>
2528                 <para>Zahlungskonditionen</para>
2529               </listitem>
2530             </varlistentry>
2531
2532             <varlistentry>
2533               <term><varname>phone</varname></term>
2534
2535               <listitem>
2536                 <para>Telefonnummer</para>
2537               </listitem>
2538             </varlistentry>
2539
2540             <varlistentry>
2541               <term><varname>shiptocity</varname></term>
2542
2543               <listitem>
2544                 <para>Stadt (Lieferadresse) <link
2545                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2546               </listitem>
2547             </varlistentry>
2548
2549             <varlistentry>
2550               <term><varname>shiptocontact</varname></term>
2551
2552               <listitem>
2553                 <para>Kontakt (Lieferadresse) <link
2554                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2555               </listitem>
2556             </varlistentry>
2557
2558             <varlistentry>
2559               <term><varname>shiptocountry</varname></term>
2560
2561               <listitem>
2562                 <para>Land (Lieferadresse) <link
2563                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2564               </listitem>
2565             </varlistentry>
2566
2567             <varlistentry>
2568               <term><varname>shiptodepartment1</varname></term>
2569
2570               <listitem>
2571                 <para>Abteilung 1 (Lieferadresse) <link
2572                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2573               </listitem>
2574             </varlistentry>
2575
2576             <varlistentry>
2577               <term><varname>shiptodepartment2</varname></term>
2578
2579               <listitem>
2580                 <para>Abteilung 2 (Lieferadresse) <link
2581                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2582               </listitem>
2583             </varlistentry>
2584
2585             <varlistentry>
2586               <term><varname>shiptoemail</varname></term>
2587
2588               <listitem>
2589                 <para>Email (Lieferadresse) <link
2590                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2591               </listitem>
2592             </varlistentry>
2593
2594             <varlistentry>
2595               <term><varname>shiptofax</varname></term>
2596
2597               <listitem>
2598                 <para>Fax (Lieferadresse) <link
2599                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2600               </listitem>
2601             </varlistentry>
2602
2603             <varlistentry>
2604               <term><varname>shiptoname</varname></term>
2605
2606               <listitem>
2607                 <para>Firmenname (Lieferadresse) <link
2608                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2609               </listitem>
2610             </varlistentry>
2611
2612             <varlistentry>
2613               <term><varname>shiptophone</varname></term>
2614
2615               <listitem>
2616                 <para>Telefonnummer (Lieferadresse) <link
2617                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2618               </listitem>
2619             </varlistentry>
2620
2621             <varlistentry>
2622               <term><varname>shiptostreet</varname></term>
2623
2624               <listitem>
2625                 <para>Straße und Hausnummer (Lieferadresse) <link
2626                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2627               </listitem>
2628             </varlistentry>
2629
2630             <varlistentry>
2631               <term><varname>shiptozipcode</varname></term>
2632
2633               <listitem>
2634                 <para>Postleitzahl (Lieferadresse) <link
2635                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2636               </listitem>
2637             </varlistentry>
2638
2639             <varlistentry>
2640               <term><varname>street</varname></term>
2641
2642               <listitem>
2643                 <para>Straße und Hausnummer</para>
2644               </listitem>
2645             </varlistentry>
2646
2647             <varlistentry>
2648               <term><varname>taxnumber</varname></term>
2649
2650               <listitem>
2651                 <para>Steuernummer</para>
2652               </listitem>
2653             </varlistentry>
2654
2655             <varlistentry>
2656               <term><varname>ustid</varname></term>
2657
2658               <listitem>
2659                 <para>Umsatzsteuer-Identifikationsnummer</para>
2660               </listitem>
2661             </varlistentry>
2662
2663             <varlistentry>
2664               <term><varname>vendoremail</varname></term>
2665
2666               <listitem>
2667                 <para>Email des Lieferanten; nur für Lieferanten</para>
2668               </listitem>
2669             </varlistentry>
2670
2671             <varlistentry>
2672               <term><varname>vendorfax</varname></term>
2673
2674               <listitem>
2675                 <para>Faxnummer des Lieferanten; nur für Lieferanten</para>
2676               </listitem>
2677             </varlistentry>
2678
2679             <varlistentry>
2680               <term><varname>vendornotes</varname></term>
2681
2682               <listitem>
2683                 <para>Bemerkungen beim Lieferanten; nur für Lieferanten</para>
2684               </listitem>
2685             </varlistentry>
2686
2687             <varlistentry>
2688               <term><varname>vendornumber</varname></term>
2689
2690               <listitem>
2691                 <para>Lieferantennummer; nur für Lieferanten</para>
2692               </listitem>
2693             </varlistentry>
2694
2695             <varlistentry>
2696               <term><varname>vendorphone</varname></term>
2697
2698               <listitem>
2699                 <para>Telefonnummer des Lieferanten; nur für
2700                 Lieferanten</para>
2701               </listitem>
2702             </varlistentry>
2703
2704             <varlistentry>
2705               <term><varname>zipcode</varname></term>
2706
2707               <listitem>
2708                 <para>Postleitzahl</para>
2709               </listitem>
2710             </varlistentry>
2711           </variablelist>
2712
2713           <note id="dokumentenvorlagen-und-variablen.anmerkung-shipto">
2714             <para>Anmerkung: Sind die <varname>shipto*</varname>-Felder in den
2715             Stammdaten nicht eingetragen, so haben die Variablen
2716             <varname>shipto*</varname> den gleichen Wert wie die die
2717             entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich
2718             einige <varname>shipto*</varname>-Variablen so nicht in den
2719             Stammdaten wiederfinden sondern schlicht Kopien der
2720             Lieferdatenvariablen sind (z.B.
2721             <varname>shiptocontact</varname>).</para>
2722           </note>
2723         </sect3>
2724
2725         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-bearbeiter">
2726           <title>Informationen über den Bearbeiter</title>
2727
2728           <variablelist>
2729             <varlistentry>
2730               <term><varname>employee_address</varname></term>
2731
2732               <listitem>
2733                 <para>Adressfeld</para>
2734               </listitem>
2735             </varlistentry>
2736
2737             <varlistentry>
2738               <term><varname>employee_businessnumber</varname></term>
2739
2740               <listitem>
2741                 <para>Firmennummer</para>
2742               </listitem>
2743             </varlistentry>
2744
2745             <varlistentry>
2746               <term><varname>employee_company</varname></term>
2747
2748               <listitem>
2749                 <para>Firmenname</para>
2750               </listitem>
2751             </varlistentry>
2752
2753             <varlistentry>
2754               <term><varname>employee_co_ustid</varname></term>
2755
2756               <listitem>
2757                 <para>Usatzsteuer-Identifikationsnummer</para>
2758               </listitem>
2759             </varlistentry>
2760
2761             <varlistentry>
2762               <term><varname>employee_duns</varname></term>
2763
2764               <listitem>
2765                 <para>DUNS-Nummer</para>
2766               </listitem>
2767             </varlistentry>
2768
2769             <varlistentry>
2770               <term><varname>employee_email</varname></term>
2771
2772               <listitem>
2773                 <para>Email</para>
2774               </listitem>
2775             </varlistentry>
2776
2777             <varlistentry>
2778               <term><varname>employee_fax</varname></term>
2779
2780               <listitem>
2781                 <para>Fax</para>
2782               </listitem>
2783             </varlistentry>
2784
2785             <varlistentry>
2786               <term><varname>employee_name</varname></term>
2787
2788               <listitem>
2789                 <para>voller Name</para>
2790               </listitem>
2791             </varlistentry>
2792
2793             <varlistentry>
2794               <term><varname>employee_signature</varname></term>
2795
2796               <listitem>
2797                 <para>Signatur</para>
2798               </listitem>
2799             </varlistentry>
2800
2801             <varlistentry>
2802               <term><varname>employee_taxnumber</varname></term>
2803
2804               <listitem>
2805                 <para>Steuernummer</para>
2806               </listitem>
2807             </varlistentry>
2808
2809             <varlistentry>
2810               <term><varname>employee_tel</varname></term>
2811
2812               <listitem>
2813                 <para>Telefonnummer</para>
2814               </listitem>
2815             </varlistentry>
2816           </variablelist>
2817         </sect3>
2818
2819         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-verkaeufer">
2820           <title>Informationen über den Bearbeiter</title>
2821
2822           <variablelist>
2823             <varlistentry>
2824               <term><varname>salesman_address</varname></term>
2825
2826               <listitem>
2827                 <para>Adressfeld</para>
2828               </listitem>
2829             </varlistentry>
2830
2831             <varlistentry>
2832               <term><varname>salesman_businessnumber</varname></term>
2833
2834               <listitem>
2835                 <para>Firmennummer</para>
2836               </listitem>
2837             </varlistentry>
2838
2839             <varlistentry>
2840               <term><varname>salesman_company</varname></term>
2841
2842               <listitem>
2843                 <para>Firmenname</para>
2844               </listitem>
2845             </varlistentry>
2846
2847             <varlistentry>
2848               <term><varname>salesman_co_ustid</varname></term>
2849
2850               <listitem>
2851                 <para>Usatzsteuer-Identifikationsnummer</para>
2852               </listitem>
2853             </varlistentry>
2854
2855             <varlistentry>
2856               <term><varname>salesman_duns</varname></term>
2857
2858               <listitem>
2859                 <para>DUNS-Nummer</para>
2860               </listitem>
2861             </varlistentry>
2862
2863             <varlistentry>
2864               <term><varname>salesman_email</varname></term>
2865
2866               <listitem>
2867                 <para>Email</para>
2868               </listitem>
2869             </varlistentry>
2870
2871             <varlistentry>
2872               <term><varname>salesman_fax</varname></term>
2873
2874               <listitem>
2875                 <para>Fax</para>
2876               </listitem>
2877             </varlistentry>
2878
2879             <varlistentry>
2880               <term><varname>salesman_name</varname></term>
2881
2882               <listitem>
2883                 <para>voller Name</para>
2884               </listitem>
2885             </varlistentry>
2886
2887             <varlistentry>
2888               <term><varname>salesman_signature</varname></term>
2889
2890               <listitem>
2891                 <para>Signatur</para>
2892               </listitem>
2893             </varlistentry>
2894
2895             <varlistentry>
2896               <term><varname>salesman_taxnumber</varname></term>
2897
2898               <listitem>
2899                 <para>Steuernummer</para>
2900               </listitem>
2901             </varlistentry>
2902
2903             <varlistentry>
2904               <term><varname>salesman_tel</varname></term>
2905
2906               <listitem>
2907                 <para>Telefonnummer</para>
2908               </listitem>
2909             </varlistentry>
2910           </variablelist>
2911         </sect3>
2912
2913         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-steuern">
2914           <title>Variablen für die einzelnen Steuern</title>
2915
2916           <variablelist>
2917             <varlistentry>
2918               <term><varname>tax</varname></term>
2919
2920               <listitem>
2921                 <para>Steuer</para>
2922               </listitem>
2923             </varlistentry>
2924
2925             <varlistentry>
2926               <term><varname>taxbase</varname></term>
2927
2928               <listitem>
2929                 <para>zu versteuernder Betrag</para>
2930               </listitem>
2931             </varlistentry>
2932
2933             <varlistentry>
2934               <term><varname>taxdescription</varname></term>
2935
2936               <listitem>
2937                 <para>Name der Steuer</para>
2938               </listitem>
2939             </varlistentry>
2940
2941             <varlistentry>
2942               <term><varname>taxrate</varname></term>
2943
2944               <listitem>
2945                 <para>Steuersatz</para>
2946               </listitem>
2947             </varlistentry>
2948           </variablelist>
2949         </sect3>
2950       </sect2>
2951
2952       <sect2 id="dokumentenvorlagen-und-variablen.invoice">
2953         <title>Variablen in Rechnungen</title>
2954
2955         <sect3 id="dokumentenvorlagen-und-variablen.invoice-allgemein">
2956           <title>Allgemeine Variablen</title>
2957
2958           <variablelist>
2959             <varlistentry>
2960               <term><varname>creditremaining</varname></term>
2961
2962               <listitem>
2963                 <para>Verbleibender Kredit</para>
2964               </listitem>
2965             </varlistentry>
2966
2967             <varlistentry>
2968               <term><varname>currency</varname></term>
2969
2970               <listitem>
2971                 <para>Währung</para>
2972               </listitem>
2973             </varlistentry>
2974
2975             <varlistentry>
2976               <term><varname>cusordnumber</varname></term>
2977
2978               <listitem>
2979                 <para>Bestellnummer beim Kunden</para>
2980               </listitem>
2981             </varlistentry>
2982
2983             <varlistentry>
2984               <term><varname>deliverydate</varname></term>
2985
2986               <listitem>
2987                 <para>Lieferdatum</para>
2988               </listitem>
2989             </varlistentry>
2990
2991             <varlistentry>
2992               <term><varname>duedate</varname></term>
2993
2994               <listitem>
2995                 <para>Fälligkeitsdatum</para>
2996               </listitem>
2997             </varlistentry>
2998
2999             <varlistentry>
3000               <term><varname>globalprojectnumber</varname></term>
3001
3002               <listitem>
3003                 <para>Projektnummer des ganzen Beleges</para>
3004               </listitem>
3005             </varlistentry>
3006
3007             <varlistentry>
3008               <term><varname>globalprojectdescription</varname></term>
3009
3010               <listitem>
3011                 <para>Projekbeschreibung des ganzen Beleges</para>
3012               </listitem>
3013             </varlistentry>
3014
3015             <varlistentry>
3016               <term><varname>intnotes</varname></term>
3017
3018               <listitem>
3019                 <para>Interne Bemerkungen</para>
3020               </listitem>
3021             </varlistentry>
3022
3023             <varlistentry>
3024               <term><varname>invdate</varname></term>
3025
3026               <listitem>
3027                 <para>Rechnungsdatum</para>
3028               </listitem>
3029             </varlistentry>
3030
3031             <varlistentry>
3032               <term><varname>invnumber</varname></term>
3033
3034               <listitem>
3035                 <para>Rechnungsnummer</para>
3036               </listitem>
3037             </varlistentry>
3038
3039             <varlistentry>
3040               <term><varname>invtotal</varname></term>
3041
3042               <listitem>
3043                 <para>gesamter Rechnungsbetrag</para>
3044               </listitem>
3045             </varlistentry>
3046
3047             <varlistentry>
3048               <term><varname>notes</varname></term>
3049
3050               <listitem>
3051                 <para>Bemerkungen der Rechnung</para>
3052               </listitem>
3053             </varlistentry>
3054
3055             <varlistentry>
3056               <term><varname>orddate</varname></term>
3057
3058               <listitem>
3059                 <para>Auftragsdatum</para>
3060               </listitem>
3061             </varlistentry>
3062
3063             <varlistentry>
3064               <term><varname>ordnumber</varname></term>
3065
3066               <listitem>
3067                 <para>Auftragsnummer, wenn die Rechnung aus einem Auftrag
3068                 erstellt wurde</para>
3069               </listitem>
3070             </varlistentry>
3071
3072             <varlistentry>
3073               <term><varname>payment_description</varname></term>
3074
3075               <listitem>
3076                 <para>Name der Zahlart</para>
3077               </listitem>
3078             </varlistentry>
3079
3080             <varlistentry>
3081               <term><varname>payment_terms</varname></term>
3082
3083               <listitem>
3084                 <para>Zahlungskonditionen</para>
3085               </listitem>
3086             </varlistentry>
3087
3088             <varlistentry>
3089               <term><varname>quodate</varname></term>
3090
3091               <listitem>
3092                 <para>Angebotsdatum</para>
3093               </listitem>
3094             </varlistentry>
3095
3096             <varlistentry>
3097               <term><varname>quonumber</varname></term>
3098
3099               <listitem>
3100                 <para>Angebotsnummer</para>
3101               </listitem>
3102             </varlistentry>
3103
3104             <varlistentry>
3105               <term><varname>shippingpoint</varname></term>
3106
3107               <listitem>
3108                 <para>Versandort</para>
3109               </listitem>
3110             </varlistentry>
3111
3112             <varlistentry>
3113               <term><varname>shipvia</varname></term>
3114
3115               <listitem>
3116                 <para>Transportmittel</para>
3117               </listitem>
3118             </varlistentry>
3119
3120             <varlistentry>
3121               <term><varname>subtotal</varname></term>
3122
3123               <listitem>
3124                 <para>Zwischensumme aller Posten ohne Steuern</para>
3125               </listitem>
3126             </varlistentry>
3127
3128             <varlistentry>
3129               <term><varname>total</varname></term>
3130
3131               <listitem>
3132                 <para>Restsumme der Rechnung (Summe abzüglich bereits
3133                 bezahlter Posten)</para>
3134               </listitem>
3135             </varlistentry>
3136
3137             <varlistentry>
3138               <term><varname>transaction_description</varname></term>
3139
3140               <listitem>
3141                 <para>Vorgangsbezeichnung</para>
3142               </listitem>
3143             </varlistentry>
3144
3145             <varlistentry>
3146               <term><varname>transdate</varname></term>
3147
3148               <listitem>
3149                 <para>Auftragsdatum wenn die Rechnung aus einem Auftrag
3150                 erstellt wurde</para>
3151               </listitem>
3152             </varlistentry>
3153           </variablelist>
3154         </sect3>
3155
3156         <sect3 id="dokumentenvorlagen-und-variablen.invoice-posten">
3157           <title>Variablen für jeden Posten auf der Rechnung</title>
3158
3159           <variablelist>
3160             <varlistentry>
3161               <term><varname>bin</varname></term>
3162
3163               <listitem>
3164                 <para>Stellage</para>
3165               </listitem>
3166             </varlistentry>
3167
3168             <varlistentry>
3169               <term><varname>description</varname></term>
3170
3171               <listitem>
3172                 <para>Artikelbeschreibung</para>
3173               </listitem>
3174             </varlistentry>
3175
3176             <varlistentry>
3177               <term><varname>discount</varname></term>
3178
3179               <listitem>
3180                 <para>Rabatt als Betrag</para>
3181               </listitem>
3182             </varlistentry>
3183
3184             <varlistentry>
3185               <term><varname>discount_sub</varname></term>
3186
3187               <listitem>
3188                 <para>Zwischensumme mit Rabatt</para>
3189               </listitem>
3190             </varlistentry>
3191
3192             <varlistentry>
3193               <term><varname>drawing</varname></term>
3194
3195               <listitem>
3196                 <para>Zeichnung</para>
3197               </listitem>
3198             </varlistentry>
3199
3200             <varlistentry>
3201               <term><varname>ean</varname></term>
3202
3203               <listitem>
3204                 <para>EAN-Code</para>
3205               </listitem>
3206             </varlistentry>
3207
3208             <varlistentry>
3209               <term><varname>image</varname></term>
3210
3211               <listitem>
3212                 <para>Grafik</para>
3213               </listitem>
3214             </varlistentry>
3215
3216             <varlistentry>
3217               <term><varname>linetotal</varname></term>
3218
3219               <listitem>
3220                 <para>Zeilensumme (Anzahl * Einzelpreis)</para>
3221               </listitem>
3222             </varlistentry>
3223
3224             <varlistentry>
3225               <term><varname>longdescription</varname></term>
3226
3227               <listitem>
3228                 <para>Langtext</para>
3229               </listitem>
3230             </varlistentry>
3231
3232             <varlistentry>
3233               <term><varname>microfiche</varname></term>
3234
3235               <listitem>
3236                 <para>Mikrofilm</para>
3237               </listitem>
3238             </varlistentry>
3239
3240             <varlistentry>
3241               <term><varname>netprice</varname></term>
3242
3243               <listitem>
3244                 <para>Nettopreis</para>
3245               </listitem>
3246             </varlistentry>
3247
3248             <varlistentry>
3249               <term><varname>nodiscount_linetotal</varname></term>
3250
3251               <listitem>
3252                 <para>Zeilensumme ohne Rabatt</para>
3253               </listitem>
3254             </varlistentry>
3255
3256             <varlistentry>
3257               <term><varname>nodiscount_sub</varname></term>
3258
3259               <listitem>
3260                 <para>Zwischensumme ohne Rabatt</para>
3261               </listitem>
3262             </varlistentry>
3263
3264             <varlistentry>
3265               <term><varname>number</varname></term>
3266
3267               <listitem>
3268                 <para>Artikelnummer</para>
3269               </listitem>
3270             </varlistentry>
3271
3272             <varlistentry>
3273               <term><varname>ordnumber_oe</varname></term>
3274
3275               <listitem>
3276                 <para>Auftragsnummer des Originalauftrags, wenn die Rechnung
3277                 aus einem Sammelauftrag erstellt wurde</para>
3278               </listitem>
3279             </varlistentry>
3280
3281             <varlistentry>
3282               <term><varname>p_discount</varname></term>
3283
3284               <listitem>
3285                 <para>Rabatt in Prozent</para>
3286               </listitem>
3287             </varlistentry>
3288
3289             <varlistentry>
3290               <term><varname>partnotes</varname></term>
3291
3292               <listitem>
3293                 <para>Die beim Artikel gespeicherten Bemerkungen</para>
3294               </listitem>
3295             </varlistentry>
3296
3297             <varlistentry>
3298               <term><varname>partsgroup</varname></term>
3299
3300               <listitem>
3301                 <para>Warengruppe</para>
3302               </listitem>
3303             </varlistentry>
3304
3305             <varlistentry>
3306               <term><varname>price_factor</varname></term>
3307
3308               <listitem>
3309                 <para>Der Preisfaktor als Zahl, sofern einer eingestellt
3310                 ist</para>
3311               </listitem>
3312             </varlistentry>
3313
3314             <varlistentry>
3315               <term><varname>price_factor_name</varname></term>
3316
3317               <listitem>
3318                 <para>Der Name des Preisfaktors, sofern einer eingestellt
3319                 ist</para>
3320               </listitem>
3321             </varlistentry>
3322
3323             <varlistentry>
3324               <term><varname>projectnumber</varname></term>
3325
3326               <listitem>
3327                 <para>Projektnummer</para>
3328               </listitem>
3329             </varlistentry>
3330
3331             <varlistentry>
3332               <term><varname>projectdescription</varname></term>
3333
3334               <listitem>
3335                 <para>Projektbeschreibung</para>
3336               </listitem>
3337             </varlistentry>
3338
3339             <varlistentry>
3340               <term><varname>qty</varname></term>
3341
3342               <listitem>
3343                 <para>Anzahl</para>
3344               </listitem>
3345             </varlistentry>
3346
3347             <varlistentry>
3348               <term><varname>reqdate</varname></term>
3349
3350               <listitem>
3351                 <para>Lieferdatum</para>
3352               </listitem>
3353             </varlistentry>
3354
3355             <varlistentry>
3356               <term><varname>runningnumber</varname></term>
3357
3358               <listitem>
3359                 <para>Position auf der Rechnung (1, 2, 3...)</para>
3360               </listitem>
3361             </varlistentry>
3362
3363             <varlistentry>
3364               <term><varname>sellprice</varname></term>
3365
3366               <listitem>
3367                 <para>Verkaufspreis</para>
3368               </listitem>
3369             </varlistentry>
3370
3371             <varlistentry>
3372               <term><varname>serialnumber</varname></term>
3373
3374               <listitem>
3375                 <para>Seriennummer</para>
3376               </listitem>
3377             </varlistentry>
3378
3379             <varlistentry>
3380               <term><varname>tax_rate</varname></term>
3381
3382               <listitem>
3383                 <para>Steuersatz</para>
3384               </listitem>
3385             </varlistentry>
3386
3387             <varlistentry>
3388               <term><varname>transdate_oe</varname></term>
3389
3390               <listitem>
3391                 <para>Auftragsdatum des Originalauftrags, wenn die Rechnung
3392                 aus einem Sammelauftrag erstellt wurde</para>
3393               </listitem>
3394             </varlistentry>
3395
3396             <varlistentry>
3397               <term><varname>unit</varname></term>
3398
3399               <listitem>
3400                 <para>Einheit</para>
3401               </listitem>
3402             </varlistentry>
3403
3404             <varlistentry>
3405               <term><varname>weight</varname></term>
3406
3407               <listitem>
3408                 <para>Gewicht</para>
3409               </listitem>
3410             </varlistentry>
3411           </variablelist>
3412
3413           <para>Für jeden Posten gibt es ein Unterarray mit den Informationen
3414           über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
3415           einer <function>foreach</function>-Schleife ausgegeben werden, da
3416           für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
3417           können. Die Variablen dafür lauten:</para>
3418
3419           <variablelist>
3420             <varlistentry>
3421               <term><varname>make</varname></term>
3422
3423               <listitem>
3424                 <para>Lieferant</para>
3425               </listitem>
3426             </varlistentry>
3427
3428             <varlistentry>
3429               <term><varname>model</varname></term>
3430
3431               <listitem>
3432                 <para>Lieferantenartikelnummer</para>
3433               </listitem>
3434             </varlistentry>
3435           </variablelist>
3436         </sect3>
3437
3438         <sect3 id="dokumentenvorlagen-und-variablen.invoice-zahlungen">
3439           <title>Variablen für die einzelnen Zahlungseingänge</title>
3440
3441           <variablelist>
3442             <varlistentry>
3443               <term><varname>payment</varname></term>
3444
3445               <listitem>
3446                 <para>Betrag</para>
3447               </listitem>
3448             </varlistentry>
3449
3450             <varlistentry>
3451               <term><varname>paymentaccount</varname></term>
3452
3453               <listitem>
3454                 <para>Konto</para>
3455               </listitem>
3456             </varlistentry>
3457
3458             <varlistentry>
3459               <term><varname>paymentdate</varname></term>
3460
3461               <listitem>
3462                 <para>Datum</para>
3463               </listitem>
3464             </varlistentry>
3465
3466             <varlistentry>
3467               <term><varname>paymentmemo</varname></term>
3468
3469               <listitem>
3470                 <para>Memo</para>
3471               </listitem>
3472             </varlistentry>
3473
3474             <varlistentry>
3475               <term><varname>paymentsource</varname></term>
3476
3477               <listitem>
3478                 <para>Beleg</para>
3479               </listitem>
3480             </varlistentry>
3481           </variablelist>
3482         </sect3>
3483
3484         <sect3 id="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc">
3485           <title>Benutzerdefinierte Kunden- und Lieferantenvariablen</title>
3486
3487           <para>Die vom Benutzer definierten Variablen für Kunden und
3488           Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
3489           ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem Präfix
3490           <varname>vc_cvar_</varname> und dem vom Benutzer festgelegten
3491           Variablennamen zusammen.</para>
3492
3493           <para>Beispiel: Der Benutzer hat eine Variable namens
3494           <varname>number_of_employees</varname> definiert, die die Anzahl der
3495           Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
3496           unter dem Namen <varname>vc_cvar_number_of_employees</varname> zur
3497           Verfügung.</para>
3498         </sect3>
3499       </sect2>
3500
3501       <sect2 id="dokumentenvorlagen-und-variablen.dunning">
3502         <title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
3503
3504         <sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
3505           <title>Namen der Vorlagen</title>
3506
3507           <para>Die Namen der Vorlagen werden im System-Menü vom Benutzer
3508           eingegeben. Wird für ein Mahnlevel die Option zur automatischen
3509           Erstellung einer Rechnung über die Mahngebühren und Zinsen
3510           aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem
3511           Vorlagenname für diese Mahnstufe mit dem Zusatz
3512           <constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
3513           für die ausgewählte Sprache und den ausgewählten Drucker
3514           angehängt.</para>
3515         </sect3>
3516
3517         <sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
3518           <title>Allgemeine Variablen in Mahnungen</title>
3519
3520           <para>Die Variablen des Verkäufers stehen wie gewohnt als
3521           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
3522           Kunden stehen als Variablen <varname>name</varname>,
3523           <varname>street</varname>, <varname>zipcode</varname>,
3524           <varname>city</varname>, <varname>country</varname>,
3525           <varname>department_1</varname>, <varname>department_2</varname>,
3526           und <varname>email</varname> zur Verfügung.</para>
3527
3528           <para>Weitere Variablen beinhalten:</para>
3529
3530           <variablelist>
3531             <varlistentry>
3532               <term><varname>dunning_date</varname></term>
3533
3534               <listitem>
3535                 <para>Datum der Mahnung</para>
3536               </listitem>
3537             </varlistentry>
3538
3539             <varlistentry>
3540               <term><varname>dunning_duedate</varname></term>
3541
3542               <listitem>
3543                 <para>Fälligkeitsdatum für diese Mahhnung</para>
3544               </listitem>
3545             </varlistentry>
3546
3547             <varlistentry>
3548               <term><varname>dunning_id</varname></term>
3549
3550               <listitem>
3551                 <para>Mahnungsnummer</para>
3552               </listitem>
3553             </varlistentry>
3554
3555             <varlistentry>
3556               <term><varname>fee</varname></term>
3557
3558               <listitem>
3559                 <para>Kummulative Mahngebühren</para>
3560               </listitem>
3561             </varlistentry>
3562
3563             <varlistentry>
3564               <term><varname>interest_rate</varname></term>
3565
3566               <listitem>
3567                 <para>Zinssatz per anno in Prozent</para>
3568               </listitem>
3569             </varlistentry>
3570
3571             <varlistentry>
3572               <term><varname>total_amount</varname></term>
3573
3574               <listitem>
3575                 <para>Gesamter noch zu zahlender Betrag als
3576                 <function>fee</function> + <function>total_interest</function>
3577                 + <function>total_open_amount</function></para>
3578               </listitem>
3579             </varlistentry>
3580
3581             <varlistentry>
3582               <term><varname>total_interest</varname></term>
3583
3584               <listitem>
3585                 <para>Zinsen per anno über alle Rechnungen</para>
3586               </listitem>
3587             </varlistentry>
3588
3589             <varlistentry>
3590               <term><varname>total_open_amount</varname></term>
3591
3592               <listitem>
3593                 <para>Summe über alle offene Beträge der Rechnungen</para>
3594               </listitem>
3595             </varlistentry>
3596           </variablelist>
3597         </sect3>
3598
3599         <sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
3600           <title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
3601
3602           <variablelist>
3603             <varlistentry>
3604               <term><varname>dn_amount</varname></term>
3605
3606               <listitem>
3607                 <para>Rechnungssumme (brutto)</para>
3608               </listitem>
3609             </varlistentry>
3610
3611             <varlistentry>
3612               <term><varname>dn_duedate</varname></term>
3613
3614               <listitem>
3615                 <para>Originales Fälligkeitsdatum der Rechnung</para>
3616               </listitem>
3617             </varlistentry>
3618
3619             <varlistentry>
3620               <term><varname>dn_dunning_date</varname></term>
3621
3622               <listitem>
3623                 <para>Datum der Mahnung</para>
3624               </listitem>
3625             </varlistentry>
3626
3627             <varlistentry>
3628               <term><varname>dn_dunning_duedate</varname></term>
3629
3630               <listitem>
3631                 <para>Fälligkeitsdatum der Mahnung</para>
3632               </listitem>
3633             </varlistentry>
3634
3635             <varlistentry>
3636               <term><varname>dn_fee</varname></term>
3637
3638               <listitem>
3639                 <para>Kummulative Mahngebühr</para>
3640               </listitem>
3641             </varlistentry>
3642
3643             <varlistentry>
3644               <term><varname>dn_interest</varname></term>
3645
3646               <listitem>
3647                 <para>Zinsen per anno für diese Rechnung</para>
3648               </listitem>
3649             </varlistentry>
3650
3651             <varlistentry>
3652               <term><varname>dn_invnumber</varname></term>
3653
3654               <listitem>
3655                 <para>Rechnungsnummer</para>
3656               </listitem>
3657             </varlistentry>
3658
3659             <varlistentry>
3660               <term><varname>dn_linetotal</varname></term>
3661
3662               <listitem>
3663                 <para>Noch zu zahlender Betrag (ergibt sich aus
3664                 <varname>dn_open_amount</varname> + <varname>dn_fee</varname>
3665                 + <varname>dn_interest</varname>)</para>
3666               </listitem>
3667             </varlistentry>
3668
3669             <varlistentry>
3670               <term><varname>dn_netamount</varname></term>
3671
3672               <listitem>
3673                 <para>Rechnungssumme (netto)</para>
3674               </listitem>
3675             </varlistentry>
3676
3677             <varlistentry>
3678               <term><varname>dn_open_amount</varname></term>
3679
3680               <listitem>
3681                 <para>Offener Rechnungsbetrag</para>
3682               </listitem>
3683             </varlistentry>
3684
3685             <varlistentry>
3686               <term><varname>dn_ordnumber</varname></term>
3687
3688               <listitem>
3689                 <para>Bestellnummer</para>
3690               </listitem>
3691             </varlistentry>
3692
3693             <varlistentry>
3694               <term><varname>dn_transdate</varname></term>
3695
3696               <listitem>
3697                 <para>Rechnungsdatum</para>
3698               </listitem>
3699             </varlistentry>
3700
3701             <varlistentry>
3702               <term><varname>dn_curr</varname></term>
3703
3704               <listitem>
3705                 <para>Währung, in der die Rechnung erstellt wurde. (Die
3706                 Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
3707               </listitem>
3708             </varlistentry>
3709           </variablelist>
3710         </sect3>
3711
3712         <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
3713           <title>Variablen in automatisch erzeugten Rechnungen über
3714           Mahngebühren</title>
3715
3716           <para>Die Variablen des Verkäufers stehen wie gewohnt als
3717           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
3718           Kunden stehen als Variablen <varname>name</varname>,
3719           <varname>street</varname>, <varname>zipcode</varname>,
3720           <varname>city</varname>, <varname>country</varname>,
3721           <varname>department_1</varname>, <varname>department_2</varname>,
3722           und <varname>email</varname> zur Verfügung.</para>
3723
3724           <para>Weitere Variablen beinhalten:</para>
3725
3726           <variablelist>
3727             <varlistentry>
3728               <term><varname>duedate</varname></term>
3729
3730               <listitem>
3731                 <para>Fälligkeitsdatum der Rechnung</para>
3732               </listitem>
3733             </varlistentry>
3734
3735             <varlistentry>
3736               <term><varname>dunning_id</varname></term>
3737
3738               <listitem>
3739                 <para>Mahnungsnummer</para>
3740               </listitem>
3741             </varlistentry>
3742
3743             <varlistentry>
3744               <term><varname>fee</varname></term>
3745
3746               <listitem>
3747                 <para>Mahngebühren</para>
3748               </listitem>
3749             </varlistentry>
3750
3751             <varlistentry>
3752               <term><varname>interest</varname></term>
3753
3754               <listitem>
3755                 <para>Zinsen</para>
3756               </listitem>
3757             </varlistentry>
3758
3759             <varlistentry>
3760               <term><varname>invamount</varname></term>
3761
3762               <listitem>
3763                 <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
3764                 <varname>interest</varname>)</para>
3765               </listitem>
3766             </varlistentry>
3767
3768             <varlistentry>
3769               <term><varname>invdate</varname></term>
3770
3771               <listitem>
3772                 <para>Rechnungsdatum</para>
3773               </listitem>
3774             </varlistentry>
3775
3776             <varlistentry>
3777               <term><varname>invnumber</varname></term>
3778
3779               <listitem>
3780                 <para>Rechnungsnummer</para>
3781               </listitem>
3782             </varlistentry>
3783           </variablelist>
3784         </sect3>
3785       </sect2>
3786
3787       <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
3788         <title>Variablen in anderen Vorlagen</title>
3789
3790         <sect3>
3791           <title>Einführung</title>
3792
3793           <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
3794           Rechnung. Allerdings heißen die Variablen, die mit
3795           <varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
3796           fangen sie mit <varname>quo</varname> für "quotation" an:
3797           <varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
3798           wiederum fangen sie mit <varname>ord</varname> für "order" an:
3799           <varname>ordnumber</varname> für Bestellnummer etc.</para>
3800
3801           <para>Manche Variablen sind in anderen Vorlagen hingegen gar nicht
3802           vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies
3803           sind Variablen, die vom Geschäftsablauf her in der entsprechenden
3804           Vorlage keine Bedeutung haben oder noch nicht belegt sein
3805           können.</para>
3806
3807           <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
3808           in Rechnungen aufgeführt.</para>
3809         </sect3>
3810
3811         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
3812           <title>Angebote und Preisanfragen</title>
3813
3814           <variablelist>
3815             <varlistentry>
3816               <term><varname>quonumber</varname></term>
3817
3818               <listitem>
3819                 <para>Angebots- bzw. Anfragenummer</para>
3820               </listitem>
3821             </varlistentry>
3822
3823             <varlistentry>
3824               <term><varname>reqdate</varname></term>
3825
3826               <listitem>
3827                 <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
3828                 Preisanfragen)</para>
3829               </listitem>
3830             </varlistentry>
3831
3832             <varlistentry>
3833               <term><varname>transdate</varname></term>
3834
3835               <listitem>
3836                 <para>Angebots- bzw. Anfragedatum</para>
3837               </listitem>
3838             </varlistentry>
3839           </variablelist>
3840         </sect3>
3841
3842         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
3843           <title>Auftragsbestätigungen und Lieferantenaufträge</title>
3844
3845           <variablelist>
3846             <varlistentry>
3847               <term><varname>ordnumber</varname></term>
3848
3849               <listitem>
3850                 <para>Auftragsnummer</para>
3851               </listitem>
3852             </varlistentry>
3853
3854             <varlistentry>
3855               <term><varname>reqdate</varname></term>
3856
3857               <listitem>
3858                 <para>Lieferdatum</para>
3859               </listitem>
3860             </varlistentry>
3861
3862             <varlistentry>
3863               <term><varname>transdate</varname></term>
3864
3865               <listitem>
3866                 <para>Auftragsdatum</para>
3867               </listitem>
3868             </varlistentry>
3869           </variablelist>
3870         </sect3>
3871
3872         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
3873           <title>Lieferscheine (Verkauf und Einkauf)</title>
3874
3875           <variablelist>
3876             <varlistentry>
3877               <term><varname>cusordnumber</varname></term>
3878
3879               <listitem>
3880                 <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
3881                 des Lieferanten (im Einkauf)</para>
3882               </listitem>
3883             </varlistentry>
3884
3885             <varlistentry>
3886               <term><varname>donumber</varname></term>
3887
3888               <listitem>
3889                 <para>Lieferscheinnummer</para>
3890               </listitem>
3891             </varlistentry>
3892
3893             <varlistentry>
3894               <term><varname>transdate</varname></term>
3895
3896               <listitem>
3897                 <para>Lieferscheindatum</para>
3898               </listitem>
3899             </varlistentry>
3900           </variablelist>
3901
3902           <para>Für jede Position eines Lieferscheines gibt es ein Unterarray
3903           mit den Informationen darüber, von welchem Lager und Lagerplatz aus
3904           die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
3905           Lagerplatz sie eingelagert wurden. Diese müssen mittels einer
3906           <function>foreach</function>-Schleife ausgegeben werden. Diese
3907           Variablen sind:</para>
3908
3909           <variablelist>
3910             <varlistentry>
3911               <term><varname>si_bin</varname></term>
3912
3913               <listitem>
3914                 <para>Lagerplatz</para>
3915               </listitem>
3916             </varlistentry>
3917
3918             <varlistentry>
3919               <term><varname>si_chargenumber</varname></term>
3920
3921               <listitem>
3922                 <para>Chargennummer</para>
3923               </listitem>
3924             </varlistentry>
3925
3926             <varlistentry>
3927               <term><varname>si_bestbefore</varname></term>
3928
3929               <listitem>
3930                 <para>Mindesthaltbarkeit</para>
3931               </listitem>
3932             </varlistentry>
3933
3934             <varlistentry>
3935               <term><varname>si_number</varname></term>
3936
3937               <listitem>
3938                 <para>Artikelnummer</para>
3939               </listitem>
3940             </varlistentry>
3941
3942             <varlistentry>
3943               <term><varname>si_qty</varname></term>
3944
3945               <listitem>
3946                 <para>Anzahl bzw. Menge</para>
3947               </listitem>
3948             </varlistentry>
3949
3950             <varlistentry>
3951               <term><varname>si_runningnumber</varname></term>
3952
3953               <listitem>
3954                 <para>Positionsnummer (1, 2, 3 etc)</para>
3955               </listitem>
3956             </varlistentry>
3957
3958             <varlistentry>
3959               <term><varname>si_unit</varname></term>
3960
3961               <listitem>
3962                 <para>Einheit</para>
3963               </listitem>
3964             </varlistentry>
3965
3966             <varlistentry>
3967               <term><varname>si_warehouse</varname></term>
3968
3969               <listitem>
3970                 <para>Lager</para>
3971               </listitem>
3972             </varlistentry>
3973           </variablelist>
3974         </sect3>
3975
3976         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
3977           <title>Variablen für Sammelrechnung</title>
3978
3979           <variablelist>
3980             <varlistentry>
3981               <term><varname>c0total</varname></term>
3982
3983               <listitem>
3984                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
3985                 Tage</para>
3986               </listitem>
3987             </varlistentry>
3988
3989             <varlistentry>
3990               <term><varname>c30total</varname></term>
3991
3992               <listitem>
3993                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
3994                 und &lt; 60 Tage</para>
3995               </listitem>
3996             </varlistentry>
3997
3998             <varlistentry>
3999               <term><varname>c60total</varname></term>
4000
4001               <listitem>
4002                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
4003                 und &lt; 90 Tage</para>
4004               </listitem>
4005             </varlistentry>
4006
4007             <varlistentry>
4008               <term><varname>c90total</varname></term>
4009
4010               <listitem>
4011                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
4012                 Tage</para>
4013               </listitem>
4014             </varlistentry>
4015
4016             <varlistentry>
4017               <term><varname>total</varname></term>
4018
4019               <listitem>
4020                 <para>Gesamtbetrag aller Rechnungen</para>
4021               </listitem>
4022             </varlistentry>
4023           </variablelist>
4024
4025           <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
4026
4027           <variablelist>
4028             <varlistentry>
4029               <term><varname>invnumber</varname></term>
4030
4031               <listitem>
4032                 <para>Rechnungsnummer</para>
4033               </listitem>
4034             </varlistentry>
4035
4036             <varlistentry>
4037               <term><varname>invdate</varname></term>
4038
4039               <listitem>
4040                 <para>Rechnungsdatum</para>
4041               </listitem>
4042             </varlistentry>
4043
4044             <varlistentry>
4045               <term><varname>duedate</varname></term>
4046
4047               <listitem>
4048                 <para>Fälligkeitsdatum</para>
4049               </listitem>
4050             </varlistentry>
4051
4052             <varlistentry>
4053               <term><varname>amount</varname></term>
4054
4055               <listitem>
4056                 <para>Summe der Rechnung</para>
4057               </listitem>
4058             </varlistentry>
4059
4060             <varlistentry>
4061               <term><varname>open</varname></term>
4062
4063               <listitem>
4064                 <para>Noch offener Betrag der Rechnung</para>
4065               </listitem>
4066             </varlistentry>
4067
4068             <varlistentry>
4069               <term><varname>c0</varname></term>
4070
4071               <listitem>
4072                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
4073                 Tage</para>
4074               </listitem>
4075             </varlistentry>
4076
4077             <varlistentry>
4078               <term><varname>c30</varname></term>
4079
4080               <listitem>
4081                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
4082                 &lt; 60 Tage</para>
4083               </listitem>
4084             </varlistentry>
4085
4086             <varlistentry>
4087               <term><varname>c60</varname></term>
4088
4089               <listitem>
4090                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
4091                 &lt; 90 Tage</para>
4092               </listitem>
4093             </varlistentry>
4094
4095             <varlistentry>
4096               <term><varname>c90</varname></term>
4097
4098               <listitem>
4099                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
4100                 Tage</para>
4101               </listitem>
4102             </varlistentry>
4103           </variablelist>
4104         </sect3>
4105       </sect2>
4106
4107       <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
4108         <title>Blöcke, bedingte Anweisungen und Schleifen</title>
4109
4110         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
4111           <title>Einfürhung</title>
4112
4113           <para>Der Parser kennt neben den Variablen einige weitere
4114           Konstrukte, die gesondert behandelt werden. Diese sind wie
4115           Variablennamen in spezieller Weise markiert:
4116           <command>&lt;%anweisung%&gt; ... &lt;%end%&gt;</command></para>
4117
4118           <para>Anmerkung zum <command>&lt;%end%&gt;</command>: Der besseren
4119           Verständlichkeit halber kann man nach dem <command>end</command>
4120           noch beliebig weitere Wörter schreiben, um so zu markieren, welche
4121           Anweisung (z.B. <command>if</command> oder
4122           <command>foreach</command>) damit abgeschlossen wird.</para>
4123
4124           <para>Beispiel: Lautet der Beginn eines Blockes z.B.
4125           <command>&lt;%if type == "sales_quotation"%&gt;</command>, so könnte
4126           er mit <command>&lt;%end%&gt;</command> genauso abgeschlossen werden
4127           wie mit <command>&lt;%end if%&gt;</command> oder auch
4128           <command>&lt;%end type == "sales_quotation"%&gt;</command>.</para>
4129         </sect3>
4130
4131         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
4132           <title>Der if-Block</title>
4133
4134           <programlisting>&lt;%if variablenname%&gt;
4135 ...
4136 &lt;%end%&gt;</programlisting>
4137
4138           <para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
4139           und dem "end" werden nur ausgegeben, wenn die Variable
4140           <varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
4141
4142           <para>Die Bedingung kann auch negiert werden, indem das Wort
4143           <function>not</function> nach dem <filename>if</filename> verwendet
4144           wird. Beispiel:</para>
4145
4146           <programlisting>&lt;%if not cp_greeting%&gt;
4147 ...
4148 &lt;%end%&gt;</programlisting>
4149
4150           <para>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
4151           oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
4152           einer Variablen mit einer festen Zeichenkette oder einer anderen
4153           Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
4154           oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
4155           die rechte Seite des Vergleichsoperators in Anführungszeichen
4156           gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
4157           anderer Variablen). Zwei Beispiele, die beide Vergleiche
4158           zeigen:</para>
4159
4160           <programlisting>&lt;%if var1 == "Wert"%&gt;</programlisting>
4161
4162           <para>Testet die Variable <varname>var1</varname> auf
4163           übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
4164           Mittels <function>!=</function> anstelle von <function>==</function>
4165           würde auf Ungleichheit getestet.</para>
4166
4167           <programlisting>&lt;%if var1 == var2%&gt;</programlisting>
4168
4169           <para>Testet die Variable <varname>var1</varname> auf
4170           übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
4171           <function>!=</function> anstelle von <function>==</function> würde
4172           auf Ungleichheit getestet.</para>
4173
4174           <para>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit
4175           auch Tests auf übereinstimmung mit regulären Ausdrücken ohne
4176           Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
4177           dieselbe Syntax wie oben nur mit <function>=~</function> und
4178           <function>!~</function> als Vergleichsoperatoren.</para>
4179
4180           <para>Beispiel für einen Test, ob die Variable
4181           <varname>intnotes</varname> (interne Bemerkungen) das Wort
4182           <constant>schwierig</constant> enthält:</para>
4183
4184           <programlisting>&lt;%if intnotes =~ "schwierig"%&gt;</programlisting>
4185         </sect3>
4186
4187         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
4188           <title>Der foreach-Block</title>
4189
4190           <programlisting>&lt;%foreach variablenname%&gt;
4191 ...
4192 &lt;%end%&gt;</programlisting>
4193
4194           <para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
4195           wie das Perl-Array der Variablen <varname>variablenname</varname>
4196           Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen
4197           Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern
4198           benutzt. In jedem Durchlauf werden die <link
4199           linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
4200           Variablen</link> jeweils auf den Wert für die aktuelle Position
4201           gesetzt.</para>
4202
4203           <para>Die Syntax sieht normalerweise wie folgt aus:</para>
4204
4205           <programlisting>&lt;%foreach number%&gt;
4206 Position: &lt;%runningnumber%&gt;
4207 Anzahl: &lt;%qty%&gt;
4208 Artikelnummer: &lt;%number%&gt;
4209 Beschreibung: &lt;%description%&gt;
4210 ...
4211 &lt;%end%&gt;</programlisting>
4212
4213           <para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
4214           <function>&lt;%foreach%&gt;</function>-Block innerhalb einer
4215           Tabellenzelle auf, so wird die komplette Tabellenzeile so oft
4216           wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der
4217           Inhalt zwischen <function>&lt;%foreach%&gt;</function> und
4218           <function>&lt;%end%&gt;</function> wiederholt, nicht aber die
4219           komplette Zeile, in der er steht.</para>
4220         </sect3>
4221       </sect2>
4222
4223       <sect2 id="dokumentenvorlagen-und-variablen.markup">
4224         <title>Markup-Code zur Textformatierung innerhalb von
4225         Formularen</title>
4226
4227         <para>Wenn der Benutzer innhalb von Formularen in kivitendo Text
4228         anders formatiert haben möchte, so ist dies begrenzt möglich.
4229         kivitendo unterstützt die Textformatierung mit HTML-ähnlichen Tags.
4230         Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung
4231         Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird
4232         dann automatisch in Anweisungen für das ausgewählte Vorlagenformat
4233         (HTML oder PDF über LaTeX) umgesetzt.</para>
4234
4235         <para>Die unterstützen Formatierungen sind:</para>
4236
4237         <variablelist>
4238           <varlistentry>
4239             <term>&lt;b&gt;Text&lt;/b&gt;</term>
4240
4241             <listitem>
4242               <para>Text wird in Fettdruck gesetzt.</para>
4243             </listitem>
4244           </varlistentry>
4245
4246           <varlistentry>
4247             <term>&lt;i&gt;Text&lt;/i&gt;</term>
4248
4249             <listitem>
4250               <para>Text wird kursiv gesetzt.</para>
4251             </listitem>
4252           </varlistentry>
4253
4254           <varlistentry>
4255             <term>&lt;u&gt;Text&lt;/u&gt;</term>
4256
4257             <listitem>
4258               <para>Text wird unterstrichen.</para>
4259             </listitem>
4260           </varlistentry>
4261
4262           <varlistentry>
4263             <term>&lt;s&gt;Text&lt;/s&gt;</term>
4264
4265             <listitem>
4266               <para>Text wird durchgestrichen. Diese Formatierung ist nicht
4267               bei der Ausgabe als PDF über LaTeX verfügbar.</para>
4268             </listitem>
4269           </varlistentry>
4270
4271           <varlistentry>
4272             <term>&lt;bullet&gt;</term>
4273
4274             <listitem>
4275               <para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
4276               unten).</para>
4277             </listitem>
4278           </varlistentry>
4279         </variablelist>
4280
4281         <para>Der Befehl <command>&lt;bullet&gt;</command> funktioniert
4282         momentan auch nur in Latex-Vorlagen.</para>
4283       </sect2>
4284     </sect1>
4285
4286     <sect1 id="excel-templates">
4287       <title>Excel-Vorlagen</title>
4288
4289       <sect2 id="excel-templates.summary">
4290         <title>Zusammenfassung</title>
4291
4292         <para>Dieses Dokument beschreibt den Mechanismus, mit dem
4293         Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
4294         einhergehen.</para>
4295       </sect2>
4296
4297       <sect2 id="excel-templates.usage">
4298         <title>Bedienung</title>
4299
4300         <para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
4301         werden. Die Konfigurationsoption heißt <varname>excel_templates =
4302         1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
4303
4304         <para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
4305         anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
4306         werden. In den normalen Verkaufsmasken taucht nun
4307         <constant>Excel</constant> als auswählbares Format auf und kann von da
4308         an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
4309
4310         <para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
4311         eine Angebotsvorlage und wird unter dem internen Namen der Angebote
4312         <filename>sales_quotation.xls</filename> gespeichert.</para>
4313       </sect2>
4314
4315       <sect2 id="excel-templates.syntax">
4316         <title>Variablensyntax</title>
4317
4318         <para>Einfache Syntax:
4319         <command>&lt;&lt;varname&gt;&gt;</command></para>
4320
4321         <para>Dabei sind <constant>&lt;&lt;</constant> und
4322         <constant>&gt;&gt;</constant> die Delimiter. Da Excel auf festen
4323         Breiten besteht, kann der Tag künstlich verlängert werden, indem
4324         weitere <constant>&lt;</constant> oder <constant>&gt;</constant>
4325         eingefügt werden. Der Tag muss nicht symmetrisch sein.
4326         Beispiel:</para>
4327
4328         <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>
4329
4330         <para>Um die Limitierung der festen Breite zu reduzieren, können
4331         weitere Variablen in einem Block interpoliert werden. Whitespace wird
4332         dazwishen dann erhalten. Beispiel:</para>
4333
4334         <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>
4335
4336         <para>Die Variablen werden interpoliert, und linksbündig mit
4337         Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
4338         lang, werden überzählige Zeichen abgeschnitten.</para>
4339
4340         <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
4341         der Block mit einem Leerzeichen anfängt. Beispiel:</para>
4342
4343         <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>
4344
4345         <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
4346         Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
4347         entfernt.</para>
4348       </sect2>
4349
4350       <sect2 id="excel-templates.limitations">
4351         <title>Einschränkungen</title>
4352
4353         <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
4354         mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
4355         beschränkt sich daher darauf, Textstellen exakt durch einen anderen
4356         Text zu ersetzen.</para>
4357
4358         <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
4359         <command>&lt;%if%&gt;</command> und
4360         <command>&lt;%foreach%&gt;</command> nicht vorhanden. Der Delimiter
4361         <constant>&lt;% %&gt;</constant> kommt in den Headerinformationen
4362         evtl. vor. Deshalb wurde auf den sichereren Delimiter
4363         <constant>&lt;&lt;</constant> und <constant>&gt;&gt;</constant>
4364         gewechselt.</para>
4365       </sect2>
4366     </sect1>
4367   </chapter>
4368
4369   <chapter>
4370     <title>Entwicklerdokumentation</title>
4371
4372     <sect1 id="devel.globals" xreflabel="Globale Variablen">
4373       <title>Globale Variablen</title>
4374
4375       <sect2>
4376         <title>Wie sehen globale Variablen in Perl aus?</title>
4377
4378         <para>Globale Variablen liegen in einem speziellen namespace namens
4379         "main", der von überall erreichbar ist. Darüber hinaus sind bareword
4380         globs global und die meisten speziellen Variablen sind...
4381         speziell.</para>
4382
4383         <para>Daraus ergeben sich folgende Formen:</para>
4384
4385         <variablelist>
4386           <varlistentry>
4387             <term><literal>$main::form</literal></term>
4388
4389             <listitem>
4390               <para>expliziter Namespace "main"</para>
4391             </listitem>
4392           </varlistentry>
4393
4394           <varlistentry>
4395             <term><literal>$::form</literal></term>
4396
4397             <listitem>
4398               <para>impliziter Namespace "main"</para>
4399             </listitem>
4400           </varlistentry>
4401
4402           <varlistentry>
4403             <term><literal>open FILE, "file.txt"</literal></term>
4404
4405             <listitem>
4406               <para><varname>FILE</varname> ist global</para>
4407             </listitem>
4408           </varlistentry>
4409
4410           <varlistentry>
4411             <term><literal>$_</literal></term>
4412
4413             <listitem>
4414               <para>speziell</para>
4415             </listitem>
4416           </varlistentry>
4417         </variablelist>
4418
4419         <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
4420         Schlüsselwort wie "<function>global</function>", mit dem man
4421         importieren kann. <function>my</function>, <function>our</function>
4422         und <function>local</function> machen was anderes.</para>
4423
4424         <variablelist>
4425           <varlistentry>
4426             <term><literal>my $form</literal></term>
4427
4428             <listitem>
4429               <para>lexikalische Variable, gültig bis zum Ende des
4430               Scopes</para>
4431             </listitem>
4432           </varlistentry>
4433
4434           <varlistentry>
4435             <term><literal>our $form</literal></term>
4436
4437             <listitem>
4438               <para><varname>$form</varname> referenziert ab hier
4439               <varname>$PACKAGE::form</varname>.</para>
4440             </listitem>
4441           </varlistentry>
4442
4443           <varlistentry>
4444             <term><literal>local $form</literal></term>
4445
4446             <listitem>
4447               <para>Alle Änderungen an <varname>$form</varname> werden am Ende
4448               des scopes zurückgesetzt</para>
4449             </listitem>
4450           </varlistentry>
4451         </variablelist>
4452       </sect2>
4453
4454       <sect2>
4455         <title>Warum sind globale Variablen ein Problem?</title>
4456
4457         <para>Das erste Problem ist <productname>FCGI</productname>.</para>
4458
4459         <para><productname>SQL-Ledger</productname> hat fast alles im globalen
4460         namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
4461         Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
4462         aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
4463         Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
4464         Datenbankverbindungen, weil die sehr lange zum Initialisieren
4465         brauchen.</para>
4466
4467         <para>Das zweite Problem ist <function>strict</function>. Unter
4468         <function>strict</function> werden alle Variablen die nicht explizit
4469         mit <function>Package</function>, <function>my</function> oder
4470         <function>our</function> angegeben werden als Tippfehler angemarkert,
4471         dies hat, seit der Einführung, u.a. schon so manche langwierige
4472         Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
4473         angegeben werden, werden die nicht geprüft, und somit kann sich
4474         schnell ein Tippfehler einschleichen.</para>
4475       </sect2>
4476
4477       <sect2>
4478         <title>Kanonische globale Variablen</title>
4479
4480         <para>Um dieses Problem im Griff zu halten gibt es einige wenige
4481         globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
4482         vorgegebenen Eigenschaften, und alles andere sollte anderweitig
4483         umhergereicht werden.</para>
4484
4485         <para>Diese Variablen sind im Moment die folgenden neun:</para>
4486
4487         <itemizedlist>
4488           <listitem>
4489             <para><varname>$::form</varname></para>
4490           </listitem>
4491
4492           <listitem>
4493             <para><varname>%::myconfig</varname></para>
4494           </listitem>
4495
4496           <listitem>
4497             <para><varname>$::locale</varname></para>
4498           </listitem>
4499
4500           <listitem>
4501             <para><varname>$::lxdebug</varname></para>
4502           </listitem>
4503
4504           <listitem>
4505             <para><varname>$::auth</varname></para>
4506           </listitem>
4507
4508           <listitem>
4509             <para><varname>$::lx_office_conf</varname></para>
4510           </listitem>
4511
4512           <listitem>
4513             <para><varname>$::instance_conf</varname></para>
4514           </listitem>
4515
4516           <listitem>
4517             <para><varname>$::dispatcher</varname></para>
4518           </listitem>
4519
4520           <listitem>
4521             <para><varname>$::request</varname></para>
4522           </listitem>
4523         </itemizedlist>
4524
4525         <para>Damit diese nicht erneut als Müllhalde missbraucht werden, im
4526         Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
4527         Eigenschaften (Konventionen):</para>
4528
4529         <sect3>
4530           <title>$::form</title>
4531
4532           <itemizedlist>
4533             <listitem>
4534               <para>Ist ein Objekt der Klasse
4535               "<classname>Form</classname>"</para>
4536             </listitem>
4537
4538             <listitem>
4539               <para>Wird nach jedem Request gelöscht</para>
4540             </listitem>
4541
4542             <listitem>
4543               <para>Muss auch in Tests und Konsolenscripts vorhanden
4544               sein.</para>
4545             </listitem>
4546
4547             <listitem>
4548               <para>Enthält am Anfang eines Requests die Requestparameter vom
4549               User</para>
4550             </listitem>
4551
4552             <listitem>
4553               <para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
4554               cachen, das wird aber momentan absichtlich zerstört</para>
4555             </listitem>
4556           </itemizedlist>
4557
4558           <para><varname>$::form</varname> wurde unter <productname>SQL
4559           Ledger</productname> als Gottobjekt für alles misbraucht. Sämtliche
4560           alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
4561           heißt, alles was einem lieb ist (alle Variablen die einem ans Herz
4562           gewachsen sind), sollte man vor einem Aufruf (!) von zum Beispiel
4563           <function>IS-&gt;retrieve_customer()</function> in Sicherheit
4564           bringen.</para>
4565
4566           <para>Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man
4567           Berechnung in einem bestimmten Format durchführt (SL/Form.pm Zeile
4568           3552, Stand version 2.7beta), um dies hinterher wieder auf den
4569           richtigen Wert zu setzen:</para>
4570
4571           <programlisting>  my $saved_numberformat    = $::myconfig{numberformat};
4572   $::myconfig{numberformat} = $numberformat;
4573   # (...) div Berechnungen
4574   $::myconfig{numberformat} = $saved_numberformat;</programlisting>
4575
4576           <para>Das Objekt der Klasse Form hat leider im Moment noch viele
4577           zentrale Funktionen die vom internen Zustand abhängen, deshalb bitte
4578           nie einfach zerstören oder überschreiben (zumindestens nicht kurz
4579           vor einem Release oder in Absprache über bspw. die devel-Liste ;-).
4580           Es geht ziemlich sicher etwas kaputt.</para>
4581
4582           <para><varname>$::form</varname> ist gleichzeitig der Standard Scope
4583           in den <productname>Template::Toolkit</productname> Templates
4584           außerhalb der Controller: der Ausdruck <function>[% var
4585           %]</function> greift auf <varname>$::form-&gt;{var}</varname> zu.
4586           Unter Controllern ist der Standard Scope anders, da lautet der
4587           Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
4588           normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
4589           <function>&lt;%var%&gt;</function> zeigt auf
4590           <varname>$::form-&gt;{var}</varname>. Nochmal von der anderen Seite
4591           erläutert, innerhalb von (Web-)Templates sieht man häufiger solche
4592           Konstrukte:</para>
4593
4594           <programlisting>[%- IF business %]
4595 # (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
4596 [%- END %]</programlisting>
4597
4598           <para>Entweder wird hier dann $::form-&gt;{business} ausgewertet
4599           oder aber der Funktion
4600           <function>$form-&gt;parse_html_template</function> wird explizit
4601           noch ein zusätzlicher Hash übergeben, der dann auch in den
4602           (Web-)Templates zu Verfügung steht, bspw. so:</para>
4603
4604           <programlisting>$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</programlisting>
4605
4606           <para>Innerhalb von Schleifen wird
4607           <varname>$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</varname>
4608           bevorzugt, wenn vorhanden. Ein Beispiel findet sich in SL/DO.pm,
4609           welches über alle Positionen eines Lieferscheins in Schleife
4610           läuft:</para>
4611
4612           <programlisting>for $i (1 .. $form-&gt;{rowcount}) {
4613   # ...
4614   push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
4615   push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
4616   push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
4617   # ...
4618 }</programlisting>
4619         </sect3>
4620
4621         <sect3>
4622           <title>%::myconfig</title>
4623
4624           <itemizedlist>
4625             <listitem>
4626               <para>Das einzige Hash unter den globalen Variablen</para>
4627             </listitem>
4628
4629             <listitem>
4630               <para>Wird spätestens benötigt wenn auf die Datenbank
4631               zugegriffen wird</para>
4632             </listitem>
4633
4634             <listitem>
4635               <para>Wird bei jedem Request neu erstellt.</para>
4636             </listitem>
4637
4638             <listitem>
4639               <para>Enthält die Userdaten des aktuellen Logins</para>
4640             </listitem>
4641
4642             <listitem>
4643               <para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
4644               extern serialisiert werden, weil da auch der Datenbankzugriff
4645               für diesen user drinsteht.</para>
4646             </listitem>
4647
4648             <listitem>
4649               <para>Enthält unter anderem Listenbegrenzung vclimit,
4650               Datumsformat dateformat und Nummernformat numberformat</para>
4651             </listitem>
4652
4653             <listitem>
4654               <para>Enthält Datenbankzugriffinformationen</para>
4655             </listitem>
4656           </itemizedlist>
4657
4658           <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
4659           ein Userobjekt. Die meisten Funktionen, die etwas anhand des
4660           aktuellen Users entscheiden müssen, befragen
4661           <varname>%::myconfig</varname>. Innerhalb der Anwendungen sind dies
4662           überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
4663           -&gt; <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
4664           Informationen über den Benutzer die über die
4665           Administrator-Schnittstelle (admin.pl) eingegeben wurden.</para>
4666         </sect3>
4667
4668         <sect3>
4669           <title>$::locale</title>
4670
4671           <itemizedlist>
4672             <listitem>
4673               <para>Objekt der Klasse "Locale"</para>
4674             </listitem>
4675
4676             <listitem>
4677               <para>Wird pro Request erstellt</para>
4678             </listitem>
4679
4680             <listitem>
4681               <para>Muss auch für Tests und Scripte immer verfügbar
4682               sein.</para>
4683             </listitem>
4684
4685             <listitem>
4686               <para>Cached intern über Requestgrenzen hinweg benutzte
4687               Locales</para>
4688             </listitem>
4689           </itemizedlist>
4690
4691           <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
4692           Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
4693         </sect3>
4694
4695         <sect3>
4696           <title>$::lxdebug</title>
4697
4698           <itemizedlist>
4699             <listitem>
4700               <para>Objekt der Klasse "LXDebug"</para>
4701             </listitem>
4702
4703             <listitem>
4704               <para>Wird global gecached</para>
4705             </listitem>
4706
4707             <listitem>
4708               <para>Muss immer verfügbar sein, in nahezu allen
4709               Funktionen</para>
4710             </listitem>
4711           </itemizedlist>
4712
4713           <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
4714           bereit, wie "<function>enter_sub</function>" und
4715           "<function>leave_sub</function>", mit denen in den alten Modulen ein
4716           brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
4717           der man die Wallclockzeit seit Requeststart loggen kann, sowie
4718           "<function>message</function>" und "<function>dump</function>" mit
4719           denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
4720           packen kann.</para>
4721
4722           <para>Beispielsweise so:</para>
4723
4724           <programlisting>$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
4725 $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</programlisting>
4726         </sect3>
4727
4728         <sect3>
4729           <title>$::auth</title>
4730
4731           <itemizedlist>
4732             <listitem>
4733               <para>Objekt der Klasse "SL::Auth"</para>
4734             </listitem>
4735
4736             <listitem>
4737               <para>Wird global gecached</para>
4738             </listitem>
4739
4740             <listitem>
4741               <para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
4742             </listitem>
4743
4744             <listitem>
4745               <para>Wird nach jedem Request resettet.</para>
4746             </listitem>
4747           </itemizedlist>
4748
4749           <para><varname>$::auth</varname> stellt Funktionen bereit um die
4750           Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
4751           vom aktuellen User abhängen wird das Objekt aus
4752           Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
4753           Request kurz resettet.</para>
4754         </sect3>
4755
4756         <sect3>
4757           <title>$::lx_office_conf</title>
4758
4759           <itemizedlist>
4760             <listitem>
4761               <para>Objekt der Klasse
4762               "<classname>SL::LxOfficeConf</classname>"</para>
4763             </listitem>
4764
4765             <listitem>
4766               <para>Global gecached</para>
4767             </listitem>
4768
4769             <listitem>
4770               <para>Repräsentation der
4771               <filename>config/kivitendo.conf[.default]</filename>-Dateien</para>
4772             </listitem>
4773           </itemizedlist>
4774
4775           <para>Globale Konfiguration. Configdateien werden zum Start gelesen
4776           und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
4777           das Programm die Konfiguration ändern kann oder sollte.</para>
4778
4779           <para>Beispielsweise ist über den Konfigurationseintrag [debug] die
4780           Debug- und Trace-Log-Datei wie folgt konfiguriert und
4781           verfügbar:</para>
4782
4783           <programlisting>[debug]
4784 file = /tmp/kivitendo-debug.log</programlisting>
4785
4786           <para>ist der Key <varname>file</varname> im Programm als
4787           <varname>$::lx_office_conf-&gt;{debug}{file}</varname>
4788           erreichbar.</para>
4789
4790           <warning>
4791             <para>Zugriff auf die Konfiguration erfolgt im Moment über
4792             Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
4793           </warning>
4794         </sect3>
4795
4796         <sect3>
4797           <title>$::instance_conf</title>
4798
4799           <itemizedlist>
4800             <listitem>
4801               <para>Objekt der Klasse
4802               "<classname>SL::InstanceConfiguration</classname>"</para>
4803             </listitem>
4804
4805             <listitem>
4806               <para>wird pro Request neu erstellt</para>
4807             </listitem>
4808           </itemizedlist>
4809
4810           <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
4811           speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
4812           ist hier eine Mandantendatenbank. Beispielsweise überprüft
4813           <programlisting>$::instance_conf-&gt;get_inventory_system eq 'perpetual'</programlisting>
4814           ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para>
4815         </sect3>
4816
4817         <sect3>
4818           <title>$::dispatcher</title>
4819
4820           <itemizedlist>
4821             <listitem>
4822               <para>Objekt der Klasse
4823               "<varname>SL::Dispatcher</varname>"</para>
4824             </listitem>
4825
4826             <listitem>
4827               <para>wird pro Serverprozess erstellt.</para>
4828             </listitem>
4829
4830             <listitem>
4831               <para>enthält Informationen über die technische Verbindung zum
4832               Server</para>
4833             </listitem>
4834           </itemizedlist>
4835
4836           <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
4837           global gespeichert wird. Wird vermutlich irgendwann in einem anderen
4838           Objekt untergebracht.</para>
4839         </sect3>
4840
4841         <sect3>
4842           <title>$::request</title>
4843
4844           <itemizedlist>
4845             <listitem>
4846               <para>Hashref (evtl später Objekt)</para>
4847             </listitem>
4848
4849             <listitem>
4850               <para>Wird pro Request neu initialisiert.</para>
4851             </listitem>
4852
4853             <listitem>
4854               <para>Keine Unterstruktur garantiert.</para>
4855             </listitem>
4856           </itemizedlist>
4857
4858           <para><varname>$::request</varname> ist ein generischer Platz um
4859           Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
4860           at a distance benutzt werden, sondern um lokales memoizing zu
4861           ermöglichen, das garantiert am Ende des Requests zerstört
4862           wird.</para>
4863
4864           <para>Vieles von dem, was im moment in <varname>$::form</varname>
4865           liegt, sollte eigentlich hier liegen. Die groben
4866           Differentialkriterien sind:</para>
4867
4868           <itemizedlist>
4869             <listitem>
4870               <para>Kommt es vom User, und soll unverändert wieder an den
4871               User? Dann <varname>$::form</varname>, steht da eh schon</para>
4872             </listitem>
4873
4874             <listitem>
4875               <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
4876               Requests gebraucht werden? Dann
4877               <varname>$::request</varname></para>
4878             </listitem>
4879
4880             <listitem>
4881               <para>Muss ich von anderen Teilen des Programms lesend drauf
4882               zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
4883               Wrappermethode</para>
4884             </listitem>
4885           </itemizedlist>
4886         </sect3>
4887       </sect2>
4888
4889       <sect2>
4890         <title>Ehemalige globale Variablen</title>
4891
4892         <para>Die folgenden Variablen waren einmal im Programm, und wurden
4893         entfernt.</para>
4894
4895         <sect3>
4896           <title>$::cgi</title>
4897
4898           <itemizedlist>
4899             <listitem>
4900               <para>war nötig, weil cookie Methoden nicht als
4901               Klassenfunktionen funktionieren</para>
4902             </listitem>
4903
4904             <listitem>
4905               <para>Aufruf als Klasse erzeugt Dummyobjekt was im
4906               Klassennamespace gehalten wird und über Requestgrenzen
4907               leaked</para>
4908             </listitem>
4909
4910             <listitem>
4911               <para>liegt jetzt unter
4912               <varname>$::request-&gt;{cgi}</varname></para>
4913             </listitem>
4914           </itemizedlist>
4915         </sect3>
4916
4917         <sect3>
4918           <title>$::all_units</title>
4919
4920           <itemizedlist>
4921             <listitem>
4922               <para>war nötig, weil einige Funktionen in Schleifen zum Teil
4923               ein paar hundert mal pro Request eine Liste der Einheiten
4924               brauchen, und de als Parameter durch einen Riesenstack von
4925               Funktionen geschleift werden müssten.</para>
4926             </listitem>
4927
4928             <listitem>
4929               <para>Liegt jetzt unter
4930               <varname>$::request-&gt;{cache}{all_units}</varname></para>
4931             </listitem>
4932
4933             <listitem>
4934               <para>Wird nur in
4935               <function>AM-&gt;retrieve_all_units()</function> gesetzt oder
4936               gelesen.</para>
4937             </listitem>
4938           </itemizedlist>
4939         </sect3>
4940
4941         <sect3>
4942           <title>%::called_subs</title>
4943
4944           <itemizedlist>
4945             <listitem>
4946               <para>wurde benutzt um callsub deep recursions
4947               abzufangen.</para>
4948             </listitem>
4949
4950             <listitem>
4951               <para>Wurde entfernt, weil callsub nur einen Bruchteil der
4952               möglichen Rekursioenen darstellt, und da nie welche
4953               auftreten.</para>
4954             </listitem>
4955
4956             <listitem>
4957               <para>komplette recursion protection wurde entfernt.</para>
4958             </listitem>
4959           </itemizedlist>
4960         </sect3>
4961       </sect2>
4962     </sect1>
4963
4964     <sect1 id="devel.fcgi">
4965       <title>Entwicklung unter FastCGI</title>
4966
4967       <sect2 id="devel.fcgi.general">
4968         <title>Allgemeines</title>
4969
4970         <para>Wenn Änderungen in der Konfiguration von kivitendo gemacht
4971         werden, muss der Webserver neu gestartet werden.</para>
4972
4973         <para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
4974         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
4975         müssen folgende Aspekte beachtet werden.</para>
4976       </sect2>
4977
4978       <sect2 id="devel.fcgi.exiting">
4979         <title>Programmende und Ausnahmen</title>
4980
4981         <para>Betrifft die Funktionen <function>warn</function>,
4982         <function>die</function>, <function>exit</function>,
4983         <function>carp</function> und <function>confess</function>.</para>
4984
4985         <para>Fehler, die dass Programm normalerweise sofort beenden (fatale
4986         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
4987         am Laufen zu halten. Man kann mit <function>die</function>,
4988         <function>confess</function> oder <function>carp</function> Fehler
4989         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
4990         eigene <function>$::form-</function>error()&gt; tut im Prinzip das
4991         Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
4992         <function>exit</function> hingegen werden nicht abgefangen.
4993         <function>warn</function> wird direkt nach STDERR, also in Server Log
4994         eine Nachricht schreiben (sofern in der Konfiguration nicht die
4995         Warnungen in das kivitendo Log umgeleitet wurden), und
4996         <function>exit</function> wird die Ausführung beenden.</para>
4997
4998         <para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
4999         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
5000         Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
5001         benutzen, alle anderen Exceptionmechanismen sind ok.</para>
5002       </sect2>
5003
5004       <sect2 id="devel.fcgi.globals">
5005         <title>Globale Variablen</title>
5006
5007         <para>Um zu vermeiden, dass Informationen von einem Request in einen
5008         anderen gelangen, müssen alle globalen Variablen vor einem Request
5009         sauber initialisiert werden. Das ist besonders wichtig im
5010         <varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
5011         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
5012         werden.</para>
5013
5014         <para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
5015         abgetrennten Block, der alle kanonischen globalen Variablen listet und
5016         erklärt. Bitte keine anderen einführen ohne das sauber zu
5017         dokumentieren.</para>
5018
5019         <para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
5020         man sicher geht, dass man die richtige erwischt.</para>
5021       </sect2>
5022
5023       <sect2 id="devel.fcgi.performance">
5024         <title>Performance und Statistiken</title>
5025
5026         <para>Die kritischen Pfade des Programms sind die Belegmasken, und
5027         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
5028         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
5029         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
5030         sind es je nach Menge der definierten Variablen 1-2s. Ab der
5031         Moose/Rose::DB Version sind es 5-6s.</para>
5032
5033         <para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
5034         den kritischen Pfaden, unter 0,15 sonst.</para>
5035       </sect2>
5036
5037       <sect2 id="devel.fcgi.known-issues">
5038         <title>Bekannte Probleme</title>
5039
5040         <sect3 id="devel.fcgi.known-issues.encoding">
5041           <title>Encoding Awareness</title>
5042
5043           <para>UTF-8 kodierte Installationen sind sehr anfällig gegen
5044           fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
5045           falsch kodierte Zeichen eher unwissend, und geben sie einfach
5046           weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
5047           das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
5048           beseitigen.</para>
5049         </sect3>
5050       </sect2>
5051     </sect1>
5052
5053     <sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
5054       <title>SQL-Upgradedateien</title>
5055
5056       <sect2 id="db-upgrade-files.introduction"
5057              xreflabel="Einführung in die Datenbank-Upgradedateien">
5058         <title>Einführung</title>
5059
5060         <para>Der alte Mechanismus für SQL-Upgradescripte, der auf einer
5061         Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
5062         diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele
5063         Entwicklung im stable- und unstable-Baum betrifft.</para>
5064
5065         <para>Dieser Mechanismus wurde für kivitendo 2.4.1 deutlich erweitert.
5066         Es werden weiterhin alle Scripte aus sql/Pg-upgrade ausgeführt.
5067         Zusätzlich gibt es aber ein zweites Verzeichnis, sql/Pg-upgrade2. In
5068         diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren,
5069         die neben den eigentlich auszuführenden SQL- oder Perl-Befehlen einige
5070         Kontrollinformationen enthält.</para>
5071
5072         <para>Neu sind die Kontrollinformationen, die Abhängigkeiten und
5073         Prioritäten definieren können werden, sodass Datenbankscripte zwar in
5074         einer sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER
5075         TABLE" erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE"
5076         angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man
5077         keine Versionsnummern mehr braucht.</para>
5078
5079         <para>kivitendo merkt sich dabei, welches der Upgradescripte in
5080         sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht
5081         erneut aus. Dazu dient die Tabelle "schema_info", die bei der
5082         Anmeldung automatisch angelegt wird.</para>
5083       </sect2>
5084
5085       <sect2 id="db-upgrade-files.format"
5086              xreflabel="Format der Upgradedateien">
5087         <title>Format der Kontrollinformationen</title>
5088
5089         <para>Die Kontrollinformationen sollten sich am Anfang der jeweiligen
5090         Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
5091         hat dabei das folgende Format:</para>
5092
5093         <para>Für SQL-Upgradedateien:</para>
5094
5095         <programlisting>-- @key: value</programlisting>
5096
5097         <para>Für Perl-Upgradedateien:</para>
5098
5099         <programlisting># @key: value</programlisting>
5100
5101         <para>Leerzeichen vor "<varname>value</varname>" werden
5102         entfernt.</para>
5103
5104         <para>Die folgenden Schlüsselworte werden verarbeitet:</para>
5105
5106         <variablelist>
5107           <varlistentry>
5108             <term><varname>tag</varname></term>
5109
5110             <listitem>
5111               <para>Wird zwingend benötigt. Dies ist der "Name" des Upgrades.
5112               Dieser "tag" kann von anderen Kontrolldateien in ihren
5113               Abhängigkeiten verwendet werden (Schlüsselwort
5114               "<varname>depends</varname>"). Der "tag" ist auch der Name, der
5115               in der Datenbank eingetragen wird.</para>
5116
5117               <para>Normalerweise sollte die Kontrolldatei genau so heißen wie
5118               der "tag", nur mit der Endung ".sql" bzw. "pl".</para>
5119
5120               <para>Ein Tag darf nur aus alphanumerischen Zeichen sowie den
5121               Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht
5122               erlaubt und sollten stattdessen mit Unterstrichen ersetzt
5123               werden.</para>
5124             </listitem>
5125           </varlistentry>
5126
5127           <varlistentry>
5128             <term><varname>charset</varname></term>
5129
5130             <listitem>
5131               <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script
5132               geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
5133               Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei
5134               Abwesenheit des Tags der Zeichensatz
5135               "<literal>ISO-8859-15</literal>" angenommen.</para>
5136             </listitem>
5137           </varlistentry>
5138
5139           <varlistentry>
5140             <term><varname>description</varname></term>
5141
5142             <listitem>
5143               <para>Benötigt. Eine Beschreibung, was in diesem Update
5144               passiert. Diese wird dem Benutzer beim eigentlichen
5145               Datenbankupdate angezeigt. Während der Tag in englisch gehalten
5146               sein sollte, sollte die Beschreibung auf Deutsch
5147               erfolgen.</para>
5148             </listitem>
5149           </varlistentry>
5150
5151           <varlistentry>
5152             <term><varname>depends</varname></term>
5153
5154             <listitem>
5155               <para>Optional. Eine mit Leerzeichen getrennte Liste von "tags",
5156               von denen dieses Upgradescript abhängt. kivitendo stellt sicher,
5157               dass die in dieser Liste aufgeführten Scripte bereits
5158               durchgeführt wurden, bevor dieses Script ausgeführt wird.</para>
5159
5160               <para>Abhängigkeiten werden rekursiv betrachtet. Wenn also ein
5161               Script "b" existiert, das von Änderungen in "a" abhängt, und
5162               eine neue Kontrolldatei für "c" erstellt wird, die von
5163               Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den
5164               Tag "b" als Abhängigkeit zu definieren.</para>
5165
5166               <para>Es ist nicht erlaubt, sich selbst referenzierende
5167               Abhängigkeiten zu definieren (z.B. "a" -&gt; "b", "b" -&gt; "c"
5168               und "c" -&gt; "a").</para>
5169             </listitem>
5170           </varlistentry>
5171
5172           <varlistentry>
5173             <term><varname>priority</varname></term>
5174
5175             <listitem>
5176               <para>Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
5177               der Scripte ausgeführt werden, die die gleichen
5178               Abhängigkeitstiefen besitzen. Fehlt dieser Parameter, so wird
5179               der Wert 1000 benutzt.</para>
5180
5181               <para>Dies ist reine Kosmetik. Für echte Reihenfolgen muss
5182               "depends" benutzt werden. kivitendo sortiert die auszuführenden
5183               Scripte zuerst nach der Abhängigkeitstiefe (wenn "z" von "y"
5184               abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von
5185               2, "y" von 1 und "x" von 0. "x" würde hier zuerst ausgeführt,
5186               dann "y", dann "z"), dann nach der Priorität und bei gleicher
5187               Priorität alphabetisch nach dem "tag".</para>
5188             </listitem>
5189           </varlistentry>
5190
5191           <varlistentry>
5192             <term><varname>ignore</varname></term>
5193
5194             <listitem>
5195               <para>Optional. Falls der Wert auf 1 (true) steht, wird das
5196               Skript bei der Anmeldung ignoriert und entsprechend nicht
5197               ausgeführt.</para>
5198             </listitem>
5199           </varlistentry>
5200         </variablelist>
5201       </sect2>
5202
5203       <sect2 id="db-upgrade-files.dbupgrade-tool"
5204              xreflabel="Hilfsscript dbupgrade2_tool.pl">
5205         <title>Hilfsscript dbupgrade2_tool.pl</title>
5206
5207         <para>Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern,
5208         existiert ein Hilfsscript namens
5209         "<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem
5210         kivitendo-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
5211         liest alle Datenbankupgradescripte aus dem Verzeichnis
5212         <filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die
5213         gleichen Methoden wie kivitendo selber, sodass alle Fehlersituationen
5214         von der Kommandozeile überprüft werden können.</para>
5215
5216         <para>Wird dem Script kein weiterer Parameter übergeben, so wird nur
5217         eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
5218         sich aber auch Informationen auf verschiedene Art ausgeben
5219         lassen:</para>
5220
5221         <itemizedlist>
5222           <listitem>
5223             <para>Listenform: "<command>./scripts/dbupgrade2_tool.pl
5224             --list</command>"</para>
5225
5226             <para>Gibt eine Liste aller Scripte aus. Die Liste ist in der
5227             Reihenfolge sortiert, in der kivitendo die Scripte ausführen
5228             würde. Es werden neben der Listenposition der Tag, die
5229             Abhängigkeitstiefe und die Priorität ausgegeben.</para>
5230           </listitem>
5231
5232           <listitem>
5233             <para>Baumform: "<command>./scripts/dbupgrade2_tool.pl
5234             --tree</command>"</para>
5235
5236             <para>Listet alle Tags in Baumform basierend auf den
5237             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von
5238             denen keine anderen abhängen. Die Unterknoten sind Scripte, die
5239             beim übergeordneten Script als Abhängigkeit eingetragen
5240             sind.</para>
5241           </listitem>
5242
5243           <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
5244             <para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl
5245             --rtree</command>"</para>
5246
5247             <para>Listet alle Tags in Baumform basierend auf den
5248             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte mit
5249             der geringsten Abhängigkeitstiefe. Die Unterknoten sind Scripte,
5250             die das übergeordnete Script als Abhängigkeit eingetragen
5251             haben.</para>
5252           </listitem>
5253
5254           <listitem>
5255             <para>Baumform mit Postscriptausgabe:
5256             "<command>./scripts/dbupgrade2_tool.pl
5257             --graphviz</command>"</para>
5258
5259             <para>Benötigt das Tool "<command>graphviz</command>", um mit
5260             seiner Hilfe die <link
5261             linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte
5262             Baumform</link> in eine Postscriptdatei namens
5263             "<filename>db_dependencies.ps</filename>" auszugeben. Dies ist
5264             vermutlich die übersichtlichste Form, weil hierbei jeder Knoten
5265             nur einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen
5266             können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben
5267             werden.</para>
5268           </listitem>
5269
5270           <listitem>
5271             <para>Scripte, von denen kein anderes Script abhängt:
5272             "<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"</para>
5273
5274             <para>Listet die Tags aller Scripte auf, von denen keine anderen
5275             Scripte abhängen.</para>
5276           </listitem>
5277         </itemizedlist>
5278       </sect2>
5279     </sect1>
5280
5281     <sect1 id="translations-languages" xreflabel="Translations and languages">
5282       <title>Translations and languages</title>
5283
5284       <sect2 id="translations-languages.introduction"
5285              xreflabel="Introduction to translations and languages">
5286         <title>Introduction</title>
5287
5288         <note>
5289           <para>Dieser Abschnitt ist in Englisch geschrieben, um
5290           internationalen Übersetzern die Arbeit zu erleichtern.</para>
5291         </note>
5292
5293         <para>This section describes how localization packages in kivitendo
5294         are built. Currently the only language fully supported is German, and
5295         since most of the internal messages are held in English the English
5296         version is usable too.</para>
5297
5298         <para>A stub version of French is included but not functunal at this
5299         point.</para>
5300       </sect2>
5301
5302       <sect2 id="translations-languages.file-structure"
5303              xreflabel="File structure">
5304         <title>File structure</title>
5305
5306         <para>The structure of locales in kivitendo is:</para>
5307
5308         <programlisting>kivitendo/locale/&lt;langcode&gt;/</programlisting>
5309
5310         <para>where &lt;langcode&gt; stands for an abbreviation of the
5311         language package. The builtin packages use two letter <ulink
5312         url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
5313         but the actual name is not relevant for the program and can easily be
5314         extended to <ulink
5315         url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
5316         tags</ulink> (i.e. "en_GB"). In fact the original language packages
5317         from SQL Ledger are named in this way.</para>
5318
5319         <para>In such a language directory the following files are
5320         recognized:</para>
5321
5322         <variablelist>
5323           <varlistentry>
5324             <term>LANGUAGE</term>
5325
5326             <listitem>
5327               <para>This file is mandatory.</para>
5328
5329               <para>The <filename>LANGUAGE</filename> file contains the self
5330               descripted name of the language. It should contain a native
5331               representation first, and in parenthesis an english translation
5332               after that. Example:</para>
5333
5334               <programlisting>Deutsch (German)</programlisting>
5335             </listitem>
5336           </varlistentry>
5337
5338           <varlistentry>
5339             <term>charset</term>
5340
5341             <listitem>
5342               <para>This file should be present.</para>
5343
5344               <para>The <filename>charset</filename> file describes which
5345               charset a language package is written in and applies to all
5346               other language files in the package. It is possible to write
5347               some language packages without an explicit charset, but it is
5348               still strongly recommended. You'll never know in what
5349               environment your language package will be used, and neither
5350               UTF-8 nor Latin1 are guaranteed.</para>
5351
5352               <para>The whole content of this file is a string that can be
5353               recognized as a valid charset encoding. Example:</para>
5354
5355               <programlisting>UTF-8</programlisting>
5356             </listitem>
5357           </varlistentry>
5358
5359           <varlistentry>
5360             <term>all</term>
5361
5362             <listitem>
5363               <para>This file is mandatory.</para>
5364
5365               <para>The central translation file. It is essentially an inline
5366               Perl script autogenerated by <command>locales.pl</command>. To
5367               generate it, generate the directory and the two files mentioned
5368               above, and execute the following command:</para>
5369
5370               <programlisting>scripts/locales.pl &lt;langcode&gt;</programlisting>
5371
5372               <para>Otherwise you can simply copy one of the other languages.
5373               You will be told how many are missing like this:</para>
5374
5375               <programlisting>$ scripts/locales.pl en
5376 English - 0.6% - 2015/2028 missing</programlisting>
5377
5378               <para>A file named "<filename>missing</filename>" will be
5379               generated and can be edited. You can also edit the
5380               "<filename>all</filename>" file directly. Edit everything you
5381               like to fit the target language and execute
5382               <command>locales.pl</command> again. See how the missing words
5383               get fewer.</para>
5384             </listitem>
5385           </varlistentry>
5386
5387           <varlistentry>
5388             <term>Num2text</term>
5389
5390             <listitem>
5391               <para>Legacy code from SQL Ledger. It provides a means for
5392               numbers to be converted into natural language, like
5393               <literal>1523 =&gt; one thousand five hundred twenty
5394               three</literal>. If you want to provide it, it must be inlinable
5395               Perl code which provides a <function>num2text</function> sub. If
5396               an <function>init</function> sub exists it will be executed
5397               first.</para>
5398
5399               <para>Only used in the check and receipt printing module.</para>
5400             </listitem>
5401           </varlistentry>
5402
5403           <varlistentry>
5404             <term>special_chars</term>
5405
5406             <listitem>
5407               <para>kivitendo comes with a lot of interfaces to different
5408               formats, some of which are rather picky with their accepted
5409               charset. The <filename>special_chars</filename> file contains a
5410               listing of chars not suited for different file format and
5411               provides substitutions. It is written in "Simple Ini" style,
5412               containing a block for every file format.</para>
5413
5414               <para>First entry should be the order of substitution for
5415               entries as a whitespace separated list. All entries are
5416               interpolated, so <literal>\n</literal>, <literal>\x20</literal>
5417               and <literal>\\</literal> all work.</para>
5418
5419               <para>After that every entry is a special char that should be
5420               translated when writing text into such a file.</para>
5421
5422               <para>Example:</para>
5423
5424               <programlisting>[Template/XML]
5425 order=&amp; &lt; &gt; \n
5426 &amp;=&amp;amp;
5427 &lt;=&amp;lt;
5428 &gt;=&amp;gt;
5429 \n=&lt;br&gt;</programlisting>
5430
5431               <para>Note the importance of the order in this example.
5432               Substituting &lt; and &gt; befor &amp; would lead to $gt; become
5433               &amp;amp;gt;</para>
5434
5435               <para>For a list of valid formats, see the German
5436               <filename>special_chars</filename> entry. As of this writing the
5437               following are recognized:</para>
5438
5439               <programlisting>HTML
5440 URL@HTML
5441 Template/HTML
5442 Template/XML
5443 Template/LaTeX
5444 Template/OpenDocument
5445 filenames</programlisting>
5446
5447               <para>The last of which is very machine dependant. Remember that
5448               a lot of characters are forbidden by some filesystems, for
5449               exmaple MS Windows doesn't like ':' in its files where Linux
5450               doesn't mind that. If you want the files created with your
5451               language pack to be portable, find all chars that could cause
5452               trouble.</para>
5453             </listitem>
5454           </varlistentry>
5455
5456           <varlistentry>
5457             <term>missing</term>
5458
5459             <listitem>
5460               <para>This file is not a part of the language package
5461               itself.</para>
5462
5463               <para>This is a file generated by
5464               <command>scripts/locales.pl</command> while processing your
5465               locales. It's only to have the missing entries singled out and
5466               does not belong to a language package.</para>
5467             </listitem>
5468           </varlistentry>
5469
5470           <varlistentry>
5471             <term>lost</term>
5472
5473             <listitem>
5474               <para>This file is not a part of the language package
5475               itself.</para>
5476
5477               <para>Another file generated by
5478               <command>scripts/locales.pl</command>. If for any reason a
5479               translation does not appear anymore and can be deleted, it gets
5480               moved here. The last 50 or so entries deleted are saved here in
5481               case you made a typo, so that you don't have to translate
5482               everything again. If a tranlsation is missing, the lost file is
5483               checked first. If you maintain a language package, you might
5484               want to keep this safe somewhere.</para>
5485             </listitem>
5486           </varlistentry>
5487         </variablelist>
5488       </sect2>
5489     </sect1>
5490
5491     <sect1 id="devel.testsuite">
5492       <title>Die kivitendo-Test-Suite</title>
5493
5494       <sect2 id="devel.testsuite.intro">
5495         <title>Einführung</title>
5496
5497         <para>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <literal>Test::More</literal>.</para>
5498
5499         <para>Die grundlegenden Fakten sind:</para>
5500
5501         <itemizedlist>
5502           <listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem>
5503
5504           <listitem><para>Ein Script (bzw. ein Test) in <filename>f/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
5505
5506           <listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
5507
5508           <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>f/</filename>, deren
5509           Dateiname auf <literal>.t</literal> endet.</para></listitem>
5510         </itemizedlist>
5511       </sect2>
5512
5513       <sect2 id="devel.testsuite.prerequisites">
5514         <title>Voraussetzungen</title>
5515
5516         <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>
5517
5518         <itemizedlist>
5519           <listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core:
5520           <literal>perl-Test-Deep</literal>; openSuSE: <literal>perl-Test-Deep</literal>)</para></listitem>
5521         </itemizedlist>
5522       </sect2>
5523
5524       <sect2 id="devel.testsuite.execution">
5525         <title>
5526           Existierende Tests ausführen
5527         </title>
5528
5529         <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
5530         gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.sh</filename>.</para>
5531
5532         <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.sh</filename> ohne weitere Parameter aus
5533         dem kivitendo-Basisverzeichnis heraus ausführen.</para>
5534
5535         <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.sh</filename>. Beispielsweise:</para>
5536
5537         <programlisting>t/test.sh t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
5538       </sect2>
5539
5540
5541       <sect2 id="devel.testsuite.meaning_of_scripts">
5542         <title>
5543           Bedeutung der verschiedenen Test-Scripte
5544         </title>
5545
5546         <para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch
5547         während der Entwicklung nützliche Tests sind:</para>
5548
5549         <itemizedlist>
5550           <listitem><para><filename>t/001compile.t</filename> -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab</para></listitem>
5551           <listitem><para><filename>t/002goodperl.t</filename> -- überprüft alle Perl-Dateien auf Anwesenheit von '<literal>use strict</literal>'-Anweisungen</para></listitem>
5552           <listitem><para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von <function>system()</function> und <function>exec()</function> auf Gültigkeit</para></listitem>
5553           <listitem><para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien Tab-Zeichen enthalten</para></listitem>
5554           <listitem><para><filename>t/006spelling.t</filename> -- sucht nach häufigen Rechtschreibfehlern</para></listitem>
5555           <listitem><para><filename>t/011pod.t</filename> -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit</para></listitem>
5556         </itemizedlist>
5557
5558         <para>Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.</para>
5559       </sect2>
5560
5561       <sect2 id="devel.testsuite.create_new">
5562         <title>
5563           Neue Test-Scripte erstellen
5564         </title>
5565
5566         <para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende
5567         Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.</para>
5568
5569         <sect3 id="devel.testsuite.ideas_for_non_function_tests">
5570           <title>
5571             Ideen für neue Test-Scripte, die keine konkreten Funktionen testen
5572           </title>
5573
5574           <para> Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:</para>
5575
5576           <itemizedlist>
5577             <listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem>
5578             <listitem><para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)</para></listitem>
5579             <listitem><para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para></listitem>
5580             <listitem><para>Überprüfung auf Leerzeichen am Ende von Zeilen</para></listitem>
5581             <listitem><para>Test, ob alle zu übersetzenden Strings in <filename>locale/de/all</filename> vorhanden sind</para></listitem>
5582             <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>
5583           </itemizedlist>
5584         </sect3>
5585
5586         <sect3 id="devel.testsuite.directory_and_test_names">
5587           <title>
5588             Konvention für Verzeichnis- und Dateinamen
5589           </title>
5590
5591           <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>
5592
5593           <itemizedlist>
5594             <listitem><para>Die Dateiendung muss <filename>.t</filename> lauten.</para></listitem>
5595
5596             <listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
5597             <filename>bad_function_params.t</filename>).</para></listitem>
5598
5599             <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen
5600             (beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem>
5601
5602             <listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist
5603             (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.</para></listitem>
5604           </itemizedlist>
5605         </sect3>
5606
5607         <sect3 id="devel.testsuite.minimal_example">
5608           <title>
5609             Minimales Skelett für eigene Scripte
5610           </title>
5611
5612           <para>Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:</para>
5613
5614           <programlisting>use Test::More tests =&gt; 0;
5615
5616 use lib 't';
5617
5618 use Support::TestSetup;
5619
5620 Support::TestSetup::login();</programlisting>
5621
5622           <para>Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie
5623           <varname>$::auth</varname>, <varname>$::form</varname> oder <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei
5624           <filename>config/kivitendo.conf</filename> im Abschnitt <literal>testing.login</literal> ein gültiger Login-Name eingetragen
5625           sein. Dieser wird für die Datenbankverbindung benötigt.</para>
5626
5627           <para>Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile <code>Support::TestSetup::login();</code>
5628           weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.</para>
5629         </sect3>
5630       </sect2>
5631     </sect1>
5632
5633     <sect1 id="devel.style-guide">
5634       <title>Stil-Richtlinien</title>
5635
5636       <para>Die folgenden Regeln haben das Ziel, den Code möglichst gut les-
5637       und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich
5638       eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden
5639       wird (Stichworte "Klammern" oder "Hash-Keys").</para>
5640
5641       <para>Diese Regeln sind keine Schikane sondern erleichtern allen das
5642       Leben!</para>
5643
5644       <para>Jeder, der einen Patch schickt, sollte seinen Code vorher
5645       überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
5646       nicht.</para>
5647
5648       <orderedlist>
5649         <listitem>
5650           <para>Es werden keine echten Tabs sondern Leerzeichen
5651           verwendet.</para>
5652         </listitem>
5653
5654         <listitem>
5655           <para>Die Einrückung beträgt zwei Leerzeichen. Beispiel:</para>
5656
5657           <programlisting>foreach my $row (@data) {
5658   if ($flag) {
5659     # do something with $row
5660   }
5661
5662   if ($use_modules) {
5663     $row-&gt;{modules} = MODULE-&gt;retrieve(
5664       id   =&gt; $row-&gt;{id},
5665       date =&gt; $use_now ? localtime() : $row-&gt;{time},
5666     );
5667   }
5668
5669   $report-&gt;add($row);
5670 }</programlisting>
5671         </listitem>
5672
5673         <listitem>
5674           <para>Öffnende geschweifte Klammern befinden sich auf der gleichen
5675           Zeile wie der letzte Befehl. Beispiele:</para>
5676
5677           <programlisting>sub debug {
5678   ...
5679 }</programlisting>
5680
5681           <para>oder</para>
5682
5683           <programlisting>if ($form-&gt;{item_rows} &gt; 0) {
5684   ...
5685 }</programlisting>
5686         </listitem>
5687
5688         <listitem>
5689           <para>Schließende geschweifte Klammern sind so weit eingerückt wie
5690           der Befehl / die öffnende schließende Klammer, die den Block
5691           gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen
5692           Beispiele wie bei 3. gelten.</para>
5693         </listitem>
5694
5695         <listitem>
5696           <para>Die Wörter "<function>else</function>",
5697           "<function>elsif</function>", "<function>while</function>" befinden
5698           sich auf der gleichen Zeile wie schließende geschweifte Klammern.
5699           Beispiele:</para>
5700
5701           <programlisting>if ($form-&gt;{sum} &gt; 1000) {
5702   ...
5703 } elsif ($form-&gt;{sum} &gt; 0) {
5704   ...
5705 } else {
5706   ...
5707 }
5708
5709 do {
5710   ...
5711 } until ($a &gt; 0);</programlisting>
5712         </listitem>
5713
5714         <listitem>
5715           <para>Parameter von Funktionsaufrufen müssen mit runden Klammern
5716           versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
5717           und grep-ähnliche Operatoren. Beispiel:</para>
5718
5719           <programlisting>$main::lxdebug-&gt;message("Could not find file.");
5720 %options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</programlisting>
5721         </listitem>
5722
5723         <listitem>
5724           <para>Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:</para>
5725
5726           <para>Generell gilt: Hashkeys und Arrayindices sollten nicht durch
5727           Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
5728           Blöcke schon. Beispiel:</para>
5729
5730           <programlisting>if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
5731   ...
5732 }
5733
5734 $array[$i + 1]             = 4;
5735 $form-&gt;{sum}              += $form-&gt;{"row_$i"};
5736 $form-&gt;{ $form-&gt;{index} } += 1;
5737
5738 map { $form-&gt;{sum} += $form-&gt;{"row_$_"} } 1..$rowcount;</programlisting>
5739         </listitem>
5740
5741         <listitem>
5742           <para>Mehrzeilige Befehle</para>
5743
5744           <orderedlist>
5745             <listitem>
5746               <para>Werden die Parameter eines Funktionsaufrufes auf mehrere
5747               Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
5748               werden, in der die ersten Funktionsparameter in der ersten Zeile
5749               stehen. Beispiel:</para>
5750
5751               <programlisting>$sth = $dbh-&gt;prepare("SELECT * FROM some_table WHERE col = ?",
5752                     $form-&gt;{some_col_value});</programlisting>
5753             </listitem>
5754
5755             <listitem>
5756               <para>Ein Spezialfall ist der ternäre Oprator "?:", der am
5757               besten in einer übersichtlichen Tabellenstruktur organisiert
5758               wird. Beispiel:</para>
5759
5760               <programlisting>my $rowcount = $form-&gt;{"row_$i"} ? $i
5761              : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
5762              :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</programlisting>
5763             </listitem>
5764           </orderedlist>
5765         </listitem>
5766
5767         <listitem>
5768           <para>Kommentare</para>
5769
5770           <orderedlist>
5771             <listitem>
5772               <para>Kommentare, die alleine in einer Zeile stehen, sollten
5773               soweit wie der Code eingerückt sein.</para>
5774             </listitem>
5775
5776             <listitem>
5777               <para>Seitliche hängende Kommentare sollten einheitlich
5778               formatiert werden.</para>
5779             </listitem>
5780
5781             <listitem>
5782               <para>Sämtliche Kommentare und Sonstiges im Quellcode ist bitte
5783               auf Englisch zu verfassen. So wie ich keine Lust habe,
5784               französischen Quelltext zu lesen, sollte auch der kivitendo
5785               Quelltext für nicht-Deutschsprachige lesbar sein.
5786               Beispiel:</para>
5787
5788               <programlisting>my $found = 0;
5789 while (1) {
5790   last if $found;
5791
5792   # complicated check
5793   $found = 1 if //
5794 }
5795
5796 $i  = 0        # initialize $i
5797 $n  = $i;      # save $i
5798 $i *= $const;  # do something crazy
5799 $i  = $n;      # recover $i</programlisting>
5800             </listitem>
5801           </orderedlist>
5802         </listitem>
5803
5804         <listitem>
5805           <para>Hashkeys sollten nur in Anführungszeichen stehen, wenn die
5806           Interpolation gewünscht ist. Beispiel:</para>
5807
5808           <programlisting>$form-&gt;{sum}      = 0;
5809 $form-&gt;{"row_$i"} = $form-&gt;{"row_$i"} - 5;
5810 $some_hash{42}    = 54;</programlisting>
5811         </listitem>
5812
5813         <listitem>
5814           <para>Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen
5815           unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
5816           wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in
5817           grossen Tabellen), dann ist Lesbarkeit vorzuziehen.</para>
5818
5819           <para>Als Beispiel sei die Funktion
5820           <function>print_options</function> aus
5821           <filename>bin/mozilla/io.pl</filename> angeführt.</para>
5822         </listitem>
5823
5824         <listitem>
5825           <para>Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind
5826           unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs
5827           verfälschen.</para>
5828
5829           <para>Emacs und vim haben beide recht einfache Methoden zur
5830           Entfernung von trailing whitespace. Emacs kennt das Kommande
5831           <command>nuke-trailing-whitespace</command>, vim macht das gleiche
5832           manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
5833           BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern
5834           gebunden.</para>
5835         </listitem>
5836
5837         <listitem>
5838           <para>Es wird kein <command>perltidy</command> verwendet.</para>
5839
5840           <para>In der Vergangenheit wurde versucht,
5841           <command>perltidy</command> zu verwenden, um einen einheitlichen
5842           Stil zu erlangen. Es hat sich aber gezeigt, dass
5843           <command>perltidy</command>s sehr eigenwilliges Verhalten, was
5844           Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für
5845           den Interessierten sind hier die
5846           <command>perltidy</command>-Optionen, die grob den beschriebenen
5847           Richtlinien entsprechen:</para>
5848
5849           <programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
5850 -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
5851 -lp -vt=1 -vtc=1</programlisting>
5852         </listitem>
5853
5854         <listitem>
5855           <para><varname>STDERR</varname> ist tabu. Unkonditionale
5856           Debugmeldungen auch.</para>
5857
5858           <para>kivitendo bietet mit dem Modul <classname>LXDebug</classname>
5859           einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
5860           Grund, nach <varname>STDERR</varname> zu schreiben.</para>
5861
5862           <para>Die <classname>LXDebug</classname>-Methode
5863           "<function>message</function>" nimmt als ersten Paramter außerdem
5864           eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer
5865           angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden
5866           und werden in den meisten Fällen auch vom Repository
5867           zurückgewiesen.</para>
5868         </listitem>
5869
5870         <listitem>
5871           <para>Alle neuen Module müssen use strict verwenden.</para>
5872
5873           <para><varname>$form</varname>, <varname>$auth</varname>,
5874           <varname>$locale</varname>, <varname>$lxdebug</varname> und
5875           <varname>%myconfig</varname> werden derzeit aus dem main package
5876           importiert (siehe <xref linkend="devel.globals" />. Alle anderen
5877           Konstrukte sollten lexikalisch lokal gehalten werden.</para>
5878         </listitem>
5879       </orderedlist>
5880     </sect1>
5881
5882     <sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
5883       <title>Dokumentation erstellen</title>
5884
5885       <sect2 id="devel.build-doc.introduction">
5886         <title>Einführung</title>
5887
5888         <para>Diese Dokumentation ist in <productname>DocBook</productname>
5889         XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor.
5890         Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen
5891         Editor nutzt, der spezielle Unterstützung für
5892         <productname>DocBook</productname> mitbringt. Wir empfehlen dafür den
5893         <ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
5894         Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos
5895         ist.</para>
5896       </sect2>
5897
5898       <sect2 id="devel.build-doc.required-software">
5899         <title>Benötigte Software</title>
5900
5901         <para>Bei <productname>DocBook</productname> ist Prinzip, dass
5902         ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden
5903         dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML
5904         erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script
5905         <command>scripts/build_doc.sh</command>.</para>
5906
5907         <para>Das Script benötigt zur Konvertierung verschiedene
5908         Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt
5909         werden:</para>
5910
5911         <itemizedlist>
5912           <listitem>
5913             <para><ulink
5914             url="http://www.oracle.com/technetwork/java/index.html">Java</ulink>
5915             in einer halbwegs aktuellen Version</para>
5916           </listitem>
5917
5918           <listitem>
5919             <para>Das Java-Build-System <ulink
5920             url="http://ant.apache.org/">Apache Ant</ulink></para>
5921           </listitem>
5922
5923           <listitem>
5924             <para>Das Dokumentations-System Dobudish für
5925             <productname>DocBook</productname> 4.5, eine Zusammenstellung
5926             diverser Stylesheets und Grafiken zur Konvertierung von
5927             <productname>DocBook</productname> XML in andere Formate. Das
5928             Paket, das benötigt wird, ist zum Zeitpunkt der
5929             Dokumentationserstellung
5930             <filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
5931             url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink>
5932             bereitsteht.</para>
5933           </listitem>
5934         </itemizedlist>
5935
5936         <para>Apache Ant sowie ein dazu passendes Java Runtime Environment
5937         sind auf allen gängigen Plattformen verfügbar. Beispiel für
5938         Debian/Ubuntu:</para>
5939
5940         <programlisting>apt-get install ant openjdk-7-jre</programlisting>
5941
5942         <para>Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis
5943         <filename>doc/build</filename> entpackt werden. Beispiel unter der
5944         Annahme, das <productname>Dobudish</productname> in
5945         <filename>$HOME/Downloads</filename> heruntergeladen wurde:</para>
5946
5947         <programlisting>cd doc/build
5948 unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
5949       </sect2>
5950
5951       <sect2 id="devel.build-doc.build">
5952         <title>PDFs und HTML-Seiten erstellen</title>
5953
5954         <para>Die eigentliche Konvertierung erfolgt nach Installation der
5955         benötigten Software mit einem einfachen Aufruf direkt aus dem
5956         kivitendo-Installationsverzeichnis heraus:</para>
5957
5958         <programlisting>./scripts/build_doc.sh</programlisting>
5959       </sect2>
5960
5961       <sect2 id="devel.build-doc.repository">
5962         <title>Einchecken in das Git-Repository</title>
5963
5964         <para>Sowohl die XML-Datei als auch die erzeugten PDF- und
5965         HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass
5966         nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut
5967         und alles zusammen in einem Commit eingecheckt werden sollten.</para>
5968
5969         <para>Die "<filename>dobudish</filename>"-Verzeichnisse bzw.
5970         symbolischen Links gehören hingegen nicht in das Repository.</para>
5971       </sect2>
5972     </sect1>
5973   </chapter>
5974 </book>