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