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