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