Doku: E-Mail-Einstellungen und -Module ergänzt
[kivitendo-erp.git] / doc / dokumentation.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4 <book id="kivitendo-documentation" lang="de">
5   <title>kivitendo: 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 kivitendo-Forum: <ulink
15         url="https://forum.kivitendo.org/">https://forum.kivitendo.org/</ulink></para>
16       </listitem>
17
18       <listitem>
19         <para>im alten Lx-Office-Wiki unter Dokumentation (<ulink
20         url="http://wiki.lx-office.org/index.php?title=Installation_Lx-Office_ERP">http://wiki.lx-office.org/index.php?title=Installation_Lx-Office_ERP</ulink>)</para>
21       </listitem>
22     </itemizedlist>
23   </chapter>
24
25   <chapter id="config">
26     <title>Installation und Grundkonfiguration</title>
27
28     <sect1 id="Benötigte-Software-und-Pakete">
29       <title>Benötigte Software und Pakete</title>
30
31       <sect2 id="Betriebssystem">
32         <title>Betriebssystem</title>
33
34         <para>kivitendo ist für Linux konzipiert, und sollte auf jedem
35         unixoiden Betriebssystem zum Laufen zu kriegen sein. Getestet ist
36         diese Version im speziellen auf Debian und Ubuntu, grundsätzlich wurde
37         bei der Auswahl der Pakete aber darauf Rücksicht genommen, dass es
38         ohne große Probleme auf den derzeit aktuellen verbreiteten
39         Distributionen läuft.</para>
40
41         <para>Mitte 2012 sind das folgende Systeme, von denen bekannt ist,
42         dass kivitendo auf ihnen läuft:</para>
43
44         <itemizedlist>
45           <listitem>
46             <para>Ubuntu 10.04 LTS Lucid Lynx bis 12.04 Precise Pangolin</para>
47           </listitem>
48
49           <listitem>
50             <para>Debian 5.0 Lenny und 6.0 Squeeze</para>
51           </listitem>
52
53           <listitem>
54             <para>openSUSE 11.2 und 11.3</para>
55           </listitem>
56
57           <listitem>
58             <para>SuSE Linux Enterprice Server 11</para>
59           </listitem>
60
61           <listitem>
62             <para>Fedora 13 bis 16</para>
63           </listitem>
64         </itemizedlist>
65       </sect2>
66
67       <sect2 id="Pakete" xreflabel="Pakete">
68         <title>Pakete</title>
69
70         <para>Zum Betrieb von kivitendo werden zwingend ein Webserver (meist
71         Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.2)
72         benötigt.</para>
73
74         <para>Zusätzlich benötigt kivitendo die folgenden Perl-Pakete, die
75         nicht Bestandteil einer Standard-Perl-Installation sind:</para>
76
77         <itemizedlist>
78           <listitem>
79             <para>parent</para>
80           </listitem>
81
82           <listitem>
83             <para>Archive::Zip</para>
84           </listitem>
85
86           <listitem>
87             <para>Config::Std</para>
88           </listitem>
89
90           <listitem>
91             <para>DateTime</para>
92           </listitem>
93
94           <listitem>
95             <para>DBI</para>
96           </listitem>
97
98           <listitem>
99             <para>DBD::Pg</para>
100           </listitem>
101
102           <listitem>
103             <para>Email::Address</para>
104           </listitem>
105
106           <listitem>
107             <para>Email::MIME</para>
108           </listitem>
109
110           <listitem>
111             <para>JSON</para>
112           </listitem>
113
114           <listitem>
115             <para>List::MoreUtils</para>
116           </listitem>
117
118           <listitem><para>Net::SMTP::SSL (optional, bei E-Mail-Versand über SSL; siehe Abschnitt "<link
119           linkend="config.sending-email.smtp">E-Mail-Versand aus kivitendo heraus</link>")</para></listitem>
120
121           <listitem><para>Net::SSLGlue (optional, bei E-Mail-Versand über TLS; siehe Abschnitt "<link
122           linkend="config.sending-email.smtp">E-Mail-Versand aus kivitendo heraus</link>")</para></listitem>
123
124           <listitem>
125             <para>Params::Validate</para>
126           </listitem>
127
128           <listitem>
129             <para>PDF::API2</para>
130           </listitem>
131
132           <listitem>
133             <para>Rose::Object</para>
134           </listitem>
135
136           <listitem>
137             <para>Rose::DB</para>
138           </listitem>
139
140           <listitem>
141             <para>Rose::DB::Object</para>
142           </listitem>
143
144           <listitem>
145             <para>Template</para>
146           </listitem>
147
148           <listitem>
149             <para>Text::CSV_XS</para>
150           </listitem>
151
152           <listitem>
153             <para>Text::Iconv</para>
154           </listitem>
155
156           <listitem>
157             <para>URI</para>
158           </listitem>
159
160           <listitem>
161             <para>XML::Writer</para>
162           </listitem>
163
164           <listitem>
165             <para>YAML</para>
166           </listitem>
167         </itemizedlist>
168
169         <para>Seit v2.7.0 sind die folgenden Pakete hinzugekommen: <literal>Email::MIME</literal>, <literal>Net::SMTP::SSL</literal>,
170         <literal>Net::SSLGlue</literal>.</para>
171
172         <para>Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete
173         hinzugekommen, <literal>URI</literal> und
174         <literal>XML::Writer</literal> sind notwendig. Ohne startet kivitendo
175         nicht.</para>
176
177         <para>Gegenüber Version 2.6.1 sind <literal>parent</literal>,
178         <literal>DateTime</literal>, <literal>Rose::Object</literal>,
179         <literal>Rose::DB</literal> und <literal>Rose::DB::Object</literal>
180         neu hinzugekommen. <literal>IO::Wrap</literal> wurde entfernt.</para>
181
182         <para>Gegenüber Version 2.6.3 ist <literal>JSON</literal> neu
183         hinzugekommen.</para>
184
185         <para><literal>Email::Address</literal> und
186         <literal>List::MoreUtils</literal> sind schon länger feste
187         Abhängigkeiten, wurden aber bisher mit kivitendo mitgeliefert. Beide
188         sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
189         zukünftigen Version aber aus dem Paket entfernt werden. Es wird
190         empfohlen diese Module zusammen mit den anderen als Bibliotheken zu
191         installieren.</para>
192
193         <para>Die zu installierenden Pakete können in den verschiedenen
194         Distributionen unterschiedlich heißen.</para>
195
196         <para>Für Debian oder Ubuntu benötigen Sie diese Pakete:</para>
197
198         <programlisting>apt-get install apache2 postgresql libparent-perl libarchive-zip-perl \
199   libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl \
200   libemail-address-perl libemail-mime-perl liblist-moreutils-perl libpdf-api2-perl \
201   librose-object-perl librose-db-perl librose-db-object-perl \
202   libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl \
203   libxml-writer-perl libyaml-perl libconfig-std-perl \
204   libparams-validate-perl libjson-perl libclass-accessor-perl \
205   libnet-sslglue-perl libnet-smtp-ssl-perl</programlisting>
206
207         <para>Für Fedora Core benötigen Sie diese Pakete:</para>
208
209         <programlisting>yum install httpd postgresql-server perl-parent perl-DateTime \
210   perl-DBI perl-DBD-Pg perl-Email-Address perl-Email-MIME perl-List-MoreUtils \
211   perl-PDF-API2 perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object \
212   perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
213   perl-XML-Writer perl-YAML perl-Net-SSLGlue perl-Net-SMTP-SSL</programlisting>
214
215         <para>Für OpenSuSE benötigen Sie diese Pakete:</para>
216
217         <programlisting>zypper install apache2 postgresql-server perl-Archive-Zip \
218   perl-DateTime perl-DBI perl-DBD-Pg perl-Email-MIME perl-MailTools perl-List-MoreUtils \
219   perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv \
220   perl-URI perl-XML-Writer perl-YAML perl-Net-SSLGlue perl-Net-SMTP-SSL</programlisting>
221
222         <para>kivitendo enthält ein Script, mit dem überprüft werden kann, ob
223         alle benötigten Perl-Module installiert sind. Der Aufruf lautet wie
224         folgt:</para>
225
226         <programlisting>./scripts/installation_check.pl</programlisting>
227       </sect2>
228     </sect1>
229
230     <sect1 id="Manuelle-Installation-des-Programmpaketes"
231            xreflabel="Manuelle Installation des Programmpaketes">
232       <title>Manuelle Installation des Programmpaketes</title>
233
234       <para>Die kivitendo ERP Installationsdatei (kivitendo-erp-2.6.3.tgz) wird
235       im Dokumentenverzeichnis des Webservers (z.B.
236       <filename>/var/www/html/</filename>,
237       <filename>/srv/www/htdocs</filename> oder
238       <filename>/var/www/</filename>) entpackt:</para>
239
240       <programlisting>cd /var/www
241 tar xvzf kivitendo-erp-2.6.3.tgz</programlisting>
242
243       <para>Wechseln Sie in das entpackte Verzeichnis:</para>
244
245       <programlisting>cd kivitendo-erp</programlisting>
246
247       <para>Alternativ können Sie auch einen Alias in der
248       Webserverkonfiguration benutzen, um auf das tatsächliche
249       Installationsverzeichnis zu verweisen.</para>
250
251       <para>Die Verzeichnisse <filename>users</filename>, <filename>spool</filename> und <filename>webdav</filename> müssen für den Benutzer
252       beschreibbar sein, unter dem der Webserver läuft. Die restlichen Dateien müssen für diesen Benutzer lesbar sein. Die Benutzer- und
253       Gruppennamen sind bei verschiedenen Distributionen unterschiedlich (z.B. bei Debian/Ubuntu <constant>www-data</constant>, bei Fedora
254       core <constant>apache</constant> oder bei OpenSuSE <constant>wwwrun</constant>).</para>
255
256       <para>Der folgende Befehl ändert den Besitzer für die oben genannten
257       Verzeichnisse auf einem Debian/Ubuntu-System:</para>
258
259       <programlisting>chown -R www-data users spool webdav</programlisting>
260
261       <para>Weiterhin muss der Webserver-Benutzer in den Verzeichnissen <filename>templates</filename> und <filename>users</filename>
262       Unterverzeichnisse für jeden neuen Benutzer anlegen dürfen, der in kivitendo angelegt wird:</para>
263
264       <programlisting>chown www-data templates users</programlisting>
265     </sect1>
266
267     <sect1 id="config.config-file">
268       <title>kivitendo-Konfigurationsdatei</title>
269
270       <sect2 id="config.config-file.introduction"
271              xreflabel="Einführung in die Konfigurationsdatei">
272         <title>Einführung</title>
273
274         <para>In kivitendo gibt es nur noch eine Konfigurationsdatei,
275         die benötigt wird: <filename>config/kivitendo.conf</filename> (kurz:
276         "die Hauptkonfigurationsdatei"). Diese muss bei der Erstinstallation
277         von kivitendo bzw. der Migration von älteren Versionen angelegt
278         werden.</para>
279
280         <para>Als Vorlage dient die Datei
281         <filename>config/kivitendo.conf.default</filename> (kurz: "die
282         Default-Datei"):</para>
283
284         <programlisting>$ cp config/kivitendo.conf.default config/kivitendo.conf</programlisting>
285
286         <para>Die Default-Datei wird immer zuerst eingelesen. Werte, die in
287         der Hauptkonfigurationsdatei stehen, überschreiben die Werte aus der
288         Default-Datei. Die Hauptkonfigurationsdatei muss also nur die
289         Abschnitte und Werte enthalten, die von denen der Default-Datei
290         abweichen.</para>
291
292         <note>
293          <para>
294           Vor der Umbenennung in kivitendo hieß diese Datei noch <filename>config/lx_office.conf</filename>. Aus Gründen der Kompatibilität
295           wird diese Datei eingelesen, sofern die Datei <filename>config/kivitendo.conf</filename> nicht existiert.
296          </para>
297         </note>
298
299         <para>Diese Hauptkonfigurationsdatei ist dann eine
300         installationsspezifische Datei, d.h. sie enthält bspw. lokale
301         Passwörter und wird auch nicht im Versionsmanagement (git)
302         verwaltet.</para>
303
304         <para>Die Konfiguration ist ferner serverabhängig, d.h. für alle
305         Mandaten, bzw. Datenbanken gleich.</para>
306       </sect2>
307
308       <sect2 id="config.config-file.sections-parameters">
309         <title>Abschnitte und Parameter</title>
310
311         <para>Die Konfigurationsdatei besteht aus mehreren Teilen, die
312         entsprechend kommentiert sind:</para>
313
314         <itemizedlist>
315           <listitem>
316             <para><literal>authentication</literal></para>
317           </listitem>
318
319           <listitem>
320             <para><literal>authentication/database</literal></para>
321           </listitem>
322
323           <listitem>
324             <para><literal>authentication/ldap</literal></para>
325           </listitem>
326
327           <listitem>
328             <para><literal>system</literal></para>
329           </listitem>
330
331           <listitem>
332             <para><literal>features</literal></para>
333           </listitem>
334
335           <listitem>
336             <para><literal>paths</literal></para>
337           </listitem>
338
339           <listitem>
340             <para><literal>applications</literal></para>
341           </listitem>
342
343           <listitem>
344             <para><literal>environment</literal></para>
345           </listitem>
346
347           <listitem>
348             <para><literal>mail_delivery</literal> (siehe Abschnitt "<link linkend="config.sending-email.smtp">E-Mail-Versand aus kivitendo
349             heraus</link>")</para>
350           </listitem>
351
352           <listitem>
353             <para><literal>print_templates</literal></para>
354           </listitem>
355
356           <listitem>
357             <para><literal>task_server</literal></para>
358           </listitem>
359
360           <listitem>
361             <para><literal>periodic_invoices</literal></para>
362           </listitem>
363
364           <listitem>
365             <para><literal>console</literal></para>
366           </listitem>
367
368           <listitem>
369             <para><literal>debug</literal></para>
370           </listitem>
371         </itemizedlist>
372
373         <para>Die üblicherweise wichtigsten Parameter, die am Anfang
374         einzustellen oder zu kontrollieren sind, sind:</para>
375
376         <programlisting>[authentication]
377 admin_password = geheim
378
379 [authentication/database]
380 host     = localhost
381 port     = 5432
382 db       = kivitendo_auth
383 user     = postgres
384 password =
385
386 [system]
387 dbcharset = UTF-8</programlisting>
388
389         <para>Nutzt man wiederkehrende Rechnungen, kann man unter
390         <varname>[periodic_invoices]</varname> den Login eines Benutzers
391         angeben, der nach Erstellung der Rechnungen eine entsprechende E-Mail
392         mit Informationen über die erstellten Rechnungen bekommt.</para>
393
394         <para>Nutzt man den <link
395         linkend="config.task-server">Taskserver</link> für <link
396         linkend="features.periodic-invoices">wiederkehrende Rechnungen</link>,
397         muss unter <varname>[task_server]</varname> ein Login eines Benutzers
398         angegeben werden, mit dem sich der Taskserver an kivitendo bei der
399         Datenbank anmeldet, die dem Benutzer zugewiesen ist.</para>
400
401         <para>Für Entwickler finden sich unter <varname>[debug]</varname>
402         wichtige Funktionen, um die Fehlersuche zu erleichtern.</para>
403       </sect2>
404
405       <sect2 id="config.config-file.prior-versions">
406         <title>Versionen vor 2.6.3</title>
407
408         <para>In älteren kivitendo Versionen gab es im Verzeichnis
409         <filename>config</filename> die Dateien
410         <filename>authentication.pl</filename> und
411         <filename>lx-erp.conf</filename>, die jeweils Perl-Dateien waren. Es
412         gab auch die Möglichkeit, eine lokale Version der Konfigurationsdatei
413         zu erstellen (<filename>lx-erp-local.conf</filename>). Dies ist ab
414         2.6.3 nicht mehr möglich, aber auch nicht mehr nötig.</para>
415
416         <para>Beim Update von einer kivitendo-Version vor 2.6.3 auf 2.6.3 oder
417         jünger müssen die Einstellungen aus den alten Konfigurationsdateien
418         manuell übertragen und die alten Konfigurationsdateien anschließend
419         gelöscht oder verschoben werden. Ansonsten zeigt kivitendo eine
420         entsprechende Fehlermeldung an.</para>
421       </sect2>
422     </sect1>
423
424     <sect1 id="Anpassung-der-PostgreSQL-Konfiguration">
425       <title>Anpassung der PostgreSQL-Konfiguration</title>
426
427       <para>PostgreSQL muss auf verschiedene Weisen angepasst werden.</para>
428
429       <sect2 id="Zeichensätze-die-Verwendung-von-UTF-8">
430         <title>Zeichensätze/die Verwendung von UTF-8</title>
431
432         <para>Bei aktuellen Serverinstallationen braucht man hier meist nicht
433         eingreifen</para>
434
435         <para>Dieses kann überprüft werden: ist das Encoding der Datenbank
436         “template1” “UTF8”, so braucht man nichts weiteres diesbezueglich
437         unternehmen. Zum Testen:
438
439         <programlisting>su postgres
440 echo '\l' | psql
441 exit </programlisting>
442
443         Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
444         UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
445         Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl
446         getan werden:</para>
447
448         <programlisting>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 clustername</programlisting>
449
450         <para>Die Datenbankversionsnummer muss an die tatsächlich verwendete
451         Versionsnummer angepasst werden.</para>
452
453         <para>Unter anderen Distributionen gibt es ähnliche Methoden.</para>
454
455         <para>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und
456         ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
457         kivitendo mit ISO-8859-15 als Encoding betrieben werden.</para>
458
459         <para>Das Encoding einer Datenbank kann in <command>psql</command> mit
460         <literal>\l</literal> geprüft werden.</para>
461       </sect2>
462
463       <sect2 id="Änderungen-an-Konfigurationsdateien">
464         <title>Änderungen an Konfigurationsdateien</title>
465
466         <para>In der Datei <filename>postgresql.conf</filename>, die je nach
467         Distribution in verschiedenen Verzeichnissen liegen kann (z.B.
468         <filename>/var/lib/pgsql/data/</filename> oder
469         <filename>/etc/postgresql/</filename>, muss sichergestellt werden,
470         dass TCP/IP-Verbindungen aktiviert sind. Das Verhalten wird über den
471         Parameter <varname>listen_address</varname> gesteuert. Laufen
472         PostgreSQL und kivitendo auf demselben Rechner, so kann dort der Wert
473         <literal>localhost</literal> verwendet werden. Andernfalls müssen
474         Datenbankverbindungen auch von anderen Rechnern aus zugelassen werden,
475         was mit dem Wert <literal>*</literal> geschieht.</para>
476
477         <para>In der Datei <filename>pg_hba.conf</filename>, die im gleichen
478         Verzeichnis wie die <filename>postgresql.conf</filename> zu finden
479         sein sollte, müssen die Berichtigungen für den Zugriff geändert
480         werden. Hier gibt es mehrere Möglichkeiten. sinnvoll ist es nur die
481         nögiten Verbindungen immer zuzulassen, für eine lokal laufenden
482         Datenbank zum Beispiel:</para>
483
484         <programlisting>local all kivitendo password
485 host all kivitendo 127.0.0.1 255.255.255.255 password</programlisting>
486       </sect2>
487
488       <sect2 id="Erweiterung-für-servergespeicherte-Prozeduren">
489         <title>Erweiterung für servergespeicherte Prozeduren</title>
490
491         <para>In der Datenbank <literal>template1</literal> muss die
492         Unterstützung für servergespeicherte Prozeduren eingerichet werden.
493         Melden Sie sich dafür als Benutzer “postgres” an der Datenbank an:
494         <programlisting>su - postgres
495 psql template1</programlisting>
496
497         führen Sie die folgenden Kommandos aus:</para>
498
499         <programlisting>create language 'plpgsql';
500 \q</programlisting>
501       </sect2>
502
503       <sect2 id="Datenbankbenutzer-anlegen">
504         <title>Datenbankbenutzer anlegen</title>
505
506         <para>Wenn Sie nicht den Datenbanksuperuser “postgres” zum Zugriff
507         benutzen wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer
508         anlegen. Ein Beispiel, wie Sie einen neuen Benutzer anlegen
509         können:</para>
510
511               <programlisting>su - postgres
512 createuser -d -P kivitendo
513 exit</programlisting>
514
515         <para>Wenn Sie später einen Datenbankzugriff konfigurieren, verändern
516         Sie den evtl. voreingestellten Benutzer “postgres” auf “kivitendo” bzw.
517         den hier gewählten Benutzernamen.</para>
518       </sect2>
519     </sect1>
520
521     <sect1 id="Apache-Konfiguration">
522       <title>Webserver-Konfiguration</title>
523
524       <sect2>
525         <title>Grundkonfiguration mittels CGI</title>
526
527         <note>
528           <para>Für einen deutlichen Performanceschub sorgt die Ausführung
529           mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
530           <xref linkend="Apache-Konfiguration.FCGI" /> beschrieben.</para>
531         </note>
532
533         <para>Der Zugriff auf das Programmverzeichnis muss in der Apache
534         Webserverkonfigurationsdatei <literal>httpd.conf</literal> eingestellt
535         werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
536         anderen Datei hinzu, die beim Starten des Webservers eingelesen
537         wird:</para>
538
539         <programlisting>AddHandler cgi-script .pl
540 Alias /kivitendo-erp/ /var/www/kiviteno-erp/
541
542 &lt;Directory /var/www/kivitendo-erp&gt;
543  Options ExecCGI Includes FollowSymlinks
544 &lt;/Directory&gt;
545
546 &lt;Directory /var/www/kivitendo-erp/users&gt;
547  Order Deny,Allow
548  Deny from All
549 &lt;/Directory&gt;</programlisting>
550
551         <para>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
552         das kivitendo-Archiv entpacket haben.</para>
553
554         <note>
555           <para>Vor den einzelnen Optionen muss bei einigen Distributionen ein
556           Plus ‘<literal>+</literal>’ gesetzt werden.</para>
557         </note>
558
559         <para>Auf einigen Webservern werden manchmal die Grafiken und
560         Style-Sheets nicht ausgeliefert. In solchen Fällen hat es oft
561         geholfen, die folgende Option in die Konfiguration aufzunehmen:</para>
562
563         <programlisting>EnableSendfile Off</programlisting>
564       </sect2>
565
566       <sect2 id="Apache-Konfiguration.FCGI"
567              xreflabel="Konfiguration für FastCGI/FCGI">
568         <title>Konfiguration für FastCGI/FCGI</title>
569
570         <sect3 id="Apache-Konfiguration.FCGI.WasIstEs">
571           <title>Was ist FastCGI?</title>
572
573           <para>Direkt aus <ulink
574           url="http://de.wikipedia.org/wiki/FastCGI">Wikipedia</ulink>
575           kopiert:</para>
576
577           <para><citation> FastCGI ist ein Standard für die Einbindung
578           externer Software zur Generierung dynamischer Webseiten in einem
579           Webserver. FastCGI ist vergleichbar zum Common Gateway Interface
580           (CGI), wurde jedoch entwickelt, um dessen Performance-Probleme zu
581           umgehen. </citation></para>
582         </sect3>
583
584         <sect3 id="Apache-Konfiguration.FCGI.Warum">
585           <title>Warum FastCGI?</title>
586
587           <para>Perl Programme (wie kivitendo eines ist) werden nicht statisch
588           kompiliert. Stattdessen werden die Quelldateien bei jedem Start
589           übersetzt, was bei kurzen Laufzeiten einen Großteil der Laufzeit
590           ausmacht. Während SQL Ledger einen Großteil der Funktionalität in
591           einzelne Module kapselt, um immer nur einen kleinen Teil laden zu
592           müssen, ist die Funktionalität von kivitendo soweit gewachsen, dass
593           immer mehr Module auf den Rest des Programms zugreifen. Zusätzlich
594           benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
595           entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies
596           führt dazu dass ein kivitendo Aufruf der Kernmasken mittlerweile
597           deutlich länger dauert als früher, und dass davon 90% für das Laden
598           der Module verwendet wird.</para>
599
600           <para>Mit FastCGI werden nun die Module einmal geladen, und danach
601           wird nur die eigentliche Programmlogik ausgeführt.</para>
602         </sect3>
603
604         <sect3 id="Apache-Konfiguration.FCGI.WebserverUndPlugin">
605           <title>Getestete Kombinationen aus Webservern und Plugin</title>
606
607           <para>Folgende Kombinationen sind getestet:</para>
608
609           <itemizedlist>
610             <listitem>
611               <para>Apache 2.2.11 (Ubuntu) und mod_fcgid.</para>
612             </listitem>
613
614             <listitem>
615               <para>Apache 2.2.11 (Ubuntu) und mod_fastcgi.</para>
616             </listitem>
617           </itemizedlist>
618
619           <para>Dabei wird mod_fcgid empfohlen, weil mod_fastcgi seit geraumer
620           Zeit nicht mehr weiter entwickelt wird. Im Folgenden wird auf
621           mod_fastcgi nicht mehr explizit eingegangen.</para>
622
623           <para>Als Perl Backend wird das Modul <filename>FCGI.pm</filename>
624           verwendet.</para>
625
626           <warning>
627             <para>FCGI 0.69 und höher ist extrem strict in der Behandlung von
628             Unicode, und verweigert bestimmte Eingaben von kivitendo. Falls es
629             Probleme mit Umlauten in Ihrere Installation gibt, muss auf die
630             Vorgängerversion FCGI 0.68 ausgewichen werden.</para>
631
632             <para>Mit CPAN lässt sie sich die Vorgängerversion wie folgt
633             installieren:</para>
634
635             <programlisting>force install M/MS/MSTROUT/FCGI-0.68.tar.gz</programlisting>
636           </warning>
637         </sect3>
638
639         <sect3 id="Apache-Konfiguration.FCGI.Konfiguration">
640           <title>Konfiguration des Webservers</title>
641
642           <para>Bevor Sie versuchen, eine kivitendo Installation unter FCGI
643           laufen zu lassen, empfliehlt es sich die Installation ersteinmal
644           unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
645           debuggen die beim ersten aufsetzen auftreten können. Sollte die
646           Installation schon funktionieren, lesen Sie weiter.</para>
647
648           <para>Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
649           unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:</para>
650
651           <programlisting>a2enmod fcgid</programlisting>
652
653           <para>Die Konfiguration für die Verwendung von kivitendo mit FastCGI
654           erfolgt durch Anpassung der vorhandenen <function>Alias</function>-
655           und <function>Directory</function>-Direktiven. Dabei wird zwischen
656           dem Installationspfad von kivitendo im Dateisystem
657           ("<filename>/path/to/kivitendo-erp</filename>") und der URL
658           unterschieden, unter der kivitendo im Webbrowser erreichbar ist
659           ("<filename>/url/for/kivitendo-erp</filename>").</para>
660
661           <para>Folgender Konfigurationsschnipsel funktioniert mit
662           mod_fastcgi:</para>
663
664           <programlisting>AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fcgi
665 Alias       /url/for/kivitendo-erp/          /path/to/kivitendo-erp/
666
667 &lt;Directory /path/to/kivitendo-erp&gt;
668   AllowOverride All
669   Options ExecCGI Includes FollowSymlinks
670   Order Allow,Deny
671   Allow from All
672 &lt;/Directory&gt;
673
674 &lt;DirectoryMatch /path/to/kivitendo-erp/users&gt;
675   Order Deny,Allow
676   Deny from All
677 &lt;/DirectoryMatch&gt;</programlisting>
678
679           <para>Seit mod_fcgid-Version 2.6.3 gelten sehr kleine Grenzen für
680           die maximale Größe eines Requests. Diese sollte wie folgt
681           hochgesetzt werden:</para>
682
683           <programlisting>FcgidMaxRequestLen 10485760</programlisting>
684
685           <para>Das ganze sollte dann so aussehen:</para>
686
687           <programlisting>AddHandler fcgid-script .fpl
688 AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
689 Alias       /url/for/kivitendo-erp/          /path/to/kivitendo-erp/
690 FcgidMaxRequestLen 10485760
691
692 &lt;Directory /path/to/kivitendo-erp&gt;
693   AllowOverride All
694   Options ExecCGI Includes FollowSymlinks
695   Order Allow,Deny
696   Allow from All
697 &lt;/Directory&gt;
698
699 &lt;DirectoryMatch /path/to/kivitendo-erp/users&gt;
700   Order Deny,Allow
701   Deny from All
702 &lt;/DirectoryMatch&gt;</programlisting>
703
704           <para>Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle
705           Zugriffe auf die einzelnen Scripte werden auf diesen umgeleitet.
706           Dadurch, dass zur Laufzeit öfter mal Scripte neu geladen werden,
707           gibt es hier kleine Performance-Einbußen.</para>
708
709           <para>Es ist möglich, die gleiche kivitendo Version parallel unter
710           CGI und FastCGI zu betreiben. Dafür bleiben die Directorydirektiven
711           wie oben beschrieben, die URLs werden aber umgeleitet:</para>
712
713           <programlisting># Zugriff über CGI
714 Alias       /url/for/kivitendo-erp                /path/to/kivitendo-erp
715
716 # Zugriff mit mod_fcgid:
717 AliasMatch ^/url/for/kivitendo-erp-fcgid/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
718 Alias       /url/for/kivitendo-erp-fcgid/          /path/to/kivitendo-erp/</programlisting>
719
720           <para>Dann ist unter <filename>/url/for/kivitendo-erp/</filename>
721           die normale Version erreichbar, und unter
722           <constant>/url/for/kivitendo-erp-fcgid/</constant> die
723           FastCGI-Version.</para>
724         </sect3>
725       </sect2>
726     </sect1>
727
728     <sect1 id="config.task-server">
729       <title>Der Task-Server</title>
730
731       <para>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
732       regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese zu
733       festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess
734       wird bisher nur für die Erzeugung der wiederkehrenden Rechnungen
735       benutzt, wird aber in Zukunft deutlich mehr Aufgaben übertragen
736       bekommen.</para>
737
738       <sect2 id="Konfiguration-des-Task-Servers">
739         <title>Verfügbare und notwendige Konfigurationsoptionen</title>
740
741         <para>Die Konfiguration erfolgt über den Abschnitt
742         <literal>[task_server]</literal> in der Datei
743         <filename>config/kivitendo.conf</filename>. Die dort verfügbaren
744         Optionen sind:</para>
745
746         <variablelist>
747           <varlistentry>
748             <term><varname>login</varname></term>
749
750             <listitem>
751               <para>gültiger kivitendo-Benutzername, der benutzt wird, um die
752               zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss
753               in der Administration angelegt werden. Diese Option muss
754               angegeben werden.</para>
755             </listitem>
756           </varlistentry>
757
758           <varlistentry>
759             <term><varname>run_as</varname></term>
760
761             <listitem>
762               <para>Wird der Server vom Systembenutzer <literal>root</literal>
763               gestartet, so wechselt er auf den mit <literal>run_as</literal>
764               angegebenen Systembenutzer. Der Systembenutzer muss dieselben
765               Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
766               (siehe see <xref
767               linkend="Manuelle-Installation-des-Programmpaketes" />). Daher
768               ist es sinnvoll, hier denselben Systembenutzer einzutragen,
769               unter dem auch der Webserver läuft.</para>
770             </listitem>
771           </varlistentry>
772
773           <varlistentry>
774             <term><varname>debug</varname></term>
775
776             <listitem>
777               <para>Schaltet Debug-Informationen an und aus.</para>
778             </listitem>
779           </varlistentry>
780         </variablelist>
781       </sect2>
782
783       <sect2 id="Einbinden-in-den-Boot-Prozess">
784         <title>Automatisches Starten des Task-Servers beim Booten</title>
785
786         <para>Der Task-Server verhält sich von seinen Optionen her wie ein
787         reguläres SystemV-kompatibles Boot-Script. Außerdem wechselt er beim
788         Starten automatisch in das kivitendo-Installationsverzeichnis.</para>
789
790         <para>Deshalb ist es möglich, ihn durch Setzen eines symbolischen
791         Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
792         einzubinden. Da das bei neueren Linux-Distributionen aber nicht
793         zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
794         anstelle eines symbolischen Links verwendet werden können.</para>
795
796         <sect3>
797           <title>SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora
798           Core)</title>
799
800           <para>Kopieren Sie die Datei
801           <filename>scripts/boot/system-v/kivitendo-server</filename>
802           nach <filename>/etc/init.d/kivitendo-server</filename>. Passen
803           Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
804           <literal>DAEMON=....</literal>). Binden Sie das Script in den
805           Boot-Prozess ein. Dies ist distributionsabhängig:</para>
806
807           <itemizedlist>
808             <listitem>
809               <para>Debian-basierende Systeme:</para>
810
811               <programlisting>update-rc.d kivitendo-task-server defaults
812 # Nur bei Debian Squeeze und neuer:
813 insserv kivitendo-task-server</programlisting>
814             </listitem>
815
816             <listitem>
817               <para>OpenSuSE und Fedora Core:</para>
818
819               <programlisting>chkconfig --add kivitendo-task-server</programlisting>
820             </listitem>
821           </itemizedlist>
822
823           <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
824           werden: <command>/etc/init.d/kivitendo-task-server
825           start</command></para>
826         </sect3>
827
828         <sect3>
829           <title>Upstart-basierende Systeme (z.B. Ubuntu)</title>
830
831           <para>Kopieren Sie die Datei
832           <filename>scripts/boot/upstart/kivitendo-task-server.conf</filename>
833           nach <filename>/etc/init/kivitendo-task-server.conf</filename>.
834           Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
835           <literal>exec ....</literal>).</para>
836
837           <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
838           werden: <command>service kivitendo-task-server
839           start</command></para>
840         </sect3>
841       </sect2>
842
843       <sect2 id="Prozesskontrolle">
844         <title>Wie der Task-Server gestartet und beendet wird</title>
845
846         <para>Der Task-Server wird wie folgt kontrolliert:</para>
847
848         <programlisting>./scripts/task_server.pl Befehl</programlisting>
849
850         <para><literal>Befehl</literal> ist dabei eine der folgenden
851         Optionen:</para>
852
853         <itemizedlist>
854           <listitem>
855             <para><literal>start</literal> startet eine neue Instanz des
856             Task-Servers. Die Prozess-ID wird innerhalb des
857             <filename>users</filename>-Verzeichnisses abgelegt.</para>
858           </listitem>
859
860           <listitem>
861             <para><literal>stop</literal> beendet einen laufenden
862             Task-Server.</para>
863           </listitem>
864
865           <listitem>
866             <para><literal>restart</literal> beendet und startet ihn
867             neu.</para>
868           </listitem>
869
870           <listitem>
871             <para><literal>status</literal> berichtet, ob der Task-Server
872             läuft.</para>
873           </listitem>
874         </itemizedlist>
875
876         <para>Der Task-Server wechselt beim Starten automatisch in das
877         kivitendo-Installationsverzeichnis.</para>
878
879         <para>Dieselben Optionen können auch für die SystemV-basierenden
880         Runlevel-Scripte benutzt werden (siehe oben).</para>
881       </sect2>
882       <sect2 id="Prozesskontrolle2">
883         <title>Task-Server mit mehreren Mandanten</title>
884
885         <para>Beim Task-Server wird der Login-Name des Benutzers, unter dem der
886         Task-Server laufen soll, in die Konfigurationsdatei geschrieben. Hat
887         man mehrere Mandanten muß man auch mehrere Konfigurationsdateien
888         anlegen.</para>
889
890         <para>Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf,
891         wo in der Kategorie [task_server] der gewünschte "login" steht.</para>
892
893         <para>Der alternative Task-Server wird dann mit folgendem Befehl
894         gestartet:</para>
895
896         <programlisting>./scripts/task_server.pl -c config/DATEINAME.conf</programlisting>
897       </sect2>
898     </sect1>
899
900     <sect1 id="Benutzerauthentifizierung-und-Administratorpasswort">
901       <title>Benutzerauthentifizierung und Administratorpasswort</title>
902
903       <para>Informationen über die Einrichtung der Benutzerauthentifizierung,
904       über die Verwaltung von Gruppen und weitere Einstellungen</para>
905
906       <sect2 id="Grundlagen-zur-Benutzerauthentifizierung">
907         <title>Grundlagen zur Benutzerauthentifizierung</title>
908
909         <para>kivitendo verwaltet die Benutzerinformationen in einer
910         Datenbank, die im folgenden “Authentifizierungsdatenbank” genannt
911         wird. Für jeden Benutzer kann dort eine eigene Datenbank für die
912         eigentlichen Finanzdaten hinterlegt sein. Diese beiden Datenbanken
913         können, müssen aber nicht unterschiedlich sein.</para>
914
915         <para>Im einfachsten Fall gibt es für kivitendo nur eine einzige
916         Datenbank, in der sowohl die Benutzerinformationen als auch die Daten
917         abgelegt werden.</para>
918
919         <para>Zusätzlich ermöglicht es kivitendo, dass die Benutzerpasswörter
920         entweder gegen die Authentifizierungsdatenbank oder gegen einen
921         LDAP-Server überprüft werden.</para>
922
923         <para>Welche Art der Passwortüberprüfung kivitendo benutzt und wie
924         kivitendo die Authentifizierungsdatenbank erreichen kann, wird in der
925         Konfigurationsdatei <filename>config/kivitendo.conf</filename>
926         festgelegt. Diese muss bei der Installation und bei einem Upgrade von
927         einer Version vor v2.6.0 angelegt werden. Eine
928         Beispielkonfigurationsdatei
929         <filename>config/kivitendo.conf.default</filename> existiert, die als
930         Vorlage benutzt werden kann.</para>
931       </sect2>
932
933       <sect2 id="Administratorpasswort">
934         <title>Administratorpasswort</title>
935
936         <para>Das Passwort, das zum Zugriff auf das Aministrationsinterface
937         benutzt wird, wird ebenfalls in dieser Datei gespeichert. Es kann auch
938         nur dort und nicht mehr im Administrationsinterface selber geändert
939         werden. Der Parameter dazu heißt <varname>admin_password</varname> im
940         Abschnitt <varname>[authentication]</varname>.</para>
941       </sect2>
942
943       <sect2 id="Authentifizierungsdatenbank">
944         <title>Authentifizierungsdatenbank</title>
945
946         <para>Die Verbindung zur Authentifizierungsdatenbank wird mit den
947         Parametern in <varname>[authentication/database]</varname>
948         konfiguriert. Hier sind die folgenden Parameter anzugeben:</para>
949
950         <variablelist>
951           <varlistentry>
952             <term><literal>host</literal></term>
953
954             <listitem>
955               <para>Der Rechnername oder die IP-Adresse des
956               Datenbankservers</para>
957             </listitem>
958           </varlistentry>
959
960           <varlistentry>
961             <term><literal>port</literal></term>
962
963             <listitem>
964               <para>Die Portnummer des Datenbankservers, meist 5432</para>
965             </listitem>
966           </varlistentry>
967
968           <varlistentry>
969             <term><literal>db</literal></term>
970
971             <listitem>
972               <para>Der Name der Authentifizierungsdatenbank</para>
973             </listitem>
974           </varlistentry>
975
976           <varlistentry>
977             <term><literal>user</literal></term>
978
979             <listitem>
980               <para>Der Benutzername, mit dem sich kivitendo beim
981               Datenbankserver anmeldet (z.B.
982               "<literal>postgres</literal>")</para>
983             </listitem>
984           </varlistentry>
985
986           <varlistentry>
987             <term><literal>password</literal></term>
988
989             <listitem>
990               <para>Das Passwort für den Datenbankbenutzer</para>
991             </listitem>
992           </varlistentry>
993         </variablelist>
994
995         <para>Die Datenbank muss noch nicht existieren. kivitendo kann sie
996         automatisch anlegen (mehr dazu siehe unten).</para>
997       </sect2>
998
999       <sect2 id="Passwortüberprüfung">
1000         <title>Passwortüberprüfung</title>
1001
1002         <para>kivitendo unterstützt Passwortüberprüfung auf zwei Arten: gegen
1003         die Authentifizierungsdatenbank und gegen einen externen LDAP- oder
1004         Active-Directory-Server. Welche davon benutzt wird, regelt der
1005         Parameter <varname>module</varname> im Abschnitt
1006         <varname>[authentication]</varname>.</para>
1007
1008         <para>Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank
1009         gespeichert werden, so muss der Parameter <varname>module</varname>
1010         den Wert <literal>DB</literal> enthalten. In diesem Fall können sowohl
1011         der Administrator als auch die Benutzer selber ihre Psaswörter in
1012         kivitendo ändern.</para>
1013
1014         <para>Soll hingegen ein externer LDAP- oder Active-Directory-Server
1015         benutzt werden, so muss der Parameter <varname>module</varname> auf
1016         <literal>LDAP</literal> gesetzt werden. In diesem Fall müssen
1017         zusätzliche Informationen über den LDAP-Server im Abschnitt
1018         <literal>[authentication/ldap]</literal> angegeben werden:</para>
1019
1020         <variablelist>
1021           <varlistentry>
1022             <term><literal>host</literal></term>
1023
1024             <listitem>
1025               <para>Der Rechnername oder die IP-Adresse des LDAP- oder
1026               Active-Directory-Servers. Diese Angabe ist zwingend
1027               erforderlich.</para>
1028             </listitem>
1029           </varlistentry>
1030
1031           <varlistentry>
1032             <term><literal>port</literal></term>
1033
1034             <listitem>
1035               <para>Die Portnummer des LDAP-Servers; meist 389.</para>
1036             </listitem>
1037           </varlistentry>
1038
1039           <varlistentry>
1040             <term><literal>tls</literal></term>
1041
1042             <listitem>
1043               <para>Wenn Verbindungsverschlüsselung gewünscht ist, so diesen
1044               Wert auf ‘<literal>1</literal>’ setzen, andernfalls auf
1045               ‘<literal>0</literal>’ belassen</para>
1046             </listitem>
1047           </varlistentry>
1048
1049           <varlistentry>
1050             <term><literal>attribute</literal></term>
1051
1052             <listitem>
1053               <para>Das LDAP-Attribut, in dem der Benutzername steht, den der
1054               Benutzer eingegeben hat. Für Active-Directory-Server ist dies
1055               meist ‘<literal>sAMAccountName</literal>’, für andere
1056               LDAP-Server hingegen ‘<literal>uid</literal>’. Diese Angabe ist
1057               zwingend erforderlich.</para>
1058             </listitem>
1059           </varlistentry>
1060
1061           <varlistentry>
1062             <term><literal>base_dn</literal></term>
1063
1064             <listitem>
1065               <para>Der Abschnitt des LDAP-Baumes, der durchsucht werden soll.
1066               Diese Angabe ist zwingend erforderlich.</para>
1067             </listitem>
1068           </varlistentry>
1069
1070           <varlistentry>
1071             <term><literal>filter</literal></term>
1072
1073             <listitem>
1074               <para>Ein optionaler LDAP-Filter. Enthält dieser Filter das Wort
1075               <literal>&lt;%login%&gt;</literal>, so wird dieses durch den vom
1076               Benutzer eingegebenen Benutzernamen ersetzt. Andernfalls wird
1077               der LDAP-Baum nach einem Element durchsucht, bei dem das oben
1078               angegebene Attribut mit dem Benutzernamen identisch ist.</para>
1079             </listitem>
1080           </varlistentry>
1081
1082           <varlistentry>
1083             <term><literal>bind_dn</literal> und
1084             <literal>bind_password</literal></term>
1085
1086             <listitem>
1087               <para>Wenn der LDAP-Server eine Anmeldung erfordert, bevor er
1088               durchsucht werden kann (z.B. ist dies bei
1089               Active-Directory-Servern der Fall), so kann diese hier angegeben
1090               werden. Für Active-Directory-Server kann als
1091               ‘<literal>bind_dn</literal>’ entweder eine komplette LDAP-DN wie
1092               z.B. ‘<literal>cn=Martin
1093               Mustermann,cn=Users,dc=firmendomain</literal>’ auch nur der
1094               volle Name des Benutzers eingegeben werden; in diesem Beispiel
1095               also ‘<literal>Martin Mustermann</literal>’.</para>
1096             </listitem>
1097           </varlistentry>
1098         </variablelist>
1099       </sect2>
1100
1101       <sect2 id="Name-des-Session-Cookies">
1102         <title>Name des Session-Cookies</title>
1103
1104         <para>Sollen auf einem Server mehrere kivitendo-Installationen
1105         aufgesetzt werden, so müssen die Namen der Session-Cookies für alle
1106         Installationen unterschiedlich sein. Der Name des Cookies wird mit dem
1107         Parameter <varname>cookie_name</varname> im Abschnitt
1108         <varname>[authentication]</varname>gesetzt.</para>
1109
1110         <para>Diese Angabe ist optional, wenn nur eine Installation auf dem
1111         Server existiert.</para>
1112       </sect2>
1113
1114       <sect2 id="Anlegen-der-Authentifizierungsdatenbank">
1115         <title>Anlegen der Authentifizierungsdatenbank</title>
1116
1117         <para>Nachdem alle Einstellungen in
1118         <filename>config/kivitendo.conf</filename> vorgenommen wurden, muss
1119         kivitendo die Authentifizierungsdatenbank anlegen. Dieses geschieht
1120         automatisch, wenn Sie sich im Administrationsmodul anmelden, das unter
1121         der folgenden URL erreichbar sein sollte:</para>
1122
1123         <para><ulink
1124         url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
1125       </sect2>
1126     </sect1>
1127
1128     <sect1 id="Benutzer--und-Gruppenverwaltung">
1129       <title>Benutzer- und Gruppenverwaltung</title>
1130
1131       <para>Nach der Installation müssen Benutzer, Gruppen und Datenbanken
1132       angelegt werden. Dieses geschieht im Administrationsmenü, das Sie unter
1133       folgender URL finden:</para>
1134
1135       <para><ulink
1136       url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
1137
1138       <para>Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
1139       <filename>config/kivitendo.conf</filename> eingetragen haben.</para>
1140
1141       <sect2 id="Zusammenhänge">
1142         <title>Zusammenhänge</title>
1143
1144         <para>kivitendo verwendet eine Datenbank zum Speichern all seiner
1145         Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
1146         mit kivitendo arbeiten zu können, muss eine Person einen
1147         Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
1148         Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
1149         möglich und normal, dass mehreren Benutzern die selbe Datenbank
1150         zugewiesen wird, sodass sie alle mit den selben Daten arbeiten
1151         können.</para>
1152
1153         <para>Die Basisdaten der Benutzer, die in der Administration
1154         eingegeben werden können, werden in einer zweiten Datenbank
1155         gespeichert, der bereits erwähnten Authentifizierungsdatenbank. Diese
1156         ist also den Produktivdaten enthaltenden Datenbanken vorgeschaltet.
1157         Pro kivitendo-Installation gibt es nur eine
1158         Authentifizierungsdatenbank, aber beliebig viele Datenbanken mit
1159         Firmendaten.</para>
1160
1161         <para>kivitendo kann seinen Benutzern Zugriff auf bestimmte
1162         Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
1163         gestattet, so werden der entsprechenden Menüpunkte auch nicht
1164         angezeigt. Diese Rechte werden ebenfalls in der
1165         Authentifizierungsdatenbank gespeichert.</para>
1166
1167         <para>Um Rechte verteilen zu können, verwendet kivitendo ein
1168         Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
1169         erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
1170         mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
1171         Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
1172         Benutzer Mitglied ist.</para>
1173
1174         <para>Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und
1175         Benutzer angelegt werden sollten, lautet:</para>
1176
1177         <orderedlist numeration="arabic">
1178           <listitem>
1179             <para>Datenbank anlegen</para>
1180           </listitem>
1181
1182           <listitem>
1183             <para>Gruppen anlegen</para>
1184           </listitem>
1185
1186           <listitem>
1187             <para>Benutzer anlegen</para>
1188           </listitem>
1189
1190           <listitem>
1191             <para>Benutzer den Gruppen zuordnen</para>
1192           </listitem>
1193         </orderedlist>
1194       </sect2>
1195
1196       <sect2 id="Datenbanken-anlegen">
1197         <title>Datenbanken anlegen</title>
1198
1199         <para>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
1200         den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
1201         Beispielen ist dies ‘<literal>kivitendo</literal>’).</para>
1202
1203         <para>Wenn Sie für die kivitendo-Installation nicht Unicode (UTF-8) sondern den europäischen Schriftsatz ISO-8859-15 benutzen
1204         wollen, so müssen Sie vor dem Anlegen der Datenbank in der Datei <filename>config/kivitendo.conf</filename> die Variable
1205         <literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf den Wert ‘<literal>ISO-8859-15</literal>’ setzen.</para>
1206
1207         <para>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
1208         verwenden müssen, da diese Einstellungen momentan global in kivitendo
1209         vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
1210         Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
1211         angelegt worden sein.</para>
1212       </sect2>
1213
1214       <sect2 id="Gruppen-anlegen">
1215         <title>Gruppen anlegen</title>
1216
1217         <para>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein
1218         Name gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
1219         Anlegen können Sie die verschiedenen Bereiche wählen, auf die
1220         Mitglieder dieser Gruppe Zugriff haben sollen.</para>
1221
1222         <para>Benutzergruppen sind unabhängig von Datenbanken, da sie in der
1223         Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
1224         Datenbanken, die in dieser Installation verwaltet werden.</para>
1225       </sect2>
1226
1227       <sect2 id="Benutzer-anlegen">
1228         <title>Benutzer anlegen</title>
1229
1230         <para>Beim Anlegen von Benutzern werden für viele Parameter
1231         Standardeinstellungen vorgenommen, die den Gepflogenheiten des
1232         deutschen Raumes entsprechen.</para>
1233
1234         <para>Zwingend anzugeben sind der Loginname sowie die komplette
1235         Datenbankkonfiguration. Wenn die Passwortauthentifizierung über die
1236         Datenbank eingestellt ist, so kann hier auch das Benutzerpasswort
1237         gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung
1238         aktiv, so ist das Passwort-Feld deaktiviert.</para>
1239
1240         <para>In der Datenbankkonfiguration müssen die Zugriffsdaten einer der
1241         eben angelegten Datenbanken eingetragen werden.</para>
1242       </sect2>
1243
1244       <sect2 id="Gruppenmitgliedschaften-verwalten">
1245         <title>Gruppenmitgliedschaften verwalten</title>
1246
1247         <para>Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den
1248         Gruppen zugewiesen werden. Dazu gibt es zwei Möglichkeiten:</para>
1249
1250         <orderedlist numeration="arabic">
1251           <listitem>
1252             <para>In der Gruppenverwaltung wählt man eine Gruppe aus. Im
1253             folgenden Dialog kann man dann einzeln die Benutzer der Gruppe
1254             hinzufügen.</para>
1255           </listitem>
1256
1257           <listitem>
1258             <para>In der Gruppenverwaltung wählt man das Tool zur Verwaltung
1259             der Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die
1260             alle im System angelegten Gruppen und Benutzer enthält. Durch
1261             Setzen der Häkchen wird der Benutzer in der ausgewählten Zeile der
1262             Gruppe in der ausgewählten Spalte hinzugefügt.</para>
1263           </listitem>
1264         </orderedlist>
1265       </sect2>
1266
1267       <sect2 id="Migration-alter-Installationen">
1268         <title>Migration alter Installationen</title>
1269
1270         <para>Wenn kivitendo 2.6.3 über eine ältere Version installiert wird,
1271         in der die Benutzerdaten noch im Dateisystem im Verzeichnis
1272         <literal>users</literal> verwaltet wurden, so bietet kivitendo die
1273         Möglichkeit, diese Benutzerdaten automatisch in die
1274         Authentifizierungsdatenbank zu übernehmen. Dies geschieht, wenn man
1275         sich nach dem Update der Installation das erste Mal im
1276         Administrationsbereich anmeldet. Findet kivitendo die Datei
1277         <literal>users/members</literal>, so wird der Migrationsprozess
1278         gestartet.</para>
1279
1280         <para>Der Migrationsprozess ist nahezu vollautomatisch. Alle
1281         Benutzerdaten können übernommen werden. Nach den Benutzerdaten bietet
1282         kivitendo noch die Möglichkeit an, dass automatisch eine
1283         Benutzergruppe angelegt wird. Dieser Gruppe wird Zugriff auf alle
1284         Funktionen von kivitendo gewährt. Alle migrierten Benutzern werden
1285         Mitglied in dieser Gruppe. Damit wird das Verhalten von kivitendo bis
1286         Version 2.4.3 inklusive wiederhergestellt, und die Benutzer können
1287         sich sofort wieder anmelden und mit dem System arbeiten.</para>
1288       </sect2>
1289     </sect1>
1290
1291 <sect1 id="config.sending-email">
1292       <title>E-Mail-Versand aus kivitendo heraus</title>
1293
1294       <para>kivitendo kann direkt aus dem Programm heraus E-Mails versenden, z.B. um ein Angebot direkt an einen Kunden zu
1295       verschicken. Damit dies funktioniert, muss eingestellt werden, über welchen Server die E-Mails verschickt werden sollen. kivitendo
1296       unterstützt dabei zwei Mechanismen: Versand über einen lokalen E-Mail-Server (z.B. mit <productname>Postfix</productname> oder
1297       <productname>Exim</productname>, was auch die standardmäßig aktive Methode ist) sowie Versand über einen SMTP-Server (z.B. der des
1298       eigenen Internet-Providers).</para>
1299
1300       <para>Welche Methode und welcher Server verwendet werden, wird über die Konfigurationsdatei <filename>config/kivitendo.conf</filename>
1301       festgelegt. Dort befinden sich alle Einstellungen zu diesem Thema im Abschnitt '<literal>[mail_delivery]</literal>'.</para>
1302
1303       <sect2 id="config.sending-email.sendmail">
1304         <title>Versand über lokalen E-Mail-Server</title>
1305
1306         <para>Diese Methode bietet sich an, wenn auf dem Server, auf dem kivitendo läuft, bereits ein funktionsfähiger E-Mail-Server wie
1307         z.B. <productname>Postfix</productname>, <productname>Exim</productname> oder <productname>Sendmail</productname> läuft.</para>
1308
1309         <para>Um diese Methode auszuwählen, muss der Konfigurationsparameter '<literal>method = sendmail</literal>' gesetzt sein. Dies ist
1310         gleichzeitig der Standardwert, falls er nicht verändert wird.</para>
1311
1312         <para>Um zu kontrollieren, wie das Programm zum Einliefern gestartet wird, dient der Parameter '<literal>sendmail =
1313         ...</literal>'. Der Standardwert verweist auf das Programm <filename>/usr/bin/sendmail</filename>, das bei allen oben genannten
1314         E-Mail-Serverprodukten für diesen Zweck funktionieren sollte.</para>
1315
1316         <para>Die Konfiguration des E-Mail-Servers selber würde den Rahmen dieses sprengen. Hierfür sei auf die Dokumentation des
1317         E-Mail-Servers verwiesen.</para>
1318       </sect2>
1319
1320       <sect2 id="config.sending-email.smtp">
1321         <title>Versand über einen SMTP-Server</title>
1322
1323         <para>Diese Methode bietet sich an, wenn kein lokaler E-Mail-Server vorhanden oder zwar einer vorhanden, dieser aber nicht
1324         konfiguriert ist.</para>
1325
1326         <para>Um diese Methode auszuwählen, muss der Konfigurationsparameter '<literal>method = smtp</literal>' gesetzt sein. Die folgenden
1327         Parameter dienen dabei der weiteren Konfiguration:</para>
1328
1329         <variablelist>
1330           <varlistentry>
1331             <term><varname>hostname</varname></term>
1332
1333             <listitem><para>Name oder IP-Adresse des SMTP-Servers. Standardwert: '<literal>localhost</literal>'</para></listitem>
1334           </varlistentry>
1335
1336           <varlistentry>
1337             <term><varname>port</varname></term>
1338
1339             <listitem><para>Portnummer. Der Standardwert hängt von der verwendeten Verschlüsselungsmethode ab. Gilt '<literal>security =
1340             none</literal>' oder '<literal>security = tls</literal>', so ist 25 die Standardportnummer. Für '<literal>security =
1341             ssl</literal>' ist 465 die Portnummer. Muss normalerweise nicht geändert werden.</para></listitem>
1342           </varlistentry>
1343
1344           <varlistentry>
1345             <term><varname>security</varname></term>
1346
1347             <listitem><para>Wahl der zu verwendenden Verschlüsselung der Verbindung mit dem Server. Standardwert ist
1348             '<literal>none</literal>', wodurch keine Verschlüsselung verwendet wird. Mit '<literal>tls</literal>' wird TLS-Verschlüsselung
1349             eingeschaltet, und mit '<literal>ssl</literal>' wird Verschlüsselung via SSL eingeschaltet. Achtung: Für
1350             '<literal>tls</literal>' und '<literal>ssl</literal>' werden zusätzliche Perl-Module benötigt (siehe unten).</para></listitem>
1351           </varlistentry>
1352
1353           <varlistentry>
1354             <term><varname>login</varname> und <varname>password</varname></term>
1355
1356             <listitem><para>Falls der E-Mail-Server eine Authentifizierung verlangt, so können mit diesen zwei Parametern der Benutzername
1357             und das Passwort angegeben werden. Wird Authentifizierung verwendet, so sollte aus Sicherheitsgründen auch eine Form von
1358             Verschlüsselung aktiviert werden.</para></listitem>
1359           </varlistentry>
1360         </variablelist>
1361
1362         <para>Wird Verschlüsselung über TLS oder SSL aktiviert, so werden zusätzliche Perl-Module benötigt. Diese sind:</para>
1363
1364         <itemizedlist>
1365           <listitem><para>TLS-Verschlüsselung: Modul <literal>Net::SSLGlue</literal> (Debian-Paketname
1366           <literal>libnet-sslglue-perl</literal>, Fedora Core: <literal>perl-Net-SSLGlue</literal>, openSuSE:
1367           <literal>perl-Net-SSLGlue</literal></para></listitem>
1368
1369           <listitem><para>SSL-Verschlüsselung: Modul <literal>Net::SMTP::SSL</literal> (Debian-Paketname
1370           <literal>libnet-smtp-ssl-perl</literal>, Fedora Core: <literal>perl-Net-SMTP-SSL</literal>, openSuSE:
1371           <literal>perl-Net-SMTP-SSL</literal></para></listitem>
1372         </itemizedlist>
1373       </sect2>
1374     </sect1>
1375
1376     <sect1 id="Drucken-mit-kivitendo">
1377       <title>Drucken mit kivitendo</title>
1378
1379       <para>Das Drucksystem von kivitendo benutzt von Haus aus LaTeX Vorlagen.
1380       Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
1381       einfachsten ist dazu eine <literal>texlive</literal> Installation. Unter
1382       Debianoiden Betriebssystemen sind das die Pakete:</para>
1383
1384       <para><literal>texlive-latex-base texlive-latex-extra
1385       texlive-fonts-recommended</literal></para>
1386
1387       <para>Diese hinteren beiden enthalten Bibliotheken und Schriftarten die
1388       von den Standardvorlagen verwendet werden.</para>
1389
1390       <para>TODO: rpm Pakete.</para>
1391
1392       <para>In den allermeisten Installationen sollte drucken jetzt schon
1393       funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange
1394       Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite
1395       die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum
1396       Beispiel:</para>
1397
1398       <itemizedlist>
1399         <listitem>
1400           <para>! LaTeX Error: File `eurosym.sty' not found. Die entsprechende
1401           LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem bei
1402           Vorlagen aus der Community auf. Installieren Sie die entsprechenden
1403           Pakete.</para>
1404         </listitem>
1405
1406         <listitem>
1407           <para>! Package inputenc Error: Unicode char \u8:æ¡\9c not set up for
1408           use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
1409           einer Standardinstallation exotische utf8 Zeichen zu drucken.
1410           TeXLive unterstützt von Haus nur romanische Schriften und muss mit
1411           diversen Tricks dazu gebracht werden andere Zeichen zu akzeptieren.
1412           Adere TeX Systeme wie XeTeX schaffen hier Abhilfe.</para>
1413         </listitem>
1414       </itemizedlist>
1415
1416       <para>Wird garkein Fehler angezeigt sondern nur der Name des Templates,
1417       heißt das normalerweise, dass das LaTeX Binary nicht gefunden wurde.
1418       Prüfen Sie den Namen in der Konfiguration (Standard:
1419       <literal>pdflatex</literal>), und stellen Sie sicher, dass pdflatex
1420       (oder das von Ihnen verwendete System) vom Webserver ausgeführt werden
1421       darf.</para>
1422     </sect1>
1423
1424     <sect1 id="OpenDocument-Vorlagen">
1425       <title>OpenDocument-Vorlagen</title>
1426
1427       <para>kivitendo unterstützt die Verwendung von Vorlagen im
1428       OpenDocument-Format, wie es OpenOffice.org ab Version 2 erzeugt.
1429       kivitendo kann dabei sowohl neue OpenDocument-Dokumente als auch aus
1430       diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
1431       OpenDocument-Vorlagen zu aktivieren muss in der Datei
1432       <filename>config/kivitendo.conf</filename> die Variable
1433       <literal>opendocument</literal> im Abschnitt
1434       <literal>print_templates</literal> auf ‘<literal>1</literal>’ stehen.
1435       Dieses ist die Standardeinstellung.</para>
1436
1437       <para>Weiterhin muss in der Datei
1438       <filename>config/kivitendo.conf</filename> die Variable
1439       <literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf
1440       die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der
1441       Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen
1442       "UTF-8".</para>
1443
1444       <para>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
1445       weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
1446       OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
1447       neben OpenOffice.org ab Version 2 auch der “X virtual frame buffer”
1448       (xvfb) installiert werden. Bei Debian ist er im Paket “xvfb” enthalten.
1449       Andere Distributionen enthalten ihn in anderen Paketen.</para>
1450
1451       <para>Nach der Installation müssen in der Datei
1452       <filename>config/kivitendo.conf</filename> zwei weitere Variablen
1453       angepasst werden: <literal>openofficeorg_writer</literal> muss den
1454       vollständigen Pfad zur OpenOffice.org Writer-Anwendung enthalten.
1455       <literal>xvfb</literal> muss den Pfad zum “X virtual frame buffer”
1456       enthalten. Beide stehen im Abschnitt
1457       <literal>applications</literal>.</para>
1458
1459       <para>Zusätzlich gibt es zwei verschiedene Arten, wie kivitendo mit
1460       OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn die
1461       Variable <literal>$openofficeorg_daemon</literal> gesetzt ist, startet
1462       ein OpenOffice, das auch nach der Umwandlung des Dokumentes gestartet
1463       bleibt. Bei weiteren Umwandlungen wird dann diese laufende Instanz
1464       benutzt. Der Vorteil ist, dass die Zeit zur Umwandlung deutlich
1465       reduziert wird, weil nicht für jedes Dokument ein OpenOffice gestartet
1466       werden muss. Der Nachteil ist, dass diese Methode Python und die
1467       Python-UNO-Bindings benötigt, die Bestandteil von OpenOffice 2
1468       sind.</para>
1469
1470       <para>Ist <literal>$openofficeorg_daemon</literal> nicht gesetzt, so
1471       wird für jedes Dokument OpenOffice neu gestartet und die Konvertierung
1472       mit Hilfe eines Makros durchgeführt. Dieses Makro muss in der
1473       Dokumentenvorlage enthalten sein und
1474       “Standard.Conversion.ConvertSelfToPDF()” heißen. Die Beispielvorlage
1475       ‘<literal>templates/mastertemplates/German/invoice.odt</literal>’
1476       enthält ein solches Makro, das in jeder anderen Dokumentenvorlage
1477       ebenfalls enthalten sein muss.</para>
1478
1479       <para>Als letztes muss herausgefunden werden, welchen Namen
1480       OpenOffice.org Writer dem Verzeichnis mit den Benutzereinstellungen
1481       gibt. Unter Debian ist dies momentan
1482       <literal>~/.openoffice.org2</literal>. Sollte der Name bei Ihrer
1483       OpenOffice.org-Installation anders sein, so muss das Verzeichnis
1484       <literal>users/.openoffice.org2</literal> entsprechend umbenannt werden.
1485       Ist der Name z.B. einfach nur <literal>.openoffice</literal>, so wäre
1486       folgender Befehl auszuführen:</para>
1487
1488       <para><literal>mv users/.openoffice.org2
1489       users/.openoffice</literal></para>
1490
1491       <para>Dieses Verzeichnis, wie auch das komplette
1492       <literal>users</literal>-Verzeichnis, muss vom Webserver beschreibbar
1493       sein. Dieses wurde bereits erledigt (siehe <xref
1494       linkend="Manuelle-Installation-des-Programmpaketes" />), kann aber
1495       erneut überprüft werden, wenn die Konvertierung nach PDF
1496       fehlschlägt.</para>
1497     </sect1>
1498
1499     <sect1 id="config.eur">
1500       <title>Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
1501       EUR</title>
1502
1503       <sect2 id="config.eur.introduction"
1504              xreflabel="Einführung in die Konfiguration zur EUR">
1505         <title>Einführung</title>
1506
1507         <para>kivitendo besaß bis inklusive Version 2.6.3 einen
1508         Konfigurationsparameter namens <varname>eur</varname>, der sich in der
1509         Konfigurationsdatei <filename>config/lx_office.conf</filename>
1510         befand. Somit galt er für alle Mandanten, die in dieser Installation
1511         benutzt wurden.</para>
1512
1513         <para>Mit der nachfolgenden Version wurde der Parameter zum Einen in
1514         die Mandantendatenbank verschoben und dabei auch gleich in drei
1515         Einzelparameter aufgeteilt, mit denen sich das Verhalten genauer
1516         steuern lässt.</para>
1517       </sect2>
1518
1519       <sect2 id="config.eur.parameters"
1520              xreflabel="Konfigurationsparameter für EUR">
1521         <title>Konfigurationsparameter</title>
1522
1523         <para>Es gibt drei Parameter, die die Gewinnermittlungsart,
1524         Versteuerungsart und die Warenbuchungsmethode regeln:</para>
1525
1526         <variablelist>
1527           <varlistentry>
1528             <term><varname>profit_determination</varname></term>
1529
1530             <listitem>
1531               <para>Dieser Parameter legt die Berechnungsmethode für die
1532               Gewinnermittlung fest. Er enthält entweder
1533               <literal>balance</literal> für
1534               Betriebsvermögensvergleich/Bilanzierung oder
1535               <literal>income</literal> für die
1536               Einnahmen-Überschuss-Rechnung.</para>
1537             </listitem>
1538           </varlistentry>
1539
1540           <varlistentry>
1541             <term><varname>accounting_method</varname></term>
1542
1543             <listitem>
1544               <para>Dieser Parameter steuert die Buchungs- und
1545               Berechnungsmethoden für die Versteuerungsart. Er enthält
1546               entweder <literal>accrual</literal> für die Soll-Versteuerung
1547               oder <literal>cash</literal> für die Ist-Versteuerung.</para>
1548             </listitem>
1549           </varlistentry>
1550
1551           <varlistentry>
1552             <term><varname>inventory_system</varname></term>
1553
1554             <listitem>
1555               <para>Dieser Parameter legt die Warenbuchungsmethode fest. Er
1556               enthält entweder <literal>perpetual</literal> für die
1557               Bestandsmethode oder <literal>periodic</literal> für die
1558               Aufwandsmethode.</para>
1559             </listitem>
1560           </varlistentry>
1561         </variablelist>
1562
1563         <para>Zum Vergleich der Funktionalität bis und nach 2.6.3:
1564         <varname>eur</varname> = 1 bedeutete Einnahmen-Überschuss-Rechnung,
1565         Ist-Versteuerung und Aufwandsmethode. <varname>eur</varname> = 0
1566         bedeutete hingegen Bilanzierung, Soll-Versteuerung und
1567         Bestandsmethode.</para>
1568
1569         <para>Die Konfiguration "<varname>eur</varname>" unter
1570         <varname>[system]</varname> in der <link
1571         linkend="config.config-file">Konfigurationsdatei</link>
1572         <filename>config/kivitendo.conf</filename> wird nun nicht mehr
1573         benötigt und kann entfernt werden. Dies muss manuell geschehen.</para>
1574       </sect2>
1575
1576       <sect2 id="config.eur.setting-parameters">
1577         <title>Festlegen der Parameter</title>
1578
1579         <para>Beim Anlegen eines neuen Mandanten bzw. einer neuen Datenbank in
1580         der Admininstration können diese Optionen nun unabhängig voneinander
1581         eingestellt werden.</para>
1582
1583         <para>Beim Upgrade bestehender Mandanten wird eur ausgelesen und die
1584         Variablen werden so gesetzt, daß sich an der Funktionalität nichts
1585         ändert.</para>
1586
1587         <para>Die aktuelle Konfiguration wird unter Nummernkreise und
1588         Standardkonten unter dem neuen Punkt "Einstellungen" angezeigt
1589         (read-only). Eine spätere Änderung ist für einen bestehenden Mandanten
1590         nicht mehr möglich. Dies war auch vorher nicht möglich, bzw.
1591         vorhandene Daten wurden so belassen und haben damit die Ergebnisse
1592         verfälscht.</para>
1593       </sect2>
1594
1595       <sect2 id="config.eur.inventory-system-perpetual">
1596         <title>Bemerkungen zu Bestandsmethode</title>
1597
1598         <para>Die Bestandsmethode ist eigentlich eine sehr elegante Methode,
1599         funktioniert in kivitendo aber nur unter bestimmten Bedingungen:
1600         Voraussetzung ist, daß auch immer alle Einkaufsrechnungen gepflegt
1601         werden, und man beim Jahreswechsel nicht mit einer leeren Datenbank
1602         anfängt, da bei jedem Verkauf anhand der gesamten Rechnungshistorie
1603         der Einkaufswert der Ware nach dem FIFO-Prinzip aus den
1604         Einkaufsrechnungen berechnet wird.</para>
1605
1606         <para>Die Bestandsmethode kann vom Prinzip her also nur funktioneren,
1607         wenn man mit den Buchungen bei Null anfängt, und man kann auch nicht
1608         im laufenden Betrieb von der Aufwandsmethode zur Bestandsmethode
1609         wechseln.</para>
1610       </sect2>
1611
1612       <sect2 id="config.eur.knonw-issues">
1613         <title>Bekannte Probleme</title>
1614
1615         <para>Bei bestimmten Berichten kann man derzeit noch inviduell
1616         einstellen, ob man nach Ist- oder Sollversteuerung auswertet, und es
1617         werden im Code Variablen wie $accrual oder $cash gesetzt. Diese
1618         Codestellen wurden noch nicht angepasst, sondern nur die, wo bisher
1619         die Konfigurationsvariable
1620         <varname>$::lx_office_conf{system}-&gt;{eur}</varname> ausgewertet
1621         wurde.</para>
1622
1623         <para>Es fehlen Hilfetext beim Neuanlegen eines Mandanten, was die
1624         Optionen bewirken, z.B. mit zwei Standardfällen.</para>
1625       </sect2>
1626     </sect1>
1627
1628     <sect1 id="config.skr04-update-3804">
1629       <title>SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</title>
1630
1631       <sect2 id="config.skr04-update-3804.introduction">
1632         <title>Einführung</title>
1633
1634         <para>Die Umsatzsteuerumstellung auf 19% für SKR04 für die
1635         Steuerschlüssel "EU ohne USt-ID Nummer" ist erst 2010 erfolgt.
1636         kivitendo beinhaltet ein Upgradeskript, das das Konto 3804 automatisch
1637         erstellt und die Steuereinstellungen korrekt einstellt. Hat der
1638         Benutzer aber schon selber das Konto 3804 angelegt, oder gab es schon
1639         Buchungen im Zeitraum nach dem 01.01.2007 auf das Konto 3803, wird das
1640         Upgradeskript vorsichtshalber nicht ausgeführt, da der Benutzer sich
1641         vielleicht schon selbst geholfen hat und mit seinen Änderungen
1642         zufrieden ist. Die korrekten Einstellungen kann man aber auch per Hand
1643         ausführen. Nachfolgend werden die entsprechenden Schritte anhand von
1644         Screenshots dargestellt.</para>
1645
1646         <para>Für den Fall, daß Buchungen mit der Steuerschlüssel "EU ohne
1647         USt.-IdNr." nach dem 01.01.2007 erfolgt sind, ist davon auszugehen,
1648         dass diese mit dem alten Umsatzsteuersatz von 16% gebucht worden sind,
1649         und diese Buchungen sollten entsprechend kontrolliert werden.</para>
1650       </sect2>
1651
1652       <sect2 id="config.skr04-update-3804.create-chart">
1653         <title>Konto 3804 manuell anlegen</title>
1654
1655         <para>Die folgenden Schritte sind notwendig, um das Konto manuell
1656         anzulegen und zu konfigurieren. Zuerst wird in
1657         <guimenu>System</guimenu> -&gt;
1658         <guisubmenu>Kontenübersicht</guisubmenu> -&gt; <guimenuitem>Konto
1659         erfassen</guimenuitem> das Konto angelegt.</para>
1660
1661         <screenshot>
1662           <screeninfo>Konto 3804 erfassen</screeninfo>
1663
1664           <mediaobject>
1665             <imageobject>
1666               <imagedata fileref="images/skr04-update-3804/konto3804.png" />
1667             </imageobject>
1668           </mediaobject>
1669         </screenshot>
1670
1671         <para>
1672          Als Zweites muss Steuergruppe 13 für Konto 3803 angepasst werden. Dazu unter <guimenu>System</guimenu> -&gt;
1673          <guisubmenu>Steuern</guisubmenu> -&gt; <guimenuitem>Bearbeiten</guimenuitem> den Eintrag mit Steuerschlüssel 13 auswählen und ihn
1674          wie im folgenden Screenshot angezeigt anpassen.
1675         </para>
1676
1677         <screenshot>
1678           <screeninfo>Steuerschlüssel 13 für 3803 (16%) anpassen</screeninfo>
1679
1680           <mediaobject>
1681             <imageobject>
1682               <imagedata fileref="images/skr04-update-3804/steuer3803.png" />
1683             </imageobject>
1684           </mediaobject>
1685         </screenshot>
1686
1687         <para>
1688          Als Drittes wird ein neuer Eintrag mit Steuerschlüssel 13 für Konto 3804 (19%) angelegt. Dazu unter <guimenu>System</guimenu> -&gt;
1689          <guisubmenu>Steuern</guisubmenu> -&gt; <guimenuitem>Erfassen</guimenuitem> auswählen und die Werte aus dem Screenshot übernehmen.
1690         </para>
1691
1692         <screenshot>
1693           <screeninfo>Steuerschlüssel 13 für 3804 (19%) anlegen</screeninfo>
1694
1695           <mediaobject>
1696             <imageobject>
1697               <imagedata fileref="images/skr04-update-3804/steuer3804.png" />
1698             </imageobject>
1699           </mediaobject>
1700         </screenshot>
1701
1702         <para>
1703          Als Nächstes sind alle Konten anzupassen, die als Steuerautomatikkonto die 3803 haben, sodass sie ab dem 1.1.2007 auch
1704          Steuerautomatik auf 3804 bekommen. Dies betrifft in der Standardkonfiguration die Konten 4315 und 4726. Als Beispiel für 4315
1705          müssen Sie dazu unter <guimenu>System</guimenu> -&gt; <guisubmenu>Kontenübersicht</guisubmenu> -&gt; <guimenuitem>Konten
1706          anzeigen</guimenuitem> das Konto 4315 anklicken und die Einstellungen wie im Screenshot gezeigt vornehmen.
1707         </para>
1708
1709         <screenshot>
1710           <screeninfo>Konto 4315 anpassen</screeninfo>
1711
1712           <mediaobject>
1713             <imageobject>
1714               <imagedata fileref="images/skr04-update-3804/konto4315.png" />
1715             </imageobject>
1716           </mediaobject>
1717         </screenshot>
1718
1719         <para>
1720          Als Letztes sollte die Steuerliste unter <guimenu>System</guimenu> -&gt; <guisubmenu>Steuern</guisubmenu> -&gt;
1721          <guimenuitem>Bearbeiten</guimenuitem> kontrolliert werden. Zum Vergleich der Screenshot.
1722         </para>
1723
1724         <screenshot>
1725           <screeninfo>Steuerliste vergleichen</screeninfo>
1726
1727           <mediaobject>
1728             <imageobject>
1729               <imagedata fileref="images/skr04-update-3804/steuerliste.png" />
1730             </imageobject>
1731           </mediaobject>
1732         </screenshot>
1733       </sect2>
1734     </sect1>
1735
1736     <sect1 id="kivitendo-ERP-verwenden">
1737       <title>kivitendo ERP verwenden</title>
1738
1739       <para>Nach erfolgreicher Installation ist der Loginbildschirm unter
1740       folgender URL erreichbar:</para>
1741
1742       <para><ulink
1743       url="http://localhost/kivitendo-erp/login.pl">http://localhost/kivitendo-erp/login.pl</ulink></para>
1744
1745       <para>Die Administrationsseite erreichen Sie unter:</para>
1746
1747       <para><ulink
1748       url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
1749     </sect1>
1750   </chapter>
1751
1752   <chapter id="features" xreflabel="Features und Funktionen">
1753     <title>Features und Funktionen</title>
1754
1755     <sect1 id="features.periodic-invoices"
1756            xreflabel="Wiedekehrende Rechnungen">
1757       <title>Wiederkehrende Rechnungen</title>
1758
1759       <sect2 id="features.periodic-invoices.introduction"
1760              xreflabel="Einführung in wiederkehrende Rechnungen">
1761         <title>Einführung</title>
1762
1763         <para>Wiederkehrende Rechnungen werden als normale Aufträge definiert
1764         und konfiguriert, mit allen dazugehörigen Kunden- und Artikelangaben.
1765         Die konfigurierten Aufträge werden später automatisch in Rechnungen
1766         umgewandelt, so als ob man den Workflow benutzen würde, und auch die
1767         Auftragsnummer wird übernommen, sodass alle wiederkehrenden
1768         Rechnungen, die aus einem Auftrag erstellt wurden, später leicht
1769         wiederzufinden sind.</para>
1770       </sect2>
1771
1772       <sect2 id="features.periodic-invoices.configuration"
1773              xreflabel="Konfiguration von wiederkehrenden Rechnungen">
1774         <title>Konfiguration</title>
1775
1776         <para>Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren,
1777         findet sich beim Bearbeiten des Auftrags ein neuer Knopf
1778         "Konfigurieren", der ein neues Fenster öffnet, in dem man die nötigen
1779         Parameter einstellen kann. Hinter dem Knopf wird außerdem noch
1780         angezeigt, ob der Auftrag als wiederkehrende Rechnung konfiguriert ist
1781         oder nicht.</para>
1782
1783         <para>Folgende Parameter kann man konfigurieren:</para>
1784
1785         <variablelist>
1786           <varlistentry>
1787             <term>Status</term>
1788
1789             <listitem>
1790               <para>Bei aktiven Rechnungen wird automatisch eine Rechnung
1791               erstellt, wenn die Periodizität erreicht ist (z.B. Anfang eines
1792               neuen Monats).</para>
1793
1794               <para>Ist ein Auftrag nicht aktiv, so werden für ihn auch keine
1795               wiederkehrenden Rechnungen erzeugt. Stellt man nach längerer
1796               nicht-aktiver Zeit einen Auftrag wieder auf aktiv, wird beim
1797               nächsten Periodenwechsel für alle Perioden, seit der letzten
1798               aktiven Periode, jeweils eine Rechnung erstellt. Möchte man dies
1799               verhindern, muss man vorher das Startdatum neu setzen.</para>
1800
1801               <para>Für gekündigte Aufträge werden nie mehr Rechnungen
1802               erstellt. Man kann sich diese Aufträge aber gesondert in den
1803               Berichten anzeigen lassen.</para>
1804             </listitem>
1805           </varlistentry>
1806
1807           <varlistentry>
1808             <term>Periodizität</term>
1809
1810             <listitem>
1811               <para>Ob monatlich, quartalsweise oder jährlich auf neue
1812               Rechnungen überprüft werden soll. Für jede Periode seit dem
1813               Startdatum wird überprüft, ob für die Periode (beginnend immer
1814               mit dem ersten Tag der Periode) schon eine Rechnung erstellt
1815               wurde. Unter Umständen können bei einem Startdatum in der
1816               Vergangenheit gleich mehrere Rechnungen erstellt werden.</para>
1817             </listitem>
1818           </varlistentry>
1819
1820           <varlistentry>
1821             <term>Buchen auf</term>
1822
1823             <listitem>
1824               <para>Das Forderungskonto, in der Regel "Forderungen aus
1825               Lieferungen und Leistungen". Das Gegenkonto ergibt sich aus den
1826               Buchungsgruppen der betreffenden Waren.</para>
1827             </listitem>
1828           </varlistentry>
1829
1830           <varlistentry>
1831             <term>Startdatum</term>
1832
1833             <listitem>
1834               <para>ab welchem Datum auf Rechnungserstellung geprüft werden
1835               soll</para>
1836             </listitem>
1837           </varlistentry>
1838
1839           <varlistentry>
1840             <term>Enddatum</term>
1841
1842             <listitem>
1843               <para>ab wann keine Rechnungen mehr erstellt werden
1844               sollen</para>
1845             </listitem>
1846           </varlistentry>
1847
1848           <varlistentry>
1849             <term>Automatische Verlängerung um x Monate</term>
1850
1851             <listitem>
1852               <para>Sollen die wiederkehrenden Rechnungen bei Erreichen des
1853               eingetragenen Enddatums weiterhin erstellt werden, so kann man
1854               hier die Anzahl der Monate eingeben, um die das Enddatum
1855               automatisch nach hinten geschoben wird.</para>
1856             </listitem>
1857           </varlistentry>
1858
1859           <varlistentry>
1860             <term>Drucken</term>
1861
1862             <listitem>
1863               <para>Sind Drucker konfiguriert, so kann man sich die erstellten
1864               Rechnungen auch gleich ausdrucken lassen.</para>
1865             </listitem>
1866           </varlistentry>
1867         </variablelist>
1868
1869         <para>Nach Erstellung der Rechnungen kann eine E-Mail mit
1870         Informationen zu den erstellten Rechnungen verschickt werden.
1871         Konfiguriert wird dies in der <link
1872         linkend="config.config-file.sections-parameters">Konfigurationsdatei</link>
1873         <filename>config/kivitendo.conf</filename> im Abschnitt
1874         <varname>[periodic_invoices]</varname>.</para>
1875       </sect2>
1876
1877       <sect2 id="features.periodic-invoices.reports">
1878         <title>Auflisten</title>
1879
1880         <para>Unter Verkauf-&gt;Berichte-&gt;Aufträge finden sich zwei neue
1881         Checkboxen, "Wiederkehrende Rechnungen aktiv" und "Wiederkehrende
1882         Rechnungen inaktiv", mit denen man sich einen Überglick über die
1883         wiederkehrenden Rechnungen verschaffen kann.</para>
1884       </sect2>
1885
1886       <sect2 id="features.periodic-invoices.task-server">
1887         <title>Erzeugung der eigentlichen Rechnungen</title>
1888
1889         <para>Die zeitliche und periodische Überprüfung, ob eine
1890         wiederkehrende Rechnung automatisch erstellt werden soll, geschieht
1891         durch den <link linkend="config.task-server">Taskserver</link>, einen
1892         externen Dienst, der automatisch beim Start des Servers gestartet
1893         werden sollte.</para>
1894       </sect2>
1895
1896       <sect2 id="features.periodic-invoices.create-for-current-month">
1897         <title>Erste Rechnung für aktuellen Monat erstellen</title>
1898
1899         <para>Will man im laufenden Monat eine monatlich wiederkehrende
1900         Rechnung inkl. des laufenden Monats starten, stellt man das Startdatum
1901         auf den Monatsanfang und wartet ein paar Minuten, bis der Taskserver
1902         den neu konfigurieren Auftrag erkennt und daraus eine Rechnung
1903         generiert hat. Alternativ setzt man das Startdatum auf den
1904         Monatsersten des Folgemonats und erstellt die erste Rechnung direkt
1905         manuell über den Workflow.</para>
1906       </sect2>
1907     </sect1>
1908
1909     <sect1 id="dokumentenvorlagen-und-variablen">
1910       <title>Dokumentenvorlagen und verfügbare Variablen</title>
1911
1912       <sect2 id="dokumentenvorlagen-und-variablen.einführung">
1913         <title>Einführung</title>
1914
1915         <para>Dies ist eine Auflistung der Standard-Dokumentenvorlagen und
1916         aller zur Bearbeitung verfügbaren Variablen. Eine Variable wird in
1917         einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form
1918         <function>&lt;%variablenname%&gt;</function> verwendet wird. Für
1919         LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
1920         (siehe <xref
1921         linkend="dokumentenvorlagen-und-variablen.tag-style" />).</para>
1922
1923         <para>Früher wurde hier nur über LaTeX gesprochen. Inzwischen
1924         unterstützt kivitendo aber auch OpenDocument-Vorlagen. Sofern es nicht
1925         ausdrücklich eingeschränkt wird, gilt das im Folgenden gesagte für
1926         alle Vorlagenarten.</para>
1927
1928         <para>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
1929         verfügbar als hier aufgelistet werden. Die meisten davon können
1930         allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
1931         werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann
1932         diese wie folgt erhalten werden:</para>
1933
1934         <itemizedlist>
1935           <listitem>
1936             <para><filename>SL/Form.pm</filename> öffnen und am Anfang die
1937             Zeile "<command>use Data::Dumper;</command>" einfügen.</para>
1938           </listitem>
1939
1940           <listitem>
1941             <para>In <filename>Form.pm</filename> die Funktion
1942             <function>parse_template</function> suchen und hier die Zeile
1943             <command>print(STDERR Dumper($self));</command> einfügen.</para>
1944           </listitem>
1945
1946           <listitem>
1947             <para>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
1948             ein PDF für eine Rechnung erzeugen.</para>
1949           </listitem>
1950
1951           <listitem>
1952             <para>Im <filename>error.log</filename> Apache steht die Ausgabe
1953             der Variablen <varname>$self</varname> in der Form <varname>'key'
1954             =&gt; 'value',</varname>. Alle <varname>key</varname>s sind
1955             verfügbar.</para>
1956           </listitem>
1957         </itemizedlist>
1958       </sect2>
1959
1960       <sect2 id="dokumentenvorlagen-und-variablen.variablen-ausgeben">
1961         <title>Variablen ausgeben</title>
1962
1963         <para>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
1964         Tags geschrieben werden, also z.B.
1965         <varname>&lt;%variablenname%&gt;</varname>.</para>
1966
1967         <para>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
1968         die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
1969         <varname>&lt;%variablenname FLAG1 FLAG2%&gt;</varname>. Momentan
1970         werden die folgenden Flags unterstützt:</para>
1971
1972         <itemizedlist>
1973           <listitem>
1974             <para><option>NOFORMAT</option> gilt nur für Zahlenwerte und gibt
1975             den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
1976             mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
1977             damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</para>
1978           </listitem>
1979
1980           <listitem>
1981             <para><option>NOESCAPE</option> unterdrückt das Escapen von
1982             Sonderzeichen für die Vorlagensprache. Wenn also in einer
1983             Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
1984             auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
1985             ist dieses Flag sinnvoll.</para>
1986           </listitem>
1987         </itemizedlist>
1988
1989         <para>Beispiel:</para>
1990
1991         <programlisting>&lt;%quototal NOFORMAT%&gt;</programlisting>
1992       </sect2>
1993
1994       <sect2 id="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">
1995         <title>Verwendung in Druckbefehlen</title>
1996
1997         <para>In der Admininstration können Drucker definiert werden. Auch im
1998         dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
1999         und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
2000         den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
2001         <function>`...`</function> nicht zu unerwünschtem Verhalten
2002         führen.</para>
2003
2004         <para>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
2005         für das die Telefonnummer eines Ansprechpartners als Teil der
2006         Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
2007         z.B. wie folgt aussehen:</para>
2008
2009         <programlisting>send_fax --number &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</programlisting>
2010       </sect2>
2011
2012       <sect2 id="dokumentenvorlagen-und-variablen.tag-style"
2013              xreflabel="Anfang und Ende der Tags verändern">
2014         <title>Anfang und Ende der Tags verändern</title>
2015
2016         <para>Der Standardstil für Tags sieht vor, dass ein Tag mit dem
2017         Kleinerzeichen und einem Prozentzeichen beginnt und mit dem
2018         Prozentzeichen und dem Größerzeichen endet, beispielsweise
2019         <function>&lt;%customer%&gt;</function>. Da diese Form aber z.B. in
2020         LaTeX zu Problemen führen kann, weil das Prozentzeichen dort
2021         Kommentare einleitet, kann pro HTML- oder LaTeX-Dokumentenvorlage der
2022         Stil umgestellt werden.</para>
2023
2024         <para>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
2025         Format gültigen Kommentarzeichen anfangen, dann
2026         <function>config:</function> enthalten, die entsprechende Option
2027         setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
2028         enden. Beispiel für LaTeX:</para>
2029
2030         <programlisting>% config: tag-style=($ $)</programlisting>
2031
2032         <para>Dies würde kivitendo dazu veranlassen, Variablen zu ersetzen,
2033         wenn sie wie folgt aussehen: <function>($customer$)</function>. Das
2034         äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</para>
2035
2036         <programlisting>&lt;!-- config: tag-style=($ $) --&gt;</programlisting>
2037       </sect2>
2038
2039       <sect2 id="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">
2040         <title>Zuordnung von den Dateinamen zu den Funktionen</title>
2041
2042         <para>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
2043         welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
2044         "<filename>.ext</filename>" geeignet zu ersetzen:
2045         "<filename>.tex</filename>" für LaTeX-Vorlagen und
2046         "<filename>.odt</filename>" für OpenDocument-Vorlagen.</para>
2047
2048         <variablelist>
2049           <varlistentry>
2050             <term><filename>bin_list.ext</filename></term>
2051
2052             <listitem>
2053               <para>Lagerliste</para>
2054             </listitem>
2055           </varlistentry>
2056
2057           <varlistentry>
2058             <term><filename>check.ext</filename></term>
2059
2060             <listitem>
2061               <para>?</para>
2062             </listitem>
2063           </varlistentry>
2064
2065           <varlistentry>
2066             <term><filename>invoice.ext</filename></term>
2067
2068             <listitem>
2069               <para>Rechnung</para>
2070             </listitem>
2071           </varlistentry>
2072
2073           <varlistentry>
2074             <term><filename>packing_list.ext</filename></term>
2075
2076             <listitem>
2077               <para>Packliste</para>
2078             </listitem>
2079           </varlistentry>
2080
2081           <varlistentry>
2082             <term><filename>pick_list.ext</filename></term>
2083
2084             <listitem>
2085               <para>Sammelliste</para>
2086             </listitem>
2087           </varlistentry>
2088
2089           <varlistentry>
2090             <term><filename>purchase_delivery_order.ext</filename></term>
2091
2092             <listitem>
2093               <para>Lieferschein (Einkauf)</para>
2094             </listitem>
2095           </varlistentry>
2096
2097           <varlistentry>
2098             <term><filename>purcharse_order.ext</filename></term>
2099
2100             <listitem>
2101               <para>Bestellung an Lieferanten</para>
2102             </listitem>
2103           </varlistentry>
2104
2105           <varlistentry>
2106             <term><filename>request_quotation.ext</filename></term>
2107
2108             <listitem>
2109               <para>Anfrage an Lieferanten</para>
2110             </listitem>
2111           </varlistentry>
2112
2113           <varlistentry>
2114             <term><filename>sales_delivery_order.ext</filename></term>
2115
2116             <listitem>
2117               <para>Lieferschein (Verkauf)</para>
2118             </listitem>
2119           </varlistentry>
2120
2121           <varlistentry>
2122             <term><filename>sales_order.ext</filename></term>
2123
2124             <listitem>
2125               <para>Bestellung</para>
2126             </listitem>
2127           </varlistentry>
2128
2129           <varlistentry>
2130             <term><filename>sales_quotation.ext</filename></term>
2131
2132             <listitem>
2133               <para>Angebot an Kunden</para>
2134             </listitem>
2135           </varlistentry>
2136
2137           <varlistentry>
2138             <term><filename>zahlungserinnerung.ext</filename></term>
2139
2140             <listitem>
2141               <para>Mahnung (Dateiname im Programm konfigurierbar)</para>
2142             </listitem>
2143           </varlistentry>
2144
2145           <varlistentry>
2146             <term><filename>zahlungserinnerung_invoice.ext</filename></term>
2147
2148             <listitem>
2149               <para>Rechnung über Mahngebühren (Dateiname im Programm
2150               konfigurierbar)</para>
2151             </listitem>
2152           </varlistentry>
2153         </variablelist>
2154       </sect2>
2155
2156       <sect2 id="dokumentenvorlagen-und-variablen.dateinamen-erweitert">
2157         <title>Sprache, Drucker und E-Mail</title>
2158
2159         <para>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
2160         eingearbeitet. So wird aus der Vorlage
2161         <filename>sales_order.ext</filename> bei Sprache
2162         <function>de</function> und Druckerkürzel <function>lpr2</function>
2163         der Vorlagenname <filename>sales_order_de_lpr2.ext</filename>.
2164         Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
2165         bekommen dann noch das Kürzel <filename>_email</filename>, der
2166         vollständige Vorlagenname wäre dann
2167         <filename>sales_order_email_de_lpr2.ext</filename>. In allen Fällen
2168         kann eine Standarddatei <filename>default.ext</filename> hinterlegt
2169         werden. Diese wird verwendet, wenn keine der anderen Varianten
2170         gefunden wird.</para>
2171
2172         <para>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
2173         der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
2174         verschickt wird, ist:</para>
2175
2176         <orderedlist>
2177           <listitem>
2178             <para><filename>sales_order_email_de_lpr2.tex</filename></para>
2179           </listitem>
2180
2181           <listitem>
2182             <para><filename>sales_order_de_lpr2.tex</filename></para>
2183           </listitem>
2184
2185           <listitem>
2186             <para><filename>sales_order.tex</filename></para>
2187           </listitem>
2188
2189           <listitem>
2190             <para><filename>default.tex</filename></para>
2191           </listitem>
2192         </orderedlist>
2193
2194         <para>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
2195         Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
2196         siehe dazu <xref
2197         linkend="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta" />.</para>
2198       </sect2>
2199
2200       <sect2 id="dokumentenvorlagen-und-variablen.allgemeine-variablen">
2201         <title>Allgemeine Variablen, die in allen Vorlagen vorhanden
2202         sind</title>
2203
2204         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"
2205                xreflabel="Metainformationen zur angeforderten Vorlage">
2206           <title>Metainformationen zur angeforderten Vorlage</title>
2207
2208           <para>Diese Variablen liefern Informationen darüber welche Variante
2209           einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
2210           Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
2211           Formulare einbinden möchten.</para>
2212
2213           <variablelist>
2214             <varlistentry>
2215               <term><varname>template_meta.formname</varname></term>
2216
2217               <listitem>
2218                 <para>Basisname der Vorlage. Identisch mit der <link
2219                 linkend="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">Zurordnung
2220                 zu den Dateinamen</link> ohne die Erweiterung. Ein
2221                 Verkaufsauftrag enthält hier
2222                 <constant>sales_order</constant>.</para>
2223               </listitem>
2224             </varlistentry>
2225
2226             <varlistentry>
2227               <term><varname>template_meta.language.description</varname></term>
2228
2229               <listitem>
2230                 <para>Beschreibung der verwendeten Sprache</para>
2231               </listitem>
2232             </varlistentry>
2233
2234             <varlistentry>
2235               <term><varname>template_meta.language.template_code</varname></term>
2236
2237               <listitem>
2238                 <para>Vorlagenürzel der verwendeten Sprache, identisch mit dem
2239                 Kürzel das im Dateinamen verwendetet wird.</para>
2240               </listitem>
2241             </varlistentry>
2242
2243             <varlistentry>
2244               <term><varname>template_meta.language.output_numberformat</varname></term>
2245
2246               <listitem>
2247                 <para>Zahlenformat der verwendeten Sprache in der Form
2248                 "<constant>1.000,00</constant>". Experimentell! Nur
2249                 interessant für Vorlagen die mit unformatierten Werten
2250                 arbeiten.</para>
2251               </listitem>
2252             </varlistentry>
2253
2254             <varlistentry>
2255               <term><varname>template_meta.language.output_dateformat</varname></term>
2256
2257               <listitem>
2258                 <para>Datumsformat der verwendeten Sprache in der Form
2259                 "<constant>dd.mm.yyyy</constant>". Experimentell! Nur
2260                 interessant für Vorlagen die mit unformatierten Werten
2261                 arbeiten.</para>
2262               </listitem>
2263             </varlistentry>
2264
2265             <varlistentry>
2266               <term><varname>template_meta.format</varname></term>
2267
2268               <listitem>
2269                 <para>Das angeforderte Format. Kann im Moment die Werte
2270                 <constant>pdf</constant>, <constant>postscript</constant>,
2271                 <constant>html</constant>, <constant>opendocument</constant>,
2272                 <constant>opendocument_pdf</constant> und
2273                 <constant>excel</constant> enthalten.</para>
2274               </listitem>
2275             </varlistentry>
2276
2277             <varlistentry>
2278               <term><varname>template_meta.extension</varname></term>
2279
2280               <listitem>
2281                 <para>Dateierweiterung, wie im Dateinamen. Wird aus
2282                 <constant>format</constant> entschieden.</para>
2283               </listitem>
2284             </varlistentry>
2285
2286             <varlistentry>
2287               <term><varname>template_meta.media</varname></term>
2288
2289               <listitem>
2290                 <para>Ausgabemedium. Kann zur Zeit die Werte
2291                 <constant>screen</constant> für Bildschirm,
2292                 <constant>email</constant> für E-Mmail (triggert das
2293                 <constant>_email</constant> Kürzel im Dateinamen),
2294                 <constant>printer</constant> für Drucker, und
2295                 <constant>queue</constant> für Warteschlange enthalten.</para>
2296               </listitem>
2297             </varlistentry>
2298
2299             <varlistentry>
2300               <term><varname>template_meta.printer.description</varname></term>
2301
2302               <listitem>
2303                 <para>Beschreibung des ausgewählten Druckers</para>
2304               </listitem>
2305             </varlistentry>
2306
2307             <varlistentry>
2308               <term><varname>template_meta.printer.template_code</varname></term>
2309
2310               <listitem>
2311                 <para>Vorlagenürzel des ausgewählten Druckers, identisch mit
2312                 dem Kürzel das im Dateinamen verwendetet wird.</para>
2313               </listitem>
2314             </varlistentry>
2315
2316             <varlistentry>
2317               <term><varname>template_meta.tmpfile</varname></term>
2318
2319               <listitem>
2320                 <para>Datei-Prefix für temporäre Dateien.</para>
2321               </listitem>
2322             </varlistentry>
2323           </variablelist>
2324         </sect3>
2325
2326         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.kunden-lieferanten">
2327           <title>Stammdaten von Kunden und Lieferanten</title>
2328
2329           <variablelist>
2330             <varlistentry>
2331               <term><varname>account_number</varname></term>
2332
2333               <listitem>
2334                 <para>Kontonummer</para>
2335               </listitem>
2336             </varlistentry>
2337
2338             <varlistentry>
2339               <term><varname>bank</varname></term>
2340
2341               <listitem>
2342                 <para>Name der Bank</para>
2343               </listitem>
2344             </varlistentry>
2345
2346             <varlistentry>
2347               <term><varname>bank_code</varname></term>
2348
2349               <listitem>
2350                 <para>Bankleitzahl</para>
2351               </listitem>
2352             </varlistentry>
2353
2354             <varlistentry>
2355               <term><varname>bic</varname></term>
2356
2357               <listitem>
2358                 <para>Bank-Identifikations-Code (Bank Identifier Code,
2359                 BIC)</para>
2360               </listitem>
2361             </varlistentry>
2362
2363             <varlistentry>
2364               <term><varname>business</varname></term>
2365
2366               <listitem>
2367                 <para>Kunden-/Lieferantentyp</para>
2368               </listitem>
2369             </varlistentry>
2370
2371             <varlistentry>
2372               <term><varname>city</varname></term>
2373
2374               <listitem>
2375                 <para>Stadt</para>
2376               </listitem>
2377             </varlistentry>
2378
2379             <varlistentry>
2380               <term><varname>contact</varname></term>
2381
2382               <listitem>
2383                 <para>Kontakt</para>
2384               </listitem>
2385             </varlistentry>
2386
2387             <varlistentry>
2388               <term><varname>country</varname></term>
2389
2390               <listitem>
2391                 <para>Land</para>
2392               </listitem>
2393             </varlistentry>
2394
2395             <varlistentry>
2396               <term><varname>cp_email</varname></term>
2397
2398               <listitem>
2399                 <para>Email des Ansprechpartners</para>
2400               </listitem>
2401             </varlistentry>
2402
2403             <varlistentry>
2404               <term><varname>cp_givenname</varname></term>
2405
2406               <listitem>
2407                 <para>Vorname des Ansprechpartners</para>
2408               </listitem>
2409             </varlistentry>
2410
2411             <varlistentry>
2412               <term><varname>cp_greeting</varname></term>
2413
2414               <listitem>
2415                 <para>Anrede des Ansprechpartners</para>
2416               </listitem>
2417             </varlistentry>
2418
2419             <varlistentry>
2420               <term><varname>cp_name</varname></term>
2421
2422               <listitem>
2423                 <para>Name des Ansprechpartners</para>
2424               </listitem>
2425             </varlistentry>
2426
2427             <varlistentry>
2428               <term><varname>cp_phone1</varname></term>
2429
2430               <listitem>
2431                 <para>Telefonnummer 1 des Ansprechpartners</para>
2432               </listitem>
2433             </varlistentry>
2434
2435             <varlistentry>
2436               <term><varname>cp_phone2</varname></term>
2437
2438               <listitem>
2439                 <para>Telefonnummer 2 des Ansprechpartners</para>
2440               </listitem>
2441             </varlistentry>
2442
2443             <varlistentry>
2444               <term><varname>cp_title</varname></term>
2445
2446               <listitem>
2447                 <para>Titel des Ansprechpartners</para>
2448               </listitem>
2449             </varlistentry>
2450
2451             <varlistentry>
2452               <term><varname>creditlimit</varname></term>
2453
2454               <listitem>
2455                 <para>Kreditlimit</para>
2456               </listitem>
2457             </varlistentry>
2458
2459             <varlistentry>
2460               <term><varname>customeremail</varname></term>
2461
2462               <listitem>
2463                 <para>Email des Kunden; nur für Kunden</para>
2464               </listitem>
2465             </varlistentry>
2466
2467             <varlistentry>
2468               <term><varname>customerfax</varname></term>
2469
2470               <listitem>
2471                 <para>Faxnummer des Kunden; nur für Kunden</para>
2472               </listitem>
2473             </varlistentry>
2474
2475             <varlistentry>
2476               <term><varname>customernotes</varname></term>
2477
2478               <listitem>
2479                 <para>Bemerkungen beim Kunden; nur für Kunden</para>
2480               </listitem>
2481             </varlistentry>
2482
2483             <varlistentry>
2484               <term><varname>customernumber</varname></term>
2485
2486               <listitem>
2487                 <para>Kundennummer; nur für Kunden</para>
2488               </listitem>
2489             </varlistentry>
2490
2491             <varlistentry>
2492               <term><varname>customerphone</varname></term>
2493
2494               <listitem>
2495                 <para>Telefonnummer des Kunden; nur für Kunden</para>
2496               </listitem>
2497             </varlistentry>
2498
2499             <varlistentry>
2500               <term><varname>discount</varname></term>
2501
2502               <listitem>
2503                 <para>Rabatt</para>
2504               </listitem>
2505             </varlistentry>
2506
2507             <varlistentry>
2508               <term><varname>email</varname></term>
2509
2510               <listitem>
2511                 <para>Emailadresse</para>
2512               </listitem>
2513             </varlistentry>
2514
2515             <varlistentry>
2516               <term><varname>fax</varname></term>
2517
2518               <listitem>
2519                 <para>Faxnummer</para>
2520               </listitem>
2521             </varlistentry>
2522
2523             <varlistentry>
2524               <term><varname>homepage</varname></term>
2525
2526               <listitem>
2527                 <para>Homepage</para>
2528               </listitem>
2529             </varlistentry>
2530
2531             <varlistentry>
2532               <term><varname>iban</varname></term>
2533
2534               <listitem>
2535                 <para>Internationale Kontonummer (International Bank Account
2536                 Number, IBAN)</para>
2537               </listitem>
2538             </varlistentry>
2539
2540             <varlistentry>
2541               <term><varname>language</varname></term>
2542
2543               <listitem>
2544                 <para>Sprache</para>
2545               </listitem>
2546             </varlistentry>
2547
2548             <varlistentry>
2549               <term><varname>name</varname></term>
2550
2551               <listitem>
2552                 <para>Firmenname</para>
2553               </listitem>
2554             </varlistentry>
2555
2556             <varlistentry>
2557               <term><varname>payment_description</varname></term>
2558
2559               <listitem>
2560                 <para>Name der Zahlart</para>
2561               </listitem>
2562             </varlistentry>
2563
2564             <varlistentry>
2565               <term><varname>payment_terms</varname></term>
2566
2567               <listitem>
2568                 <para>Zahlungskonditionen</para>
2569               </listitem>
2570             </varlistentry>
2571
2572             <varlistentry>
2573               <term><varname>phone</varname></term>
2574
2575               <listitem>
2576                 <para>Telefonnummer</para>
2577               </listitem>
2578             </varlistentry>
2579
2580             <varlistentry>
2581               <term><varname>shiptocity</varname></term>
2582
2583               <listitem>
2584                 <para>Stadt (Lieferadresse) <link
2585                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2586               </listitem>
2587             </varlistentry>
2588
2589             <varlistentry>
2590               <term><varname>shiptocontact</varname></term>
2591
2592               <listitem>
2593                 <para>Kontakt (Lieferadresse) <link
2594                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2595               </listitem>
2596             </varlistentry>
2597
2598             <varlistentry>
2599               <term><varname>shiptocountry</varname></term>
2600
2601               <listitem>
2602                 <para>Land (Lieferadresse) <link
2603                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2604               </listitem>
2605             </varlistentry>
2606
2607             <varlistentry>
2608               <term><varname>shiptodepartment1</varname></term>
2609
2610               <listitem>
2611                 <para>Abteilung 1 (Lieferadresse) <link
2612                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2613               </listitem>
2614             </varlistentry>
2615
2616             <varlistentry>
2617               <term><varname>shiptodepartment2</varname></term>
2618
2619               <listitem>
2620                 <para>Abteilung 2 (Lieferadresse) <link
2621                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2622               </listitem>
2623             </varlistentry>
2624
2625             <varlistentry>
2626               <term><varname>shiptoemail</varname></term>
2627
2628               <listitem>
2629                 <para>Email (Lieferadresse) <link
2630                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2631               </listitem>
2632             </varlistentry>
2633
2634             <varlistentry>
2635               <term><varname>shiptofax</varname></term>
2636
2637               <listitem>
2638                 <para>Fax (Lieferadresse) <link
2639                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2640               </listitem>
2641             </varlistentry>
2642
2643             <varlistentry>
2644               <term><varname>shiptoname</varname></term>
2645
2646               <listitem>
2647                 <para>Firmenname (Lieferadresse) <link
2648                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2649               </listitem>
2650             </varlistentry>
2651
2652             <varlistentry>
2653               <term><varname>shiptophone</varname></term>
2654
2655               <listitem>
2656                 <para>Telefonnummer (Lieferadresse) <link
2657                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2658               </listitem>
2659             </varlistentry>
2660
2661             <varlistentry>
2662               <term><varname>shiptostreet</varname></term>
2663
2664               <listitem>
2665                 <para>Straße und Hausnummer (Lieferadresse) <link
2666                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2667               </listitem>
2668             </varlistentry>
2669
2670             <varlistentry>
2671               <term><varname>shiptozipcode</varname></term>
2672
2673               <listitem>
2674                 <para>Postleitzahl (Lieferadresse) <link
2675                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2676               </listitem>
2677             </varlistentry>
2678
2679             <varlistentry>
2680               <term><varname>street</varname></term>
2681
2682               <listitem>
2683                 <para>Straße und Hausnummer</para>
2684               </listitem>
2685             </varlistentry>
2686
2687             <varlistentry>
2688               <term><varname>taxnumber</varname></term>
2689
2690               <listitem>
2691                 <para>Steuernummer</para>
2692               </listitem>
2693             </varlistentry>
2694
2695             <varlistentry>
2696               <term><varname>ustid</varname></term>
2697
2698               <listitem>
2699                 <para>Umsatzsteuer-Identifikationsnummer</para>
2700               </listitem>
2701             </varlistentry>
2702
2703             <varlistentry>
2704               <term><varname>vendoremail</varname></term>
2705
2706               <listitem>
2707                 <para>Email des Lieferanten; nur für Lieferanten</para>
2708               </listitem>
2709             </varlistentry>
2710
2711             <varlistentry>
2712               <term><varname>vendorfax</varname></term>
2713
2714               <listitem>
2715                 <para>Faxnummer des Lieferanten; nur für Lieferanten</para>
2716               </listitem>
2717             </varlistentry>
2718
2719             <varlistentry>
2720               <term><varname>vendornotes</varname></term>
2721
2722               <listitem>
2723                 <para>Bemerkungen beim Lieferanten; nur für Lieferanten</para>
2724               </listitem>
2725             </varlistentry>
2726
2727             <varlistentry>
2728               <term><varname>vendornumber</varname></term>
2729
2730               <listitem>
2731                 <para>Lieferantennummer; nur für Lieferanten</para>
2732               </listitem>
2733             </varlistentry>
2734
2735             <varlistentry>
2736               <term><varname>vendorphone</varname></term>
2737
2738               <listitem>
2739                 <para>Telefonnummer des Lieferanten; nur für
2740                 Lieferanten</para>
2741               </listitem>
2742             </varlistentry>
2743
2744             <varlistentry>
2745               <term><varname>zipcode</varname></term>
2746
2747               <listitem>
2748                 <para>Postleitzahl</para>
2749               </listitem>
2750             </varlistentry>
2751           </variablelist>
2752
2753           <note id="dokumentenvorlagen-und-variablen.anmerkung-shipto">
2754             <para>Anmerkung: Sind die <varname>shipto*</varname>-Felder in den
2755             Stammdaten nicht eingetragen, so haben die Variablen
2756             <varname>shipto*</varname> den gleichen Wert wie die die
2757             entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich
2758             einige <varname>shipto*</varname>-Variablen so nicht in den
2759             Stammdaten wiederfinden sondern schlicht Kopien der
2760             Lieferdatenvariablen sind (z.B.
2761             <varname>shiptocontact</varname>).</para>
2762           </note>
2763         </sect3>
2764
2765         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-bearbeiter">
2766           <title>Informationen über den Bearbeiter</title>
2767
2768           <variablelist>
2769             <varlistentry>
2770               <term><varname>employee_address</varname></term>
2771
2772               <listitem>
2773                 <para>Adressfeld</para>
2774               </listitem>
2775             </varlistentry>
2776
2777             <varlistentry>
2778               <term><varname>employee_businessnumber</varname></term>
2779
2780               <listitem>
2781                 <para>Firmennummer</para>
2782               </listitem>
2783             </varlistentry>
2784
2785             <varlistentry>
2786               <term><varname>employee_company</varname></term>
2787
2788               <listitem>
2789                 <para>Firmenname</para>
2790               </listitem>
2791             </varlistentry>
2792
2793             <varlistentry>
2794               <term><varname>employee_co_ustid</varname></term>
2795
2796               <listitem>
2797                 <para>Usatzsteuer-Identifikationsnummer</para>
2798               </listitem>
2799             </varlistentry>
2800
2801             <varlistentry>
2802               <term><varname>employee_duns</varname></term>
2803
2804               <listitem>
2805                 <para>DUNS-Nummer</para>
2806               </listitem>
2807             </varlistentry>
2808
2809             <varlistentry>
2810               <term><varname>employee_email</varname></term>
2811
2812               <listitem>
2813                 <para>Email</para>
2814               </listitem>
2815             </varlistentry>
2816
2817             <varlistentry>
2818               <term><varname>employee_fax</varname></term>
2819
2820               <listitem>
2821                 <para>Fax</para>
2822               </listitem>
2823             </varlistentry>
2824
2825             <varlistentry>
2826               <term><varname>employee_name</varname></term>
2827
2828               <listitem>
2829                 <para>voller Name</para>
2830               </listitem>
2831             </varlistentry>
2832
2833             <varlistentry>
2834               <term><varname>employee_signature</varname></term>
2835
2836               <listitem>
2837                 <para>Signatur</para>
2838               </listitem>
2839             </varlistentry>
2840
2841             <varlistentry>
2842               <term><varname>employee_taxnumber</varname></term>
2843
2844               <listitem>
2845                 <para>Steuernummer</para>
2846               </listitem>
2847             </varlistentry>
2848
2849             <varlistentry>
2850               <term><varname>employee_tel</varname></term>
2851
2852               <listitem>
2853                 <para>Telefonnummer</para>
2854               </listitem>
2855             </varlistentry>
2856           </variablelist>
2857         </sect3>
2858
2859         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-verkaeufer">
2860           <title>Informationen über den Bearbeiter</title>
2861
2862           <variablelist>
2863             <varlistentry>
2864               <term><varname>salesman_address</varname></term>
2865
2866               <listitem>
2867                 <para>Adressfeld</para>
2868               </listitem>
2869             </varlistentry>
2870
2871             <varlistentry>
2872               <term><varname>salesman_businessnumber</varname></term>
2873
2874               <listitem>
2875                 <para>Firmennummer</para>
2876               </listitem>
2877             </varlistentry>
2878
2879             <varlistentry>
2880               <term><varname>salesman_company</varname></term>
2881
2882               <listitem>
2883                 <para>Firmenname</para>
2884               </listitem>
2885             </varlistentry>
2886
2887             <varlistentry>
2888               <term><varname>salesman_co_ustid</varname></term>
2889
2890               <listitem>
2891                 <para>Usatzsteuer-Identifikationsnummer</para>
2892               </listitem>
2893             </varlistentry>
2894
2895             <varlistentry>
2896               <term><varname>salesman_duns</varname></term>
2897
2898               <listitem>
2899                 <para>DUNS-Nummer</para>
2900               </listitem>
2901             </varlistentry>
2902
2903             <varlistentry>
2904               <term><varname>salesman_email</varname></term>
2905
2906               <listitem>
2907                 <para>Email</para>
2908               </listitem>
2909             </varlistentry>
2910
2911             <varlistentry>
2912               <term><varname>salesman_fax</varname></term>
2913
2914               <listitem>
2915                 <para>Fax</para>
2916               </listitem>
2917             </varlistentry>
2918
2919             <varlistentry>
2920               <term><varname>salesman_name</varname></term>
2921
2922               <listitem>
2923                 <para>voller Name</para>
2924               </listitem>
2925             </varlistentry>
2926
2927             <varlistentry>
2928               <term><varname>salesman_signature</varname></term>
2929
2930               <listitem>
2931                 <para>Signatur</para>
2932               </listitem>
2933             </varlistentry>
2934
2935             <varlistentry>
2936               <term><varname>salesman_taxnumber</varname></term>
2937
2938               <listitem>
2939                 <para>Steuernummer</para>
2940               </listitem>
2941             </varlistentry>
2942
2943             <varlistentry>
2944               <term><varname>salesman_tel</varname></term>
2945
2946               <listitem>
2947                 <para>Telefonnummer</para>
2948               </listitem>
2949             </varlistentry>
2950           </variablelist>
2951         </sect3>
2952
2953         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-steuern">
2954           <title>Variablen für die einzelnen Steuern</title>
2955
2956           <variablelist>
2957             <varlistentry>
2958               <term><varname>tax</varname></term>
2959
2960               <listitem>
2961                 <para>Steuer</para>
2962               </listitem>
2963             </varlistentry>
2964
2965             <varlistentry>
2966               <term><varname>taxbase</varname></term>
2967
2968               <listitem>
2969                 <para>zu versteuernder Betrag</para>
2970               </listitem>
2971             </varlistentry>
2972
2973             <varlistentry>
2974               <term><varname>taxdescription</varname></term>
2975
2976               <listitem>
2977                 <para>Name der Steuer</para>
2978               </listitem>
2979             </varlistentry>
2980
2981             <varlistentry>
2982               <term><varname>taxrate</varname></term>
2983
2984               <listitem>
2985                 <para>Steuersatz</para>
2986               </listitem>
2987             </varlistentry>
2988           </variablelist>
2989         </sect3>
2990       </sect2>
2991
2992       <sect2 id="dokumentenvorlagen-und-variablen.invoice">
2993         <title>Variablen in Rechnungen</title>
2994
2995         <sect3 id="dokumentenvorlagen-und-variablen.invoice-allgemein">
2996           <title>Allgemeine Variablen</title>
2997
2998           <variablelist>
2999             <varlistentry>
3000               <term><varname>creditremaining</varname></term>
3001
3002               <listitem>
3003                 <para>Verbleibender Kredit</para>
3004               </listitem>
3005             </varlistentry>
3006
3007             <varlistentry>
3008               <term><varname>currency</varname></term>
3009
3010               <listitem>
3011                 <para>Währung</para>
3012               </listitem>
3013             </varlistentry>
3014
3015             <varlistentry>
3016               <term><varname>cusordnumber</varname></term>
3017
3018               <listitem>
3019                 <para>Bestellnummer beim Kunden</para>
3020               </listitem>
3021             </varlistentry>
3022
3023             <varlistentry>
3024               <term><varname>deliverydate</varname></term>
3025
3026               <listitem>
3027                 <para>Lieferdatum</para>
3028               </listitem>
3029             </varlistentry>
3030
3031             <varlistentry>
3032               <term><varname>duedate</varname></term>
3033
3034               <listitem>
3035                 <para>Fälligkeitsdatum</para>
3036               </listitem>
3037             </varlistentry>
3038
3039             <varlistentry>
3040               <term><varname>globalprojectnumber</varname></term>
3041
3042               <listitem>
3043                 <para>Projektnummer des ganzen Beleges</para>
3044               </listitem>
3045             </varlistentry>
3046
3047             <varlistentry>
3048               <term><varname>globalprojectdescription</varname></term>
3049
3050               <listitem>
3051                 <para>Projekbeschreibung des ganzen Beleges</para>
3052               </listitem>
3053             </varlistentry>
3054
3055             <varlistentry>
3056               <term><varname>intnotes</varname></term>
3057
3058               <listitem>
3059                 <para>Interne Bemerkungen</para>
3060               </listitem>
3061             </varlistentry>
3062
3063             <varlistentry>
3064               <term><varname>invdate</varname></term>
3065
3066               <listitem>
3067                 <para>Rechnungsdatum</para>
3068               </listitem>
3069             </varlistentry>
3070
3071             <varlistentry>
3072               <term><varname>invnumber</varname></term>
3073
3074               <listitem>
3075                 <para>Rechnungsnummer</para>
3076               </listitem>
3077             </varlistentry>
3078
3079             <varlistentry>
3080               <term><varname>invtotal</varname></term>
3081
3082               <listitem>
3083                 <para>gesamter Rechnungsbetrag</para>
3084               </listitem>
3085             </varlistentry>
3086
3087             <varlistentry>
3088               <term><varname>notes</varname></term>
3089
3090               <listitem>
3091                 <para>Bemerkungen der Rechnung</para>
3092               </listitem>
3093             </varlistentry>
3094
3095             <varlistentry>
3096               <term><varname>orddate</varname></term>
3097
3098               <listitem>
3099                 <para>Auftragsdatum</para>
3100               </listitem>
3101             </varlistentry>
3102
3103             <varlistentry>
3104               <term><varname>ordnumber</varname></term>
3105
3106               <listitem>
3107                 <para>Auftragsnummer, wenn die Rechnung aus einem Auftrag
3108                 erstellt wurde</para>
3109               </listitem>
3110             </varlistentry>
3111
3112             <varlistentry>
3113               <term><varname>payment_description</varname></term>
3114
3115               <listitem>
3116                 <para>Name der Zahlart</para>
3117               </listitem>
3118             </varlistentry>
3119
3120             <varlistentry>
3121               <term><varname>payment_terms</varname></term>
3122
3123               <listitem>
3124                 <para>Zahlungskonditionen</para>
3125               </listitem>
3126             </varlistentry>
3127
3128             <varlistentry>
3129               <term><varname>quodate</varname></term>
3130
3131               <listitem>
3132                 <para>Angebotsdatum</para>
3133               </listitem>
3134             </varlistentry>
3135
3136             <varlistentry>
3137               <term><varname>quonumber</varname></term>
3138
3139               <listitem>
3140                 <para>Angebotsnummer</para>
3141               </listitem>
3142             </varlistentry>
3143
3144             <varlistentry>
3145               <term><varname>shippingpoint</varname></term>
3146
3147               <listitem>
3148                 <para>Versandort</para>
3149               </listitem>
3150             </varlistentry>
3151
3152             <varlistentry>
3153               <term><varname>shipvia</varname></term>
3154
3155               <listitem>
3156                 <para>Transportmittel</para>
3157               </listitem>
3158             </varlistentry>
3159
3160             <varlistentry>
3161               <term><varname>subtotal</varname></term>
3162
3163               <listitem>
3164                 <para>Zwischensumme aller Posten ohne Steuern</para>
3165               </listitem>
3166             </varlistentry>
3167
3168             <varlistentry>
3169               <term><varname>total</varname></term>
3170
3171               <listitem>
3172                 <para>Restsumme der Rechnung (Summe abzüglich bereits
3173                 bezahlter Posten)</para>
3174               </listitem>
3175             </varlistentry>
3176
3177             <varlistentry>
3178               <term><varname>transaction_description</varname></term>
3179
3180               <listitem>
3181                 <para>Vorgangsbezeichnung</para>
3182               </listitem>
3183             </varlistentry>
3184
3185             <varlistentry>
3186               <term><varname>transdate</varname></term>
3187
3188               <listitem>
3189                 <para>Auftragsdatum wenn die Rechnung aus einem Auftrag
3190                 erstellt wurde</para>
3191               </listitem>
3192             </varlistentry>
3193           </variablelist>
3194         </sect3>
3195
3196         <sect3 id="dokumentenvorlagen-und-variablen.invoice-posten">
3197           <title>Variablen für jeden Posten auf der Rechnung</title>
3198
3199           <variablelist>
3200             <varlistentry>
3201               <term><varname>bin</varname></term>
3202
3203               <listitem>
3204                 <para>Stellage</para>
3205               </listitem>
3206             </varlistentry>
3207
3208             <varlistentry>
3209               <term><varname>description</varname></term>
3210
3211               <listitem>
3212                 <para>Artikelbeschreibung</para>
3213               </listitem>
3214             </varlistentry>
3215
3216             <varlistentry>
3217               <term><varname>discount</varname></term>
3218
3219               <listitem>
3220                 <para>Rabatt als Betrag</para>
3221               </listitem>
3222             </varlistentry>
3223
3224             <varlistentry>
3225               <term><varname>discount_sub</varname></term>
3226
3227               <listitem>
3228                 <para>Zwischensumme mit Rabatt</para>
3229               </listitem>
3230             </varlistentry>
3231
3232             <varlistentry>
3233               <term><varname>drawing</varname></term>
3234
3235               <listitem>
3236                 <para>Zeichnung</para>
3237               </listitem>
3238             </varlistentry>
3239
3240             <varlistentry>
3241               <term><varname>ean</varname></term>
3242
3243               <listitem>
3244                 <para>EAN-Code</para>
3245               </listitem>
3246             </varlistentry>
3247
3248             <varlistentry>
3249               <term><varname>image</varname></term>
3250
3251               <listitem>
3252                 <para>Grafik</para>
3253               </listitem>
3254             </varlistentry>
3255
3256             <varlistentry>
3257               <term><varname>linetotal</varname></term>
3258
3259               <listitem>
3260                 <para>Zeilensumme (Anzahl * Einzelpreis)</para>
3261               </listitem>
3262             </varlistentry>
3263
3264             <varlistentry>
3265               <term><varname>longdescription</varname></term>
3266
3267               <listitem>
3268                 <para>Langtext</para>
3269               </listitem>
3270             </varlistentry>
3271
3272             <varlistentry>
3273               <term><varname>microfiche</varname></term>
3274
3275               <listitem>
3276                 <para>Mikrofilm</para>
3277               </listitem>
3278             </varlistentry>
3279
3280             <varlistentry>
3281               <term><varname>netprice</varname></term>
3282
3283               <listitem>
3284                 <para>Nettopreis</para>
3285               </listitem>
3286             </varlistentry>
3287
3288             <varlistentry>
3289               <term><varname>nodiscount_linetotal</varname></term>
3290
3291               <listitem>
3292                 <para>Zeilensumme ohne Rabatt</para>
3293               </listitem>
3294             </varlistentry>
3295
3296             <varlistentry>
3297               <term><varname>nodiscount_sub</varname></term>
3298
3299               <listitem>
3300                 <para>Zwischensumme ohne Rabatt</para>
3301               </listitem>
3302             </varlistentry>
3303
3304             <varlistentry>
3305               <term><varname>number</varname></term>
3306
3307               <listitem>
3308                 <para>Artikelnummer</para>
3309               </listitem>
3310             </varlistentry>
3311
3312             <varlistentry>
3313               <term><varname>ordnumber_oe</varname></term>
3314
3315               <listitem>
3316                 <para>Auftragsnummer des Originalauftrags, wenn die Rechnung
3317                 aus einem Sammelauftrag erstellt wurde</para>
3318               </listitem>
3319             </varlistentry>
3320
3321             <varlistentry>
3322               <term><varname>p_discount</varname></term>
3323
3324               <listitem>
3325                 <para>Rabatt in Prozent</para>
3326               </listitem>
3327             </varlistentry>
3328
3329             <varlistentry>
3330               <term><varname>partnotes</varname></term>
3331
3332               <listitem>
3333                 <para>Die beim Artikel gespeicherten Bemerkungen</para>
3334               </listitem>
3335             </varlistentry>
3336
3337             <varlistentry>
3338               <term><varname>partsgroup</varname></term>
3339
3340               <listitem>
3341                 <para>Warengruppe</para>
3342               </listitem>
3343             </varlistentry>
3344
3345             <varlistentry>
3346               <term><varname>price_factor</varname></term>
3347
3348               <listitem>
3349                 <para>Der Preisfaktor als Zahl, sofern einer eingestellt
3350                 ist</para>
3351               </listitem>
3352             </varlistentry>
3353
3354             <varlistentry>
3355               <term><varname>price_factor_name</varname></term>
3356
3357               <listitem>
3358                 <para>Der Name des Preisfaktors, sofern einer eingestellt
3359                 ist</para>
3360               </listitem>
3361             </varlistentry>
3362
3363             <varlistentry>
3364               <term><varname>projectnumber</varname></term>
3365
3366               <listitem>
3367                 <para>Projektnummer</para>
3368               </listitem>
3369             </varlistentry>
3370
3371             <varlistentry>
3372               <term><varname>projectdescription</varname></term>
3373
3374               <listitem>
3375                 <para>Projektbeschreibung</para>
3376               </listitem>
3377             </varlistentry>
3378
3379             <varlistentry>
3380               <term><varname>qty</varname></term>
3381
3382               <listitem>
3383                 <para>Anzahl</para>
3384               </listitem>
3385             </varlistentry>
3386
3387             <varlistentry>
3388               <term><varname>reqdate</varname></term>
3389
3390               <listitem>
3391                 <para>Lieferdatum</para>
3392               </listitem>
3393             </varlistentry>
3394
3395             <varlistentry>
3396               <term><varname>runningnumber</varname></term>
3397
3398               <listitem>
3399                 <para>Position auf der Rechnung (1, 2, 3...)</para>
3400               </listitem>
3401             </varlistentry>
3402
3403             <varlistentry>
3404               <term><varname>sellprice</varname></term>
3405
3406               <listitem>
3407                 <para>Verkaufspreis</para>
3408               </listitem>
3409             </varlistentry>
3410
3411             <varlistentry>
3412               <term><varname>serialnumber</varname></term>
3413
3414               <listitem>
3415                 <para>Seriennummer</para>
3416               </listitem>
3417             </varlistentry>
3418
3419             <varlistentry>
3420               <term><varname>tax_rate</varname></term>
3421
3422               <listitem>
3423                 <para>Steuersatz</para>
3424               </listitem>
3425             </varlistentry>
3426
3427             <varlistentry>
3428               <term><varname>transdate_oe</varname></term>
3429
3430               <listitem>
3431                 <para>Auftragsdatum des Originalauftrags, wenn die Rechnung
3432                 aus einem Sammelauftrag erstellt wurde</para>
3433               </listitem>
3434             </varlistentry>
3435
3436             <varlistentry>
3437               <term><varname>unit</varname></term>
3438
3439               <listitem>
3440                 <para>Einheit</para>
3441               </listitem>
3442             </varlistentry>
3443
3444             <varlistentry>
3445               <term><varname>weight</varname></term>
3446
3447               <listitem>
3448                 <para>Gewicht</para>
3449               </listitem>
3450             </varlistentry>
3451           </variablelist>
3452
3453           <para>Für jeden Posten gibt es ein Unterarray mit den Informationen
3454           über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
3455           einer <function>foreach</function>-Schleife ausgegeben werden, da
3456           für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
3457           können. Die Variablen dafür lauten:</para>
3458
3459           <variablelist>
3460             <varlistentry>
3461               <term><varname>make</varname></term>
3462
3463               <listitem>
3464                 <para>Lieferant</para>
3465               </listitem>
3466             </varlistentry>
3467
3468             <varlistentry>
3469               <term><varname>model</varname></term>
3470
3471               <listitem>
3472                 <para>Lieferantenartikelnummer</para>
3473               </listitem>
3474             </varlistentry>
3475           </variablelist>
3476         </sect3>
3477
3478         <sect3 id="dokumentenvorlagen-und-variablen.invoice-zahlungen">
3479           <title>Variablen für die einzelnen Zahlungseingänge</title>
3480
3481           <variablelist>
3482             <varlistentry>
3483               <term><varname>payment</varname></term>
3484
3485               <listitem>
3486                 <para>Betrag</para>
3487               </listitem>
3488             </varlistentry>
3489
3490             <varlistentry>
3491               <term><varname>paymentaccount</varname></term>
3492
3493               <listitem>
3494                 <para>Konto</para>
3495               </listitem>
3496             </varlistentry>
3497
3498             <varlistentry>
3499               <term><varname>paymentdate</varname></term>
3500
3501               <listitem>
3502                 <para>Datum</para>
3503               </listitem>
3504             </varlistentry>
3505
3506             <varlistentry>
3507               <term><varname>paymentmemo</varname></term>
3508
3509               <listitem>
3510                 <para>Memo</para>
3511               </listitem>
3512             </varlistentry>
3513
3514             <varlistentry>
3515               <term><varname>paymentsource</varname></term>
3516
3517               <listitem>
3518                 <para>Beleg</para>
3519               </listitem>
3520             </varlistentry>
3521           </variablelist>
3522         </sect3>
3523
3524         <sect3 id="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc">
3525           <title>Benutzerdefinierte Kunden- und Lieferantenvariablen</title>
3526
3527           <para>Die vom Benutzer definierten Variablen für Kunden und
3528           Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
3529           ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem Präfix
3530           <varname>vc_cvar_</varname> und dem vom Benutzer festgelegten
3531           Variablennamen zusammen.</para>
3532
3533           <para>Beispiel: Der Benutzer hat eine Variable namens
3534           <varname>number_of_employees</varname> definiert, die die Anzahl der
3535           Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
3536           unter dem Namen <varname>vc_cvar_number_of_employees</varname> zur
3537           Verfügung.</para>
3538         </sect3>
3539       </sect2>
3540
3541       <sect2 id="dokumentenvorlagen-und-variablen.dunning">
3542         <title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
3543
3544         <sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
3545           <title>Namen der Vorlagen</title>
3546
3547           <para>Die Namen der Vorlagen werden im System-Menü vom Benutzer
3548           eingegeben. Wird für ein Mahnlevel die Option zur automatischen
3549           Erstellung einer Rechnung über die Mahngebühren und Zinsen
3550           aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem
3551           Vorlagenname für diese Mahnstufe mit dem Zusatz
3552           <constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
3553           für die ausgewählte Sprache und den ausgewählten Drucker
3554           angehängt.</para>
3555         </sect3>
3556
3557         <sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
3558           <title>Allgemeine Variablen in Mahnungen</title>
3559
3560           <para>Die Variablen des Verkäufers stehen wie gewohnt als
3561           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
3562           Kunden stehen als Variablen <varname>name</varname>,
3563           <varname>street</varname>, <varname>zipcode</varname>,
3564           <varname>city</varname>, <varname>country</varname>,
3565           <varname>department_1</varname>, <varname>department_2</varname>,
3566           und <varname>email</varname> zur Verfügung.</para>
3567
3568           <para>Weitere Variablen beinhalten:</para>
3569
3570           <variablelist>
3571             <varlistentry>
3572               <term><varname>dunning_date</varname></term>
3573
3574               <listitem>
3575                 <para>Datum der Mahnung</para>
3576               </listitem>
3577             </varlistentry>
3578
3579             <varlistentry>
3580               <term><varname>dunning_duedate</varname></term>
3581
3582               <listitem>
3583                 <para>Fälligkeitsdatum für diese Mahhnung</para>
3584               </listitem>
3585             </varlistentry>
3586
3587             <varlistentry>
3588               <term><varname>dunning_id</varname></term>
3589
3590               <listitem>
3591                 <para>Mahnungsnummer</para>
3592               </listitem>
3593             </varlistentry>
3594
3595             <varlistentry>
3596               <term><varname>fee</varname></term>
3597
3598               <listitem>
3599                 <para>Kummulative Mahngebühren</para>
3600               </listitem>
3601             </varlistentry>
3602
3603             <varlistentry>
3604               <term><varname>interest_rate</varname></term>
3605
3606               <listitem>
3607                 <para>Zinssatz per anno in Prozent</para>
3608               </listitem>
3609             </varlistentry>
3610
3611             <varlistentry>
3612               <term><varname>total_amount</varname></term>
3613
3614               <listitem>
3615                 <para>Gesamter noch zu zahlender Betrag als
3616                 <function>fee</function> + <function>total_interest</function>
3617                 + <function>total_open_amount</function></para>
3618               </listitem>
3619             </varlistentry>
3620
3621             <varlistentry>
3622               <term><varname>total_interest</varname></term>
3623
3624               <listitem>
3625                 <para>Zinsen per anno über alle Rechnungen</para>
3626               </listitem>
3627             </varlistentry>
3628
3629             <varlistentry>
3630               <term><varname>total_open_amount</varname></term>
3631
3632               <listitem>
3633                 <para>Summe über alle offene Beträge der Rechnungen</para>
3634               </listitem>
3635             </varlistentry>
3636           </variablelist>
3637         </sect3>
3638
3639         <sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
3640           <title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
3641
3642           <variablelist>
3643             <varlistentry>
3644               <term><varname>dn_amount</varname></term>
3645
3646               <listitem>
3647                 <para>Rechnungssumme (brutto)</para>
3648               </listitem>
3649             </varlistentry>
3650
3651             <varlistentry>
3652               <term><varname>dn_duedate</varname></term>
3653
3654               <listitem>
3655                 <para>Originales Fälligkeitsdatum der Rechnung</para>
3656               </listitem>
3657             </varlistentry>
3658
3659             <varlistentry>
3660               <term><varname>dn_dunning_date</varname></term>
3661
3662               <listitem>
3663                 <para>Datum der Mahnung</para>
3664               </listitem>
3665             </varlistentry>
3666
3667             <varlistentry>
3668               <term><varname>dn_dunning_duedate</varname></term>
3669
3670               <listitem>
3671                 <para>Fälligkeitsdatum der Mahnung</para>
3672               </listitem>
3673             </varlistentry>
3674
3675             <varlistentry>
3676               <term><varname>dn_fee</varname></term>
3677
3678               <listitem>
3679                 <para>Kummulative Mahngebühr</para>
3680               </listitem>
3681             </varlistentry>
3682
3683             <varlistentry>
3684               <term><varname>dn_interest</varname></term>
3685
3686               <listitem>
3687                 <para>Zinsen per anno für diese Rechnung</para>
3688               </listitem>
3689             </varlistentry>
3690
3691             <varlistentry>
3692               <term><varname>dn_invnumber</varname></term>
3693
3694               <listitem>
3695                 <para>Rechnungsnummer</para>
3696               </listitem>
3697             </varlistentry>
3698
3699             <varlistentry>
3700               <term><varname>dn_linetotal</varname></term>
3701
3702               <listitem>
3703                 <para>Noch zu zahlender Betrag (ergibt sich aus
3704                 <varname>dn_open_amount</varname> + <varname>dn_fee</varname>
3705                 + <varname>dn_interest</varname>)</para>
3706               </listitem>
3707             </varlistentry>
3708
3709             <varlistentry>
3710               <term><varname>dn_netamount</varname></term>
3711
3712               <listitem>
3713                 <para>Rechnungssumme (netto)</para>
3714               </listitem>
3715             </varlistentry>
3716
3717             <varlistentry>
3718               <term><varname>dn_open_amount</varname></term>
3719
3720               <listitem>
3721                 <para>Offener Rechnungsbetrag</para>
3722               </listitem>
3723             </varlistentry>
3724
3725             <varlistentry>
3726               <term><varname>dn_ordnumber</varname></term>
3727
3728               <listitem>
3729                 <para>Bestellnummer</para>
3730               </listitem>
3731             </varlistentry>
3732
3733             <varlistentry>
3734               <term><varname>dn_transdate</varname></term>
3735
3736               <listitem>
3737                 <para>Rechnungsdatum</para>
3738               </listitem>
3739             </varlistentry>
3740
3741             <varlistentry>
3742               <term><varname>dn_curr</varname></term>
3743
3744               <listitem>
3745                 <para>Währung, in der die Rechnung erstellt wurde. (Die
3746                 Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
3747               </listitem>
3748             </varlistentry>
3749           </variablelist>
3750         </sect3>
3751
3752         <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
3753           <title>Variablen in automatisch erzeugten Rechnungen über
3754           Mahngebühren</title>
3755
3756           <para>Die Variablen des Verkäufers stehen wie gewohnt als
3757           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
3758           Kunden stehen als Variablen <varname>name</varname>,
3759           <varname>street</varname>, <varname>zipcode</varname>,
3760           <varname>city</varname>, <varname>country</varname>,
3761           <varname>department_1</varname>, <varname>department_2</varname>,
3762           und <varname>email</varname> zur Verfügung.</para>
3763
3764           <para>Weitere Variablen beinhalten:</para>
3765
3766           <variablelist>
3767             <varlistentry>
3768               <term><varname>duedate</varname></term>
3769
3770               <listitem>
3771                 <para>Fälligkeitsdatum der Rechnung</para>
3772               </listitem>
3773             </varlistentry>
3774
3775             <varlistentry>
3776               <term><varname>dunning_id</varname></term>
3777
3778               <listitem>
3779                 <para>Mahnungsnummer</para>
3780               </listitem>
3781             </varlistentry>
3782
3783             <varlistentry>
3784               <term><varname>fee</varname></term>
3785
3786               <listitem>
3787                 <para>Mahngebühren</para>
3788               </listitem>
3789             </varlistentry>
3790
3791             <varlistentry>
3792               <term><varname>interest</varname></term>
3793
3794               <listitem>
3795                 <para>Zinsen</para>
3796               </listitem>
3797             </varlistentry>
3798
3799             <varlistentry>
3800               <term><varname>invamount</varname></term>
3801
3802               <listitem>
3803                 <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
3804                 <varname>interest</varname>)</para>
3805               </listitem>
3806             </varlistentry>
3807
3808             <varlistentry>
3809               <term><varname>invdate</varname></term>
3810
3811               <listitem>
3812                 <para>Rechnungsdatum</para>
3813               </listitem>
3814             </varlistentry>
3815
3816             <varlistentry>
3817               <term><varname>invnumber</varname></term>
3818
3819               <listitem>
3820                 <para>Rechnungsnummer</para>
3821               </listitem>
3822             </varlistentry>
3823           </variablelist>
3824         </sect3>
3825       </sect2>
3826
3827       <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
3828         <title>Variablen in anderen Vorlagen</title>
3829
3830         <sect3>
3831           <title>Einführung</title>
3832
3833           <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
3834           Rechnung. Allerdings heißen die Variablen, die mit
3835           <varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
3836           fangen sie mit <varname>quo</varname> für "quotation" an:
3837           <varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
3838           wiederum fangen sie mit <varname>ord</varname> für "order" an:
3839           <varname>ordnumber</varname> für Bestellnummer etc.</para>
3840
3841           <para>Manche Variablen sind in anderen Vorlagen hingegen gar nicht
3842           vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies
3843           sind Variablen, die vom Geschäftsablauf her in der entsprechenden
3844           Vorlage keine Bedeutung haben oder noch nicht belegt sein
3845           können.</para>
3846
3847           <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
3848           in Rechnungen aufgeführt.</para>
3849         </sect3>
3850
3851         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
3852           <title>Angebote und Preisanfragen</title>
3853
3854           <variablelist>
3855             <varlistentry>
3856               <term><varname>quonumber</varname></term>
3857
3858               <listitem>
3859                 <para>Angebots- bzw. Anfragenummer</para>
3860               </listitem>
3861             </varlistentry>
3862
3863             <varlistentry>
3864               <term><varname>reqdate</varname></term>
3865
3866               <listitem>
3867                 <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
3868                 Preisanfragen)</para>
3869               </listitem>
3870             </varlistentry>
3871
3872             <varlistentry>
3873               <term><varname>transdate</varname></term>
3874
3875               <listitem>
3876                 <para>Angebots- bzw. Anfragedatum</para>
3877               </listitem>
3878             </varlistentry>
3879           </variablelist>
3880         </sect3>
3881
3882         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
3883           <title>Auftragsbestätigungen und Lieferantenaufträge</title>
3884
3885           <variablelist>
3886             <varlistentry>
3887               <term><varname>ordnumber</varname></term>
3888
3889               <listitem>
3890                 <para>Auftragsnummer</para>
3891               </listitem>
3892             </varlistentry>
3893
3894             <varlistentry>
3895               <term><varname>reqdate</varname></term>
3896
3897               <listitem>
3898                 <para>Lieferdatum</para>
3899               </listitem>
3900             </varlistentry>
3901
3902             <varlistentry>
3903               <term><varname>transdate</varname></term>
3904
3905               <listitem>
3906                 <para>Auftragsdatum</para>
3907               </listitem>
3908             </varlistentry>
3909           </variablelist>
3910         </sect3>
3911
3912         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
3913           <title>Lieferscheine (Verkauf und Einkauf)</title>
3914
3915           <variablelist>
3916             <varlistentry>
3917               <term><varname>cusordnumber</varname></term>
3918
3919               <listitem>
3920                 <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
3921                 des Lieferanten (im Einkauf)</para>
3922               </listitem>
3923             </varlistentry>
3924
3925             <varlistentry>
3926               <term><varname>donumber</varname></term>
3927
3928               <listitem>
3929                 <para>Lieferscheinnummer</para>
3930               </listitem>
3931             </varlistentry>
3932
3933             <varlistentry>
3934               <term><varname>transdate</varname></term>
3935
3936               <listitem>
3937                 <para>Lieferscheindatum</para>
3938               </listitem>
3939             </varlistentry>
3940           </variablelist>
3941
3942           <para>Für jede Position eines Lieferscheines gibt es ein Unterarray
3943           mit den Informationen darüber, von welchem Lager und Lagerplatz aus
3944           die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
3945           Lagerplatz sie eingelagert wurden. Diese müssen mittels einer
3946           <function>foreach</function>-Schleife ausgegeben werden. Diese
3947           Variablen sind:</para>
3948
3949           <variablelist>
3950             <varlistentry>
3951               <term><varname>si_bin</varname></term>
3952
3953               <listitem>
3954                 <para>Lagerplatz</para>
3955               </listitem>
3956             </varlistentry>
3957
3958             <varlistentry>
3959               <term><varname>si_chargenumber</varname></term>
3960
3961               <listitem>
3962                 <para>Chargennummer</para>
3963               </listitem>
3964             </varlistentry>
3965
3966             <varlistentry>
3967               <term><varname>si_bestbefore</varname></term>
3968
3969               <listitem>
3970                 <para>Mindesthaltbarkeit</para>
3971               </listitem>
3972             </varlistentry>
3973
3974             <varlistentry>
3975               <term><varname>si_number</varname></term>
3976
3977               <listitem>
3978                 <para>Artikelnummer</para>
3979               </listitem>
3980             </varlistentry>
3981
3982             <varlistentry>
3983               <term><varname>si_qty</varname></term>
3984
3985               <listitem>
3986                 <para>Anzahl bzw. Menge</para>
3987               </listitem>
3988             </varlistentry>
3989
3990             <varlistentry>
3991               <term><varname>si_runningnumber</varname></term>
3992
3993               <listitem>
3994                 <para>Positionsnummer (1, 2, 3 etc)</para>
3995               </listitem>
3996             </varlistentry>
3997
3998             <varlistentry>
3999               <term><varname>si_unit</varname></term>
4000
4001               <listitem>
4002                 <para>Einheit</para>
4003               </listitem>
4004             </varlistentry>
4005
4006             <varlistentry>
4007               <term><varname>si_warehouse</varname></term>
4008
4009               <listitem>
4010                 <para>Lager</para>
4011               </listitem>
4012             </varlistentry>
4013           </variablelist>
4014         </sect3>
4015
4016         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
4017           <title>Variablen für Sammelrechnung</title>
4018
4019           <variablelist>
4020             <varlistentry>
4021               <term><varname>c0total</varname></term>
4022
4023               <listitem>
4024                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
4025                 Tage</para>
4026               </listitem>
4027             </varlistentry>
4028
4029             <varlistentry>
4030               <term><varname>c30total</varname></term>
4031
4032               <listitem>
4033                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
4034                 und &lt; 60 Tage</para>
4035               </listitem>
4036             </varlistentry>
4037
4038             <varlistentry>
4039               <term><varname>c60total</varname></term>
4040
4041               <listitem>
4042                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
4043                 und &lt; 90 Tage</para>
4044               </listitem>
4045             </varlistentry>
4046
4047             <varlistentry>
4048               <term><varname>c90total</varname></term>
4049
4050               <listitem>
4051                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
4052                 Tage</para>
4053               </listitem>
4054             </varlistentry>
4055
4056             <varlistentry>
4057               <term><varname>total</varname></term>
4058
4059               <listitem>
4060                 <para>Gesamtbetrag aller Rechnungen</para>
4061               </listitem>
4062             </varlistentry>
4063           </variablelist>
4064
4065           <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
4066
4067           <variablelist>
4068             <varlistentry>
4069               <term><varname>invnumber</varname></term>
4070
4071               <listitem>
4072                 <para>Rechnungsnummer</para>
4073               </listitem>
4074             </varlistentry>
4075
4076             <varlistentry>
4077               <term><varname>invdate</varname></term>
4078
4079               <listitem>
4080                 <para>Rechnungsdatum</para>
4081               </listitem>
4082             </varlistentry>
4083
4084             <varlistentry>
4085               <term><varname>duedate</varname></term>
4086
4087               <listitem>
4088                 <para>Fälligkeitsdatum</para>
4089               </listitem>
4090             </varlistentry>
4091
4092             <varlistentry>
4093               <term><varname>amount</varname></term>
4094
4095               <listitem>
4096                 <para>Summe der Rechnung</para>
4097               </listitem>
4098             </varlistentry>
4099
4100             <varlistentry>
4101               <term><varname>open</varname></term>
4102
4103               <listitem>
4104                 <para>Noch offener Betrag der Rechnung</para>
4105               </listitem>
4106             </varlistentry>
4107
4108             <varlistentry>
4109               <term><varname>c0</varname></term>
4110
4111               <listitem>
4112                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
4113                 Tage</para>
4114               </listitem>
4115             </varlistentry>
4116
4117             <varlistentry>
4118               <term><varname>c30</varname></term>
4119
4120               <listitem>
4121                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
4122                 &lt; 60 Tage</para>
4123               </listitem>
4124             </varlistentry>
4125
4126             <varlistentry>
4127               <term><varname>c60</varname></term>
4128
4129               <listitem>
4130                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
4131                 &lt; 90 Tage</para>
4132               </listitem>
4133             </varlistentry>
4134
4135             <varlistentry>
4136               <term><varname>c90</varname></term>
4137
4138               <listitem>
4139                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
4140                 Tage</para>
4141               </listitem>
4142             </varlistentry>
4143           </variablelist>
4144         </sect3>
4145       </sect2>
4146
4147       <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
4148         <title>Blöcke, bedingte Anweisungen und Schleifen</title>
4149
4150         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
4151           <title>Einfürhung</title>
4152
4153           <para>Der Parser kennt neben den Variablen einige weitere
4154           Konstrukte, die gesondert behandelt werden. Diese sind wie
4155           Variablennamen in spezieller Weise markiert:
4156           <command>&lt;%anweisung%&gt; ... &lt;%end%&gt;</command></para>
4157
4158           <para>Anmerkung zum <command>&lt;%end%&gt;</command>: Der besseren
4159           Verständlichkeit halber kann man nach dem <command>end</command>
4160           noch beliebig weitere Wörter schreiben, um so zu markieren, welche
4161           Anweisung (z.B. <command>if</command> oder
4162           <command>foreach</command>) damit abgeschlossen wird.</para>
4163
4164           <para>Beispiel: Lautet der Beginn eines Blockes z.B.
4165           <command>&lt;%if type == "sales_quotation"%&gt;</command>, so könnte
4166           er mit <command>&lt;%end%&gt;</command> genauso abgeschlossen werden
4167           wie mit <command>&lt;%end if%&gt;</command> oder auch
4168           <command>&lt;%end type == "sales_quotation"%&gt;</command>.</para>
4169         </sect3>
4170
4171         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
4172           <title>Der if-Block</title>
4173
4174           <programlisting>&lt;%if variablenname%&gt;
4175 ...
4176 &lt;%end%&gt;</programlisting>
4177
4178           <para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
4179           und dem "end" werden nur ausgegeben, wenn die Variable
4180           <varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
4181
4182           <para>Die Bedingung kann auch negiert werden, indem das Wort
4183           <function>not</function> nach dem <filename>if</filename> verwendet
4184           wird. Beispiel:</para>
4185
4186           <programlisting>&lt;%if not cp_greeting%&gt;
4187 ...
4188 &lt;%end%&gt;</programlisting>
4189
4190           <para>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
4191           oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
4192           einer Variablen mit einer festen Zeichenkette oder einer anderen
4193           Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
4194           oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
4195           die rechte Seite des Vergleichsoperators in Anführungszeichen
4196           gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
4197           anderer Variablen). Zwei Beispiele, die beide Vergleiche
4198           zeigen:</para>
4199
4200           <programlisting>&lt;%if var1 == "Wert"%&gt;</programlisting>
4201
4202           <para>Testet die Variable <varname>var1</varname> auf
4203           übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
4204           Mittels <function>!=</function> anstelle von <function>==</function>
4205           würde auf Ungleichheit getestet.</para>
4206
4207           <programlisting>&lt;%if var1 == var2%&gt;</programlisting>
4208
4209           <para>Testet die Variable <varname>var1</varname> auf
4210           übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
4211           <function>!=</function> anstelle von <function>==</function> würde
4212           auf Ungleichheit getestet.</para>
4213
4214           <para>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit
4215           auch Tests auf übereinstimmung mit regulären Ausdrücken ohne
4216           Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
4217           dieselbe Syntax wie oben nur mit <function>=~</function> und
4218           <function>!~</function> als Vergleichsoperatoren.</para>
4219
4220           <para>Beispiel für einen Test, ob die Variable
4221           <varname>intnotes</varname> (interne Bemerkungen) das Wort
4222           <constant>schwierig</constant> enthält:</para>
4223
4224           <programlisting>&lt;%if intnotes =~ "schwierig"%&gt;</programlisting>
4225         </sect3>
4226
4227         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
4228           <title>Der foreach-Block</title>
4229
4230           <programlisting>&lt;%foreach variablenname%&gt;
4231 ...
4232 &lt;%end%&gt;</programlisting>
4233
4234           <para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
4235           wie das Perl-Array der Variablen <varname>variablenname</varname>
4236           Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen
4237           Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern
4238           benutzt. In jedem Durchlauf werden die <link
4239           linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
4240           Variablen</link> jeweils auf den Wert für die aktuelle Position
4241           gesetzt.</para>
4242
4243           <para>Die Syntax sieht normalerweise wie folgt aus:</para>
4244
4245           <programlisting>&lt;%foreach number%&gt;
4246 Position: &lt;%runningnumber%&gt;
4247 Anzahl: &lt;%qty%&gt;
4248 Artikelnummer: &lt;%number%&gt;
4249 Beschreibung: &lt;%description%&gt;
4250 ...
4251 &lt;%end%&gt;</programlisting>
4252
4253           <para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
4254           <function>&lt;%foreach%&gt;</function>-Block innerhalb einer
4255           Tabellenzelle auf, so wird die komplette Tabellenzeile so oft
4256           wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der
4257           Inhalt zwischen <function>&lt;%foreach%&gt;</function> und
4258           <function>&lt;%end%&gt;</function> wiederholt, nicht aber die
4259           komplette Zeile, in der er steht.</para>
4260         </sect3>
4261       </sect2>
4262
4263       <sect2 id="dokumentenvorlagen-und-variablen.markup">
4264         <title>Markup-Code zur Textformatierung innerhalb von
4265         Formularen</title>
4266
4267         <para>Wenn der Benutzer innhalb von Formularen in kivitendo Text
4268         anders formatiert haben möchte, so ist dies begrenzt möglich.
4269         kivitendo unterstützt die Textformatierung mit HTML-ähnlichen Tags.
4270         Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung
4271         Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird
4272         dann automatisch in Anweisungen für das ausgewählte Vorlagenformat
4273         (HTML oder PDF über LaTeX) umgesetzt.</para>
4274
4275         <para>Die unterstützen Formatierungen sind:</para>
4276
4277         <variablelist>
4278           <varlistentry>
4279             <term>&lt;b&gt;Text&lt;/b&gt;</term>
4280
4281             <listitem>
4282               <para>Text wird in Fettdruck gesetzt.</para>
4283             </listitem>
4284           </varlistentry>
4285
4286           <varlistentry>
4287             <term>&lt;i&gt;Text&lt;/i&gt;</term>
4288
4289             <listitem>
4290               <para>Text wird kursiv gesetzt.</para>
4291             </listitem>
4292           </varlistentry>
4293
4294           <varlistentry>
4295             <term>&lt;u&gt;Text&lt;/u&gt;</term>
4296
4297             <listitem>
4298               <para>Text wird unterstrichen.</para>
4299             </listitem>
4300           </varlistentry>
4301
4302           <varlistentry>
4303             <term>&lt;s&gt;Text&lt;/s&gt;</term>
4304
4305             <listitem>
4306               <para>Text wird durchgestrichen. Diese Formatierung ist nicht
4307               bei der Ausgabe als PDF über LaTeX verfügbar.</para>
4308             </listitem>
4309           </varlistentry>
4310
4311           <varlistentry>
4312             <term>&lt;bullet&gt;</term>
4313
4314             <listitem>
4315               <para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
4316               unten).</para>
4317             </listitem>
4318           </varlistentry>
4319         </variablelist>
4320
4321         <para>Der Befehl <command>&lt;bullet&gt;</command> funktioniert
4322         momentan auch nur in Latex-Vorlagen.</para>
4323       </sect2>
4324     </sect1>
4325
4326     <sect1 id="excel-templates">
4327       <title>Excel-Vorlagen</title>
4328
4329       <sect2 id="excel-templates.summary">
4330         <title>Zusammenfassung</title>
4331
4332         <para>Dieses Dokument beschreibt den Mechanismus, mit dem
4333         Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
4334         einhergehen.</para>
4335       </sect2>
4336
4337       <sect2 id="excel-templates.usage">
4338         <title>Bedienung</title>
4339
4340         <para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
4341         werden. Die Konfigurationsoption heißt <varname>excel_templates =
4342         1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
4343
4344         <para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
4345         anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
4346         werden. In den normalen Verkaufsmasken taucht nun
4347         <constant>Excel</constant> als auswählbares Format auf und kann von da
4348         an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
4349
4350         <para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
4351         eine Angebotsvorlage und wird unter dem internen Namen der Angebote
4352         <filename>sales_quotation.xls</filename> gespeichert.</para>
4353       </sect2>
4354
4355       <sect2 id="excel-templates.syntax">
4356         <title>Variablensyntax</title>
4357
4358         <para>Einfache Syntax:
4359         <command>&lt;&lt;varname&gt;&gt;</command></para>
4360
4361         <para>Dabei sind <constant>&lt;&lt;</constant> und
4362         <constant>&gt;&gt;</constant> die Delimiter. Da Excel auf festen
4363         Breiten besteht, kann der Tag künstlich verlängert werden, indem
4364         weitere <constant>&lt;</constant> oder <constant>&gt;</constant>
4365         eingefügt werden. Der Tag muss nicht symmetrisch sein.
4366         Beispiel:</para>
4367
4368         <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>
4369
4370         <para>Um die Limitierung der festen Breite zu reduzieren, können
4371         weitere Variablen in einem Block interpoliert werden. Whitespace wird
4372         dazwishen dann erhalten. Beispiel:</para>
4373
4374         <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>
4375
4376         <para>Die Variablen werden interpoliert, und linksbündig mit
4377         Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
4378         lang, werden überzählige Zeichen abgeschnitten.</para>
4379
4380         <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
4381         der Block mit einem Leerzeichen anfängt. Beispiel:</para>
4382
4383         <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>
4384
4385         <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
4386         Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
4387         entfernt.</para>
4388       </sect2>
4389
4390       <sect2 id="excel-templates.limitations">
4391         <title>Einschränkungen</title>
4392
4393         <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
4394         mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
4395         beschränkt sich daher darauf, Textstellen exakt durch einen anderen
4396         Text zu ersetzen.</para>
4397
4398         <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
4399         <command>&lt;%if%&gt;</command> und
4400         <command>&lt;%foreach%&gt;</command> nicht vorhanden. Der Delimiter
4401         <constant>&lt;% %&gt;</constant> kommt in den Headerinformationen
4402         evtl. vor. Deshalb wurde auf den sichereren Delimiter
4403         <constant>&lt;&lt;</constant> und <constant>&gt;&gt;</constant>
4404         gewechselt.</para>
4405       </sect2>
4406     </sect1>
4407   </chapter>
4408
4409   <chapter>
4410     <title>Entwicklerdokumentation</title>
4411
4412     <sect1 id="devel.globals" xreflabel="Globale Variablen">
4413       <title>Globale Variablen</title>
4414
4415       <sect2>
4416         <title>Wie sehen globale Variablen in Perl aus?</title>
4417
4418         <para>Globale Variablen liegen in einem speziellen namespace namens
4419         "main", der von überall erreichbar ist. Darüber hinaus sind bareword
4420         globs global und die meisten speziellen Variablen sind...
4421         speziell.</para>
4422
4423         <para>Daraus ergeben sich folgende Formen:</para>
4424
4425         <variablelist>
4426           <varlistentry>
4427             <term><literal>$main::form</literal></term>
4428
4429             <listitem>
4430               <para>expliziter Namespace "main"</para>
4431             </listitem>
4432           </varlistentry>
4433
4434           <varlistentry>
4435             <term><literal>$::form</literal></term>
4436
4437             <listitem>
4438               <para>impliziter Namespace "main"</para>
4439             </listitem>
4440           </varlistentry>
4441
4442           <varlistentry>
4443             <term><literal>open FILE, "file.txt"</literal></term>
4444
4445             <listitem>
4446               <para><varname>FILE</varname> ist global</para>
4447             </listitem>
4448           </varlistentry>
4449
4450           <varlistentry>
4451             <term><literal>$_</literal></term>
4452
4453             <listitem>
4454               <para>speziell</para>
4455             </listitem>
4456           </varlistentry>
4457         </variablelist>
4458
4459         <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
4460         Schlüsselwort wie "<function>global</function>", mit dem man
4461         importieren kann. <function>my</function>, <function>our</function>
4462         und <function>local</function> machen was anderes.</para>
4463
4464         <variablelist>
4465           <varlistentry>
4466             <term><literal>my $form</literal></term>
4467
4468             <listitem>
4469               <para>lexikalische Variable, gültig bis zum Ende des
4470               Scopes</para>
4471             </listitem>
4472           </varlistentry>
4473
4474           <varlistentry>
4475             <term><literal>our $form</literal></term>
4476
4477             <listitem>
4478               <para><varname>$form</varname> referenziert ab hier
4479               <varname>$PACKAGE::form</varname>.</para>
4480             </listitem>
4481           </varlistentry>
4482
4483           <varlistentry>
4484             <term><literal>local $form</literal></term>
4485
4486             <listitem>
4487               <para>Alle Änderungen an <varname>$form</varname> werden am Ende
4488               des scopes zurückgesetzt</para>
4489             </listitem>
4490           </varlistentry>
4491         </variablelist>
4492       </sect2>
4493
4494       <sect2>
4495         <title>Warum sind globale Variablen ein Problem?</title>
4496
4497         <para>Das erste Problem ist <productname>FCGI</productname>.</para>
4498
4499         <para><productname>SQL-Ledger</productname> hat fast alles im globalen
4500         namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
4501         Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
4502         aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
4503         Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
4504         Datenbankverbindungen, weil die sehr lange zum Initialisieren
4505         brauchen.</para>
4506
4507         <para>Das zweite Problem ist <function>strict</function>. Unter
4508         <function>strict</function> werden alle Variablen die nicht explizit
4509         mit <function>Package</function>, <function>my</function> oder
4510         <function>our</function> angegeben werden als Tippfehler angemarkert,
4511         dies hat, seit der Einführung, u.a. schon so manche langwierige
4512         Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
4513         angegeben werden, werden die nicht geprüft, und somit kann sich
4514         schnell ein Tippfehler einschleichen.</para>
4515       </sect2>
4516
4517       <sect2>
4518         <title>Kanonische globale Variablen</title>
4519
4520         <para>Um dieses Problem im Griff zu halten gibt es einige wenige
4521         globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
4522         vorgegebenen Eigenschaften, und alles andere sollte anderweitig
4523         umhergereicht werden.</para>
4524
4525         <para>Diese Variablen sind im Moment die folgenden neun:</para>
4526
4527         <itemizedlist>
4528           <listitem>
4529             <para><varname>$::form</varname></para>
4530           </listitem>
4531
4532           <listitem>
4533             <para><varname>%::myconfig</varname></para>
4534           </listitem>
4535
4536           <listitem>
4537             <para><varname>$::locale</varname></para>
4538           </listitem>
4539
4540           <listitem>
4541             <para><varname>$::lxdebug</varname></para>
4542           </listitem>
4543
4544           <listitem>
4545             <para><varname>$::auth</varname></para>
4546           </listitem>
4547
4548           <listitem>
4549             <para><varname>$::lx_office_conf</varname></para>
4550           </listitem>
4551
4552           <listitem>
4553             <para><varname>$::instance_conf</varname></para>
4554           </listitem>
4555
4556           <listitem>
4557             <para><varname>$::dispatcher</varname></para>
4558           </listitem>
4559
4560           <listitem>
4561             <para><varname>$::request</varname></para>
4562           </listitem>
4563         </itemizedlist>
4564
4565         <para>Damit diese nicht erneut als Müllhalde missbraucht werden, im
4566         Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
4567         Eigenschaften (Konventionen):</para>
4568
4569         <sect3>
4570           <title>$::form</title>
4571
4572           <itemizedlist>
4573             <listitem>
4574               <para>Ist ein Objekt der Klasse
4575               "<classname>Form</classname>"</para>
4576             </listitem>
4577
4578             <listitem>
4579               <para>Wird nach jedem Request gelöscht</para>
4580             </listitem>
4581
4582             <listitem>
4583               <para>Muss auch in Tests und Konsolenscripts vorhanden
4584               sein.</para>
4585             </listitem>
4586
4587             <listitem>
4588               <para>Enthält am Anfang eines Requests die Requestparameter vom
4589               User</para>
4590             </listitem>
4591
4592             <listitem>
4593               <para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
4594               cachen, das wird aber momentan absichtlich zerstört</para>
4595             </listitem>
4596           </itemizedlist>
4597
4598           <para><varname>$::form</varname> wurde unter <productname>SQL
4599           Ledger</productname> als Gottobjekt für alles misbraucht. Sämtliche
4600           alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
4601           heißt, alles was einem lieb ist (alle Variablen die einem ans Herz
4602           gewachsen sind), sollte man vor einem Aufruf (!) von zum Beispiel
4603           <function>IS-&gt;retrieve_customer()</function> in Sicherheit
4604           bringen.</para>
4605
4606           <para>Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man
4607           Berechnung in einem bestimmten Format durchführt (SL/Form.pm Zeile
4608           3552, Stand version 2.7beta), um dies hinterher wieder auf den
4609           richtigen Wert zu setzen:</para>
4610
4611           <programlisting>  my $saved_numberformat    = $::myconfig{numberformat};
4612   $::myconfig{numberformat} = $numberformat;
4613   # (...) div Berechnungen
4614   $::myconfig{numberformat} = $saved_numberformat;</programlisting>
4615
4616           <para>Das Objekt der Klasse Form hat leider im Moment noch viele
4617           zentrale Funktionen die vom internen Zustand abhängen, deshalb bitte
4618           nie einfach zerstören oder überschreiben (zumindestens nicht kurz
4619           vor einem Release oder in Absprache über bspw. die devel-Liste ;-).
4620           Es geht ziemlich sicher etwas kaputt.</para>
4621
4622           <para><varname>$::form</varname> ist gleichzeitig der Standard Scope
4623           in den <productname>Template::Toolkit</productname> Templates
4624           außerhalb der Controller: der Ausdruck <function>[% var
4625           %]</function> greift auf <varname>$::form-&gt;{var}</varname> zu.
4626           Unter Controllern ist der Standard Scope anders, da lautet der
4627           Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
4628           normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
4629           <function>&lt;%var%&gt;</function> zeigt auf
4630           <varname>$::form-&gt;{var}</varname>. Nochmal von der anderen Seite
4631           erläutert, innerhalb von (Web-)Templates sieht man häufiger solche
4632           Konstrukte:</para>
4633
4634           <programlisting>[%- IF business %]
4635 # (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
4636 [%- END %]</programlisting>
4637
4638           <para>Entweder wird hier dann $::form-&gt;{business} ausgewertet
4639           oder aber der Funktion
4640           <function>$form-&gt;parse_html_template</function> wird explizit
4641           noch ein zusätzlicher Hash übergeben, der dann auch in den
4642           (Web-)Templates zu Verfügung steht, bspw. so:</para>
4643
4644           <programlisting>$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</programlisting>
4645
4646           <para>Innerhalb von Schleifen wird
4647           <varname>$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</varname>
4648           bevorzugt, wenn vorhanden. Ein Beispiel findet sich in SL/DO.pm,
4649           welches über alle Positionen eines Lieferscheins in Schleife
4650           läuft:</para>
4651
4652           <programlisting>for $i (1 .. $form-&gt;{rowcount}) {
4653   # ...
4654   push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
4655   push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
4656   push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
4657   # ...
4658 }</programlisting>
4659         </sect3>
4660
4661         <sect3>
4662           <title>%::myconfig</title>
4663
4664           <itemizedlist>
4665             <listitem>
4666               <para>Das einzige Hash unter den globalen Variablen</para>
4667             </listitem>
4668
4669             <listitem>
4670               <para>Wird spätestens benötigt wenn auf die Datenbank
4671               zugegriffen wird</para>
4672             </listitem>
4673
4674             <listitem>
4675               <para>Wird bei jedem Request neu erstellt.</para>
4676             </listitem>
4677
4678             <listitem>
4679               <para>Enthält die Userdaten des aktuellen Logins</para>
4680             </listitem>
4681
4682             <listitem>
4683               <para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
4684               extern serialisiert werden, weil da auch der Datenbankzugriff
4685               für diesen user drinsteht.</para>
4686             </listitem>
4687
4688             <listitem>
4689               <para>Enthält unter anderem Listenbegrenzung vclimit,
4690               Datumsformat dateformat und Nummernformat numberformat</para>
4691             </listitem>
4692
4693             <listitem>
4694               <para>Enthält Datenbankzugriffinformationen</para>
4695             </listitem>
4696           </itemizedlist>
4697
4698           <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
4699           ein Userobjekt. Die meisten Funktionen, die etwas anhand des
4700           aktuellen Users entscheiden müssen, befragen
4701           <varname>%::myconfig</varname>. Innerhalb der Anwendungen sind dies
4702           überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
4703           -&gt; <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
4704           Informationen über den Benutzer die über die
4705           Administrator-Schnittstelle (admin.pl) eingegeben wurden.</para>
4706         </sect3>
4707
4708         <sect3>
4709           <title>$::locale</title>
4710
4711           <itemizedlist>
4712             <listitem>
4713               <para>Objekt der Klasse "Locale"</para>
4714             </listitem>
4715
4716             <listitem>
4717               <para>Wird pro Request erstellt</para>
4718             </listitem>
4719
4720             <listitem>
4721               <para>Muss auch für Tests und Scripte immer verfügbar
4722               sein.</para>
4723             </listitem>
4724
4725             <listitem>
4726               <para>Cached intern über Requestgrenzen hinweg benutzte
4727               Locales</para>
4728             </listitem>
4729           </itemizedlist>
4730
4731           <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
4732           Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
4733         </sect3>
4734
4735         <sect3>
4736           <title>$::lxdebug</title>
4737
4738           <itemizedlist>
4739             <listitem>
4740               <para>Objekt der Klasse "LXDebug"</para>
4741             </listitem>
4742
4743             <listitem>
4744               <para>Wird global gecached</para>
4745             </listitem>
4746
4747             <listitem>
4748               <para>Muss immer verfügbar sein, in nahezu allen
4749               Funktionen</para>
4750             </listitem>
4751           </itemizedlist>
4752
4753           <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
4754           bereit, wie "<function>enter_sub</function>" und
4755           "<function>leave_sub</function>", mit denen in den alten Modulen ein
4756           brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
4757           der man die Wallclockzeit seit Requeststart loggen kann, sowie
4758           "<function>message</function>" und "<function>dump</function>" mit
4759           denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
4760           packen kann.</para>
4761
4762           <para>Beispielsweise so:</para>
4763
4764           <programlisting>$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
4765 $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</programlisting>
4766         </sect3>
4767
4768         <sect3>
4769           <title>$::auth</title>
4770
4771           <itemizedlist>
4772             <listitem>
4773               <para>Objekt der Klasse "SL::Auth"</para>
4774             </listitem>
4775
4776             <listitem>
4777               <para>Wird global gecached</para>
4778             </listitem>
4779
4780             <listitem>
4781               <para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
4782             </listitem>
4783
4784             <listitem>
4785               <para>Wird nach jedem Request resettet.</para>
4786             </listitem>
4787           </itemizedlist>
4788
4789           <para><varname>$::auth</varname> stellt Funktionen bereit um die
4790           Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
4791           vom aktuellen User abhängen wird das Objekt aus
4792           Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
4793           Request kurz resettet.</para>
4794         </sect3>
4795
4796         <sect3>
4797           <title>$::lx_office_conf</title>
4798
4799           <itemizedlist>
4800             <listitem>
4801               <para>Objekt der Klasse
4802               "<classname>SL::LxOfficeConf</classname>"</para>
4803             </listitem>
4804
4805             <listitem>
4806               <para>Global gecached</para>
4807             </listitem>
4808
4809             <listitem>
4810               <para>Repräsentation der
4811               <filename>config/kivitendo.conf[.default]</filename>-Dateien</para>
4812             </listitem>
4813           </itemizedlist>
4814
4815           <para>Globale Konfiguration. Configdateien werden zum Start gelesen
4816           und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
4817           das Programm die Konfiguration ändern kann oder sollte.</para>
4818
4819           <para>Beispielsweise ist über den Konfigurationseintrag [debug] die
4820           Debug- und Trace-Log-Datei wie folgt konfiguriert und
4821           verfügbar:</para>
4822
4823           <programlisting>[debug]
4824 file = /tmp/kivitendo-debug.log</programlisting>
4825
4826           <para>ist der Key <varname>file</varname> im Programm als
4827           <varname>$::lx_office_conf-&gt;{debug}{file}</varname>
4828           erreichbar.</para>
4829
4830           <warning>
4831             <para>Zugriff auf die Konfiguration erfolgt im Moment über
4832             Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
4833           </warning>
4834         </sect3>
4835
4836         <sect3>
4837           <title>$::instance_conf</title>
4838
4839           <itemizedlist>
4840             <listitem>
4841               <para>Objekt der Klasse
4842               "<classname>SL::InstanceConfiguration</classname>"</para>
4843             </listitem>
4844
4845             <listitem>
4846               <para>wird pro Request neu erstellt</para>
4847             </listitem>
4848           </itemizedlist>
4849
4850           <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
4851           speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
4852           ist hier eine Mandantendatenbank. Beispielsweise überprüft
4853           <programlisting>$::instance_conf-&gt;get_inventory_system eq 'perpetual'</programlisting>
4854           ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para>
4855         </sect3>
4856
4857         <sect3>
4858           <title>$::dispatcher</title>
4859
4860           <itemizedlist>
4861             <listitem>
4862               <para>Objekt der Klasse
4863               "<varname>SL::Dispatcher</varname>"</para>
4864             </listitem>
4865
4866             <listitem>
4867               <para>wird pro Serverprozess erstellt.</para>
4868             </listitem>
4869
4870             <listitem>
4871               <para>enthält Informationen über die technische Verbindung zum
4872               Server</para>
4873             </listitem>
4874           </itemizedlist>
4875
4876           <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
4877           global gespeichert wird. Wird vermutlich irgendwann in einem anderen
4878           Objekt untergebracht.</para>
4879         </sect3>
4880
4881         <sect3>
4882           <title>$::request</title>
4883
4884           <itemizedlist>
4885             <listitem>
4886               <para>Hashref (evtl später Objekt)</para>
4887             </listitem>
4888
4889             <listitem>
4890               <para>Wird pro Request neu initialisiert.</para>
4891             </listitem>
4892
4893             <listitem>
4894               <para>Keine Unterstruktur garantiert.</para>
4895             </listitem>
4896           </itemizedlist>
4897
4898           <para><varname>$::request</varname> ist ein generischer Platz um
4899           Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
4900           at a distance benutzt werden, sondern um lokales memoizing zu
4901           ermöglichen, das garantiert am Ende des Requests zerstört
4902           wird.</para>
4903
4904           <para>Vieles von dem, was im moment in <varname>$::form</varname>
4905           liegt, sollte eigentlich hier liegen. Die groben
4906           Differentialkriterien sind:</para>
4907
4908           <itemizedlist>
4909             <listitem>
4910               <para>Kommt es vom User, und soll unverändert wieder an den
4911               User? Dann <varname>$::form</varname>, steht da eh schon</para>
4912             </listitem>
4913
4914             <listitem>
4915               <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
4916               Requests gebraucht werden? Dann
4917               <varname>$::request</varname></para>
4918             </listitem>
4919
4920             <listitem>
4921               <para>Muss ich von anderen Teilen des Programms lesend drauf
4922               zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
4923               Wrappermethode</para>
4924             </listitem>
4925           </itemizedlist>
4926         </sect3>
4927       </sect2>
4928
4929       <sect2>
4930         <title>Ehemalige globale Variablen</title>
4931
4932         <para>Die folgenden Variablen waren einmal im Programm, und wurden
4933         entfernt.</para>
4934
4935         <sect3>
4936           <title>$::cgi</title>
4937
4938           <itemizedlist>
4939             <listitem>
4940               <para>war nötig, weil cookie Methoden nicht als
4941               Klassenfunktionen funktionieren</para>
4942             </listitem>
4943
4944             <listitem>
4945               <para>Aufruf als Klasse erzeugt Dummyobjekt was im
4946               Klassennamespace gehalten wird und über Requestgrenzen
4947               leaked</para>
4948             </listitem>
4949
4950             <listitem>
4951               <para>liegt jetzt unter
4952               <varname>$::request-&gt;{cgi}</varname></para>
4953             </listitem>
4954           </itemizedlist>
4955         </sect3>
4956
4957         <sect3>
4958           <title>$::all_units</title>
4959
4960           <itemizedlist>
4961             <listitem>
4962               <para>war nötig, weil einige Funktionen in Schleifen zum Teil
4963               ein paar hundert mal pro Request eine Liste der Einheiten
4964               brauchen, und de als Parameter durch einen Riesenstack von
4965               Funktionen geschleift werden müssten.</para>
4966             </listitem>
4967
4968             <listitem>
4969               <para>Liegt jetzt unter
4970               <varname>$::request-&gt;{cache}{all_units}</varname></para>
4971             </listitem>
4972
4973             <listitem>
4974               <para>Wird nur in
4975               <function>AM-&gt;retrieve_all_units()</function> gesetzt oder
4976               gelesen.</para>
4977             </listitem>
4978           </itemizedlist>
4979         </sect3>
4980
4981         <sect3>
4982           <title>%::called_subs</title>
4983
4984           <itemizedlist>
4985             <listitem>
4986               <para>wurde benutzt um callsub deep recursions
4987               abzufangen.</para>
4988             </listitem>
4989
4990             <listitem>
4991               <para>Wurde entfernt, weil callsub nur einen Bruchteil der
4992               möglichen Rekursioenen darstellt, und da nie welche
4993               auftreten.</para>
4994             </listitem>
4995
4996             <listitem>
4997               <para>komplette recursion protection wurde entfernt.</para>
4998             </listitem>
4999           </itemizedlist>
5000         </sect3>
5001       </sect2>
5002     </sect1>
5003
5004     <sect1 id="devel.fcgi">
5005       <title>Entwicklung unter FastCGI</title>
5006
5007       <sect2 id="devel.fcgi.general">
5008         <title>Allgemeines</title>
5009
5010         <para>Wenn Änderungen in der Konfiguration von kivitendo gemacht
5011         werden, muss der Webserver neu gestartet werden.</para>
5012
5013         <para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
5014         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
5015         müssen folgende Aspekte beachtet werden.</para>
5016       </sect2>
5017
5018       <sect2 id="devel.fcgi.exiting">
5019         <title>Programmende und Ausnahmen</title>
5020
5021         <para>Betrifft die Funktionen <function>warn</function>,
5022         <function>die</function>, <function>exit</function>,
5023         <function>carp</function> und <function>confess</function>.</para>
5024
5025         <para>Fehler, die dass Programm normalerweise sofort beenden (fatale
5026         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
5027         am Laufen zu halten. Man kann mit <function>die</function>,
5028         <function>confess</function> oder <function>carp</function> Fehler
5029         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
5030         eigene <function>$::form-</function>error()&gt; tut im Prinzip das
5031         Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
5032         <function>exit</function> hingegen werden nicht abgefangen.
5033         <function>warn</function> wird direkt nach STDERR, also in Server Log
5034         eine Nachricht schreiben (sofern in der Konfiguration nicht die
5035         Warnungen in das kivitendo Log umgeleitet wurden), und
5036         <function>exit</function> wird die Ausführung beenden.</para>
5037
5038         <para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
5039         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
5040         Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
5041         benutzen, alle anderen Exceptionmechanismen sind ok.</para>
5042       </sect2>
5043
5044       <sect2 id="devel.fcgi.globals">
5045         <title>Globale Variablen</title>
5046
5047         <para>Um zu vermeiden, dass Informationen von einem Request in einen
5048         anderen gelangen, müssen alle globalen Variablen vor einem Request
5049         sauber initialisiert werden. Das ist besonders wichtig im
5050         <varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
5051         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
5052         werden.</para>
5053
5054         <para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
5055         abgetrennten Block, der alle kanonischen globalen Variablen listet und
5056         erklärt. Bitte keine anderen einführen ohne das sauber zu
5057         dokumentieren.</para>
5058
5059         <para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
5060         man sicher geht, dass man die richtige erwischt.</para>
5061       </sect2>
5062
5063       <sect2 id="devel.fcgi.performance">
5064         <title>Performance und Statistiken</title>
5065
5066         <para>Die kritischen Pfade des Programms sind die Belegmasken, und
5067         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
5068         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
5069         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
5070         sind es je nach Menge der definierten Variablen 1-2s. Ab der
5071         Moose/Rose::DB Version sind es 5-6s.</para>
5072
5073         <para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
5074         den kritischen Pfaden, unter 0,15 sonst.</para>
5075       </sect2>
5076
5077       <sect2 id="devel.fcgi.known-issues">
5078         <title>Bekannte Probleme</title>
5079
5080         <sect3 id="devel.fcgi.known-issues.encoding">
5081           <title>Encoding Awareness</title>
5082
5083           <para>UTF-8 kodierte Installationen sind sehr anfällig gegen
5084           fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
5085           falsch kodierte Zeichen eher unwissend, und geben sie einfach
5086           weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
5087           das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
5088           beseitigen.</para>
5089         </sect3>
5090       </sect2>
5091     </sect1>
5092
5093     <sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
5094       <title>SQL-Upgradedateien</title>
5095
5096       <sect2 id="db-upgrade-files.introduction"
5097              xreflabel="Einführung in die Datenbank-Upgradedateien">
5098         <title>Einführung</title>
5099
5100         <para>Der alte Mechanismus für SQL-Upgradescripte, der auf einer
5101         Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
5102         diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele
5103         Entwicklung im stable- und unstable-Baum betrifft.</para>
5104
5105         <para>Dieser Mechanismus wurde für kivitendo 2.4.1 deutlich erweitert.
5106         Es werden weiterhin alle Scripte aus sql/Pg-upgrade ausgeführt.
5107         Zusätzlich gibt es aber ein zweites Verzeichnis, sql/Pg-upgrade2. In
5108         diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren,
5109         die neben den eigentlich auszuführenden SQL- oder Perl-Befehlen einige
5110         Kontrollinformationen enthält.</para>
5111
5112         <para>Neu sind die Kontrollinformationen, die Abhängigkeiten und
5113         Prioritäten definieren können werden, sodass Datenbankscripte zwar in
5114         einer sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER
5115         TABLE" erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE"
5116         angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man
5117         keine Versionsnummern mehr braucht.</para>
5118
5119         <para>kivitendo merkt sich dabei, welches der Upgradescripte in
5120         sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht
5121         erneut aus. Dazu dient die Tabelle "schema_info", die bei der
5122         Anmeldung automatisch angelegt wird.</para>
5123       </sect2>
5124
5125       <sect2 id="db-upgrade-files.format"
5126              xreflabel="Format der Upgradedateien">
5127         <title>Format der Kontrollinformationen</title>
5128
5129         <para>Die Kontrollinformationen sollten sich am Anfang der jeweiligen
5130         Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
5131         hat dabei das folgende Format:</para>
5132
5133         <para>Für SQL-Upgradedateien:</para>
5134
5135         <programlisting>-- @key: value</programlisting>
5136
5137         <para>Für Perl-Upgradedateien:</para>
5138
5139         <programlisting># @key: value</programlisting>
5140
5141         <para>Leerzeichen vor "<varname>value</varname>" werden
5142         entfernt.</para>
5143
5144         <para>Die folgenden Schlüsselworte werden verarbeitet:</para>
5145
5146         <variablelist>
5147           <varlistentry>
5148             <term><varname>tag</varname></term>
5149
5150             <listitem>
5151               <para>Wird zwingend benötigt. Dies ist der "Name" des Upgrades.
5152               Dieser "tag" kann von anderen Kontrolldateien in ihren
5153               Abhängigkeiten verwendet werden (Schlüsselwort
5154               "<varname>depends</varname>"). Der "tag" ist auch der Name, der
5155               in der Datenbank eingetragen wird.</para>
5156
5157               <para>Normalerweise sollte die Kontrolldatei genau so heißen wie
5158               der "tag", nur mit der Endung ".sql" bzw. "pl".</para>
5159
5160               <para>Ein Tag darf nur aus alphanumerischen Zeichen sowie den
5161               Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht
5162               erlaubt und sollten stattdessen mit Unterstrichen ersetzt
5163               werden.</para>
5164             </listitem>
5165           </varlistentry>
5166
5167           <varlistentry>
5168             <term><varname>charset</varname></term>
5169
5170             <listitem>
5171               <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script
5172               geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
5173               Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei
5174               Abwesenheit des Tags der Zeichensatz
5175               "<literal>ISO-8859-15</literal>" angenommen.</para>
5176             </listitem>
5177           </varlistentry>
5178
5179           <varlistentry>
5180             <term><varname>description</varname></term>
5181
5182             <listitem>
5183               <para>Benötigt. Eine Beschreibung, was in diesem Update
5184               passiert. Diese wird dem Benutzer beim eigentlichen
5185               Datenbankupdate angezeigt. Während der Tag in englisch gehalten
5186               sein sollte, sollte die Beschreibung auf Deutsch
5187               erfolgen.</para>
5188             </listitem>
5189           </varlistentry>
5190
5191           <varlistentry>
5192             <term><varname>depends</varname></term>
5193
5194             <listitem>
5195               <para>Optional. Eine mit Leerzeichen getrennte Liste von "tags",
5196               von denen dieses Upgradescript abhängt. kivitendo stellt sicher,
5197               dass die in dieser Liste aufgeführten Scripte bereits
5198               durchgeführt wurden, bevor dieses Script ausgeführt wird.</para>
5199
5200               <para>Abhängigkeiten werden rekursiv betrachtet. Wenn also ein
5201               Script "b" existiert, das von Änderungen in "a" abhängt, und
5202               eine neue Kontrolldatei für "c" erstellt wird, die von
5203               Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den
5204               Tag "b" als Abhängigkeit zu definieren.</para>
5205
5206               <para>Es ist nicht erlaubt, sich selbst referenzierende
5207               Abhängigkeiten zu definieren (z.B. "a" -&gt; "b", "b" -&gt; "c"
5208               und "c" -&gt; "a").</para>
5209             </listitem>
5210           </varlistentry>
5211
5212           <varlistentry>
5213             <term><varname>priority</varname></term>
5214
5215             <listitem>
5216               <para>Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
5217               der Scripte ausgeführt werden, die die gleichen
5218               Abhängigkeitstiefen besitzen. Fehlt dieser Parameter, so wird
5219               der Wert 1000 benutzt.</para>
5220
5221               <para>Dies ist reine Kosmetik. Für echte Reihenfolgen muss
5222               "depends" benutzt werden. kivitendo sortiert die auszuführenden
5223               Scripte zuerst nach der Abhängigkeitstiefe (wenn "z" von "y"
5224               abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von
5225               2, "y" von 1 und "x" von 0. "x" würde hier zuerst ausgeführt,
5226               dann "y", dann "z"), dann nach der Priorität und bei gleicher
5227               Priorität alphabetisch nach dem "tag".</para>
5228             </listitem>
5229           </varlistentry>
5230
5231           <varlistentry>
5232             <term><varname>ignore</varname></term>
5233
5234             <listitem>
5235               <para>Optional. Falls der Wert auf 1 (true) steht, wird das
5236               Skript bei der Anmeldung ignoriert und entsprechend nicht
5237               ausgeführt.</para>
5238             </listitem>
5239           </varlistentry>
5240         </variablelist>
5241       </sect2>
5242
5243       <sect2 id="db-upgrade-files.dbupgrade-tool"
5244              xreflabel="Hilfsscript dbupgrade2_tool.pl">
5245         <title>Hilfsscript dbupgrade2_tool.pl</title>
5246
5247         <para>Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern,
5248         existiert ein Hilfsscript namens
5249         "<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem
5250         kivitendo-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
5251         liest alle Datenbankupgradescripte aus dem Verzeichnis
5252         <filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die
5253         gleichen Methoden wie kivitendo selber, sodass alle Fehlersituationen
5254         von der Kommandozeile überprüft werden können.</para>
5255
5256         <para>Wird dem Script kein weiterer Parameter übergeben, so wird nur
5257         eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
5258         sich aber auch Informationen auf verschiedene Art ausgeben
5259         lassen:</para>
5260
5261         <itemizedlist>
5262           <listitem>
5263             <para>Listenform: "<command>./scripts/dbupgrade2_tool.pl
5264             --list</command>"</para>
5265
5266             <para>Gibt eine Liste aller Scripte aus. Die Liste ist in der
5267             Reihenfolge sortiert, in der kivitendo die Scripte ausführen
5268             würde. Es werden neben der Listenposition der Tag, die
5269             Abhängigkeitstiefe und die Priorität ausgegeben.</para>
5270           </listitem>
5271
5272           <listitem>
5273             <para>Baumform: "<command>./scripts/dbupgrade2_tool.pl
5274             --tree</command>"</para>
5275
5276             <para>Listet alle Tags in Baumform basierend auf den
5277             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von
5278             denen keine anderen abhängen. Die Unterknoten sind Scripte, die
5279             beim übergeordneten Script als Abhängigkeit eingetragen
5280             sind.</para>
5281           </listitem>
5282
5283           <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
5284             <para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl
5285             --rtree</command>"</para>
5286
5287             <para>Listet alle Tags in Baumform basierend auf den
5288             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte mit
5289             der geringsten Abhängigkeitstiefe. Die Unterknoten sind Scripte,
5290             die das übergeordnete Script als Abhängigkeit eingetragen
5291             haben.</para>
5292           </listitem>
5293
5294           <listitem>
5295             <para>Baumform mit Postscriptausgabe:
5296             "<command>./scripts/dbupgrade2_tool.pl
5297             --graphviz</command>"</para>
5298
5299             <para>Benötigt das Tool "<command>graphviz</command>", um mit
5300             seiner Hilfe die <link
5301             linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte
5302             Baumform</link> in eine Postscriptdatei namens
5303             "<filename>db_dependencies.ps</filename>" auszugeben. Dies ist
5304             vermutlich die übersichtlichste Form, weil hierbei jeder Knoten
5305             nur einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen
5306             können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben
5307             werden.</para>
5308           </listitem>
5309
5310           <listitem>
5311             <para>Scripte, von denen kein anderes Script abhängt:
5312             "<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"</para>
5313
5314             <para>Listet die Tags aller Scripte auf, von denen keine anderen
5315             Scripte abhängen.</para>
5316           </listitem>
5317         </itemizedlist>
5318       </sect2>
5319     </sect1>
5320
5321     <sect1 id="translations-languages" xreflabel="Translations and languages">
5322       <title>Translations and languages</title>
5323
5324       <sect2 id="translations-languages.introduction"
5325              xreflabel="Introduction to translations and languages">
5326         <title>Introduction</title>
5327
5328         <note>
5329           <para>Dieser Abschnitt ist in Englisch geschrieben, um
5330           internationalen Übersetzern die Arbeit zu erleichtern.</para>
5331         </note>
5332
5333         <para>This section describes how localization packages in kivitendo
5334         are built. Currently the only language fully supported is German, and
5335         since most of the internal messages are held in English the English
5336         version is usable too.</para>
5337
5338         <para>A stub version of French is included but not functunal at this
5339         point.</para>
5340       </sect2>
5341
5342       <sect2 id="translations-languages.file-structure"
5343              xreflabel="File structure">
5344         <title>File structure</title>
5345
5346         <para>The structure of locales in kivitendo is:</para>
5347
5348         <programlisting>kivitendo/locale/&lt;langcode&gt;/</programlisting>
5349
5350         <para>where &lt;langcode&gt; stands for an abbreviation of the
5351         language package. The builtin packages use two letter <ulink
5352         url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
5353         but the actual name is not relevant for the program and can easily be
5354         extended to <ulink
5355         url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
5356         tags</ulink> (i.e. "en_GB"). In fact the original language packages
5357         from SQL Ledger are named in this way.</para>
5358
5359         <para>In such a language directory the following files are
5360         recognized:</para>
5361
5362         <variablelist>
5363           <varlistentry>
5364             <term>LANGUAGE</term>
5365
5366             <listitem>
5367               <para>This file is mandatory.</para>
5368
5369               <para>The <filename>LANGUAGE</filename> file contains the self
5370               descripted name of the language. It should contain a native
5371               representation first, and in parenthesis an english translation
5372               after that. Example:</para>
5373
5374               <programlisting>Deutsch (German)</programlisting>
5375             </listitem>
5376           </varlistentry>
5377
5378           <varlistentry>
5379             <term>charset</term>
5380
5381             <listitem>
5382               <para>This file should be present.</para>
5383
5384               <para>The <filename>charset</filename> file describes which
5385               charset a language package is written in and applies to all
5386               other language files in the package. It is possible to write
5387               some language packages without an explicit charset, but it is
5388               still strongly recommended. You'll never know in what
5389               environment your language package will be used, and neither
5390               UTF-8 nor Latin1 are guaranteed.</para>
5391
5392               <para>The whole content of this file is a string that can be
5393               recognized as a valid charset encoding. Example:</para>
5394
5395               <programlisting>UTF-8</programlisting>
5396             </listitem>
5397           </varlistentry>
5398
5399           <varlistentry>
5400             <term>all</term>
5401
5402             <listitem>
5403               <para>This file is mandatory.</para>
5404
5405               <para>The central translation file. It is essentially an inline
5406               Perl script autogenerated by <command>locales.pl</command>. To
5407               generate it, generate the directory and the two files mentioned
5408               above, and execute the following command:</para>
5409
5410               <programlisting>scripts/locales.pl &lt;langcode&gt;</programlisting>
5411
5412               <para>Otherwise you can simply copy one of the other languages.
5413               You will be told how many are missing like this:</para>
5414
5415               <programlisting>$ scripts/locales.pl en
5416 English - 0.6% - 2015/2028 missing</programlisting>
5417
5418               <para>A file named "<filename>missing</filename>" will be
5419               generated and can be edited. You can also edit the
5420               "<filename>all</filename>" file directly. Edit everything you
5421               like to fit the target language and execute
5422               <command>locales.pl</command> again. See how the missing words
5423               get fewer.</para>
5424             </listitem>
5425           </varlistentry>
5426
5427           <varlistentry>
5428             <term>Num2text</term>
5429
5430             <listitem>
5431               <para>Legacy code from SQL Ledger. It provides a means for
5432               numbers to be converted into natural language, like
5433               <literal>1523 =&gt; one thousand five hundred twenty
5434               three</literal>. If you want to provide it, it must be inlinable
5435               Perl code which provides a <function>num2text</function> sub. If
5436               an <function>init</function> sub exists it will be executed
5437               first.</para>
5438
5439               <para>Only used in the check and receipt printing module.</para>
5440             </listitem>
5441           </varlistentry>
5442
5443           <varlistentry>
5444             <term>special_chars</term>
5445
5446             <listitem>
5447               <para>kivitendo comes with a lot of interfaces to different
5448               formats, some of which are rather picky with their accepted
5449               charset. The <filename>special_chars</filename> file contains a
5450               listing of chars not suited for different file format and
5451               provides substitutions. It is written in "Simple Ini" style,
5452               containing a block for every file format.</para>
5453
5454               <para>First entry should be the order of substitution for
5455               entries as a whitespace separated list. All entries are
5456               interpolated, so <literal>\n</literal>, <literal>\x20</literal>
5457               and <literal>\\</literal> all work.</para>
5458
5459               <para>After that every entry is a special char that should be
5460               translated when writing text into such a file.</para>
5461
5462               <para>Example:</para>
5463
5464               <programlisting>[Template/XML]
5465 order=&amp; &lt; &gt; \n
5466 &amp;=&amp;amp;
5467 &lt;=&amp;lt;
5468 &gt;=&amp;gt;
5469 \n=&lt;br&gt;</programlisting>
5470
5471               <para>Note the importance of the order in this example.
5472               Substituting &lt; and &gt; befor &amp; would lead to $gt; become
5473               &amp;amp;gt;</para>
5474
5475               <para>For a list of valid formats, see the German
5476               <filename>special_chars</filename> entry. As of this writing the
5477               following are recognized:</para>
5478
5479               <programlisting>HTML
5480 URL@HTML
5481 Template/HTML
5482 Template/XML
5483 Template/LaTeX
5484 Template/OpenDocument
5485 filenames</programlisting>
5486
5487               <para>The last of which is very machine dependant. Remember that
5488               a lot of characters are forbidden by some filesystems, for
5489               exmaple MS Windows doesn't like ':' in its files where Linux
5490               doesn't mind that. If you want the files created with your
5491               language pack to be portable, find all chars that could cause
5492               trouble.</para>
5493             </listitem>
5494           </varlistentry>
5495
5496           <varlistentry>
5497             <term>missing</term>
5498
5499             <listitem>
5500               <para>This file is not a part of the language package
5501               itself.</para>
5502
5503               <para>This is a file generated by
5504               <command>scripts/locales.pl</command> while processing your
5505               locales. It's only to have the missing entries singled out and
5506               does not belong to a language package.</para>
5507             </listitem>
5508           </varlistentry>
5509
5510           <varlistentry>
5511             <term>lost</term>
5512
5513             <listitem>
5514               <para>This file is not a part of the language package
5515               itself.</para>
5516
5517               <para>Another file generated by
5518               <command>scripts/locales.pl</command>. If for any reason a
5519               translation does not appear anymore and can be deleted, it gets
5520               moved here. The last 50 or so entries deleted are saved here in
5521               case you made a typo, so that you don't have to translate
5522               everything again. If a tranlsation is missing, the lost file is
5523               checked first. If you maintain a language package, you might
5524               want to keep this safe somewhere.</para>
5525             </listitem>
5526           </varlistentry>
5527         </variablelist>
5528       </sect2>
5529     </sect1>
5530
5531     <sect1 id="devel.testsuite">
5532       <title>Die kivitendo-Test-Suite</title>
5533
5534       <sect2 id="devel.testsuite.intro">
5535         <title>Einführung</title>
5536
5537         <para>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <literal>Test::More</literal>.</para>
5538
5539         <para>Die grundlegenden Fakten sind:</para>
5540
5541         <itemizedlist>
5542           <listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem>
5543
5544           <listitem><para>Ein Script (bzw. ein Test) in <filename>f/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
5545
5546           <listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
5547
5548           <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>f/</filename>, deren
5549           Dateiname auf <literal>.t</literal> endet.</para></listitem>
5550         </itemizedlist>
5551       </sect2>
5552
5553       <sect2 id="devel.testsuite.prerequisites">
5554         <title>Voraussetzungen</title>
5555
5556         <para>Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:</para>
5557
5558         <itemizedlist>
5559           <listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core:
5560           <literal>perl-Test-Deep</literal>; openSuSE: <literal>perl-Test-Deep</literal>)</para></listitem>
5561         </itemizedlist>
5562       </sect2>
5563
5564       <sect2 id="devel.testsuite.execution">
5565         <title>
5566           Existierende Tests ausführen
5567         </title>
5568
5569         <para>Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt
5570         gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.sh</filename>.</para>
5571
5572         <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.sh</filename> ohne weitere Parameter aus
5573         dem kivitendo-Basisverzeichnis heraus ausführen.</para>
5574
5575         <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.sh</filename>. Beispielsweise:</para>
5576
5577         <programlisting>t/test.sh t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
5578       </sect2>
5579
5580
5581       <sect2 id="devel.testsuite.meaning_of_scripts">
5582         <title>
5583           Bedeutung der verschiedenen Test-Scripte
5584         </title>
5585
5586         <para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch
5587         während der Entwicklung nützliche Tests sind:</para>
5588
5589         <itemizedlist>
5590           <listitem><para><filename>t/001compile.t</filename> -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab</para></listitem>
5591           <listitem><para><filename>t/002goodperl.t</filename> -- überprüft alle Perl-Dateien auf Anwesenheit von '<literal>use strict</literal>'-Anweisungen</para></listitem>
5592           <listitem><para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von <function>system()</function> und <function>exec()</function> auf Gültigkeit</para></listitem>
5593           <listitem><para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien Tab-Zeichen enthalten</para></listitem>
5594           <listitem><para><filename>t/006spelling.t</filename> -- sucht nach häufigen Rechtschreibfehlern</para></listitem>
5595           <listitem><para><filename>t/011pod.t</filename> -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit</para></listitem>
5596         </itemizedlist>
5597
5598         <para>Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.</para>
5599       </sect2>
5600
5601       <sect2 id="devel.testsuite.create_new">
5602         <title>
5603           Neue Test-Scripte erstellen
5604         </title>
5605
5606         <para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende
5607         Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.</para>
5608
5609         <sect3 id="devel.testsuite.ideas_for_non_function_tests">
5610           <title>
5611             Ideen für neue Test-Scripte, die keine konkreten Funktionen testen
5612           </title>
5613
5614           <para> Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:</para>
5615
5616           <itemizedlist>
5617             <listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem>
5618             <listitem><para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)</para></listitem>
5619             <listitem><para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para></listitem>
5620             <listitem><para>Überprüfung auf Leerzeichen am Ende von Zeilen</para></listitem>
5621             <listitem><para>Test, ob alle zu übersetzenden Strings in <filename>locale/de/all</filename> vorhanden sind</para></listitem>
5622             <listitem><para>Test, ob alle Webseiten-Templates in <filename>templates/webpages</filename> mit vom Perl-Modul <literal>Template</literal> compiliert werden können</para></listitem>
5623           </itemizedlist>
5624         </sect3>
5625
5626         <sect3 id="devel.testsuite.directory_and_test_names">
5627           <title>
5628             Konvention für Verzeichnis- und Dateinamen
5629           </title>
5630
5631           <para>Es gibt momentan eine wenige Richtlinien, wie Test-Scripte zu benennen sind. Bitte die folgenden Punkte als Richtlinie betrachten und ihnen soweit es geht folgen:</para>
5632
5633           <itemizedlist>
5634             <listitem><para>Die Dateiendung muss <filename>.t</filename> lauten.</para></listitem>
5635
5636             <listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
5637             <filename>bad_function_params.t</filename>).</para></listitem>
5638
5639             <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen
5640             (beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem>
5641
5642             <listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist
5643             (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.</para></listitem>
5644           </itemizedlist>
5645         </sect3>
5646
5647         <sect3 id="devel.testsuite.minimal_example">
5648           <title>
5649             Minimales Skelett für eigene Scripte
5650           </title>
5651
5652           <para>Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:</para>
5653
5654           <programlisting>use Test::More tests =&gt; 0;
5655
5656 use lib 't';
5657
5658 use Support::TestSetup;
5659
5660 Support::TestSetup::login();</programlisting>
5661
5662           <para>Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie
5663           <varname>$::auth</varname>, <varname>$::form</varname> oder <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei
5664           <filename>config/kivitendo.conf</filename> im Abschnitt <literal>testing.login</literal> ein gültiger Login-Name eingetragen
5665           sein. Dieser wird für die Datenbankverbindung benötigt.</para>
5666
5667           <para>Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile <code>Support::TestSetup::login();</code>
5668           weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.</para>
5669         </sect3>
5670       </sect2>
5671     </sect1>
5672
5673     <sect1 id="devel.style-guide">
5674       <title>Stil-Richtlinien</title>
5675
5676       <para>Die folgenden Regeln haben das Ziel, den Code möglichst gut les-
5677       und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich
5678       eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden
5679       wird (Stichworte "Klammern" oder "Hash-Keys").</para>
5680
5681       <para>Diese Regeln sind keine Schikane sondern erleichtern allen das
5682       Leben!</para>
5683
5684       <para>Jeder, der einen Patch schickt, sollte seinen Code vorher
5685       überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
5686       nicht.</para>
5687
5688       <orderedlist>
5689         <listitem>
5690           <para>Es werden keine echten Tabs sondern Leerzeichen
5691           verwendet.</para>
5692         </listitem>
5693
5694         <listitem>
5695           <para>Die Einrückung beträgt zwei Leerzeichen. Beispiel:</para>
5696
5697           <programlisting>foreach my $row (@data) {
5698   if ($flag) {
5699     # do something with $row
5700   }
5701
5702   if ($use_modules) {
5703     $row-&gt;{modules} = MODULE-&gt;retrieve(
5704       id   =&gt; $row-&gt;{id},
5705       date =&gt; $use_now ? localtime() : $row-&gt;{time},
5706     );
5707   }
5708
5709   $report-&gt;add($row);
5710 }</programlisting>
5711         </listitem>
5712
5713         <listitem>
5714           <para>Öffnende geschweifte Klammern befinden sich auf der gleichen
5715           Zeile wie der letzte Befehl. Beispiele:</para>
5716
5717           <programlisting>sub debug {
5718   ...
5719 }</programlisting>
5720
5721           <para>oder</para>
5722
5723           <programlisting>if ($form-&gt;{item_rows} &gt; 0) {
5724   ...
5725 }</programlisting>
5726         </listitem>
5727
5728         <listitem>
5729           <para>Schließende geschweifte Klammern sind so weit eingerückt wie
5730           der Befehl / die öffnende schließende Klammer, die den Block
5731           gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen
5732           Beispiele wie bei 3. gelten.</para>
5733         </listitem>
5734
5735         <listitem>
5736           <para>Die Wörter "<function>else</function>",
5737           "<function>elsif</function>", "<function>while</function>" befinden
5738           sich auf der gleichen Zeile wie schließende geschweifte Klammern.
5739           Beispiele:</para>
5740
5741           <programlisting>if ($form-&gt;{sum} &gt; 1000) {
5742   ...
5743 } elsif ($form-&gt;{sum} &gt; 0) {
5744   ...
5745 } else {
5746   ...
5747 }
5748
5749 do {
5750   ...
5751 } until ($a &gt; 0);</programlisting>
5752         </listitem>
5753
5754         <listitem>
5755           <para>Parameter von Funktionsaufrufen müssen mit runden Klammern
5756           versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
5757           und grep-ähnliche Operatoren. Beispiel:</para>
5758
5759           <programlisting>$main::lxdebug-&gt;message("Could not find file.");
5760 %options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</programlisting>
5761         </listitem>
5762
5763         <listitem>
5764           <para>Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:</para>
5765
5766           <para>Generell gilt: Hashkeys und Arrayindices sollten nicht durch
5767           Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
5768           Blöcke schon. Beispiel:</para>
5769
5770           <programlisting>if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
5771   ...
5772 }
5773
5774 $array[$i + 1]             = 4;
5775 $form-&gt;{sum}              += $form-&gt;{"row_$i"};
5776 $form-&gt;{ $form-&gt;{index} } += 1;
5777
5778 map { $form-&gt;{sum} += $form-&gt;{"row_$_"} } 1..$rowcount;</programlisting>
5779         </listitem>
5780
5781         <listitem>
5782           <para>Mehrzeilige Befehle</para>
5783
5784           <orderedlist>
5785             <listitem>
5786               <para>Werden die Parameter eines Funktionsaufrufes auf mehrere
5787               Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
5788               werden, in der die ersten Funktionsparameter in der ersten Zeile
5789               stehen. Beispiel:</para>
5790
5791               <programlisting>$sth = $dbh-&gt;prepare("SELECT * FROM some_table WHERE col = ?",
5792                     $form-&gt;{some_col_value});</programlisting>
5793             </listitem>
5794
5795             <listitem>
5796               <para>Ein Spezialfall ist der ternäre Oprator "?:", der am
5797               besten in einer übersichtlichen Tabellenstruktur organisiert
5798               wird. Beispiel:</para>
5799
5800               <programlisting>my $rowcount = $form-&gt;{"row_$i"} ? $i
5801              : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
5802              :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</programlisting>
5803             </listitem>
5804           </orderedlist>
5805         </listitem>
5806
5807         <listitem>
5808           <para>Kommentare</para>
5809
5810           <orderedlist>
5811             <listitem>
5812               <para>Kommentare, die alleine in einer Zeile stehen, sollten
5813               soweit wie der Code eingerückt sein.</para>
5814             </listitem>
5815
5816             <listitem>
5817               <para>Seitliche hängende Kommentare sollten einheitlich
5818               formatiert werden.</para>
5819             </listitem>
5820
5821             <listitem>
5822               <para>Sämtliche Kommentare und Sonstiges im Quellcode ist bitte
5823               auf Englisch zu verfassen. So wie ich keine Lust habe,
5824               französischen Quelltext zu lesen, sollte auch der kivitendo
5825               Quelltext für nicht-Deutschsprachige lesbar sein.
5826               Beispiel:</para>
5827
5828               <programlisting>my $found = 0;
5829 while (1) {
5830   last if $found;
5831
5832   # complicated check
5833   $found = 1 if //
5834 }
5835
5836 $i  = 0        # initialize $i
5837 $n  = $i;      # save $i
5838 $i *= $const;  # do something crazy
5839 $i  = $n;      # recover $i</programlisting>
5840             </listitem>
5841           </orderedlist>
5842         </listitem>
5843
5844         <listitem>
5845           <para>Hashkeys sollten nur in Anführungszeichen stehen, wenn die
5846           Interpolation gewünscht ist. Beispiel:</para>
5847
5848           <programlisting>$form-&gt;{sum}      = 0;
5849 $form-&gt;{"row_$i"} = $form-&gt;{"row_$i"} - 5;
5850 $some_hash{42}    = 54;</programlisting>
5851         </listitem>
5852
5853         <listitem>
5854           <para>Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen
5855           unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
5856           wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in
5857           grossen Tabellen), dann ist Lesbarkeit vorzuziehen.</para>
5858
5859           <para>Als Beispiel sei die Funktion
5860           <function>print_options</function> aus
5861           <filename>bin/mozilla/io.pl</filename> angeführt.</para>
5862         </listitem>
5863
5864         <listitem>
5865           <para>Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind
5866           unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs
5867           verfälschen.</para>
5868
5869           <para>Emacs und vim haben beide recht einfache Methoden zur
5870           Entfernung von trailing whitespace. Emacs kennt das Kommande
5871           <command>nuke-trailing-whitespace</command>, vim macht das gleiche
5872           manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
5873           BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern
5874           gebunden.</para>
5875         </listitem>
5876
5877         <listitem>
5878           <para>Es wird kein <command>perltidy</command> verwendet.</para>
5879
5880           <para>In der Vergangenheit wurde versucht,
5881           <command>perltidy</command> zu verwenden, um einen einheitlichen
5882           Stil zu erlangen. Es hat sich aber gezeigt, dass
5883           <command>perltidy</command>s sehr eigenwilliges Verhalten, was
5884           Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für
5885           den Interessierten sind hier die
5886           <command>perltidy</command>-Optionen, die grob den beschriebenen
5887           Richtlinien entsprechen:</para>
5888
5889           <programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
5890 -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
5891 -lp -vt=1 -vtc=1</programlisting>
5892         </listitem>
5893
5894         <listitem>
5895           <para><varname>STDERR</varname> ist tabu. Unkonditionale
5896           Debugmeldungen auch.</para>
5897
5898           <para>kivitendo bietet mit dem Modul <classname>LXDebug</classname>
5899           einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
5900           Grund, nach <varname>STDERR</varname> zu schreiben.</para>
5901
5902           <para>Die <classname>LXDebug</classname>-Methode
5903           "<function>message</function>" nimmt als ersten Paramter außerdem
5904           eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer
5905           angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden
5906           und werden in den meisten Fällen auch vom Repository
5907           zurückgewiesen.</para>
5908         </listitem>
5909
5910         <listitem>
5911           <para>Alle neuen Module müssen use strict verwenden.</para>
5912
5913           <para><varname>$form</varname>, <varname>$auth</varname>,
5914           <varname>$locale</varname>, <varname>$lxdebug</varname> und
5915           <varname>%myconfig</varname> werden derzeit aus dem main package
5916           importiert (siehe <xref linkend="devel.globals" />. Alle anderen
5917           Konstrukte sollten lexikalisch lokal gehalten werden.</para>
5918         </listitem>
5919       </orderedlist>
5920     </sect1>
5921
5922     <sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
5923       <title>Dokumentation erstellen</title>
5924
5925       <sect2 id="devel.build-doc.introduction">
5926         <title>Einführung</title>
5927
5928         <para>Diese Dokumentation ist in <productname>DocBook</productname>
5929         XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor.
5930         Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen
5931         Editor nutzt, der spezielle Unterstützung für
5932         <productname>DocBook</productname> mitbringt. Wir empfehlen dafür den
5933         <ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
5934         Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos
5935         ist.</para>
5936       </sect2>
5937
5938       <sect2 id="devel.build-doc.required-software">
5939         <title>Benötigte Software</title>
5940
5941         <para>Bei <productname>DocBook</productname> ist Prinzip, dass
5942         ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden
5943         dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML
5944         erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script
5945         <command>scripts/build_doc.sh</command>.</para>
5946
5947         <para>Das Script benötigt zur Konvertierung verschiedene
5948         Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt
5949         werden:</para>
5950
5951         <itemizedlist>
5952           <listitem>
5953             <para><ulink
5954             url="http://www.oracle.com/technetwork/java/index.html">Java</ulink>
5955             in einer halbwegs aktuellen Version</para>
5956           </listitem>
5957
5958           <listitem>
5959             <para>Das Java-Build-System <ulink
5960             url="http://ant.apache.org/">Apache Ant</ulink></para>
5961           </listitem>
5962
5963           <listitem>
5964             <para>Das Dokumentations-System Dobudish für
5965             <productname>DocBook</productname> 4.5, eine Zusammenstellung
5966             diverser Stylesheets und Grafiken zur Konvertierung von
5967             <productname>DocBook</productname> XML in andere Formate. Das
5968             Paket, das benötigt wird, ist zum Zeitpunkt der
5969             Dokumentationserstellung
5970             <filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
5971             url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink>
5972             bereitsteht.</para>
5973           </listitem>
5974         </itemizedlist>
5975
5976         <para>Apache Ant sowie ein dazu passendes Java Runtime Environment
5977         sind auf allen gängigen Plattformen verfügbar. Beispiel für
5978         Debian/Ubuntu:</para>
5979
5980         <programlisting>apt-get install ant openjdk-7-jre</programlisting>
5981
5982         <para>Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis
5983         <filename>doc/build</filename> entpackt werden. Beispiel unter der
5984         Annahme, das <productname>Dobudish</productname> in
5985         <filename>$HOME/Downloads</filename> heruntergeladen wurde:</para>
5986
5987         <programlisting>cd doc/build
5988 unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
5989       </sect2>
5990
5991       <sect2 id="devel.build-doc.build">
5992         <title>PDFs und HTML-Seiten erstellen</title>
5993
5994         <para>Die eigentliche Konvertierung erfolgt nach Installation der
5995         benötigten Software mit einem einfachen Aufruf direkt aus dem
5996         kivitendo-Installationsverzeichnis heraus:</para>
5997
5998         <programlisting>./scripts/build_doc.sh</programlisting>
5999       </sect2>
6000
6001       <sect2 id="devel.build-doc.repository">
6002         <title>Einchecken in das Git-Repository</title>
6003
6004         <para>Sowohl die XML-Datei als auch die erzeugten PDF- und
6005         HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass
6006         nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut
6007         und alles zusammen in einem Commit eingecheckt werden sollten.</para>
6008
6009         <para>Die "<filename>dobudish</filename>"-Verzeichnisse bzw.
6010         symbolischen Links gehören hingegen nicht in das Repository.</para>
6011       </sect2>
6012     </sect1>
6013   </chapter>
6014 </book>