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" (read-only)
1516         angezeigt. Unter <guimenu>System</guimenu>
1517         -&gt; <guisubmenu>Mandantenkonfiguration</guisubmenu> können
1518         die Einstellungen auch geändert werden. Dabei ist zu beachten,
1519         dass eine Änderung vorhandene Daten so belässt und damit
1520         evtl. die Ergebnisse verfälscht. Dies gilt vor Allem für die
1521         Warenbuchungsmethode (siehe auch
1522         <link linkend="config.eur.inventory-system-perpetual">
1523         Bemerkungen zu Bestandsmethode</link>).</para>
1524       </sect2>
1525
1526       <sect2 id="config.eur.inventory-system-perpetual">
1527         <title>Bemerkungen zu Bestandsmethode</title>
1528
1529         <para>Die Bestandsmethode ist eigentlich eine sehr elegante Methode,
1530         funktioniert in kivitendo aber nur unter bestimmten Bedingungen:
1531         Voraussetzung ist, daß auch immer alle Einkaufsrechnungen gepflegt
1532         werden, und man beim Jahreswechsel nicht mit einer leeren Datenbank
1533         anfängt, da bei jedem Verkauf anhand der gesamten Rechnungshistorie
1534         der Einkaufswert der Ware nach dem FIFO-Prinzip aus den
1535         Einkaufsrechnungen berechnet wird.</para>
1536
1537         <para>Die Bestandsmethode kann vom Prinzip her also nur funktioneren,
1538         wenn man mit den Buchungen bei Null anfängt, und man kann auch nicht
1539         im laufenden Betrieb von der Aufwandsmethode zur Bestandsmethode
1540         wechseln.</para>
1541       </sect2>
1542
1543       <sect2 id="config.eur.knonw-issues">
1544         <title>Bekannte Probleme</title>
1545
1546         <para>Bei bestimmten Berichten kann man derzeit noch inviduell
1547         einstellen, ob man nach Ist- oder Sollversteuerung auswertet, und es
1548         werden im Code Variablen wie $accrual oder $cash gesetzt. Diese
1549         Codestellen wurden noch nicht angepasst, sondern nur die, wo bisher
1550         die Konfigurationsvariable
1551         <varname>$::lx_office_conf{system}-&gt;{eur}</varname> ausgewertet
1552         wurde.</para>
1553
1554         <para>Es fehlen Hilfetext beim Neuanlegen eines Mandanten, was die
1555         Optionen bewirken, z.B. mit zwei Standardfällen.</para>
1556       </sect2>
1557     </sect1>
1558
1559     <sect1 id="config.skr04-update-3804">
1560       <title>SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</title>
1561
1562       <sect2 id="config.skr04-update-3804.introduction">
1563         <title>Einführung</title>
1564
1565         <para>Die Umsatzsteuerumstellung auf 19% für SKR04 für die
1566         Steuerschlüssel "EU ohne USt-ID Nummer" ist erst 2010 erfolgt.
1567         kivitendo beinhaltet ein Upgradeskript, das das Konto 3804 automatisch
1568         erstellt und die Steuereinstellungen korrekt einstellt. Hat der
1569         Benutzer aber schon selber das Konto 3804 angelegt, oder gab es schon
1570         Buchungen im Zeitraum nach dem 01.01.2007 auf das Konto 3803, wird das
1571         Upgradeskript vorsichtshalber nicht ausgeführt, da der Benutzer sich
1572         vielleicht schon selbst geholfen hat und mit seinen Änderungen
1573         zufrieden ist. Die korrekten Einstellungen kann man aber auch per Hand
1574         ausführen. Nachfolgend werden die entsprechenden Schritte anhand von
1575         Screenshots dargestellt.</para>
1576
1577         <para>Für den Fall, daß Buchungen mit der Steuerschlüssel "EU ohne
1578         USt.-IdNr." nach dem 01.01.2007 erfolgt sind, ist davon auszugehen,
1579         dass diese mit dem alten Umsatzsteuersatz von 16% gebucht worden sind,
1580         und diese Buchungen sollten entsprechend kontrolliert werden.</para>
1581       </sect2>
1582
1583       <sect2 id="config.skr04-update-3804.create-chart">
1584         <title>Konto 3804 manuell anlegen</title>
1585
1586         <para>Die folgenden Schritte sind notwendig, um das Konto manuell
1587         anzulegen und zu konfigurieren. Zuerst wird in
1588         <guimenu>System</guimenu> -&gt;
1589         <guisubmenu>Kontenübersicht</guisubmenu> -&gt; <guimenuitem>Konto
1590         erfassen</guimenuitem> das Konto angelegt.</para>
1591
1592         <screenshot>
1593           <screeninfo>Konto 3804 erfassen</screeninfo>
1594
1595           <mediaobject>
1596             <imageobject>
1597               <imagedata fileref="images/skr04-update-3804/konto3804.png" />
1598             </imageobject>
1599           </mediaobject>
1600         </screenshot>
1601
1602         <para>
1603          Als Zweites muss Steuergruppe 13 für Konto 3803 angepasst werden. Dazu unter <guimenu>System</guimenu> -&gt;
1604          <guisubmenu>Steuern</guisubmenu> -&gt; <guimenuitem>Bearbeiten</guimenuitem> den Eintrag mit Steuerschlüssel 13 auswählen und ihn
1605          wie im folgenden Screenshot angezeigt anpassen.
1606         </para>
1607
1608         <screenshot>
1609           <screeninfo>Steuerschlüssel 13 für 3803 (16%) anpassen</screeninfo>
1610
1611           <mediaobject>
1612             <imageobject>
1613               <imagedata fileref="images/skr04-update-3804/steuer3803.png" />
1614             </imageobject>
1615           </mediaobject>
1616         </screenshot>
1617
1618         <para>
1619          Als Drittes wird ein neuer Eintrag mit Steuerschlüssel 13 für Konto 3804 (19%) angelegt. Dazu unter <guimenu>System</guimenu> -&gt;
1620          <guisubmenu>Steuern</guisubmenu> -&gt; <guimenuitem>Erfassen</guimenuitem> auswählen und die Werte aus dem Screenshot übernehmen.
1621         </para>
1622
1623         <screenshot>
1624           <screeninfo>Steuerschlüssel 13 für 3804 (19%) anlegen</screeninfo>
1625
1626           <mediaobject>
1627             <imageobject>
1628               <imagedata fileref="images/skr04-update-3804/steuer3804.png" />
1629             </imageobject>
1630           </mediaobject>
1631         </screenshot>
1632
1633         <para>
1634          Als Nächstes sind alle Konten anzupassen, die als Steuerautomatikkonto die 3803 haben, sodass sie ab dem 1.1.2007 auch
1635          Steuerautomatik auf 3804 bekommen. Dies betrifft in der Standardkonfiguration die Konten 4315 und 4726. Als Beispiel für 4315
1636          müssen Sie dazu unter <guimenu>System</guimenu> -&gt; <guisubmenu>Kontenübersicht</guisubmenu> -&gt; <guimenuitem>Konten
1637          anzeigen</guimenuitem> das Konto 4315 anklicken und die Einstellungen wie im Screenshot gezeigt vornehmen.
1638         </para>
1639
1640         <screenshot>
1641           <screeninfo>Konto 4315 anpassen</screeninfo>
1642
1643           <mediaobject>
1644             <imageobject>
1645               <imagedata fileref="images/skr04-update-3804/konto4315.png" />
1646             </imageobject>
1647           </mediaobject>
1648         </screenshot>
1649
1650         <para>
1651          Als Letztes sollte die Steuerliste unter <guimenu>System</guimenu> -&gt; <guisubmenu>Steuern</guisubmenu> -&gt;
1652          <guimenuitem>Bearbeiten</guimenuitem> kontrolliert werden. Zum Vergleich der Screenshot.
1653         </para>
1654
1655         <screenshot>
1656           <screeninfo>Steuerliste vergleichen</screeninfo>
1657
1658           <mediaobject>
1659             <imageobject>
1660               <imagedata fileref="images/skr04-update-3804/steuerliste.png" />
1661             </imageobject>
1662           </mediaobject>
1663         </screenshot>
1664       </sect2>
1665     </sect1>
1666
1667     <sect1 id="config.client">
1668       <title>Einstellungen pro Mandant</title>
1669
1670       <para>Einige Einstellungen können von einem Benutzer mit dem
1671       <link linkend="Zusammenhänge">Recht</link> "Administration
1672       (Für die Verwaltung der aktuellen Instanz aus einem Userlogin heraus)"
1673       gemacht werden. Diese Einstellungen sind dann für die aktuellen
1674       Mandanten-Datenbank gültig. Die Einstellungen sind
1675       unter <guimenu>System</guimenu>
1676       -&gt; <guisubmenu>Mandantenkonfiguration</guisubmenu> erreichbar.</para>
1677
1678       <para>Bitte beachten Sie die Hinweise zu den einzelnen
1679       Einstellungen. Einige Einstellungen sollten nicht ohne Weiteres
1680       im laufenden Betrieb geändert werden (siehe
1681       auch <link linkend="config.eur.inventory-system-perpetual">Bemerkungen zu
1682       Bestandsmethode</link>).</para>
1683
1684       <para>Die Einstellungen <literal>show_bestbefore</literal>
1685       und <literal>payments_changeable</literal> aus dem
1686       Abschnitt <literal>features</literal> und die Einstellungen im
1687       Abschnitt <literal>datev_check</literal> (sofern schon vorhanden)
1688       der <link linkend="config.config-file">kivitendo-Konfigurationsdatei</link>
1689       werden bei einem Datenbankupdate einer älteren Version automatisch
1690       übernommen. Diese Einträge können danach aus der Konfigurationsdatei
1691       entfernt werden.</para>
1692     </sect1>
1693
1694     <sect1 id="kivitendo-ERP-verwenden">
1695       <title>kivitendo ERP verwenden</title>
1696
1697       <para>Nach erfolgreicher Installation ist der Loginbildschirm unter
1698       folgender URL erreichbar:</para>
1699
1700       <para><ulink
1701       url="http://localhost/kivitendo-erp/login.pl">http://localhost/kivitendo-erp/login.pl</ulink></para>
1702
1703       <para>Die Administrationsseite erreichen Sie unter:</para>
1704
1705       <para><ulink
1706       url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
1707     </sect1>
1708   </chapter>
1709
1710   <chapter id="features" xreflabel="Features und Funktionen">
1711     <title>Features und Funktionen</title>
1712
1713     <sect1 id="features.periodic-invoices"
1714            xreflabel="Wiedekehrende Rechnungen">
1715       <title>Wiederkehrende Rechnungen</title>
1716
1717       <sect2 id="features.periodic-invoices.introduction"
1718              xreflabel="Einführung in wiederkehrende Rechnungen">
1719         <title>Einführung</title>
1720
1721         <para>Wiederkehrende Rechnungen werden als normale Aufträge definiert
1722         und konfiguriert, mit allen dazugehörigen Kunden- und Artikelangaben.
1723         Die konfigurierten Aufträge werden später automatisch in Rechnungen
1724         umgewandelt, so als ob man den Workflow benutzen würde, und auch die
1725         Auftragsnummer wird übernommen, sodass alle wiederkehrenden
1726         Rechnungen, die aus einem Auftrag erstellt wurden, später leicht
1727         wiederzufinden sind.</para>
1728       </sect2>
1729
1730       <sect2 id="features.periodic-invoices.configuration"
1731              xreflabel="Konfiguration von wiederkehrenden Rechnungen">
1732         <title>Konfiguration</title>
1733
1734         <para>Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren,
1735         findet sich beim Bearbeiten des Auftrags ein neuer Knopf
1736         "Konfigurieren", der ein neues Fenster öffnet, in dem man die nötigen
1737         Parameter einstellen kann. Hinter dem Knopf wird außerdem noch
1738         angezeigt, ob der Auftrag als wiederkehrende Rechnung konfiguriert ist
1739         oder nicht.</para>
1740
1741         <para>Folgende Parameter kann man konfigurieren:</para>
1742
1743         <variablelist>
1744           <varlistentry>
1745             <term>Status</term>
1746
1747             <listitem>
1748               <para>Bei aktiven Rechnungen wird automatisch eine Rechnung
1749               erstellt, wenn die Periodizität erreicht ist (z.B. Anfang eines
1750               neuen Monats).</para>
1751
1752               <para>Ist ein Auftrag nicht aktiv, so werden für ihn auch keine
1753               wiederkehrenden Rechnungen erzeugt. Stellt man nach längerer
1754               nicht-aktiver Zeit einen Auftrag wieder auf aktiv, wird beim
1755               nächsten Periodenwechsel für alle Perioden, seit der letzten
1756               aktiven Periode, jeweils eine Rechnung erstellt. Möchte man dies
1757               verhindern, muss man vorher das Startdatum neu setzen.</para>
1758
1759               <para>Für gekündigte Aufträge werden nie mehr Rechnungen
1760               erstellt. Man kann sich diese Aufträge aber gesondert in den
1761               Berichten anzeigen lassen.</para>
1762             </listitem>
1763           </varlistentry>
1764
1765           <varlistentry>
1766             <term>Periodizität</term>
1767
1768             <listitem>
1769               <para>Ob monatlich, quartalsweise oder jährlich auf neue
1770               Rechnungen überprüft werden soll. Für jede Periode seit dem
1771               Startdatum wird überprüft, ob für die Periode (beginnend immer
1772               mit dem ersten Tag der Periode) schon eine Rechnung erstellt
1773               wurde. Unter Umständen können bei einem Startdatum in der
1774               Vergangenheit gleich mehrere Rechnungen erstellt werden.</para>
1775             </listitem>
1776           </varlistentry>
1777
1778           <varlistentry>
1779             <term>Buchen auf</term>
1780
1781             <listitem>
1782               <para>Das Forderungskonto, in der Regel "Forderungen aus
1783               Lieferungen und Leistungen". Das Gegenkonto ergibt sich aus den
1784               Buchungsgruppen der betreffenden Waren.</para>
1785             </listitem>
1786           </varlistentry>
1787
1788           <varlistentry>
1789             <term>Startdatum</term>
1790
1791             <listitem>
1792               <para>ab welchem Datum auf Rechnungserstellung geprüft werden
1793               soll</para>
1794             </listitem>
1795           </varlistentry>
1796
1797           <varlistentry>
1798             <term>Enddatum</term>
1799
1800             <listitem>
1801               <para>ab wann keine Rechnungen mehr erstellt werden
1802               sollen</para>
1803             </listitem>
1804           </varlistentry>
1805
1806           <varlistentry>
1807             <term>Automatische Verlängerung um x Monate</term>
1808
1809             <listitem>
1810               <para>Sollen die wiederkehrenden Rechnungen bei Erreichen des
1811               eingetragenen Enddatums weiterhin erstellt werden, so kann man
1812               hier die Anzahl der Monate eingeben, um die das Enddatum
1813               automatisch nach hinten geschoben wird.</para>
1814             </listitem>
1815           </varlistentry>
1816
1817           <varlistentry>
1818             <term>Drucken</term>
1819
1820             <listitem>
1821               <para>Sind Drucker konfiguriert, so kann man sich die erstellten
1822               Rechnungen auch gleich ausdrucken lassen.</para>
1823             </listitem>
1824           </varlistentry>
1825         </variablelist>
1826
1827         <para>Nach Erstellung der Rechnungen kann eine E-Mail mit
1828         Informationen zu den erstellten Rechnungen verschickt werden.
1829         Konfiguriert wird dies in der <link
1830         linkend="config.config-file.sections-parameters">Konfigurationsdatei</link>
1831         <filename>config/kivitendo.conf</filename> im Abschnitt
1832         <varname>[periodic_invoices]</varname>.</para>
1833       </sect2>
1834
1835       <sect2 id="features.periodic-invoices.reports">
1836         <title>Auflisten</title>
1837
1838         <para>Unter Verkauf-&gt;Berichte-&gt;Aufträge finden sich zwei neue
1839         Checkboxen, "Wiederkehrende Rechnungen aktiv" und "Wiederkehrende
1840         Rechnungen inaktiv", mit denen man sich einen Überglick über die
1841         wiederkehrenden Rechnungen verschaffen kann.</para>
1842       </sect2>
1843
1844       <sect2 id="features.periodic-invoices.task-server">
1845         <title>Erzeugung der eigentlichen Rechnungen</title>
1846
1847         <para>Die zeitliche und periodische Überprüfung, ob eine
1848         wiederkehrende Rechnung automatisch erstellt werden soll, geschieht
1849         durch den <link linkend="config.task-server">Taskserver</link>, einen
1850         externen Dienst, der automatisch beim Start des Servers gestartet
1851         werden sollte.</para>
1852       </sect2>
1853
1854       <sect2 id="features.periodic-invoices.create-for-current-month">
1855         <title>Erste Rechnung für aktuellen Monat erstellen</title>
1856
1857         <para>Will man im laufenden Monat eine monatlich wiederkehrende
1858         Rechnung inkl. des laufenden Monats starten, stellt man das Startdatum
1859         auf den Monatsanfang und wartet ein paar Minuten, bis der Taskserver
1860         den neu konfigurieren Auftrag erkennt und daraus eine Rechnung
1861         generiert hat. Alternativ setzt man das Startdatum auf den
1862         Monatsersten des Folgemonats und erstellt die erste Rechnung direkt
1863         manuell über den Workflow.</para>
1864       </sect2>
1865     </sect1>
1866
1867     <sect1 id="dokumentenvorlagen-und-variablen">
1868       <title>Dokumentenvorlagen und verfügbare Variablen</title>
1869
1870       <sect2 id="dokumentenvorlagen-und-variablen.einführung">
1871         <title>Einführung</title>
1872
1873         <para>Dies ist eine Auflistung der Standard-Dokumentenvorlagen und
1874         aller zur Bearbeitung verfügbaren Variablen. Eine Variable wird in
1875         einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form
1876         <function>&lt;%variablenname%&gt;</function> verwendet wird. Für
1877         LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
1878         (siehe <xref
1879         linkend="dokumentenvorlagen-und-variablen.tag-style" />).</para>
1880
1881         <para>Früher wurde hier nur über LaTeX gesprochen. Inzwischen
1882         unterstützt kivitendo aber auch OpenDocument-Vorlagen. Sofern es nicht
1883         ausdrücklich eingeschränkt wird, gilt das im Folgenden gesagte für
1884         alle Vorlagenarten.</para>
1885
1886         <para>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
1887         verfügbar als hier aufgelistet werden. Die meisten davon können
1888         allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
1889         werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann
1890         diese wie folgt erhalten werden:</para>
1891
1892         <itemizedlist>
1893           <listitem>
1894             <para><filename>SL/Form.pm</filename> öffnen und am Anfang die
1895             Zeile "<command>use Data::Dumper;</command>" einfügen.</para>
1896           </listitem>
1897
1898           <listitem>
1899             <para>In <filename>Form.pm</filename> die Funktion
1900             <function>parse_template</function> suchen und hier die Zeile
1901             <command>print(STDERR Dumper($self));</command> einfügen.</para>
1902           </listitem>
1903
1904           <listitem>
1905             <para>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
1906             ein PDF für eine Rechnung erzeugen.</para>
1907           </listitem>
1908
1909           <listitem>
1910             <para>Im <filename>error.log</filename> Apache steht die Ausgabe
1911             der Variablen <varname>$self</varname> in der Form <varname>'key'
1912             =&gt; 'value',</varname>. Alle <varname>key</varname>s sind
1913             verfügbar.</para>
1914           </listitem>
1915         </itemizedlist>
1916       </sect2>
1917
1918       <sect2 id="dokumentenvorlagen-und-variablen.variablen-ausgeben">
1919         <title>Variablen ausgeben</title>
1920
1921         <para>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
1922         Tags geschrieben werden, also z.B.
1923         <varname>&lt;%variablenname%&gt;</varname>.</para>
1924
1925         <para>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
1926         die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
1927         <varname>&lt;%variablenname FLAG1 FLAG2%&gt;</varname>. Momentan
1928         werden die folgenden Flags unterstützt:</para>
1929
1930         <itemizedlist>
1931           <listitem>
1932             <para><option>NOFORMAT</option> gilt nur für Zahlenwerte und gibt
1933             den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
1934             mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
1935             damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</para>
1936           </listitem>
1937
1938           <listitem>
1939             <para><option>NOESCAPE</option> unterdrückt das Escapen von
1940             Sonderzeichen für die Vorlagensprache. Wenn also in einer
1941             Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
1942             auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
1943             ist dieses Flag sinnvoll.</para>
1944           </listitem>
1945         </itemizedlist>
1946
1947         <para>Beispiel:</para>
1948
1949         <programlisting>&lt;%quototal NOFORMAT%&gt;</programlisting>
1950       </sect2>
1951
1952       <sect2 id="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">
1953         <title>Verwendung in Druckbefehlen</title>
1954
1955         <para>In der Admininstration können Drucker definiert werden. Auch im
1956         dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
1957         und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
1958         den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
1959         <function>`...`</function> nicht zu unerwünschtem Verhalten
1960         führen.</para>
1961
1962         <para>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
1963         für das die Telefonnummer eines Ansprechpartners als Teil der
1964         Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
1965         z.B. wie folgt aussehen:</para>
1966
1967         <programlisting>send_fax --number &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</programlisting>
1968       </sect2>
1969
1970       <sect2 id="dokumentenvorlagen-und-variablen.tag-style"
1971              xreflabel="Anfang und Ende der Tags verändern">
1972         <title>Anfang und Ende der Tags verändern</title>
1973
1974         <para>Der Standardstil für Tags sieht vor, dass ein Tag mit dem
1975         Kleinerzeichen und einem Prozentzeichen beginnt und mit dem
1976         Prozentzeichen und dem Größerzeichen endet, beispielsweise
1977         <function>&lt;%customer%&gt;</function>. Da diese Form aber z.B. in
1978         LaTeX zu Problemen führen kann, weil das Prozentzeichen dort
1979         Kommentare einleitet, kann pro HTML- oder LaTeX-Dokumentenvorlage der
1980         Stil umgestellt werden.</para>
1981
1982         <para>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
1983         Format gültigen Kommentarzeichen anfangen, dann
1984         <function>config:</function> enthalten, die entsprechende Option
1985         setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
1986         enden. Beispiel für LaTeX:</para>
1987
1988         <programlisting>% config: tag-style=($ $)</programlisting>
1989
1990         <para>Dies würde kivitendo dazu veranlassen, Variablen zu ersetzen,
1991         wenn sie wie folgt aussehen: <function>($customer$)</function>. Das
1992         äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</para>
1993
1994         <programlisting>&lt;!-- config: tag-style=($ $) --&gt;</programlisting>
1995       </sect2>
1996
1997       <sect2 id="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">
1998         <title>Zuordnung von den Dateinamen zu den Funktionen</title>
1999
2000         <para>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
2001         welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
2002         "<filename>.ext</filename>" geeignet zu ersetzen:
2003         "<filename>.tex</filename>" für LaTeX-Vorlagen und
2004         "<filename>.odt</filename>" für OpenDocument-Vorlagen.</para>
2005
2006         <variablelist>
2007           <varlistentry>
2008             <term><filename>bin_list.ext</filename></term>
2009
2010             <listitem>
2011               <para>Lagerliste</para>
2012             </listitem>
2013           </varlistentry>
2014
2015           <varlistentry>
2016             <term><filename>check.ext</filename></term>
2017
2018             <listitem>
2019               <para>?</para>
2020             </listitem>
2021           </varlistentry>
2022
2023           <varlistentry>
2024             <term><filename>invoice.ext</filename></term>
2025
2026             <listitem>
2027               <para>Rechnung</para>
2028             </listitem>
2029           </varlistentry>
2030
2031           <varlistentry>
2032             <term><filename>packing_list.ext</filename></term>
2033
2034             <listitem>
2035               <para>Packliste</para>
2036             </listitem>
2037           </varlistentry>
2038
2039           <varlistentry>
2040             <term><filename>pick_list.ext</filename></term>
2041
2042             <listitem>
2043               <para>Sammelliste</para>
2044             </listitem>
2045           </varlistentry>
2046
2047           <varlistentry>
2048             <term><filename>purchase_delivery_order.ext</filename></term>
2049
2050             <listitem>
2051               <para>Lieferschein (Einkauf)</para>
2052             </listitem>
2053           </varlistentry>
2054
2055           <varlistentry>
2056             <term><filename>purcharse_order.ext</filename></term>
2057
2058             <listitem>
2059               <para>Bestellung an Lieferanten</para>
2060             </listitem>
2061           </varlistentry>
2062
2063           <varlistentry>
2064             <term><filename>request_quotation.ext</filename></term>
2065
2066             <listitem>
2067               <para>Anfrage an Lieferanten</para>
2068             </listitem>
2069           </varlistentry>
2070
2071           <varlistentry>
2072             <term><filename>sales_delivery_order.ext</filename></term>
2073
2074             <listitem>
2075               <para>Lieferschein (Verkauf)</para>
2076             </listitem>
2077           </varlistentry>
2078
2079           <varlistentry>
2080             <term><filename>sales_order.ext</filename></term>
2081
2082             <listitem>
2083               <para>Bestellung</para>
2084             </listitem>
2085           </varlistentry>
2086
2087           <varlistentry>
2088             <term><filename>sales_quotation.ext</filename></term>
2089
2090             <listitem>
2091               <para>Angebot an Kunden</para>
2092             </listitem>
2093           </varlistentry>
2094
2095           <varlistentry>
2096             <term><filename>zahlungserinnerung.ext</filename></term>
2097
2098             <listitem>
2099               <para>Mahnung (Dateiname im Programm konfigurierbar)</para>
2100             </listitem>
2101           </varlistentry>
2102
2103           <varlistentry>
2104             <term><filename>zahlungserinnerung_invoice.ext</filename></term>
2105
2106             <listitem>
2107               <para>Rechnung über Mahngebühren (Dateiname im Programm
2108               konfigurierbar)</para>
2109             </listitem>
2110           </varlistentry>
2111         </variablelist>
2112       </sect2>
2113
2114       <sect2 id="dokumentenvorlagen-und-variablen.dateinamen-erweitert">
2115         <title>Sprache, Drucker und E-Mail</title>
2116
2117         <para>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
2118         eingearbeitet. So wird aus der Vorlage
2119         <filename>sales_order.ext</filename> bei Sprache
2120         <function>de</function> und Druckerkürzel <function>lpr2</function>
2121         der Vorlagenname <filename>sales_order_de_lpr2.ext</filename>.
2122         Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
2123         bekommen dann noch das Kürzel <filename>_email</filename>, der
2124         vollständige Vorlagenname wäre dann
2125         <filename>sales_order_email_de_lpr2.ext</filename>. In allen Fällen
2126         kann eine Standarddatei <filename>default.ext</filename> hinterlegt
2127         werden. Diese wird verwendet, wenn keine der anderen Varianten
2128         gefunden wird.</para>
2129
2130         <para>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
2131         der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
2132         verschickt wird, ist:</para>
2133
2134         <orderedlist>
2135           <listitem>
2136             <para><filename>sales_order_email_de_lpr2.tex</filename></para>
2137           </listitem>
2138
2139           <listitem>
2140             <para><filename>sales_order_de_lpr2.tex</filename></para>
2141           </listitem>
2142
2143           <listitem>
2144             <para><filename>sales_order.tex</filename></para>
2145           </listitem>
2146
2147           <listitem>
2148             <para><filename>default.tex</filename></para>
2149           </listitem>
2150         </orderedlist>
2151
2152         <para>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
2153         Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
2154         siehe dazu <xref
2155         linkend="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta" />.</para>
2156       </sect2>
2157
2158       <sect2 id="dokumentenvorlagen-und-variablen.allgemeine-variablen">
2159         <title>Allgemeine Variablen, die in allen Vorlagen vorhanden
2160         sind</title>
2161
2162         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"
2163                xreflabel="Metainformationen zur angeforderten Vorlage">
2164           <title>Metainformationen zur angeforderten Vorlage</title>
2165
2166           <para>Diese Variablen liefern Informationen darüber welche Variante
2167           einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
2168           Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
2169           Formulare einbinden möchten.</para>
2170
2171           <variablelist>
2172             <varlistentry>
2173               <term><varname>template_meta.formname</varname></term>
2174
2175               <listitem>
2176                 <para>Basisname der Vorlage. Identisch mit der <link
2177                 linkend="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">Zurordnung
2178                 zu den Dateinamen</link> ohne die Erweiterung. Ein
2179                 Verkaufsauftrag enthält hier
2180                 <constant>sales_order</constant>.</para>
2181               </listitem>
2182             </varlistentry>
2183
2184             <varlistentry>
2185               <term><varname>template_meta.language.description</varname></term>
2186
2187               <listitem>
2188                 <para>Beschreibung der verwendeten Sprache</para>
2189               </listitem>
2190             </varlistentry>
2191
2192             <varlistentry>
2193               <term><varname>template_meta.language.template_code</varname></term>
2194
2195               <listitem>
2196                 <para>Vorlagenürzel der verwendeten Sprache, identisch mit dem
2197                 Kürzel das im Dateinamen verwendetet wird.</para>
2198               </listitem>
2199             </varlistentry>
2200
2201             <varlistentry>
2202               <term><varname>template_meta.language.output_numberformat</varname></term>
2203
2204               <listitem>
2205                 <para>Zahlenformat der verwendeten Sprache in der Form
2206                 "<constant>1.000,00</constant>". Experimentell! Nur
2207                 interessant für Vorlagen die mit unformatierten Werten
2208                 arbeiten.</para>
2209               </listitem>
2210             </varlistentry>
2211
2212             <varlistentry>
2213               <term><varname>template_meta.language.output_dateformat</varname></term>
2214
2215               <listitem>
2216                 <para>Datumsformat der verwendeten Sprache in der Form
2217                 "<constant>dd.mm.yyyy</constant>". Experimentell! Nur
2218                 interessant für Vorlagen die mit unformatierten Werten
2219                 arbeiten.</para>
2220               </listitem>
2221             </varlistentry>
2222
2223             <varlistentry>
2224               <term><varname>template_meta.format</varname></term>
2225
2226               <listitem>
2227                 <para>Das angeforderte Format. Kann im Moment die Werte
2228                 <constant>pdf</constant>, <constant>postscript</constant>,
2229                 <constant>html</constant>, <constant>opendocument</constant>,
2230                 <constant>opendocument_pdf</constant> und
2231                 <constant>excel</constant> enthalten.</para>
2232               </listitem>
2233             </varlistentry>
2234
2235             <varlistentry>
2236               <term><varname>template_meta.extension</varname></term>
2237
2238               <listitem>
2239                 <para>Dateierweiterung, wie im Dateinamen. Wird aus
2240                 <constant>format</constant> entschieden.</para>
2241               </listitem>
2242             </varlistentry>
2243
2244             <varlistentry>
2245               <term><varname>template_meta.media</varname></term>
2246
2247               <listitem>
2248                 <para>Ausgabemedium. Kann zur Zeit die Werte
2249                 <constant>screen</constant> für Bildschirm,
2250                 <constant>email</constant> für E-Mmail (triggert das
2251                 <constant>_email</constant> Kürzel im Dateinamen),
2252                 <constant>printer</constant> für Drucker, und
2253                 <constant>queue</constant> für Warteschlange enthalten.</para>
2254               </listitem>
2255             </varlistentry>
2256
2257             <varlistentry>
2258               <term><varname>template_meta.printer.description</varname></term>
2259
2260               <listitem>
2261                 <para>Beschreibung des ausgewählten Druckers</para>
2262               </listitem>
2263             </varlistentry>
2264
2265             <varlistentry>
2266               <term><varname>template_meta.printer.template_code</varname></term>
2267
2268               <listitem>
2269                 <para>Vorlagenürzel des ausgewählten Druckers, identisch mit
2270                 dem Kürzel das im Dateinamen verwendetet wird.</para>
2271               </listitem>
2272             </varlistentry>
2273
2274             <varlistentry>
2275               <term><varname>template_meta.tmpfile</varname></term>
2276
2277               <listitem>
2278                 <para>Datei-Prefix für temporäre Dateien.</para>
2279               </listitem>
2280             </varlistentry>
2281           </variablelist>
2282         </sect3>
2283
2284         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.kunden-lieferanten">
2285           <title>Stammdaten von Kunden und Lieferanten</title>
2286
2287           <variablelist>
2288             <varlistentry>
2289               <term><varname>account_number</varname></term>
2290
2291               <listitem>
2292                 <para>Kontonummer</para>
2293               </listitem>
2294             </varlistentry>
2295
2296             <varlistentry>
2297               <term><varname>bank</varname></term>
2298
2299               <listitem>
2300                 <para>Name der Bank</para>
2301               </listitem>
2302             </varlistentry>
2303
2304             <varlistentry>
2305               <term><varname>bank_code</varname></term>
2306
2307               <listitem>
2308                 <para>Bankleitzahl</para>
2309               </listitem>
2310             </varlistentry>
2311
2312             <varlistentry>
2313               <term><varname>bic</varname></term>
2314
2315               <listitem>
2316                 <para>Bank-Identifikations-Code (Bank Identifier Code,
2317                 BIC)</para>
2318               </listitem>
2319             </varlistentry>
2320
2321             <varlistentry>
2322               <term><varname>business</varname></term>
2323
2324               <listitem>
2325                 <para>Kunden-/Lieferantentyp</para>
2326               </listitem>
2327             </varlistentry>
2328
2329             <varlistentry>
2330               <term><varname>city</varname></term>
2331
2332               <listitem>
2333                 <para>Stadt</para>
2334               </listitem>
2335             </varlistentry>
2336
2337             <varlistentry>
2338               <term><varname>contact</varname></term>
2339
2340               <listitem>
2341                 <para>Kontakt</para>
2342               </listitem>
2343             </varlistentry>
2344
2345             <varlistentry>
2346               <term><varname>country</varname></term>
2347
2348               <listitem>
2349                 <para>Land</para>
2350               </listitem>
2351             </varlistentry>
2352
2353             <varlistentry>
2354               <term><varname>cp_email</varname></term>
2355
2356               <listitem>
2357                 <para>Email des Ansprechpartners</para>
2358               </listitem>
2359             </varlistentry>
2360
2361             <varlistentry>
2362               <term><varname>cp_givenname</varname></term>
2363
2364               <listitem>
2365                 <para>Vorname des Ansprechpartners</para>
2366               </listitem>
2367             </varlistentry>
2368
2369             <varlistentry>
2370               <term><varname>cp_greeting</varname></term>
2371
2372               <listitem>
2373                 <para>Anrede des Ansprechpartners</para>
2374               </listitem>
2375             </varlistentry>
2376
2377             <varlistentry>
2378               <term><varname>cp_name</varname></term>
2379
2380               <listitem>
2381                 <para>Name des Ansprechpartners</para>
2382               </listitem>
2383             </varlistentry>
2384
2385             <varlistentry>
2386               <term><varname>cp_phone1</varname></term>
2387
2388               <listitem>
2389                 <para>Telefonnummer 1 des Ansprechpartners</para>
2390               </listitem>
2391             </varlistentry>
2392
2393             <varlistentry>
2394               <term><varname>cp_phone2</varname></term>
2395
2396               <listitem>
2397                 <para>Telefonnummer 2 des Ansprechpartners</para>
2398               </listitem>
2399             </varlistentry>
2400
2401             <varlistentry>
2402               <term><varname>cp_title</varname></term>
2403
2404               <listitem>
2405                 <para>Titel des Ansprechpartners</para>
2406               </listitem>
2407             </varlistentry>
2408
2409             <varlistentry>
2410               <term><varname>creditlimit</varname></term>
2411
2412               <listitem>
2413                 <para>Kreditlimit</para>
2414               </listitem>
2415             </varlistentry>
2416
2417             <varlistentry>
2418               <term><varname>customeremail</varname></term>
2419
2420               <listitem>
2421                 <para>Email des Kunden; nur für Kunden</para>
2422               </listitem>
2423             </varlistentry>
2424
2425             <varlistentry>
2426               <term><varname>customerfax</varname></term>
2427
2428               <listitem>
2429                 <para>Faxnummer des Kunden; nur für Kunden</para>
2430               </listitem>
2431             </varlistentry>
2432
2433             <varlistentry>
2434               <term><varname>customernotes</varname></term>
2435
2436               <listitem>
2437                 <para>Bemerkungen beim Kunden; nur für Kunden</para>
2438               </listitem>
2439             </varlistentry>
2440
2441             <varlistentry>
2442               <term><varname>customernumber</varname></term>
2443
2444               <listitem>
2445                 <para>Kundennummer; nur für Kunden</para>
2446               </listitem>
2447             </varlistentry>
2448
2449             <varlistentry>
2450               <term><varname>customerphone</varname></term>
2451
2452               <listitem>
2453                 <para>Telefonnummer des Kunden; nur für Kunden</para>
2454               </listitem>
2455             </varlistentry>
2456
2457             <varlistentry>
2458               <term><varname>discount</varname></term>
2459
2460               <listitem>
2461                 <para>Rabatt</para>
2462               </listitem>
2463             </varlistentry>
2464
2465             <varlistentry>
2466               <term><varname>email</varname></term>
2467
2468               <listitem>
2469                 <para>Emailadresse</para>
2470               </listitem>
2471             </varlistentry>
2472
2473             <varlistentry>
2474               <term><varname>fax</varname></term>
2475
2476               <listitem>
2477                 <para>Faxnummer</para>
2478               </listitem>
2479             </varlistentry>
2480
2481             <varlistentry>
2482               <term><varname>homepage</varname></term>
2483
2484               <listitem>
2485                 <para>Homepage</para>
2486               </listitem>
2487             </varlistentry>
2488
2489             <varlistentry>
2490               <term><varname>iban</varname></term>
2491
2492               <listitem>
2493                 <para>Internationale Kontonummer (International Bank Account
2494                 Number, IBAN)</para>
2495               </listitem>
2496             </varlistentry>
2497
2498             <varlistentry>
2499               <term><varname>language</varname></term>
2500
2501               <listitem>
2502                 <para>Sprache</para>
2503               </listitem>
2504             </varlistentry>
2505
2506             <varlistentry>
2507               <term><varname>name</varname></term>
2508
2509               <listitem>
2510                 <para>Firmenname</para>
2511               </listitem>
2512             </varlistentry>
2513
2514             <varlistentry>
2515               <term><varname>payment_description</varname></term>
2516
2517               <listitem>
2518                 <para>Name der Zahlart</para>
2519               </listitem>
2520             </varlistentry>
2521
2522             <varlistentry>
2523               <term><varname>payment_terms</varname></term>
2524
2525               <listitem>
2526                 <para>Zahlungskonditionen</para>
2527               </listitem>
2528             </varlistentry>
2529
2530             <varlistentry>
2531               <term><varname>phone</varname></term>
2532
2533               <listitem>
2534                 <para>Telefonnummer</para>
2535               </listitem>
2536             </varlistentry>
2537
2538             <varlistentry>
2539               <term><varname>shiptocity</varname></term>
2540
2541               <listitem>
2542                 <para>Stadt (Lieferadresse) <link
2543                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2544               </listitem>
2545             </varlistentry>
2546
2547             <varlistentry>
2548               <term><varname>shiptocontact</varname></term>
2549
2550               <listitem>
2551                 <para>Kontakt (Lieferadresse) <link
2552                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2553               </listitem>
2554             </varlistentry>
2555
2556             <varlistentry>
2557               <term><varname>shiptocountry</varname></term>
2558
2559               <listitem>
2560                 <para>Land (Lieferadresse) <link
2561                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2562               </listitem>
2563             </varlistentry>
2564
2565             <varlistentry>
2566               <term><varname>shiptodepartment1</varname></term>
2567
2568               <listitem>
2569                 <para>Abteilung 1 (Lieferadresse) <link
2570                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2571               </listitem>
2572             </varlistentry>
2573
2574             <varlistentry>
2575               <term><varname>shiptodepartment2</varname></term>
2576
2577               <listitem>
2578                 <para>Abteilung 2 (Lieferadresse) <link
2579                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2580               </listitem>
2581             </varlistentry>
2582
2583             <varlistentry>
2584               <term><varname>shiptoemail</varname></term>
2585
2586               <listitem>
2587                 <para>Email (Lieferadresse) <link
2588                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2589               </listitem>
2590             </varlistentry>
2591
2592             <varlistentry>
2593               <term><varname>shiptofax</varname></term>
2594
2595               <listitem>
2596                 <para>Fax (Lieferadresse) <link
2597                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2598               </listitem>
2599             </varlistentry>
2600
2601             <varlistentry>
2602               <term><varname>shiptoname</varname></term>
2603
2604               <listitem>
2605                 <para>Firmenname (Lieferadresse) <link
2606                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2607               </listitem>
2608             </varlistentry>
2609
2610             <varlistentry>
2611               <term><varname>shiptophone</varname></term>
2612
2613               <listitem>
2614                 <para>Telefonnummer (Lieferadresse) <link
2615                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2616               </listitem>
2617             </varlistentry>
2618
2619             <varlistentry>
2620               <term><varname>shiptostreet</varname></term>
2621
2622               <listitem>
2623                 <para>Straße und Hausnummer (Lieferadresse) <link
2624                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2625               </listitem>
2626             </varlistentry>
2627
2628             <varlistentry>
2629               <term><varname>shiptozipcode</varname></term>
2630
2631               <listitem>
2632                 <para>Postleitzahl (Lieferadresse) <link
2633                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
2634               </listitem>
2635             </varlistentry>
2636
2637             <varlistentry>
2638               <term><varname>street</varname></term>
2639
2640               <listitem>
2641                 <para>Straße und Hausnummer</para>
2642               </listitem>
2643             </varlistentry>
2644
2645             <varlistentry>
2646               <term><varname>taxnumber</varname></term>
2647
2648               <listitem>
2649                 <para>Steuernummer</para>
2650               </listitem>
2651             </varlistentry>
2652
2653             <varlistentry>
2654               <term><varname>ustid</varname></term>
2655
2656               <listitem>
2657                 <para>Umsatzsteuer-Identifikationsnummer</para>
2658               </listitem>
2659             </varlistentry>
2660
2661             <varlistentry>
2662               <term><varname>vendoremail</varname></term>
2663
2664               <listitem>
2665                 <para>Email des Lieferanten; nur für Lieferanten</para>
2666               </listitem>
2667             </varlistentry>
2668
2669             <varlistentry>
2670               <term><varname>vendorfax</varname></term>
2671
2672               <listitem>
2673                 <para>Faxnummer des Lieferanten; nur für Lieferanten</para>
2674               </listitem>
2675             </varlistentry>
2676
2677             <varlistentry>
2678               <term><varname>vendornotes</varname></term>
2679
2680               <listitem>
2681                 <para>Bemerkungen beim Lieferanten; nur für Lieferanten</para>
2682               </listitem>
2683             </varlistentry>
2684
2685             <varlistentry>
2686               <term><varname>vendornumber</varname></term>
2687
2688               <listitem>
2689                 <para>Lieferantennummer; nur für Lieferanten</para>
2690               </listitem>
2691             </varlistentry>
2692
2693             <varlistentry>
2694               <term><varname>vendorphone</varname></term>
2695
2696               <listitem>
2697                 <para>Telefonnummer des Lieferanten; nur für
2698                 Lieferanten</para>
2699               </listitem>
2700             </varlistentry>
2701
2702             <varlistentry>
2703               <term><varname>zipcode</varname></term>
2704
2705               <listitem>
2706                 <para>Postleitzahl</para>
2707               </listitem>
2708             </varlistentry>
2709           </variablelist>
2710
2711           <note id="dokumentenvorlagen-und-variablen.anmerkung-shipto">
2712             <para>Anmerkung: Sind die <varname>shipto*</varname>-Felder in den
2713             Stammdaten nicht eingetragen, so haben die Variablen
2714             <varname>shipto*</varname> den gleichen Wert wie die die
2715             entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich
2716             einige <varname>shipto*</varname>-Variablen so nicht in den
2717             Stammdaten wiederfinden sondern schlicht Kopien der
2718             Lieferdatenvariablen sind (z.B.
2719             <varname>shiptocontact</varname>).</para>
2720           </note>
2721         </sect3>
2722
2723         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-bearbeiter">
2724           <title>Informationen über den Bearbeiter</title>
2725
2726           <variablelist>
2727             <varlistentry>
2728               <term><varname>employee_address</varname></term>
2729
2730               <listitem>
2731                 <para>Adressfeld</para>
2732               </listitem>
2733             </varlistentry>
2734
2735             <varlistentry>
2736               <term><varname>employee_businessnumber</varname></term>
2737
2738               <listitem>
2739                 <para>Firmennummer</para>
2740               </listitem>
2741             </varlistentry>
2742
2743             <varlistentry>
2744               <term><varname>employee_company</varname></term>
2745
2746               <listitem>
2747                 <para>Firmenname</para>
2748               </listitem>
2749             </varlistentry>
2750
2751             <varlistentry>
2752               <term><varname>employee_co_ustid</varname></term>
2753
2754               <listitem>
2755                 <para>Usatzsteuer-Identifikationsnummer</para>
2756               </listitem>
2757             </varlistentry>
2758
2759             <varlistentry>
2760               <term><varname>employee_duns</varname></term>
2761
2762               <listitem>
2763                 <para>DUNS-Nummer</para>
2764               </listitem>
2765             </varlistentry>
2766
2767             <varlistentry>
2768               <term><varname>employee_email</varname></term>
2769
2770               <listitem>
2771                 <para>Email</para>
2772               </listitem>
2773             </varlistentry>
2774
2775             <varlistentry>
2776               <term><varname>employee_fax</varname></term>
2777
2778               <listitem>
2779                 <para>Fax</para>
2780               </listitem>
2781             </varlistentry>
2782
2783             <varlistentry>
2784               <term><varname>employee_name</varname></term>
2785
2786               <listitem>
2787                 <para>voller Name</para>
2788               </listitem>
2789             </varlistentry>
2790
2791             <varlistentry>
2792               <term><varname>employee_signature</varname></term>
2793
2794               <listitem>
2795                 <para>Signatur</para>
2796               </listitem>
2797             </varlistentry>
2798
2799             <varlistentry>
2800               <term><varname>employee_taxnumber</varname></term>
2801
2802               <listitem>
2803                 <para>Steuernummer</para>
2804               </listitem>
2805             </varlistentry>
2806
2807             <varlistentry>
2808               <term><varname>employee_tel</varname></term>
2809
2810               <listitem>
2811                 <para>Telefonnummer</para>
2812               </listitem>
2813             </varlistentry>
2814           </variablelist>
2815         </sect3>
2816
2817         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-verkaeufer">
2818           <title>Informationen über den Bearbeiter</title>
2819
2820           <variablelist>
2821             <varlistentry>
2822               <term><varname>salesman_address</varname></term>
2823
2824               <listitem>
2825                 <para>Adressfeld</para>
2826               </listitem>
2827             </varlistentry>
2828
2829             <varlistentry>
2830               <term><varname>salesman_businessnumber</varname></term>
2831
2832               <listitem>
2833                 <para>Firmennummer</para>
2834               </listitem>
2835             </varlistentry>
2836
2837             <varlistentry>
2838               <term><varname>salesman_company</varname></term>
2839
2840               <listitem>
2841                 <para>Firmenname</para>
2842               </listitem>
2843             </varlistentry>
2844
2845             <varlistentry>
2846               <term><varname>salesman_co_ustid</varname></term>
2847
2848               <listitem>
2849                 <para>Usatzsteuer-Identifikationsnummer</para>
2850               </listitem>
2851             </varlistentry>
2852
2853             <varlistentry>
2854               <term><varname>salesman_duns</varname></term>
2855
2856               <listitem>
2857                 <para>DUNS-Nummer</para>
2858               </listitem>
2859             </varlistentry>
2860
2861             <varlistentry>
2862               <term><varname>salesman_email</varname></term>
2863
2864               <listitem>
2865                 <para>Email</para>
2866               </listitem>
2867             </varlistentry>
2868
2869             <varlistentry>
2870               <term><varname>salesman_fax</varname></term>
2871
2872               <listitem>
2873                 <para>Fax</para>
2874               </listitem>
2875             </varlistentry>
2876
2877             <varlistentry>
2878               <term><varname>salesman_name</varname></term>
2879
2880               <listitem>
2881                 <para>voller Name</para>
2882               </listitem>
2883             </varlistentry>
2884
2885             <varlistentry>
2886               <term><varname>salesman_signature</varname></term>
2887
2888               <listitem>
2889                 <para>Signatur</para>
2890               </listitem>
2891             </varlistentry>
2892
2893             <varlistentry>
2894               <term><varname>salesman_taxnumber</varname></term>
2895
2896               <listitem>
2897                 <para>Steuernummer</para>
2898               </listitem>
2899             </varlistentry>
2900
2901             <varlistentry>
2902               <term><varname>salesman_tel</varname></term>
2903
2904               <listitem>
2905                 <para>Telefonnummer</para>
2906               </listitem>
2907             </varlistentry>
2908           </variablelist>
2909         </sect3>
2910
2911         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-steuern">
2912           <title>Variablen für die einzelnen Steuern</title>
2913
2914           <variablelist>
2915             <varlistentry>
2916               <term><varname>tax</varname></term>
2917
2918               <listitem>
2919                 <para>Steuer</para>
2920               </listitem>
2921             </varlistentry>
2922
2923             <varlistentry>
2924               <term><varname>taxbase</varname></term>
2925
2926               <listitem>
2927                 <para>zu versteuernder Betrag</para>
2928               </listitem>
2929             </varlistentry>
2930
2931             <varlistentry>
2932               <term><varname>taxdescription</varname></term>
2933
2934               <listitem>
2935                 <para>Name der Steuer</para>
2936               </listitem>
2937             </varlistentry>
2938
2939             <varlistentry>
2940               <term><varname>taxrate</varname></term>
2941
2942               <listitem>
2943                 <para>Steuersatz</para>
2944               </listitem>
2945             </varlistentry>
2946           </variablelist>
2947         </sect3>
2948       </sect2>
2949
2950       <sect2 id="dokumentenvorlagen-und-variablen.invoice">
2951         <title>Variablen in Rechnungen</title>
2952
2953         <sect3 id="dokumentenvorlagen-und-variablen.invoice-allgemein">
2954           <title>Allgemeine Variablen</title>
2955
2956           <variablelist>
2957             <varlistentry>
2958               <term><varname>creditremaining</varname></term>
2959
2960               <listitem>
2961                 <para>Verbleibender Kredit</para>
2962               </listitem>
2963             </varlistentry>
2964
2965             <varlistentry>
2966               <term><varname>currency</varname></term>
2967
2968               <listitem>
2969                 <para>Währung</para>
2970               </listitem>
2971             </varlistentry>
2972
2973             <varlistentry>
2974               <term><varname>cusordnumber</varname></term>
2975
2976               <listitem>
2977                 <para>Bestellnummer beim Kunden</para>
2978               </listitem>
2979             </varlistentry>
2980
2981             <varlistentry>
2982               <term><varname>deliverydate</varname></term>
2983
2984               <listitem>
2985                 <para>Lieferdatum</para>
2986               </listitem>
2987             </varlistentry>
2988
2989             <varlistentry>
2990               <term><varname>duedate</varname></term>
2991
2992               <listitem>
2993                 <para>Fälligkeitsdatum</para>
2994               </listitem>
2995             </varlistentry>
2996
2997             <varlistentry>
2998               <term><varname>globalprojectnumber</varname></term>
2999
3000               <listitem>
3001                 <para>Projektnummer des ganzen Beleges</para>
3002               </listitem>
3003             </varlistentry>
3004
3005             <varlistentry>
3006               <term><varname>globalprojectdescription</varname></term>
3007
3008               <listitem>
3009                 <para>Projekbeschreibung des ganzen Beleges</para>
3010               </listitem>
3011             </varlistentry>
3012
3013             <varlistentry>
3014               <term><varname>intnotes</varname></term>
3015
3016               <listitem>
3017                 <para>Interne Bemerkungen</para>
3018               </listitem>
3019             </varlistentry>
3020
3021             <varlistentry>
3022               <term><varname>invdate</varname></term>
3023
3024               <listitem>
3025                 <para>Rechnungsdatum</para>
3026               </listitem>
3027             </varlistentry>
3028
3029             <varlistentry>
3030               <term><varname>invnumber</varname></term>
3031
3032               <listitem>
3033                 <para>Rechnungsnummer</para>
3034               </listitem>
3035             </varlistentry>
3036
3037             <varlistentry>
3038               <term><varname>invtotal</varname></term>
3039
3040               <listitem>
3041                 <para>gesamter Rechnungsbetrag</para>
3042               </listitem>
3043             </varlistentry>
3044
3045             <varlistentry>
3046               <term><varname>notes</varname></term>
3047
3048               <listitem>
3049                 <para>Bemerkungen der Rechnung</para>
3050               </listitem>
3051             </varlistentry>
3052
3053             <varlistentry>
3054               <term><varname>orddate</varname></term>
3055
3056               <listitem>
3057                 <para>Auftragsdatum</para>
3058               </listitem>
3059             </varlistentry>
3060
3061             <varlistentry>
3062               <term><varname>ordnumber</varname></term>
3063
3064               <listitem>
3065                 <para>Auftragsnummer, wenn die Rechnung aus einem Auftrag
3066                 erstellt wurde</para>
3067               </listitem>
3068             </varlistentry>
3069
3070             <varlistentry>
3071               <term><varname>payment_description</varname></term>
3072
3073               <listitem>
3074                 <para>Name der Zahlart</para>
3075               </listitem>
3076             </varlistentry>
3077
3078             <varlistentry>
3079               <term><varname>payment_terms</varname></term>
3080
3081               <listitem>
3082                 <para>Zahlungskonditionen</para>
3083               </listitem>
3084             </varlistentry>
3085
3086             <varlistentry>
3087               <term><varname>quodate</varname></term>
3088
3089               <listitem>
3090                 <para>Angebotsdatum</para>
3091               </listitem>
3092             </varlistentry>
3093
3094             <varlistentry>
3095               <term><varname>quonumber</varname></term>
3096
3097               <listitem>
3098                 <para>Angebotsnummer</para>
3099               </listitem>
3100             </varlistentry>
3101
3102             <varlistentry>
3103               <term><varname>shippingpoint</varname></term>
3104
3105               <listitem>
3106                 <para>Versandort</para>
3107               </listitem>
3108             </varlistentry>
3109
3110             <varlistentry>
3111               <term><varname>shipvia</varname></term>
3112
3113               <listitem>
3114                 <para>Transportmittel</para>
3115               </listitem>
3116             </varlistentry>
3117
3118             <varlistentry>
3119               <term><varname>subtotal</varname></term>
3120
3121               <listitem>
3122                 <para>Zwischensumme aller Posten ohne Steuern</para>
3123               </listitem>
3124             </varlistentry>
3125
3126             <varlistentry>
3127               <term><varname>total</varname></term>
3128
3129               <listitem>
3130                 <para>Restsumme der Rechnung (Summe abzüglich bereits
3131                 bezahlter Posten)</para>
3132               </listitem>
3133             </varlistentry>
3134
3135             <varlistentry>
3136               <term><varname>transaction_description</varname></term>
3137
3138               <listitem>
3139                 <para>Vorgangsbezeichnung</para>
3140               </listitem>
3141             </varlistentry>
3142
3143             <varlistentry>
3144               <term><varname>transdate</varname></term>
3145
3146               <listitem>
3147                 <para>Auftragsdatum wenn die Rechnung aus einem Auftrag
3148                 erstellt wurde</para>
3149               </listitem>
3150             </varlistentry>
3151           </variablelist>
3152         </sect3>
3153
3154         <sect3 id="dokumentenvorlagen-und-variablen.invoice-posten">
3155           <title>Variablen für jeden Posten auf der Rechnung</title>
3156
3157           <variablelist>
3158             <varlistentry>
3159               <term><varname>bin</varname></term>
3160
3161               <listitem>
3162                 <para>Stellage</para>
3163               </listitem>
3164             </varlistentry>
3165
3166             <varlistentry>
3167               <term><varname>description</varname></term>
3168
3169               <listitem>
3170                 <para>Artikelbeschreibung</para>
3171               </listitem>
3172             </varlistentry>
3173
3174             <varlistentry>
3175               <term><varname>discount</varname></term>
3176
3177               <listitem>
3178                 <para>Rabatt als Betrag</para>
3179               </listitem>
3180             </varlistentry>
3181
3182             <varlistentry>
3183               <term><varname>discount_sub</varname></term>
3184
3185               <listitem>
3186                 <para>Zwischensumme mit Rabatt</para>
3187               </listitem>
3188             </varlistentry>
3189
3190             <varlistentry>
3191               <term><varname>drawing</varname></term>
3192
3193               <listitem>
3194                 <para>Zeichnung</para>
3195               </listitem>
3196             </varlistentry>
3197
3198             <varlistentry>
3199               <term><varname>ean</varname></term>
3200
3201               <listitem>
3202                 <para>EAN-Code</para>
3203               </listitem>
3204             </varlistentry>
3205
3206             <varlistentry>
3207               <term><varname>image</varname></term>
3208
3209               <listitem>
3210                 <para>Grafik</para>
3211               </listitem>
3212             </varlistentry>
3213
3214             <varlistentry>
3215               <term><varname>linetotal</varname></term>
3216
3217               <listitem>
3218                 <para>Zeilensumme (Anzahl * Einzelpreis)</para>
3219               </listitem>
3220             </varlistentry>
3221
3222             <varlistentry>
3223               <term><varname>longdescription</varname></term>
3224
3225               <listitem>
3226                 <para>Langtext</para>
3227               </listitem>
3228             </varlistentry>
3229
3230             <varlistentry>
3231               <term><varname>microfiche</varname></term>
3232
3233               <listitem>
3234                 <para>Mikrofilm</para>
3235               </listitem>
3236             </varlistentry>
3237
3238             <varlistentry>
3239               <term><varname>netprice</varname></term>
3240
3241               <listitem>
3242                 <para>Nettopreis</para>
3243               </listitem>
3244             </varlistentry>
3245
3246             <varlistentry>
3247               <term><varname>nodiscount_linetotal</varname></term>
3248
3249               <listitem>
3250                 <para>Zeilensumme ohne Rabatt</para>
3251               </listitem>
3252             </varlistentry>
3253
3254             <varlistentry>
3255               <term><varname>nodiscount_sub</varname></term>
3256
3257               <listitem>
3258                 <para>Zwischensumme ohne Rabatt</para>
3259               </listitem>
3260             </varlistentry>
3261
3262             <varlistentry>
3263               <term><varname>number</varname></term>
3264
3265               <listitem>
3266                 <para>Artikelnummer</para>
3267               </listitem>
3268             </varlistentry>
3269
3270             <varlistentry>
3271               <term><varname>ordnumber_oe</varname></term>
3272
3273               <listitem>
3274                 <para>Auftragsnummer des Originalauftrags, wenn die Rechnung
3275                 aus einem Sammelauftrag erstellt wurde</para>
3276               </listitem>
3277             </varlistentry>
3278
3279             <varlistentry>
3280               <term><varname>p_discount</varname></term>
3281
3282               <listitem>
3283                 <para>Rabatt in Prozent</para>
3284               </listitem>
3285             </varlistentry>
3286
3287             <varlistentry>
3288               <term><varname>partnotes</varname></term>
3289
3290               <listitem>
3291                 <para>Die beim Artikel gespeicherten Bemerkungen</para>
3292               </listitem>
3293             </varlistentry>
3294
3295             <varlistentry>
3296               <term><varname>partsgroup</varname></term>
3297
3298               <listitem>
3299                 <para>Warengruppe</para>
3300               </listitem>
3301             </varlistentry>
3302
3303             <varlistentry>
3304               <term><varname>price_factor</varname></term>
3305
3306               <listitem>
3307                 <para>Der Preisfaktor als Zahl, sofern einer eingestellt
3308                 ist</para>
3309               </listitem>
3310             </varlistentry>
3311
3312             <varlistentry>
3313               <term><varname>price_factor_name</varname></term>
3314
3315               <listitem>
3316                 <para>Der Name des Preisfaktors, sofern einer eingestellt
3317                 ist</para>
3318               </listitem>
3319             </varlistentry>
3320
3321             <varlistentry>
3322               <term><varname>projectnumber</varname></term>
3323
3324               <listitem>
3325                 <para>Projektnummer</para>
3326               </listitem>
3327             </varlistentry>
3328
3329             <varlistentry>
3330               <term><varname>projectdescription</varname></term>
3331
3332               <listitem>
3333                 <para>Projektbeschreibung</para>
3334               </listitem>
3335             </varlistentry>
3336
3337             <varlistentry>
3338               <term><varname>qty</varname></term>
3339
3340               <listitem>
3341                 <para>Anzahl</para>
3342               </listitem>
3343             </varlistentry>
3344
3345             <varlistentry>
3346               <term><varname>reqdate</varname></term>
3347
3348               <listitem>
3349                 <para>Lieferdatum</para>
3350               </listitem>
3351             </varlistentry>
3352
3353             <varlistentry>
3354               <term><varname>runningnumber</varname></term>
3355
3356               <listitem>
3357                 <para>Position auf der Rechnung (1, 2, 3...)</para>
3358               </listitem>
3359             </varlistentry>
3360
3361             <varlistentry>
3362               <term><varname>sellprice</varname></term>
3363
3364               <listitem>
3365                 <para>Verkaufspreis</para>
3366               </listitem>
3367             </varlistentry>
3368
3369             <varlistentry>
3370               <term><varname>serialnumber</varname></term>
3371
3372               <listitem>
3373                 <para>Seriennummer</para>
3374               </listitem>
3375             </varlistentry>
3376
3377             <varlistentry>
3378               <term><varname>tax_rate</varname></term>
3379
3380               <listitem>
3381                 <para>Steuersatz</para>
3382               </listitem>
3383             </varlistentry>
3384
3385             <varlistentry>
3386               <term><varname>transdate_oe</varname></term>
3387
3388               <listitem>
3389                 <para>Auftragsdatum des Originalauftrags, wenn die Rechnung
3390                 aus einem Sammelauftrag erstellt wurde</para>
3391               </listitem>
3392             </varlistentry>
3393
3394             <varlistentry>
3395               <term><varname>unit</varname></term>
3396
3397               <listitem>
3398                 <para>Einheit</para>
3399               </listitem>
3400             </varlistentry>
3401
3402             <varlistentry>
3403               <term><varname>weight</varname></term>
3404
3405               <listitem>
3406                 <para>Gewicht</para>
3407               </listitem>
3408             </varlistentry>
3409           </variablelist>
3410
3411           <para>Für jeden Posten gibt es ein Unterarray mit den Informationen
3412           über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
3413           einer <function>foreach</function>-Schleife ausgegeben werden, da
3414           für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
3415           können. Die Variablen dafür lauten:</para>
3416
3417           <variablelist>
3418             <varlistentry>
3419               <term><varname>make</varname></term>
3420
3421               <listitem>
3422                 <para>Lieferant</para>
3423               </listitem>
3424             </varlistentry>
3425
3426             <varlistentry>
3427               <term><varname>model</varname></term>
3428
3429               <listitem>
3430                 <para>Lieferantenartikelnummer</para>
3431               </listitem>
3432             </varlistentry>
3433           </variablelist>
3434         </sect3>
3435
3436         <sect3 id="dokumentenvorlagen-und-variablen.invoice-zahlungen">
3437           <title>Variablen für die einzelnen Zahlungseingänge</title>
3438
3439           <variablelist>
3440             <varlistentry>
3441               <term><varname>payment</varname></term>
3442
3443               <listitem>
3444                 <para>Betrag</para>
3445               </listitem>
3446             </varlistentry>
3447
3448             <varlistentry>
3449               <term><varname>paymentaccount</varname></term>
3450
3451               <listitem>
3452                 <para>Konto</para>
3453               </listitem>
3454             </varlistentry>
3455
3456             <varlistentry>
3457               <term><varname>paymentdate</varname></term>
3458
3459               <listitem>
3460                 <para>Datum</para>
3461               </listitem>
3462             </varlistentry>
3463
3464             <varlistentry>
3465               <term><varname>paymentmemo</varname></term>
3466
3467               <listitem>
3468                 <para>Memo</para>
3469               </listitem>
3470             </varlistentry>
3471
3472             <varlistentry>
3473               <term><varname>paymentsource</varname></term>
3474
3475               <listitem>
3476                 <para>Beleg</para>
3477               </listitem>
3478             </varlistentry>
3479           </variablelist>
3480         </sect3>
3481
3482         <sect3 id="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc">
3483           <title>Benutzerdefinierte Kunden- und Lieferantenvariablen</title>
3484
3485           <para>Die vom Benutzer definierten Variablen für Kunden und
3486           Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
3487           ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem Präfix
3488           <varname>vc_cvar_</varname> und dem vom Benutzer festgelegten
3489           Variablennamen zusammen.</para>
3490
3491           <para>Beispiel: Der Benutzer hat eine Variable namens
3492           <varname>number_of_employees</varname> definiert, die die Anzahl der
3493           Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
3494           unter dem Namen <varname>vc_cvar_number_of_employees</varname> zur
3495           Verfügung.</para>
3496         </sect3>
3497       </sect2>
3498
3499       <sect2 id="dokumentenvorlagen-und-variablen.dunning">
3500         <title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
3501
3502         <sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
3503           <title>Namen der Vorlagen</title>
3504
3505           <para>Die Namen der Vorlagen werden im System-Menü vom Benutzer
3506           eingegeben. Wird für ein Mahnlevel die Option zur automatischen
3507           Erstellung einer Rechnung über die Mahngebühren und Zinsen
3508           aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem
3509           Vorlagenname für diese Mahnstufe mit dem Zusatz
3510           <constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
3511           für die ausgewählte Sprache und den ausgewählten Drucker
3512           angehängt.</para>
3513         </sect3>
3514
3515         <sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
3516           <title>Allgemeine Variablen in Mahnungen</title>
3517
3518           <para>Die Variablen des Verkäufers stehen wie gewohnt als
3519           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
3520           Kunden stehen als Variablen <varname>name</varname>,
3521           <varname>street</varname>, <varname>zipcode</varname>,
3522           <varname>city</varname>, <varname>country</varname>,
3523           <varname>department_1</varname>, <varname>department_2</varname>,
3524           und <varname>email</varname> zur Verfügung.</para>
3525
3526           <para>Weitere Variablen beinhalten:</para>
3527
3528           <variablelist>
3529             <varlistentry>
3530               <term><varname>dunning_date</varname></term>
3531
3532               <listitem>
3533                 <para>Datum der Mahnung</para>
3534               </listitem>
3535             </varlistentry>
3536
3537             <varlistentry>
3538               <term><varname>dunning_duedate</varname></term>
3539
3540               <listitem>
3541                 <para>Fälligkeitsdatum für diese Mahhnung</para>
3542               </listitem>
3543             </varlistentry>
3544
3545             <varlistentry>
3546               <term><varname>dunning_id</varname></term>
3547
3548               <listitem>
3549                 <para>Mahnungsnummer</para>
3550               </listitem>
3551             </varlistentry>
3552
3553             <varlistentry>
3554               <term><varname>fee</varname></term>
3555
3556               <listitem>
3557                 <para>Kummulative Mahngebühren</para>
3558               </listitem>
3559             </varlistentry>
3560
3561             <varlistentry>
3562               <term><varname>interest_rate</varname></term>
3563
3564               <listitem>
3565                 <para>Zinssatz per anno in Prozent</para>
3566               </listitem>
3567             </varlistentry>
3568
3569             <varlistentry>
3570               <term><varname>total_amount</varname></term>
3571
3572               <listitem>
3573                 <para>Gesamter noch zu zahlender Betrag als
3574                 <function>fee</function> + <function>total_interest</function>
3575                 + <function>total_open_amount</function></para>
3576               </listitem>
3577             </varlistentry>
3578
3579             <varlistentry>
3580               <term><varname>total_interest</varname></term>
3581
3582               <listitem>
3583                 <para>Zinsen per anno über alle Rechnungen</para>
3584               </listitem>
3585             </varlistentry>
3586
3587             <varlistentry>
3588               <term><varname>total_open_amount</varname></term>
3589
3590               <listitem>
3591                 <para>Summe über alle offene Beträge der Rechnungen</para>
3592               </listitem>
3593             </varlistentry>
3594           </variablelist>
3595         </sect3>
3596
3597         <sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
3598           <title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
3599
3600           <variablelist>
3601             <varlistentry>
3602               <term><varname>dn_amount</varname></term>
3603
3604               <listitem>
3605                 <para>Rechnungssumme (brutto)</para>
3606               </listitem>
3607             </varlistentry>
3608
3609             <varlistentry>
3610               <term><varname>dn_duedate</varname></term>
3611
3612               <listitem>
3613                 <para>Originales Fälligkeitsdatum der Rechnung</para>
3614               </listitem>
3615             </varlistentry>
3616
3617             <varlistentry>
3618               <term><varname>dn_dunning_date</varname></term>
3619
3620               <listitem>
3621                 <para>Datum der Mahnung</para>
3622               </listitem>
3623             </varlistentry>
3624
3625             <varlistentry>
3626               <term><varname>dn_dunning_duedate</varname></term>
3627
3628               <listitem>
3629                 <para>Fälligkeitsdatum der Mahnung</para>
3630               </listitem>
3631             </varlistentry>
3632
3633             <varlistentry>
3634               <term><varname>dn_fee</varname></term>
3635
3636               <listitem>
3637                 <para>Kummulative Mahngebühr</para>
3638               </listitem>
3639             </varlistentry>
3640
3641             <varlistentry>
3642               <term><varname>dn_interest</varname></term>
3643
3644               <listitem>
3645                 <para>Zinsen per anno für diese Rechnung</para>
3646               </listitem>
3647             </varlistentry>
3648
3649             <varlistentry>
3650               <term><varname>dn_invnumber</varname></term>
3651
3652               <listitem>
3653                 <para>Rechnungsnummer</para>
3654               </listitem>
3655             </varlistentry>
3656
3657             <varlistentry>
3658               <term><varname>dn_linetotal</varname></term>
3659
3660               <listitem>
3661                 <para>Noch zu zahlender Betrag (ergibt sich aus
3662                 <varname>dn_open_amount</varname> + <varname>dn_fee</varname>
3663                 + <varname>dn_interest</varname>)</para>
3664               </listitem>
3665             </varlistentry>
3666
3667             <varlistentry>
3668               <term><varname>dn_netamount</varname></term>
3669
3670               <listitem>
3671                 <para>Rechnungssumme (netto)</para>
3672               </listitem>
3673             </varlistentry>
3674
3675             <varlistentry>
3676               <term><varname>dn_open_amount</varname></term>
3677
3678               <listitem>
3679                 <para>Offener Rechnungsbetrag</para>
3680               </listitem>
3681             </varlistentry>
3682
3683             <varlistentry>
3684               <term><varname>dn_ordnumber</varname></term>
3685
3686               <listitem>
3687                 <para>Bestellnummer</para>
3688               </listitem>
3689             </varlistentry>
3690
3691             <varlistentry>
3692               <term><varname>dn_transdate</varname></term>
3693
3694               <listitem>
3695                 <para>Rechnungsdatum</para>
3696               </listitem>
3697             </varlistentry>
3698
3699             <varlistentry>
3700               <term><varname>dn_curr</varname></term>
3701
3702               <listitem>
3703                 <para>Währung, in der die Rechnung erstellt wurde. (Die
3704                 Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
3705               </listitem>
3706             </varlistentry>
3707           </variablelist>
3708         </sect3>
3709
3710         <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
3711           <title>Variablen in automatisch erzeugten Rechnungen über
3712           Mahngebühren</title>
3713
3714           <para>Die Variablen des Verkäufers stehen wie gewohnt als
3715           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
3716           Kunden stehen als Variablen <varname>name</varname>,
3717           <varname>street</varname>, <varname>zipcode</varname>,
3718           <varname>city</varname>, <varname>country</varname>,
3719           <varname>department_1</varname>, <varname>department_2</varname>,
3720           und <varname>email</varname> zur Verfügung.</para>
3721
3722           <para>Weitere Variablen beinhalten:</para>
3723
3724           <variablelist>
3725             <varlistentry>
3726               <term><varname>duedate</varname></term>
3727
3728               <listitem>
3729                 <para>Fälligkeitsdatum der Rechnung</para>
3730               </listitem>
3731             </varlistentry>
3732
3733             <varlistentry>
3734               <term><varname>dunning_id</varname></term>
3735
3736               <listitem>
3737                 <para>Mahnungsnummer</para>
3738               </listitem>
3739             </varlistentry>
3740
3741             <varlistentry>
3742               <term><varname>fee</varname></term>
3743
3744               <listitem>
3745                 <para>Mahngebühren</para>
3746               </listitem>
3747             </varlistentry>
3748
3749             <varlistentry>
3750               <term><varname>interest</varname></term>
3751
3752               <listitem>
3753                 <para>Zinsen</para>
3754               </listitem>
3755             </varlistentry>
3756
3757             <varlistentry>
3758               <term><varname>invamount</varname></term>
3759
3760               <listitem>
3761                 <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
3762                 <varname>interest</varname>)</para>
3763               </listitem>
3764             </varlistentry>
3765
3766             <varlistentry>
3767               <term><varname>invdate</varname></term>
3768
3769               <listitem>
3770                 <para>Rechnungsdatum</para>
3771               </listitem>
3772             </varlistentry>
3773
3774             <varlistentry>
3775               <term><varname>invnumber</varname></term>
3776
3777               <listitem>
3778                 <para>Rechnungsnummer</para>
3779               </listitem>
3780             </varlistentry>
3781           </variablelist>
3782         </sect3>
3783       </sect2>
3784
3785       <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
3786         <title>Variablen in anderen Vorlagen</title>
3787
3788         <sect3>
3789           <title>Einführung</title>
3790
3791           <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
3792           Rechnung. Allerdings heißen die Variablen, die mit
3793           <varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
3794           fangen sie mit <varname>quo</varname> für "quotation" an:
3795           <varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
3796           wiederum fangen sie mit <varname>ord</varname> für "order" an:
3797           <varname>ordnumber</varname> für Bestellnummer etc.</para>
3798
3799           <para>Manche Variablen sind in anderen Vorlagen hingegen gar nicht
3800           vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies
3801           sind Variablen, die vom Geschäftsablauf her in der entsprechenden
3802           Vorlage keine Bedeutung haben oder noch nicht belegt sein
3803           können.</para>
3804
3805           <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
3806           in Rechnungen aufgeführt.</para>
3807         </sect3>
3808
3809         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
3810           <title>Angebote und Preisanfragen</title>
3811
3812           <variablelist>
3813             <varlistentry>
3814               <term><varname>quonumber</varname></term>
3815
3816               <listitem>
3817                 <para>Angebots- bzw. Anfragenummer</para>
3818               </listitem>
3819             </varlistentry>
3820
3821             <varlistentry>
3822               <term><varname>reqdate</varname></term>
3823
3824               <listitem>
3825                 <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
3826                 Preisanfragen)</para>
3827               </listitem>
3828             </varlistentry>
3829
3830             <varlistentry>
3831               <term><varname>transdate</varname></term>
3832
3833               <listitem>
3834                 <para>Angebots- bzw. Anfragedatum</para>
3835               </listitem>
3836             </varlistentry>
3837           </variablelist>
3838         </sect3>
3839
3840         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
3841           <title>Auftragsbestätigungen und Lieferantenaufträge</title>
3842
3843           <variablelist>
3844             <varlistentry>
3845               <term><varname>ordnumber</varname></term>
3846
3847               <listitem>
3848                 <para>Auftragsnummer</para>
3849               </listitem>
3850             </varlistentry>
3851
3852             <varlistentry>
3853               <term><varname>reqdate</varname></term>
3854
3855               <listitem>
3856                 <para>Lieferdatum</para>
3857               </listitem>
3858             </varlistentry>
3859
3860             <varlistentry>
3861               <term><varname>transdate</varname></term>
3862
3863               <listitem>
3864                 <para>Auftragsdatum</para>
3865               </listitem>
3866             </varlistentry>
3867           </variablelist>
3868         </sect3>
3869
3870         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
3871           <title>Lieferscheine (Verkauf und Einkauf)</title>
3872
3873           <variablelist>
3874             <varlistentry>
3875               <term><varname>cusordnumber</varname></term>
3876
3877               <listitem>
3878                 <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
3879                 des Lieferanten (im Einkauf)</para>
3880               </listitem>
3881             </varlistentry>
3882
3883             <varlistentry>
3884               <term><varname>donumber</varname></term>
3885
3886               <listitem>
3887                 <para>Lieferscheinnummer</para>
3888               </listitem>
3889             </varlistentry>
3890
3891             <varlistentry>
3892               <term><varname>transdate</varname></term>
3893
3894               <listitem>
3895                 <para>Lieferscheindatum</para>
3896               </listitem>
3897             </varlistentry>
3898           </variablelist>
3899
3900           <para>Für jede Position eines Lieferscheines gibt es ein Unterarray
3901           mit den Informationen darüber, von welchem Lager und Lagerplatz aus
3902           die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
3903           Lagerplatz sie eingelagert wurden. Diese müssen mittels einer
3904           <function>foreach</function>-Schleife ausgegeben werden. Diese
3905           Variablen sind:</para>
3906
3907           <variablelist>
3908             <varlistentry>
3909               <term><varname>si_bin</varname></term>
3910
3911               <listitem>
3912                 <para>Lagerplatz</para>
3913               </listitem>
3914             </varlistentry>
3915
3916             <varlistentry>
3917               <term><varname>si_chargenumber</varname></term>
3918
3919               <listitem>
3920                 <para>Chargennummer</para>
3921               </listitem>
3922             </varlistentry>
3923
3924             <varlistentry>
3925               <term><varname>si_bestbefore</varname></term>
3926
3927               <listitem>
3928                 <para>Mindesthaltbarkeit</para>
3929               </listitem>
3930             </varlistentry>
3931
3932             <varlistentry>
3933               <term><varname>si_number</varname></term>
3934
3935               <listitem>
3936                 <para>Artikelnummer</para>
3937               </listitem>
3938             </varlistentry>
3939
3940             <varlistentry>
3941               <term><varname>si_qty</varname></term>
3942
3943               <listitem>
3944                 <para>Anzahl bzw. Menge</para>
3945               </listitem>
3946             </varlistentry>
3947
3948             <varlistentry>
3949               <term><varname>si_runningnumber</varname></term>
3950
3951               <listitem>
3952                 <para>Positionsnummer (1, 2, 3 etc)</para>
3953               </listitem>
3954             </varlistentry>
3955
3956             <varlistentry>
3957               <term><varname>si_unit</varname></term>
3958
3959               <listitem>
3960                 <para>Einheit</para>
3961               </listitem>
3962             </varlistentry>
3963
3964             <varlistentry>
3965               <term><varname>si_warehouse</varname></term>
3966
3967               <listitem>
3968                 <para>Lager</para>
3969               </listitem>
3970             </varlistentry>
3971           </variablelist>
3972         </sect3>
3973
3974         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
3975           <title>Variablen für Sammelrechnung</title>
3976
3977           <variablelist>
3978             <varlistentry>
3979               <term><varname>c0total</varname></term>
3980
3981               <listitem>
3982                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
3983                 Tage</para>
3984               </listitem>
3985             </varlistentry>
3986
3987             <varlistentry>
3988               <term><varname>c30total</varname></term>
3989
3990               <listitem>
3991                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
3992                 und &lt; 60 Tage</para>
3993               </listitem>
3994             </varlistentry>
3995
3996             <varlistentry>
3997               <term><varname>c60total</varname></term>
3998
3999               <listitem>
4000                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
4001                 und &lt; 90 Tage</para>
4002               </listitem>
4003             </varlistentry>
4004
4005             <varlistentry>
4006               <term><varname>c90total</varname></term>
4007
4008               <listitem>
4009                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
4010                 Tage</para>
4011               </listitem>
4012             </varlistentry>
4013
4014             <varlistentry>
4015               <term><varname>total</varname></term>
4016
4017               <listitem>
4018                 <para>Gesamtbetrag aller Rechnungen</para>
4019               </listitem>
4020             </varlistentry>
4021           </variablelist>
4022
4023           <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
4024
4025           <variablelist>
4026             <varlistentry>
4027               <term><varname>invnumber</varname></term>
4028
4029               <listitem>
4030                 <para>Rechnungsnummer</para>
4031               </listitem>
4032             </varlistentry>
4033
4034             <varlistentry>
4035               <term><varname>invdate</varname></term>
4036
4037               <listitem>
4038                 <para>Rechnungsdatum</para>
4039               </listitem>
4040             </varlistentry>
4041
4042             <varlistentry>
4043               <term><varname>duedate</varname></term>
4044
4045               <listitem>
4046                 <para>Fälligkeitsdatum</para>
4047               </listitem>
4048             </varlistentry>
4049
4050             <varlistentry>
4051               <term><varname>amount</varname></term>
4052
4053               <listitem>
4054                 <para>Summe der Rechnung</para>
4055               </listitem>
4056             </varlistentry>
4057
4058             <varlistentry>
4059               <term><varname>open</varname></term>
4060
4061               <listitem>
4062                 <para>Noch offener Betrag der Rechnung</para>
4063               </listitem>
4064             </varlistentry>
4065
4066             <varlistentry>
4067               <term><varname>c0</varname></term>
4068
4069               <listitem>
4070                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
4071                 Tage</para>
4072               </listitem>
4073             </varlistentry>
4074
4075             <varlistentry>
4076               <term><varname>c30</varname></term>
4077
4078               <listitem>
4079                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
4080                 &lt; 60 Tage</para>
4081               </listitem>
4082             </varlistentry>
4083
4084             <varlistentry>
4085               <term><varname>c60</varname></term>
4086
4087               <listitem>
4088                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
4089                 &lt; 90 Tage</para>
4090               </listitem>
4091             </varlistentry>
4092
4093             <varlistentry>
4094               <term><varname>c90</varname></term>
4095
4096               <listitem>
4097                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
4098                 Tage</para>
4099               </listitem>
4100             </varlistentry>
4101           </variablelist>
4102         </sect3>
4103       </sect2>
4104
4105       <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
4106         <title>Blöcke, bedingte Anweisungen und Schleifen</title>
4107
4108         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
4109           <title>Einfürhung</title>
4110
4111           <para>Der Parser kennt neben den Variablen einige weitere
4112           Konstrukte, die gesondert behandelt werden. Diese sind wie
4113           Variablennamen in spezieller Weise markiert:
4114           <command>&lt;%anweisung%&gt; ... &lt;%end%&gt;</command></para>
4115
4116           <para>Anmerkung zum <command>&lt;%end%&gt;</command>: Der besseren
4117           Verständlichkeit halber kann man nach dem <command>end</command>
4118           noch beliebig weitere Wörter schreiben, um so zu markieren, welche
4119           Anweisung (z.B. <command>if</command> oder
4120           <command>foreach</command>) damit abgeschlossen wird.</para>
4121
4122           <para>Beispiel: Lautet der Beginn eines Blockes z.B.
4123           <command>&lt;%if type == "sales_quotation"%&gt;</command>, so könnte
4124           er mit <command>&lt;%end%&gt;</command> genauso abgeschlossen werden
4125           wie mit <command>&lt;%end if%&gt;</command> oder auch
4126           <command>&lt;%end type == "sales_quotation"%&gt;</command>.</para>
4127         </sect3>
4128
4129         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
4130           <title>Der if-Block</title>
4131
4132           <programlisting>&lt;%if variablenname%&gt;
4133 ...
4134 &lt;%end%&gt;</programlisting>
4135
4136           <para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
4137           und dem "end" werden nur ausgegeben, wenn die Variable
4138           <varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
4139
4140           <para>Die Bedingung kann auch negiert werden, indem das Wort
4141           <function>not</function> nach dem <filename>if</filename> verwendet
4142           wird. Beispiel:</para>
4143
4144           <programlisting>&lt;%if not cp_greeting%&gt;
4145 ...
4146 &lt;%end%&gt;</programlisting>
4147
4148           <para>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
4149           oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
4150           einer Variablen mit einer festen Zeichenkette oder einer anderen
4151           Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
4152           oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
4153           die rechte Seite des Vergleichsoperators in Anführungszeichen
4154           gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
4155           anderer Variablen). Zwei Beispiele, die beide Vergleiche
4156           zeigen:</para>
4157
4158           <programlisting>&lt;%if var1 == "Wert"%&gt;</programlisting>
4159
4160           <para>Testet die Variable <varname>var1</varname> auf
4161           übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
4162           Mittels <function>!=</function> anstelle von <function>==</function>
4163           würde auf Ungleichheit getestet.</para>
4164
4165           <programlisting>&lt;%if var1 == var2%&gt;</programlisting>
4166
4167           <para>Testet die Variable <varname>var1</varname> auf
4168           übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
4169           <function>!=</function> anstelle von <function>==</function> würde
4170           auf Ungleichheit getestet.</para>
4171
4172           <para>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit
4173           auch Tests auf übereinstimmung mit regulären Ausdrücken ohne
4174           Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
4175           dieselbe Syntax wie oben nur mit <function>=~</function> und
4176           <function>!~</function> als Vergleichsoperatoren.</para>
4177
4178           <para>Beispiel für einen Test, ob die Variable
4179           <varname>intnotes</varname> (interne Bemerkungen) das Wort
4180           <constant>schwierig</constant> enthält:</para>
4181
4182           <programlisting>&lt;%if intnotes =~ "schwierig"%&gt;</programlisting>
4183         </sect3>
4184
4185         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
4186           <title>Der foreach-Block</title>
4187
4188           <programlisting>&lt;%foreach variablenname%&gt;
4189 ...
4190 &lt;%end%&gt;</programlisting>
4191
4192           <para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
4193           wie das Perl-Array der Variablen <varname>variablenname</varname>
4194           Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen
4195           Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern
4196           benutzt. In jedem Durchlauf werden die <link
4197           linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
4198           Variablen</link> jeweils auf den Wert für die aktuelle Position
4199           gesetzt.</para>
4200
4201           <para>Die Syntax sieht normalerweise wie folgt aus:</para>
4202
4203           <programlisting>&lt;%foreach number%&gt;
4204 Position: &lt;%runningnumber%&gt;
4205 Anzahl: &lt;%qty%&gt;
4206 Artikelnummer: &lt;%number%&gt;
4207 Beschreibung: &lt;%description%&gt;
4208 ...
4209 &lt;%end%&gt;</programlisting>
4210
4211           <para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
4212           <function>&lt;%foreach%&gt;</function>-Block innerhalb einer
4213           Tabellenzelle auf, so wird die komplette Tabellenzeile so oft
4214           wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der
4215           Inhalt zwischen <function>&lt;%foreach%&gt;</function> und
4216           <function>&lt;%end%&gt;</function> wiederholt, nicht aber die
4217           komplette Zeile, in der er steht.</para>
4218         </sect3>
4219       </sect2>
4220
4221       <sect2 id="dokumentenvorlagen-und-variablen.markup">
4222         <title>Markup-Code zur Textformatierung innerhalb von
4223         Formularen</title>
4224
4225         <para>Wenn der Benutzer innhalb von Formularen in kivitendo Text
4226         anders formatiert haben möchte, so ist dies begrenzt möglich.
4227         kivitendo unterstützt die Textformatierung mit HTML-ähnlichen Tags.
4228         Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung
4229         Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird
4230         dann automatisch in Anweisungen für das ausgewählte Vorlagenformat
4231         (HTML oder PDF über LaTeX) umgesetzt.</para>
4232
4233         <para>Die unterstützen Formatierungen sind:</para>
4234
4235         <variablelist>
4236           <varlistentry>
4237             <term>&lt;b&gt;Text&lt;/b&gt;</term>
4238
4239             <listitem>
4240               <para>Text wird in Fettdruck gesetzt.</para>
4241             </listitem>
4242           </varlistentry>
4243
4244           <varlistentry>
4245             <term>&lt;i&gt;Text&lt;/i&gt;</term>
4246
4247             <listitem>
4248               <para>Text wird kursiv gesetzt.</para>
4249             </listitem>
4250           </varlistentry>
4251
4252           <varlistentry>
4253             <term>&lt;u&gt;Text&lt;/u&gt;</term>
4254
4255             <listitem>
4256               <para>Text wird unterstrichen.</para>
4257             </listitem>
4258           </varlistentry>
4259
4260           <varlistentry>
4261             <term>&lt;s&gt;Text&lt;/s&gt;</term>
4262
4263             <listitem>
4264               <para>Text wird durchgestrichen. Diese Formatierung ist nicht
4265               bei der Ausgabe als PDF über LaTeX verfügbar.</para>
4266             </listitem>
4267           </varlistentry>
4268
4269           <varlistentry>
4270             <term>&lt;bullet&gt;</term>
4271
4272             <listitem>
4273               <para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
4274               unten).</para>
4275             </listitem>
4276           </varlistentry>
4277         </variablelist>
4278
4279         <para>Der Befehl <command>&lt;bullet&gt;</command> funktioniert
4280         momentan auch nur in Latex-Vorlagen.</para>
4281       </sect2>
4282     </sect1>
4283
4284     <sect1 id="excel-templates">
4285       <title>Excel-Vorlagen</title>
4286
4287       <sect2 id="excel-templates.summary">
4288         <title>Zusammenfassung</title>
4289
4290         <para>Dieses Dokument beschreibt den Mechanismus, mit dem
4291         Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
4292         einhergehen.</para>
4293       </sect2>
4294
4295       <sect2 id="excel-templates.usage">
4296         <title>Bedienung</title>
4297
4298         <para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
4299         werden. Die Konfigurationsoption heißt <varname>excel_templates =
4300         1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
4301
4302         <para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
4303         anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
4304         werden. In den normalen Verkaufsmasken taucht nun
4305         <constant>Excel</constant> als auswählbares Format auf und kann von da
4306         an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
4307
4308         <para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
4309         eine Angebotsvorlage und wird unter dem internen Namen der Angebote
4310         <filename>sales_quotation.xls</filename> gespeichert.</para>
4311       </sect2>
4312
4313       <sect2 id="excel-templates.syntax">
4314         <title>Variablensyntax</title>
4315
4316         <para>Einfache Syntax:
4317         <command>&lt;&lt;varname&gt;&gt;</command></para>
4318
4319         <para>Dabei sind <constant>&lt;&lt;</constant> und
4320         <constant>&gt;&gt;</constant> die Delimiter. Da Excel auf festen
4321         Breiten besteht, kann der Tag künstlich verlängert werden, indem
4322         weitere <constant>&lt;</constant> oder <constant>&gt;</constant>
4323         eingefügt werden. Der Tag muss nicht symmetrisch sein.
4324         Beispiel:</para>
4325
4326         <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>
4327
4328         <para>Um die Limitierung der festen Breite zu reduzieren, können
4329         weitere Variablen in einem Block interpoliert werden. Whitespace wird
4330         dazwishen dann erhalten. Beispiel:</para>
4331
4332         <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>
4333
4334         <para>Die Variablen werden interpoliert, und linksbündig mit
4335         Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
4336         lang, werden überzählige Zeichen abgeschnitten.</para>
4337
4338         <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
4339         der Block mit einem Leerzeichen anfängt. Beispiel:</para>
4340
4341         <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>
4342
4343         <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
4344         Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
4345         entfernt.</para>
4346       </sect2>
4347
4348       <sect2 id="excel-templates.limitations">
4349         <title>Einschränkungen</title>
4350
4351         <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
4352         mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
4353         beschränkt sich daher darauf, Textstellen exakt durch einen anderen
4354         Text zu ersetzen.</para>
4355
4356         <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
4357         <command>&lt;%if%&gt;</command> und
4358         <command>&lt;%foreach%&gt;</command> nicht vorhanden. Der Delimiter
4359         <constant>&lt;% %&gt;</constant> kommt in den Headerinformationen
4360         evtl. vor. Deshalb wurde auf den sichereren Delimiter
4361         <constant>&lt;&lt;</constant> und <constant>&gt;&gt;</constant>
4362         gewechselt.</para>
4363       </sect2>
4364     </sect1>
4365   </chapter>
4366
4367   <chapter>
4368     <title>Entwicklerdokumentation</title>
4369
4370     <sect1 id="devel.globals" xreflabel="Globale Variablen">
4371       <title>Globale Variablen</title>
4372
4373       <sect2>
4374         <title>Wie sehen globale Variablen in Perl aus?</title>
4375
4376         <para>Globale Variablen liegen in einem speziellen namespace namens
4377         "main", der von überall erreichbar ist. Darüber hinaus sind bareword
4378         globs global und die meisten speziellen Variablen sind...
4379         speziell.</para>
4380
4381         <para>Daraus ergeben sich folgende Formen:</para>
4382
4383         <variablelist>
4384           <varlistentry>
4385             <term><literal>$main::form</literal></term>
4386
4387             <listitem>
4388               <para>expliziter Namespace "main"</para>
4389             </listitem>
4390           </varlistentry>
4391
4392           <varlistentry>
4393             <term><literal>$::form</literal></term>
4394
4395             <listitem>
4396               <para>impliziter Namespace "main"</para>
4397             </listitem>
4398           </varlistentry>
4399
4400           <varlistentry>
4401             <term><literal>open FILE, "file.txt"</literal></term>
4402
4403             <listitem>
4404               <para><varname>FILE</varname> ist global</para>
4405             </listitem>
4406           </varlistentry>
4407
4408           <varlistentry>
4409             <term><literal>$_</literal></term>
4410
4411             <listitem>
4412               <para>speziell</para>
4413             </listitem>
4414           </varlistentry>
4415         </variablelist>
4416
4417         <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
4418         Schlüsselwort wie "<function>global</function>", mit dem man
4419         importieren kann. <function>my</function>, <function>our</function>
4420         und <function>local</function> machen was anderes.</para>
4421
4422         <variablelist>
4423           <varlistentry>
4424             <term><literal>my $form</literal></term>
4425
4426             <listitem>
4427               <para>lexikalische Variable, gültig bis zum Ende des
4428               Scopes</para>
4429             </listitem>
4430           </varlistentry>
4431
4432           <varlistentry>
4433             <term><literal>our $form</literal></term>
4434
4435             <listitem>
4436               <para><varname>$form</varname> referenziert ab hier
4437               <varname>$PACKAGE::form</varname>.</para>
4438             </listitem>
4439           </varlistentry>
4440
4441           <varlistentry>
4442             <term><literal>local $form</literal></term>
4443
4444             <listitem>
4445               <para>Alle Änderungen an <varname>$form</varname> werden am Ende
4446               des scopes zurückgesetzt</para>
4447             </listitem>
4448           </varlistentry>
4449         </variablelist>
4450       </sect2>
4451
4452       <sect2>
4453         <title>Warum sind globale Variablen ein Problem?</title>
4454
4455         <para>Das erste Problem ist <productname>FCGI</productname>.</para>
4456
4457         <para><productname>SQL-Ledger</productname> hat fast alles im globalen
4458         namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
4459         Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
4460         aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
4461         Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
4462         Datenbankverbindungen, weil die sehr lange zum Initialisieren
4463         brauchen.</para>
4464
4465         <para>Das zweite Problem ist <function>strict</function>. Unter
4466         <function>strict</function> werden alle Variablen die nicht explizit
4467         mit <function>Package</function>, <function>my</function> oder
4468         <function>our</function> angegeben werden als Tippfehler angemarkert,
4469         dies hat, seit der Einführung, u.a. schon so manche langwierige
4470         Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
4471         angegeben werden, werden die nicht geprüft, und somit kann sich
4472         schnell ein Tippfehler einschleichen.</para>
4473       </sect2>
4474
4475       <sect2>
4476         <title>Kanonische globale Variablen</title>
4477
4478         <para>Um dieses Problem im Griff zu halten gibt es einige wenige
4479         globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
4480         vorgegebenen Eigenschaften, und alles andere sollte anderweitig
4481         umhergereicht werden.</para>
4482
4483         <para>Diese Variablen sind im Moment die folgenden neun:</para>
4484
4485         <itemizedlist>
4486           <listitem>
4487             <para><varname>$::form</varname></para>
4488           </listitem>
4489
4490           <listitem>
4491             <para><varname>%::myconfig</varname></para>
4492           </listitem>
4493
4494           <listitem>
4495             <para><varname>$::locale</varname></para>
4496           </listitem>
4497
4498           <listitem>
4499             <para><varname>$::lxdebug</varname></para>
4500           </listitem>
4501
4502           <listitem>
4503             <para><varname>$::auth</varname></para>
4504           </listitem>
4505
4506           <listitem>
4507             <para><varname>$::lx_office_conf</varname></para>
4508           </listitem>
4509
4510           <listitem>
4511             <para><varname>$::instance_conf</varname></para>
4512           </listitem>
4513
4514           <listitem>
4515             <para><varname>$::dispatcher</varname></para>
4516           </listitem>
4517
4518           <listitem>
4519             <para><varname>$::request</varname></para>
4520           </listitem>
4521         </itemizedlist>
4522
4523         <para>Damit diese nicht erneut als Müllhalde missbraucht werden, im
4524         Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
4525         Eigenschaften (Konventionen):</para>
4526
4527         <sect3>
4528           <title>$::form</title>
4529
4530           <itemizedlist>
4531             <listitem>
4532               <para>Ist ein Objekt der Klasse
4533               "<classname>Form</classname>"</para>
4534             </listitem>
4535
4536             <listitem>
4537               <para>Wird nach jedem Request gelöscht</para>
4538             </listitem>
4539
4540             <listitem>
4541               <para>Muss auch in Tests und Konsolenscripts vorhanden
4542               sein.</para>
4543             </listitem>
4544
4545             <listitem>
4546               <para>Enthält am Anfang eines Requests die Requestparameter vom
4547               User</para>
4548             </listitem>
4549
4550             <listitem>
4551               <para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
4552               cachen, das wird aber momentan absichtlich zerstört</para>
4553             </listitem>
4554           </itemizedlist>
4555
4556           <para><varname>$::form</varname> wurde unter <productname>SQL
4557           Ledger</productname> als Gottobjekt für alles misbraucht. Sämtliche
4558           alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
4559           heißt, alles was einem lieb ist (alle Variablen die einem ans Herz
4560           gewachsen sind), sollte man vor einem Aufruf (!) von zum Beispiel
4561           <function>IS-&gt;retrieve_customer()</function> in Sicherheit
4562           bringen.</para>
4563
4564           <para>Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man
4565           Berechnung in einem bestimmten Format durchführt (SL/Form.pm Zeile
4566           3552, Stand version 2.7beta), um dies hinterher wieder auf den
4567           richtigen Wert zu setzen:</para>
4568
4569           <programlisting>  my $saved_numberformat    = $::myconfig{numberformat};
4570   $::myconfig{numberformat} = $numberformat;
4571   # (...) div Berechnungen
4572   $::myconfig{numberformat} = $saved_numberformat;</programlisting>
4573
4574           <para>Das Objekt der Klasse Form hat leider im Moment noch viele
4575           zentrale Funktionen die vom internen Zustand abhängen, deshalb bitte
4576           nie einfach zerstören oder überschreiben (zumindestens nicht kurz
4577           vor einem Release oder in Absprache über bspw. die devel-Liste ;-).
4578           Es geht ziemlich sicher etwas kaputt.</para>
4579
4580           <para><varname>$::form</varname> ist gleichzeitig der Standard Scope
4581           in den <productname>Template::Toolkit</productname> Templates
4582           außerhalb der Controller: der Ausdruck <function>[% var
4583           %]</function> greift auf <varname>$::form-&gt;{var}</varname> zu.
4584           Unter Controllern ist der Standard Scope anders, da lautet der
4585           Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
4586           normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
4587           <function>&lt;%var%&gt;</function> zeigt auf
4588           <varname>$::form-&gt;{var}</varname>. Nochmal von der anderen Seite
4589           erläutert, innerhalb von (Web-)Templates sieht man häufiger solche
4590           Konstrukte:</para>
4591
4592           <programlisting>[%- IF business %]
4593 # (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
4594 [%- END %]</programlisting>
4595
4596           <para>Entweder wird hier dann $::form-&gt;{business} ausgewertet
4597           oder aber der Funktion
4598           <function>$form-&gt;parse_html_template</function> wird explizit
4599           noch ein zusätzlicher Hash übergeben, der dann auch in den
4600           (Web-)Templates zu Verfügung steht, bspw. so:</para>
4601
4602           <programlisting>$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</programlisting>
4603
4604           <para>Innerhalb von Schleifen wird
4605           <varname>$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</varname>
4606           bevorzugt, wenn vorhanden. Ein Beispiel findet sich in SL/DO.pm,
4607           welches über alle Positionen eines Lieferscheins in Schleife
4608           läuft:</para>
4609
4610           <programlisting>for $i (1 .. $form-&gt;{rowcount}) {
4611   # ...
4612   push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
4613   push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
4614   push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
4615   # ...
4616 }</programlisting>
4617         </sect3>
4618
4619         <sect3>
4620           <title>%::myconfig</title>
4621
4622           <itemizedlist>
4623             <listitem>
4624               <para>Das einzige Hash unter den globalen Variablen</para>
4625             </listitem>
4626
4627             <listitem>
4628               <para>Wird spätestens benötigt wenn auf die Datenbank
4629               zugegriffen wird</para>
4630             </listitem>
4631
4632             <listitem>
4633               <para>Wird bei jedem Request neu erstellt.</para>
4634             </listitem>
4635
4636             <listitem>
4637               <para>Enthält die Userdaten des aktuellen Logins</para>
4638             </listitem>
4639
4640             <listitem>
4641               <para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
4642               extern serialisiert werden, weil da auch der Datenbankzugriff
4643               für diesen user drinsteht.</para>
4644             </listitem>
4645
4646             <listitem>
4647               <para>Enthält unter anderem Listenbegrenzung vclimit,
4648               Datumsformat dateformat und Nummernformat numberformat</para>
4649             </listitem>
4650
4651             <listitem>
4652               <para>Enthält Datenbankzugriffinformationen</para>
4653             </listitem>
4654           </itemizedlist>
4655
4656           <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
4657           ein Userobjekt. Die meisten Funktionen, die etwas anhand des
4658           aktuellen Users entscheiden müssen, befragen
4659           <varname>%::myconfig</varname>. Innerhalb der Anwendungen sind dies
4660           überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
4661           -&gt; <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
4662           Informationen über den Benutzer die über die
4663           Administrator-Schnittstelle (admin.pl) eingegeben wurden.</para>
4664         </sect3>
4665
4666         <sect3>
4667           <title>$::locale</title>
4668
4669           <itemizedlist>
4670             <listitem>
4671               <para>Objekt der Klasse "Locale"</para>
4672             </listitem>
4673
4674             <listitem>
4675               <para>Wird pro Request erstellt</para>
4676             </listitem>
4677
4678             <listitem>
4679               <para>Muss auch für Tests und Scripte immer verfügbar
4680               sein.</para>
4681             </listitem>
4682
4683             <listitem>
4684               <para>Cached intern über Requestgrenzen hinweg benutzte
4685               Locales</para>
4686             </listitem>
4687           </itemizedlist>
4688
4689           <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
4690           Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
4691         </sect3>
4692
4693         <sect3>
4694           <title>$::lxdebug</title>
4695
4696           <itemizedlist>
4697             <listitem>
4698               <para>Objekt der Klasse "LXDebug"</para>
4699             </listitem>
4700
4701             <listitem>
4702               <para>Wird global gecached</para>
4703             </listitem>
4704
4705             <listitem>
4706               <para>Muss immer verfügbar sein, in nahezu allen
4707               Funktionen</para>
4708             </listitem>
4709           </itemizedlist>
4710
4711           <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
4712           bereit, wie "<function>enter_sub</function>" und
4713           "<function>leave_sub</function>", mit denen in den alten Modulen ein
4714           brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
4715           der man die Wallclockzeit seit Requeststart loggen kann, sowie
4716           "<function>message</function>" und "<function>dump</function>" mit
4717           denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
4718           packen kann.</para>
4719
4720           <para>Beispielsweise so:</para>
4721
4722           <programlisting>$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
4723 $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</programlisting>
4724         </sect3>
4725
4726         <sect3>
4727           <title>$::auth</title>
4728
4729           <itemizedlist>
4730             <listitem>
4731               <para>Objekt der Klasse "SL::Auth"</para>
4732             </listitem>
4733
4734             <listitem>
4735               <para>Wird global gecached</para>
4736             </listitem>
4737
4738             <listitem>
4739               <para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
4740             </listitem>
4741
4742             <listitem>
4743               <para>Wird nach jedem Request resettet.</para>
4744             </listitem>
4745           </itemizedlist>
4746
4747           <para><varname>$::auth</varname> stellt Funktionen bereit um die
4748           Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
4749           vom aktuellen User abhängen wird das Objekt aus
4750           Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
4751           Request kurz resettet.</para>
4752         </sect3>
4753
4754         <sect3>
4755           <title>$::lx_office_conf</title>
4756
4757           <itemizedlist>
4758             <listitem>
4759               <para>Objekt der Klasse
4760               "<classname>SL::LxOfficeConf</classname>"</para>
4761             </listitem>
4762
4763             <listitem>
4764               <para>Global gecached</para>
4765             </listitem>
4766
4767             <listitem>
4768               <para>Repräsentation der
4769               <filename>config/kivitendo.conf[.default]</filename>-Dateien</para>
4770             </listitem>
4771           </itemizedlist>
4772
4773           <para>Globale Konfiguration. Configdateien werden zum Start gelesen
4774           und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
4775           das Programm die Konfiguration ändern kann oder sollte.</para>
4776
4777           <para>Beispielsweise ist über den Konfigurationseintrag [debug] die
4778           Debug- und Trace-Log-Datei wie folgt konfiguriert und
4779           verfügbar:</para>
4780
4781           <programlisting>[debug]
4782 file = /tmp/kivitendo-debug.log</programlisting>
4783
4784           <para>ist der Key <varname>file</varname> im Programm als
4785           <varname>$::lx_office_conf-&gt;{debug}{file}</varname>
4786           erreichbar.</para>
4787
4788           <warning>
4789             <para>Zugriff auf die Konfiguration erfolgt im Moment über
4790             Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
4791           </warning>
4792         </sect3>
4793
4794         <sect3>
4795           <title>$::instance_conf</title>
4796
4797           <itemizedlist>
4798             <listitem>
4799               <para>Objekt der Klasse
4800               "<classname>SL::InstanceConfiguration</classname>"</para>
4801             </listitem>
4802
4803             <listitem>
4804               <para>wird pro Request neu erstellt</para>
4805             </listitem>
4806           </itemizedlist>
4807
4808           <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
4809           speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
4810           ist hier eine Mandantendatenbank. Beispielsweise überprüft
4811           <programlisting>$::instance_conf-&gt;get_inventory_system eq 'perpetual'</programlisting>
4812           ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para>
4813         </sect3>
4814
4815         <sect3>
4816           <title>$::dispatcher</title>
4817
4818           <itemizedlist>
4819             <listitem>
4820               <para>Objekt der Klasse
4821               "<varname>SL::Dispatcher</varname>"</para>
4822             </listitem>
4823
4824             <listitem>
4825               <para>wird pro Serverprozess erstellt.</para>
4826             </listitem>
4827
4828             <listitem>
4829               <para>enthält Informationen über die technische Verbindung zum
4830               Server</para>
4831             </listitem>
4832           </itemizedlist>
4833
4834           <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
4835           global gespeichert wird. Wird vermutlich irgendwann in einem anderen
4836           Objekt untergebracht.</para>
4837         </sect3>
4838
4839         <sect3>
4840           <title>$::request</title>
4841
4842           <itemizedlist>
4843             <listitem>
4844               <para>Hashref (evtl später Objekt)</para>
4845             </listitem>
4846
4847             <listitem>
4848               <para>Wird pro Request neu initialisiert.</para>
4849             </listitem>
4850
4851             <listitem>
4852               <para>Keine Unterstruktur garantiert.</para>
4853             </listitem>
4854           </itemizedlist>
4855
4856           <para><varname>$::request</varname> ist ein generischer Platz um
4857           Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
4858           at a distance benutzt werden, sondern um lokales memoizing zu
4859           ermöglichen, das garantiert am Ende des Requests zerstört
4860           wird.</para>
4861
4862           <para>Vieles von dem, was im moment in <varname>$::form</varname>
4863           liegt, sollte eigentlich hier liegen. Die groben
4864           Differentialkriterien sind:</para>
4865
4866           <itemizedlist>
4867             <listitem>
4868               <para>Kommt es vom User, und soll unverändert wieder an den
4869               User? Dann <varname>$::form</varname>, steht da eh schon</para>
4870             </listitem>
4871
4872             <listitem>
4873               <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
4874               Requests gebraucht werden? Dann
4875               <varname>$::request</varname></para>
4876             </listitem>
4877
4878             <listitem>
4879               <para>Muss ich von anderen Teilen des Programms lesend drauf
4880               zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
4881               Wrappermethode</para>
4882             </listitem>
4883           </itemizedlist>
4884         </sect3>
4885       </sect2>
4886
4887       <sect2>
4888         <title>Ehemalige globale Variablen</title>
4889
4890         <para>Die folgenden Variablen waren einmal im Programm, und wurden
4891         entfernt.</para>
4892
4893         <sect3>
4894           <title>$::cgi</title>
4895
4896           <itemizedlist>
4897             <listitem>
4898               <para>war nötig, weil cookie Methoden nicht als
4899               Klassenfunktionen funktionieren</para>
4900             </listitem>
4901
4902             <listitem>
4903               <para>Aufruf als Klasse erzeugt Dummyobjekt was im
4904               Klassennamespace gehalten wird und über Requestgrenzen
4905               leaked</para>
4906             </listitem>
4907
4908             <listitem>
4909               <para>liegt jetzt unter
4910               <varname>$::request-&gt;{cgi}</varname></para>
4911             </listitem>
4912           </itemizedlist>
4913         </sect3>
4914
4915         <sect3>
4916           <title>$::all_units</title>
4917
4918           <itemizedlist>
4919             <listitem>
4920               <para>war nötig, weil einige Funktionen in Schleifen zum Teil
4921               ein paar hundert mal pro Request eine Liste der Einheiten
4922               brauchen, und de als Parameter durch einen Riesenstack von
4923               Funktionen geschleift werden müssten.</para>
4924             </listitem>
4925
4926             <listitem>
4927               <para>Liegt jetzt unter
4928               <varname>$::request-&gt;{cache}{all_units}</varname></para>
4929             </listitem>
4930
4931             <listitem>
4932               <para>Wird nur in
4933               <function>AM-&gt;retrieve_all_units()</function> gesetzt oder
4934               gelesen.</para>
4935             </listitem>
4936           </itemizedlist>
4937         </sect3>
4938
4939         <sect3>
4940           <title>%::called_subs</title>
4941
4942           <itemizedlist>
4943             <listitem>
4944               <para>wurde benutzt um callsub deep recursions
4945               abzufangen.</para>
4946             </listitem>
4947
4948             <listitem>
4949               <para>Wurde entfernt, weil callsub nur einen Bruchteil der
4950               möglichen Rekursioenen darstellt, und da nie welche
4951               auftreten.</para>
4952             </listitem>
4953
4954             <listitem>
4955               <para>komplette recursion protection wurde entfernt.</para>
4956             </listitem>
4957           </itemizedlist>
4958         </sect3>
4959       </sect2>
4960     </sect1>
4961
4962     <sect1 id="devel.fcgi">
4963       <title>Entwicklung unter FastCGI</title>
4964
4965       <sect2 id="devel.fcgi.general">
4966         <title>Allgemeines</title>
4967
4968         <para>Wenn Änderungen in der Konfiguration von kivitendo gemacht
4969         werden, muss der Webserver neu gestartet werden.</para>
4970
4971         <para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
4972         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
4973         müssen folgende Aspekte beachtet werden.</para>
4974       </sect2>
4975
4976       <sect2 id="devel.fcgi.exiting">
4977         <title>Programmende und Ausnahmen</title>
4978
4979         <para>Betrifft die Funktionen <function>warn</function>,
4980         <function>die</function>, <function>exit</function>,
4981         <function>carp</function> und <function>confess</function>.</para>
4982
4983         <para>Fehler, die dass Programm normalerweise sofort beenden (fatale
4984         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
4985         am Laufen zu halten. Man kann mit <function>die</function>,
4986         <function>confess</function> oder <function>carp</function> Fehler
4987         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
4988         eigene <function>$::form-</function>error()&gt; tut im Prinzip das
4989         Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
4990         <function>exit</function> hingegen werden nicht abgefangen.
4991         <function>warn</function> wird direkt nach STDERR, also in Server Log
4992         eine Nachricht schreiben (sofern in der Konfiguration nicht die
4993         Warnungen in das kivitendo Log umgeleitet wurden), und
4994         <function>exit</function> wird die Ausführung beenden.</para>
4995
4996         <para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
4997         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
4998         Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
4999         benutzen, alle anderen Exceptionmechanismen sind ok.</para>
5000       </sect2>
5001
5002       <sect2 id="devel.fcgi.globals">
5003         <title>Globale Variablen</title>
5004
5005         <para>Um zu vermeiden, dass Informationen von einem Request in einen
5006         anderen gelangen, müssen alle globalen Variablen vor einem Request
5007         sauber initialisiert werden. Das ist besonders wichtig im
5008         <varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
5009         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
5010         werden.</para>
5011
5012         <para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
5013         abgetrennten Block, der alle kanonischen globalen Variablen listet und
5014         erklärt. Bitte keine anderen einführen ohne das sauber zu
5015         dokumentieren.</para>
5016
5017         <para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
5018         man sicher geht, dass man die richtige erwischt.</para>
5019       </sect2>
5020
5021       <sect2 id="devel.fcgi.performance">
5022         <title>Performance und Statistiken</title>
5023
5024         <para>Die kritischen Pfade des Programms sind die Belegmasken, und
5025         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
5026         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
5027         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
5028         sind es je nach Menge der definierten Variablen 1-2s. Ab der
5029         Moose/Rose::DB Version sind es 5-6s.</para>
5030
5031         <para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
5032         den kritischen Pfaden, unter 0,15 sonst.</para>
5033       </sect2>
5034
5035       <sect2 id="devel.fcgi.known-issues">
5036         <title>Bekannte Probleme</title>
5037
5038         <sect3 id="devel.fcgi.known-issues.encoding">
5039           <title>Encoding Awareness</title>
5040
5041           <para>UTF-8 kodierte Installationen sind sehr anfällig gegen
5042           fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
5043           falsch kodierte Zeichen eher unwissend, und geben sie einfach
5044           weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
5045           das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
5046           beseitigen.</para>
5047         </sect3>
5048       </sect2>
5049     </sect1>
5050
5051     <sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
5052       <title>SQL-Upgradedateien</title>
5053
5054       <sect2 id="db-upgrade-files.introduction"
5055              xreflabel="Einführung in die Datenbank-Upgradedateien">
5056         <title>Einführung</title>
5057
5058         <para>Der alte Mechanismus für SQL-Upgradescripte, der auf einer
5059         Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
5060         diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele
5061         Entwicklung im stable- und unstable-Baum betrifft.</para>
5062
5063         <para>Dieser Mechanismus wurde für kivitendo 2.4.1 deutlich erweitert.
5064         Es werden weiterhin alle Scripte aus sql/Pg-upgrade ausgeführt.
5065         Zusätzlich gibt es aber ein zweites Verzeichnis, sql/Pg-upgrade2. In
5066         diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren,
5067         die neben den eigentlich auszuführenden SQL- oder Perl-Befehlen einige
5068         Kontrollinformationen enthält.</para>
5069
5070         <para>Neu sind die Kontrollinformationen, die Abhängigkeiten und
5071         Prioritäten definieren können werden, sodass Datenbankscripte zwar in
5072         einer sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER
5073         TABLE" erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE"
5074         angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man
5075         keine Versionsnummern mehr braucht.</para>
5076
5077         <para>kivitendo merkt sich dabei, welches der Upgradescripte in
5078         sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht
5079         erneut aus. Dazu dient die Tabelle "schema_info", die bei der
5080         Anmeldung automatisch angelegt wird.</para>
5081       </sect2>
5082
5083       <sect2 id="db-upgrade-files.format"
5084              xreflabel="Format der Upgradedateien">
5085         <title>Format der Kontrollinformationen</title>
5086
5087         <para>Die Kontrollinformationen sollten sich am Anfang der jeweiligen
5088         Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
5089         hat dabei das folgende Format:</para>
5090
5091         <para>Für SQL-Upgradedateien:</para>
5092
5093         <programlisting>-- @key: value</programlisting>
5094
5095         <para>Für Perl-Upgradedateien:</para>
5096
5097         <programlisting># @key: value</programlisting>
5098
5099         <para>Leerzeichen vor "<varname>value</varname>" werden
5100         entfernt.</para>
5101
5102         <para>Die folgenden Schlüsselworte werden verarbeitet:</para>
5103
5104         <variablelist>
5105           <varlistentry>
5106             <term><varname>tag</varname></term>
5107
5108             <listitem>
5109               <para>Wird zwingend benötigt. Dies ist der "Name" des Upgrades.
5110               Dieser "tag" kann von anderen Kontrolldateien in ihren
5111               Abhängigkeiten verwendet werden (Schlüsselwort
5112               "<varname>depends</varname>"). Der "tag" ist auch der Name, der
5113               in der Datenbank eingetragen wird.</para>
5114
5115               <para>Normalerweise sollte die Kontrolldatei genau so heißen wie
5116               der "tag", nur mit der Endung ".sql" bzw. "pl".</para>
5117
5118               <para>Ein Tag darf nur aus alphanumerischen Zeichen sowie den
5119               Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht
5120               erlaubt und sollten stattdessen mit Unterstrichen ersetzt
5121               werden.</para>
5122             </listitem>
5123           </varlistentry>
5124
5125           <varlistentry>
5126             <term><varname>charset</varname></term>
5127
5128             <listitem>
5129               <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script
5130               geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
5131               Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei
5132               Abwesenheit des Tags der Zeichensatz
5133               "<literal>ISO-8859-15</literal>" angenommen.</para>
5134             </listitem>
5135           </varlistentry>
5136
5137           <varlistentry>
5138             <term><varname>description</varname></term>
5139
5140             <listitem>
5141               <para>Benötigt. Eine Beschreibung, was in diesem Update
5142               passiert. Diese wird dem Benutzer beim eigentlichen
5143               Datenbankupdate angezeigt. Während der Tag in englisch gehalten
5144               sein sollte, sollte die Beschreibung auf Deutsch
5145               erfolgen.</para>
5146             </listitem>
5147           </varlistentry>
5148
5149           <varlistentry>
5150             <term><varname>depends</varname></term>
5151
5152             <listitem>
5153               <para>Optional. Eine mit Leerzeichen getrennte Liste von "tags",
5154               von denen dieses Upgradescript abhängt. kivitendo stellt sicher,
5155               dass die in dieser Liste aufgeführten Scripte bereits
5156               durchgeführt wurden, bevor dieses Script ausgeführt wird.</para>
5157
5158               <para>Abhängigkeiten werden rekursiv betrachtet. Wenn also ein
5159               Script "b" existiert, das von Änderungen in "a" abhängt, und
5160               eine neue Kontrolldatei für "c" erstellt wird, die von
5161               Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den
5162               Tag "b" als Abhängigkeit zu definieren.</para>
5163
5164               <para>Es ist nicht erlaubt, sich selbst referenzierende
5165               Abhängigkeiten zu definieren (z.B. "a" -&gt; "b", "b" -&gt; "c"
5166               und "c" -&gt; "a").</para>
5167             </listitem>
5168           </varlistentry>
5169
5170           <varlistentry>
5171             <term><varname>priority</varname></term>
5172
5173             <listitem>
5174               <para>Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
5175               der Scripte ausgeführt werden, die die gleichen
5176               Abhängigkeitstiefen besitzen. Fehlt dieser Parameter, so wird
5177               der Wert 1000 benutzt.</para>
5178
5179               <para>Dies ist reine Kosmetik. Für echte Reihenfolgen muss
5180               "depends" benutzt werden. kivitendo sortiert die auszuführenden
5181               Scripte zuerst nach der Abhängigkeitstiefe (wenn "z" von "y"
5182               abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von
5183               2, "y" von 1 und "x" von 0. "x" würde hier zuerst ausgeführt,
5184               dann "y", dann "z"), dann nach der Priorität und bei gleicher
5185               Priorität alphabetisch nach dem "tag".</para>
5186             </listitem>
5187           </varlistentry>
5188
5189           <varlistentry>
5190             <term><varname>ignore</varname></term>
5191
5192             <listitem>
5193               <para>Optional. Falls der Wert auf 1 (true) steht, wird das
5194               Skript bei der Anmeldung ignoriert und entsprechend nicht
5195               ausgeführt.</para>
5196             </listitem>
5197           </varlistentry>
5198         </variablelist>
5199       </sect2>
5200
5201       <sect2 id="db-upgrade-files.dbupgrade-tool"
5202              xreflabel="Hilfsscript dbupgrade2_tool.pl">
5203         <title>Hilfsscript dbupgrade2_tool.pl</title>
5204
5205         <para>Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern,
5206         existiert ein Hilfsscript namens
5207         "<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem
5208         kivitendo-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
5209         liest alle Datenbankupgradescripte aus dem Verzeichnis
5210         <filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die
5211         gleichen Methoden wie kivitendo selber, sodass alle Fehlersituationen
5212         von der Kommandozeile überprüft werden können.</para>
5213
5214         <para>Wird dem Script kein weiterer Parameter übergeben, so wird nur
5215         eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
5216         sich aber auch Informationen auf verschiedene Art ausgeben
5217         lassen:</para>
5218
5219         <itemizedlist>
5220           <listitem>
5221             <para>Listenform: "<command>./scripts/dbupgrade2_tool.pl
5222             --list</command>"</para>
5223
5224             <para>Gibt eine Liste aller Scripte aus. Die Liste ist in der
5225             Reihenfolge sortiert, in der kivitendo die Scripte ausführen
5226             würde. Es werden neben der Listenposition der Tag, die
5227             Abhängigkeitstiefe und die Priorität ausgegeben.</para>
5228           </listitem>
5229
5230           <listitem>
5231             <para>Baumform: "<command>./scripts/dbupgrade2_tool.pl
5232             --tree</command>"</para>
5233
5234             <para>Listet alle Tags in Baumform basierend auf den
5235             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von
5236             denen keine anderen abhängen. Die Unterknoten sind Scripte, die
5237             beim übergeordneten Script als Abhängigkeit eingetragen
5238             sind.</para>
5239           </listitem>
5240
5241           <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
5242             <para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl
5243             --rtree</command>"</para>
5244
5245             <para>Listet alle Tags in Baumform basierend auf den
5246             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte mit
5247             der geringsten Abhängigkeitstiefe. Die Unterknoten sind Scripte,
5248             die das übergeordnete Script als Abhängigkeit eingetragen
5249             haben.</para>
5250           </listitem>
5251
5252           <listitem>
5253             <para>Baumform mit Postscriptausgabe:
5254             "<command>./scripts/dbupgrade2_tool.pl
5255             --graphviz</command>"</para>
5256
5257             <para>Benötigt das Tool "<command>graphviz</command>", um mit
5258             seiner Hilfe die <link
5259             linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte
5260             Baumform</link> in eine Postscriptdatei namens
5261             "<filename>db_dependencies.ps</filename>" auszugeben. Dies ist
5262             vermutlich die übersichtlichste Form, weil hierbei jeder Knoten
5263             nur einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen
5264             können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben
5265             werden.</para>
5266           </listitem>
5267
5268           <listitem>
5269             <para>Scripte, von denen kein anderes Script abhängt:
5270             "<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"</para>
5271
5272             <para>Listet die Tags aller Scripte auf, von denen keine anderen
5273             Scripte abhängen.</para>
5274           </listitem>
5275         </itemizedlist>
5276       </sect2>
5277     </sect1>
5278
5279     <sect1 id="translations-languages" xreflabel="Translations and languages">
5280       <title>Translations and languages</title>
5281
5282       <sect2 id="translations-languages.introduction"
5283              xreflabel="Introduction to translations and languages">
5284         <title>Introduction</title>
5285
5286         <note>
5287           <para>Dieser Abschnitt ist in Englisch geschrieben, um
5288           internationalen Übersetzern die Arbeit zu erleichtern.</para>
5289         </note>
5290
5291         <para>This section describes how localization packages in kivitendo
5292         are built. Currently the only language fully supported is German, and
5293         since most of the internal messages are held in English the English
5294         version is usable too.</para>
5295
5296         <para>A stub version of French is included but not functunal at this
5297         point.</para>
5298       </sect2>
5299
5300       <sect2 id="translations-languages.file-structure"
5301              xreflabel="File structure">
5302         <title>File structure</title>
5303
5304         <para>The structure of locales in kivitendo is:</para>
5305
5306         <programlisting>kivitendo/locale/&lt;langcode&gt;/</programlisting>
5307
5308         <para>where &lt;langcode&gt; stands for an abbreviation of the
5309         language package. The builtin packages use two letter <ulink
5310         url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
5311         but the actual name is not relevant for the program and can easily be
5312         extended to <ulink
5313         url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
5314         tags</ulink> (i.e. "en_GB"). In fact the original language packages
5315         from SQL Ledger are named in this way.</para>
5316
5317         <para>In such a language directory the following files are
5318         recognized:</para>
5319
5320         <variablelist>
5321           <varlistentry>
5322             <term>LANGUAGE</term>
5323
5324             <listitem>
5325               <para>This file is mandatory.</para>
5326
5327               <para>The <filename>LANGUAGE</filename> file contains the self
5328               descripted name of the language. It should contain a native
5329               representation first, and in parenthesis an english translation
5330               after that. Example:</para>
5331
5332               <programlisting>Deutsch (German)</programlisting>
5333             </listitem>
5334           </varlistentry>
5335
5336           <varlistentry>
5337             <term>charset</term>
5338
5339             <listitem>
5340               <para>This file should be present.</para>
5341
5342               <para>The <filename>charset</filename> file describes which
5343               charset a language package is written in and applies to all
5344               other language files in the package. It is possible to write
5345               some language packages without an explicit charset, but it is
5346               still strongly recommended. You'll never know in what
5347               environment your language package will be used, and neither
5348               UTF-8 nor Latin1 are guaranteed.</para>
5349
5350               <para>The whole content of this file is a string that can be
5351               recognized as a valid charset encoding. Example:</para>
5352
5353               <programlisting>UTF-8</programlisting>
5354             </listitem>
5355           </varlistentry>
5356
5357           <varlistentry>
5358             <term>all</term>
5359
5360             <listitem>
5361               <para>This file is mandatory.</para>
5362
5363               <para>The central translation file. It is essentially an inline
5364               Perl script autogenerated by <command>locales.pl</command>. To
5365               generate it, generate the directory and the two files mentioned
5366               above, and execute the following command:</para>
5367
5368               <programlisting>scripts/locales.pl &lt;langcode&gt;</programlisting>
5369
5370               <para>Otherwise you can simply copy one of the other languages.
5371               You will be told how many are missing like this:</para>
5372
5373               <programlisting>$ scripts/locales.pl en
5374 English - 0.6% - 2015/2028 missing</programlisting>
5375
5376               <para>A file named "<filename>missing</filename>" will be
5377               generated and can be edited. You can also edit the
5378               "<filename>all</filename>" file directly. Edit everything you
5379               like to fit the target language and execute
5380               <command>locales.pl</command> again. See how the missing words
5381               get fewer.</para>
5382             </listitem>
5383           </varlistentry>
5384
5385           <varlistentry>
5386             <term>Num2text</term>
5387
5388             <listitem>
5389               <para>Legacy code from SQL Ledger. It provides a means for
5390               numbers to be converted into natural language, like
5391               <literal>1523 =&gt; one thousand five hundred twenty
5392               three</literal>. If you want to provide it, it must be inlinable
5393               Perl code which provides a <function>num2text</function> sub. If
5394               an <function>init</function> sub exists it will be executed
5395               first.</para>
5396
5397               <para>Only used in the check and receipt printing module.</para>
5398             </listitem>
5399           </varlistentry>
5400
5401           <varlistentry>
5402             <term>special_chars</term>
5403
5404             <listitem>
5405               <para>kivitendo comes with a lot of interfaces to different
5406               formats, some of which are rather picky with their accepted
5407               charset. The <filename>special_chars</filename> file contains a
5408               listing of chars not suited for different file format and
5409               provides substitutions. It is written in "Simple Ini" style,
5410               containing a block for every file format.</para>
5411
5412               <para>First entry should be the order of substitution for
5413               entries as a whitespace separated list. All entries are
5414               interpolated, so <literal>\n</literal>, <literal>\x20</literal>
5415               and <literal>\\</literal> all work.</para>
5416
5417               <para>After that every entry is a special char that should be
5418               translated when writing text into such a file.</para>
5419
5420               <para>Example:</para>
5421
5422               <programlisting>[Template/XML]
5423 order=&amp; &lt; &gt; \n
5424 &amp;=&amp;amp;
5425 &lt;=&amp;lt;
5426 &gt;=&amp;gt;
5427 \n=&lt;br&gt;</programlisting>
5428
5429               <para>Note the importance of the order in this example.
5430               Substituting &lt; and &gt; befor &amp; would lead to $gt; become
5431               &amp;amp;gt;</para>
5432
5433               <para>For a list of valid formats, see the German
5434               <filename>special_chars</filename> entry. As of this writing the
5435               following are recognized:</para>
5436
5437               <programlisting>HTML
5438 URL@HTML
5439 Template/HTML
5440 Template/XML
5441 Template/LaTeX
5442 Template/OpenDocument
5443 filenames</programlisting>
5444
5445               <para>The last of which is very machine dependant. Remember that
5446               a lot of characters are forbidden by some filesystems, for
5447               exmaple MS Windows doesn't like ':' in its files where Linux
5448               doesn't mind that. If you want the files created with your
5449               language pack to be portable, find all chars that could cause
5450               trouble.</para>
5451             </listitem>
5452           </varlistentry>
5453
5454           <varlistentry>
5455             <term>missing</term>
5456
5457             <listitem>
5458               <para>This file is not a part of the language package
5459               itself.</para>
5460
5461               <para>This is a file generated by
5462               <command>scripts/locales.pl</command> while processing your
5463               locales. It's only to have the missing entries singled out and
5464               does not belong to a language package.</para>
5465             </listitem>
5466           </varlistentry>
5467
5468           <varlistentry>
5469             <term>lost</term>
5470
5471             <listitem>
5472               <para>This file is not a part of the language package
5473               itself.</para>
5474
5475               <para>Another file generated by
5476               <command>scripts/locales.pl</command>. If for any reason a
5477               translation does not appear anymore and can be deleted, it gets
5478               moved here. The last 50 or so entries deleted are saved here in
5479               case you made a typo, so that you don't have to translate
5480               everything again. If a tranlsation is missing, the lost file is
5481               checked first. If you maintain a language package, you might
5482               want to keep this safe somewhere.</para>
5483             </listitem>
5484           </varlistentry>
5485         </variablelist>
5486       </sect2>
5487     </sect1>
5488
5489     <sect1 id="devel.testsuite">
5490       <title>Die kivitendo-Test-Suite</title>
5491
5492       <sect2 id="devel.testsuite.intro">
5493         <title>Einführung</title>
5494
5495         <para>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <literal>Test::More</literal>.</para>
5496
5497         <para>Die grundlegenden Fakten sind:</para>
5498
5499         <itemizedlist>
5500           <listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem>
5501
5502           <listitem><para>Ein Script (bzw. ein Test) in <filename>f/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
5503
5504           <listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
5505
5506           <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>f/</filename>, deren
5507           Dateiname auf <literal>.t</literal> endet.</para></listitem>
5508         </itemizedlist>
5509       </sect2>
5510
5511       <sect2 id="devel.testsuite.prerequisites">
5512         <title>Voraussetzungen</title>
5513
5514         <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>
5515
5516         <itemizedlist>
5517           <listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core:
5518           <literal>perl-Test-Deep</literal>; openSuSE: <literal>perl-Test-Deep</literal>)</para></listitem>
5519         </itemizedlist>
5520       </sect2>
5521
5522       <sect2 id="devel.testsuite.execution">
5523         <title>
5524           Existierende Tests ausführen
5525         </title>
5526
5527         <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
5528         gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.sh</filename>.</para>
5529
5530         <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.sh</filename> ohne weitere Parameter aus
5531         dem kivitendo-Basisverzeichnis heraus ausführen.</para>
5532
5533         <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.sh</filename>. Beispielsweise:</para>
5534
5535         <programlisting>t/test.sh t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
5536       </sect2>
5537
5538
5539       <sect2 id="devel.testsuite.meaning_of_scripts">
5540         <title>
5541           Bedeutung der verschiedenen Test-Scripte
5542         </title>
5543
5544         <para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch
5545         während der Entwicklung nützliche Tests sind:</para>
5546
5547         <itemizedlist>
5548           <listitem><para><filename>t/001compile.t</filename> -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab</para></listitem>
5549           <listitem><para><filename>t/002goodperl.t</filename> -- überprüft alle Perl-Dateien auf Anwesenheit von '<literal>use strict</literal>'-Anweisungen</para></listitem>
5550           <listitem><para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von <function>system()</function> und <function>exec()</function> auf Gültigkeit</para></listitem>
5551           <listitem><para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien Tab-Zeichen enthalten</para></listitem>
5552           <listitem><para><filename>t/006spelling.t</filename> -- sucht nach häufigen Rechtschreibfehlern</para></listitem>
5553           <listitem><para><filename>t/011pod.t</filename> -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit</para></listitem>
5554         </itemizedlist>
5555
5556         <para>Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.</para>
5557       </sect2>
5558
5559       <sect2 id="devel.testsuite.create_new">
5560         <title>
5561           Neue Test-Scripte erstellen
5562         </title>
5563
5564         <para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende
5565         Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.</para>
5566
5567         <sect3 id="devel.testsuite.ideas_for_non_function_tests">
5568           <title>
5569             Ideen für neue Test-Scripte, die keine konkreten Funktionen testen
5570           </title>
5571
5572           <para> Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:</para>
5573
5574           <itemizedlist>
5575             <listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem>
5576             <listitem><para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)</para></listitem>
5577             <listitem><para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para></listitem>
5578             <listitem><para>Überprüfung auf Leerzeichen am Ende von Zeilen</para></listitem>
5579             <listitem><para>Test, ob alle zu übersetzenden Strings in <filename>locale/de/all</filename> vorhanden sind</para></listitem>
5580             <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>
5581           </itemizedlist>
5582         </sect3>
5583
5584         <sect3 id="devel.testsuite.directory_and_test_names">
5585           <title>
5586             Konvention für Verzeichnis- und Dateinamen
5587           </title>
5588
5589           <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>
5590
5591           <itemizedlist>
5592             <listitem><para>Die Dateiendung muss <filename>.t</filename> lauten.</para></listitem>
5593
5594             <listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
5595             <filename>bad_function_params.t</filename>).</para></listitem>
5596
5597             <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen
5598             (beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem>
5599
5600             <listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist
5601             (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.</para></listitem>
5602           </itemizedlist>
5603         </sect3>
5604
5605         <sect3 id="devel.testsuite.minimal_example">
5606           <title>
5607             Minimales Skelett für eigene Scripte
5608           </title>
5609
5610           <para>Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:</para>
5611
5612           <programlisting>use Test::More tests =&gt; 0;
5613
5614 use lib 't';
5615
5616 use Support::TestSetup;
5617
5618 Support::TestSetup::login();</programlisting>
5619
5620           <para>Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie
5621           <varname>$::auth</varname>, <varname>$::form</varname> oder <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei
5622           <filename>config/kivitendo.conf</filename> im Abschnitt <literal>testing.login</literal> ein gültiger Login-Name eingetragen
5623           sein. Dieser wird für die Datenbankverbindung benötigt.</para>
5624
5625           <para>Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile <code>Support::TestSetup::login();</code>
5626           weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.</para>
5627         </sect3>
5628       </sect2>
5629     </sect1>
5630
5631     <sect1 id="devel.style-guide">
5632       <title>Stil-Richtlinien</title>
5633
5634       <para>Die folgenden Regeln haben das Ziel, den Code möglichst gut les-
5635       und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich
5636       eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden
5637       wird (Stichworte "Klammern" oder "Hash-Keys").</para>
5638
5639       <para>Diese Regeln sind keine Schikane sondern erleichtern allen das
5640       Leben!</para>
5641
5642       <para>Jeder, der einen Patch schickt, sollte seinen Code vorher
5643       überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
5644       nicht.</para>
5645
5646       <orderedlist>
5647         <listitem>
5648           <para>Es werden keine echten Tabs sondern Leerzeichen
5649           verwendet.</para>
5650         </listitem>
5651
5652         <listitem>
5653           <para>Die Einrückung beträgt zwei Leerzeichen. Beispiel:</para>
5654
5655           <programlisting>foreach my $row (@data) {
5656   if ($flag) {
5657     # do something with $row
5658   }
5659
5660   if ($use_modules) {
5661     $row-&gt;{modules} = MODULE-&gt;retrieve(
5662       id   =&gt; $row-&gt;{id},
5663       date =&gt; $use_now ? localtime() : $row-&gt;{time},
5664     );
5665   }
5666
5667   $report-&gt;add($row);
5668 }</programlisting>
5669         </listitem>
5670
5671         <listitem>
5672           <para>Öffnende geschweifte Klammern befinden sich auf der gleichen
5673           Zeile wie der letzte Befehl. Beispiele:</para>
5674
5675           <programlisting>sub debug {
5676   ...
5677 }</programlisting>
5678
5679           <para>oder</para>
5680
5681           <programlisting>if ($form-&gt;{item_rows} &gt; 0) {
5682   ...
5683 }</programlisting>
5684         </listitem>
5685
5686         <listitem>
5687           <para>Schließende geschweifte Klammern sind so weit eingerückt wie
5688           der Befehl / die öffnende schließende Klammer, die den Block
5689           gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen
5690           Beispiele wie bei 3. gelten.</para>
5691         </listitem>
5692
5693         <listitem>
5694           <para>Die Wörter "<function>else</function>",
5695           "<function>elsif</function>", "<function>while</function>" befinden
5696           sich auf der gleichen Zeile wie schließende geschweifte Klammern.
5697           Beispiele:</para>
5698
5699           <programlisting>if ($form-&gt;{sum} &gt; 1000) {
5700   ...
5701 } elsif ($form-&gt;{sum} &gt; 0) {
5702   ...
5703 } else {
5704   ...
5705 }
5706
5707 do {
5708   ...
5709 } until ($a &gt; 0);</programlisting>
5710         </listitem>
5711
5712         <listitem>
5713           <para>Parameter von Funktionsaufrufen müssen mit runden Klammern
5714           versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
5715           und grep-ähnliche Operatoren. Beispiel:</para>
5716
5717           <programlisting>$main::lxdebug-&gt;message("Could not find file.");
5718 %options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</programlisting>
5719         </listitem>
5720
5721         <listitem>
5722           <para>Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:</para>
5723
5724           <para>Generell gilt: Hashkeys und Arrayindices sollten nicht durch
5725           Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
5726           Blöcke schon. Beispiel:</para>
5727
5728           <programlisting>if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
5729   ...
5730 }
5731
5732 $array[$i + 1]             = 4;
5733 $form-&gt;{sum}              += $form-&gt;{"row_$i"};
5734 $form-&gt;{ $form-&gt;{index} } += 1;
5735
5736 map { $form-&gt;{sum} += $form-&gt;{"row_$_"} } 1..$rowcount;</programlisting>
5737         </listitem>
5738
5739         <listitem>
5740           <para>Mehrzeilige Befehle</para>
5741
5742           <orderedlist>
5743             <listitem>
5744               <para>Werden die Parameter eines Funktionsaufrufes auf mehrere
5745               Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
5746               werden, in der die ersten Funktionsparameter in der ersten Zeile
5747               stehen. Beispiel:</para>
5748
5749               <programlisting>$sth = $dbh-&gt;prepare("SELECT * FROM some_table WHERE col = ?",
5750                     $form-&gt;{some_col_value});</programlisting>
5751             </listitem>
5752
5753             <listitem>
5754               <para>Ein Spezialfall ist der ternäre Oprator "?:", der am
5755               besten in einer übersichtlichen Tabellenstruktur organisiert
5756               wird. Beispiel:</para>
5757
5758               <programlisting>my $rowcount = $form-&gt;{"row_$i"} ? $i
5759              : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
5760              :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</programlisting>
5761             </listitem>
5762           </orderedlist>
5763         </listitem>
5764
5765         <listitem>
5766           <para>Kommentare</para>
5767
5768           <orderedlist>
5769             <listitem>
5770               <para>Kommentare, die alleine in einer Zeile stehen, sollten
5771               soweit wie der Code eingerückt sein.</para>
5772             </listitem>
5773
5774             <listitem>
5775               <para>Seitliche hängende Kommentare sollten einheitlich
5776               formatiert werden.</para>
5777             </listitem>
5778
5779             <listitem>
5780               <para>Sämtliche Kommentare und Sonstiges im Quellcode ist bitte
5781               auf Englisch zu verfassen. So wie ich keine Lust habe,
5782               französischen Quelltext zu lesen, sollte auch der kivitendo
5783               Quelltext für nicht-Deutschsprachige lesbar sein.
5784               Beispiel:</para>
5785
5786               <programlisting>my $found = 0;
5787 while (1) {
5788   last if $found;
5789
5790   # complicated check
5791   $found = 1 if //
5792 }
5793
5794 $i  = 0        # initialize $i
5795 $n  = $i;      # save $i
5796 $i *= $const;  # do something crazy
5797 $i  = $n;      # recover $i</programlisting>
5798             </listitem>
5799           </orderedlist>
5800         </listitem>
5801
5802         <listitem>
5803           <para>Hashkeys sollten nur in Anführungszeichen stehen, wenn die
5804           Interpolation gewünscht ist. Beispiel:</para>
5805
5806           <programlisting>$form-&gt;{sum}      = 0;
5807 $form-&gt;{"row_$i"} = $form-&gt;{"row_$i"} - 5;
5808 $some_hash{42}    = 54;</programlisting>
5809         </listitem>
5810
5811         <listitem>
5812           <para>Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen
5813           unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
5814           wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in
5815           grossen Tabellen), dann ist Lesbarkeit vorzuziehen.</para>
5816
5817           <para>Als Beispiel sei die Funktion
5818           <function>print_options</function> aus
5819           <filename>bin/mozilla/io.pl</filename> angeführt.</para>
5820         </listitem>
5821
5822         <listitem>
5823           <para>Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind
5824           unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs
5825           verfälschen.</para>
5826
5827           <para>Emacs und vim haben beide recht einfache Methoden zur
5828           Entfernung von trailing whitespace. Emacs kennt das Kommande
5829           <command>nuke-trailing-whitespace</command>, vim macht das gleiche
5830           manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
5831           BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern
5832           gebunden.</para>
5833         </listitem>
5834
5835         <listitem>
5836           <para>Es wird kein <command>perltidy</command> verwendet.</para>
5837
5838           <para>In der Vergangenheit wurde versucht,
5839           <command>perltidy</command> zu verwenden, um einen einheitlichen
5840           Stil zu erlangen. Es hat sich aber gezeigt, dass
5841           <command>perltidy</command>s sehr eigenwilliges Verhalten, was
5842           Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für
5843           den Interessierten sind hier die
5844           <command>perltidy</command>-Optionen, die grob den beschriebenen
5845           Richtlinien entsprechen:</para>
5846
5847           <programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
5848 -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
5849 -lp -vt=1 -vtc=1</programlisting>
5850         </listitem>
5851
5852         <listitem>
5853           <para><varname>STDERR</varname> ist tabu. Unkonditionale
5854           Debugmeldungen auch.</para>
5855
5856           <para>kivitendo bietet mit dem Modul <classname>LXDebug</classname>
5857           einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
5858           Grund, nach <varname>STDERR</varname> zu schreiben.</para>
5859
5860           <para>Die <classname>LXDebug</classname>-Methode
5861           "<function>message</function>" nimmt als ersten Paramter außerdem
5862           eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer
5863           angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden
5864           und werden in den meisten Fällen auch vom Repository
5865           zurückgewiesen.</para>
5866         </listitem>
5867
5868         <listitem>
5869           <para>Alle neuen Module müssen use strict verwenden.</para>
5870
5871           <para><varname>$form</varname>, <varname>$auth</varname>,
5872           <varname>$locale</varname>, <varname>$lxdebug</varname> und
5873           <varname>%myconfig</varname> werden derzeit aus dem main package
5874           importiert (siehe <xref linkend="devel.globals" />. Alle anderen
5875           Konstrukte sollten lexikalisch lokal gehalten werden.</para>
5876         </listitem>
5877       </orderedlist>
5878     </sect1>
5879
5880     <sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
5881       <title>Dokumentation erstellen</title>
5882
5883       <sect2 id="devel.build-doc.introduction">
5884         <title>Einführung</title>
5885
5886         <para>Diese Dokumentation ist in <productname>DocBook</productname>
5887         XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor.
5888         Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen
5889         Editor nutzt, der spezielle Unterstützung für
5890         <productname>DocBook</productname> mitbringt. Wir empfehlen dafür den
5891         <ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
5892         Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos
5893         ist.</para>
5894       </sect2>
5895
5896       <sect2 id="devel.build-doc.required-software">
5897         <title>Benötigte Software</title>
5898
5899         <para>Bei <productname>DocBook</productname> ist Prinzip, dass
5900         ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden
5901         dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML
5902         erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script
5903         <command>scripts/build_doc.sh</command>.</para>
5904
5905         <para>Das Script benötigt zur Konvertierung verschiedene
5906         Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt
5907         werden:</para>
5908
5909         <itemizedlist>
5910           <listitem>
5911             <para><ulink
5912             url="http://www.oracle.com/technetwork/java/index.html">Java</ulink>
5913             in einer halbwegs aktuellen Version</para>
5914           </listitem>
5915
5916           <listitem>
5917             <para>Das Java-Build-System <ulink
5918             url="http://ant.apache.org/">Apache Ant</ulink></para>
5919           </listitem>
5920
5921           <listitem>
5922             <para>Das Dokumentations-System Dobudish für
5923             <productname>DocBook</productname> 4.5, eine Zusammenstellung
5924             diverser Stylesheets und Grafiken zur Konvertierung von
5925             <productname>DocBook</productname> XML in andere Formate. Das
5926             Paket, das benötigt wird, ist zum Zeitpunkt der
5927             Dokumentationserstellung
5928             <filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
5929             url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink>
5930             bereitsteht.</para>
5931           </listitem>
5932         </itemizedlist>
5933
5934         <para>Apache Ant sowie ein dazu passendes Java Runtime Environment
5935         sind auf allen gängigen Plattformen verfügbar. Beispiel für
5936         Debian/Ubuntu:</para>
5937
5938         <programlisting>apt-get install ant openjdk-7-jre</programlisting>
5939
5940         <para>Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis
5941         <filename>doc/build</filename> entpackt werden. Beispiel unter der
5942         Annahme, das <productname>Dobudish</productname> in
5943         <filename>$HOME/Downloads</filename> heruntergeladen wurde:</para>
5944
5945         <programlisting>cd doc/build
5946 unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
5947       </sect2>
5948
5949       <sect2 id="devel.build-doc.build">
5950         <title>PDFs und HTML-Seiten erstellen</title>
5951
5952         <para>Die eigentliche Konvertierung erfolgt nach Installation der
5953         benötigten Software mit einem einfachen Aufruf direkt aus dem
5954         kivitendo-Installationsverzeichnis heraus:</para>
5955
5956         <programlisting>./scripts/build_doc.sh</programlisting>
5957       </sect2>
5958
5959       <sect2 id="devel.build-doc.repository">
5960         <title>Einchecken in das Git-Repository</title>
5961
5962         <para>Sowohl die XML-Datei als auch die erzeugten PDF- und
5963         HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass
5964         nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut
5965         und alles zusammen in einem Commit eingecheckt werden sollten.</para>
5966
5967         <para>Die "<filename>dobudish</filename>"-Verzeichnisse bzw.
5968         symbolischen Links gehören hingegen nicht in das Repository.</para>
5969       </sect2>
5970     </sect1>
5971   </chapter>
5972 </book>