CVar: Dokumentation um Lieferadressen-CVars ergänzt
[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
4341           <para>Die benutzerdefinierten Variablen der Lieferadressen stehen unter einem ähnlichen Namensschema zur Verfügung. Hier lautet der Präfix <varname>shiptocvar_</varname>.</para>
4342         </sect3>
4343       </sect2>
4344
4345       <sect2 id="dokumentenvorlagen-und-variablen.dunning">
4346         <title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
4347
4348         <sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
4349           <title>Namen der Vorlagen</title>
4350
4351           <para>Die Namen der Vorlagen werden im System-Menü vom Benutzer
4352           eingegeben. Wird für ein Mahnlevel die Option zur automatischen
4353           Erstellung einer Rechnung über die Mahngebühren und Zinsen
4354           aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem
4355           Vorlagenname für diese Mahnstufe mit dem Zusatz
4356           <constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
4357           für die ausgewählte Sprache und den ausgewählten Drucker
4358           angehängt.</para>
4359         </sect3>
4360
4361         <sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
4362           <title>Allgemeine Variablen in Mahnungen</title>
4363
4364           <para>Die Variablen des Verkäufers stehen wie gewohnt als
4365           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
4366           Kunden stehen als Variablen <varname>name</varname>,
4367           <varname>street</varname>, <varname>zipcode</varname>,
4368           <varname>city</varname>, <varname>country</varname>,
4369           <varname>department_1</varname>, <varname>department_2</varname>,
4370           und <varname>email</varname> zur Verfügung.</para>
4371
4372           <para>Weitere Variablen beinhalten:</para>
4373
4374           <variablelist>
4375             <varlistentry>
4376               <term><varname>dunning_date</varname></term>
4377
4378               <listitem>
4379                 <para>Datum der Mahnung</para>
4380               </listitem>
4381             </varlistentry>
4382
4383             <varlistentry>
4384               <term><varname>dunning_duedate</varname></term>
4385
4386               <listitem>
4387                 <para>Fälligkeitsdatum für diese Mahhnung</para>
4388               </listitem>
4389             </varlistentry>
4390
4391             <varlistentry>
4392               <term><varname>dunning_id</varname></term>
4393
4394               <listitem>
4395                 <para>Mahnungsnummer</para>
4396               </listitem>
4397             </varlistentry>
4398
4399             <varlistentry>
4400               <term><varname>fee</varname></term>
4401
4402               <listitem>
4403                 <para>Kumulative Mahngebühren</para>
4404               </listitem>
4405             </varlistentry>
4406
4407             <varlistentry>
4408               <term><varname>interest_rate</varname></term>
4409
4410               <listitem>
4411                 <para>Zinssatz per anno in Prozent</para>
4412               </listitem>
4413             </varlistentry>
4414
4415             <varlistentry>
4416               <term><varname>total_amount</varname></term>
4417
4418               <listitem>
4419                 <para>Gesamter noch zu zahlender Betrag als
4420                 <function>fee</function> + <function>total_interest</function>
4421                 + <function>total_open_amount</function></para>
4422               </listitem>
4423             </varlistentry>
4424
4425             <varlistentry>
4426               <term><varname>total_interest</varname></term>
4427
4428               <listitem>
4429                 <para>Zinsen per anno über alle Rechnungen</para>
4430               </listitem>
4431             </varlistentry>
4432
4433             <varlistentry>
4434               <term><varname>total_open_amount</varname></term>
4435
4436               <listitem>
4437                 <para>Summe über alle offene Beträge der Rechnungen</para>
4438               </listitem>
4439             </varlistentry>
4440           </variablelist>
4441         </sect3>
4442
4443         <sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
4444           <title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
4445
4446           <variablelist>
4447             <varlistentry>
4448               <term><varname>dn_amount</varname></term>
4449
4450               <listitem>
4451                 <para>Rechnungssumme (brutto)</para>
4452               </listitem>
4453             </varlistentry>
4454
4455             <varlistentry>
4456               <term><varname>dn_duedate</varname></term>
4457
4458               <listitem>
4459                 <para>Originales Fälligkeitsdatum der Rechnung</para>
4460               </listitem>
4461             </varlistentry>
4462
4463             <varlistentry>
4464               <term><varname>dn_dunning_date</varname></term>
4465
4466               <listitem>
4467                 <para>Datum der Mahnung</para>
4468               </listitem>
4469             </varlistentry>
4470
4471             <varlistentry>
4472               <term><varname>dn_dunning_duedate</varname></term>
4473
4474               <listitem>
4475                 <para>Fälligkeitsdatum der Mahnung</para>
4476               </listitem>
4477             </varlistentry>
4478
4479             <varlistentry>
4480               <term><varname>dn_fee</varname></term>
4481
4482               <listitem>
4483                 <para>Kummulative Mahngebühr</para>
4484               </listitem>
4485             </varlistentry>
4486
4487             <varlistentry>
4488               <term><varname>dn_interest</varname></term>
4489
4490               <listitem>
4491                 <para>Zinsen per anno für diese Rechnung</para>
4492               </listitem>
4493             </varlistentry>
4494
4495             <varlistentry>
4496               <term><varname>dn_invnumber</varname></term>
4497
4498               <listitem>
4499                 <para>Rechnungsnummer</para>
4500               </listitem>
4501             </varlistentry>
4502
4503             <varlistentry>
4504               <term><varname>dn_linetotal</varname></term>
4505
4506               <listitem>
4507                 <para>Noch zu zahlender Betrag (ergibt sich aus
4508                 <varname>dn_open_amount</varname> + <varname>dn_fee</varname>
4509                 + <varname>dn_interest</varname>)</para>
4510               </listitem>
4511             </varlistentry>
4512
4513             <varlistentry>
4514               <term><varname>dn_netamount</varname></term>
4515
4516               <listitem>
4517                 <para>Rechnungssumme (netto)</para>
4518               </listitem>
4519             </varlistentry>
4520
4521             <varlistentry>
4522               <term><varname>dn_open_amount</varname></term>
4523
4524               <listitem>
4525                 <para>Offener Rechnungsbetrag</para>
4526               </listitem>
4527             </varlistentry>
4528
4529             <varlistentry>
4530               <term><varname>dn_ordnumber</varname></term>
4531
4532               <listitem>
4533                 <para>Bestellnummer</para>
4534               </listitem>
4535             </varlistentry>
4536
4537             <varlistentry>
4538               <term><varname>dn_transdate</varname></term>
4539
4540               <listitem>
4541                 <para>Rechnungsdatum</para>
4542               </listitem>
4543             </varlistentry>
4544
4545             <varlistentry>
4546               <term><varname>dn_curr</varname></term>
4547
4548               <listitem>
4549                 <para>Währung, in der die Rechnung erstellt wurde. (Die
4550                 Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
4551               </listitem>
4552             </varlistentry>
4553           </variablelist>
4554         </sect3>
4555
4556         <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
4557           <title>Variablen in automatisch erzeugten Rechnungen über
4558           Mahngebühren</title>
4559
4560           <para>Die Variablen des Verkäufers stehen wie gewohnt als
4561           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
4562           Kunden stehen als Variablen <varname>name</varname>,
4563           <varname>street</varname>, <varname>zipcode</varname>,
4564           <varname>city</varname>, <varname>country</varname>,
4565           <varname>department_1</varname>, <varname>department_2</varname>,
4566           und <varname>email</varname> zur Verfügung.</para>
4567
4568           <para>Weitere Variablen beinhalten:</para>
4569
4570           <variablelist>
4571             <varlistentry>
4572               <term><varname>duedate</varname></term>
4573
4574               <listitem>
4575                 <para>Fälligkeitsdatum der Rechnung</para>
4576               </listitem>
4577             </varlistentry>
4578
4579             <varlistentry>
4580               <term><varname>dunning_id</varname></term>
4581
4582               <listitem>
4583                 <para>Mahnungsnummer</para>
4584               </listitem>
4585             </varlistentry>
4586
4587             <varlistentry>
4588               <term><varname>fee</varname></term>
4589
4590               <listitem>
4591                 <para>Mahngebühren</para>
4592               </listitem>
4593             </varlistentry>
4594
4595             <varlistentry>
4596               <term><varname>interest</varname></term>
4597
4598               <listitem>
4599                 <para>Zinsen</para>
4600               </listitem>
4601             </varlistentry>
4602
4603             <varlistentry>
4604               <term><varname>invamount</varname></term>
4605
4606               <listitem>
4607                 <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
4608                 <varname>interest</varname>)</para>
4609               </listitem>
4610             </varlistentry>
4611
4612             <varlistentry>
4613               <term><varname>invdate</varname></term>
4614
4615               <listitem>
4616                 <para>Rechnungsdatum</para>
4617               </listitem>
4618             </varlistentry>
4619
4620             <varlistentry>
4621               <term><varname>invnumber</varname></term>
4622
4623               <listitem>
4624                 <para>Rechnungsnummer</para>
4625               </listitem>
4626             </varlistentry>
4627           </variablelist>
4628         </sect3>
4629       </sect2>
4630
4631       <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
4632         <title>Variablen in anderen Vorlagen</title>
4633
4634         <sect3>
4635           <title>Einführung</title>
4636
4637           <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
4638           Rechnung. Allerdings heißen die Variablen, die mit
4639           <varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
4640           fangen sie mit <varname>quo</varname> für "quotation" an:
4641           <varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
4642           wiederum fangen sie mit <varname>ord</varname> für "order" an:
4643           <varname>ordnumber</varname> für Bestellnummer etc.</para>
4644
4645           <para>Manche Variablen sind in anderen Vorlagen hingegen gar nicht
4646           vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies
4647           sind Variablen, die vom Geschäftsablauf her in der entsprechenden
4648           Vorlage keine Bedeutung haben oder noch nicht belegt sein
4649           können.</para>
4650
4651           <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
4652           in Rechnungen aufgeführt.</para>
4653         </sect3>
4654
4655         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
4656           <title>Angebote und Preisanfragen</title>
4657
4658           <variablelist>
4659             <varlistentry>
4660               <term><varname>quonumber</varname></term>
4661
4662               <listitem>
4663                 <para>Angebots- bzw. Anfragenummer</para>
4664               </listitem>
4665             </varlistentry>
4666
4667             <varlistentry>
4668               <term><varname>reqdate</varname></term>
4669
4670               <listitem>
4671                 <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
4672                 Preisanfragen)</para>
4673               </listitem>
4674             </varlistentry>
4675
4676             <varlistentry>
4677               <term><varname>transdate</varname></term>
4678
4679               <listitem>
4680                 <para>Angebots- bzw. Anfragedatum</para>
4681               </listitem>
4682             </varlistentry>
4683           </variablelist>
4684         </sect3>
4685
4686         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
4687           <title>Auftragsbestätigungen und Lieferantenaufträge</title>
4688
4689           <variablelist>
4690             <varlistentry>
4691               <term><varname>ordnumber</varname></term>
4692
4693               <listitem>
4694                 <para>Auftragsnummer</para>
4695               </listitem>
4696             </varlistentry>
4697
4698             <varlistentry>
4699               <term><varname>reqdate</varname></term>
4700
4701               <listitem>
4702                 <para>Lieferdatum</para>
4703               </listitem>
4704             </varlistentry>
4705
4706             <varlistentry>
4707               <term><varname>transdate</varname></term>
4708
4709               <listitem>
4710                 <para>Auftragsdatum</para>
4711               </listitem>
4712             </varlistentry>
4713           </variablelist>
4714         </sect3>
4715
4716         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
4717           <title>Lieferscheine (Verkauf und Einkauf)</title>
4718
4719           <variablelist>
4720             <varlistentry>
4721               <term><varname>cusordnumber</varname></term>
4722
4723               <listitem>
4724                 <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
4725                 des Lieferanten (im Einkauf)</para>
4726               </listitem>
4727             </varlistentry>
4728
4729             <varlistentry>
4730               <term><varname>donumber</varname></term>
4731
4732               <listitem>
4733                 <para>Lieferscheinnummer</para>
4734               </listitem>
4735             </varlistentry>
4736
4737             <varlistentry>
4738               <term><varname>transdate</varname></term>
4739
4740               <listitem>
4741                 <para>Lieferscheindatum</para>
4742               </listitem>
4743             </varlistentry>
4744           </variablelist>
4745
4746           <para>Für jede Position eines Lieferscheines gibt es ein Unterarray
4747           mit den Informationen darüber, von welchem Lager und Lagerplatz aus
4748           die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
4749           Lagerplatz sie eingelagert wurden. Diese müssen mittels einer
4750           <function>foreach</function>-Schleife ausgegeben werden. Diese
4751           Variablen sind:</para>
4752
4753           <variablelist>
4754             <varlistentry>
4755               <term><varname>si_bin</varname></term>
4756
4757               <listitem>
4758                 <para>Lagerplatz</para>
4759               </listitem>
4760             </varlistentry>
4761
4762             <varlistentry>
4763               <term><varname>si_chargenumber</varname></term>
4764
4765               <listitem>
4766                 <para>Chargennummer</para>
4767               </listitem>
4768             </varlistentry>
4769
4770             <varlistentry>
4771               <term><varname>si_bestbefore</varname></term>
4772
4773               <listitem>
4774                 <para>Mindesthaltbarkeit</para>
4775               </listitem>
4776             </varlistentry>
4777
4778             <varlistentry>
4779               <term><varname>si_number</varname></term>
4780
4781               <listitem>
4782                 <para>Artikelnummer</para>
4783               </listitem>
4784             </varlistentry>
4785
4786             <varlistentry>
4787               <term><varname>si_qty</varname></term>
4788
4789               <listitem>
4790                 <para>Anzahl bzw. Menge</para>
4791               </listitem>
4792             </varlistentry>
4793
4794             <varlistentry>
4795               <term><varname>si_runningnumber</varname></term>
4796
4797               <listitem>
4798                 <para>Positionsnummer (1, 2, 3 etc)</para>
4799               </listitem>
4800             </varlistentry>
4801
4802             <varlistentry>
4803               <term><varname>si_unit</varname></term>
4804
4805               <listitem>
4806                 <para>Einheit</para>
4807               </listitem>
4808             </varlistentry>
4809
4810             <varlistentry>
4811               <term><varname>si_warehouse</varname></term>
4812
4813               <listitem>
4814                 <para>Lager</para>
4815               </listitem>
4816             </varlistentry>
4817           </variablelist>
4818         </sect3>
4819
4820         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
4821           <title>Variablen für Sammelrechnung</title>
4822
4823           <variablelist>
4824             <varlistentry>
4825               <term><varname>c0total</varname></term>
4826
4827               <listitem>
4828                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
4829                 Tage</para>
4830               </listitem>
4831             </varlistentry>
4832
4833             <varlistentry>
4834               <term><varname>c30total</varname></term>
4835
4836               <listitem>
4837                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
4838                 und &lt; 60 Tage</para>
4839               </listitem>
4840             </varlistentry>
4841
4842             <varlistentry>
4843               <term><varname>c60total</varname></term>
4844
4845               <listitem>
4846                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
4847                 und &lt; 90 Tage</para>
4848               </listitem>
4849             </varlistentry>
4850
4851             <varlistentry>
4852               <term><varname>c90total</varname></term>
4853
4854               <listitem>
4855                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
4856                 Tage</para>
4857               </listitem>
4858             </varlistentry>
4859
4860             <varlistentry>
4861               <term><varname>total</varname></term>
4862
4863               <listitem>
4864                 <para>Gesamtbetrag aller Rechnungen</para>
4865               </listitem>
4866             </varlistentry>
4867           </variablelist>
4868
4869           <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
4870
4871           <variablelist>
4872             <varlistentry>
4873               <term><varname>invnumber</varname></term>
4874
4875               <listitem>
4876                 <para>Rechnungsnummer</para>
4877               </listitem>
4878             </varlistentry>
4879
4880             <varlistentry>
4881               <term><varname>invdate</varname></term>
4882
4883               <listitem>
4884                 <para>Rechnungsdatum</para>
4885               </listitem>
4886             </varlistentry>
4887
4888             <varlistentry>
4889               <term><varname>duedate</varname></term>
4890
4891               <listitem>
4892                 <para>Fälligkeitsdatum</para>
4893               </listitem>
4894             </varlistentry>
4895
4896             <varlistentry>
4897               <term><varname>amount</varname></term>
4898
4899               <listitem>
4900                 <para>Summe der Rechnung</para>
4901               </listitem>
4902             </varlistentry>
4903
4904             <varlistentry>
4905               <term><varname>open</varname></term>
4906
4907               <listitem>
4908                 <para>Noch offener Betrag der Rechnung</para>
4909               </listitem>
4910             </varlistentry>
4911
4912             <varlistentry>
4913               <term><varname>c0</varname></term>
4914
4915               <listitem>
4916                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
4917                 Tage</para>
4918               </listitem>
4919             </varlistentry>
4920
4921             <varlistentry>
4922               <term><varname>c30</varname></term>
4923
4924               <listitem>
4925                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
4926                 &lt; 60 Tage</para>
4927               </listitem>
4928             </varlistentry>
4929
4930             <varlistentry>
4931               <term><varname>c60</varname></term>
4932
4933               <listitem>
4934                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
4935                 &lt; 90 Tage</para>
4936               </listitem>
4937             </varlistentry>
4938
4939             <varlistentry>
4940               <term><varname>c90</varname></term>
4941
4942               <listitem>
4943                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
4944                 Tage</para>
4945               </listitem>
4946             </varlistentry>
4947           </variablelist>
4948         </sect3>
4949       </sect2>
4950
4951       <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
4952         <title>Blöcke, bedingte Anweisungen und Schleifen</title>
4953
4954         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
4955           <title>Einführung</title>
4956
4957           <para>Der Parser kennt neben den Variablen einige weitere
4958           Konstrukte, die gesondert behandelt werden. Diese sind wie
4959           Variablennamen in spezieller Weise markiert:
4960           <command>&lt;%anweisung%&gt; ... &lt;%end%&gt;</command></para>
4961
4962           <para>Anmerkung zum <command>&lt;%end%&gt;</command>: Der besseren
4963           Verständlichkeit halber kann man nach dem <command>end</command>
4964           noch beliebig weitere Wörter schreiben, um so zu markieren, welche
4965           Anweisung (z.B. <command>if</command> oder
4966           <command>foreach</command>) damit abgeschlossen wird.</para>
4967
4968           <para>Beispiel: Lautet der Beginn eines Blockes z.B.
4969           <command>&lt;%if type == "sales_quotation"%&gt;</command>, so könnte
4970           er mit <command>&lt;%end%&gt;</command> genauso abgeschlossen werden
4971           wie mit <command>&lt;%end if%&gt;</command> oder auch
4972           <command>&lt;%end type == "sales_quotation"%&gt;</command>.</para>
4973         </sect3>
4974
4975         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
4976           <title>Der if-Block</title>
4977
4978           <programlisting>&lt;%if variablenname%&gt;
4979 ...
4980 &lt;%end%&gt;</programlisting>
4981
4982           <para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
4983           und dem "end" werden nur ausgegeben, wenn die Variable
4984           <varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
4985
4986           <para>Handelt es sich bei der benannten Variable um ein Array, also um einen Variablennamen, über den man mit
4987           <command>&lt;%foreach variablenname%&gt;</command> iteriert, so wird mit diesem Konstrukt darauf getestet, ob das Array Elemente
4988           enthält. Somit würde im folgenden Beispiel nur dann eine Liste von Zahlungseingängen samt ihrer Überschrift "Zahlungseingänge"
4989           ausgegeben, wenn tatsächlich welche getätigt wurden:</para>
4990
4991           <programlisting>&lt;%if payment%&gt;
4992 Zahlungseingänge:
4993  &lt;%foreach payment%&gt;
4994    Am &lt;%paymentdate%&gt;: &lt;%payment%&gt; €
4995  &lt;%end foreach%&gt;
4996 &lt;%end if%&gt;</programlisting>
4997
4998           <para>Die Bedingung kann auch negiert werden, indem das Wort
4999           <function>not</function> nach dem <filename>if</filename> verwendet
5000           wird. Beispiel:</para>
5001
5002           <programlisting>&lt;%if not cp_greeting%&gt;
5003 ...
5004 &lt;%end%&gt;</programlisting>
5005
5006           <para>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
5007           oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
5008           einer Variablen mit einer festen Zeichenkette oder einer anderen
5009           Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
5010           oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
5011           die rechte Seite des Vergleichsoperators in Anführungszeichen
5012           gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
5013           anderer Variablen). Zwei Beispiele, die beide Vergleiche
5014           zeigen:</para>
5015
5016           <programlisting>&lt;%if var1 == "Wert"%&gt;</programlisting>
5017
5018           <para>Testet die Variable <varname>var1</varname> auf
5019           übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
5020           Mittels <function>!=</function> anstelle von <function>==</function>
5021           würde auf Ungleichheit getestet.</para>
5022
5023           <programlisting>&lt;%if var1 == var2%&gt;</programlisting>
5024
5025           <para>Testet die Variable <varname>var1</varname> auf
5026           übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
5027           <function>!=</function> anstelle von <function>==</function> würde
5028           auf Ungleichheit getestet.</para>
5029
5030           <para>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit
5031           auch Tests auf Übereinstimmung mit regulären Ausdrücken ohne
5032           Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
5033           dieselbe Syntax wie oben nur mit <function>=~</function> und
5034           <function>!~</function> als Vergleichsoperatoren.</para>
5035
5036           <para>Beispiel für einen Test, ob die Variable
5037           <varname>intnotes</varname> (interne Bemerkungen) das Wort
5038           <constant>schwierig</constant> enthält:</para>
5039
5040           <programlisting>&lt;%if intnotes =~ "schwierig"%&gt;</programlisting>
5041         </sect3>
5042
5043         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
5044           <title>Der foreach-Block</title>
5045
5046           <programlisting>&lt;%foreach variablenname%&gt;
5047 ...
5048 &lt;%end%&gt;</programlisting>
5049
5050           <para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
5051           wie das Perl-Array der Variablen <varname>variablenname</varname>
5052           Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen
5053           Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern
5054           benutzt. In jedem Durchlauf werden die <link
5055           linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
5056           Variablen</link> jeweils auf den Wert für die aktuelle Position
5057           gesetzt.</para>
5058
5059           <para>Die Syntax sieht normalerweise wie folgt aus:</para>
5060
5061           <programlisting>&lt;%foreach number%&gt;
5062 Position: &lt;%runningnumber%&gt;
5063 Anzahl: &lt;%qty%&gt;
5064 Artikelnummer: &lt;%number%&gt;
5065 Beschreibung: &lt;%description%&gt;
5066 ...
5067 &lt;%end%&gt;</programlisting>
5068
5069           <para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
5070           <function>&lt;%foreach%&gt;</function>-Block innerhalb einer
5071           Tabellenzelle auf, so wird die komplette Tabellenzeile so oft
5072           wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der
5073           Inhalt zwischen <function>&lt;%foreach%&gt;</function> und
5074           <function>&lt;%end%&gt;</function> wiederholt, nicht aber die
5075           komplette Zeile, in der er steht.</para>
5076         </sect3>
5077       </sect2>
5078
5079       <sect2 id="dokumentenvorlagen-und-variablen.markup">
5080         <title>Markup-Code zur Textformatierung innerhalb von
5081         Formularen</title>
5082
5083         <para>Wenn der Benutzer innhalb von Formularen in kivitendo Text
5084         anders formatiert haben möchte, so ist dies begrenzt möglich.
5085         kivitendo unterstützt die Textformatierung mit HTML-ähnlichen Tags.
5086         Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung
5087         Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird
5088         dann automatisch in Anweisungen für das ausgewählte Vorlagenformat
5089         (HTML oder PDF über LaTeX) umgesetzt.</para>
5090
5091         <para>Die unterstützen Formatierungen sind:</para>
5092
5093         <variablelist>
5094           <varlistentry>
5095             <term>&lt;b&gt;Text&lt;/b&gt;</term>
5096
5097             <listitem>
5098               <para>Text wird in Fettdruck gesetzt.</para>
5099             </listitem>
5100           </varlistentry>
5101
5102           <varlistentry>
5103             <term>&lt;i&gt;Text&lt;/i&gt;</term>
5104
5105             <listitem>
5106               <para>Text wird kursiv gesetzt.</para>
5107             </listitem>
5108           </varlistentry>
5109
5110           <varlistentry>
5111             <term>&lt;u&gt;Text&lt;/u&gt;</term>
5112
5113             <listitem>
5114               <para>Text wird unterstrichen.</para>
5115             </listitem>
5116           </varlistentry>
5117
5118           <varlistentry>
5119             <term>&lt;s&gt;Text&lt;/s&gt;</term>
5120
5121             <listitem>
5122               <para>Text wird durchgestrichen. Diese Formatierung ist nicht
5123               bei der Ausgabe als PDF über LaTeX verfügbar.</para>
5124             </listitem>
5125           </varlistentry>
5126
5127           <varlistentry>
5128             <term>&lt;bullet&gt;</term>
5129
5130             <listitem>
5131               <para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
5132               unten).</para>
5133             </listitem>
5134           </varlistentry>
5135         </variablelist>
5136
5137         <para>Der Befehl <command>&lt;bullet&gt;</command> funktioniert
5138         momentan auch nur in Latex-Vorlagen.</para>
5139       </sect2>
5140     </sect1>
5141
5142     <sect1 id="excel-templates">
5143       <title>Excel-Vorlagen</title>
5144
5145       <sect2 id="excel-templates.summary">
5146         <title>Zusammenfassung</title>
5147
5148         <para>Dieses Dokument beschreibt den Mechanismus, mit dem
5149         Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
5150         einhergehen.</para>
5151       </sect2>
5152
5153       <sect2 id="excel-templates.usage">
5154         <title>Bedienung</title>
5155
5156         <para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
5157         werden. Die Konfigurationsoption heißt <varname>excel_templates =
5158         1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
5159
5160         <para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
5161         anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
5162         werden. In den normalen Verkaufsmasken taucht nun
5163         <constant>Excel</constant> als auswählbares Format auf und kann von da
5164         an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
5165
5166         <para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
5167         eine Angebotsvorlage und wird unter dem internen Namen der Angebote
5168         <filename>sales_quotation.xls</filename> gespeichert.</para>
5169       </sect2>
5170
5171       <sect2 id="excel-templates.syntax">
5172         <title>Variablensyntax</title>
5173
5174         <para>Einfache Syntax:
5175         <command>&lt;&lt;varname&gt;&gt;</command></para>
5176
5177         <para>Dabei sind <constant>&lt;&lt;</constant> und
5178         <constant>&gt;&gt;</constant> die Delimiter. Da Excel auf festen
5179         Breiten besteht, kann der Tag künstlich verlängert werden, indem
5180         weitere <constant>&lt;</constant> oder <constant>&gt;</constant>
5181         eingefügt werden. Der Tag muss nicht symmetrisch sein.
5182         Beispiel:</para>
5183
5184         <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>
5185
5186         <para>Um die Limitierung der festen Breite zu reduzieren, können
5187         weitere Variablen in einem Block interpoliert werden. Whitespace wird
5188         dazwishen dann erhalten. Beispiel:</para>
5189
5190         <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>
5191
5192         <para>Die Variablen werden interpoliert, und linksbündig mit
5193         Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
5194         lang, werden überzählige Zeichen abgeschnitten.</para>
5195
5196         <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
5197         der Block mit einem Leerzeichen anfängt. Beispiel:</para>
5198
5199         <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>
5200
5201         <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
5202         Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
5203         entfernt.</para>
5204       </sect2>
5205
5206       <sect2 id="excel-templates.limitations">
5207         <title>Einschränkungen</title>
5208
5209         <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
5210         mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
5211         beschränkt sich daher darauf, Textstellen exakt durch einen anderen
5212         Text zu ersetzen.</para>
5213
5214         <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
5215         <command>&lt;%if%&gt;</command> und
5216         <command>&lt;%foreach%&gt;</command> nicht vorhanden. Der Delimiter
5217         <constant>&lt;% %&gt;</constant> kommt in den Headerinformationen
5218         evtl. vor. Deshalb wurde auf den sichereren Delimiter
5219         <constant>&lt;&lt;</constant> und <constant>&gt;&gt;</constant>
5220         gewechselt.</para>
5221       </sect2>
5222     </sect1>
5223     <sect1 id="features.warehouse">
5224     <title>Mandantenkonfiguration Lager</title>
5225         Die Lagerverwaltung in kivitendo funktioniert standardmässig wie folgt:
5226         Wird ein Lager mit einem Lagerplatz angelegt, so gibt es die Möglichkeit hier über den
5227         Menüpunkt Lager entsprechende Warenbewegungen durchzuführen. Ferner kann
5228         jede Position eines Lieferscheins ein-, bzw. ausgelagert werden (Einkauf-, bzw. Verkauf).
5229         Es können beliebig viele Lager mit beliebig vielen Lagerplätzen abgebildet werden.
5230         Die Lagerbewegungen über einen Lieferschein erfolgt durch Anklicken jeder Einzelposition und
5231         das Auswählen dieser Position zu einem Lager mit Lagerplatz.
5232         Dieses Verfahren lässt sich schrittweise vereinfachen, je nachdem wie die Einstellungen in
5233         der Mandatenkonfiguration gesetzt werden.
5234        <itemizedlist>
5235           <listitem>
5236             <para><option>Auslagern über Standardlagerplatz</option> Hier wird ein zusätzlicher Knopf (Auslagern über Standard-Lagerplatz)
5237             in dem Lieferschein-Beleg hinzugefügt, der dann alle Lagerbewegungen über den Standardlagerplatz (konfigurierbar pro Ware) durchführt.
5238             </para>
5239           </listitem>
5240           <listitem>
5241             <para><option>Auslagern ohne Bestandsprüfung</option> Das obige Auslagern schlägt fehl, wenn die entsprechende Menge für
5242             die Lagerbewegung nicht vorhanden ist, möchte man dies auch ignorieren und ggf. dann nachpflegen, so kann man eine Negativ-Warenmenge mit dieser Option
5243             erlauben. Hierfür muss ein entsprechender Lagerplatz (Fehlbestand, o.ä.) konfiguriert sein.</para>
5244           </listitem>
5245        </itemizedlist>
5246         Zusätzliche Funktionshinweise:
5247          <itemizedlist>
5248           <listitem><para><option>Standard-Lagerplatz</option> Ist dieser konfiguriert, wird dies auch als Standard-Voreinstellung bei der Neuerfassung von
5249           Stammdaten-> Waren / Dienstleistung / Erzeugnis verwendet.
5250           </para>
5251           </listitem>
5252           <listitem><para><option>Standard-Lagerplatz verwenden, falls keiner in Stammdaten definiert</option> Wird beim 'Auslagern über Standardlagerplatz'
5253           keine Standardlagerplatz zu der Ware gefunden, so wird mit dieser Option einfach der Standardlagerplatz verwendet.
5254           </para>
5255           </listitem>
5256        </itemizedlist>
5257     </sect1>
5258   </chapter>
5259
5260   <chapter>
5261     <title>Entwicklerdokumentation</title>
5262
5263     <sect1 id="devel.globals" xreflabel="Globale Variablen">
5264       <title>Globale Variablen</title>
5265
5266       <sect2>
5267         <title>Wie sehen globale Variablen in Perl aus?</title>
5268
5269         <para>Globale Variablen liegen in einem speziellen namespace namens
5270         "main", der von überall erreichbar ist. Darüber hinaus sind bareword
5271         globs global und die meisten speziellen Variablen sind...
5272         speziell.</para>
5273
5274         <para>Daraus ergeben sich folgende Formen:</para>
5275
5276         <variablelist>
5277           <varlistentry>
5278             <term><literal>$main::form</literal></term>
5279
5280             <listitem>
5281               <para>expliziter Namespace "main"</para>
5282             </listitem>
5283           </varlistentry>
5284
5285           <varlistentry>
5286             <term><literal>$::form</literal></term>
5287
5288             <listitem>
5289               <para>impliziter Namespace "main"</para>
5290             </listitem>
5291           </varlistentry>
5292
5293           <varlistentry>
5294             <term><literal>open FILE, "file.txt"</literal></term>
5295
5296             <listitem>
5297               <para><varname>FILE</varname> ist global</para>
5298             </listitem>
5299           </varlistentry>
5300
5301           <varlistentry>
5302             <term><literal>$_</literal></term>
5303
5304             <listitem>
5305               <para>speziell</para>
5306             </listitem>
5307           </varlistentry>
5308         </variablelist>
5309
5310         <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
5311         Schlüsselwort wie "<function>global</function>", mit dem man
5312         importieren kann. <function>my</function>, <function>our</function>
5313         und <function>local</function> machen was anderes.</para>
5314
5315         <variablelist>
5316           <varlistentry>
5317             <term><literal>my $form</literal></term>
5318
5319             <listitem>
5320               <para>lexikalische Variable, gültig bis zum Ende des
5321               Scopes</para>
5322             </listitem>
5323           </varlistentry>
5324
5325           <varlistentry>
5326             <term><literal>our $form</literal></term>
5327
5328             <listitem>
5329               <para><varname>$form</varname> referenziert ab hier
5330               <varname>$PACKAGE::form</varname>.</para>
5331             </listitem>
5332           </varlistentry>
5333
5334           <varlistentry>
5335             <term><literal>local $form</literal></term>
5336
5337             <listitem>
5338               <para>Alle Änderungen an <varname>$form</varname> werden am Ende
5339               des scopes zurückgesetzt</para>
5340             </listitem>
5341           </varlistentry>
5342         </variablelist>
5343       </sect2>
5344
5345       <sect2>
5346         <title>Warum sind globale Variablen ein Problem?</title>
5347
5348         <para>Das erste Problem ist <productname>FCGI</productname>.</para>
5349
5350         <para><productname>SQL-Ledger</productname> hat fast alles im globalen
5351         namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
5352         Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
5353         aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
5354         Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
5355         Datenbankverbindungen, weil die sehr lange zum Initialisieren
5356         brauchen.</para>
5357
5358         <para>Das zweite Problem ist <function>strict</function>. Unter
5359         <function>strict</function> werden alle Variablen die nicht explizit
5360         mit <function>Package</function>, <function>my</function> oder
5361         <function>our</function> angegeben werden als Tippfehler angemarkert,
5362         dies hat, seit der Einführung, u.a. schon so manche langwierige
5363         Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
5364         angegeben werden, werden die nicht geprüft, und somit kann sich
5365         schnell ein Tippfehler einschleichen.</para>
5366       </sect2>
5367
5368       <sect2>
5369         <title>Kanonische globale Variablen</title>
5370
5371         <para>Um dieses Problem im Griff zu halten gibt es einige wenige
5372         globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
5373         vorgegebenen Eigenschaften, und alles andere sollte anderweitig
5374         umhergereicht werden.</para>
5375
5376         <para>Diese Variablen sind im Moment die folgenden neun:</para>
5377
5378         <itemizedlist>
5379           <listitem>
5380             <para><varname>$::form</varname></para>
5381           </listitem>
5382
5383           <listitem>
5384             <para><varname>%::myconfig</varname></para>
5385           </listitem>
5386
5387           <listitem>
5388             <para><varname>$::locale</varname></para>
5389           </listitem>
5390
5391           <listitem>
5392             <para><varname>$::lxdebug</varname></para>
5393           </listitem>
5394
5395           <listitem>
5396             <para><varname>$::auth</varname></para>
5397           </listitem>
5398
5399           <listitem>
5400             <para><varname>$::lx_office_conf</varname></para>
5401           </listitem>
5402
5403           <listitem>
5404             <para><varname>$::instance_conf</varname></para>
5405           </listitem>
5406
5407           <listitem>
5408             <para><varname>$::dispatcher</varname></para>
5409           </listitem>
5410
5411           <listitem>
5412             <para><varname>$::request</varname></para>
5413           </listitem>
5414         </itemizedlist>
5415
5416         <para>Damit diese nicht erneut als Müllhalde missbraucht werden, im
5417         Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
5418         Eigenschaften (Konventionen):</para>
5419
5420         <sect3>
5421           <title>$::form</title>
5422
5423           <itemizedlist>
5424             <listitem>
5425               <para>Ist ein Objekt der Klasse
5426               "<classname>Form</classname>"</para>
5427             </listitem>
5428
5429             <listitem>
5430               <para>Wird nach jedem Request gelöscht</para>
5431             </listitem>
5432
5433             <listitem>
5434               <para>Muss auch in Tests und Konsolenscripts vorhanden
5435               sein.</para>
5436             </listitem>
5437
5438             <listitem>
5439               <para>Enthält am Anfang eines Requests die Requestparameter vom
5440               User</para>
5441             </listitem>
5442
5443             <listitem>
5444               <para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
5445               cachen, das wird aber momentan absichtlich zerstört</para>
5446             </listitem>
5447           </itemizedlist>
5448
5449           <para><varname>$::form</varname> wurde unter <productname>SQL
5450           Ledger</productname> als Gottobjekt für alles missbraucht. Sämtliche
5451           alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
5452           heißt, alles was einem lieb ist (alle Variablen die einem ans Herz
5453           gewachsen sind), sollte man vor einem Aufruf (!) von zum Beispiel
5454           <function>IS-&gt;retrieve_customer()</function> in Sicherheit
5455           bringen.</para>
5456
5457           <para>Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man
5458           Berechnung in einem bestimmten Format durchführt (SL/Form.pm Zeile
5459           3552, Stand version 2.7beta), um dies hinterher wieder auf den
5460           richtigen Wert zu setzen:</para>
5461
5462           <programlisting>  my $saved_numberformat    = $::myconfig{numberformat};
5463   $::myconfig{numberformat} = $numberformat;
5464   # (...) div Berechnungen
5465   $::myconfig{numberformat} = $saved_numberformat;</programlisting>
5466
5467           <para>Das Objekt der Klasse Form hat leider im Moment noch viele
5468           zentrale Funktionen die vom internen Zustand abhängen, deshalb bitte
5469           nie einfach zerstören oder überschreiben (zumindestens nicht kurz
5470           vor einem Release oder in Absprache über bspw. die devel-Liste ;-).
5471           Es geht ziemlich sicher etwas kaputt.</para>
5472
5473           <para><varname>$::form</varname> ist gleichzeitig der Standard Scope
5474           in den <productname>Template::Toolkit</productname> Templates
5475           außerhalb der Controller: der Ausdruck <function>[% var
5476           %]</function> greift auf <varname>$::form-&gt;{var}</varname> zu.
5477           Unter Controllern ist der Standard Scope anders, da lautet der
5478           Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
5479           normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
5480           <function>&lt;%var%&gt;</function> zeigt auf
5481           <varname>$::form-&gt;{var}</varname>. Nochmal von der anderen Seite
5482           erläutert, innerhalb von (Web-)Templates sieht man häufiger solche
5483           Konstrukte:</para>
5484
5485           <programlisting>[%- IF business %]
5486 # (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
5487 [%- END %]</programlisting>
5488
5489           <para>Entweder wird hier dann $::form-&gt;{business} ausgewertet
5490           oder aber der Funktion
5491           <function>$form-&gt;parse_html_template</function> wird explizit
5492           noch ein zusätzlicher Hash übergeben, der dann auch in den
5493           (Web-)Templates zu Verfügung steht, bspw. so:</para>
5494
5495           <programlisting>$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</programlisting>
5496
5497           <para>Innerhalb von Schleifen wird
5498           <varname>$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</varname>
5499           bevorzugt, wenn vorhanden. Ein Beispiel findet sich in SL/DO.pm,
5500           welches über alle Positionen eines Lieferscheins in Schleife
5501           läuft:</para>
5502
5503           <programlisting>for $i (1 .. $form-&gt;{rowcount}) {
5504   # ...
5505   push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
5506   push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
5507   push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
5508   # ...
5509 }</programlisting>
5510         </sect3>
5511
5512         <sect3>
5513           <title>%::myconfig</title>
5514
5515           <itemizedlist>
5516             <listitem>
5517               <para>Das einzige Hash unter den globalen Variablen</para>
5518             </listitem>
5519
5520             <listitem>
5521               <para>Wird spätestens benötigt wenn auf die Datenbank
5522               zugegriffen wird</para>
5523             </listitem>
5524
5525             <listitem>
5526               <para>Wird bei jedem Request neu erstellt.</para>
5527             </listitem>
5528
5529             <listitem>
5530               <para>Enthält die Userdaten des aktuellen Logins</para>
5531             </listitem>
5532
5533             <listitem>
5534               <para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
5535               extern serialisiert werden, weil da auch der Datenbankzugriff
5536               für diesen user drinsteht.</para>
5537             </listitem>
5538
5539             <listitem>
5540               <para>Enthält unter anderem Listenbegrenzung vclimit,
5541               Datumsformat dateformat und Nummernformat numberformat</para>
5542             </listitem>
5543
5544             <listitem>
5545               <para>Enthält Datenbankzugriffinformationen</para>
5546             </listitem>
5547           </itemizedlist>
5548
5549           <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
5550           ein Userobjekt. Die meisten Funktionen, die etwas anhand des
5551           aktuellen Users entscheiden müssen, befragen
5552           <varname>%::myconfig</varname>. Innerhalb der Anwendungen sind dies
5553           überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
5554           -&gt; <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
5555           Informationen über den Benutzer die über die
5556           Administrator-Schnittstelle eingegeben wurden.</para>
5557         </sect3>
5558
5559         <sect3>
5560           <title>$::locale</title>
5561
5562           <itemizedlist>
5563             <listitem>
5564               <para>Objekt der Klasse "Locale"</para>
5565             </listitem>
5566
5567             <listitem>
5568               <para>Wird pro Request erstellt</para>
5569             </listitem>
5570
5571             <listitem>
5572               <para>Muss auch für Tests und Scripte immer verfügbar
5573               sein.</para>
5574             </listitem>
5575
5576             <listitem>
5577               <para>Cached intern über Requestgrenzen hinweg benutzte
5578               Locales</para>
5579             </listitem>
5580           </itemizedlist>
5581
5582           <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
5583           Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
5584         </sect3>
5585
5586         <sect3>
5587           <title>$::lxdebug</title>
5588
5589           <itemizedlist>
5590             <listitem>
5591               <para>Objekt der Klasse "LXDebug"</para>
5592             </listitem>
5593
5594             <listitem>
5595               <para>Wird global gecached</para>
5596             </listitem>
5597
5598             <listitem>
5599               <para>Muss immer verfügbar sein, in nahezu allen
5600               Funktionen</para>
5601             </listitem>
5602           </itemizedlist>
5603
5604           <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
5605           bereit, wie "<function>enter_sub</function>" und
5606           "<function>leave_sub</function>", mit denen in den alten Modulen ein
5607           brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
5608           der man die Wallclockzeit seit Requeststart loggen kann, sowie
5609           "<function>message</function>" und "<function>dump</function>" mit
5610           denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
5611           packen kann.</para>
5612
5613           <para>Beispielsweise so:</para>
5614
5615           <programlisting>$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
5616 $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</programlisting>
5617         </sect3>
5618
5619         <sect3>
5620           <title>$::auth</title>
5621
5622           <itemizedlist>
5623             <listitem>
5624               <para>Objekt der Klasse "SL::Auth"</para>
5625             </listitem>
5626
5627             <listitem>
5628               <para>Wird global gecached</para>
5629             </listitem>
5630
5631             <listitem>
5632               <para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
5633             </listitem>
5634
5635             <listitem>
5636               <para>Wird nach jedem Request resettet.</para>
5637             </listitem>
5638           </itemizedlist>
5639
5640           <para><varname>$::auth</varname> stellt Funktionen bereit um die
5641           Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
5642           vom aktuellen User abhängen wird das Objekt aus
5643           Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
5644           Request kurz resettet.</para>
5645
5646           <para>Dieses Objekt kapselt auch den gerade aktiven Mandanten. Dessen Einstellungen können über
5647           <literal>$::auth-&gt;client</literal> abgefragt werden; Rückgabewert ist ein Hash mit den Werten aus der Tabelle
5648           <literal>auth.clients</literal>.</para>
5649         </sect3>
5650
5651         <sect3>
5652           <title>$::lx_office_conf</title>
5653
5654           <itemizedlist>
5655             <listitem>
5656               <para>Objekt der Klasse
5657               "<classname>SL::LxOfficeConf</classname>"</para>
5658             </listitem>
5659
5660             <listitem>
5661               <para>Global gecached</para>
5662             </listitem>
5663
5664             <listitem>
5665               <para>Repräsentation der
5666               <filename>config/kivitendo.conf[.default]</filename>-Dateien</para>
5667             </listitem>
5668           </itemizedlist>
5669
5670           <para>Globale Konfiguration. Configdateien werden zum Start gelesen
5671           und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
5672           das Programm die Konfiguration ändern kann oder sollte.</para>
5673
5674           <para>Beispielsweise ist über den Konfigurationseintrag [debug] die
5675           Debug- und Trace-Log-Datei wie folgt konfiguriert und
5676           verfügbar:</para>
5677
5678           <programlisting>[debug]
5679 file_name = /tmp/kivitendo-debug.log</programlisting>
5680
5681           <para>ist der Key <varname>file</varname> im Programm als
5682           <varname>$::lx_office_conf-&gt;{debug}{file}</varname>
5683           erreichbar.</para>
5684
5685           <warning>
5686             <para>Zugriff auf die Konfiguration erfolgt im Moment über
5687             Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
5688           </warning>
5689         </sect3>
5690
5691         <sect3>
5692           <title>$::instance_conf</title>
5693
5694           <itemizedlist>
5695             <listitem>
5696               <para>Objekt der Klasse
5697               "<classname>SL::InstanceConfiguration</classname>"</para>
5698             </listitem>
5699
5700             <listitem>
5701               <para>wird pro Request neu erstellt</para>
5702             </listitem>
5703           </itemizedlist>
5704
5705           <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
5706           speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
5707           ist hier eine Mandantendatenbank. Beispielsweise überprüft
5708           <programlisting>$::instance_conf-&gt;get_inventory_system eq 'perpetual'</programlisting>
5709           ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para>
5710         </sect3>
5711
5712         <sect3>
5713           <title>$::dispatcher</title>
5714
5715           <itemizedlist>
5716             <listitem>
5717               <para>Objekt der Klasse
5718               "<varname>SL::Dispatcher</varname>"</para>
5719             </listitem>
5720
5721             <listitem>
5722               <para>wird pro Serverprozess erstellt.</para>
5723             </listitem>
5724
5725             <listitem>
5726               <para>enthält Informationen über die technische Verbindung zum
5727               Server</para>
5728             </listitem>
5729           </itemizedlist>
5730
5731           <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
5732           global gespeichert wird. Wird vermutlich irgendwann in einem anderen
5733           Objekt untergebracht.</para>
5734         </sect3>
5735
5736         <sect3>
5737           <title>$::request</title>
5738
5739           <itemizedlist>
5740             <listitem>
5741               <para>Hashref (evtl später Objekt)</para>
5742             </listitem>
5743
5744             <listitem>
5745               <para>Wird pro Request neu initialisiert.</para>
5746             </listitem>
5747
5748             <listitem>
5749               <para>Keine Unterstruktur garantiert.</para>
5750             </listitem>
5751           </itemizedlist>
5752
5753           <para><varname>$::request</varname> ist ein generischer Platz um
5754           Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
5755           at a distance benutzt werden, sondern um lokales memoizing zu
5756           ermöglichen, das garantiert am Ende des Requests zerstört
5757           wird.</para>
5758
5759           <para>Vieles von dem, was im moment in <varname>$::form</varname>
5760           liegt, sollte eigentlich hier liegen. Die groben
5761           Differentialkriterien sind:</para>
5762
5763           <itemizedlist>
5764             <listitem>
5765               <para>Kommt es vom User, und soll unverändert wieder an den
5766               User? Dann <varname>$::form</varname>, steht da eh schon</para>
5767             </listitem>
5768
5769             <listitem>
5770               <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
5771               Requests gebraucht werden? Dann
5772               <varname>$::request</varname></para>
5773             </listitem>
5774
5775             <listitem>
5776               <para>Muss ich von anderen Teilen des Programms lesend drauf
5777               zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
5778               Wrappermethode</para>
5779             </listitem>
5780           </itemizedlist>
5781         </sect3>
5782       </sect2>
5783
5784       <sect2>
5785         <title>Ehemalige globale Variablen</title>
5786
5787         <para>Die folgenden Variablen waren einmal im Programm, und wurden
5788         entfernt.</para>
5789
5790         <sect3>
5791           <title>$::cgi</title>
5792
5793           <itemizedlist>
5794             <listitem>
5795               <para>war nötig, weil cookie Methoden nicht als
5796               Klassenfunktionen funktionieren</para>
5797             </listitem>
5798
5799             <listitem>
5800               <para>Aufruf als Klasse erzeugt Dummyobjekt was im
5801               Klassennamespace gehalten wird und über Requestgrenzen
5802               leaked</para>
5803             </listitem>
5804
5805             <listitem>
5806               <para>liegt jetzt unter
5807               <varname>$::request-&gt;{cgi}</varname></para>
5808             </listitem>
5809           </itemizedlist>
5810         </sect3>
5811
5812         <sect3>
5813           <title>$::all_units</title>
5814
5815           <itemizedlist>
5816             <listitem>
5817               <para>war nötig, weil einige Funktionen in Schleifen zum Teil
5818               ein paar hundert mal pro Request eine Liste der Einheiten
5819               brauchen, und de als Parameter durch einen Riesenstack von
5820               Funktionen geschleift werden müssten.</para>
5821             </listitem>
5822
5823             <listitem>
5824               <para>Liegt jetzt unter
5825               <varname>$::request-&gt;{cache}{all_units}</varname></para>
5826             </listitem>
5827
5828             <listitem>
5829               <para>Wird nur in
5830               <function>AM-&gt;retrieve_all_units()</function> gesetzt oder
5831               gelesen.</para>
5832             </listitem>
5833           </itemizedlist>
5834         </sect3>
5835
5836         <sect3>
5837           <title>%::called_subs</title>
5838
5839           <itemizedlist>
5840             <listitem>
5841               <para>wurde benutzt um callsub deep recursions
5842               abzufangen.</para>
5843             </listitem>
5844
5845             <listitem>
5846               <para>Wurde entfernt, weil callsub nur einen Bruchteil der
5847               möglichen Rekursioenen darstellt, und da nie welche
5848               auftreten.</para>
5849             </listitem>
5850
5851             <listitem>
5852               <para>komplette recursion protection wurde entfernt.</para>
5853             </listitem>
5854           </itemizedlist>
5855         </sect3>
5856       </sect2>
5857     </sect1>
5858
5859     <sect1 id="devel.fcgi">
5860       <title>Entwicklung unter FastCGI</title>
5861
5862       <sect2 id="devel.fcgi.general">
5863         <title>Allgemeines</title>
5864
5865         <para>Wenn Änderungen in der Konfiguration von kivitendo gemacht
5866         werden, muss der Webserver neu gestartet werden.</para>
5867
5868         <para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
5869         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
5870         müssen folgende Aspekte beachtet werden.</para>
5871       </sect2>
5872
5873       <sect2 id="devel.fcgi.exiting">
5874         <title>Programmende und Ausnahmen</title>
5875
5876         <para>Betrifft die Funktionen <function>warn</function>,
5877         <function>die</function>, <function>exit</function>,
5878         <function>carp</function> und <function>confess</function>.</para>
5879
5880         <para>Fehler, die dass Programm normalerweise sofort beenden (fatale
5881         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
5882         am Laufen zu halten. Man kann mit <function>die</function>,
5883         <function>confess</function> oder <function>carp</function> Fehler
5884         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
5885         eigene <function>$::form-</function>error()&gt; tut im Prinzip das
5886         Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
5887         <function>exit</function> hingegen werden nicht abgefangen.
5888         <function>warn</function> wird direkt nach STDERR, also in Server Log
5889         eine Nachricht schreiben (sofern in der Konfiguration nicht die
5890         Warnungen in das kivitendo Log umgeleitet wurden), und
5891         <function>exit</function> wird die Ausführung beenden.</para>
5892
5893         <para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
5894         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
5895         Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
5896         benutzen, alle anderen Exceptionmechanismen sind ok.</para>
5897       </sect2>
5898
5899       <sect2 id="devel.fcgi.globals">
5900         <title>Globale Variablen</title>
5901
5902         <para>Um zu vermeiden, dass Informationen von einem Request in einen
5903         anderen gelangen, müssen alle globalen Variablen vor einem Request
5904         sauber initialisiert werden. Das ist besonders wichtig im
5905         <varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
5906         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
5907         werden.</para>
5908
5909         <para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
5910         abgetrennten Block, der alle kanonischen globalen Variablen listet und
5911         erklärt. Bitte keine anderen einführen ohne das sauber zu
5912         dokumentieren.</para>
5913
5914         <para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
5915         man sicher geht, dass man die richtige erwischt.</para>
5916       </sect2>
5917
5918       <sect2 id="devel.fcgi.performance">
5919         <title>Performance und Statistiken</title>
5920
5921         <para>Die kritischen Pfade des Programms sind die Belegmasken, und
5922         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
5923         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
5924         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
5925         sind es je nach Menge der definierten Variablen 1-2s. Ab der
5926         Moose/Rose::DB Version sind es 5-6s.</para>
5927
5928         <para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
5929         den kritischen Pfaden, unter 0,15 sonst.</para>
5930       </sect2>
5931     </sect1>
5932
5933     <sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
5934       <title>SQL-Upgradedateien</title>
5935
5936       <sect2 id="db-upgrade-files.introduction"
5937              xreflabel="Einführung in die Datenbank-Upgradedateien">
5938         <title>Einführung</title>
5939
5940         <para>Datenbankupgrades werden über einzelne Upgrade-Scripte gesteuert, die sich im Verzeichnis <filename>sql/Pg-upgrade2</filename>
5941         befinden. In diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren, die neben den eigentlich auszuführenden SQL- oder
5942         Perl-Befehlen einige Kontrollinformationen enthält.</para>
5943
5944         <para>Kontrollinformationen definieren Abhängigkeiten und Prioritäten, sodass Datenbankscripte zwar in einer sicheren Reihenfolge
5945         ausgeführt werden (z.B. darf ein <literal>ALTER TABLE</literal> erst ausgeführt werden, wenn die Tabelle mit <literal>CREATE
5946         TABLE</literal> angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man keine Versionsnummern braucht.</para>
5947
5948         <para>kivitendo merkt sich dabei, welches der Upgradescripte in <filename>sql/Pg-upgrade2</filename> bereits durchgeführt wurde und
5949         führt diese nicht erneut aus. Dazu dient die Tabelle "<literal>schema_info</literal>", die bei der Anmeldung automatisch angelegt
5950         wird.</para>
5951       </sect2>
5952
5953       <sect2 id="db-upgrade-files.format"
5954              xreflabel="Format der Upgradedateien">
5955         <title>Format der Kontrollinformationen</title>
5956
5957         <para>Die Kontrollinformationen sollten sich am Anfang der jeweiligen
5958         Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
5959         hat dabei das folgende Format:</para>
5960
5961         <para>Für SQL-Upgradedateien:</para>
5962
5963         <programlisting>-- @key: value</programlisting>
5964
5965         <para>Für Perl-Upgradedateien:</para>
5966
5967         <programlisting># @key: value</programlisting>
5968
5969         <para>Leerzeichen vor "<varname>value</varname>" werden
5970         entfernt.</para>
5971
5972         <para>Die folgenden Schlüsselworte werden verarbeitet:</para>
5973
5974         <variablelist>
5975           <varlistentry>
5976             <term><varname>tag</varname></term>
5977
5978             <listitem>
5979               <para>Wird zwingend benötigt. Dies ist der "Name" des Upgrades.
5980               Dieser "tag" kann von anderen Kontrolldateien in ihren
5981               Abhängigkeiten verwendet werden (Schlüsselwort
5982               "<varname>depends</varname>"). Der "tag" ist auch der Name, der
5983               in der Datenbank eingetragen wird.</para>
5984
5985               <para>Normalerweise sollte die Kontrolldatei genau so heißen wie
5986               der "tag", nur mit der Endung ".sql" bzw. "pl".</para>
5987
5988               <para>Ein Tag darf nur aus alphanumerischen Zeichen sowie den
5989               Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht
5990               erlaubt und sollten stattdessen mit Unterstrichen ersetzt
5991               werden.</para>
5992             </listitem>
5993           </varlistentry>
5994
5995           <varlistentry>
5996             <term><varname>charset</varname></term>
5997
5998             <listitem>
5999               <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
6000               Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei Abwesenheit des Tags für SQL-Upgradedateien der Zeichensatz
6001               "<literal>ISO-8859-15</literal>" angenommen. Perl-Upgradescripte hingegen müssen immer in UTF-8 encodiert sein und sollten
6002               demnach auch ein "<literal>use utf8;</literal>" enthalten.</para>
6003             </listitem>
6004           </varlistentry>
6005
6006           <varlistentry>
6007             <term><varname>description</varname></term>
6008
6009             <listitem>
6010               <para>Benötigt. Eine Beschreibung, was in diesem Update
6011               passiert. Diese wird dem Benutzer beim eigentlichen
6012               Datenbankupdate angezeigt. Während der Tag in Englisch gehalten
6013               sein sollte, sollte die Beschreibung auf Deutsch
6014               erfolgen.</para>
6015             </listitem>
6016           </varlistentry>
6017
6018           <varlistentry>
6019             <term><varname>depends</varname></term>
6020
6021             <listitem>
6022               <para>Optional. Eine mit Leerzeichen getrennte Liste von "tags",
6023               von denen dieses Upgradescript abhängt. kivitendo stellt sicher,
6024               dass die in dieser Liste aufgeführten Scripte bereits
6025               durchgeführt wurden, bevor dieses Script ausgeführt wird.</para>
6026
6027               <para>Abhängigkeiten werden rekursiv betrachtet. Wenn also ein
6028               Script "b" existiert, das von Änderungen in "a" abhängt, und
6029               eine neue Kontrolldatei für "c" erstellt wird, die von
6030               Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den
6031               Tag "b" als Abhängigkeit zu definieren.</para>
6032
6033               <para>Es ist nicht erlaubt, sich selbst referenzierende
6034               Abhängigkeiten zu definieren (z.B. "a" -&gt; "b", "b" -&gt; "c"
6035               und "c" -&gt; "a").</para>
6036             </listitem>
6037           </varlistentry>
6038
6039           <varlistentry>
6040             <term><varname>priority</varname></term>
6041
6042             <listitem>
6043               <para>Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
6044               der Scripte ausgeführt werden, die die gleichen
6045               Abhängigkeitstiefen besitzen. Fehlt dieser Parameter, so wird
6046               der Wert 1000 benutzt.</para>
6047
6048               <para>Dies ist reine Kosmetik. Für echte Reihenfolgen muss
6049               "depends" benutzt werden. kivitendo sortiert die auszuführenden
6050               Scripte zuerst nach der Abhängigkeitstiefe (wenn "z" von "y"
6051               abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von
6052               2, "y" von 1 und "x" von 0. "x" würde hier zuerst ausgeführt,
6053               dann "y", dann "z"), dann nach der Priorität und bei gleicher
6054               Priorität alphabetisch nach dem "tag".</para>
6055             </listitem>
6056           </varlistentry>
6057
6058           <varlistentry>
6059             <term><varname>ignore</varname></term>
6060
6061             <listitem>
6062               <para>Optional. Falls der Wert auf 1 (true) steht, wird das
6063               Skript bei der Anmeldung ignoriert und entsprechend nicht
6064               ausgeführt.</para>
6065             </listitem>
6066           </varlistentry>
6067         </variablelist>
6068       </sect2>
6069
6070       <sect2 id="db-upgrade-files.format-perl-files" xreflabel="Format von Perl-Upgradedateien">
6071        <title>Format von in Perl geschriebenen Datenbankupgradescripten</title>
6072
6073        <para>In Perl geschriebene Datenbankscripte werden nicht einfach so ausgeführt sondern müssen sich an gewisse Konventionen
6074        halten. Dafür bekommen sie aber auch einige Komfortfunktionen bereitgestellt.</para>
6075
6076        <para>Ein Upgradescript stellt dabei eine vollständige Objektklasse dar, die vom Elternobjekt
6077        "<literal>SL::DBUpgrade2::Base</literal>" erben und eine Funktion namens "<literal>run</literal>" zur Verfügung stellen muss. Das
6078        Script wird ausgeführt, indem eine Instanz dieser Klasse erzeugt und darauf die erwähnte "<literal>run</literal>" aufgerufen
6079        wird.</para>
6080
6081        <para>Zu beachten ist, dass sich der Paketname der Datei aus dem Wert für "<literal>@tag</literal>" ableitet. Dabei werden alle
6082        Zeichen, die in Paketnamen ungültig wären (gerade Bindestriche), durch Unterstriche ersetzt. Insgesamt sieht der Paketname wie folgt
6083        aus: "<literal>SL::DBUpgrade2::tag</literal>".</para>
6084
6085        <para>Welche Komfortfunktionen zur Verfügung stehen, erfahren Sie in der Perl-Dokumentation zum oben genannten Modul; aufzurufen mit
6086        "<command>perldoc SL/DBUpgrade2/Base.pm</command>".</para>
6087
6088        <para>Ein Mindestgerüst eines gültigen Perl-Upgradescriptes sieht wie folgt aus:</para>
6089
6090        <programlisting># @tag: beispiel-upgrade-file42
6091 # @description: Ein schönes Beispielscript
6092 # @depends: release_3_1_0
6093 package SL::DBUpgrade2::beispiel_upgrade_file42;
6094
6095 use strict;
6096 use utf8;
6097
6098 use parent qw(SL::DBUpgrade2::Base);
6099
6100 sub run {
6101   my ($self) = @_;
6102
6103   # hier Aktionen ausführen
6104
6105   return 1;
6106 }
6107
6108 1;
6109 </programlisting>
6110       </sect2>
6111
6112       <sect2 id="db-upgrade-files.dbupgrade-tool"
6113              xreflabel="Hilfsscript dbupgrade2_tool.pl">
6114         <title>Hilfsscript dbupgrade2_tool.pl</title>
6115
6116         <para>Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern,
6117         existiert ein Hilfsscript namens
6118         "<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem
6119         kivitendo-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
6120         liest alle Datenbankupgradescripte aus dem Verzeichnis
6121         <filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die
6122         gleichen Methoden wie kivitendo selber, sodass alle Fehlersituationen
6123         von der Kommandozeile überprüft werden können.</para>
6124
6125         <para>Wird dem Script kein weiterer Parameter übergeben, so wird nur
6126         eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
6127         sich aber auch Informationen auf verschiedene Art ausgeben
6128         lassen:</para>
6129
6130         <itemizedlist>
6131           <listitem>
6132             <para>Listenform: "<command>./scripts/dbupgrade2_tool.pl
6133             --list</command>"</para>
6134
6135             <para>Gibt eine Liste aller Scripte aus. Die Liste ist in der
6136             Reihenfolge sortiert, in der kivitendo die Scripte ausführen
6137             würde. Es werden neben der Listenposition der Tag, die
6138             Abhängigkeitstiefe und die Priorität ausgegeben.</para>
6139           </listitem>
6140
6141           <listitem>
6142             <para>Baumform: "<command>./scripts/dbupgrade2_tool.pl
6143             --tree</command>"</para>
6144
6145             <para>Listet alle Tags in Baumform basierend auf den
6146             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von
6147             denen keine anderen abhängen. Die Unterknoten sind Scripte, die
6148             beim übergeordneten Script als Abhängigkeit eingetragen
6149             sind.</para>
6150           </listitem>
6151
6152           <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
6153             <para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl
6154             --rtree</command>"</para>
6155
6156             <para>Listet alle Tags in Baumform basierend auf den
6157             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte mit
6158             der geringsten Abhängigkeitstiefe. Die Unterknoten sind Scripte,
6159             die das übergeordnete Script als Abhängigkeit eingetragen
6160             haben.</para>
6161           </listitem>
6162
6163           <listitem>
6164             <para>Baumform mit Postscriptausgabe:
6165             "<command>./scripts/dbupgrade2_tool.pl
6166             --graphviz</command>"</para>
6167
6168             <para>Benötigt das Tool "<command>graphviz</command>", um mit
6169             seiner Hilfe die <link
6170             linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte
6171             Baumform</link> in eine Postscriptdatei namens
6172             "<filename>db_dependencies.ps</filename>" auszugeben. Dies ist
6173             vermutlich die übersichtlichste Form, weil hierbei jeder Knoten
6174             nur einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen
6175             können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben
6176             werden.</para>
6177           </listitem>
6178
6179           <listitem>
6180             <para>Scripte, von denen kein anderes Script abhängt:
6181             "<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"</para>
6182
6183             <para>Listet die Tags aller Scripte auf, von denen keine anderen
6184             Scripte abhängen.</para>
6185           </listitem>
6186         </itemizedlist>
6187       </sect2>
6188     </sect1>
6189
6190     <sect1 id="translations-languages" xreflabel="Translations and languages">
6191       <title>Translations and languages</title>
6192
6193       <sect2 id="translations-languages.introduction"
6194              xreflabel="Introduction to translations and languages">
6195         <title>Introduction</title>
6196
6197         <note>
6198           <para>Dieser Abschnitt ist in Englisch geschrieben, um
6199           internationalen Übersetzern die Arbeit zu erleichtern.</para>
6200         </note>
6201
6202         <para>This section describes how localization packages in kivitendo
6203         are built. Currently the only language fully supported is German, and
6204         since most of the internal messages are held in English the English
6205         version is usable too.</para>
6206       </sect2>
6207
6208       <sect2 id="translations-languages.character-set"
6209              xreflabel="Character set">
6210         <title>Character set</title>
6211
6212         <para>All files included in a language pack must use UTF-8 as their encoding.</para>
6213       </sect2>
6214
6215       <sect2 id="translations-languages.file-structure"
6216              xreflabel="File structure">
6217         <title>File structure</title>
6218
6219         <para>The structure of locales in kivitendo is:</para>
6220
6221         <programlisting>kivitendo/locale/&lt;langcode&gt;/</programlisting>
6222
6223         <para>where &lt;langcode&gt; stands for an abbreviation of the
6224         language package. The builtin packages use two letter <ulink
6225         url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
6226         but the actual name is not relevant for the program and can easily be
6227         extended to <ulink
6228         url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
6229         tags</ulink> (i.e. "en_GB"). In fact the original language packages
6230         from SQL Ledger are named in this way.</para>
6231
6232         <para>In such a language directory the following files are
6233         recognized:</para>
6234
6235         <variablelist>
6236           <varlistentry>
6237             <term>LANGUAGE</term>
6238
6239             <listitem>
6240               <para>This file is mandatory.</para>
6241
6242               <para>The <filename>LANGUAGE</filename> file contains the self
6243               descripted name of the language. It should contain a native
6244               representation first, and in parenthesis an english translation
6245               after that. Example:</para>
6246
6247               <programlisting>Deutsch (German)</programlisting>
6248             </listitem>
6249           </varlistentry>
6250
6251           <varlistentry>
6252             <term>all</term>
6253
6254             <listitem>
6255               <para>This file is mandatory.</para>
6256
6257               <para>The central translation file. It is essentially an inline
6258               Perl script autogenerated by <command>locales.pl</command>. To
6259               generate it, generate the directory and the two files mentioned
6260               above, and execute the following command:</para>
6261
6262               <programlisting>scripts/locales.pl &lt;langcode&gt;</programlisting>
6263
6264               <para>Otherwise you can simply copy one of the other languages.
6265               You will be told how many are missing like this:</para>
6266
6267               <programlisting>$ scripts/locales.pl en
6268 English - 0.6% - 2015/2028 missing</programlisting>
6269
6270               <para>A file named "<filename>missing</filename>" will be
6271               generated and can be edited. You can also edit the
6272               "<filename>all</filename>" file directly. Edit everything you
6273               like to fit the target language and execute
6274               <command>locales.pl</command> again. See how the missing words
6275               get fewer.</para>
6276             </listitem>
6277           </varlistentry>
6278
6279           <varlistentry>
6280             <term>Num2text</term>
6281
6282             <listitem>
6283               <para>Legacy code from SQL Ledger. It provides a means for
6284               numbers to be converted into natural language, like
6285               <literal>1523 =&gt; one thousand five hundred twenty
6286               three</literal>. If you want to provide it, it must be inlinable
6287               Perl code which provides a <function>num2text</function> sub. If
6288               an <function>init</function> sub exists it will be executed
6289               first.</para>
6290
6291               <para>Only used in the check and receipt printing module.</para>
6292             </listitem>
6293           </varlistentry>
6294
6295           <varlistentry>
6296             <term>special_chars</term>
6297
6298             <listitem>
6299               <para>kivitendo comes with a lot of interfaces to different
6300               formats, some of which are rather picky with their accepted
6301               charset. The <filename>special_chars</filename> file contains a
6302               listing of chars not suited for different file format and
6303               provides substitutions. It is written in "Simple Ini" style,
6304               containing a block for every file format.</para>
6305
6306               <para>First entry should be the order of substitution for
6307               entries as a whitespace separated list. All entries are
6308               interpolated, so <literal>\n</literal>, <literal>\x20</literal>
6309               and <literal>\\</literal> all work.</para>
6310
6311               <para>After that every entry is a special char that should be
6312               translated when writing text into such a file.</para>
6313
6314               <para>Example:</para>
6315
6316               <programlisting>[Template/XML]
6317 order=&amp; &lt; &gt; \n
6318 &amp;=&amp;amp;
6319 &lt;=&amp;lt;
6320 &gt;=&amp;gt;
6321 \n=&lt;br&gt;</programlisting>
6322
6323               <para>Note the importance of the order in this example.
6324               Substituting &lt; and &gt; befor &amp; would lead to $gt; become
6325               &amp;amp;gt;</para>
6326
6327               <para>For a list of valid formats, see the German
6328               <filename>special_chars</filename> entry. As of this writing the
6329               following are recognized:</para>
6330
6331               <programlisting>HTML
6332 URL@HTML
6333 Template/HTML
6334 Template/XML
6335 Template/LaTeX
6336 Template/OpenDocument
6337 filenames</programlisting>
6338
6339               <para>The last of which is very machine dependant. Remember that
6340               a lot of characters are forbidden by some filesystems, for
6341               exmaple MS Windows doesn't like ':' in its files where Linux
6342               doesn't mind that. If you want the files created with your
6343               language pack to be portable, find all chars that could cause
6344               trouble.</para>
6345             </listitem>
6346           </varlistentry>
6347
6348           <varlistentry>
6349             <term>missing</term>
6350
6351             <listitem>
6352               <para>This file is not a part of the language package
6353               itself.</para>
6354
6355               <para>This is a file generated by
6356               <command>scripts/locales.pl</command> while processing your
6357               locales. It's only to have the missing entries singled out and
6358               does not belong to a language package.</para>
6359             </listitem>
6360           </varlistentry>
6361
6362           <varlistentry>
6363             <term>lost</term>
6364
6365             <listitem>
6366               <para>This file is not a part of the language package
6367               itself.</para>
6368
6369               <para>Another file generated by
6370               <command>scripts/locales.pl</command>. If for any reason a
6371               translation does not appear anymore and can be deleted, it gets
6372               moved here. The last 50 or so entries deleted are saved here in
6373               case you made a typo, so that you don't have to translate
6374               everything again. If a tranlsation is missing, the lost file is
6375               checked first. If you maintain a language package, you might
6376               want to keep this safe somewhere.</para>
6377             </listitem>
6378           </varlistentry>
6379           <varlistentry>
6380             <term>more/all</term>
6381
6382             <listitem>
6383               <para>This subdir and file is not a part of the language package
6384               itself.</para>
6385
6386               <para>If the directory more exists and contains a file called all
6387               it will be parsed in addition to the mandatory all (see above).
6388               The file is useful if you want to change some translations for
6389               the current installation without conflicting further upgrades.
6390               The file is not autogenerated and has the same format as the all,
6391               but needs another key (more_texts). See the german translation
6392               for an example or copy the following code:
6393               <programlisting>
6394 #!/usr/bin/perl
6395 # -*- coding: utf-8; -*-
6396 # vim: fenc=utf-8
6397
6398 use utf8;
6399
6400 # These are additional texts for custom translations.
6401 # The format is the same as for the normal file all, only
6402 # with another key (more_texts instead of texts).
6403 # The file has the form of 'english text'  => 'foreign text',
6404
6405 $self->{more_texts} = {
6406
6407   'Ship via'                    => 'Terms of delivery',
6408   'Shipping Point'              => 'Delivery time',
6409 }
6410               </programlisting>
6411               </para>
6412             </listitem>
6413           </varlistentry>
6414
6415
6416         </variablelist>
6417       </sect2>
6418     </sect1>
6419
6420     <sect1 id="devel.testsuite">
6421       <title>Die kivitendo-Test-Suite</title>
6422
6423       <sect2 id="devel.testsuite.intro">
6424         <title>Einführung</title>
6425
6426         <para>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <literal>Test::More</literal>.</para>
6427
6428         <para>Die grundlegenden Fakten sind:</para>
6429
6430         <itemizedlist>
6431           <listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem>
6432
6433           <listitem><para>Ein Script (bzw. ein Test) in <filename>t/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
6434
6435           <listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
6436
6437           <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>t/</filename>, deren
6438           Dateiname auf <literal>.t</literal> endet.</para></listitem>
6439         </itemizedlist>
6440       </sect2>
6441
6442       <sect2 id="devel.testsuite.prerequisites">
6443         <title>Voraussetzungen</title>
6444
6445         <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>
6446
6447         <itemizedlist>
6448           <listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora:
6449           <literal>perl-Test-Deep</literal>; openSUSE: <literal>perl-Test-Deep</literal>)</para></listitem>
6450           <listitem><para><literal>Test::Exception</literal> (Debian-Paketname: <literal>libtest-exception-perl</literal>; Fedora:
6451           <literal>perl-Test-Exception</literal>; openSUSE: <literal>perl-Test-Exception</literal>)</para></listitem>
6452           <listitem><para><literal>Test::Output</literal> (Debian-Paketname: <literal>libtest-output-perl</literal>; Fedora:
6453           <literal>perl-Test-Output</literal>; openSUSE: <literal>perl-Test-Output</literal>)</para></listitem>
6454           <listitem><para><literal>Test::Harness</literal> 3.0.0 oder höher. Dieses Modul ist ab Perl 5.10.1 Bestandteil der
6455           Perl-Distribution und kann für frühere Versionen aus dem <ulink url="http://www.cpan.org">CPAN</ulink> bezogen
6456           werden.</para></listitem>
6457           <listitem><para><literal>LWP::Simple</literal> aus dem Paket <literal>libwww-perl</literal> (Debian-Panetname:
6458           <literal>libwww-perl</literal>; Fedora: <literal>perl-libwww-perl</literal>; openSUSE:
6459           <literal>perl-libwww-perl</literal>)</para></listitem>
6460           <listitem><para><literal>URI::Find</literal> (Debian-Panetname: <literal>liburi-find-perl</literal>; Fedora:
6461           <literal>perl-URI-Find</literal>; openSUSE: <literal>perl-URI-Find</literal>)</para></listitem>
6462         </itemizedlist>
6463
6464         <para>Weitere Voraussetzung ist, dass die Testsuite ihre eigene Datenbank anlegen kann, um Produktivdaten nicht zu gefährden. Dazu
6465         müssen in der Konfigurationsdatei im Abschnit <literal>testing/database</literal> Datenbankverbindungsparameter angegeben
6466         werden. Der hier angegebene Benutzer muss weiterhin das Recht haben, Datenbanken anzulegen und zu löschen.</para>
6467       </sect2>
6468
6469       <sect2 id="devel.testsuite.execution">
6470         <title>
6471           Existierende Tests ausführen
6472         </title>
6473
6474         <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
6475         gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.pl</filename>.</para>
6476
6477         <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.pl</filename> ohne weitere Parameter aus
6478         dem kivitendo-Basisverzeichnis heraus ausführen.</para>
6479
6480         <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.pl</filename>. Beispielsweise:</para>
6481
6482         <programlisting>t/test.pl t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
6483       </sect2>
6484
6485
6486       <sect2 id="devel.testsuite.meaning_of_scripts">
6487         <title>
6488           Bedeutung der verschiedenen Test-Scripte
6489         </title>
6490
6491         <para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch
6492         während der Entwicklung nützliche Tests sind:</para>
6493
6494         <itemizedlist>
6495           <listitem><para><filename>t/001compile.t</filename> -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab</para></listitem>
6496           <listitem><para><filename>t/002goodperl.t</filename> -- überprüft alle Perl-Dateien auf Anwesenheit von '<literal>use strict</literal>'-Anweisungen</para></listitem>
6497           <listitem><para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von <function>system()</function> und <function>exec()</function> auf Gültigkeit</para></listitem>
6498           <listitem><para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien Tab-Zeichen enthalten</para></listitem>
6499           <listitem><para><filename>t/006spelling.t</filename> -- sucht nach häufigen Rechtschreibfehlern</para></listitem>
6500           <listitem><para><filename>t/011pod.t</filename> -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit</para></listitem>
6501         </itemizedlist>
6502
6503         <para>Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.</para>
6504       </sect2>
6505
6506       <sect2 id="devel.testsuite.create_new">
6507         <title>
6508           Neue Test-Scripte erstellen
6509         </title>
6510
6511         <para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende
6512         Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.</para>
6513
6514         <sect3 id="devel.testsuite.ideas_for_non_function_tests">
6515           <title>
6516             Ideen für neue Test-Scripte, die keine konkreten Funktionen testen
6517           </title>
6518
6519           <para> Ideen, die abgesehen von Funktionen noch nicht umgesetzt wurden:</para>
6520
6521           <itemizedlist>
6522             <listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem>
6523             <listitem><para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)</para></listitem>
6524             <listitem><para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para></listitem>
6525             <listitem><para>Überprüfung auf Leerzeichen am Ende von Zeilen</para></listitem>
6526             <listitem><para>Test, ob alle zu übersetzenden Strings in <filename>locale/de/all</filename> vorhanden sind</para></listitem>
6527             <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>
6528           </itemizedlist>
6529         </sect3>
6530
6531         <sect3 id="devel.testsuite.directory_and_test_names">
6532           <title>
6533             Konvention für Verzeichnis- und Dateinamen
6534           </title>
6535
6536           <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>
6537
6538           <itemizedlist>
6539             <listitem><para>Die Dateiendung muss <filename>.t</filename> lauten.</para></listitem>
6540
6541             <listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
6542             <filename>bad_function_params.t</filename>).</para></listitem>
6543
6544             <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sein, mit dem sich die Scripte darin befassen
6545             (beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem>
6546
6547             <listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist
6548             (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.</para></listitem>
6549           </itemizedlist>
6550         </sect3>
6551
6552         <sect3 id="devel.testsuite.minimal_example">
6553           <title>
6554             Minimales Skelett für eigene Scripte
6555           </title>
6556
6557           <para>Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:</para>
6558
6559           <programlisting>use Test::More tests =&gt; 0;
6560
6561 use lib 't';
6562
6563 use Support::TestSetup;
6564
6565 Support::TestSetup::login();</programlisting>
6566
6567           <para>Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie
6568           <varname>$::auth</varname>, <varname>$::form</varname> oder <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei
6569           <filename>config/kivitendo.conf</filename> im Abschnitt <literal>testing.login</literal> ein gültiger Login-Name eingetragen
6570           sein. Dieser wird für die Datenbankverbindung benötigt.</para>
6571
6572           <para>Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile <code>Support::TestSetup::login();</code>
6573           weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.</para>
6574         </sect3>
6575       </sect2>
6576     </sect1>
6577
6578     <sect1 id="devel.style-guide">
6579       <title>Stil-Richtlinien</title>
6580
6581       <para>Die folgenden Regeln haben das Ziel, den Code möglichst gut les-
6582       und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich
6583       eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden
6584       wird (Stichworte "Klammern" oder "Hash-Keys").</para>
6585
6586       <para>Diese Regeln sind keine Schikane sondern erleichtern allen das
6587       Leben!</para>
6588
6589       <para>Jeder, der einen Patch schickt, sollte seinen Code vorher
6590       überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
6591       nicht.</para>
6592
6593       <orderedlist>
6594         <listitem>
6595           <para>Es werden keine echten Tabs sondern Leerzeichen
6596           verwendet.</para>
6597         </listitem>
6598
6599         <listitem>
6600           <para>Die Einrückung beträgt zwei Leerzeichen. Beispiel:</para>
6601
6602           <programlisting>foreach my $row (@data) {
6603   if ($flag) {
6604     # do something with $row
6605   }
6606
6607   if ($use_modules) {
6608     $row-&gt;{modules} = MODULE-&gt;retrieve(
6609       id   =&gt; $row-&gt;{id},
6610       date =&gt; $use_now ? localtime() : $row-&gt;{time},
6611     );
6612   }
6613
6614   $report-&gt;add($row);
6615 }</programlisting>
6616         </listitem>
6617
6618         <listitem>
6619           <para>Öffnende geschweifte Klammern befinden sich auf der gleichen
6620           Zeile wie der letzte Befehl. Beispiele:</para>
6621
6622           <programlisting>sub debug {
6623   ...
6624 }</programlisting>
6625
6626           <para>oder</para>
6627
6628           <programlisting>if ($form-&gt;{item_rows} &gt; 0) {
6629   ...
6630 }</programlisting>
6631         </listitem>
6632
6633         <listitem>
6634           <para>Schließende geschweifte Klammern sind so weit eingerückt wie
6635           der Befehl / die öffnende schließende Klammer, die den Block
6636           gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen
6637           Beispiele wie bei 3. gelten.</para>
6638         </listitem>
6639
6640         <listitem>
6641           <para>Die Wörter "<function>else</function>",
6642           "<function>elsif</function>", "<function>while</function>" befinden
6643           sich auf der gleichen Zeile wie schließende geschweifte Klammern.
6644           Beispiele:</para>
6645
6646           <programlisting>if ($form-&gt;{sum} &gt; 1000) {
6647   ...
6648 } elsif ($form-&gt;{sum} &gt; 0) {
6649   ...
6650 } else {
6651   ...
6652 }
6653
6654 do {
6655   ...
6656 } until ($a &gt; 0);</programlisting>
6657         </listitem>
6658
6659         <listitem>
6660           <para>Parameter von Funktionsaufrufen müssen mit runden Klammern
6661           versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
6662           und grep-ähnliche Operatoren. Beispiel:</para>
6663
6664           <programlisting>$main::lxdebug-&gt;message("Could not find file.");
6665 %options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</programlisting>
6666         </listitem>
6667
6668         <listitem>
6669           <para>Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:</para>
6670
6671           <para>Generell gilt: Hashkeys und Arrayindices sollten nicht durch
6672           Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
6673           Blöcke schon. Beispiel:</para>
6674
6675           <programlisting>if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
6676   ...
6677 }
6678
6679 $array[$i + 1]             = 4;
6680 $form-&gt;{sum}              += $form-&gt;{"row_$i"};
6681 $form-&gt;{ $form-&gt;{index} } += 1;
6682
6683 map { $form-&gt;{sum} += $form-&gt;{"row_$_"} } 1..$rowcount;</programlisting>
6684         </listitem>
6685
6686         <listitem>
6687           <para>Mehrzeilige Befehle</para>
6688
6689           <orderedlist>
6690             <listitem>
6691               <para>Werden die Parameter eines Funktionsaufrufes auf mehrere
6692               Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
6693               werden, in der die ersten Funktionsparameter in der ersten Zeile
6694               stehen. Beispiel:</para>
6695
6696               <programlisting>$sth = $dbh-&gt;prepare("SELECT * FROM some_table WHERE col = ?",
6697                     $form-&gt;{some_col_value});</programlisting>
6698             </listitem>
6699
6700             <listitem>
6701               <para>Ein Spezialfall ist der ternäre Oprator "?:", der am
6702               besten in einer übersichtlichen Tabellenstruktur organisiert
6703               wird. Beispiel:</para>
6704
6705               <programlisting>my $rowcount = $form-&gt;{"row_$i"} ? $i
6706              : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
6707              :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</programlisting>
6708             </listitem>
6709           </orderedlist>
6710         </listitem>
6711
6712         <listitem>
6713           <para>Kommentare</para>
6714
6715           <orderedlist>
6716             <listitem>
6717               <para>Kommentare, die alleine in einer Zeile stehen, sollten
6718               soweit wie der Code eingerückt sein.</para>
6719             </listitem>
6720
6721             <listitem>
6722               <para>Seitliche hängende Kommentare sollten einheitlich
6723               formatiert werden.</para>
6724             </listitem>
6725
6726             <listitem>
6727               <para>Sämtliche Kommentare und Sonstiges im Quellcode ist bitte
6728               auf Englisch zu verfassen. So wie ich keine Lust habe,
6729               französischen Quelltext zu lesen, sollte auch der kivitendo
6730               Quelltext für nicht-Deutschsprachige lesbar sein.
6731               Beispiel:</para>
6732
6733               <programlisting>my $found = 0;
6734 while (1) {
6735   last if $found;
6736
6737   # complicated check
6738   $found = 1 if //
6739 }
6740
6741 $i  = 0        # initialize $i
6742 $n  = $i;      # save $i
6743 $i *= $const;  # do something crazy
6744 $i  = $n;      # recover $i</programlisting>
6745             </listitem>
6746           </orderedlist>
6747         </listitem>
6748
6749         <listitem>
6750           <para>Hashkeys sollten nur in Anführungszeichen stehen, wenn die
6751           Interpolation gewünscht ist. Beispiel:</para>
6752
6753           <programlisting>$form-&gt;{sum}      = 0;
6754 $form-&gt;{"row_$i"} = $form-&gt;{"row_$i"} - 5;
6755 $some_hash{42}    = 54;</programlisting>
6756         </listitem>
6757
6758         <listitem>
6759           <para>Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen
6760           unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
6761           wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in
6762           grossen Tabellen), dann ist Lesbarkeit vorzuziehen.</para>
6763
6764           <para>Als Beispiel sei die Funktion
6765           <function>print_options</function> aus
6766           <filename>bin/mozilla/io.pl</filename> angeführt.</para>
6767         </listitem>
6768
6769         <listitem>
6770           <para>Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind
6771           unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs
6772           verfälschen.</para>
6773
6774           <para>Emacs und vim haben beide recht einfache Methoden zur
6775           Entfernung von trailing whitespace. Emacs kennt das Kommande
6776           <command>nuke-trailing-whitespace</command>, vim macht das gleiche
6777           manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
6778           BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern
6779           gebunden.</para>
6780         </listitem>
6781
6782         <listitem>
6783           <para>Es wird kein <command>perltidy</command> verwendet.</para>
6784
6785           <para>In der Vergangenheit wurde versucht,
6786           <command>perltidy</command> zu verwenden, um einen einheitlichen
6787           Stil zu erlangen. Es hat sich aber gezeigt, dass
6788           <command>perltidy</command>s sehr eigenwilliges Verhalten, was
6789           Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für
6790           den Interessierten sind hier die
6791           <command>perltidy</command>-Optionen, die grob den beschriebenen
6792           Richtlinien entsprechen:</para>
6793
6794           <programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
6795 -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
6796 -lp -vt=1 -vtc=1</programlisting>
6797         </listitem>
6798
6799         <listitem>
6800           <para><varname>STDERR</varname> ist tabu. Unkonditionale
6801           Debugmeldungen auch.</para>
6802
6803           <para>kivitendo bietet mit dem Modul <classname>LXDebug</classname>
6804           einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
6805           Grund, nach <varname>STDERR</varname> zu schreiben.</para>
6806
6807           <para>Die <classname>LXDebug</classname>-Methode
6808           "<function>message</function>" nimmt als ersten Paramter außerdem
6809           eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer
6810           angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden
6811           und werden in den meisten Fällen auch vom Repository
6812           zurückgewiesen.</para>
6813         </listitem>
6814
6815         <listitem>
6816           <para>Alle neuen Module müssen use strict verwenden.</para>
6817
6818           <para><varname>$form</varname>, <varname>$auth</varname>,
6819           <varname>$locale</varname>, <varname>$lxdebug</varname> und
6820           <varname>%myconfig</varname> werden derzeit aus dem main package
6821           importiert (siehe <xref linkend="devel.globals" />. Alle anderen
6822           Konstrukte sollten lexikalisch lokal gehalten werden.</para>
6823         </listitem>
6824       </orderedlist>
6825     </sect1>
6826
6827     <sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
6828       <title>Dokumentation erstellen</title>
6829
6830       <sect2 id="devel.build-doc.introduction">
6831         <title>Einführung</title>
6832
6833         <para>Diese Dokumentation ist in <productname>DocBook</productname>
6834         XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor.
6835         Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen
6836         Editor nutzt, der spezielle Unterstützung für
6837         <productname>DocBook</productname> mitbringt. Wir empfehlen dafür den
6838         <ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
6839         Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos
6840         ist.</para>
6841       </sect2>
6842
6843       <sect2 id="devel.build-doc.required-software">
6844         <title>Benötigte Software</title>
6845
6846         <para>Bei <productname>DocBook</productname> ist Prinzip, dass
6847         ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden
6848         dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML
6849         erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script
6850         <command>scripts/build_doc.sh</command>.</para>
6851
6852         <para>Das Script benötigt zur Konvertierung verschiedene
6853         Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt
6854         werden:</para>
6855
6856         <itemizedlist>
6857           <listitem>
6858             <para><ulink
6859             url="http://www.oracle.com/technetwork/java/index.html">Java</ulink>
6860             in einer halbwegs aktuellen Version</para>
6861           </listitem>
6862
6863           <listitem>
6864             <para>Das Java-Build-System <ulink
6865             url="http://ant.apache.org/">Apache Ant</ulink></para>
6866           </listitem>
6867
6868           <listitem>
6869             <para>Das Dokumentations-System Dobudish für
6870             <productname>DocBook</productname> 4.5, eine Zusammenstellung
6871             diverser Stylesheets und Grafiken zur Konvertierung von
6872             <productname>DocBook</productname> XML in andere Formate. Das
6873             Paket, das benötigt wird, ist zum Zeitpunkt der
6874             Dokumentationserstellung
6875             <filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
6876             url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink>
6877             bereitsteht.</para>
6878           </listitem>
6879         </itemizedlist>
6880
6881         <para>Apache Ant sowie ein dazu passendes Java Runtime Environment
6882         sind auf allen gängigen Plattformen verfügbar. Beispiel für
6883         Debian/Ubuntu:</para>
6884
6885         <programlisting>apt-get install ant openjdk-7-jre</programlisting>
6886
6887         <para>Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis
6888         <filename>doc/build</filename> entpackt werden. Beispiel unter der
6889         Annahme, das <productname>Dobudish</productname> in
6890         <filename>$HOME/Downloads</filename> heruntergeladen wurde:</para>
6891
6892         <programlisting>cd doc/build
6893 unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
6894       </sect2>
6895
6896       <sect2 id="devel.build-doc.build">
6897         <title>PDFs und HTML-Seiten erstellen</title>
6898
6899         <para>Die eigentliche Konvertierung erfolgt nach Installation der
6900         benötigten Software mit einem einfachen Aufruf direkt aus dem
6901         kivitendo-Installationsverzeichnis heraus:</para>
6902
6903         <programlisting>./scripts/build_doc.sh</programlisting>
6904       </sect2>
6905
6906       <sect2 id="devel.build-doc.repository">
6907         <title>Einchecken in das Git-Repository</title>
6908
6909         <para>Sowohl die XML-Datei als auch die erzeugten PDF- und
6910         HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass
6911         nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut
6912         und alles zusammen in einem Commit eingecheckt werden sollten.</para>
6913
6914         <para>Die "<filename>dobudish</filename>"-Verzeichnisse bzw.
6915         symbolischen Links gehören hingegen nicht in das Repository.</para>
6916       </sect2>
6917     </sect1>
6918   </chapter>
6919 </book>