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