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