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