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