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