Lieferscheine -> Rechnungen wandeln: Lieferscheinnummer in jeder Rechnungsposition...
[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>donumber_do</varname></term>
3778
3779               <listitem>
3780                 <para>Lieferscheinnummer desjenigen Lieferscheins, aus dem die Position stammt, sofern die Rechnung aus einem oder
3781                 mehreren Lieferscheinen erstellt wurde</para>
3782               </listitem>
3783             </varlistentry>
3784
3785             <varlistentry>
3786               <term><varname>p_discount</varname></term>
3787
3788               <listitem>
3789                 <para>Rabatt in Prozent</para>
3790               </listitem>
3791             </varlistentry>
3792
3793             <varlistentry>
3794               <term><varname>partnotes</varname></term>
3795
3796               <listitem>
3797                 <para>Die beim Artikel gespeicherten Bemerkungen</para>
3798               </listitem>
3799             </varlistentry>
3800
3801             <varlistentry>
3802               <term><varname>partsgroup</varname></term>
3803
3804               <listitem>
3805                 <para>Warengruppe</para>
3806               </listitem>
3807             </varlistentry>
3808
3809             <varlistentry>
3810               <term><varname>price_factor</varname></term>
3811
3812               <listitem>
3813                 <para>Der Preisfaktor als Zahl, sofern einer eingestellt
3814                 ist</para>
3815               </listitem>
3816             </varlistentry>
3817
3818             <varlistentry>
3819               <term><varname>price_factor_name</varname></term>
3820
3821               <listitem>
3822                 <para>Der Name des Preisfaktors, sofern einer eingestellt
3823                 ist</para>
3824               </listitem>
3825             </varlistentry>
3826
3827             <varlistentry>
3828               <term><varname>projectnumber</varname></term>
3829
3830               <listitem>
3831                 <para>Projektnummer</para>
3832               </listitem>
3833             </varlistentry>
3834
3835             <varlistentry>
3836               <term><varname>projectdescription</varname></term>
3837
3838               <listitem>
3839                 <para>Projektbeschreibung</para>
3840               </listitem>
3841             </varlistentry>
3842
3843             <varlistentry>
3844               <term><varname>qty</varname></term>
3845
3846               <listitem>
3847                 <para>Anzahl</para>
3848               </listitem>
3849             </varlistentry>
3850
3851             <varlistentry>
3852               <term><varname>reqdate</varname></term>
3853
3854               <listitem>
3855                 <para>Lieferdatum</para>
3856               </listitem>
3857             </varlistentry>
3858
3859             <varlistentry>
3860               <term><varname>runningnumber</varname></term>
3861
3862               <listitem>
3863                 <para>Position auf der Rechnung (1, 2, 3...)</para>
3864               </listitem>
3865             </varlistentry>
3866
3867             <varlistentry>
3868               <term><varname>sellprice</varname></term>
3869
3870               <listitem>
3871                 <para>Verkaufspreis</para>
3872               </listitem>
3873             </varlistentry>
3874
3875             <varlistentry>
3876               <term><varname>serialnumber</varname></term>
3877
3878               <listitem>
3879                 <para>Seriennummer</para>
3880               </listitem>
3881             </varlistentry>
3882
3883             <varlistentry>
3884               <term><varname>tax_rate</varname></term>
3885
3886               <listitem>
3887                 <para>Steuersatz</para>
3888               </listitem>
3889             </varlistentry>
3890
3891             <varlistentry>
3892               <term><varname>transdate_oe</varname></term>
3893
3894               <listitem>
3895                 <para>Auftragsdatum des Originalauftrags, wenn die Rechnung
3896                 aus einem Sammelauftrag erstellt wurde</para>
3897               </listitem>
3898             </varlistentry>
3899
3900             <varlistentry>
3901               <term><varname>unit</varname></term>
3902
3903               <listitem>
3904                 <para>Einheit</para>
3905               </listitem>
3906             </varlistentry>
3907
3908             <varlistentry>
3909               <term><varname>weight</varname></term>
3910
3911               <listitem>
3912                 <para>Gewicht</para>
3913               </listitem>
3914             </varlistentry>
3915           </variablelist>
3916
3917           <para>Für jeden Posten gibt es ein Unterarray mit den Informationen
3918           über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
3919           einer <function>foreach</function>-Schleife ausgegeben werden, da
3920           für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
3921           können. Die Variablen dafür lauten:</para>
3922
3923           <variablelist>
3924             <varlistentry>
3925               <term><varname>make</varname></term>
3926
3927               <listitem>
3928                 <para>Lieferant</para>
3929               </listitem>
3930             </varlistentry>
3931
3932             <varlistentry>
3933               <term><varname>model</varname></term>
3934
3935               <listitem>
3936                 <para>Lieferantenartikelnummer</para>
3937               </listitem>
3938             </varlistentry>
3939           </variablelist>
3940         </sect3>
3941
3942         <sect3 id="dokumentenvorlagen-und-variablen.invoice-zahlungen">
3943           <title>Variablen für die einzelnen Zahlungseingänge</title>
3944
3945           <variablelist>
3946             <varlistentry>
3947               <term><varname>payment</varname></term>
3948
3949               <listitem>
3950                 <para>Betrag</para>
3951               </listitem>
3952             </varlistentry>
3953
3954             <varlistentry>
3955               <term><varname>paymentaccount</varname></term>
3956
3957               <listitem>
3958                 <para>Konto</para>
3959               </listitem>
3960             </varlistentry>
3961
3962             <varlistentry>
3963               <term><varname>paymentdate</varname></term>
3964
3965               <listitem>
3966                 <para>Datum</para>
3967               </listitem>
3968             </varlistentry>
3969
3970             <varlistentry>
3971               <term><varname>paymentmemo</varname></term>
3972
3973               <listitem>
3974                 <para>Memo</para>
3975               </listitem>
3976             </varlistentry>
3977
3978             <varlistentry>
3979               <term><varname>paymentsource</varname></term>
3980
3981               <listitem>
3982                 <para>Beleg</para>
3983               </listitem>
3984             </varlistentry>
3985           </variablelist>
3986         </sect3>
3987
3988         <sect3 id="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc">
3989           <title>Benutzerdefinierte Kunden- und Lieferantenvariablen</title>
3990
3991           <para>Die vom Benutzer definierten Variablen für Kunden und
3992           Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
3993           ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem Präfix
3994           <varname>vc_cvar_</varname> und dem vom Benutzer festgelegten
3995           Variablennamen zusammen.</para>
3996
3997           <para>Beispiel: Der Benutzer hat eine Variable namens
3998           <varname>number_of_employees</varname> definiert, die die Anzahl der
3999           Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
4000           unter dem Namen <varname>vc_cvar_number_of_employees</varname> zur
4001           Verfügung.</para>
4002         </sect3>
4003       </sect2>
4004
4005       <sect2 id="dokumentenvorlagen-und-variablen.dunning">
4006         <title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
4007
4008         <sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
4009           <title>Namen der Vorlagen</title>
4010
4011           <para>Die Namen der Vorlagen werden im System-Menü vom Benutzer
4012           eingegeben. Wird für ein Mahnlevel die Option zur automatischen
4013           Erstellung einer Rechnung über die Mahngebühren und Zinsen
4014           aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem
4015           Vorlagenname für diese Mahnstufe mit dem Zusatz
4016           <constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
4017           für die ausgewählte Sprache und den ausgewählten Drucker
4018           angehängt.</para>
4019         </sect3>
4020
4021         <sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
4022           <title>Allgemeine Variablen in Mahnungen</title>
4023
4024           <para>Die Variablen des Verkäufers stehen wie gewohnt als
4025           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
4026           Kunden stehen als Variablen <varname>name</varname>,
4027           <varname>street</varname>, <varname>zipcode</varname>,
4028           <varname>city</varname>, <varname>country</varname>,
4029           <varname>department_1</varname>, <varname>department_2</varname>,
4030           und <varname>email</varname> zur Verfügung.</para>
4031
4032           <para>Weitere Variablen beinhalten:</para>
4033
4034           <variablelist>
4035             <varlistentry>
4036               <term><varname>dunning_date</varname></term>
4037
4038               <listitem>
4039                 <para>Datum der Mahnung</para>
4040               </listitem>
4041             </varlistentry>
4042
4043             <varlistentry>
4044               <term><varname>dunning_duedate</varname></term>
4045
4046               <listitem>
4047                 <para>Fälligkeitsdatum für diese Mahhnung</para>
4048               </listitem>
4049             </varlistentry>
4050
4051             <varlistentry>
4052               <term><varname>dunning_id</varname></term>
4053
4054               <listitem>
4055                 <para>Mahnungsnummer</para>
4056               </listitem>
4057             </varlistentry>
4058
4059             <varlistentry>
4060               <term><varname>fee</varname></term>
4061
4062               <listitem>
4063                 <para>Kummulative Mahngebühren</para>
4064               </listitem>
4065             </varlistentry>
4066
4067             <varlistentry>
4068               <term><varname>interest_rate</varname></term>
4069
4070               <listitem>
4071                 <para>Zinssatz per anno in Prozent</para>
4072               </listitem>
4073             </varlistentry>
4074
4075             <varlistentry>
4076               <term><varname>total_amount</varname></term>
4077
4078               <listitem>
4079                 <para>Gesamter noch zu zahlender Betrag als
4080                 <function>fee</function> + <function>total_interest</function>
4081                 + <function>total_open_amount</function></para>
4082               </listitem>
4083             </varlistentry>
4084
4085             <varlistentry>
4086               <term><varname>total_interest</varname></term>
4087
4088               <listitem>
4089                 <para>Zinsen per anno über alle Rechnungen</para>
4090               </listitem>
4091             </varlistentry>
4092
4093             <varlistentry>
4094               <term><varname>total_open_amount</varname></term>
4095
4096               <listitem>
4097                 <para>Summe über alle offene Beträge der Rechnungen</para>
4098               </listitem>
4099             </varlistentry>
4100           </variablelist>
4101         </sect3>
4102
4103         <sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
4104           <title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
4105
4106           <variablelist>
4107             <varlistentry>
4108               <term><varname>dn_amount</varname></term>
4109
4110               <listitem>
4111                 <para>Rechnungssumme (brutto)</para>
4112               </listitem>
4113             </varlistentry>
4114
4115             <varlistentry>
4116               <term><varname>dn_duedate</varname></term>
4117
4118               <listitem>
4119                 <para>Originales Fälligkeitsdatum der Rechnung</para>
4120               </listitem>
4121             </varlistentry>
4122
4123             <varlistentry>
4124               <term><varname>dn_dunning_date</varname></term>
4125
4126               <listitem>
4127                 <para>Datum der Mahnung</para>
4128               </listitem>
4129             </varlistentry>
4130
4131             <varlistentry>
4132               <term><varname>dn_dunning_duedate</varname></term>
4133
4134               <listitem>
4135                 <para>Fälligkeitsdatum der Mahnung</para>
4136               </listitem>
4137             </varlistentry>
4138
4139             <varlistentry>
4140               <term><varname>dn_fee</varname></term>
4141
4142               <listitem>
4143                 <para>Kummulative Mahngebühr</para>
4144               </listitem>
4145             </varlistentry>
4146
4147             <varlistentry>
4148               <term><varname>dn_interest</varname></term>
4149
4150               <listitem>
4151                 <para>Zinsen per anno für diese Rechnung</para>
4152               </listitem>
4153             </varlistentry>
4154
4155             <varlistentry>
4156               <term><varname>dn_invnumber</varname></term>
4157
4158               <listitem>
4159                 <para>Rechnungsnummer</para>
4160               </listitem>
4161             </varlistentry>
4162
4163             <varlistentry>
4164               <term><varname>dn_linetotal</varname></term>
4165
4166               <listitem>
4167                 <para>Noch zu zahlender Betrag (ergibt sich aus
4168                 <varname>dn_open_amount</varname> + <varname>dn_fee</varname>
4169                 + <varname>dn_interest</varname>)</para>
4170               </listitem>
4171             </varlistentry>
4172
4173             <varlistentry>
4174               <term><varname>dn_netamount</varname></term>
4175
4176               <listitem>
4177                 <para>Rechnungssumme (netto)</para>
4178               </listitem>
4179             </varlistentry>
4180
4181             <varlistentry>
4182               <term><varname>dn_open_amount</varname></term>
4183
4184               <listitem>
4185                 <para>Offener Rechnungsbetrag</para>
4186               </listitem>
4187             </varlistentry>
4188
4189             <varlistentry>
4190               <term><varname>dn_ordnumber</varname></term>
4191
4192               <listitem>
4193                 <para>Bestellnummer</para>
4194               </listitem>
4195             </varlistentry>
4196
4197             <varlistentry>
4198               <term><varname>dn_transdate</varname></term>
4199
4200               <listitem>
4201                 <para>Rechnungsdatum</para>
4202               </listitem>
4203             </varlistentry>
4204
4205             <varlistentry>
4206               <term><varname>dn_curr</varname></term>
4207
4208               <listitem>
4209                 <para>Währung, in der die Rechnung erstellt wurde. (Die
4210                 Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
4211               </listitem>
4212             </varlistentry>
4213           </variablelist>
4214         </sect3>
4215
4216         <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
4217           <title>Variablen in automatisch erzeugten Rechnungen über
4218           Mahngebühren</title>
4219
4220           <para>Die Variablen des Verkäufers stehen wie gewohnt als
4221           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
4222           Kunden stehen als Variablen <varname>name</varname>,
4223           <varname>street</varname>, <varname>zipcode</varname>,
4224           <varname>city</varname>, <varname>country</varname>,
4225           <varname>department_1</varname>, <varname>department_2</varname>,
4226           und <varname>email</varname> zur Verfügung.</para>
4227
4228           <para>Weitere Variablen beinhalten:</para>
4229
4230           <variablelist>
4231             <varlistentry>
4232               <term><varname>duedate</varname></term>
4233
4234               <listitem>
4235                 <para>Fälligkeitsdatum der Rechnung</para>
4236               </listitem>
4237             </varlistentry>
4238
4239             <varlistentry>
4240               <term><varname>dunning_id</varname></term>
4241
4242               <listitem>
4243                 <para>Mahnungsnummer</para>
4244               </listitem>
4245             </varlistentry>
4246
4247             <varlistentry>
4248               <term><varname>fee</varname></term>
4249
4250               <listitem>
4251                 <para>Mahngebühren</para>
4252               </listitem>
4253             </varlistentry>
4254
4255             <varlistentry>
4256               <term><varname>interest</varname></term>
4257
4258               <listitem>
4259                 <para>Zinsen</para>
4260               </listitem>
4261             </varlistentry>
4262
4263             <varlistentry>
4264               <term><varname>invamount</varname></term>
4265
4266               <listitem>
4267                 <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
4268                 <varname>interest</varname>)</para>
4269               </listitem>
4270             </varlistentry>
4271
4272             <varlistentry>
4273               <term><varname>invdate</varname></term>
4274
4275               <listitem>
4276                 <para>Rechnungsdatum</para>
4277               </listitem>
4278             </varlistentry>
4279
4280             <varlistentry>
4281               <term><varname>invnumber</varname></term>
4282
4283               <listitem>
4284                 <para>Rechnungsnummer</para>
4285               </listitem>
4286             </varlistentry>
4287           </variablelist>
4288         </sect3>
4289       </sect2>
4290
4291       <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
4292         <title>Variablen in anderen Vorlagen</title>
4293
4294         <sect3>
4295           <title>Einführung</title>
4296
4297           <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
4298           Rechnung. Allerdings heißen die Variablen, die mit
4299           <varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
4300           fangen sie mit <varname>quo</varname> für "quotation" an:
4301           <varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
4302           wiederum fangen sie mit <varname>ord</varname> für "order" an:
4303           <varname>ordnumber</varname> für Bestellnummer etc.</para>
4304
4305           <para>Manche Variablen sind in anderen Vorlagen hingegen gar nicht
4306           vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies
4307           sind Variablen, die vom Geschäftsablauf her in der entsprechenden
4308           Vorlage keine Bedeutung haben oder noch nicht belegt sein
4309           können.</para>
4310
4311           <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
4312           in Rechnungen aufgeführt.</para>
4313         </sect3>
4314
4315         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
4316           <title>Angebote und Preisanfragen</title>
4317
4318           <variablelist>
4319             <varlistentry>
4320               <term><varname>quonumber</varname></term>
4321
4322               <listitem>
4323                 <para>Angebots- bzw. Anfragenummer</para>
4324               </listitem>
4325             </varlistentry>
4326
4327             <varlistentry>
4328               <term><varname>reqdate</varname></term>
4329
4330               <listitem>
4331                 <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
4332                 Preisanfragen)</para>
4333               </listitem>
4334             </varlistentry>
4335
4336             <varlistentry>
4337               <term><varname>transdate</varname></term>
4338
4339               <listitem>
4340                 <para>Angebots- bzw. Anfragedatum</para>
4341               </listitem>
4342             </varlistentry>
4343           </variablelist>
4344         </sect3>
4345
4346         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
4347           <title>Auftragsbestätigungen und Lieferantenaufträge</title>
4348
4349           <variablelist>
4350             <varlistentry>
4351               <term><varname>ordnumber</varname></term>
4352
4353               <listitem>
4354                 <para>Auftragsnummer</para>
4355               </listitem>
4356             </varlistentry>
4357
4358             <varlistentry>
4359               <term><varname>reqdate</varname></term>
4360
4361               <listitem>
4362                 <para>Lieferdatum</para>
4363               </listitem>
4364             </varlistentry>
4365
4366             <varlistentry>
4367               <term><varname>transdate</varname></term>
4368
4369               <listitem>
4370                 <para>Auftragsdatum</para>
4371               </listitem>
4372             </varlistentry>
4373           </variablelist>
4374         </sect3>
4375
4376         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
4377           <title>Lieferscheine (Verkauf und Einkauf)</title>
4378
4379           <variablelist>
4380             <varlistentry>
4381               <term><varname>cusordnumber</varname></term>
4382
4383               <listitem>
4384                 <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
4385                 des Lieferanten (im Einkauf)</para>
4386               </listitem>
4387             </varlistentry>
4388
4389             <varlistentry>
4390               <term><varname>donumber</varname></term>
4391
4392               <listitem>
4393                 <para>Lieferscheinnummer</para>
4394               </listitem>
4395             </varlistentry>
4396
4397             <varlistentry>
4398               <term><varname>transdate</varname></term>
4399
4400               <listitem>
4401                 <para>Lieferscheindatum</para>
4402               </listitem>
4403             </varlistentry>
4404           </variablelist>
4405
4406           <para>Für jede Position eines Lieferscheines gibt es ein Unterarray
4407           mit den Informationen darüber, von welchem Lager und Lagerplatz aus
4408           die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
4409           Lagerplatz sie eingelagert wurden. Diese müssen mittels einer
4410           <function>foreach</function>-Schleife ausgegeben werden. Diese
4411           Variablen sind:</para>
4412
4413           <variablelist>
4414             <varlistentry>
4415               <term><varname>si_bin</varname></term>
4416
4417               <listitem>
4418                 <para>Lagerplatz</para>
4419               </listitem>
4420             </varlistentry>
4421
4422             <varlistentry>
4423               <term><varname>si_chargenumber</varname></term>
4424
4425               <listitem>
4426                 <para>Chargennummer</para>
4427               </listitem>
4428             </varlistentry>
4429
4430             <varlistentry>
4431               <term><varname>si_bestbefore</varname></term>
4432
4433               <listitem>
4434                 <para>Mindesthaltbarkeit</para>
4435               </listitem>
4436             </varlistentry>
4437
4438             <varlistentry>
4439               <term><varname>si_number</varname></term>
4440
4441               <listitem>
4442                 <para>Artikelnummer</para>
4443               </listitem>
4444             </varlistentry>
4445
4446             <varlistentry>
4447               <term><varname>si_qty</varname></term>
4448
4449               <listitem>
4450                 <para>Anzahl bzw. Menge</para>
4451               </listitem>
4452             </varlistentry>
4453
4454             <varlistentry>
4455               <term><varname>si_runningnumber</varname></term>
4456
4457               <listitem>
4458                 <para>Positionsnummer (1, 2, 3 etc)</para>
4459               </listitem>
4460             </varlistentry>
4461
4462             <varlistentry>
4463               <term><varname>si_unit</varname></term>
4464
4465               <listitem>
4466                 <para>Einheit</para>
4467               </listitem>
4468             </varlistentry>
4469
4470             <varlistentry>
4471               <term><varname>si_warehouse</varname></term>
4472
4473               <listitem>
4474                 <para>Lager</para>
4475               </listitem>
4476             </varlistentry>
4477           </variablelist>
4478         </sect3>
4479
4480         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
4481           <title>Variablen für Sammelrechnung</title>
4482
4483           <variablelist>
4484             <varlistentry>
4485               <term><varname>c0total</varname></term>
4486
4487               <listitem>
4488                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
4489                 Tage</para>
4490               </listitem>
4491             </varlistentry>
4492
4493             <varlistentry>
4494               <term><varname>c30total</varname></term>
4495
4496               <listitem>
4497                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
4498                 und &lt; 60 Tage</para>
4499               </listitem>
4500             </varlistentry>
4501
4502             <varlistentry>
4503               <term><varname>c60total</varname></term>
4504
4505               <listitem>
4506                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
4507                 und &lt; 90 Tage</para>
4508               </listitem>
4509             </varlistentry>
4510
4511             <varlistentry>
4512               <term><varname>c90total</varname></term>
4513
4514               <listitem>
4515                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
4516                 Tage</para>
4517               </listitem>
4518             </varlistentry>
4519
4520             <varlistentry>
4521               <term><varname>total</varname></term>
4522
4523               <listitem>
4524                 <para>Gesamtbetrag aller Rechnungen</para>
4525               </listitem>
4526             </varlistentry>
4527           </variablelist>
4528
4529           <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
4530
4531           <variablelist>
4532             <varlistentry>
4533               <term><varname>invnumber</varname></term>
4534
4535               <listitem>
4536                 <para>Rechnungsnummer</para>
4537               </listitem>
4538             </varlistentry>
4539
4540             <varlistentry>
4541               <term><varname>invdate</varname></term>
4542
4543               <listitem>
4544                 <para>Rechnungsdatum</para>
4545               </listitem>
4546             </varlistentry>
4547
4548             <varlistentry>
4549               <term><varname>duedate</varname></term>
4550
4551               <listitem>
4552                 <para>Fälligkeitsdatum</para>
4553               </listitem>
4554             </varlistentry>
4555
4556             <varlistentry>
4557               <term><varname>amount</varname></term>
4558
4559               <listitem>
4560                 <para>Summe der Rechnung</para>
4561               </listitem>
4562             </varlistentry>
4563
4564             <varlistentry>
4565               <term><varname>open</varname></term>
4566
4567               <listitem>
4568                 <para>Noch offener Betrag der Rechnung</para>
4569               </listitem>
4570             </varlistentry>
4571
4572             <varlistentry>
4573               <term><varname>c0</varname></term>
4574
4575               <listitem>
4576                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
4577                 Tage</para>
4578               </listitem>
4579             </varlistentry>
4580
4581             <varlistentry>
4582               <term><varname>c30</varname></term>
4583
4584               <listitem>
4585                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
4586                 &lt; 60 Tage</para>
4587               </listitem>
4588             </varlistentry>
4589
4590             <varlistentry>
4591               <term><varname>c60</varname></term>
4592
4593               <listitem>
4594                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
4595                 &lt; 90 Tage</para>
4596               </listitem>
4597             </varlistentry>
4598
4599             <varlistentry>
4600               <term><varname>c90</varname></term>
4601
4602               <listitem>
4603                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
4604                 Tage</para>
4605               </listitem>
4606             </varlistentry>
4607           </variablelist>
4608         </sect3>
4609       </sect2>
4610
4611       <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
4612         <title>Blöcke, bedingte Anweisungen und Schleifen</title>
4613
4614         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
4615           <title>Einfürhung</title>
4616
4617           <para>Der Parser kennt neben den Variablen einige weitere
4618           Konstrukte, die gesondert behandelt werden. Diese sind wie
4619           Variablennamen in spezieller Weise markiert:
4620           <command>&lt;%anweisung%&gt; ... &lt;%end%&gt;</command></para>
4621
4622           <para>Anmerkung zum <command>&lt;%end%&gt;</command>: Der besseren
4623           Verständlichkeit halber kann man nach dem <command>end</command>
4624           noch beliebig weitere Wörter schreiben, um so zu markieren, welche
4625           Anweisung (z.B. <command>if</command> oder
4626           <command>foreach</command>) damit abgeschlossen wird.</para>
4627
4628           <para>Beispiel: Lautet der Beginn eines Blockes z.B.
4629           <command>&lt;%if type == "sales_quotation"%&gt;</command>, so könnte
4630           er mit <command>&lt;%end%&gt;</command> genauso abgeschlossen werden
4631           wie mit <command>&lt;%end if%&gt;</command> oder auch
4632           <command>&lt;%end type == "sales_quotation"%&gt;</command>.</para>
4633         </sect3>
4634
4635         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
4636           <title>Der if-Block</title>
4637
4638           <programlisting>&lt;%if variablenname%&gt;
4639 ...
4640 &lt;%end%&gt;</programlisting>
4641
4642           <para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
4643           und dem "end" werden nur ausgegeben, wenn die Variable
4644           <varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
4645
4646           <para>Handelt es sich bei der benannten Variable um ein Array, also um einen Variablennamen, über den man mit
4647           <command>&lt;%foreach variablenname%&gt;</command> iteriert, so wird mit diesem Konstrukt darauf getestet, ob das Array Elemente
4648           enthält. Somit würde im folgenden Beispiel nur dann eine Liste von Zahlungseingängen samt ihrer Überschrift "Zahlungseingänge"
4649           ausgegeben, wenn tatsächlich welche getätigt wurden:</para>
4650
4651           <programlisting>&lt;%if payment%&gt;
4652 Zahlungseingänge:
4653  &lt;%foreach payment%&gt;
4654    Am &lt;%paymentdate%&gt;: &lt;%payment%&gt; €
4655  &lt;%end foreach%&gt;
4656 &lt;%end if%&gt;</programlisting>
4657
4658           <para>Die Bedingung kann auch negiert werden, indem das Wort
4659           <function>not</function> nach dem <filename>if</filename> verwendet
4660           wird. Beispiel:</para>
4661
4662           <programlisting>&lt;%if not cp_greeting%&gt;
4663 ...
4664 &lt;%end%&gt;</programlisting>
4665
4666           <para>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
4667           oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
4668           einer Variablen mit einer festen Zeichenkette oder einer anderen
4669           Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
4670           oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
4671           die rechte Seite des Vergleichsoperators in Anführungszeichen
4672           gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
4673           anderer Variablen). Zwei Beispiele, die beide Vergleiche
4674           zeigen:</para>
4675
4676           <programlisting>&lt;%if var1 == "Wert"%&gt;</programlisting>
4677
4678           <para>Testet die Variable <varname>var1</varname> auf
4679           übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
4680           Mittels <function>!=</function> anstelle von <function>==</function>
4681           würde auf Ungleichheit getestet.</para>
4682
4683           <programlisting>&lt;%if var1 == var2%&gt;</programlisting>
4684
4685           <para>Testet die Variable <varname>var1</varname> auf
4686           übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
4687           <function>!=</function> anstelle von <function>==</function> würde
4688           auf Ungleichheit getestet.</para>
4689
4690           <para>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit
4691           auch Tests auf übereinstimmung mit regulären Ausdrücken ohne
4692           Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
4693           dieselbe Syntax wie oben nur mit <function>=~</function> und
4694           <function>!~</function> als Vergleichsoperatoren.</para>
4695
4696           <para>Beispiel für einen Test, ob die Variable
4697           <varname>intnotes</varname> (interne Bemerkungen) das Wort
4698           <constant>schwierig</constant> enthält:</para>
4699
4700           <programlisting>&lt;%if intnotes =~ "schwierig"%&gt;</programlisting>
4701         </sect3>
4702
4703         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
4704           <title>Der foreach-Block</title>
4705
4706           <programlisting>&lt;%foreach variablenname%&gt;
4707 ...
4708 &lt;%end%&gt;</programlisting>
4709
4710           <para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
4711           wie das Perl-Array der Variablen <varname>variablenname</varname>
4712           Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen
4713           Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern
4714           benutzt. In jedem Durchlauf werden die <link
4715           linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
4716           Variablen</link> jeweils auf den Wert für die aktuelle Position
4717           gesetzt.</para>
4718
4719           <para>Die Syntax sieht normalerweise wie folgt aus:</para>
4720
4721           <programlisting>&lt;%foreach number%&gt;
4722 Position: &lt;%runningnumber%&gt;
4723 Anzahl: &lt;%qty%&gt;
4724 Artikelnummer: &lt;%number%&gt;
4725 Beschreibung: &lt;%description%&gt;
4726 ...
4727 &lt;%end%&gt;</programlisting>
4728
4729           <para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
4730           <function>&lt;%foreach%&gt;</function>-Block innerhalb einer
4731           Tabellenzelle auf, so wird die komplette Tabellenzeile so oft
4732           wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der
4733           Inhalt zwischen <function>&lt;%foreach%&gt;</function> und
4734           <function>&lt;%end%&gt;</function> wiederholt, nicht aber die
4735           komplette Zeile, in der er steht.</para>
4736         </sect3>
4737       </sect2>
4738
4739       <sect2 id="dokumentenvorlagen-und-variablen.markup">
4740         <title>Markup-Code zur Textformatierung innerhalb von
4741         Formularen</title>
4742
4743         <para>Wenn der Benutzer innhalb von Formularen in kivitendo Text
4744         anders formatiert haben möchte, so ist dies begrenzt möglich.
4745         kivitendo unterstützt die Textformatierung mit HTML-ähnlichen Tags.
4746         Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung
4747         Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird
4748         dann automatisch in Anweisungen für das ausgewählte Vorlagenformat
4749         (HTML oder PDF über LaTeX) umgesetzt.</para>
4750
4751         <para>Die unterstützen Formatierungen sind:</para>
4752
4753         <variablelist>
4754           <varlistentry>
4755             <term>&lt;b&gt;Text&lt;/b&gt;</term>
4756
4757             <listitem>
4758               <para>Text wird in Fettdruck gesetzt.</para>
4759             </listitem>
4760           </varlistentry>
4761
4762           <varlistentry>
4763             <term>&lt;i&gt;Text&lt;/i&gt;</term>
4764
4765             <listitem>
4766               <para>Text wird kursiv gesetzt.</para>
4767             </listitem>
4768           </varlistentry>
4769
4770           <varlistentry>
4771             <term>&lt;u&gt;Text&lt;/u&gt;</term>
4772
4773             <listitem>
4774               <para>Text wird unterstrichen.</para>
4775             </listitem>
4776           </varlistentry>
4777
4778           <varlistentry>
4779             <term>&lt;s&gt;Text&lt;/s&gt;</term>
4780
4781             <listitem>
4782               <para>Text wird durchgestrichen. Diese Formatierung ist nicht
4783               bei der Ausgabe als PDF über LaTeX verfügbar.</para>
4784             </listitem>
4785           </varlistentry>
4786
4787           <varlistentry>
4788             <term>&lt;bullet&gt;</term>
4789
4790             <listitem>
4791               <para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
4792               unten).</para>
4793             </listitem>
4794           </varlistentry>
4795         </variablelist>
4796
4797         <para>Der Befehl <command>&lt;bullet&gt;</command> funktioniert
4798         momentan auch nur in Latex-Vorlagen.</para>
4799       </sect2>
4800     </sect1>
4801
4802     <sect1 id="excel-templates">
4803       <title>Excel-Vorlagen</title>
4804
4805       <sect2 id="excel-templates.summary">
4806         <title>Zusammenfassung</title>
4807
4808         <para>Dieses Dokument beschreibt den Mechanismus, mit dem
4809         Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
4810         einhergehen.</para>
4811       </sect2>
4812
4813       <sect2 id="excel-templates.usage">
4814         <title>Bedienung</title>
4815
4816         <para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
4817         werden. Die Konfigurationsoption heißt <varname>excel_templates =
4818         1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
4819
4820         <para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
4821         anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
4822         werden. In den normalen Verkaufsmasken taucht nun
4823         <constant>Excel</constant> als auswählbares Format auf und kann von da
4824         an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
4825
4826         <para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
4827         eine Angebotsvorlage und wird unter dem internen Namen der Angebote
4828         <filename>sales_quotation.xls</filename> gespeichert.</para>
4829       </sect2>
4830
4831       <sect2 id="excel-templates.syntax">
4832         <title>Variablensyntax</title>
4833
4834         <para>Einfache Syntax:
4835         <command>&lt;&lt;varname&gt;&gt;</command></para>
4836
4837         <para>Dabei sind <constant>&lt;&lt;</constant> und
4838         <constant>&gt;&gt;</constant> die Delimiter. Da Excel auf festen
4839         Breiten besteht, kann der Tag künstlich verlängert werden, indem
4840         weitere <constant>&lt;</constant> oder <constant>&gt;</constant>
4841         eingefügt werden. Der Tag muss nicht symmetrisch sein.
4842         Beispiel:</para>
4843
4844         <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>
4845
4846         <para>Um die Limitierung der festen Breite zu reduzieren, können
4847         weitere Variablen in einem Block interpoliert werden. Whitespace wird
4848         dazwishen dann erhalten. Beispiel:</para>
4849
4850         <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>
4851
4852         <para>Die Variablen werden interpoliert, und linksbündig mit
4853         Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
4854         lang, werden überzählige Zeichen abgeschnitten.</para>
4855
4856         <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
4857         der Block mit einem Leerzeichen anfängt. Beispiel:</para>
4858
4859         <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>
4860
4861         <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
4862         Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
4863         entfernt.</para>
4864       </sect2>
4865
4866       <sect2 id="excel-templates.limitations">
4867         <title>Einschränkungen</title>
4868
4869         <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
4870         mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
4871         beschränkt sich daher darauf, Textstellen exakt durch einen anderen
4872         Text zu ersetzen.</para>
4873
4874         <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
4875         <command>&lt;%if%&gt;</command> und
4876         <command>&lt;%foreach%&gt;</command> nicht vorhanden. Der Delimiter
4877         <constant>&lt;% %&gt;</constant> kommt in den Headerinformationen
4878         evtl. vor. Deshalb wurde auf den sichereren Delimiter
4879         <constant>&lt;&lt;</constant> und <constant>&gt;&gt;</constant>
4880         gewechselt.</para>
4881       </sect2>
4882     </sect1>
4883     <sect1 id="features.warehouse">
4884     <title>Mandantenkonfiguration Lager</title>
4885         Die Lagerverwaltung in kivitendo funktioniert standardmässig wie folgt:
4886         Wird ein Lager mit einem Lagerplatz angelegt, so gibt es die Möglichkeit hier über den
4887         Menüpunkt Lager entsprechende Warenbewegungen durchzuführen. Ferner kann
4888         jede Position eines Lieferscheins ein-, bzw. ausgelagert werden (Einkauf-, bzw. Verkauf).
4889         Es können beliebig viele Lager mit beliebig vielen Lagerplätzen abgebildet werden.
4890         Die Lagerbewegungen über einen Lieferschein erfolgt durch Anklicken jeder Einzelposition und
4891         das Auswählen dieser Position zu einem Lager mit Lagerplatz.
4892         Dieses Verfahren lässt sich schrittweise vereinfachen, je nachdem wie die Einstellungen in
4893         der Mandatenkonfiguration gesetzt werden.
4894        <itemizedlist>
4895           <listitem>
4896             <para><option>Auslagern über Standardlagerplatz</option> Hier wird ein zusätzlicher Knopf (Auslagern über Standard-Lagerplatz)
4897             in dem Lieferschein-Beleg hinzugefügt, der dann alle Lagerbewegungen über den Standardlagerplatz (konfigurierbar pro Ware) durchführt.
4898             </para>
4899           </listitem>
4900           <listitem>
4901             <para><option>Auslagern ohne Bestandsprüfung</option>Das obige Auslagern schlägt fehl, wenn die entsprechende Menge für
4902             die Lagerbewegung nicht vorhanden ist, möchte man dies auch ignorieren und ggf. dann nachpflegen, so kann man eine Negativ-Warenmenge mit dieser Option
4903             erlauben. Hierfür muss ein entsprechender Lagerplatz (Fehlbestand, o.ä.) konfiguriert sein.</para>
4904           </listitem>
4905        </itemizedlist>
4906         Zusätzliche Funktionshinweise:
4907          <itemizedlist>
4908           <listitem><para><option>Standard-Lagerplatz</option>Ist dieser konfiguriert, wird dies auch als Standard-Voreinstellung bei der Neuerfassung von
4909           Stammdaten-> Waren / Dienstleistung / Erzeugnis verwendet.
4910           </para>
4911           </listitem>
4912           <listitem><para><option>Standard-Lagerplatz verwenden, falls keiner in Stammdaten definiert</option>Wird beim 'Auslagern über Standardlagerplatz'
4913           keine Standardlagerplatz zu der Ware gefunden, so wird mit dieser Option einfach der Standardlagerplatz verwendet.
4914           </para>
4915           </listitem>
4916        </itemizedlist>
4917     </sect1>
4918   </chapter>
4919
4920   <chapter>
4921     <title>Entwicklerdokumentation</title>
4922
4923     <sect1 id="devel.globals" xreflabel="Globale Variablen">
4924       <title>Globale Variablen</title>
4925
4926       <sect2>
4927         <title>Wie sehen globale Variablen in Perl aus?</title>
4928
4929         <para>Globale Variablen liegen in einem speziellen namespace namens
4930         "main", der von überall erreichbar ist. Darüber hinaus sind bareword
4931         globs global und die meisten speziellen Variablen sind...
4932         speziell.</para>
4933
4934         <para>Daraus ergeben sich folgende Formen:</para>
4935
4936         <variablelist>
4937           <varlistentry>
4938             <term><literal>$main::form</literal></term>
4939
4940             <listitem>
4941               <para>expliziter Namespace "main"</para>
4942             </listitem>
4943           </varlistentry>
4944
4945           <varlistentry>
4946             <term><literal>$::form</literal></term>
4947
4948             <listitem>
4949               <para>impliziter Namespace "main"</para>
4950             </listitem>
4951           </varlistentry>
4952
4953           <varlistentry>
4954             <term><literal>open FILE, "file.txt"</literal></term>
4955
4956             <listitem>
4957               <para><varname>FILE</varname> ist global</para>
4958             </listitem>
4959           </varlistentry>
4960
4961           <varlistentry>
4962             <term><literal>$_</literal></term>
4963
4964             <listitem>
4965               <para>speziell</para>
4966             </listitem>
4967           </varlistentry>
4968         </variablelist>
4969
4970         <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
4971         Schlüsselwort wie "<function>global</function>", mit dem man
4972         importieren kann. <function>my</function>, <function>our</function>
4973         und <function>local</function> machen was anderes.</para>
4974
4975         <variablelist>
4976           <varlistentry>
4977             <term><literal>my $form</literal></term>
4978
4979             <listitem>
4980               <para>lexikalische Variable, gültig bis zum Ende des
4981               Scopes</para>
4982             </listitem>
4983           </varlistentry>
4984
4985           <varlistentry>
4986             <term><literal>our $form</literal></term>
4987
4988             <listitem>
4989               <para><varname>$form</varname> referenziert ab hier
4990               <varname>$PACKAGE::form</varname>.</para>
4991             </listitem>
4992           </varlistentry>
4993
4994           <varlistentry>
4995             <term><literal>local $form</literal></term>
4996
4997             <listitem>
4998               <para>Alle Änderungen an <varname>$form</varname> werden am Ende
4999               des scopes zurückgesetzt</para>
5000             </listitem>
5001           </varlistentry>
5002         </variablelist>
5003       </sect2>
5004
5005       <sect2>
5006         <title>Warum sind globale Variablen ein Problem?</title>
5007
5008         <para>Das erste Problem ist <productname>FCGI</productname>.</para>
5009
5010         <para><productname>SQL-Ledger</productname> hat fast alles im globalen
5011         namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
5012         Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
5013         aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
5014         Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
5015         Datenbankverbindungen, weil die sehr lange zum Initialisieren
5016         brauchen.</para>
5017
5018         <para>Das zweite Problem ist <function>strict</function>. Unter
5019         <function>strict</function> werden alle Variablen die nicht explizit
5020         mit <function>Package</function>, <function>my</function> oder
5021         <function>our</function> angegeben werden als Tippfehler angemarkert,
5022         dies hat, seit der Einführung, u.a. schon so manche langwierige
5023         Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
5024         angegeben werden, werden die nicht geprüft, und somit kann sich
5025         schnell ein Tippfehler einschleichen.</para>
5026       </sect2>
5027
5028       <sect2>
5029         <title>Kanonische globale Variablen</title>
5030
5031         <para>Um dieses Problem im Griff zu halten gibt es einige wenige
5032         globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
5033         vorgegebenen Eigenschaften, und alles andere sollte anderweitig
5034         umhergereicht werden.</para>
5035
5036         <para>Diese Variablen sind im Moment die folgenden neun:</para>
5037
5038         <itemizedlist>
5039           <listitem>
5040             <para><varname>$::form</varname></para>
5041           </listitem>
5042
5043           <listitem>
5044             <para><varname>%::myconfig</varname></para>
5045           </listitem>
5046
5047           <listitem>
5048             <para><varname>$::locale</varname></para>
5049           </listitem>
5050
5051           <listitem>
5052             <para><varname>$::lxdebug</varname></para>
5053           </listitem>
5054
5055           <listitem>
5056             <para><varname>$::auth</varname></para>
5057           </listitem>
5058
5059           <listitem>
5060             <para><varname>$::lx_office_conf</varname></para>
5061           </listitem>
5062
5063           <listitem>
5064             <para><varname>$::instance_conf</varname></para>
5065           </listitem>
5066
5067           <listitem>
5068             <para><varname>$::dispatcher</varname></para>
5069           </listitem>
5070
5071           <listitem>
5072             <para><varname>$::request</varname></para>
5073           </listitem>
5074         </itemizedlist>
5075
5076         <para>Damit diese nicht erneut als Müllhalde missbraucht werden, im
5077         Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
5078         Eigenschaften (Konventionen):</para>
5079
5080         <sect3>
5081           <title>$::form</title>
5082
5083           <itemizedlist>
5084             <listitem>
5085               <para>Ist ein Objekt der Klasse
5086               "<classname>Form</classname>"</para>
5087             </listitem>
5088
5089             <listitem>
5090               <para>Wird nach jedem Request gelöscht</para>
5091             </listitem>
5092
5093             <listitem>
5094               <para>Muss auch in Tests und Konsolenscripts vorhanden
5095               sein.</para>
5096             </listitem>
5097
5098             <listitem>
5099               <para>Enthält am Anfang eines Requests die Requestparameter vom
5100               User</para>
5101             </listitem>
5102
5103             <listitem>
5104               <para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
5105               cachen, das wird aber momentan absichtlich zerstört</para>
5106             </listitem>
5107           </itemizedlist>
5108
5109           <para><varname>$::form</varname> wurde unter <productname>SQL
5110           Ledger</productname> als Gottobjekt für alles misbraucht. Sämtliche
5111           alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
5112           heißt, alles was einem lieb ist (alle Variablen die einem ans Herz
5113           gewachsen sind), sollte man vor einem Aufruf (!) von zum Beispiel
5114           <function>IS-&gt;retrieve_customer()</function> in Sicherheit
5115           bringen.</para>
5116
5117           <para>Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man
5118           Berechnung in einem bestimmten Format durchführt (SL/Form.pm Zeile
5119           3552, Stand version 2.7beta), um dies hinterher wieder auf den
5120           richtigen Wert zu setzen:</para>
5121
5122           <programlisting>  my $saved_numberformat    = $::myconfig{numberformat};
5123   $::myconfig{numberformat} = $numberformat;
5124   # (...) div Berechnungen
5125   $::myconfig{numberformat} = $saved_numberformat;</programlisting>
5126
5127           <para>Das Objekt der Klasse Form hat leider im Moment noch viele
5128           zentrale Funktionen die vom internen Zustand abhängen, deshalb bitte
5129           nie einfach zerstören oder überschreiben (zumindestens nicht kurz
5130           vor einem Release oder in Absprache über bspw. die devel-Liste ;-).
5131           Es geht ziemlich sicher etwas kaputt.</para>
5132
5133           <para><varname>$::form</varname> ist gleichzeitig der Standard Scope
5134           in den <productname>Template::Toolkit</productname> Templates
5135           außerhalb der Controller: der Ausdruck <function>[% var
5136           %]</function> greift auf <varname>$::form-&gt;{var}</varname> zu.
5137           Unter Controllern ist der Standard Scope anders, da lautet der
5138           Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
5139           normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
5140           <function>&lt;%var%&gt;</function> zeigt auf
5141           <varname>$::form-&gt;{var}</varname>. Nochmal von der anderen Seite
5142           erläutert, innerhalb von (Web-)Templates sieht man häufiger solche
5143           Konstrukte:</para>
5144
5145           <programlisting>[%- IF business %]
5146 # (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
5147 [%- END %]</programlisting>
5148
5149           <para>Entweder wird hier dann $::form-&gt;{business} ausgewertet
5150           oder aber der Funktion
5151           <function>$form-&gt;parse_html_template</function> wird explizit
5152           noch ein zusätzlicher Hash übergeben, der dann auch in den
5153           (Web-)Templates zu Verfügung steht, bspw. so:</para>
5154
5155           <programlisting>$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</programlisting>
5156
5157           <para>Innerhalb von Schleifen wird
5158           <varname>$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</varname>
5159           bevorzugt, wenn vorhanden. Ein Beispiel findet sich in SL/DO.pm,
5160           welches über alle Positionen eines Lieferscheins in Schleife
5161           läuft:</para>
5162
5163           <programlisting>for $i (1 .. $form-&gt;{rowcount}) {
5164   # ...
5165   push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
5166   push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
5167   push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
5168   # ...
5169 }</programlisting>
5170         </sect3>
5171
5172         <sect3>
5173           <title>%::myconfig</title>
5174
5175           <itemizedlist>
5176             <listitem>
5177               <para>Das einzige Hash unter den globalen Variablen</para>
5178             </listitem>
5179
5180             <listitem>
5181               <para>Wird spätestens benötigt wenn auf die Datenbank
5182               zugegriffen wird</para>
5183             </listitem>
5184
5185             <listitem>
5186               <para>Wird bei jedem Request neu erstellt.</para>
5187             </listitem>
5188
5189             <listitem>
5190               <para>Enthält die Userdaten des aktuellen Logins</para>
5191             </listitem>
5192
5193             <listitem>
5194               <para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
5195               extern serialisiert werden, weil da auch der Datenbankzugriff
5196               für diesen user drinsteht.</para>
5197             </listitem>
5198
5199             <listitem>
5200               <para>Enthält unter anderem Listenbegrenzung vclimit,
5201               Datumsformat dateformat und Nummernformat numberformat</para>
5202             </listitem>
5203
5204             <listitem>
5205               <para>Enthält Datenbankzugriffinformationen</para>
5206             </listitem>
5207           </itemizedlist>
5208
5209           <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
5210           ein Userobjekt. Die meisten Funktionen, die etwas anhand des
5211           aktuellen Users entscheiden müssen, befragen
5212           <varname>%::myconfig</varname>. Innerhalb der Anwendungen sind dies
5213           überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
5214           -&gt; <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
5215           Informationen über den Benutzer die über die
5216           Administrator-Schnittstelle eingegeben wurden.</para>
5217         </sect3>
5218
5219         <sect3>
5220           <title>$::locale</title>
5221
5222           <itemizedlist>
5223             <listitem>
5224               <para>Objekt der Klasse "Locale"</para>
5225             </listitem>
5226
5227             <listitem>
5228               <para>Wird pro Request erstellt</para>
5229             </listitem>
5230
5231             <listitem>
5232               <para>Muss auch für Tests und Scripte immer verfügbar
5233               sein.</para>
5234             </listitem>
5235
5236             <listitem>
5237               <para>Cached intern über Requestgrenzen hinweg benutzte
5238               Locales</para>
5239             </listitem>
5240           </itemizedlist>
5241
5242           <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
5243           Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
5244         </sect3>
5245
5246         <sect3>
5247           <title>$::lxdebug</title>
5248
5249           <itemizedlist>
5250             <listitem>
5251               <para>Objekt der Klasse "LXDebug"</para>
5252             </listitem>
5253
5254             <listitem>
5255               <para>Wird global gecached</para>
5256             </listitem>
5257
5258             <listitem>
5259               <para>Muss immer verfügbar sein, in nahezu allen
5260               Funktionen</para>
5261             </listitem>
5262           </itemizedlist>
5263
5264           <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
5265           bereit, wie "<function>enter_sub</function>" und
5266           "<function>leave_sub</function>", mit denen in den alten Modulen ein
5267           brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
5268           der man die Wallclockzeit seit Requeststart loggen kann, sowie
5269           "<function>message</function>" und "<function>dump</function>" mit
5270           denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
5271           packen kann.</para>
5272
5273           <para>Beispielsweise so:</para>
5274
5275           <programlisting>$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
5276 $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</programlisting>
5277         </sect3>
5278
5279         <sect3>
5280           <title>$::auth</title>
5281
5282           <itemizedlist>
5283             <listitem>
5284               <para>Objekt der Klasse "SL::Auth"</para>
5285             </listitem>
5286
5287             <listitem>
5288               <para>Wird global gecached</para>
5289             </listitem>
5290
5291             <listitem>
5292               <para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
5293             </listitem>
5294
5295             <listitem>
5296               <para>Wird nach jedem Request resettet.</para>
5297             </listitem>
5298           </itemizedlist>
5299
5300           <para><varname>$::auth</varname> stellt Funktionen bereit um die
5301           Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
5302           vom aktuellen User abhängen wird das Objekt aus
5303           Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
5304           Request kurz resettet.</para>
5305
5306           <para>Dieses Objekt kapselt auch den gerade aktiven Mandanten. Dessen Einstellungen können über
5307           <literal>$::auth-&gt;client</literal> abgefragt werden; Rückgabewert ist ein Hash mit den Werten aus der Tabelle
5308           <literal>auth.clients</literal>.</para>
5309         </sect3>
5310
5311         <sect3>
5312           <title>$::lx_office_conf</title>
5313
5314           <itemizedlist>
5315             <listitem>
5316               <para>Objekt der Klasse
5317               "<classname>SL::LxOfficeConf</classname>"</para>
5318             </listitem>
5319
5320             <listitem>
5321               <para>Global gecached</para>
5322             </listitem>
5323
5324             <listitem>
5325               <para>Repräsentation der
5326               <filename>config/kivitendo.conf[.default]</filename>-Dateien</para>
5327             </listitem>
5328           </itemizedlist>
5329
5330           <para>Globale Konfiguration. Configdateien werden zum Start gelesen
5331           und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
5332           das Programm die Konfiguration ändern kann oder sollte.</para>
5333
5334           <para>Beispielsweise ist über den Konfigurationseintrag [debug] die
5335           Debug- und Trace-Log-Datei wie folgt konfiguriert und
5336           verfügbar:</para>
5337
5338           <programlisting>[debug]
5339 file_name = /tmp/kivitendo-debug.log</programlisting>
5340
5341           <para>ist der Key <varname>file</varname> im Programm als
5342           <varname>$::lx_office_conf-&gt;{debug}{file}</varname>
5343           erreichbar.</para>
5344
5345           <warning>
5346             <para>Zugriff auf die Konfiguration erfolgt im Moment über
5347             Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
5348           </warning>
5349         </sect3>
5350
5351         <sect3>
5352           <title>$::instance_conf</title>
5353
5354           <itemizedlist>
5355             <listitem>
5356               <para>Objekt der Klasse
5357               "<classname>SL::InstanceConfiguration</classname>"</para>
5358             </listitem>
5359
5360             <listitem>
5361               <para>wird pro Request neu erstellt</para>
5362             </listitem>
5363           </itemizedlist>
5364
5365           <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
5366           speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
5367           ist hier eine Mandantendatenbank. Beispielsweise überprüft
5368           <programlisting>$::instance_conf-&gt;get_inventory_system eq 'perpetual'</programlisting>
5369           ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para>
5370         </sect3>
5371
5372         <sect3>
5373           <title>$::dispatcher</title>
5374
5375           <itemizedlist>
5376             <listitem>
5377               <para>Objekt der Klasse
5378               "<varname>SL::Dispatcher</varname>"</para>
5379             </listitem>
5380
5381             <listitem>
5382               <para>wird pro Serverprozess erstellt.</para>
5383             </listitem>
5384
5385             <listitem>
5386               <para>enthält Informationen über die technische Verbindung zum
5387               Server</para>
5388             </listitem>
5389           </itemizedlist>
5390
5391           <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
5392           global gespeichert wird. Wird vermutlich irgendwann in einem anderen
5393           Objekt untergebracht.</para>
5394         </sect3>
5395
5396         <sect3>
5397           <title>$::request</title>
5398
5399           <itemizedlist>
5400             <listitem>
5401               <para>Hashref (evtl später Objekt)</para>
5402             </listitem>
5403
5404             <listitem>
5405               <para>Wird pro Request neu initialisiert.</para>
5406             </listitem>
5407
5408             <listitem>
5409               <para>Keine Unterstruktur garantiert.</para>
5410             </listitem>
5411           </itemizedlist>
5412
5413           <para><varname>$::request</varname> ist ein generischer Platz um
5414           Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
5415           at a distance benutzt werden, sondern um lokales memoizing zu
5416           ermöglichen, das garantiert am Ende des Requests zerstört
5417           wird.</para>
5418
5419           <para>Vieles von dem, was im moment in <varname>$::form</varname>
5420           liegt, sollte eigentlich hier liegen. Die groben
5421           Differentialkriterien sind:</para>
5422
5423           <itemizedlist>
5424             <listitem>
5425               <para>Kommt es vom User, und soll unverändert wieder an den
5426               User? Dann <varname>$::form</varname>, steht da eh schon</para>
5427             </listitem>
5428
5429             <listitem>
5430               <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
5431               Requests gebraucht werden? Dann
5432               <varname>$::request</varname></para>
5433             </listitem>
5434
5435             <listitem>
5436               <para>Muss ich von anderen Teilen des Programms lesend drauf
5437               zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
5438               Wrappermethode</para>
5439             </listitem>
5440           </itemizedlist>
5441         </sect3>
5442       </sect2>
5443
5444       <sect2>
5445         <title>Ehemalige globale Variablen</title>
5446
5447         <para>Die folgenden Variablen waren einmal im Programm, und wurden
5448         entfernt.</para>
5449
5450         <sect3>
5451           <title>$::cgi</title>
5452
5453           <itemizedlist>
5454             <listitem>
5455               <para>war nötig, weil cookie Methoden nicht als
5456               Klassenfunktionen funktionieren</para>
5457             </listitem>
5458
5459             <listitem>
5460               <para>Aufruf als Klasse erzeugt Dummyobjekt was im
5461               Klassennamespace gehalten wird und über Requestgrenzen
5462               leaked</para>
5463             </listitem>
5464
5465             <listitem>
5466               <para>liegt jetzt unter
5467               <varname>$::request-&gt;{cgi}</varname></para>
5468             </listitem>
5469           </itemizedlist>
5470         </sect3>
5471
5472         <sect3>
5473           <title>$::all_units</title>
5474
5475           <itemizedlist>
5476             <listitem>
5477               <para>war nötig, weil einige Funktionen in Schleifen zum Teil
5478               ein paar hundert mal pro Request eine Liste der Einheiten
5479               brauchen, und de als Parameter durch einen Riesenstack von
5480               Funktionen geschleift werden müssten.</para>
5481             </listitem>
5482
5483             <listitem>
5484               <para>Liegt jetzt unter
5485               <varname>$::request-&gt;{cache}{all_units}</varname></para>
5486             </listitem>
5487
5488             <listitem>
5489               <para>Wird nur in
5490               <function>AM-&gt;retrieve_all_units()</function> gesetzt oder
5491               gelesen.</para>
5492             </listitem>
5493           </itemizedlist>
5494         </sect3>
5495
5496         <sect3>
5497           <title>%::called_subs</title>
5498
5499           <itemizedlist>
5500             <listitem>
5501               <para>wurde benutzt um callsub deep recursions
5502               abzufangen.</para>
5503             </listitem>
5504
5505             <listitem>
5506               <para>Wurde entfernt, weil callsub nur einen Bruchteil der
5507               möglichen Rekursioenen darstellt, und da nie welche
5508               auftreten.</para>
5509             </listitem>
5510
5511             <listitem>
5512               <para>komplette recursion protection wurde entfernt.</para>
5513             </listitem>
5514           </itemizedlist>
5515         </sect3>
5516       </sect2>
5517     </sect1>
5518
5519     <sect1 id="devel.fcgi">
5520       <title>Entwicklung unter FastCGI</title>
5521
5522       <sect2 id="devel.fcgi.general">
5523         <title>Allgemeines</title>
5524
5525         <para>Wenn Änderungen in der Konfiguration von kivitendo gemacht
5526         werden, muss der Webserver neu gestartet werden.</para>
5527
5528         <para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
5529         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
5530         müssen folgende Aspekte beachtet werden.</para>
5531       </sect2>
5532
5533       <sect2 id="devel.fcgi.exiting">
5534         <title>Programmende und Ausnahmen</title>
5535
5536         <para>Betrifft die Funktionen <function>warn</function>,
5537         <function>die</function>, <function>exit</function>,
5538         <function>carp</function> und <function>confess</function>.</para>
5539
5540         <para>Fehler, die dass Programm normalerweise sofort beenden (fatale
5541         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
5542         am Laufen zu halten. Man kann mit <function>die</function>,
5543         <function>confess</function> oder <function>carp</function> Fehler
5544         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
5545         eigene <function>$::form-</function>error()&gt; tut im Prinzip das
5546         Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
5547         <function>exit</function> hingegen werden nicht abgefangen.
5548         <function>warn</function> wird direkt nach STDERR, also in Server Log
5549         eine Nachricht schreiben (sofern in der Konfiguration nicht die
5550         Warnungen in das kivitendo Log umgeleitet wurden), und
5551         <function>exit</function> wird die Ausführung beenden.</para>
5552
5553         <para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
5554         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
5555         Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
5556         benutzen, alle anderen Exceptionmechanismen sind ok.</para>
5557       </sect2>
5558
5559       <sect2 id="devel.fcgi.globals">
5560         <title>Globale Variablen</title>
5561
5562         <para>Um zu vermeiden, dass Informationen von einem Request in einen
5563         anderen gelangen, müssen alle globalen Variablen vor einem Request
5564         sauber initialisiert werden. Das ist besonders wichtig im
5565         <varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
5566         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
5567         werden.</para>
5568
5569         <para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
5570         abgetrennten Block, der alle kanonischen globalen Variablen listet und
5571         erklärt. Bitte keine anderen einführen ohne das sauber zu
5572         dokumentieren.</para>
5573
5574         <para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
5575         man sicher geht, dass man die richtige erwischt.</para>
5576       </sect2>
5577
5578       <sect2 id="devel.fcgi.performance">
5579         <title>Performance und Statistiken</title>
5580
5581         <para>Die kritischen Pfade des Programms sind die Belegmasken, und
5582         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
5583         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
5584         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
5585         sind es je nach Menge der definierten Variablen 1-2s. Ab der
5586         Moose/Rose::DB Version sind es 5-6s.</para>
5587
5588         <para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
5589         den kritischen Pfaden, unter 0,15 sonst.</para>
5590       </sect2>
5591     </sect1>
5592
5593     <sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
5594       <title>SQL-Upgradedateien</title>
5595
5596       <sect2 id="db-upgrade-files.introduction"
5597              xreflabel="Einführung in die Datenbank-Upgradedateien">
5598         <title>Einführung</title>
5599
5600         <para>Datenbankupgrades werden über einzelne Upgrade-Scripte gesteuert, die sich im Verzeichnis <filename>sql/Pg-upgrade2</filename>
5601         befinden. In diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren, die neben den eigentlich auszuführenden SQL- oder
5602         Perl-Befehlen einige Kontrollinformationen enthält.</para>
5603
5604         <para>Kontrollinformationen definieren Abhängigkeiten und Prioritäten, sodass Datenbankscripte zwar in einer sicheren Reihenfolge
5605         ausgeführt werden (z.B. darf ein <literal>ALTER TABLE</literal> erst ausgeführt werden, wenn die Tabelle mit <literal>CREATE
5606         TABLE</literal> angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man keine Versionsnummern braucht.</para>
5607
5608         <para>kivitendo merkt sich dabei, welches der Upgradescripte in <filename>sql/Pg-upgrade2</filename> bereits durchgeführt wurde und
5609         führt diese nicht erneut aus. Dazu dient die Tabelle "<literal>schema_info</literal>", die bei der Anmeldung automatisch angelegt
5610         wird.</para>
5611       </sect2>
5612
5613       <sect2 id="db-upgrade-files.format"
5614              xreflabel="Format der Upgradedateien">
5615         <title>Format der Kontrollinformationen</title>
5616
5617         <para>Die Kontrollinformationen sollten sich am Anfang der jeweiligen
5618         Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
5619         hat dabei das folgende Format:</para>
5620
5621         <para>Für SQL-Upgradedateien:</para>
5622
5623         <programlisting>-- @key: value</programlisting>
5624
5625         <para>Für Perl-Upgradedateien:</para>
5626
5627         <programlisting># @key: value</programlisting>
5628
5629         <para>Leerzeichen vor "<varname>value</varname>" werden
5630         entfernt.</para>
5631
5632         <para>Die folgenden Schlüsselworte werden verarbeitet:</para>
5633
5634         <variablelist>
5635           <varlistentry>
5636             <term><varname>tag</varname></term>
5637
5638             <listitem>
5639               <para>Wird zwingend benötigt. Dies ist der "Name" des Upgrades.
5640               Dieser "tag" kann von anderen Kontrolldateien in ihren
5641               Abhängigkeiten verwendet werden (Schlüsselwort
5642               "<varname>depends</varname>"). Der "tag" ist auch der Name, der
5643               in der Datenbank eingetragen wird.</para>
5644
5645               <para>Normalerweise sollte die Kontrolldatei genau so heißen wie
5646               der "tag", nur mit der Endung ".sql" bzw. "pl".</para>
5647
5648               <para>Ein Tag darf nur aus alphanumerischen Zeichen sowie den
5649               Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht
5650               erlaubt und sollten stattdessen mit Unterstrichen ersetzt
5651               werden.</para>
5652             </listitem>
5653           </varlistentry>
5654
5655           <varlistentry>
5656             <term><varname>charset</varname></term>
5657
5658             <listitem>
5659               <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
5660               Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei Abwesenheit des Tags für SQL-Upgradedateien der Zeichensatz
5661               "<literal>ISO-8859-15</literal>" angenommen. Perl-Upgradescripte hingegen müssen immer in UTF-8 encodiert sein und sollten
5662               demnach auch ein "<literal>use utf8;</literal>" enthalten.</para>
5663             </listitem>
5664           </varlistentry>
5665
5666           <varlistentry>
5667             <term><varname>description</varname></term>
5668
5669             <listitem>
5670               <para>Benötigt. Eine Beschreibung, was in diesem Update
5671               passiert. Diese wird dem Benutzer beim eigentlichen
5672               Datenbankupdate angezeigt. Während der Tag in englisch gehalten
5673               sein sollte, sollte die Beschreibung auf Deutsch
5674               erfolgen.</para>
5675             </listitem>
5676           </varlistentry>
5677
5678           <varlistentry>
5679             <term><varname>depends</varname></term>
5680
5681             <listitem>
5682               <para>Optional. Eine mit Leerzeichen getrennte Liste von "tags",
5683               von denen dieses Upgradescript abhängt. kivitendo stellt sicher,
5684               dass die in dieser Liste aufgeführten Scripte bereits
5685               durchgeführt wurden, bevor dieses Script ausgeführt wird.</para>
5686
5687               <para>Abhängigkeiten werden rekursiv betrachtet. Wenn also ein
5688               Script "b" existiert, das von Änderungen in "a" abhängt, und
5689               eine neue Kontrolldatei für "c" erstellt wird, die von
5690               Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den
5691               Tag "b" als Abhängigkeit zu definieren.</para>
5692
5693               <para>Es ist nicht erlaubt, sich selbst referenzierende
5694               Abhängigkeiten zu definieren (z.B. "a" -&gt; "b", "b" -&gt; "c"
5695               und "c" -&gt; "a").</para>
5696             </listitem>
5697           </varlistentry>
5698
5699           <varlistentry>
5700             <term><varname>priority</varname></term>
5701
5702             <listitem>
5703               <para>Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
5704               der Scripte ausgeführt werden, die die gleichen
5705               Abhängigkeitstiefen besitzen. Fehlt dieser Parameter, so wird
5706               der Wert 1000 benutzt.</para>
5707
5708               <para>Dies ist reine Kosmetik. Für echte Reihenfolgen muss
5709               "depends" benutzt werden. kivitendo sortiert die auszuführenden
5710               Scripte zuerst nach der Abhängigkeitstiefe (wenn "z" von "y"
5711               abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von
5712               2, "y" von 1 und "x" von 0. "x" würde hier zuerst ausgeführt,
5713               dann "y", dann "z"), dann nach der Priorität und bei gleicher
5714               Priorität alphabetisch nach dem "tag".</para>
5715             </listitem>
5716           </varlistentry>
5717
5718           <varlistentry>
5719             <term><varname>ignore</varname></term>
5720
5721             <listitem>
5722               <para>Optional. Falls der Wert auf 1 (true) steht, wird das
5723               Skript bei der Anmeldung ignoriert und entsprechend nicht
5724               ausgeführt.</para>
5725             </listitem>
5726           </varlistentry>
5727         </variablelist>
5728       </sect2>
5729
5730       <sect2 id="db-upgrade-files.format-perl-files" xreflabel="Format von Perl-Upgradedateien">
5731        <title>Format von in Perl geschriebenen Datenbankupgradescripten</title>
5732
5733        <para>In Perl geschriebene Datenbankscripte werden nicht einfach so ausgeführt sondern müssen sich an gewisse Konventionen
5734        halten. Dafür bekommen sie aber auch einige Komfortfunktionen bereitgestellt.</para>
5735
5736        <para>Ein Upgradescript stellt dabei eine vollständige Objektklasse dar, die vom Elternobjekt
5737        "<literal>SL::DBUpgrade2::Base</literal>" erben und eine Funktion namens "<literal>run</literal>" zur Verfügung stellen muss. Das
5738        Script wird ausgeführt, indem eine Instanz dieser Klasse erzeugt und darauf die erwähnte "<literal>run</literal>" aufgerufen
5739        wird.</para>
5740
5741        <para>Zu beachten ist, dass sich der Paketname der Datei aus dem Wert für "<literal>@tag</literal>" ableitet. Dabei werden alle
5742        Zeichen, die in Paketnamen ungültig wären (gerade Bindestriche), durch Unterstriche ersetzt. Insgesamt sieht der Paketname wie folgt
5743        aus: "<literal>SL::DBUpgrade2::tag</literal>".</para>
5744
5745        <para>Welche Komfortfunktionen zur Verfügung stehen, erfahren Sie in der Perl-Dokumentation zum oben genannten Modul; aufzurufen mit
5746        "<command>perldoc SL/DBUpgrade2/Base.pm</command>".</para>
5747
5748        <para>Ein Mindestgerüst eines gültigen Perl-Upgradescriptes sieht wie folgt aus:</para>
5749
5750        <programlisting># @tag: beispiel-upgrade-file42
5751 # @description: Ein schönes Beispielscript
5752 # @depends: release_3_1_0
5753 package SL::DBUpgrade2::beispiel_upgrade_file42;
5754
5755 use strict;
5756 use utf8;
5757
5758 use parent qw(SL::DBUpgrade2::Base);
5759
5760 sub run {
5761   my ($self) = @_;
5762
5763   # hier Aktionen ausführen
5764
5765   return 1;
5766 }
5767
5768 1;
5769 </programlisting>
5770       </sect2>
5771
5772       <sect2 id="db-upgrade-files.dbupgrade-tool"
5773              xreflabel="Hilfsscript dbupgrade2_tool.pl">
5774         <title>Hilfsscript dbupgrade2_tool.pl</title>
5775
5776         <para>Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern,
5777         existiert ein Hilfsscript namens
5778         "<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem
5779         kivitendo-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
5780         liest alle Datenbankupgradescripte aus dem Verzeichnis
5781         <filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die
5782         gleichen Methoden wie kivitendo selber, sodass alle Fehlersituationen
5783         von der Kommandozeile überprüft werden können.</para>
5784
5785         <para>Wird dem Script kein weiterer Parameter übergeben, so wird nur
5786         eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
5787         sich aber auch Informationen auf verschiedene Art ausgeben
5788         lassen:</para>
5789
5790         <itemizedlist>
5791           <listitem>
5792             <para>Listenform: "<command>./scripts/dbupgrade2_tool.pl
5793             --list</command>"</para>
5794
5795             <para>Gibt eine Liste aller Scripte aus. Die Liste ist in der
5796             Reihenfolge sortiert, in der kivitendo die Scripte ausführen
5797             würde. Es werden neben der Listenposition der Tag, die
5798             Abhängigkeitstiefe und die Priorität ausgegeben.</para>
5799           </listitem>
5800
5801           <listitem>
5802             <para>Baumform: "<command>./scripts/dbupgrade2_tool.pl
5803             --tree</command>"</para>
5804
5805             <para>Listet alle Tags in Baumform basierend auf den
5806             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von
5807             denen keine anderen abhängen. Die Unterknoten sind Scripte, die
5808             beim übergeordneten Script als Abhängigkeit eingetragen
5809             sind.</para>
5810           </listitem>
5811
5812           <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
5813             <para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl
5814             --rtree</command>"</para>
5815
5816             <para>Listet alle Tags in Baumform basierend auf den
5817             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte mit
5818             der geringsten Abhängigkeitstiefe. Die Unterknoten sind Scripte,
5819             die das übergeordnete Script als Abhängigkeit eingetragen
5820             haben.</para>
5821           </listitem>
5822
5823           <listitem>
5824             <para>Baumform mit Postscriptausgabe:
5825             "<command>./scripts/dbupgrade2_tool.pl
5826             --graphviz</command>"</para>
5827
5828             <para>Benötigt das Tool "<command>graphviz</command>", um mit
5829             seiner Hilfe die <link
5830             linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte
5831             Baumform</link> in eine Postscriptdatei namens
5832             "<filename>db_dependencies.ps</filename>" auszugeben. Dies ist
5833             vermutlich die übersichtlichste Form, weil hierbei jeder Knoten
5834             nur einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen
5835             können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben
5836             werden.</para>
5837           </listitem>
5838
5839           <listitem>
5840             <para>Scripte, von denen kein anderes Script abhängt:
5841             "<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"</para>
5842
5843             <para>Listet die Tags aller Scripte auf, von denen keine anderen
5844             Scripte abhängen.</para>
5845           </listitem>
5846         </itemizedlist>
5847       </sect2>
5848     </sect1>
5849
5850     <sect1 id="translations-languages" xreflabel="Translations and languages">
5851       <title>Translations and languages</title>
5852
5853       <sect2 id="translations-languages.introduction"
5854              xreflabel="Introduction to translations and languages">
5855         <title>Introduction</title>
5856
5857         <note>
5858           <para>Dieser Abschnitt ist in Englisch geschrieben, um
5859           internationalen Übersetzern die Arbeit zu erleichtern.</para>
5860         </note>
5861
5862         <para>This section describes how localization packages in kivitendo
5863         are built. Currently the only language fully supported is German, and
5864         since most of the internal messages are held in English the English
5865         version is usable too.</para>
5866
5867         <para>A stub version of French is included but not functunal at this
5868         point.</para>
5869       </sect2>
5870
5871       <sect2 id="translations-languages.character-set"
5872              xreflabel="Character set">
5873         <title>Character set</title>
5874
5875         <para>All files included in a language pack must use UTF-8 as their encoding.</para>
5876       </sect2>
5877
5878       <sect2 id="translations-languages.file-structure"
5879              xreflabel="File structure">
5880         <title>File structure</title>
5881
5882         <para>The structure of locales in kivitendo is:</para>
5883
5884         <programlisting>kivitendo/locale/&lt;langcode&gt;/</programlisting>
5885
5886         <para>where &lt;langcode&gt; stands for an abbreviation of the
5887         language package. The builtin packages use two letter <ulink
5888         url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
5889         but the actual name is not relevant for the program and can easily be
5890         extended to <ulink
5891         url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
5892         tags</ulink> (i.e. "en_GB"). In fact the original language packages
5893         from SQL Ledger are named in this way.</para>
5894
5895         <para>In such a language directory the following files are
5896         recognized:</para>
5897
5898         <variablelist>
5899           <varlistentry>
5900             <term>LANGUAGE</term>
5901
5902             <listitem>
5903               <para>This file is mandatory.</para>
5904
5905               <para>The <filename>LANGUAGE</filename> file contains the self
5906               descripted name of the language. It should contain a native
5907               representation first, and in parenthesis an english translation
5908               after that. Example:</para>
5909
5910               <programlisting>Deutsch (German)</programlisting>
5911             </listitem>
5912           </varlistentry>
5913
5914           <varlistentry>
5915             <term>all</term>
5916
5917             <listitem>
5918               <para>This file is mandatory.</para>
5919
5920               <para>The central translation file. It is essentially an inline
5921               Perl script autogenerated by <command>locales.pl</command>. To
5922               generate it, generate the directory and the two files mentioned
5923               above, and execute the following command:</para>
5924
5925               <programlisting>scripts/locales.pl &lt;langcode&gt;</programlisting>
5926
5927               <para>Otherwise you can simply copy one of the other languages.
5928               You will be told how many are missing like this:</para>
5929
5930               <programlisting>$ scripts/locales.pl en
5931 English - 0.6% - 2015/2028 missing</programlisting>
5932
5933               <para>A file named "<filename>missing</filename>" will be
5934               generated and can be edited. You can also edit the
5935               "<filename>all</filename>" file directly. Edit everything you
5936               like to fit the target language and execute
5937               <command>locales.pl</command> again. See how the missing words
5938               get fewer.</para>
5939             </listitem>
5940           </varlistentry>
5941
5942           <varlistentry>
5943             <term>Num2text</term>
5944
5945             <listitem>
5946               <para>Legacy code from SQL Ledger. It provides a means for
5947               numbers to be converted into natural language, like
5948               <literal>1523 =&gt; one thousand five hundred twenty
5949               three</literal>. If you want to provide it, it must be inlinable
5950               Perl code which provides a <function>num2text</function> sub. If
5951               an <function>init</function> sub exists it will be executed
5952               first.</para>
5953
5954               <para>Only used in the check and receipt printing module.</para>
5955             </listitem>
5956           </varlistentry>
5957
5958           <varlistentry>
5959             <term>special_chars</term>
5960
5961             <listitem>
5962               <para>kivitendo comes with a lot of interfaces to different
5963               formats, some of which are rather picky with their accepted
5964               charset. The <filename>special_chars</filename> file contains a
5965               listing of chars not suited for different file format and
5966               provides substitutions. It is written in "Simple Ini" style,
5967               containing a block for every file format.</para>
5968
5969               <para>First entry should be the order of substitution for
5970               entries as a whitespace separated list. All entries are
5971               interpolated, so <literal>\n</literal>, <literal>\x20</literal>
5972               and <literal>\\</literal> all work.</para>
5973
5974               <para>After that every entry is a special char that should be
5975               translated when writing text into such a file.</para>
5976
5977               <para>Example:</para>
5978
5979               <programlisting>[Template/XML]
5980 order=&amp; &lt; &gt; \n
5981 &amp;=&amp;amp;
5982 &lt;=&amp;lt;
5983 &gt;=&amp;gt;
5984 \n=&lt;br&gt;</programlisting>
5985
5986               <para>Note the importance of the order in this example.
5987               Substituting &lt; and &gt; befor &amp; would lead to $gt; become
5988               &amp;amp;gt;</para>
5989
5990               <para>For a list of valid formats, see the German
5991               <filename>special_chars</filename> entry. As of this writing the
5992               following are recognized:</para>
5993
5994               <programlisting>HTML
5995 URL@HTML
5996 Template/HTML
5997 Template/XML
5998 Template/LaTeX
5999 Template/OpenDocument
6000 filenames</programlisting>
6001
6002               <para>The last of which is very machine dependant. Remember that
6003               a lot of characters are forbidden by some filesystems, for
6004               exmaple MS Windows doesn't like ':' in its files where Linux
6005               doesn't mind that. If you want the files created with your
6006               language pack to be portable, find all chars that could cause
6007               trouble.</para>
6008             </listitem>
6009           </varlistentry>
6010
6011           <varlistentry>
6012             <term>missing</term>
6013
6014             <listitem>
6015               <para>This file is not a part of the language package
6016               itself.</para>
6017
6018               <para>This is a file generated by
6019               <command>scripts/locales.pl</command> while processing your
6020               locales. It's only to have the missing entries singled out and
6021               does not belong to a language package.</para>
6022             </listitem>
6023           </varlistentry>
6024
6025           <varlistentry>
6026             <term>lost</term>
6027
6028             <listitem>
6029               <para>This file is not a part of the language package
6030               itself.</para>
6031
6032               <para>Another file generated by
6033               <command>scripts/locales.pl</command>. If for any reason a
6034               translation does not appear anymore and can be deleted, it gets
6035               moved here. The last 50 or so entries deleted are saved here in
6036               case you made a typo, so that you don't have to translate
6037               everything again. If a tranlsation is missing, the lost file is
6038               checked first. If you maintain a language package, you might
6039               want to keep this safe somewhere.</para>
6040             </listitem>
6041           </varlistentry>
6042         </variablelist>
6043       </sect2>
6044     </sect1>
6045
6046     <sect1 id="devel.testsuite">
6047       <title>Die kivitendo-Test-Suite</title>
6048
6049       <sect2 id="devel.testsuite.intro">
6050         <title>Einführung</title>
6051
6052         <para>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <literal>Test::More</literal>.</para>
6053
6054         <para>Die grundlegenden Fakten sind:</para>
6055
6056         <itemizedlist>
6057           <listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem>
6058
6059           <listitem><para>Ein Script (bzw. ein Test) in <filename>t/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
6060
6061           <listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
6062
6063           <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>t/</filename>, deren
6064           Dateiname auf <literal>.t</literal> endet.</para></listitem>
6065         </itemizedlist>
6066       </sect2>
6067
6068       <sect2 id="devel.testsuite.prerequisites">
6069         <title>Voraussetzungen</title>
6070
6071         <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>
6072
6073         <itemizedlist>
6074           <listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core:
6075           <literal>perl-Test-Deep</literal>; openSUSE: <literal>perl-Test-Deep</literal>)</para></listitem>
6076           <listitem><para><literal>Test::Exception</literal> (Debian-Paketname: <literal>libtest-exception-perl</literal>; Fedora Core:
6077           <literal>perl-Test-Exception</literal>; openSUSE: <literal>perl-Test-Exception</literal>)</para></listitem>
6078           <listitem><para><literal>Test::Output</literal> (Debian-Paketname: <literal>libtest-output-perl</literal>; Fedora Core:
6079           <literal>perl-Test-Output</literal>; openSUSE: <literal>perl-Test-Output</literal>)</para></listitem>
6080           <listitem><para><literal>Test::Harness</literal> 3.0.0 oder höher. Dieses Modul ist ab Perl 5.10.1 Bestandteil der
6081           Perl-Distribution und kann für frühere Versionen aus dem <ulink url="http://www.cpan.org">CPAN</ulink> bezogen
6082           werden.</para></listitem>
6083           <listitem><para><literal>LWP::Simple</literal> aus dem Paket <literal>libwww-perl</literal> (Debian-Panetname:
6084           <literal>libwww-perl</literal>; Fedora Core: <literal>perl-libwww-perl</literal>; openSUSE:
6085           <literal>perl-libwww-perl</literal>)</para></listitem>
6086           <listitem><para><literal>URI::Find</literal> (Debian-Panetname: <literal>liburi-find-perl</literal>; Fedora Core:
6087           <literal>perl-URI-Find</literal>; openSUSE: <literal>perl-URI-Find</literal>)</para></listitem>
6088         </itemizedlist>
6089
6090         <para>Weitere Voraussetzung ist, dass die Testsuite ihre eigene Datenbank anlegen kann, um Produktivdaten nicht zu gefährden. Dazu
6091         müssen in der Konfigurationsdatei im Abschnit <literal>testing/database</literal> Datenbankverbindungsparameter angegeben
6092         werden. Der hier angegebene Benutzer muss weiterhin das Recht haben, Datenbanken anzulegen und zu löschen.</para>
6093       </sect2>
6094
6095       <sect2 id="devel.testsuite.execution">
6096         <title>
6097           Existierende Tests ausführen
6098         </title>
6099
6100         <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
6101         gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.pl</filename>.</para>
6102
6103         <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.pl</filename> ohne weitere Parameter aus
6104         dem kivitendo-Basisverzeichnis heraus ausführen.</para>
6105
6106         <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.pl</filename>. Beispielsweise:</para>
6107
6108         <programlisting>t/test.pl t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
6109       </sect2>
6110
6111
6112       <sect2 id="devel.testsuite.meaning_of_scripts">
6113         <title>
6114           Bedeutung der verschiedenen Test-Scripte
6115         </title>
6116
6117         <para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch
6118         während der Entwicklung nützliche Tests sind:</para>
6119
6120         <itemizedlist>
6121           <listitem><para><filename>t/001compile.t</filename> -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab</para></listitem>
6122           <listitem><para><filename>t/002goodperl.t</filename> -- überprüft alle Perl-Dateien auf Anwesenheit von '<literal>use strict</literal>'-Anweisungen</para></listitem>
6123           <listitem><para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von <function>system()</function> und <function>exec()</function> auf Gültigkeit</para></listitem>
6124           <listitem><para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien Tab-Zeichen enthalten</para></listitem>
6125           <listitem><para><filename>t/006spelling.t</filename> -- sucht nach häufigen Rechtschreibfehlern</para></listitem>
6126           <listitem><para><filename>t/011pod.t</filename> -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit</para></listitem>
6127         </itemizedlist>
6128
6129         <para>Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.</para>
6130       </sect2>
6131
6132       <sect2 id="devel.testsuite.create_new">
6133         <title>
6134           Neue Test-Scripte erstellen
6135         </title>
6136
6137         <para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende
6138         Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.</para>
6139
6140         <sect3 id="devel.testsuite.ideas_for_non_function_tests">
6141           <title>
6142             Ideen für neue Test-Scripte, die keine konkreten Funktionen testen
6143           </title>
6144
6145           <para> Ideen, die abgesehen von Funktionen noch nicht umgesetzt wurden:</para>
6146
6147           <itemizedlist>
6148             <listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem>
6149             <listitem><para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)</para></listitem>
6150             <listitem><para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para></listitem>
6151             <listitem><para>Überprüfung auf Leerzeichen am Ende von Zeilen</para></listitem>
6152             <listitem><para>Test, ob alle zu übersetzenden Strings in <filename>locale/de/all</filename> vorhanden sind</para></listitem>
6153             <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>
6154           </itemizedlist>
6155         </sect3>
6156
6157         <sect3 id="devel.testsuite.directory_and_test_names">
6158           <title>
6159             Konvention für Verzeichnis- und Dateinamen
6160           </title>
6161
6162           <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>
6163
6164           <itemizedlist>
6165             <listitem><para>Die Dateiendung muss <filename>.t</filename> lauten.</para></listitem>
6166
6167             <listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
6168             <filename>bad_function_params.t</filename>).</para></listitem>
6169
6170             <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sein, mit dem sich die Scripte darin befassen
6171             (beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem>
6172
6173             <listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist
6174             (z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.</para></listitem>
6175           </itemizedlist>
6176         </sect3>
6177
6178         <sect3 id="devel.testsuite.minimal_example">
6179           <title>
6180             Minimales Skelett für eigene Scripte
6181           </title>
6182
6183           <para>Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:</para>
6184
6185           <programlisting>use Test::More tests =&gt; 0;
6186
6187 use lib 't';
6188
6189 use Support::TestSetup;
6190
6191 Support::TestSetup::login();</programlisting>
6192
6193           <para>Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie
6194           <varname>$::auth</varname>, <varname>$::form</varname> oder <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei
6195           <filename>config/kivitendo.conf</filename> im Abschnitt <literal>testing.login</literal> ein gültiger Login-Name eingetragen
6196           sein. Dieser wird für die Datenbankverbindung benötigt.</para>
6197
6198           <para>Wir keine vollständig initialisierte Umgebung benötigt, so kann die letzte Zeile <code>Support::TestSetup::login();</code>
6199           weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.</para>
6200         </sect3>
6201       </sect2>
6202     </sect1>
6203
6204     <sect1 id="devel.style-guide">
6205       <title>Stil-Richtlinien</title>
6206
6207       <para>Die folgenden Regeln haben das Ziel, den Code möglichst gut les-
6208       und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich
6209       eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden
6210       wird (Stichworte "Klammern" oder "Hash-Keys").</para>
6211
6212       <para>Diese Regeln sind keine Schikane sondern erleichtern allen das
6213       Leben!</para>
6214
6215       <para>Jeder, der einen Patch schickt, sollte seinen Code vorher
6216       überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
6217       nicht.</para>
6218
6219       <orderedlist>
6220         <listitem>
6221           <para>Es werden keine echten Tabs sondern Leerzeichen
6222           verwendet.</para>
6223         </listitem>
6224
6225         <listitem>
6226           <para>Die Einrückung beträgt zwei Leerzeichen. Beispiel:</para>
6227
6228           <programlisting>foreach my $row (@data) {
6229   if ($flag) {
6230     # do something with $row
6231   }
6232
6233   if ($use_modules) {
6234     $row-&gt;{modules} = MODULE-&gt;retrieve(
6235       id   =&gt; $row-&gt;{id},
6236       date =&gt; $use_now ? localtime() : $row-&gt;{time},
6237     );
6238   }
6239
6240   $report-&gt;add($row);
6241 }</programlisting>
6242         </listitem>
6243
6244         <listitem>
6245           <para>Öffnende geschweifte Klammern befinden sich auf der gleichen
6246           Zeile wie der letzte Befehl. Beispiele:</para>
6247
6248           <programlisting>sub debug {
6249   ...
6250 }</programlisting>
6251
6252           <para>oder</para>
6253
6254           <programlisting>if ($form-&gt;{item_rows} &gt; 0) {
6255   ...
6256 }</programlisting>
6257         </listitem>
6258
6259         <listitem>
6260           <para>Schließende geschweifte Klammern sind so weit eingerückt wie
6261           der Befehl / die öffnende schließende Klammer, die den Block
6262           gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen
6263           Beispiele wie bei 3. gelten.</para>
6264         </listitem>
6265
6266         <listitem>
6267           <para>Die Wörter "<function>else</function>",
6268           "<function>elsif</function>", "<function>while</function>" befinden
6269           sich auf der gleichen Zeile wie schließende geschweifte Klammern.
6270           Beispiele:</para>
6271
6272           <programlisting>if ($form-&gt;{sum} &gt; 1000) {
6273   ...
6274 } elsif ($form-&gt;{sum} &gt; 0) {
6275   ...
6276 } else {
6277   ...
6278 }
6279
6280 do {
6281   ...
6282 } until ($a &gt; 0);</programlisting>
6283         </listitem>
6284
6285         <listitem>
6286           <para>Parameter von Funktionsaufrufen müssen mit runden Klammern
6287           versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
6288           und grep-ähnliche Operatoren. Beispiel:</para>
6289
6290           <programlisting>$main::lxdebug-&gt;message("Could not find file.");
6291 %options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</programlisting>
6292         </listitem>
6293
6294         <listitem>
6295           <para>Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:</para>
6296
6297           <para>Generell gilt: Hashkeys und Arrayindices sollten nicht durch
6298           Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
6299           Blöcke schon. Beispiel:</para>
6300
6301           <programlisting>if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
6302   ...
6303 }
6304
6305 $array[$i + 1]             = 4;
6306 $form-&gt;{sum}              += $form-&gt;{"row_$i"};
6307 $form-&gt;{ $form-&gt;{index} } += 1;
6308
6309 map { $form-&gt;{sum} += $form-&gt;{"row_$_"} } 1..$rowcount;</programlisting>
6310         </listitem>
6311
6312         <listitem>
6313           <para>Mehrzeilige Befehle</para>
6314
6315           <orderedlist>
6316             <listitem>
6317               <para>Werden die Parameter eines Funktionsaufrufes auf mehrere
6318               Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
6319               werden, in der die ersten Funktionsparameter in der ersten Zeile
6320               stehen. Beispiel:</para>
6321
6322               <programlisting>$sth = $dbh-&gt;prepare("SELECT * FROM some_table WHERE col = ?",
6323                     $form-&gt;{some_col_value});</programlisting>
6324             </listitem>
6325
6326             <listitem>
6327               <para>Ein Spezialfall ist der ternäre Oprator "?:", der am
6328               besten in einer übersichtlichen Tabellenstruktur organisiert
6329               wird. Beispiel:</para>
6330
6331               <programlisting>my $rowcount = $form-&gt;{"row_$i"} ? $i
6332              : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
6333              :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</programlisting>
6334             </listitem>
6335           </orderedlist>
6336         </listitem>
6337
6338         <listitem>
6339           <para>Kommentare</para>
6340
6341           <orderedlist>
6342             <listitem>
6343               <para>Kommentare, die alleine in einer Zeile stehen, sollten
6344               soweit wie der Code eingerückt sein.</para>
6345             </listitem>
6346
6347             <listitem>
6348               <para>Seitliche hängende Kommentare sollten einheitlich
6349               formatiert werden.</para>
6350             </listitem>
6351
6352             <listitem>
6353               <para>Sämtliche Kommentare und Sonstiges im Quellcode ist bitte
6354               auf Englisch zu verfassen. So wie ich keine Lust habe,
6355               französischen Quelltext zu lesen, sollte auch der kivitendo
6356               Quelltext für nicht-Deutschsprachige lesbar sein.
6357               Beispiel:</para>
6358
6359               <programlisting>my $found = 0;
6360 while (1) {
6361   last if $found;
6362
6363   # complicated check
6364   $found = 1 if //
6365 }
6366
6367 $i  = 0        # initialize $i
6368 $n  = $i;      # save $i
6369 $i *= $const;  # do something crazy
6370 $i  = $n;      # recover $i</programlisting>
6371             </listitem>
6372           </orderedlist>
6373         </listitem>
6374
6375         <listitem>
6376           <para>Hashkeys sollten nur in Anführungszeichen stehen, wenn die
6377           Interpolation gewünscht ist. Beispiel:</para>
6378
6379           <programlisting>$form-&gt;{sum}      = 0;
6380 $form-&gt;{"row_$i"} = $form-&gt;{"row_$i"} - 5;
6381 $some_hash{42}    = 54;</programlisting>
6382         </listitem>
6383
6384         <listitem>
6385           <para>Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen
6386           unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
6387           wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in
6388           grossen Tabellen), dann ist Lesbarkeit vorzuziehen.</para>
6389
6390           <para>Als Beispiel sei die Funktion
6391           <function>print_options</function> aus
6392           <filename>bin/mozilla/io.pl</filename> angeführt.</para>
6393         </listitem>
6394
6395         <listitem>
6396           <para>Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind
6397           unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs
6398           verfälschen.</para>
6399
6400           <para>Emacs und vim haben beide recht einfache Methoden zur
6401           Entfernung von trailing whitespace. Emacs kennt das Kommande
6402           <command>nuke-trailing-whitespace</command>, vim macht das gleiche
6403           manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
6404           BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern
6405           gebunden.</para>
6406         </listitem>
6407
6408         <listitem>
6409           <para>Es wird kein <command>perltidy</command> verwendet.</para>
6410
6411           <para>In der Vergangenheit wurde versucht,
6412           <command>perltidy</command> zu verwenden, um einen einheitlichen
6413           Stil zu erlangen. Es hat sich aber gezeigt, dass
6414           <command>perltidy</command>s sehr eigenwilliges Verhalten, was
6415           Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für
6416           den Interessierten sind hier die
6417           <command>perltidy</command>-Optionen, die grob den beschriebenen
6418           Richtlinien entsprechen:</para>
6419
6420           <programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
6421 -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
6422 -lp -vt=1 -vtc=1</programlisting>
6423         </listitem>
6424
6425         <listitem>
6426           <para><varname>STDERR</varname> ist tabu. Unkonditionale
6427           Debugmeldungen auch.</para>
6428
6429           <para>kivitendo bietet mit dem Modul <classname>LXDebug</classname>
6430           einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
6431           Grund, nach <varname>STDERR</varname> zu schreiben.</para>
6432
6433           <para>Die <classname>LXDebug</classname>-Methode
6434           "<function>message</function>" nimmt als ersten Paramter außerdem
6435           eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer
6436           angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden
6437           und werden in den meisten Fällen auch vom Repository
6438           zurückgewiesen.</para>
6439         </listitem>
6440
6441         <listitem>
6442           <para>Alle neuen Module müssen use strict verwenden.</para>
6443
6444           <para><varname>$form</varname>, <varname>$auth</varname>,
6445           <varname>$locale</varname>, <varname>$lxdebug</varname> und
6446           <varname>%myconfig</varname> werden derzeit aus dem main package
6447           importiert (siehe <xref linkend="devel.globals" />. Alle anderen
6448           Konstrukte sollten lexikalisch lokal gehalten werden.</para>
6449         </listitem>
6450       </orderedlist>
6451     </sect1>
6452
6453     <sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
6454       <title>Dokumentation erstellen</title>
6455
6456       <sect2 id="devel.build-doc.introduction">
6457         <title>Einführung</title>
6458
6459         <para>Diese Dokumentation ist in <productname>DocBook</productname>
6460         XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor.
6461         Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen
6462         Editor nutzt, der spezielle Unterstützung für
6463         <productname>DocBook</productname> mitbringt. Wir empfehlen dafür den
6464         <ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
6465         Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos
6466         ist.</para>
6467       </sect2>
6468
6469       <sect2 id="devel.build-doc.required-software">
6470         <title>Benötigte Software</title>
6471
6472         <para>Bei <productname>DocBook</productname> ist Prinzip, dass
6473         ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden
6474         dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML
6475         erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script
6476         <command>scripts/build_doc.sh</command>.</para>
6477
6478         <para>Das Script benötigt zur Konvertierung verschiedene
6479         Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt
6480         werden:</para>
6481
6482         <itemizedlist>
6483           <listitem>
6484             <para><ulink
6485             url="http://www.oracle.com/technetwork/java/index.html">Java</ulink>
6486             in einer halbwegs aktuellen Version</para>
6487           </listitem>
6488
6489           <listitem>
6490             <para>Das Java-Build-System <ulink
6491             url="http://ant.apache.org/">Apache Ant</ulink></para>
6492           </listitem>
6493
6494           <listitem>
6495             <para>Das Dokumentations-System Dobudish für
6496             <productname>DocBook</productname> 4.5, eine Zusammenstellung
6497             diverser Stylesheets und Grafiken zur Konvertierung von
6498             <productname>DocBook</productname> XML in andere Formate. Das
6499             Paket, das benötigt wird, ist zum Zeitpunkt der
6500             Dokumentationserstellung
6501             <filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
6502             url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink>
6503             bereitsteht.</para>
6504           </listitem>
6505         </itemizedlist>
6506
6507         <para>Apache Ant sowie ein dazu passendes Java Runtime Environment
6508         sind auf allen gängigen Plattformen verfügbar. Beispiel für
6509         Debian/Ubuntu:</para>
6510
6511         <programlisting>apt-get install ant openjdk-7-jre</programlisting>
6512
6513         <para>Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis
6514         <filename>doc/build</filename> entpackt werden. Beispiel unter der
6515         Annahme, das <productname>Dobudish</productname> in
6516         <filename>$HOME/Downloads</filename> heruntergeladen wurde:</para>
6517
6518         <programlisting>cd doc/build
6519 unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
6520       </sect2>
6521
6522       <sect2 id="devel.build-doc.build">
6523         <title>PDFs und HTML-Seiten erstellen</title>
6524
6525         <para>Die eigentliche Konvertierung erfolgt nach Installation der
6526         benötigten Software mit einem einfachen Aufruf direkt aus dem
6527         kivitendo-Installationsverzeichnis heraus:</para>
6528
6529         <programlisting>./scripts/build_doc.sh</programlisting>
6530       </sect2>
6531
6532       <sect2 id="devel.build-doc.repository">
6533         <title>Einchecken in das Git-Repository</title>
6534
6535         <para>Sowohl die XML-Datei als auch die erzeugten PDF- und
6536         HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass
6537         nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut
6538         und alles zusammen in einem Commit eingecheckt werden sollten.</para>
6539
6540         <para>Die "<filename>dobudish</filename>"-Verzeichnisse bzw.
6541         symbolischen Links gehören hingegen nicht in das Repository.</para>
6542       </sect2>
6543     </sect1>
6544   </chapter>
6545 </book>