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