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