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