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