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