Dokumentation/Modulabhängigkeiten ergänzt (s.a. #344)
[kivitendo-erp.git] / doc / dokumentation.xml
1 <?xml version="1.0" encoding="utf-8"?>
2 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
3 "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
4 <book id="kivitendo-documentation" lang="de">
5   <title>kivitendo 3.5.1: Installation, Konfiguration,
6   Entwicklung</title>
7
8   <chapter id="Aktuelle-Hinweise">
9     <title>Aktuelle Hinweise</title>
10
11     <para>Aktuelle Installations- und Konfigurationshinweise gibt es:</para>
12
13     <itemizedlist>
14       <listitem>
15         <para>im Community-Forum: <ulink
16         url="https://forum.kivitendo.de:32443">https://forum.kivitendo.de:32443</ulink></para>
17       </listitem>
18
19       <listitem>
20         <para>im Kunden-Forum: <ulink
21         url="http://redmine.kivitendo-premium.de/projects/forum/boards/">http://redmine.kivitendo-premium.de/projects/forum/boards/</ulink></para>
22       </listitem>
23
24       <listitem>
25         <para>in der doc/UPGRADE Datei im doc-Verzeichnis der
26         Installation</para>
27       </listitem>
28
29       <listitem>
30         <para>Im Schulungs- und Dienstleistungsangebot der entsprechenden
31         kivitendo-Partner: <ulink
32         url="http://www.kivitendo.de/partner.html">http://www.kivitendo.de/partner.html</ulink></para>
33       </listitem>
34     </itemizedlist>
35   </chapter>
36
37   <chapter id="config">
38     <title>Installation und Grundkonfiguration</title>
39
40     <sect1 id="Installation-Übersicht">
41       <title>Übersicht</title>
42
43       <para>Die Installation von kivitendo umfasst mehrere Schritte. Die
44       folgende Liste kann sowohl für Neulinge als auch für alte Hasen als
45       Übersicht und Stichpunktliste zum Abhaken dienen, um eine Version mit
46       minimalen Features möglichst schnell zum Laufen zu kriegen.</para>
47
48       <orderedlist>
49         <listitem>
50           <para><emphasis>Voraussetzungen überprüfen</emphasis>: kivitendo
51           benötigt gewisse Ressourcen und benutzt weitere Programme. Das
52           Kapitel "<xref linkend="Benötigte-Software-und-Pakete"/>" erläutert
53           diese. Auch die Liste der benötigten Perl-Module befindet sich
54           hier.</para>
55         </listitem>
56
57         <listitem>
58           <para><emphasis>Installation von kivitendo</emphasis>: Diese umfasst
59           die "<xref linkend="Manuelle-Installation-des-Programmpaketes"/>"
60           sowie grundlegende Einstellungen, die der "<xref
61           linkend="config.config-file"/>" erläutert.</para>
62         </listitem>
63
64         <listitem>
65           <para><emphasis>Konfiguration externer Programme</emphasis>: hierzu
66           gehören die Datenbank ("<xref
67           linkend="Anpassung-der-PostgreSQL-Konfiguration"/>") und der
68           Webserver ("<xref linkend="Apache-Konfiguration"/>").</para>
69         </listitem>
70
71         <listitem>
72           <para><emphasis>Benutzerinformationen speichern können</emphasis>:
73           man benötigt mindestens eine Datenbank, in der Informationen zur
74           Authentifizierung sowie die Nutzdaten gespeichert werden. Wie man
75           das als Administrator macht, verrät "<xref
76           linkend="Benutzerauthentifizierung-und-Administratorpasswort"/>".</para>
77         </listitem>
78
79         <listitem>
80           <para><emphasis>Benutzer, Gruppen und Datenbanken
81           anlegen</emphasis>: wie dies alles zusammenspielt erläutert "<xref
82           linkend="Benutzer--und-Gruppenverwaltung"/>".</para>
83         </listitem>
84
85         <listitem>
86           <para><emphasis>Los geht's</emphasis>: alles soweit erledigt? Dann
87           kann es losgehen: "<xref linkend="kivitendo-ERP-verwenden"/>"</para>
88         </listitem>
89       </orderedlist>
90
91       <para>Alle weiteren Unterkapitel in diesem Kapitel sind ebenfalls
92       wichtig und sollten vor einer ernsthaften Inbetriebnahme gelesen
93       werden.</para>
94     </sect1>
95
96     <sect1 id="Benötigte-Software-und-Pakete">
97       <title>Benötigte Software und Pakete</title>
98
99       <sect2 id="Betriebssystem">
100         <title>Betriebssystem</title>
101
102         <para>kivitendo ist für Linux konzipiert, und sollte auf jedem
103         unixoiden Betriebssystem zum Laufen zu kriegen sein. Getestet ist
104         diese Version im speziellen auf Debian und Ubuntu, grundsätzlich wurde
105         bei der Auswahl der Pakete aber darauf Rücksicht genommen, dass es
106         ohne große Probleme auf den derzeit aktuellen verbreiteten
107         Distributionen läuft.</para>
108
109         <para>Anfang 2019 sind das folgende Systeme, von denen bekannt ist,
110         dass kivitendo auf ihnen läuft:</para>
111
112         <itemizedlist>
113           <listitem>
114             <para>Debian</para>
115
116             <itemizedlist>
117               <listitem>
118                 <para>7.0 "Wheezy"</para>
119               </listitem>
120
121               <listitem>
122                 <para>8.0 "Jessie"</para>
123               </listitem>
124               <listitem>
125                 <para>9.0 "Stretch"</para>
126               </listitem>
127
128             </itemizedlist>
129           </listitem>
130
131           <listitem>
132             <para>Ubuntu 14.04 "Trusty Tahr" LTS, 15.10 "Wily Werewolf", 16.04 "Xenial Xerus" LTS
133                 und 18.04 "Bionic Beaver" LTS
134           </para>
135           </listitem>
136
137           <listitem>
138             <para>openSUSE LEAP 42.1</para>
139           </listitem>
140
141           <listitem>
142             <para>Fedora 22</para>
143           </listitem>
144         </itemizedlist>
145       </sect2>
146
147       <sect2 id="Pakete" xreflabel="Pakete">
148         <title>Benötigte Perl-Pakete installieren</title>
149
150         <para>Zum Betrieb von kivitendo werden zwingend ein Webserver (meist
151         Apache) und ein Datenbankserver (PostgreSQL) in einer aktuellen
152         Version (s.a. Liste der unterstützten Betriebssysteme)
153         benötigt.</para>
154
155         <para>Zusätzlich benötigt kivitendo einige Perl-Pakete, die nicht
156         Bestandteil einer Standard-Perl-Installation sind. Um zu überprüfen,
157         ob die erforderlichen Pakete installiert und aktuell genug sind, wird
158         ein Script mitgeliefert, das wie folgt aufgerufen wird:</para>
159
160         <programlisting>./scripts/installation_check.pl</programlisting>
161
162         <para>Die vollständige Liste der benötigten Perl-Module lautet:</para>
163
164         <itemizedlist>
165           <listitem>
166             <para><literal>parent</literal> (nur bei Perl vor 5.10.1)</para>
167           </listitem>
168
169           <listitem>
170             <para><literal>Archive::Zip</literal></para>
171           </listitem>
172
173           <listitem>
174             <para><literal>Algorithm::CheckDigits</literal></para>
175           </listitem>
176
177           <listitem>
178             <para><literal>CGI</literal></para>
179           </listitem>
180
181           <listitem>
182             <para><literal>Clone</literal></para>
183           </listitem>
184
185           <listitem>
186             <para><literal>Config::Std</literal></para>
187           </listitem>
188
189           <listitem>
190             <para><literal>DateTime</literal></para>
191           </listitem>
192
193           <listitem>
194             <para><literal>DateTime::Format::Strptime</literal></para>
195           </listitem>
196
197           <listitem>
198             <para><literal>DBI</literal></para>
199           </listitem>
200
201           <listitem>
202             <para><literal>DBD::Pg</literal></para>
203           </listitem>
204
205           <listitem>
206             <para><literal>Email::Address</literal></para>
207           </listitem>
208
209           <listitem>
210             <para><literal>Email::MIME</literal></para>
211           </listitem>
212
213           <listitem>
214             <para><literal>FCGI</literal> (nicht Versionen 0.68 bis 0.71
215             inklusive; siehe <xref
216             linkend="Apache-Konfiguration.FCGI.WebserverUndPlugin"/>)</para>
217           </listitem>
218
219           <listitem>
220             <para><literal>File::Copy::Recursive</literal></para>
221           </listitem>
222
223           <listitem>
224             <para><literal>File::MimeInfo</literal></para>
225           </listitem>
226
227           <listitem>
228             <para><literal>GD</literal></para>
229           </listitem>
230
231           <listitem>
232             <para><literal>HTML::Parser</literal></para>
233           </listitem>
234
235           <listitem>
236             <para><literal>HTML::Restrict</literal></para>
237           </listitem>
238
239           <listitem>
240             <para><literal>Image::Info</literal></para>
241           </listitem>
242
243           <listitem>
244             <para><literal>JSON</literal></para>
245           </listitem>
246
247           <listitem>
248             <para><literal>List::MoreUtils</literal></para>
249           </listitem>
250
251           <listitem>
252             <para><literal>List::UtilsBy</literal></para>
253           </listitem>
254
255           <listitem>
256             <para>LWP::Authen::Digest</para>
257           </listitem>
258
259           <listitem>
260             <para>LWP::UserAgent</para>
261           </listitem>
262
263           <listitem>
264             <para><literal>Net::SMTP::SSL</literal> (optional, bei
265             E-Mail-Versand über SSL; siehe Abschnitt "<xref
266             linkend="config.sending-email.smtp"/>")</para>
267           </listitem>
268
269           <listitem>
270             <para><literal>Net::SSLGlue</literal> (optional, bei
271             E-Mail-Versand über TLS; siehe Abschnitt "<xref
272             linkend="config.sending-email.smtp"/>")</para>
273           </listitem>
274
275           <listitem>
276             <para><literal>Params::Validate</literal></para>
277           </listitem>
278
279           <listitem>
280             <para><literal>PBKDF2::Tiny</literal></para>
281           </listitem>
282
283           <listitem>
284             <para><literal>PDF::API2</literal></para>
285           </listitem>
286
287           <listitem>
288             <para><literal>Rose::Object</literal></para>
289           </listitem>
290
291           <listitem>
292             <para><literal>Rose::DB</literal></para>
293           </listitem>
294
295           <listitem>
296             <para><literal>Rose::DB::Object</literal> Version 0.788 oder
297             neuer</para>
298           </listitem>
299
300           <listitem>
301             <para><literal>String::ShellQuote</literal></para>
302           </listitem>
303
304           <listitem>
305             <para><literal>Sort::Naturally</literal></para>
306           </listitem>
307
308           <listitem>
309             <para><literal>Template</literal></para>
310           </listitem>
311
312           <listitem>
313             <para><literal>Text::CSV_XS</literal></para>
314           </listitem>
315
316           <listitem>
317             <para><literal>Text::Iconv</literal></para>
318           </listitem>
319
320           <listitem>
321             <para><literal>Text::Unidecode</literal></para>
322           </listitem>
323
324           <listitem>
325             <para><literal>URI</literal></para>
326           </listitem>
327
328           <listitem>
329             <para><literal>XML::Writer</literal></para>
330           </listitem>
331
332           <listitem>
333             <para><literal>YAML</literal></para>
334           </listitem>
335         </itemizedlist>
336         <para>Seit Version größer v3.5.1 sind die folgenden Pakete
337         hinzugekommen:
338         <literal>Set::Infinite</literal>,
339         <literal>List::UtilsBy</literal>,
340         <literal>DateTime::Set</literal>,
341         <literal>DateTime::Event::Cron</literal></para>
342
343         <para>Seit Version größer v3.5.0 sind die folgenden Pakete
344         hinzugekommen: <literal>Text::Unidecode</literal>,
345         <literal>LWP::Authen::Digest</literal>,
346         <literal>LWP::UserAgent</literal></para>
347
348         <para>Seit Version v3.4.0 sind die folgenden Pakete hinzugekommen:
349         <literal>Algorithm::CheckDigits</literal>,
350         <literal>PBKDF2::Tiny</literal></para>
351
352         <para>Seit Version v3.2.0 sind die folgenden Pakete hinzugekommen:
353         <literal>GD</literal>, <literal>HTML::Restrict</literal>,
354         <literal>Image::Info</literal></para>
355
356         <para>Seit v3.0.0 sind die folgenden Pakete hinzugekommen:
357         <literal>File::Copy::Recursive</literal>.</para>
358
359         <para>Seit v2.7.0 sind die folgenden Pakete hinzugekommen:
360         <literal>Email::MIME</literal>, <literal>Net::SMTP::SSL</literal>,
361         <literal>Net::SSLGlue</literal>.</para>
362
363         <para>Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete
364         hinzugekommen, <literal>URI</literal> und
365         <literal>XML::Writer</literal> sind notwendig. Ohne startet kivitendo
366         nicht.</para>
367
368         <para>Gegenüber Version 2.6.1 sind <literal>parent</literal>,
369         <literal>DateTime</literal>, <literal>Rose::Object</literal>,
370         <literal>Rose::DB</literal> und <literal>Rose::DB::Object</literal>
371         neu hinzugekommen. <literal>IO::Wrap</literal> wurde entfernt.</para>
372
373         <para>Gegenüber Version 2.6.3 ist <literal>JSON</literal> neu
374         hinzugekommen.</para>
375
376         <para><literal>Email::Address</literal> und
377         <literal>List::MoreUtils</literal> sind schon länger feste
378         Abhängigkeiten, wurden aber bisher mit kivitendo mitgeliefert. Beide
379         sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
380         zukünftigen Version aber aus dem Paket entfernt werden. Es wird
381         empfohlen diese Module zusammen mit den anderen als Bibliotheken zu
382         installieren.</para>
383
384         <sect3>
385           <title>Debian und Ubuntu</title>
386
387           <para>Für Debian und Ubuntu stehen die meisten der benötigten
388           Pakete als Debian-Pakete zur Verfügung. Sie können mit
389           folgendem Befehl installiert werden:</para>
390
391           <programlisting>apt install  apache2 libarchive-zip-perl libclone-perl \
392   libconfig-std-perl libdatetime-perl libdbd-pg-perl libdbi-perl \
393   libemail-address-perl  libemail-mime-perl libfcgi-perl libjson-perl \
394   liblist-moreutils-perl libnet-smtp-ssl-perl libnet-sslglue-perl \
395   libparams-validate-perl libpdf-api2-perl librose-db-object-perl \
396   librose-db-perl librose-object-perl libsort-naturally-perl \
397   libstring-shellquote-perl libtemplate-perl libtext-csv-xs-perl \
398   libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-perl \
399   libimage-info-perl libgd-gd2-perl libapache2-mod-fcgid \
400   libfile-copy-recursive-perl postgresql libalgorithm-checkdigits-perl \
401   libcrypt-pbkdf2-perl git libcgi-pm-perl libtext-unidecode-perl libwww-perl\
402   postgresql-contrib aqbanking-tools poppler-utils libhtml-restrict-perl\
403   libdatetime-event-cron-perl libdatetime-set-perl libset-infinite-perl liblist-utilsby-perl
404 </programlisting>
405           <para>Ab Ubuntu Version 18.04 LTS sind alle benötigten Pakete in der Distributions verfügbar.</para>
406           <para>Für ältere Ubuntu/Debians müßen einige Pakete per CPAN installiert werden.
407           Das geht bspw. für das benötige Paket HTML::Restrict mit:</para>
408
409           <programlisting>apt-get install build-essential
410 cpan HTML::Restrict</programlisting>
411         </sect3>
412
413         <sect3>
414           <title>Fedora</title>
415
416           <para>Für Fedora stehen die meisten der benötigten Perl-Pakete als
417           RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl
418           installiert werden:</para>
419
420           <programlisting>dnf install httpd mod_fcgid perl-Archive-Zip perl-Clone perl-DBD-Pg \
421   perl-DBI perl-DateTime perl-Email-Address perl-Email-MIME perl-FCGI \
422   perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils perl-Net-SMTP-SSL perl-Net-SSLGlue \
423   perl-PDF-API2 perl-Params-Validate perl-Rose-DB perl-Rose-DB-Object \
424   perl-Rose-Object perl-Sort-Naturally perl-String-ShellQuote \
425   perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
426   perl-XML-Writer perl-YAML perl-parent postgresql-server perl-CPAN \
427   perl-Algorithm-CheckDigits perl-GD perl-Class-XSAccessor perl-Text-Balanced perl-libwww-perl</programlisting>
428
429           <para>Zusätzlich müssen einige Pakete aus dem CPAN installiert
430           werden. Dazu können Sie die folgenden Befehle nutzen:</para>
431
432           <programlisting>cpan Config::Std HTML::Restrict</programlisting>
433         </sect3>
434
435         <sect3>
436           <title>openSUSE</title>
437
438           <para>Für openSUSE stehen die meisten der benötigten Perl-Pakete als
439           RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl
440           installiert werden:</para>
441
442           <programlisting>zypper install apache2 apache2-mod_fcgid perl-Archive-Zip perl-Clone \
443   perl-Config-Std perl-DBD-Pg perl-DBI perl-DateTime perl-Email-Address \
444   perl-Email-MIME perl-FastCGI perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils \
445   perl-Net-SMTP-SSL perl-Net-SSLGlue perl-PDF-API2 perl-Params-Validate \
446   perl-Sort-Naturally perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv \
447   perl-URI perl-XML-Writer perl-YAML perl-CPAN \
448   perl-Algorithm-CheckDigits perl-GD perl-Class-XSAccessor postgresql-server perl-libwwww-perl</programlisting>
449
450           <para>Zusätzlich müssen einige Pakete aus dem CPAN installiert
451           werden. Dazu können Sie die folgenden Befehle nutzen:</para>
452
453           <programlisting>cpan Rose::Db::Object</programlisting>
454         </sect3>
455       </sect2>
456
457       <sect2>
458         <title>Andere Pakete installieren</title>
459
460         <para>Seit Version v3.4.0 wird für den Bankimport optional das Paket
461         'aqbanking-tools' benötigt.</para>
462
463         <para>Debian und Ubuntu: <programlisting>apt install aqbanking-tools
464         </programlisting></para>
465
466         <para>Fedora: <programlisting>dnf install aqbanking</programlisting></para>
467
468         <para>openSUSE: <programlisting>zypper install aqbanking-tools</programlisting></para>
469
470         <para>Seit Version v3.4.1 wird generell zum Feststellen der
471         Seitenanzahl von PDF_Dokumenten 'pdfinfo' benötigt was im Paket
472         'poppler-utils' enthalten ist.</para>
473
474         <para>Debian und Ubuntu: <programlisting>apt install poppler-utils
475         </programlisting></para>
476
477         <para>Fedora: <programlisting>dnf install poppler-utils</programlisting></para>
478
479         <para>openSUSE: <programlisting>zypper install poppler-tools</programlisting></para>
480       </sect2>
481     </sect1>
482
483     <sect1 id="Manuelle-Installation-des-Programmpaketes"
484            xreflabel="Manuelle Installation des Programmpaketes">
485       <title>Manuelle Installation des Programmpaketes</title>
486
487       <para>Der aktuelle Stable-Release, bzw. beta Release wird bei github
488       gehostet und kann <ulink
489       url="https://github.com/kivitendo/kivitendo-erp/releases">hier</ulink>
490       heruntergeladen werden.</para>
491
492       <para>Die kivitendo ERP Installationsdatei
493       (<filename>kivitendo-erp-3.4.1.tgz</filename>) wird im
494       Dokumentenverzeichnis des Webservers (z.B.
495       <filename>/var/www/html/</filename>,
496       <filename>/srv/www/htdocs</filename> oder
497       <filename>/var/www/</filename>) entpackt:</para>
498
499       <programlisting>cd /var/www
500 tar xvzf kivitendo-erp-3.4.1.tgz</programlisting>
501
502       <para>Wechseln Sie in das entpackte Verzeichnis:</para>
503
504       <programlisting>cd kivitendo-erp</programlisting>
505
506       <para>Alternativ können Sie auch einen Alias in der
507       Webserverkonfiguration benutzen, um auf das tatsächliche
508       Installationsverzeichnis zu verweisen.</para>
509
510       <para>Bei einer Neuinstallation von Version 3.1.0 oder später muß das
511       WebDAV Verzeichnis derzeit manuell angelegt werden:</para>
512
513       <programlisting>mkdir webdav</programlisting>
514
515       <para>Die Verzeichnisse <filename>users</filename>,
516       <filename>spool</filename> und <filename>webdav</filename> müssen für
517       den Benutzer beschreibbar sein, unter dem der Webserver läuft. Die
518       restlichen Dateien müssen für diesen Benutzer lesbar sein. Die Benutzer-
519       und Gruppennamen sind bei verschiedenen Distributionen unterschiedlich
520       (z.B. bei Debian/Ubuntu <constant>www-data</constant>, bei Fedora
521       <constant>apache</constant> oder bei openSUSE
522       <constant>wwwrun</constant>).</para>
523
524       <para>Der folgende Befehl ändert den Besitzer für die oben genannten
525       Verzeichnisse auf einem Debian/Ubuntu-System:</para>
526
527       <programlisting>chown -R www-data users spool webdav</programlisting>
528
529       <para>Weiterhin muss der Webserver-Benutzer in den Verzeichnissen
530       <filename>templates</filename> und <filename>users</filename>
531       Unterverzeichnisse für jeden neuen Benutzer anlegen dürfen, der in
532       kivitendo angelegt wird:</para>
533
534       <programlisting>chown www-data templates users</programlisting>
535
536       <note>
537         <para>Wir empfehlen eine Installation mittels des Versionsmanagager
538         git. Hierfür muss ein git-Client installiert sein. Damit ist man sehr
539         viel flexibler für zukünftige Upgrades. Installations-Anleitung (bitte
540         die Pfade anpassen) bspw. wie folgt: <programlisting>cd /var/www/
541 git clone https://github.com/kivitendo/kivitendo-erp.git
542 cd kivitendo-erp/
543 git checkout `git tag -l | egrep -ve "(alpha|beta|rc)" | tail -1`</programlisting>
544         Erläuterung: Der Befehl wechselt zur letzten Stable-Version (git tag
545         -l listet alle Tags auf, das egrep schmeisst alle Einträge mit alpha,
546         beta oder rc raus und das tail gibt davon den obersten Treffer
547         zurück). Sehr sinnvoll ist es, direkt im Anschluss einen eigenen
548         Branch zu erzeugen, um bspw. seine eigenen Druckvorlagen-Anpassungen
549         damit zu verwalten. Hierfür reicht ein simples <programlisting>  git checkout -b meine_eigenen_änderungen</programlisting>
550         nach dem letzten Kommando (weiterführende Informationen <ulink
551         url="http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html">
552         Git Magic</ulink>).</para>
553
554         <para>Ein beispielhafter Workflow für Druckvorlagen-Anpassungen von
555         3.4.1 nach 3.5: <programlisting>
556 $ git clone https://github.com/kivitendo/kivitendo-erp.git
557 $ cd kivitendo-erp/
558 $ git checkout release-3.4.1     # das ist der aktuelle release, den wir wollen
559 $ git add templates/fullhouse    # das sind unsere druckvorlagen inkl. produktbilder
560 $ git commit -m "juhu tolle ändernungen"
561 [meine_aenderungen 1d89e41] juhu tolle ändernungen
562  4 files changed, 380 insertions(+)
563  create mode 100644 templates/fullhouse/img/webdav/tesla.png
564  create mode 100644 templates/fullhouse/mahnung.tex
565  create mode 100644 templates/fullhouse/zahlungserinnerung_zwei.tex
566  create mode 100644 templates/fullhouse/zahlungserinnerung_zwei_invoice.tex
567
568 # 5 Jahre später ...
569
570 $ git fetch
571 $ git rebase --onto release-3.5.0 release-3.4.1 meine_aenderungen
572 Zunächst wird der Branch zurückgespult, um Ihre Änderungen
573 darauf neu anzuwenden ...
574 Wende an: juhu tolle ändernungen
575 $ service apache2 restart
576 </programlisting></para>
577       </note>
578     </sect1>
579
580     <sect1 id="config.config-file">
581       <title>kivitendo-Konfigurationsdatei</title>
582
583       <sect2 id="config.config-file.introduction"
584              xreflabel="Einführung in die Konfigurationsdatei">
585         <title>Einführung</title>
586
587         <para>In kivitendo gibt es nur noch eine Konfigurationsdatei, die
588         benötigt wird: <filename>config/kivitendo.conf</filename> (kurz: "die
589         Hauptkonfigurationsdatei"). Diese muss bei der Erstinstallation von
590         kivitendo bzw. der Migration von älteren Versionen angelegt
591         werden.</para>
592
593         <para>Als Vorlage dient die Datei
594         <filename>config/kivitendo.conf.default</filename> (kurz: "die
595         Default-Datei"):</para>
596
597         <programlisting>$ cp config/kivitendo.conf.default config/kivitendo.conf</programlisting>
598
599         <para>Die Default-Datei wird immer zuerst eingelesen. Werte, die in
600         der Hauptkonfigurationsdatei stehen, überschreiben die Werte aus der
601         Default-Datei. Die Hauptkonfigurationsdatei muss also nur die
602         Abschnitte und Werte enthalten, die von denen der Default-Datei
603         abweichen.</para>
604
605         <note>
606           <para>Vor der Umbenennung in kivitendo hieß diese Datei noch
607           <filename>config/lx_office.conf</filename>. Aus Gründen der
608           Kompatibilität wird diese Datei eingelesen, sofern die Datei
609           <filename>config/kivitendo.conf</filename> nicht existiert.</para>
610         </note>
611
612         <para>Diese Hauptkonfigurationsdatei ist dann eine
613         installationsspezifische Datei, d.h. sie enthält bspw. lokale
614         Passwörter und wird auch nicht im Versionsmanagement (git)
615         verwaltet.</para>
616
617         <para>Die Konfiguration ist ferner serverabhängig, d.h. für alle
618         Mandaten, bzw. Datenbanken gleich.</para>
619       </sect2>
620
621       <sect2 id="config.config-file.sections-parameters">
622         <title>Abschnitte und Parameter</title>
623
624         <para>Die Konfigurationsdatei besteht aus mehreren Teilen, die
625         entsprechend kommentiert sind:</para>
626
627         <itemizedlist>
628           <listitem>
629             <para><literal>authentication</literal> (siehe Abschnitt "<xref
630             linkend="Benutzerauthentifizierung-und-Administratorpasswort"/>"
631             in diesem Kapitel)</para>
632           </listitem>
633
634           <listitem>
635             <para><literal>authentication/database</literal></para>
636           </listitem>
637
638           <listitem>
639             <para><literal>authentication/ldap</literal></para>
640           </listitem>
641
642           <listitem>
643             <para><literal>system</literal></para>
644           </listitem>
645
646           <listitem>
647             <para><literal>paths</literal></para>
648           </listitem>
649
650           <listitem>
651             <para><literal>mail_delivery</literal> (siehe Abschnitt "<xref
652             linkend="config.sending-email.smtp"/>)</para>
653           </listitem>
654
655           <listitem>
656             <para><literal>applications</literal></para>
657           </listitem>
658
659           <listitem>
660             <para><literal>environment</literal></para>
661           </listitem>
662
663           <listitem>
664             <para><literal>print_templates</literal></para>
665           </listitem>
666
667           <listitem>
668             <para><literal>task_server</literal></para>
669           </listitem>
670
671           <listitem>
672             <para><literal>periodic_invoices</literal></para>
673           </listitem>
674
675           <listitem>
676             <para><literal>self_tests</literal></para>
677           </listitem>
678
679           <listitem>
680             <para><literal>console</literal></para>
681           </listitem>
682
683           <listitem>
684             <para><literal>testing</literal></para>
685           </listitem>
686
687           <listitem>
688             <para><literal>testing/database</literal></para>
689           </listitem>
690
691           <listitem>
692             <para><literal>debug</literal></para>
693           </listitem>
694         </itemizedlist>
695
696         <para>Die üblicherweise wichtigsten Parameter, die am Anfang
697         einzustellen oder zu kontrollieren sind, sind:</para>
698
699         <programlisting>[authentication]
700 admin_password = geheim
701
702 [authentication/database]
703 host     = localhost
704 port     = 5432
705 db       = kivitendo_auth
706 user     = postgres
707 password =
708
709 [system]
710 default_manager = german</programlisting>
711
712         <para>Für kivitendo Installationen in der Schweiz sollte hier
713         <varname>german</varname> durch <varname>swiss</varname> ersetzt
714         werden.</para>
715
716         <para>Die Einstellung <varname>default_manager = swiss</varname>
717         bewirkt:</para>
718
719         <itemizedlist>
720           <listitem>
721             <para>Beim Erstellen einer neuen Datenbank in der kivitendo
722             Administration werden automatisch die Standard-Werte für die
723             Schweiz voreingestellt: Währung CHF, 5er-Rundung, Schweizer
724             KMU-Kontenplan, Sollversteuerung, Aufwandsmethode, Bilanzierung
725             (die Werte können aber manuell angepasst werden).</para>
726           </listitem>
727
728           <listitem>
729             <para>Einstellen der Standardkonten für Rundungserträge und
730             -aufwendungen (unter Mandantenkonfiguration → Standardkonten
731             veränderbar)</para>
732           </listitem>
733
734           <listitem>
735             <para>das verwendete Zahlenformat wird auf
736             <varname>1'000.00</varname> eingestellt (unter Programm →
737             Benutzereinstellungen veränderbar)</para>
738           </listitem>
739
740           <listitem>
741             <para>DATEV-Automatik und UStVA werden nicht angezeigt,
742             Erfolgsrechnung ersetzt GUV ( unter Mandantenkonfiguration →
743             Features veränderbar)</para>
744           </listitem>
745         </itemizedlist>
746
747         <para>Nutzt man wiederkehrende Rechnungen, kann man unter
748         <varname>[periodic_invoices]</varname> den Login eines Benutzers
749         angeben, der nach Erstellung der Rechnungen eine entsprechende E-Mail
750         mit Informationen über die erstellten Rechnungen bekommt.</para>
751
752         <para>kivitendo bringt eine eigene Komponente zur zeitgesteuerten
753         Ausführung bestimmter Aufgaben mit, den <link
754         linkend="config.task-server">Taskserver</link>. Er wird u.a. für
755         Features wie die <link
756         linkend="features.periodic-invoices">wiederkehrenden Rechnungen</link>
757         benötigt, erledigt aber auch andere erforderliche Aufgaben und muss
758         daher in Betrieb genommen werden. Seine Einrichtung wird im Abschnitt
759         <link linkend="config.task-server">Task-Server</link> genauer
760         beschrieben.</para>
761
762         <para>Für Entwickler finden sich unter <varname>[debug]</varname>
763         wichtige Funktionen, um die Fehlersuche zu erleichtern.</para>
764       </sect2>
765
766       <sect2 id="config.config-file.prior-versions">
767         <title>Versionen vor 2.6.3</title>
768
769         <para>In älteren kivitendo Versionen gab es im Verzeichnis
770         <filename>config</filename> die Dateien
771         <filename>authentication.pl</filename> und
772         <filename>lx-erp.conf</filename>, die jeweils Perl-Dateien waren. Es
773         gab auch die Möglichkeit, eine lokale Version der Konfigurationsdatei
774         zu erstellen (<filename>lx-erp-local.conf</filename>). Dies ist ab
775         2.6.3 nicht mehr möglich, aber auch nicht mehr nötig.</para>
776
777         <para>Beim Update von einer kivitendo-Version vor 2.6.3 auf 2.6.3 oder
778         jünger müssen die Einstellungen aus den alten Konfigurationsdateien
779         manuell übertragen und die alten Konfigurationsdateien anschließend
780         gelöscht oder verschoben werden. Ansonsten zeigt kivitendo eine
781         entsprechende Fehlermeldung an.</para>
782       </sect2>
783     </sect1>
784
785     <sect1 id="Anpassung-der-PostgreSQL-Konfiguration">
786       <title>Anpassung der PostgreSQL-Konfiguration</title>
787
788       <para>PostgreSQL muss auf verschiedene Weisen angepasst werden.</para>
789
790       <sect2 id="Zeichensätze-die-Verwendung-von-UTF-8">
791         <title>Zeichensätze/die Verwendung von Unicode/UTF-8</title>
792
793         <para>kivitendo setzt zwingend voraus, dass die Datenbank
794         Unicode/UTF-8 als Encoding einsetzt. Bei aktuellen
795         Serverinstallationen braucht man hier meist nicht einzugreifen.</para>
796
797         <para>Das Encoding des Datenbankservers kann überprüft werden. Ist das
798         Encoding der Datenbank "template1" "Unicode" bzw. "UTF-8", so braucht
799         man nichts weiteres diesbezüglich unternehmen. Zum Testen:</para>
800
801         <programlisting>su postgres
802 echo '\l' | psql
803 exit </programlisting>
804
805         <para>Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
806         Unicode-Encoding anzulegen und diesen zu verwenden. Unter Debian und
807         Ubuntu kann dies z.B. für PostgreSQL 9.3 mit dem folgenden Befehl
808         getan werden:</para>
809
810         <programlisting>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 9.3 clustername</programlisting>
811
812         <para>Die Datenbankversionsnummer muss an die tatsächlich verwendete
813         Versionsnummer angepasst werden.</para>
814
815         <para>Unter anderen Distributionen gibt es ähnliche Methoden.</para>
816
817         <para>Das Encoding einer Datenbank kann in <command>psql</command> mit
818         <literal>\l</literal> geprüft werden.</para>
819       </sect2>
820
821       <sect2 id="Änderungen-an-Konfigurationsdateien">
822         <title>Änderungen an Konfigurationsdateien</title>
823
824         <para>In der Datei <filename>postgresql.conf</filename>, die je nach
825         Distribution in verschiedenen Verzeichnissen liegen kann (z.B.
826         <filename>/var/lib/pgsql/data/</filename> oder
827         <filename>/etc/postgresql/</filename>), muss sichergestellt werden,
828         dass TCP/IP-Verbindungen aktiviert sind. Das Verhalten wird über den
829         Parameter <varname>listen_address</varname> gesteuert. Laufen
830         PostgreSQL und kivitendo auf demselben Rechner, so kann dort der Wert
831         <literal>localhost</literal> verwendet werden. Andernfalls müssen
832         Datenbankverbindungen auch von anderen Rechnern aus zugelassen werden,
833         was mit dem Wert <literal>*</literal> geschieht.</para>
834
835         <para>In der Datei <filename>pg_hba.conf</filename>, die im gleichen
836         Verzeichnis wie die <filename>postgresql.conf</filename> zu finden
837         sein sollte, müssen die Berechtigungen für den Zugriff geändert
838         werden. Hier gibt es mehrere Möglichkeiten. Sinnvoll ist es nur die
839         nötigen Verbindungen immer zuzulassen, für eine lokal laufende
840         Datenbank zum Beispiel:</para>
841
842         <programlisting>local all kivitendo password
843 host all kivitendo 127.0.0.1 255.255.255.255 password</programlisting>
844       </sect2>
845
846       <sect2 id="Erweiterung-für-servergespeicherte-Prozeduren">
847         <title>Erweiterung für servergespeicherte Prozeduren</title>
848
849         <para>In der Datenbank <literal>template1</literal> muss die
850         Unterstützung für servergespeicherte Prozeduren eingerichet werden.
851         Melden Sie sich dafür als Benutzer “postgres” an der Datenbank an:
852         <programlisting>su - postgres
853 psql template1</programlisting> führen Sie die folgenden Kommandos aus:</para>
854
855         <programlisting>CREATE EXTENSION IF NOT EXISTS plpgsql;
856 \q</programlisting>
857
858         <note>
859           <para><literal>CREATE EXTENSION</literal> ist seit Version 9.1 die
860           bevorzugte Syntax um die Sprache <literal>plpgsql</literal>
861           anzulegen. In diesen Versionen ist die Extension meist auch schon
862           vorhanden. Sollten Sie eine ältere Version von Postgres haben,
863           benutzen Sie stattdessen den folgenden Befehl.</para>
864
865           <programlisting>CREATE LANGUAGE 'plpgsql';
866 \q</programlisting>
867         </note>
868       </sect2>
869
870       <sect2 id="Erweiterung-für-trigram">
871         <title>Erweiterung für Trigram Prozeduren</title>
872
873         <para>Ab Version 3.5.1 wird die Trigram-Index-Erweiterung benötigt.
874         Diese wird mit dem SQL-Updatescript
875         sql/Pg-upgrade2/trigram_extension.sql und Datenbank-Super-Benutzer
876         Rechten automatisch installiert. Dazu braucht der
877         DatenbankSuperbenutzer "postgres" ein Passwort.</para>
878
879         <programlisting>su - postgres
880 psql
881 \password postgres
882
883 Eingabe Passwort
884 \q</programlisting>
885
886         <para>Benutzername Postgres und Passwort können jetzt beim Anlegen
887         einer Datenbank bzw. bei Updatescripten, die SuperuserRechte
888         benötigen, eingegeben werden.</para>
889
890         <note>
891           <para><literal>pg_trgm</literal> ist je nach Distribution nicht im
892           Standard-Paket von Postgres enthalten. Ein <programlisting>select * from pg_available_extensions where name ='pg_trgm';</programlisting>
893           in template1 sollte entsprechend erfolgreich sein. Andernfalls muss
894           das Paket nachinstalliert werden, bspw. bei debian/ubuntu
895           <programlisting>apt install postgresql-contrib</programlisting></para>
896         </note>
897       </sect2>
898
899       <sect2 id="Datenbankbenutzer-anlegen">
900         <title>Datenbankbenutzer anlegen</title>
901
902         <para>Wenn Sie nicht den Datenbanksuperuser “postgres” zum Zugriff
903         benutzen wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer
904         anlegen. Ein Beispiel, wie Sie einen neuen Benutzer anlegen
905         können:</para>
906
907         <para>Die Frage, ob der neue User Superuser sein soll, können Sie mit
908         nein beantworten, genauso ist die Berechtigung neue User (Roles) zu
909         generieren nicht nötig.</para>
910
911         <programlisting>su - postgres
912 createuser -d -P kivitendo
913 exit</programlisting>
914
915         <para>Wenn Sie später einen Datenbankzugriff konfigurieren, verändern
916         Sie den evtl. voreingestellten Benutzer “postgres” auf “kivitendo”
917         bzw. den hier gewählten Benutzernamen.</para>
918       </sect2>
919     </sect1>
920
921     <sect1 id="Apache-Konfiguration">
922       <title>Webserver-Konfiguration</title>
923
924       <sect2>
925         <title>Grundkonfiguration mittels CGI</title>
926
927         <note>
928           <para>Für einen deutlichen Performanceschub sorgt die Ausführung
929           mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
930           <xref linkend="Apache-Konfiguration.FCGI"/> beschrieben.</para>
931         </note>
932
933         <para>Der Zugriff auf das Programmverzeichnis muss in der Apache
934         Webserverkonfigurationsdatei <literal>httpd.conf</literal> eingestellt
935         werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
936         anderen Datei hinzu, die beim Starten des Webservers eingelesen
937         wird:</para>
938
939         <programlisting>AliasMatch ^/kivitendo-erp/[^/]+\.pl /var/www/kivitendo-erp/dispatcher.pl
940 Alias /kivitendo-erp/ /var/www/kivitendo-erp/
941
942 &lt;Directory /var/www/kivitendo-erp&gt;
943  AddHandler cgi-script .pl
944  Options ExecCGI Includes FollowSymlinks
945 &lt;/Directory&gt;
946
947 &lt;Directory /var/www/kivitendo-erp/users&gt;
948  Require all granted
949 &lt;/Directory&gt;</programlisting>
950
951         <para>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
952         das kivitendo-Archiv entpacket haben.</para>
953
954         <note>
955           <para>Vor den einzelnen Optionen muss bei einigen Distributionen ein
956           Plus ‘<literal>+</literal>’ gesetzt werden.</para>
957
958           <para>Bei einigen Distribution (Ubuntu ab 14.04, Debian ab 8.2) muss
959           noch explizit das cgi-Modul mittels <programlisting>a2enmod cgi</programlisting>
960           aktiviert werden.</para>
961         </note>
962
963         <para>Auf einigen Webservern werden manchmal die Grafiken und
964         Style-Sheets nicht ausgeliefert. In solchen Fällen hat es oft
965         geholfen, die folgende Option in die Konfiguration aufzunehmen:</para>
966
967         <programlisting>EnableSendfile Off</programlisting>
968       </sect2>
969
970       <sect2 id="Apache-Konfiguration.FCGI"
971              xreflabel="Konfiguration für FastCGI/FCGI">
972         <title>Konfiguration für FastCGI/FCGI</title>
973
974         <sect3 id="Apache-Konfiguration.FCGI.WasIstEs">
975           <title>Was ist FastCGI?</title>
976
977           <para>Direkt aus <ulink
978           url="http://de.wikipedia.org/wiki/FastCGI">Wikipedia</ulink>
979           kopiert:</para>
980
981           <para><citation> FastCGI ist ein Standard für die Einbindung
982           externer Software zur Generierung dynamischer Webseiten in einem
983           Webserver. FastCGI ist vergleichbar zum Common Gateway Interface
984           (CGI), wurde jedoch entwickelt, um dessen Performance-Probleme zu
985           umgehen. </citation></para>
986         </sect3>
987
988         <sect3 id="Apache-Konfiguration.FCGI.Warum">
989           <title>Warum FastCGI?</title>
990
991           <para>Perl Programme (wie kivitendo eines ist) werden nicht statisch
992           kompiliert. Stattdessen werden die Quelldateien bei jedem Start
993           übersetzt, was bei kurzen Laufzeiten einen Großteil der Laufzeit
994           ausmacht. Während SQL Ledger einen Großteil der Funktionalität in
995           einzelne Module kapselt, um immer nur einen kleinen Teil laden zu
996           müssen, ist die Funktionalität von kivitendo soweit gewachsen, dass
997           immer mehr Module auf den Rest des Programms zugreifen. Zusätzlich
998           benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
999           entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies
1000           führt dazu dass ein kivitendo Aufruf der Kernmasken mittlerweile
1001           deutlich länger dauert als früher, und dass davon 90% für das Laden
1002           der Module verwendet wird.</para>
1003
1004           <para>Mit FastCGI werden nun die Module einmal geladen, und danach
1005           wird nur die eigentliche Programmlogik ausgeführt.</para>
1006         </sect3>
1007
1008         <sect3 id="Apache-Konfiguration.FCGI.WebserverUndPlugin">
1009           <title>Getestete Kombinationen aus Webservern und Plugin</title>
1010
1011           <para>Folgende Kombinationen sind getestet:</para>
1012
1013           <itemizedlist>
1014             <listitem>
1015               <para>Apache 2.4.7 (Ubuntu 14.04.2 LTS) und mod_fcgid.</para>
1016             </listitem>
1017             <listitem>
1018               <para>Apache 2.4.18 (Ubuntu 16.04 LTS) und mod_fcgid</para>
1019             </listitem>
1020             <listitem>
1021               <para>Apache 2.4.29 (Ubuntu 18.04 LTS) und mod_fcgid</para>
1022             </listitem>
1023           </itemizedlist>
1024
1025           <para>Als Perl Backend wird das Modul <filename>FCGI.pm</filename>
1026           verwendet.</para>
1027
1028           <warning>
1029             <para>FCGI-Versionen ab 0.69 und bis zu 0.71 inklusive sind extrem
1030             strict in der Behandlung von Unicode, und verweigern bestimmte
1031             Eingaben von kivitendo. Falls es Probleme mit Umlauten in Ihrer
1032             Installation gibt, muss zwingend Version 0.68 oder aber Version
1033             0.72 und neuer eingesetzt werden.</para>
1034
1035             <para>Mit <ulink url="http://www.cpan.org">CPAN</ulink> lässt sie
1036             sich die Vorgängerversion wie folgt installieren:</para>
1037
1038             <programlisting>force install M/MS/MSTROUT/FCGI-0.68.tar.gz</programlisting>
1039           </warning>
1040         </sect3>
1041
1042         <sect3 id="Apache-Konfiguration.FCGI.Konfiguration">
1043           <title>Konfiguration des Webservers</title>
1044
1045           <para>Bevor Sie versuchen, eine kivitendo Installation unter FCGI
1046           laufen zu lassen, empfiehlt es sich die Installation ersteinmal
1047           unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
1048           debuggen die beim ersten aufsetzen auftreten können. Sollte die
1049           Installation schon funktionieren, lesen Sie weiter.</para>
1050
1051           <para>Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
1052           unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:</para>
1053
1054           <programlisting>a2enmod fcgid</programlisting>
1055
1056           <para>Die Konfiguration für die Verwendung von kivitendo mit FastCGI
1057           erfolgt durch Anpassung der vorhandenen <function>Alias</function>-
1058           und <function>Directory</function>-Direktiven. Dabei wird zwischen
1059           dem Installationspfad von kivitendo im Dateisystem
1060           ("<filename>/path/to/kivitendo-erp</filename>") und der URL
1061           unterschieden, unter der kivitendo im Webbrowser erreichbar ist
1062           ("<filename>/url/for/kivitendo-erp</filename>").</para>
1063
1064           <para>Folgender Konfigurationsschnipsel funktioniert mit
1065           mod_fastcgi:</para>
1066
1067           <programlisting>AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fcgi
1068 Alias       /url/for/kivitendo-erp/          /path/to/kivitendo-erp/
1069
1070 &lt;Directory /path/to/kivitendo-erp&gt;
1071   AllowOverride All
1072   Options ExecCGI Includes FollowSymlinks
1073   Require all granted
1074 &lt;/Directory&gt;
1075
1076 &lt;DirectoryMatch /path/to/kivitendo-erp/users&gt;
1077 Require all denied
1078 &lt;/DirectoryMatch&gt;</programlisting>
1079
1080           <warning>
1081             <para>Wer einen älteren Apache als Version 2.4 im Einsatz hat,
1082             muss entsprechend die Syntax der Directorydirektiven verändert.
1083             Statt</para>
1084
1085             <programlisting>Require all granted</programlisting>
1086
1087             <para>muß man Folgendes einstellen:</para>
1088
1089             <programlisting>
1090   Order Allow,Deny
1091   Allow from All </programlisting>
1092
1093             <para>und statt</para>
1094
1095             <programlisting>Require all denied</programlisting>
1096
1097             <para>muss stehen:</para>
1098
1099             <programlisting>
1100   Order Deny,Allow
1101   Deny from All </programlisting>
1102           </warning>
1103
1104           <para>Seit mod_fcgid-Version 2.3.6 gelten sehr kleine Grenzen für
1105           die maximale Größe eines Requests. Diese sollte wie folgt
1106           hochgesetzt werden:</para>
1107
1108           <programlisting>FcgidMaxRequestLen 10485760</programlisting>
1109
1110           <para>Das Ganze sollte dann so aussehen:</para>
1111
1112           <programlisting>AddHandler fcgid-script .fpl
1113 AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
1114 Alias       /url/for/kivitendo-erp/          /path/to/kivitendo-erp/
1115 FcgidMaxRequestLen 10485760
1116
1117 &lt;Directory /path/to/kivitendo-erp&gt;
1118   AllowOverride All
1119   Options ExecCGI Includes FollowSymlinks
1120   Order Allow,Deny
1121   Allow from All
1122 &lt;/Directory&gt;
1123
1124 &lt;DirectoryMatch /path/to/kivitendo-erp/users&gt;
1125   Order Deny,Allow
1126   Deny from All
1127 &lt;/DirectoryMatch&gt;</programlisting>
1128
1129           <para>Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle
1130           Zugriffe auf die einzelnen Scripte werden auf diesen umgeleitet.
1131           Dadurch, dass zur Laufzeit öfter mal Scripte neu geladen werden,
1132           gibt es hier kleine Performance-Einbußen.</para>
1133
1134           <para>Es ist möglich, die gleiche kivitendo Version parallel unter
1135           CGI und FastCGI zu betreiben. Dafür bleiben die Directorydirektiven
1136           wie oben beschrieben, die URLs werden aber umgeleitet:</para>
1137
1138           <programlisting># Zugriff über CGI
1139 Alias       /url/for/kivitendo-erp                /path/to/kivitendo-erp
1140
1141 # Zugriff mit mod_fcgid:
1142 AliasMatch ^/url/for/kivitendo-erp-fcgid/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
1143 Alias       /url/for/kivitendo-erp-fcgid/          /path/to/kivitendo-erp/</programlisting>
1144
1145           <para>Dann ist unter <filename>/url/for/kivitendo-erp/</filename>
1146           die normale Version erreichbar, und unter
1147           <constant>/url/for/kivitendo-erp-fcgid/</constant> die
1148           FastCGI-Version.</para>
1149         </sect3>
1150       </sect2>
1151
1152       <sect2>
1153         <title>Weitergehende Konfiguration</title>
1154
1155         <para>Für einen deutlichen Sicherheitsmehrwert sorgt die Ausführung
1156         von kivitendo nur über https-verschlüsselten Verbindungen, sowie
1157         weiteren Zusatzmassnahmen, wie beispielsweise Basic Authenticate. Die
1158         Konfigurationsmöglichkeiten sprengen allerdings den Rahmen dieser
1159         Anleitung, hier ein Hinweis auf einen entsprechenden <ulink
1160         url="http://redmine.kivitendo-premium.de/boards/1/topics/142">Foreneintrag
1161         (Stand Sept. 2015)</ulink> und einen aktuellen (Stand Mai 2017) <ulink
1162         url="https://mozilla.github.io/server-side-tls/ssl-config-generator/">
1163         SSL-Konfigurations-Generator</ulink>.</para>
1164       </sect2>
1165     </sect1>
1166
1167     <sect1 id="config.task-server">
1168       <title>Der Task-Server</title>
1169
1170       <para>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in
1171       regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und diese zu
1172       festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess
1173       wird u.a. für die Erzeugung der wiederkehrenden Rechnungen und weitere
1174       essenzielle Aufgaben benutzt.</para>
1175
1176       <para>Der Task-Server muss einmalig global in der Konfigurationsdatei
1177       konfiguriert werden. Danach wird er für jeden Mandanten, für den er
1178       laufen soll, in der Adminsitrationsmaske eingeschaltet.</para>
1179
1180       <para>Beachten Sie, dass der Task-Server in den Boot-Vorgang Ihres
1181       Servers integriert werden muss, damit er automatisch gestartet wird.
1182       Dies kann kivitendo nicht für Sie erledigen.</para>
1183
1184       <para>Da der Taskserver als Perlscript läuft, wird Arbeitsspeicher, der
1185       einmal benötigt wurde, nicht mehr an das Betriebssystem zurückgegeben,
1186       solange der Taskserver läuft. Dies kann dazu führen, dass ein länger
1187       laufender Taskserver mit der Zeit immer mehr Arbeitsspeicher für sich
1188       beansprucht. Es ist deshalb sinnvoll, dass der Taskserver in
1189       regelmässigen Abständen neu gestartet wird.</para>
1190
1191       <sect2 id="Konfiguration-des-Task-Servers">
1192         <title>Verfügbare und notwendige Konfigurationsoptionen</title>
1193
1194         <para>Die Konfiguration erfolgt über den Abschnitt
1195         <literal>[task_server]</literal> in der Datei
1196         <filename>config/kivitendo.conf</filename>. Die dort verfügbaren
1197         Optionen sind:</para>
1198
1199         <variablelist>
1200           <varlistentry>
1201             <term><varname>run_as</varname></term>
1202
1203             <listitem>
1204               <para>Wird der Server vom Systembenutzer <literal>root</literal>
1205               gestartet, so wechselt er auf den mit <literal>run_as</literal>
1206               angegebenen Systembenutzer. Der Systembenutzer muss dieselben
1207               Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
1208               (siehe see <xref
1209               linkend="Manuelle-Installation-des-Programmpaketes"/>). Daher
1210               ist es erforderlich, hier denselben Systembenutzer einzutragen,
1211               unter dem auch der Webserver läuft.</para>
1212             </listitem>
1213           </varlistentry>
1214
1215           <varlistentry>
1216             <term><varname>debug</varname></term>
1217
1218             <listitem>
1219               <para>Schaltet Debug-Informationen an und aus.</para>
1220             </listitem>
1221           </varlistentry>
1222         </variablelist>
1223       </sect2>
1224
1225       <sect2 id="Konfiguration-der-Mandanten-fuer-den-Task-Servers">
1226         <title>Konfiguration der Mandanten für den Task-Server</title>
1227
1228         <para>Ist der Task-Server grundlegend konfiguriert, so muss
1229         anschließend jeder Mandant, für den der Task-Server laufen soll,
1230         einmalig konfiguriert werden. Dazu kann in der Maske zum Bearbeiten
1231         von Mandanten im Administrationsbereich eine kivitendo-Benutzerkennung
1232         ausgewählt werden, unter der der Task-Server seine Arbeit
1233         verrichtet.</para>
1234
1235         <para>Ist in dieser Einstellung keine Benutzerkennung ausgewählt, so
1236         wird der Task-Server für diesen Mandanten keine Aufgaben
1237         ausführen.</para>
1238       </sect2>
1239
1240       <sect2 id="Einbinden-in-den-Boot-Prozess">
1241         <title>Automatisches Starten des Task-Servers beim Booten</title>
1242
1243         <para>Der Task-Server verhält sich von seinen Optionen her wie ein
1244         reguläres SystemV-kompatibles Boot-Script. Außerdem wechselt er beim
1245         Starten automatisch in das kivitendo-Installationsverzeichnis.</para>
1246
1247         <para>Deshalb ist es möglich, ihn durch Setzen eines symbolischen
1248         Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
1249         einzubinden. Da das bei neueren Linux-Distributionen aber nicht
1250         zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
1251         anstelle eines symbolischen Links verwendet werden können.</para>
1252
1253         <sect3>
1254           <title>SystemV-basierende Systeme (z.B. ältere Debian, ältere
1255           openSUSE, ältere Fedora)</title>
1256
1257           <para>Kopieren Sie die Datei
1258           <filename>scripts/boot/system-v/kivitendo-task-server</filename>
1259           nach <filename>/etc/init.d/kivitendo-task-server</filename>. Passen
1260           Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
1261           <literal>DAEMON=....</literal>). Binden Sie das Script in den
1262           Boot-Prozess ein. Dies ist distributionsabhängig:</para>
1263
1264           <itemizedlist>
1265             <listitem>
1266               <para>Debian-basierende Systeme:</para>
1267
1268               <programlisting>update-rc.d kivitendo-task-server defaults
1269 insserv kivitendo-task-server</programlisting>
1270             </listitem>
1271
1272             <listitem>
1273               <para>Ältere openSUSE und ältere Fedora:</para>
1274
1275               <programlisting>chkconfig --add kivitendo-task-server</programlisting>
1276             </listitem>
1277           </itemizedlist>
1278
1279           <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
1280           werden:</para>
1281
1282           <programlisting>/etc/init.d/kivitendo-task-server start</programlisting>
1283         </sect3>
1284
1285         <sect3>
1286           <title>Upstart-basierende Systeme (z.B. Ubuntu bis 14.04)</title>
1287
1288           <para>Kopieren Sie die Datei
1289           <filename>scripts/boot/upstart/kivitendo-task-server.conf</filename>
1290           nach <filename>/etc/init/kivitendo-task-server.conf</filename>.
1291           Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
1292           <literal>exec ....</literal>).</para>
1293
1294           <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
1295           werden:</para>
1296
1297           <programlisting>service kivitendo-task-server start</programlisting>
1298         </sect3>
1299
1300         <sect3>
1301           <title>systemd-basierende Systeme (z.B. neure openSUSE, neuere
1302           Fedora, neuere Ubuntu und neuere Debians)</title>
1303
1304           <para>Kopieren Sie die Datei
1305           <filename>scripts/boot/systemd/kivitendo-task-server.service</filename>
1306           nach <filename>/etc/systemd/system/</filename>. Passen Sie in der
1307           kopierten Datei den Pfad zum Task-Server an (Zeilen
1308           <literal>ExecStart=....</literal> und
1309           <literal>ExecStop=...</literal>).</para>
1310
1311           <para>Machen Sie anschließend das Script systemd bekannt, und binden
1312           Sie es in den Boot-Prozess ein. Dazu führen Sie die folgenden Befehl
1313           aus:</para>
1314
1315           <programlisting>systemctl daemon-reload
1316 systemctl enable kivitendo-task-server.service</programlisting>
1317
1318           <para>Wenn Sie den Task-Server jetzt sofort starten möchten, anstatt
1319           den Server neu zu starten, so können Sie das mit dem folgenden
1320           Befehl tun:</para>
1321
1322           <programlisting>systemctl start kivitendo-task-server.service</programlisting>
1323         </sect3>
1324       </sect2>
1325
1326       <sect2 id="Prozesskontrolle">
1327         <title>Wie der Task-Server gestartet und beendet wird</title>
1328
1329         <para>Der Task-Server wird wie folgt kontrolliert:</para>
1330
1331         <programlisting>./scripts/task_server.pl Befehl</programlisting>
1332
1333         <para><literal>Befehl</literal> ist dabei eine der folgenden
1334         Optionen:</para>
1335
1336         <itemizedlist>
1337           <listitem>
1338             <para><literal>start</literal> startet eine neue Instanz des
1339             Task-Servers. Die Prozess-ID wird innerhalb des
1340             <filename>users</filename>-Verzeichnisses abgelegt.</para>
1341           </listitem>
1342
1343           <listitem>
1344             <para><literal>stop</literal> beendet einen laufenden
1345             Task-Server.</para>
1346           </listitem>
1347
1348           <listitem>
1349             <para><literal>restart</literal> beendet und startet ihn
1350             neu.</para>
1351           </listitem>
1352
1353           <listitem>
1354             <para><literal>status</literal> berichtet, ob der Task-Server
1355             läuft.</para>
1356           </listitem>
1357         </itemizedlist>
1358
1359         <para>Der Task-Server wechselt beim Starten automatisch in das
1360         kivitendo-Installationsverzeichnis.</para>
1361
1362         <para>Dieselben Optionen können auch für die SystemV-basierenden
1363         Runlevel-Scripte benutzt werden (siehe oben).</para>
1364       </sect2>
1365     </sect1>
1366
1367     <sect1 id="Benutzerauthentifizierung-und-Administratorpasswort">
1368       <title>Benutzerauthentifizierung und Administratorpasswort</title>
1369
1370       <para>Informationen über die Einrichtung der Benutzerauthentifizierung,
1371       über die Verwaltung von Gruppen und weitere Einstellungen</para>
1372
1373       <sect2 id="Grundlagen-zur-Benutzerauthentifizierung">
1374         <title>Grundlagen zur Benutzerauthentifizierung</title>
1375
1376         <para>kivitendo verwaltet die Benutzerinformationen in einer
1377         Datenbank, die im folgenden “Authentifizierungsdatenbank” genannt
1378         wird. Für jeden Benutzer kann dort eine eigene Datenbank für die
1379         eigentlichen Finanzdaten hinterlegt sein. Diese beiden Datenbanken
1380         können, müssen aber nicht unterschiedlich sein.</para>
1381
1382         <para>Im einfachsten Fall gibt es für kivitendo nur eine einzige
1383         Datenbank, in der sowohl die Benutzerinformationen als auch die Daten
1384         abgelegt werden.</para>
1385
1386         <para>Zusätzlich ermöglicht es kivitendo, dass die Benutzerpasswörter
1387         entweder gegen die Authentifizierungsdatenbank oder gegen einen
1388         LDAP-Server überprüft werden.</para>
1389
1390         <para>Welche Art der Passwortüberprüfung kivitendo benutzt und wie
1391         kivitendo die Authentifizierungsdatenbank erreichen kann, wird in der
1392         Konfigurationsdatei <filename>config/kivitendo.conf</filename>
1393         festgelegt. Diese muss bei der Installation und bei einem Upgrade von
1394         einer Version vor v2.6.0 angelegt werden. Eine
1395         Beispielkonfigurationsdatei
1396         <filename>config/kivitendo.conf.default</filename> existiert, die als
1397         Vorlage benutzt werden kann.</para>
1398       </sect2>
1399
1400       <sect2 id="Administratorpasswort">
1401         <title>Administratorpasswort</title>
1402
1403         <para>Das Passwort, das zum Zugriff auf das Administrationsinterface
1404         von kivitendo benutzt wird, wird ebenfalls in dieser Datei
1405         gespeichert. Es kann auch nur dort und nicht mehr im
1406         Administrationsinterface selber geändert werden. Der Parameter dazu
1407         heißt <varname>admin_password</varname> im Abschnitt
1408         <varname>[authentication]</varname>.</para>
1409       </sect2>
1410
1411       <sect2 id="Authentifizierungsdatenbank">
1412         <title>Authentifizierungsdatenbank</title>
1413
1414         <para>Die Verbindung zur Authentifizierungsdatenbank wird mit den
1415         Parametern in <varname>[authentication/database]</varname>
1416         konfiguriert. Hier sind die folgenden Parameter anzugeben:</para>
1417
1418         <variablelist>
1419           <varlistentry>
1420             <term><literal>host</literal></term>
1421
1422             <listitem>
1423               <para>Der Rechnername oder die IP-Adresse des
1424               Datenbankservers</para>
1425             </listitem>
1426           </varlistentry>
1427
1428           <varlistentry>
1429             <term><literal>port</literal></term>
1430
1431             <listitem>
1432               <para>Die Portnummer des Datenbankservers, meist 5432</para>
1433             </listitem>
1434           </varlistentry>
1435
1436           <varlistentry>
1437             <term><literal>db</literal></term>
1438
1439             <listitem>
1440               <para>Der Name der Authentifizierungsdatenbank</para>
1441             </listitem>
1442           </varlistentry>
1443
1444           <varlistentry>
1445             <term><literal>user</literal></term>
1446
1447             <listitem>
1448               <para>Der Benutzername, mit dem sich kivitendo beim
1449               Datenbankserver anmeldet (z.B.
1450               "<literal>postgres</literal>")</para>
1451             </listitem>
1452           </varlistentry>
1453
1454           <varlistentry>
1455             <term><literal>password</literal></term>
1456
1457             <listitem>
1458               <para>Das Passwort für den Datenbankbenutzer</para>
1459             </listitem>
1460           </varlistentry>
1461         </variablelist>
1462
1463         <para>Die Datenbank muss noch nicht existieren. kivitendo kann sie
1464         automatisch anlegen (mehr dazu siehe unten).</para>
1465       </sect2>
1466
1467       <sect2 id="Passwortüberprüfung">
1468         <title>Passwortüberprüfung</title>
1469
1470         <para>kivitendo unterstützt Passwortüberprüfung auf zwei Arten: gegen
1471         die Authentifizierungsdatenbank und gegen einen externen LDAP- oder
1472         Active-Directory-Server. Welche davon benutzt wird, regelt der
1473         Parameter <varname>module</varname> im Abschnitt
1474         <varname>[authentication]</varname>.</para>
1475
1476         <para>Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank
1477         gespeichert werden, so muss der Parameter <varname>module</varname>
1478         den Wert <literal>DB</literal> enthalten. In diesem Fall können sowohl
1479         der Administrator als auch die Benutzer selber ihre Passwörter in
1480         kivitendo ändern.</para>
1481
1482         <para>Soll hingegen ein externer LDAP- oder Active-Directory-Server
1483         benutzt werden, so muss der Parameter <varname>module</varname> auf
1484         <literal>LDAP</literal> gesetzt werden. In diesem Fall müssen
1485         zusätzliche Informationen über den LDAP-Server im Abschnitt
1486         <literal>[authentication/ldap]</literal> angegeben werden:</para>
1487
1488         <variablelist>
1489           <varlistentry>
1490             <term><literal>host</literal></term>
1491
1492             <listitem>
1493               <para>Der Rechnername oder die IP-Adresse des LDAP- oder
1494               Active-Directory-Servers. Diese Angabe ist zwingend
1495               erforderlich.</para>
1496             </listitem>
1497           </varlistentry>
1498
1499           <varlistentry>
1500             <term><literal>port</literal></term>
1501
1502             <listitem>
1503               <para>Die Portnummer des LDAP-Servers; meist 389.</para>
1504             </listitem>
1505           </varlistentry>
1506
1507           <varlistentry>
1508             <term><literal>tls</literal></term>
1509
1510             <listitem>
1511               <para>Wenn Verbindungsverschlüsselung gewünscht ist, so diesen
1512               Wert auf ‘<literal>1</literal>’ setzen, andernfalls auf
1513               ‘<literal>0</literal>’ belassen</para>
1514             </listitem>
1515           </varlistentry>
1516
1517           <varlistentry>
1518             <term><literal>attribute</literal></term>
1519
1520             <listitem>
1521               <para>Das LDAP-Attribut, in dem der Benutzername steht, den der
1522               Benutzer eingegeben hat. Für Active-Directory-Server ist dies
1523               meist ‘<literal>sAMAccountName</literal>’, für andere
1524               LDAP-Server hingegen ‘<literal>uid</literal>’. Diese Angabe ist
1525               zwingend erforderlich.</para>
1526             </listitem>
1527           </varlistentry>
1528
1529           <varlistentry>
1530             <term><literal>base_dn</literal></term>
1531
1532             <listitem>
1533               <para>Der Abschnitt des LDAP-Baumes, der durchsucht werden soll.
1534               Diese Angabe ist zwingend erforderlich.</para>
1535             </listitem>
1536           </varlistentry>
1537
1538           <varlistentry>
1539             <term><literal>filter</literal></term>
1540
1541             <listitem>
1542               <para>Ein optionaler LDAP-Filter. Enthält dieser Filter das Wort
1543               <literal>&lt;%login%&gt;</literal>, so wird dieses durch den vom
1544               Benutzer eingegebenen Benutzernamen ersetzt. Andernfalls wird
1545               der LDAP-Baum nach einem Element durchsucht, bei dem das oben
1546               angegebene Attribut mit dem Benutzernamen identisch ist.</para>
1547             </listitem>
1548           </varlistentry>
1549
1550           <varlistentry>
1551             <term><literal>bind_dn</literal> und
1552             <literal>bind_password</literal></term>
1553
1554             <listitem>
1555               <para>Wenn der LDAP-Server eine Anmeldung erfordert, bevor er
1556               durchsucht werden kann (z.B. ist dies bei
1557               Active-Directory-Servern der Fall), so kann diese hier angegeben
1558               werden. Für Active-Directory-Server kann als
1559               ‘<literal>bind_dn</literal>’ entweder eine komplette LDAP-DN wie
1560               z.B. ‘<literal>cn=Martin
1561               Mustermann,cn=Users,dc=firmendomain</literal>’ auch nur der
1562               volle Name des Benutzers eingegeben werden; in diesem Beispiel
1563               also ‘<literal>Martin Mustermann</literal>’.</para>
1564             </listitem>
1565           </varlistentry>
1566         </variablelist>
1567       </sect2>
1568
1569       <sect2 id="Name-des-Session-Cookies">
1570         <title>Name des Session-Cookies</title>
1571
1572         <para>Sollen auf einem Server mehrere kivitendo-Installationen
1573         aufgesetzt werden, so müssen die Namen der Session-Cookies für alle
1574         Installationen unterschiedlich sein. Der Name des Cookies wird mit dem
1575         Parameter <varname>cookie_name</varname> im Abschnitt
1576         <varname>[authentication]</varname>gesetzt.</para>
1577
1578         <para>Diese Angabe ist optional, wenn nur eine Installation auf dem
1579         Server existiert.</para>
1580       </sect2>
1581
1582       <sect2 id="Anlegen-der-Authentifizierungsdatenbank">
1583         <title>Anlegen der Authentifizierungsdatenbank</title>
1584
1585         <para>Nachdem alle Einstellungen in
1586         <filename>config/kivitendo.conf</filename> vorgenommen wurden, muss
1587         kivitendo die Authentifizierungsdatenbank anlegen. Dieses geschieht
1588         automatisch, wenn Sie sich im Administrationsmodul anmelden, das unter
1589         der folgenden URL erreichbar sein sollte:</para>
1590
1591         <para><ulink
1592         url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
1593       </sect2>
1594     </sect1>
1595
1596     <sect1 id="Benutzer--und-Gruppenverwaltung">
1597       <title>Mandanten-, Benutzer- und Gruppenverwaltung</title>
1598
1599       <para>Nach der Installation müssen Mandanten, Benutzer, Gruppen und
1600       Datenbanken angelegt werden. Dieses geschieht im Administrationsmenü,
1601       das Sie unter folgender URL finden:</para>
1602
1603       <para><ulink
1604       url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
1605
1606       <para>Verwenden Sie zur Anmeldung das Passwort, das Sie in der Datei
1607       <filename>config/kivitendo.conf</filename> eingetragen haben.</para>
1608
1609       <sect2 id="Zusammenhänge">
1610         <title>Zusammenhänge</title>
1611
1612         <para>kivitendo verwaltet zwei Sets von Daten, die je nach Einrichtung
1613         in einer oder zwei Datenbanken gespeichert werden.</para>
1614
1615         <para>Das erste Set besteht aus Anmeldeinformationen: welche Benutzer
1616         und Mandanten gibt es, welche Gruppen, welche BenutzerIn hat Zugriff
1617         auf welche Mandanten, und welche Gruppe verfügt über welche Rechte.
1618         Diese Informationen werden in der Authentifizierungsdatenbank
1619         gespeichert. Dies ist diejenige Datenbank, deren Verbindungsparameter
1620         in der Konfigurationsdatei <filename>config/kivitendo.conf</filename>
1621         gespeichert werden.</para>
1622
1623         <para>Das zweite Set besteht aus den eigentlichen Verkehrsdaten eines
1624         Mandanten, wie beispielsweise die Stammdaten (Kunden, Lieferanten,
1625         Waren) und Belege (Angebote, Lieferscheine, Rechnungen). Diese werden
1626         in einer Mandantendatenbank gespeichert. Die Verbindungsinformationen
1627         einer solchen Mandantendatenbank werden im Administrationsbereich
1628         konfiguriert, indem man einen Mandanten anlegt und dort die Parameter
1629         einträgt. Dabei hat jeder Mandant eine eigene Datenbank.</para>
1630
1631         <para>Aufgrund des Datenbankdesigns ist es für einfache Fälle möglich,
1632         die Authentifizierungsdatenbank und eine der Mandantendatenbanken in
1633         ein und derselben Datenbank zu speichern. Arbeitet man hingegen mit
1634         mehr als einem Mandanten, wird empfohlen, für die
1635         Authentifizierungsdatenbank eine eigene Datenbank zu verwenden, die
1636         nicht gleichzeitig für einen Mandanten verwendet wird.</para>
1637       </sect2>
1638
1639       <sect2 id="Mandanten-Benutzer-Gruppen">
1640         <title>Mandanten, Benutzer und Gruppen</title>
1641
1642         <para>kivitendos Administration kennt Mandanten, Benutzer und Gruppen,
1643         die sich frei zueinander zuordnen lassen.</para>
1644
1645         <para>kivitendo kann mehrere Mandaten aus einer Installation heraus
1646         verwalten. Welcher Mandant benutzt wird, kann direkt beim Login
1647         ausgewählt werden. Für jeden Mandanten wird ein eindeutiger Name
1648         vergeben, der beim Login angezeigt wird. Weiterhin benötigt der
1649         Mandant Datenbankverbindungsparameter für seine Mandantendatenbank.
1650         Diese sollte über die <link
1651         linkend="Datenbanken-anlegen">Datenbankverwaltung</link>
1652         geschehen.</para>
1653
1654         <para>Ein Benutzer ist eine Person, die Zugriff auf kivitendo erhalten
1655         soll. Sie erhält einen Loginnamen sowie ein Passwort. Weiterhin legt
1656         der Administrator fest, an welchen Mandanten sich ein Benutzer
1657         anmelden kann, was beim Login verifiziert wird.</para>
1658
1659         <para>Gruppen dienen dazu, Benutzern innerhalb eines Mandanten Zugriff
1660         auf bestimmte Funktionen zu geben. Einer Gruppe werden dafür vom
1661         Administrator gewisse Rechte zugeordnet. Weiterhin legt der
1662         Administrator fest, für welche Mandanten eine Gruppe gilt, und welche
1663         Benutzer Mitglieder in dieser Gruppe sind. Meldet sich ein Benutzer
1664         dann an einem Mandanten an, so erhält er alle Rechte von allen
1665         denjenigen Gruppen, die zum Einen dem Mandanten zugeordnet sind und in
1666         denen der Benutzer zum Anderen Mitglied ist,</para>
1667
1668         <para>Die Reihenfolge, in der Datenbanken, Mandanten, Gruppen und
1669         Benutzer angelegt werden, kann im Prinzip beliebig gewählt werden. Die
1670         folgende Reihenfolge beinhaltet die wenigsten Arbeitsschritte:</para>
1671
1672         <orderedlist numeration="arabic">
1673           <listitem>
1674             <para>Datenbank anlegen</para>
1675           </listitem>
1676
1677           <listitem>
1678             <para>Gruppen anlegen</para>
1679           </listitem>
1680
1681           <listitem>
1682             <para>Benutzer anlegen und Gruppen als Mitglied zuordnen</para>
1683           </listitem>
1684
1685           <listitem>
1686             <para>Mandanten anlegen und Gruppen sowie Benutzer zuweisen</para>
1687           </listitem>
1688         </orderedlist>
1689       </sect2>
1690
1691       <sect2 id="Datenbanken-anlegen">
1692         <title>Datenbanken anlegen</title>
1693
1694         <para>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
1695         den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
1696         Beispielen ist dies ‘<literal>kivitendo</literal>’).</para>
1697       </sect2>
1698
1699       <sect2 id="Gruppen-anlegen">
1700         <title>Gruppen anlegen</title>
1701
1702         <para>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein
1703         Name gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
1704         Anlegen können Sie die verschiedenen Bereiche wählen, auf die
1705         Mitglieder dieser Gruppe Zugriff haben sollen.</para>
1706
1707         <para>Benutzergruppen werden zwar in der Authentifizierungsdatenbank
1708         gespeichert, gelten aber nicht automatisch für alle Mandanten. Der
1709         Administrator legt vielmehr fest, für welche Mandanten eine Gruppe
1710         gültig ist. Dies kann entweder beim Bearbeiten der Gruppe geschehen
1711         ("diese Gruppe ist gültig für Mandanten X, Y und Z"), oder aber wenn
1712         man einen Mandanten bearbeitet ("für diesen Mandanten sind die Gruppen
1713         A, B und C gültig").</para>
1714
1715         <para>Wurden bereits Benutzer angelegt, so können hier die Mitglieder
1716         dieser Gruppe festgelegt werden ("in dieser Gruppe sind die Benutzer
1717         X, Y und Z Mitglieder"). Dies kann auch nachträglich beim Bearbeiten
1718         eines Benutzers geschehen ("dieser Benutzer ist Mitglied in den
1719         Gruppen A, B und C").</para>
1720       </sect2>
1721
1722       <sect2 id="Benutzer-anlegen">
1723         <title>Benutzer anlegen</title>
1724
1725         <para>Beim Anlegen von Benutzern werden für viele Parameter
1726         Standardeinstellungen vorgenommen, die den Gepflogenheiten des
1727         deutschen Raumes entsprechen.</para>
1728
1729         <para>Zwingend anzugeben ist der Loginname. Wenn die
1730         Passwortauthentifizierung über die Datenbank eingestellt ist, so kann
1731         hier auch das Benutzerpasswort gesetzt bzw. geändert werden. Ist
1732         hingegen die LDAP-Authentifizierung aktiv, so ist das Passwort-Feld
1733         deaktiviert.</para>
1734
1735         <para>Hat man bereits Mandanten und Gruppen angelegt, so kann hier
1736         auch konfiguriert werden, auf welche Mandanten der Benutzer Zugriff
1737         hat bzw. in welchen Gruppen er Mitglied ist. Beide Zuweisungen können
1738         sowohl beim Benutzer vorgenommen werden ("dieser Benutzer hat Zugriff
1739         auf Mandanten X, Y, Z" bzw. "dieser Benutzer ist Mitglied in Gruppen
1740         X, Y und Z") als auch beim Mandanten ("auf diesen Mandanten haben
1741         Benutzer A, B und C Zugriff") bzw. bei der Gruppe ("in dieser Gruppe
1742         sind Benutzer A, B und C Mitglieder").</para>
1743       </sect2>
1744
1745       <sect2 id="Mandanten-anlegen">
1746         <title>Mandanten anlegen</title>
1747
1748         <para>Ein Mandant besteht aus Administrationssicht primär aus einem
1749         eindeutigen Namen. Weiterhin wird hier hinterlegt, welche Datenbank
1750         als Mandantendatenbank benutzt wird. Hier müssen die Zugriffsdaten
1751         einer der eben angelegten Datenbanken eingetragen werden.</para>
1752
1753         <para>Hat man bereits Benutzer und Gruppen angelegt, so kann hier auch
1754         konfiguriert werden, welche Benutzer Zugriff auf den Mandanten haben
1755         bzw. welche Gruppen für den Mandanten gültig sind. Beide Zuweisungen
1756         können sowohl beim Mandanten vorgenommen werden ("auf diesen Mandanten
1757         haben Benutzer X, Y und Z Zugriff" bzw. "für diesen Mandanten sind die
1758         Gruppen X, Y und Z gültig") als auch beim Benutzer ("dieser Benutzer
1759         hat Zugriff auf Mandanten A, B und C") bzw. bei der Gruppe ("diese
1760         Gruppe ist für Mandanten A, B und C gültig").</para>
1761       </sect2>
1762     </sect1>
1763
1764     <sect1 id="Drucker--Systemverwaltung">
1765       <title>Drucker- und Systemverwaltung</title>
1766
1767       <para>Im Administrationsmenü gibt es ferner noch die beiden Menüpunkte
1768       Druckeradministration und System.</para>
1769
1770       <sect2 id="Druckeradministration">
1771         <title>Druckeradministration</title>
1772
1773         <para>Unter dem Menüpunkt Druckeradministration lassen sich beliebig
1774         viele "Druckbefehle" im System verwalten. Diese Befehle werden
1775         mandantenweise zugeordnet. Unter Druckerbeschreibung wird der Namen
1776         des Druckbefehls festgelegt, der dann in der Druckerauswahl des Belegs
1777         angezeigt wird.</para>
1778
1779         <para>Unter Druckbefehl definiert man den eigentlichen Druckbefehl,
1780         der direkt auf dem Webserver ausgeführt wird, bspw. 'lpr -P
1781         meinDrucker' oder ein kompletter Pfad zu einem Skript
1782         (/usr/local/src/kivitendo/scripts/pdf_druck_in_verzeichnis.sh). Wird
1783         ferner noch ein optionales Vorlagenkürzel verwendet, wird dieses
1784         Kürzel bei der Auswahl der Druckvorlagendatei mit einem Unterstrich
1785         ergänzt, ist bspw. das Kürzel 'epson_drucker' definiert, so wird beim
1786         Ausdruck eines Angebots folgende Vorlage geparst:
1787         sales_quotation_epson_drucker.tex.</para>
1788       </sect2>
1789
1790       <sect2 id="System">
1791         <title>System sperren / entsperren</title>
1792
1793         <para>Unter dem Menüpunkt System gibt es den Eintrag 'Installation
1794         sperren/entsperren'. Setzt man diese Sperre so ist der Zugang zu der
1795         gesamten kivitendo Installation gesperrt.</para>
1796
1797         <para>Falls die Sperre gesetzt ist, erscheint anstelle der
1798         Anmeldemaske die Information: 'kivitendo ist momentan zwecks
1799         Wartungsarbeiten nicht zugänglich.'.</para>
1800
1801         <para>Wichtig zu erwähnen ist hierbei noch, dass sich kivitendo
1802         automatisch 'sperrt', falls es bei einem Versionsupdate zu einem
1803         Datenbankfehler kam. Somit kann hier nicht aus Versehen mit einem
1804         inkonsistenten Datenbestand weitergearbeitet werden.</para>
1805       </sect2>
1806     </sect1>
1807
1808     <sect1 id="config.sending-email"
1809            xreflabel="E-Mail-Versand aus kivitendo heraus">
1810       <title>E-Mail-Versand aus kivitendo heraus</title>
1811
1812       <para>kivitendo kann direkt aus dem Programm heraus E-Mails versenden,
1813       z.B. um ein Angebot direkt an einen Kunden zu verschicken. Damit dies
1814       funktioniert, muss eingestellt werden, über welchen Server die E-Mails
1815       verschickt werden sollen. kivitendo unterstützt dabei zwei Mechanismen:
1816       Versand über einen lokalen E-Mail-Server (z.B. mit
1817       <productname>Postfix</productname> oder <productname>Exim</productname>,
1818       was auch die standardmäßig aktive Methode ist) sowie Versand über einen
1819       SMTP-Server (z.B. der des eigenen Internet-Providers).</para>
1820
1821       <para>Welche Methode und welcher Server verwendet werden, wird über die
1822       Konfigurationsdatei <filename>config/kivitendo.conf</filename>
1823       festgelegt. Dort befinden sich alle Einstellungen zu diesem Thema im
1824       Abschnitt '<literal>[mail_delivery]</literal>'.</para>
1825
1826       <sect2 id="config.sending-email.sendmail"
1827              xreflabel="E-Mail-Versand über lokalen E-Mail-Server">
1828         <title>Versand über lokalen E-Mail-Server</title>
1829
1830         <para>Diese Methode bietet sich an, wenn auf dem Server, auf dem
1831         kivitendo läuft, bereits ein funktionsfähiger E-Mail-Server wie z.B.
1832         <productname>Postfix</productname>, <productname>Exim</productname>
1833         oder <productname>Sendmail</productname> läuft.</para>
1834
1835         <para>Um diese Methode auszuwählen, muss der Konfigurationsparameter
1836         '<literal>method = sendmail</literal>' gesetzt sein. Dies ist
1837         gleichzeitig der Standardwert, falls er nicht verändert wird.</para>
1838
1839         <para>Um zu kontrollieren, wie das Programm zum Einliefern gestartet
1840         wird, dient der Parameter '<literal>sendmail = ...</literal>'. Der
1841         Standardwert verweist auf das Programm
1842         <filename>/usr/bin/sendmail</filename>, das bei allen oben genannten
1843         E-Mail-Serverprodukten für diesen Zweck funktionieren sollte.</para>
1844
1845         <para>Die Konfiguration des E-Mail-Servers selber würde den Rahmen
1846         dieses sprengen. Hierfür sei auf die Dokumentation des E-Mail-Servers
1847         verwiesen.</para>
1848       </sect2>
1849
1850       <sect2 id="config.sending-email.smtp"
1851              xreflabel="E-Mail-Versand über einen SMTP-Server">
1852         <title>Versand über einen SMTP-Server</title>
1853
1854         <para>Diese Methode bietet sich an, wenn kein lokaler E-Mail-Server
1855         vorhanden oder zwar einer vorhanden, dieser aber nicht konfiguriert
1856         ist.</para>
1857
1858         <para>Um diese Methode auszuwählen, muss der Konfigurationsparameter
1859         '<literal>method = smtp</literal>' gesetzt sein. Die folgenden
1860         Parameter dienen dabei der weiteren Konfiguration:</para>
1861
1862         <variablelist>
1863           <varlistentry>
1864             <term><varname>hostname</varname></term>
1865
1866             <listitem>
1867               <para>Name oder IP-Adresse des SMTP-Servers. Standardwert:
1868               '<literal>localhost</literal>'</para>
1869             </listitem>
1870           </varlistentry>
1871
1872           <varlistentry>
1873             <term><varname>port</varname></term>
1874
1875             <listitem>
1876               <para>Portnummer. Der Standardwert hängt von der verwendeten
1877               Verschlüsselungsmethode ab. Gilt '<literal>security =
1878               none</literal>' oder '<literal>security = tls</literal>', so ist
1879               25 die Standardportnummer. Für '<literal>security =
1880               ssl</literal>' ist 465 die Portnummer. Muss normalerweise nicht
1881               geändert werden.</para>
1882             </listitem>
1883           </varlistentry>
1884
1885           <varlistentry>
1886             <term><varname>security</varname></term>
1887
1888             <listitem>
1889               <para>Wahl der zu verwendenden Verschlüsselung der Verbindung
1890               mit dem Server. Standardwert ist '<literal>none</literal>',
1891               wodurch keine Verschlüsselung verwendet wird. Mit
1892               '<literal>tls</literal>' wird TLS-Verschlüsselung eingeschaltet,
1893               und mit '<literal>ssl</literal>' wird Verschlüsselung via SSL
1894               eingeschaltet. Achtung: Für '<literal>tls</literal>' und
1895               '<literal>ssl</literal>' werden zusätzliche Perl-Module benötigt
1896               (siehe unten).</para>
1897             </listitem>
1898           </varlistentry>
1899
1900           <varlistentry>
1901             <term><varname>login</varname> und
1902             <varname>password</varname></term>
1903
1904             <listitem>
1905               <para>Falls der E-Mail-Server eine Authentifizierung verlangt,
1906               so können mit diesen zwei Parametern der Benutzername und das
1907               Passwort angegeben werden. Wird Authentifizierung verwendet, so
1908               sollte aus Sicherheitsgründen auch eine Form von Verschlüsselung
1909               aktiviert werden.</para>
1910             </listitem>
1911           </varlistentry>
1912         </variablelist>
1913       </sect2>
1914     </sect1>
1915
1916     <sect1 id="Drucken-mit-kivitendo">
1917       <title>Drucken mit kivitendo</title>
1918
1919       <para>Das Drucksystem von kivitendo benutzt von Haus aus LaTeX-Vorlagen.
1920       Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
1921       einfachsten ist dazu eine <literal>texlive</literal> Installation. Unter
1922       debianoiden Betriebssystemen installiert man die Pakete mit:</para>
1923
1924       <para><programlisting>apt install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \
1925   texlive-latex-extra texlive-lang-german texlive-generic-extra texlive-xetex </programlisting></para>
1926
1927       <para>Für Fedora benötigen Sie die folgenden Pakete:</para>
1928
1929       <para><programlisting>dnf install texlive-collection-latex texlive-collection-latexextra \
1930   texlive-collection-latexrecommended texlive-collection-langgerman \
1931   texlive-collection-langenglish</programlisting></para>
1932
1933       <para>Für openSUSE benötigen Sie die folgenden Pakete:</para>
1934
1935       <para><programlisting>zypper install texlive-collection-latex texlive-collection-latexextra \
1936   texlive-collection-latexrecommended texlive-collection-langgerman \
1937   texlive-collection-langenglish</programlisting></para>
1938
1939       <para>kivitendo bringt drei alternative Vorlagensätze mit:</para>
1940
1941       <itemizedlist>
1942         <listitem>
1943           <para>RB</para>
1944         </listitem>
1945
1946         <listitem>
1947           <para>f-tex</para>
1948         </listitem>
1949
1950         <listitem>
1951           <para>rev-odt</para>
1952         </listitem>
1953       </itemizedlist>
1954
1955       <para>Der ehemalige Druckvorlagensatz "Standard" wurde mit der Version
1956       3.3 entfernt, da er nicht mehr gepflegt wurde.</para>
1957
1958       <sect2 id="Vorlagenverzeichnis-anlegen"
1959              xreflabel="Vorlagenverzeichnis anlegen">
1960         <title>Vorlagenverzeichnis anlegen</title>
1961
1962         <para>Es lässt sich ein initialer Vorlagensatz erstellen. Die
1963         LaTeX-System-Abhängigkeiten hierfür kann man prüfen mit:</para>
1964
1965         <programlisting>./scripts/installation_check.pl -lv</programlisting>
1966
1967         <para>Der Angemeldete Benutzer muss in einer Gruppe sein, die über das
1968         Recht "Konfiguration -&gt; Mandantenverwaltung" verfügt. Siehe auch
1969         <xref linkend="Gruppen-anlegen"/>.</para>
1970
1971         <para>Im Userbereich lässt sich unter: "<guimenu>System</guimenu>
1972         -&gt; <guisubmenu>Mandantenverwaltung</guisubmenu> -&gt;
1973         <guimenuitem>Verschiedenes</guimenuitem>" die Option "Neue
1974         Druckvorlagen aus Vorlagensatz erstellen" auswählen.</para>
1975
1976         <orderedlist>
1977           <listitem>
1978             <para><option>Vorlagen auswählen</option>: Wählen Sie hier den
1979             Vorlagensatz aus, der kopiert werden soll
1980             (<filename>RB</filename>, <filename>f-tex</filename> oder
1981             <filename>odt-rev</filename>.)</para>
1982           </listitem>
1983
1984           <listitem>
1985             <para><option>Neuer Name</option>: Der Verzeichnisname für den
1986             neuen Vorlagensatz. Dieser kann im Rahmen der üblichen Bedingungen
1987             für Verzeichnisnamen frei gewählt werden.</para>
1988           </listitem>
1989         </orderedlist>
1990
1991         <para>Nach dem Speichern wird das Vorlagenverzeichnis angelegt und ist
1992         für den aktuellen Mandanten ausgewählt. Der gleiche Vorlagensatz kann,
1993         wenn er mal angelegt ist, bei mehreren Mandanten verwendet werden.
1994         Eventuell müssen Anpassungen (Logo, Erscheinungsbild, etc) noch
1995         vorgenommen werden. Den Ordner findet man im Dateisystem unter
1996         <filename>./templates/[Neuer Name]</filename></para>
1997       </sect2>
1998
1999       <sect2 id="Vorlagen-RB">
2000         <title>Der Druckvorlagensatz RB</title>
2001
2002         <para>Hierbei handelt es sich um einen vollständigen LaTeX
2003         Dokumentensatz mit alternativem Design. Die odt oder html-Varianten
2004         sind nicht gepflegt.</para>
2005
2006         <para>Die konzeptionelle Idee der Vorlagen wird <ulink
2007         url="http://www.kivitendo-support.de/vortraege/Lx-Office%20Anwendertreffen%20LaTeX-Druckvorlagen-Teil3-finale.pdf">hier</ulink>
2008         auf Folie 5 bis 10 vorgestellt. Informationen zur Anpassung an die
2009         eigenen Firmendaten finden sich in der Datei Readme.tex im
2010         Vorlagenverzeichnis.</para>
2011
2012         <para>Eine kurze Übersicht der Features:</para>
2013
2014         <itemizedlist>
2015           <listitem>
2016             <para>Mehrsprachenfähig, mit Deutscher und Englischer
2017             Übersetzung</para>
2018           </listitem>
2019
2020           <listitem>
2021             <para>Zentrale Konfigurationsdateien, die für alle Belege benutzt
2022             werden, z.B. für Kopf- und Fußzeilen, und Infos wie
2023             Bankdaten</para>
2024           </listitem>
2025
2026           <listitem>
2027             <para>mehrere vordefinierte Varianten für
2028             Logos/Hintergrundbilder</para>
2029           </listitem>
2030
2031           <listitem>
2032             <para>Berücksichtigung für Steuerzonen "EU mit USt-ID Nummer" oder
2033             "Außerhalb EU"</para>
2034           </listitem>
2035         </itemizedlist>
2036       </sect2>
2037
2038       <sect2 id="f-tex">
2039         <title>f-tex</title>
2040
2041         <para>Ein Vorlagensatz, der in wenigen Minuten alle Dokumente zur
2042         Verfügung stellt.</para>
2043
2044         <sect3 id="f-tex-Feature-Übersicht">
2045           <title>Feature-Übersicht</title>
2046
2047           <itemizedlist>
2048             <listitem>
2049               <para>Keine Redundanz. Es wird ein- und dieselbe LaTeX-Vorlage
2050               für alle briefartigen Dokumente verwendet. Also Angebot,
2051               Rechnung, Proformarechnung, Lieferschein, aber eben nicht für
2052               Paketaufkleber etc.</para>
2053             </listitem>
2054
2055             <listitem>
2056               <para>Leichte Anpassung an das Firmen-Layout durch Verwendung
2057               eines Hintergrund-PDFs. Dieses kann leicht mit dem eigenen
2058               Lieblingsprogramm erstellt werden (Openoffice, Inkscape, Gimp,
2059               Adobe*)</para>
2060             </listitem>
2061
2062             <listitem>
2063               <para>Hintergrund-PDF umschaltbar auf "nur erste Seite"
2064               (Standard) oder "alle Seiten" (Option
2065               "<option>bgPdfFirstPageOnly</option>" in Datei
2066               <filename>letter.lco</filename>)</para>
2067             </listitem>
2068
2069             <listitem>
2070               <para>Hintergrund-PDF für Ausdruck auf bereits bedrucktem
2071               Briefpapier abschaltbar. Es wird dann nur bei per E-Mail
2072               versendeten Dokumenten eingebunden (Option
2073               "<option>bgPdfEmailOnly</option>" in Datei
2074               <filename>letter.lco</filename>).</para>
2075             </listitem>
2076
2077             <listitem>
2078               <para>Nutzung der Layout-Funktionen von LaTeX für Seitenumbruch,
2079               Wiederholung von Kopfzeilen, Zwischensummen etc. (danke an
2080               Kai-Martin Knaak für die Vorarbeit)</para>
2081             </listitem>
2082
2083             <listitem>
2084               <para>Anzeige des Empfängerlandes im Adressfeld nur, wenn es vom
2085               Land des eigenen Unternehmens abweicht (also die Rechnung das
2086               Land verlässt).</para>
2087             </listitem>
2088
2089             <listitem>
2090               <para>Multisprachfähig leicht um weitere Sprachen zu erweitern,
2091               alle Übersetzungen in der Datei
2092               <filename>translatinos.tex</filename>.</para>
2093             </listitem>
2094
2095             <listitem>
2096               <para>Auflistung von Bruttopreisen für Endverbraucher.</para>
2097             </listitem>
2098           </itemizedlist>
2099         </sect3>
2100
2101         <sect3 id="f-tex-Installation">
2102           <title>Die Installation</title>
2103
2104           <itemizedlist>
2105             <listitem>
2106               <para>Vorlagenverzeichnis mit Option f-tex anlegen, siehe: <xref
2107               linkend="Vorlagenverzeichnis-anlegen"/>. Das Vorlagensystem
2108               funktioniert jetzt schon, hat allerdings noch einen
2109               Beispiel-Briefkopf.</para>
2110             </listitem>
2111
2112             <listitem>
2113               <para>Erstelle eine pdf-Hintergrund Datei und verlinke sie nach
2114               <filename>./letter_head.pdf</filename>.</para>
2115             </listitem>
2116
2117             <listitem>
2118               <para>Editiere den Bereich "<option>settings</option>" in der
2119               datei <filename>letter.lco</filename>.</para>
2120             </listitem>
2121           </itemizedlist>
2122
2123           <para>oder etwas detaillierter:</para>
2124
2125           <para>Es wird eine Datei <filename>sample.lco</filename> erstellt
2126           und diese nach <filename>letter.lco</filename> verlinkt. Eigentlich
2127           ist dies die Datei die für die firmenspezifischen Anpassungen
2128           gedacht ist. Da die Einstiegshürde in LaTeX nicht ganz niedrig ist,
2129           wird in dieser Datei auf ein Hintergrund-PDF verwiesen. Ich empfehle
2130           über dieses PDF die persönlichen Layoutanpassungen vorzunehmen und
2131           <filename>sample.lco</filename> unverändert zu lassen. Die Anpassung
2132           über eine <filename>*.lco</filename>-Datei, die letztlich auf
2133           <filename>letter.lco</filename> verlinkt ist ist aber auch
2134           möglich.</para>
2135
2136           <para>Es wird eine Datei <filename>sample_head.pdf</filename> mit
2137           ausgeliefert, diese wird nach <filename>letter_head.pdf</filename>
2138           verlinkt. Damit gibt es schon mal eine funktionsfähige Vorlage.
2139           Schau Dir nach Abschluss der Installation die Datei
2140           <filename>sample_head.pdf</filename> an und erstelle ein
2141           entsprechendes PDF passend zum Briefkopf Deiner Firma, diese dann im
2142           Template Verzeichniss ablegen und statt
2143           <filename>sample_head.pdf</filename> nach
2144           <filename>letter_head.pdf</filename> verlinken.</para>
2145
2146           <para>Letzlich muss <filename>letter_head.pdf</filename> auf das
2147           passende Hintergrund-PDF verweisen, welches gewünschten Briefkopf
2148           enthält.</para>
2149
2150           <para>Es wird eine Datei <filename>mydata.tex.example</filename>
2151           ausgeliefert, die nach <filename>mytdata.tex</filename> verlinkt
2152           ist. Bei verwendetem Hintergrund-PDF wird nur der Eintrag für das
2153           Land verwendet. Die Datei muss also nicht angefasst werden. Die
2154           anderen Werte sind für das Modul 'lp' (Label Print in erp - zur Zeit
2155           nicht im öffentlichen Zweig).</para>
2156
2157           <para>Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.
2158           sollten über die Hintergrund-PDF-Datei oder die
2159           <filename>*.lco</filename>-Datei erfolgen.</para>
2160         </sect3>
2161
2162         <sect3 id="f-tex-Funktionsübersicht">
2163           <title>f-tex Funktionsübersicht</title>
2164
2165           <para>Das Konzept von kivitendo sieht vor, für jedes Dokument
2166           (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine
2167           LaTeX-Vorlage vorzuhalten, dies ist sehr wartungsunfreundlich. Auch
2168           das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur
2169           bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen
2170           aus dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle
2171           briefartigen Dokumente mit Artikel-Tabellen eine einheitliche
2172           LaTeX-Vorlage verwendet, welche über Codeweichen die Besonderheiten
2173           der jeweiligen Dokumente berücksichtigt:</para>
2174
2175           <itemizedlist>
2176             <listitem>
2177               <para>Tabellen mit oder ohne Preis</para>
2178             </listitem>
2179
2180             <listitem>
2181               <para>Sprache der Tabellenüberschriften etc.</para>
2182             </listitem>
2183
2184             <listitem>
2185               <para>Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus
2186               Angebotsnummer)</para>
2187             </listitem>
2188
2189             <listitem>
2190               <para>Darstellung von Brutto oder Netto-Preisen in der
2191               Auflistung (Endverbraucher versus gewerblicher Kunde)</para>
2192             </listitem>
2193           </itemizedlist>
2194
2195           <para>Nachteil:</para>
2196
2197           <para>LaTeX hat ohnehin eine sehr steile Lehrnkurve. Die Datei
2198           <filename>letter.tex</filename> ist sehr komplex und verstärkt damit
2199           diesen Effekt noch einmal erheblich. Wer LaTeX-Erfahrung hat, oder
2200           geübt ist Scriptsparachen nachzuvollziehen kann natürlich auch
2201           innerhalb der Tabellendarstellung gut persönliche Anpassungen
2202           vornehmen. Aber man kann sich hier bei Veränderungen sehr schnell
2203           heftig in den Fuss schiessen.</para>
2204
2205           <para>Wer nicht so tief in die Materie einsteigen will oder leicht
2206           zu frustrieren ist, sollte sein Hintergrund-PDF auf Basis der
2207           mitglieferten Datei <filename>sample_head.pdf</filename> erstellen,
2208           und sich an der Form der dargestellten Tabellen, wie sie
2209           ausgeliefert werden, erfreuen.</para>
2210
2211           <para>Kleiner Tipp: Nicht zu viel auf einmal wollen, lieber kleine,
2212           kontinuierliche Schritte gehen.</para>
2213         </sect3>
2214
2215         <sect3 id="f-tex-Bruttopreise">
2216           <title>Bruttopreise für Endverbraucher</title>
2217
2218           <para>Der auszuweisende Bruttopreis wird innerhalb der
2219           LaTeX-Umgebung berechnet. Es gibt zwar ein Feld, um bei Aufträgen
2220           "alle Preise Brutto" auszuwählen, aber:</para>
2221
2222           <itemizedlist>
2223             <listitem>
2224               <para>hierfür müssen die Preise auch in Brutto in der Datenbank
2225               stehen (ja - das lässt sich über die Preisgruppen und die
2226               Zuordung einer Default-Preisgruppe handhaben)</para>
2227             </listitem>
2228
2229             <listitem>
2230               <para>man darf beim Anlegen des Vorgangs nicht vergessen, dieses
2231               Häkchen zu setzen. (Das ist in der Praxis, wenn man sowohl
2232               Endverbraucher als auch Gewerbekunden beliefert, der eigentliche
2233               Knackpunkt)</para>
2234             </listitem>
2235           </itemizedlist>
2236
2237           <para>Es gibt mit f-tex eine weitere Alternative. Die Information ob
2238           Brutto oder Nettorechnung wird mit den Zahlarten verknüpft.
2239           Zahlarten bei denen Rechnungen, Angebote, etc, in Brutto ausgegeben
2240           werden sollen, enden mit "_E" (für Endverbraucher). Falls identische
2241           Zahlarten für Gewerbekunden und Endverbraucher vorhanden sind, legt
2242           man diese einfach doppelt an (einmal mit der Namensendung "_E").
2243           Gewinn:</para>
2244
2245           <itemizedlist>
2246             <listitem>
2247               <para>Die Entscheidung, ob Nettopreise ausgewiesen werden, ist
2248               nicht mehr fix mit einer Preisliste verbunden.</para>
2249             </listitem>
2250
2251             <listitem>
2252               <para>Die Default-Zahlart kann im Kundendatensatz hinterlegt
2253               werden, und man muss nicht mehr daran denken, "alle Preise
2254               Netto" auszuwählen.</para>
2255             </listitem>
2256
2257             <listitem>
2258               <para>Die Entscheidung, ob Netto- oder Bruttopreise ausgewiesen
2259               werden, kann direkt beim Drucken revidiert werden, ohne dass
2260               sich der Auftragswert ändert.</para>
2261             </listitem>
2262           </itemizedlist>
2263         </sect3>
2264
2265         <sect3 id="f-tex-lieferadressen">
2266           <title>Lieferadressen</title>
2267
2268           <para>In Lieferscheinen kommen <varname>shipto*</varname>-Variablen
2269           im Adressfeld zum Einsatz. Wenn die
2270           <varname>shipto*</varname>-Variable leer ist, wird die entsprechende
2271           Adressvariable eingesetzt. Wenn also die Lieferadresse in Straße,
2272           Hausnummer und Ort abweicht, müssen auch nur diese Felder in der
2273           Lieferadresse ausgefüllt werden. Für den Firmenname wird der Wert
2274           der Hauptadresse angezeigt.</para>
2275         </sect3>
2276       </sect2>
2277
2278       <sect2 id="Vorlagen-rev-odt">
2279         <title>Der Druckvorlagensatz rev-odt</title>
2280
2281         <para>Hierbei handelt es sich um einen Dokumentensatz der mit
2282         odt-Vorlagen erstellt wurde. Es gibt in dem Verzeichnis eine
2283         Readme-Datei, die eventuell aktueller als die Dokumentation hier ist.
2284         Die odt-Vorlagen in diesem Verzeichnis "rev-odt" wurden von revamp-it,
2285         Zürich erstellt und werden laufend aktualisiert. Ein paar der
2286         Formulierungen in den Druckvorlagen entsprechen dem Schweizer
2287         Sprachgebrauch, z.B. "Offerte" oder "allfällig".</para>
2288
2289         <para>Hinweis zum Einsatz des Feldes "Land" bei den Stammdaten für
2290         KundInnen und LieferantInnen, sowie bei Lieferadressen: Die in diesem
2291         Vorlagensatz vorhandenen Vorlagen erwarten für "Land" das
2292         entsprechende Kürzel, das in Adressen vor die Postleitzahl gesetzt
2293         wird. Das Feld kann auch komplett leer bleiben. Wer dies anders
2294         handhaben möchte, muss die Vorlagen entsprechend anpassen.</para>
2295
2296         <para>odt-Vorlagen können mit LibreOffice oder OpenOffice editiert und
2297         den eigenen Bedürfnissen angepasst werden. Wichtig beim Editieren von
2298         if-Blöcken ist, dass immer der gesamte Block überschrieben werden muss
2299         und nicht nur Teile davon, da dies sonst oft zu einer odt-Datei führt,
2300         die vom Parser nicht korrekt gelesen werden kann.</para>
2301
2302         <para>Mahnungen können unter folgenden Einschränkungen mit den
2303         odt-Vorlagen im Vorlagensatz rev-odt erzeugt werden:</para>
2304
2305         <itemizedlist>
2306           <listitem>
2307             <para>als Druckoption steht nur 'PDF(OpenDocument/OASIS)' zur
2308             Verfügung, das heisst, die Mahnungen werden als PDF-Datei
2309             ausgegeben.</para>
2310           </listitem>
2311
2312           <listitem>
2313             <para>für jede Rechnung muss eine eigene Mahnung erzeugt werden
2314             (auch wenn bei einzelnen KundInnen mehrere überfällige Rechnungen
2315             vorhanden sind).</para>
2316           </listitem>
2317         </itemizedlist>
2318
2319         <para>Mehrere Mahnungen für eine Kundin / einen Kunden werden zu einer
2320         PDF-Datei zusammengefasst</para>
2321
2322         <para>Die Vorlagen zahlungserinnerung.odt sowie mahnung.odt sind für
2323         das Erstellen einer Zahlungserinnerung bzw. Mahnung selbst vorgesehen,
2324         die Vorlage mahnung_invoice.odt für das Erstellen einer Rechnung über
2325         die verrechneten Mahngebühren und Verzugszinsen.</para>
2326
2327         <para>Zur Zeit gibt es in kivitendo noch keine Möglichkeit,
2328         odt-Vorlagen bei Briefen und Pflichtenheften einzusetzen.
2329         Entsprechende Vorlagen sind deshalb nicht vorhanden.</para>
2330
2331         <para>Fehlermeldungen, Anregungen und Wünsche bitte senden an:
2332         empfang@revamp-it.ch</para>
2333       </sect2>
2334
2335       <sect2 id="allgemeine-hinweise-zu-latex">
2336         <title>Allgemeine Hinweise zu LaTeX Vorlagen</title>
2337
2338         <para>In den allermeisten Installationen sollte das Drucken jetzt
2339         schon funktionieren. Sollte ein Fehler auftreten, wirft TeX sehr lange
2340         Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste
2341         Zeile, die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler
2342         sind zum Beispiel:</para>
2343
2344         <itemizedlist>
2345           <listitem>
2346             <para>! LaTeX Error: File `eurosym.sty' not found. Die
2347             entsprechende LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor
2348             allem bei Vorlagen aus der Community auf. Installieren Sie die
2349             entsprechenden Pakete.</para>
2350           </listitem>
2351
2352           <listitem>
2353             <para>! Package inputenc Error: Unicode char \u8:... set up for
2354             use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
2355             einer Standardinstallation exotische utf8 Zeichen zu drucken.
2356             TeXLive unterstützt von Haus nur romanische Schriften und muss mit
2357             diversen Tricks dazu gebracht werden andere Zeichen zu
2358             akzeptieren. Adere TeX Systeme wie XeTeX schaffen hier
2359             Abhilfe.</para>
2360           </listitem>
2361         </itemizedlist>
2362
2363         <para>Wird gar kein Fehler angezeigt, sondern nur der Name des
2364         Templates, heißt das normalerweise, dass das LaTeX Binary nicht
2365         gefunden wurde. Prüfen Sie den Namen in der Konfiguration (Standard:
2366         <literal>pdflatex</literal>), und stellen Sie sicher, dass pdflatex
2367         (oder das von Ihnen verwendete System) vom Webserver ausgeführt werden
2368         darf.</para>
2369
2370         <para>Wenn sich das Problem nicht auf Grund der Ausgabe im Webbrowser
2371         verifizieren lässt:</para>
2372
2373         <itemizedlist>
2374           <listitem>
2375             <para>editiere [kivitendo-home]/config/kivitendo.conf und ändere
2376             "keep_temp_files" auf 1</para>
2377
2378             <para><programlisting>keep_temp_files = 1;</programlisting></para>
2379           </listitem>
2380
2381           <listitem>
2382             <para>bei fastcgi oder mod_perl den Webserver neu Starten</para>
2383           </listitem>
2384
2385           <listitem>
2386             <para>Nochmal einen Druckversuch im Webfrontend auslösen</para>
2387           </listitem>
2388
2389           <listitem>
2390             <para>wechsel in das users Verzeichnis von kivitendo</para>
2391
2392             <para><programlisting>cd [kivitendo-home]/users</programlisting></para>
2393           </listitem>
2394
2395           <listitem>
2396             <para>LaTeX Suchpfad anpassen:</para>
2397
2398             <para><programlisting>export TEXINPUTS=".:[kivitendo-home]/templates/[aktuelles_template_verzeichniss]:"</programlisting></para>
2399           </listitem>
2400
2401           <listitem>
2402             <para>Finde heraus, welche Datei kivitendo beim letzten Durchlauf
2403             erstellt hat</para>
2404
2405             <para><programlisting>ls -lahtr ./1*.tex</programlisting></para>
2406
2407             <para>Es sollte die letzte Datei ganz unten sein</para>
2408           </listitem>
2409
2410           <listitem>
2411             <para>für besseren Hinweis auf Fehler texdatei nochmals
2412             übersetzen</para>
2413
2414             <para><programlisting>pdflatex ./1*.tex</programlisting></para>
2415
2416             <para>in der *.tex datei nach dem Fehler suchen.</para>
2417           </listitem>
2418         </itemizedlist>
2419       </sect2>
2420     </sect1>
2421
2422     <sect1 id="OpenDocument-Vorlagen">
2423       <title>OpenDocument-Vorlagen</title>
2424
2425       <para>kivitendo unterstützt die Verwendung von Vorlagen im
2426       OpenDocument-Format, wie es LibreOffice oder OpenOffice (ab Version 2)
2427       erzeugen. kivitendo kann dabei sowohl neue OpenDocument-Dokumente als
2428       auch aus diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
2429       OpenDocument-Vorlagen zu aktivieren muss in der Datei
2430       <filename>config/kivitendo.conf</filename> die Variable
2431       <literal>opendocument</literal> im Abschnitt
2432       <literal>print_templates</literal> auf ‘<literal>1</literal>’ stehen.
2433       Dieses ist die Standardeinstellung.</para>
2434
2435       <para>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
2436       weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
2437       LibreOffice oder OpenOffice benötigt. Soll dieses Feature genutzt
2438       werden, so muss neben LibreOffice oder OpenOffice auch der “X virtual
2439       frame buffer” (xvfb) installiert werden. Bei Debian ist er im Paket
2440       “xvfb” enthalten. Andere Distributionen enthalten ihn in anderen
2441       Paketen.</para>
2442
2443       <para>Nach der Installation müssen in der Datei
2444       <filename>config/kivitendo.conf</filename> im Abschnitt
2445       <literal>applications</literal> zwei weitere Variablen angepasst
2446       werden:</para>
2447
2448       <para><literal>openofficeorg_writer</literal> muss den vollständigen
2449       Pfad zu LibreOffice oder OpenOffice enthalten. Dabei dürfen keine
2450       Anführungszeichen eingesetzt werden.</para>
2451
2452       <para>Beispiel für Debian oder Ubuntu:</para>
2453
2454       <programlisting>openofficeorg_writer = /usr/bin/libreoffice</programlisting>
2455
2456       <para><literal>xvfb</literal> muss den Pfad zum “X virtual frame buffer”
2457       enthalten.</para>
2458
2459       <para>Zusätzlich gibt es zwei verschiedene Arten, wie kivitendo mit
2460       LibreOffice bzw. OpenOffice kommuniziert. Die erste Variante, die
2461       benutzt wird, wenn die Variable <literal>$openofficeorg_daemon</literal>
2462       gesetzt ist, startet ein LibreOffice oder OpenOffice, das auch nach der
2463       Umwandlung des Dokumentes gestartet bleibt. Bei weiteren Umwandlungen
2464       wird dann diese laufende Instanz benutzt. Der Vorteil ist, dass die Zeit
2465       zur Umwandlung deutlich reduziert wird, weil nicht für jedes Dokument
2466       ein LibreOffice bzw. OpenOffice gestartet werden muss. Der Nachteil ist,
2467       dass diese Methode Python und die Python-UNO-Bindings benötigt, die
2468       Bestandteil von LibreOffice bzw. OpenOffice sind.</para>
2469
2470       <note>
2471         <para>Für die Verbindung zu LibreOffice bzw. OpenOffice wird
2472         normalerweise der Python-Interpreter
2473         <filename>/usr/bin/python</filename> benutzt. Sollte dies nicht der
2474         richtige sein, so kann man mit zwei Konfigurationsvariablen
2475         entscheiden, welcher Python-Interpreter genutzt wird. Mit der Option
2476         <literal>python_uno</literal> aus dem Abschnitt
2477         <literal>applications</literal> wird der Interpreter selber
2478         festgelegt; sie steht standardmäßig auf dem eben erwähnten Wert
2479         <literal>/usr/bin/python</literal>.</para>
2480
2481         <para>Zusätzlich ist es möglich, Pfade anzugeben, in denen Python
2482         neben seinen normalen Suchpfaden ebenfalls nach Modulen gesucht wird,
2483         z.B. falls sich diese in einem gesonderten LibreOffice- bzw.
2484         OpenOffice-Verzeichnis befinden. Diese zweite Variable heißt
2485         <literal>python_uno_path</literal> und befindet sich im Abschnitt
2486         <literal>environment</literal>. Sie ist standardmäßig leer. Werden
2487         hier mehrere Pfade angegeben, so müssen diese durch Doppelpunkte
2488         voneinander getrennt werden. Der Inhalt wird an den Python-Interpreter
2489         über die Umgebungsvariable <literal>PYTHONPATH</literal>
2490         übergeben.</para>
2491       </note>
2492
2493       <para>Ist <literal>$openofficeorg_daemon</literal> nicht gesetzt, so
2494       wird für jedes Dokument LibreOffice bzw. OpenOffice neu gestartet und
2495       die Konvertierung mit Hilfe eines Makros durchgeführt. Dieses Makro muss
2496       in der Dokumentenvorlage enthalten sein und
2497       “Standard.Conversion.ConvertSelfToPDF()” heißen. Die Beispielvorlage
2498       ‘<literal>templates/print/rev-odt/invoice.odt</literal>’ enthält ein
2499       solches Makro, das in jeder anderen Dokumentenvorlage ebenfalls
2500       enthalten sein muss.</para>
2501
2502       <para>Als letztes muss herausgefunden werden, welchen Namen OpenOffice
2503       bzw. LibreOffice dem Verzeichnis mit den Benutzereinstellungen gibt.
2504       Unter Debian ist dies momentan <literal>~/.config/libreoffice</literal>.
2505       kivitendo verwendet das Verzeichnis
2506       <literal>users/.openoffice.org2</literal>. Eventuell muss dieses
2507       Verzeichnis umbenannt werden.</para>
2508
2509       <para>Dieses Verzeichnis, wie auch das komplette
2510       <literal>users</literal>-Verzeichnis, muss vom Webserver beschreibbar
2511       sein. Dieses wurde bereits erledigt (siehe <xref
2512       linkend="Manuelle-Installation-des-Programmpaketes"/>), kann aber erneut
2513       überprüft werden, wenn die Konvertierung nach PDF fehlschlägt.</para>
2514
2515       <sect2>
2516         <title>OpenDocument (odt) Druckvorlagen mit Makros</title>
2517
2518         <para>OpenDocument Vorlagen können Makros enthalten, welche komplexere
2519         Aufgaben erfüllen.</para>
2520
2521         <para>Der Vorlagensatz "rev-odt" enthält solche Vorlagen mit <emphasis
2522         role="bold">Schweizer Bank-Einzahlungsscheinen (BESR)</emphasis>.
2523         Diese Makros haben die Aufgabe, die in den Einzahlungsscheinen
2524         benötigte Referenznummer und Kodierzeile zu erzeugen. Hier eine kurze
2525         Beschreibung, wie die Makros aufgebaut sind, und was bei ihrer Nutzung
2526         zu beachten ist (<emphasis role="bold">in fett sind nötige einmalige
2527         Anpassungen aufgeführt</emphasis>):</para>
2528
2529         <sect3>
2530           <title>Bezeichnung der Vorlagen</title>
2531
2532           <para>Rechnung: invoice_besr.odt, Auftrag:
2533           sales_order_besr.odt</para>
2534         </sect3>
2535
2536         <sect3>
2537           <title>Vorbereitungen im Adminbereich</title>
2538
2539           <para>Damit beim Erstellen von Rechnungen und Aufträgen neben der
2540           Standardvorlage ohne Einzahlungsschein weitere Vorlagen (z.B. mit
2541           Einzahlungsschein) auswählbar sind, muss für jedes Vorlagen-Suffix
2542           ein Drucker eingerichtet werden:</para>
2543
2544           <itemizedlist>
2545             <listitem>
2546               <para>Druckeradministration → Drucker hinzufügen</para>
2547             </listitem>
2548
2549             <listitem>
2550               <para>Mandant wählen</para>
2551             </listitem>
2552
2553             <listitem>
2554               <para>Druckerbeschreibung → aussagekräftiger Text: wird in der
2555               Auftrags- bzw. Rechnungsmaske als Auswahl angezeigt (z.B. mit
2556               Einzahlungsschein Bank xy)</para>
2557             </listitem>
2558
2559             <listitem>
2560               <para>Druckbefehl → beliebiger Text (hat für das Erzeugen von
2561               Aufträgen oder Rechnungen als odt-Datei keine Bedeutung, darf
2562               aber nicht leer sein)</para>
2563             </listitem>
2564
2565             <listitem>
2566               <para>Vorlagenkürzel → besr bzw. selbst gewähltes Vorlagensuffix
2567               (muss genau der Zeichenfolge entsprechen, die zwischen
2568               "invoice_" bzw. "sales_order_" und ".odt" steht.)</para>
2569             </listitem>
2570
2571             <listitem>
2572               <para>speichern</para>
2573             </listitem>
2574           </itemizedlist>
2575         </sect3>
2576
2577         <sect3>
2578           <title>Benutzereinstellungen</title>
2579
2580           <para>Wer den Ausdruck mit Einzahlungsschein als Standardeinstellung
2581           im Rechnungs- bzw. Auftragsformular angezeigt haben möchte, kann
2582           dies persönlich für sich bei den Benutzereinstellungen
2583           konfigurieren:</para>
2584
2585           <itemizedlist>
2586             <listitem>
2587               <para>Programm → Benutzereinstellungen → Druckoptionen</para>
2588             </listitem>
2589
2590             <listitem>
2591               <para>Standardvorlagenformat → OpenDocument/OASIS</para>
2592             </listitem>
2593
2594             <listitem>
2595               <para>Standardausgabekanal → Bildschirm</para>
2596             </listitem>
2597
2598             <listitem>
2599               <para>Standarddrucker → gewünschte Druckerbeschreibung auswählen
2600               (z.B. mit Einzahlungsschein Bank xy)</para>
2601             </listitem>
2602
2603             <listitem>
2604               <para>Anzahl Kopien → leer</para>
2605             </listitem>
2606
2607             <listitem>
2608               <para>speichern</para>
2609             </listitem>
2610           </itemizedlist>
2611         </sect3>
2612
2613         <sect3>
2614           <title>Aufbau und nötige Anpassungen der Vorlagen</title>
2615
2616           <para>In der Vorlage sind als Modul "BESR" 4 Makros gespeichert, die
2617           aus dem von kivitendo erzeugten odt-Dokument die korrekte
2618           Referenznummer inklusive Prüfziffer sowie die Kodierzeile in
2619           OCRB-Schrift erzeugen und am richtigen Ort ins Dokument
2620           schreiben.</para>
2621
2622           <itemizedlist>
2623             <listitem>
2624               <para>Für den Einzahlungsschein ist die letzte Seite des
2625               Dokuments reserviert</para>
2626             </listitem>
2627
2628             <listitem>
2629               <para>Direkt über dem Einzahlungsschein enthält die Vorlage eine
2630               Zeile mit folgenden Angaben (<emphasis
2631               role="bold">Bank-Konto-Identifikationsnummer und
2632               Postkonto-Nummer der Bank müssen gemäss Angaben der jeweiligen
2633               Bank angepasst werden</emphasis>):<itemizedlist>
2634                   <listitem>
2635                     <para>DDDREF: 4 Werte zum Bilden der Referenznummer
2636                     (jeweils durch einen Leerschlag getrennt): <itemizedlist>
2637                         <listitem>
2638                           <para>erster Wert: <emphasis
2639                           role="bold">Bank-Konto-Identifikation</emphasis>
2640                           (nur Ziffern, maximal 6), <emphasis role="bold">muss
2641                           angepasst werden</emphasis>.</para>
2642                         </listitem>
2643
2644                         <listitem>
2645                           <para>zweiter Wert: &lt;%customernumber%&gt;
2646                           (Kundennummer: nur Ziffern, maximal 6)</para>
2647                         </listitem>
2648
2649                         <listitem>
2650                           <para>dritter Wert: &lt;%ordnumber%&gt;
2651                           (Auftragsnummer bei Auftragsvorlage
2652                           sales_oder_besr.odt, sonst 0) maximal 7 Ziffern,
2653                           führende Buchstaben werden vom Makro entfernt</para>
2654                         </listitem>
2655
2656                         <listitem>
2657                           <para>vierter Wert: &lt;%invnumber%&gt;
2658                           (Rechnungsnummer bei Rechnungsvorlage
2659                           invoice_besr.odt, sonst 0) maximal 7 Ziffern,
2660                           führende Buchstaben werden vom Makro entfernt</para>
2661                         </listitem>
2662                       </itemizedlist></para>
2663                   </listitem>
2664
2665                   <listitem>
2666                     <para>DDDKONTO: <emphasis role="bold">Postkonto-Nummer der
2667                     Bank, muss angepasst werden</emphasis>.</para>
2668                   </listitem>
2669
2670                   <listitem>
2671                     <para>DDDBETRAG: &lt;%total%&gt; Einzahlungsbetrag oder 0,
2672                     falls Einzahlungsschein ohne Betrag</para>
2673                   </listitem>
2674
2675                   <listitem>
2676                     <para>DDDEND: muss am Ende der Zeile vorhanden sein</para>
2677                   </listitem>
2678                 </itemizedlist></para>
2679             </listitem>
2680
2681             <listitem>
2682               <para><emphasis role="bold">Im Einzahlungsschein selbst müssen
2683               der Name und die Adresse der Bank, die Postkonto-Nummer der
2684               Bank, sowie der eigene Firmenname und die Firmenadresse
2685               angepasst werden.</emphasis> Dabei ist darauf zu achten, dass
2686               sich die Positionen der Postkonto-Nummern der Bank, sowie der
2687               Zeichenfolgen dddfr, DDDREF1, DDDREF2, 609, DDDKODIERZEILE nicht
2688               verschieben.</para>
2689             </listitem>
2690           </itemizedlist>
2691
2692           <screenshot>
2693             <screeninfo>Rechnungsvorlage Schweizer Bank-Einzahlungsschein - zu
2694             ändernde Einträge in rot</screeninfo>
2695
2696             <mediaobject>
2697               <imageobject>
2698                 <imagedata fileref="images/Einzahlungsschein_Makro.png"/>
2699               </imageobject>
2700             </mediaobject>
2701           </screenshot>
2702         </sect3>
2703
2704         <sect3>
2705           <title>Auswahl der Druckvorlage in kivitendo beim Erzeugen einer
2706           odt-Rechnung (analog bei Auftrag)</title>
2707
2708           <para>Im Fussbereich der Rechnungsmaske muss neben Rechnung,
2709           OpenDocument/OASIS und Bildschirm die im Adminbereich erstellte
2710           Druckerbeschreibung ausgewählt werden, falls diese nicht bereits bei
2711           den Benutzereinstellungen als persönlicher Standard gewählt
2712           wurde.</para>
2713         </sect3>
2714
2715         <sect3>
2716           <title>Makroeinstellungen in LibreOffice anpassen</title>
2717
2718           <para>Falls beim Öffnen einer von kivitendo erzeugten odt-Rechnung
2719           die Meldung kommt, dass Makros aus Sicherheitsgründen nicht
2720           ausgeführt werden, so müssen folgende Einstellungen in LibreOffice
2721           angepasst werden:</para>
2722
2723           <itemizedlist>
2724             <listitem>
2725               <para>Extras → Optionen → Sicherheit → Makrosicherheit</para>
2726             </listitem>
2727
2728             <listitem>
2729               <para>Sicherheitslevel auf "Mittel" einstellen (Diese
2730               Einstellung muss auf jedem Computer durchgeführt werden, mit dem
2731               von kivitendo erzeugte odt-Rechnungen oder Aufträge geöffnet
2732               werden.)</para>
2733             </listitem>
2734
2735             <listitem>
2736               <para>Beim Öffnen einer odt-Rechnung oder eines odt-Auftrags bei
2737               der entsprechenden Nachfrage "Makros ausführen"
2738               auswählen.</para>
2739
2740               <para><emphasis role="bold">Wichtig</emphasis>: die Makros sind
2741               so eingestellt, dass sie beim Öffnen der Vorlagen selbst nicht
2742               ausgeführt werden. Das heisst für das Ansehen und Bearbeiten der
2743               Vorlagen sind keine speziellen Einstellungen in LibreOffice
2744               nötig.</para>
2745             </listitem>
2746           </itemizedlist>
2747         </sect3>
2748       </sect2>
2749     </sect1>
2750
2751     <sect1 id="nomenclature">
2752       <title>Nomenklatur</title>
2753
2754       <sect2 id="booking.dates">
2755         <title>Datum bei Buchungen</title>
2756
2757         <para>Seit der Version 3.5 werden für Buchungen in kivitendo
2758         einheitlich folgende Bezeichnungen verwendet:</para>
2759
2760         <itemizedlist>
2761           <listitem>
2762             <para><option>Erfassungsdatum</option> (en: <option>Entry
2763             Date</option>, code: <option>Gldate</option>)</para>
2764
2765             <para>bezeichnet das Datum, an dem die Buchung in kivitendo
2766             erfasst wurde.</para>
2767           </listitem>
2768
2769           <listitem>
2770             <para><option>Buchungsdatum</option> (en: <option>Booking
2771             Date</option>, code: <option>Transdate</option>)</para>
2772
2773             <para>bezeichnet das buchhaltungstechnisch für eine Buchung
2774             relevante Datum</para>
2775
2776             <para>Das <option>Rechnungsdatum</option> bei Verkaufs- und
2777             Einkaufsrechnungen entspricht dem Buchungsdatum. Das heisst, in
2778             Berichten wie dem Buchungsjournal, in denen eine Spalte
2779             <option>Buchungsdatum</option> angezeigt werden kann, erscheint
2780             hier im Fall von Rechnungen das Rechnungsdatum.</para>
2781           </listitem>
2782
2783           <listitem>
2784             <para>Bezieht sich ein verbuchter Beleg auf einen Zeitpunkt, der
2785             nicht mit dem Buchungsdatum übereinstimmt, so kann dieses Datum
2786             momentan in kivitendo nur unter Bemerkungen erfasst werden.</para>
2787
2788             <para>Möglicherweise wird für solche Fälle in einer späteren
2789             Version von kivitendo ein dritter Datumswert für Buchungen
2790             erstellt. (Beispiel: Einkaufsbeleg stammt aus einem früheren Jahr,
2791             das bereits buchhaltungstechnisch abgeschlossen wurde, und muss
2792             deshalb später verbucht werden.)</para>
2793           </listitem>
2794         </itemizedlist>
2795       </sect2>
2796     </sect1>
2797
2798     <sect1 id="config.eur">
2799       <title>Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
2800       EUR</title>
2801
2802       <sect2 id="config.eur.introduction"
2803              xreflabel="Einführung in die Konfiguration zur EUR">
2804         <title>Einführung</title>
2805
2806         <para>kivitendo besaß bis inklusive Version 2.6.3 einen
2807         Konfigurationsparameter namens <varname>eur</varname>, der sich in der
2808         Konfigurationsdatei <filename>config/kivitendo.conf</filename> (damals
2809         noch <filename>config/lx_office.conf</filename>) befand. Somit galt er
2810         für alle Mandanten, die in dieser Installation benutzt wurden.</para>
2811
2812         <para>Mit der nachfolgenden Version wurde der Parameter zum Einen in
2813         die Mandantendatenbank verschoben und dabei auch gleich in drei
2814         Einzelparameter aufgeteilt, mit denen sich das Verhalten genauer
2815         steuern lässt.</para>
2816       </sect2>
2817
2818       <sect2 id="config.eur.parameters"
2819              xreflabel="Konfigurationsparameter für EUR">
2820         <title>Konfigurationsparameter</title>
2821
2822         <para>Es gibt drei Parameter, die die Gewinnermittlungsart,
2823         Versteuerungsart und die Warenbuchungsmethode regeln:</para>
2824
2825         <variablelist>
2826           <varlistentry>
2827             <term><varname>profit_determination</varname></term>
2828
2829             <listitem>
2830               <para>Dieser Parameter legt die Berechnungsmethode für die
2831               Gewinnermittlung fest. Er enthält entweder
2832               <literal>balance</literal> für
2833               Betriebsvermögensvergleich/Bilanzierung oder
2834               <literal>income</literal> für die
2835               Einnahmen-Überschuss-Rechnung.</para>
2836             </listitem>
2837           </varlistentry>
2838
2839           <varlistentry>
2840             <term><varname>accounting_method</varname></term>
2841
2842             <listitem>
2843               <para>Dieser Parameter steuert die Buchungs- und
2844               Berechnungsmethoden für die Versteuerungsart. Er enthält
2845               entweder <literal>accrual</literal> für die Soll-Versteuerung
2846               oder <literal>cash</literal> für die Ist-Versteuerung.</para>
2847             </listitem>
2848           </varlistentry>
2849
2850           <varlistentry>
2851             <term><varname>inventory_system</varname></term>
2852
2853             <listitem>
2854               <para>Dieser Parameter legt die Warenbuchungsmethode fest. Er
2855               enthält entweder <literal>perpetual</literal> für die
2856               Bestandsmethode oder <literal>periodic</literal> für die
2857               Aufwandsmethode.</para>
2858             </listitem>
2859           </varlistentry>
2860         </variablelist>
2861
2862         <para>Zum Vergleich der Funktionalität bis und nach 2.6.3:
2863         <varname>eur</varname> = 1 bedeutete Einnahmen-Überschuss-Rechnung,
2864         Ist-Versteuerung und Aufwandsmethode. <varname>eur</varname> = 0
2865         bedeutete hingegen Bilanzierung, Soll-Versteuerung und
2866         Bestandsmethode.</para>
2867
2868         <para>Die Konfiguration "<varname>eur</varname>" unter
2869         <varname>[system]</varname> in der <link
2870         linkend="config.config-file">Konfigurationsdatei</link>
2871         <filename>config/kivitendo.conf</filename> wird nun nicht mehr
2872         benötigt und kann entfernt werden. Dies muss manuell geschehen.</para>
2873       </sect2>
2874
2875       <sect2 id="config.eur.setting-parameters">
2876         <title>Festlegen der Parameter</title>
2877
2878         <para>Beim Anlegen eines neuen Mandanten bzw. einer neuen Datenbank in
2879         der Admininstration können diese Optionen nun unabhängig voneinander
2880         eingestellt werden.</para>
2881
2882         <para>Für die Schweiz sind folgende Einstellungen üblich:
2883         <itemizedlist>
2884             <listitem>
2885               <para>Sollversteuerung</para>
2886             </listitem>
2887
2888             <listitem>
2889               <para>Aufwandsmethode</para>
2890             </listitem>
2891
2892             <listitem>
2893               <para>Bilanzierung</para>
2894             </listitem>
2895           </itemizedlist> Diese Einstellungen werden automatisch beim
2896         Erstellen einer neuen Datenbank vorausgewählt, wenn in
2897         <filename>config/kivitendo.conf</filename> unter
2898         <varname>[system]</varname> <literal>default_manager = swiss</literal>
2899         eingestellt ist.</para>
2900
2901         <para>Beim Upgrade bestehender Mandanten wird eur ausgelesen und die
2902         Variablen werden so gesetzt, daß sich an der Funktionalität nichts
2903         ändert.</para>
2904
2905         <para>Die aktuelle Konfiguration wird unter Nummernkreise und
2906         Standardkonten unter dem neuen Punkt "Einstellungen" (read-only)
2907         angezeigt. Unter <guimenu>System</guimenu> →
2908         <guisubmenu>Mandantenkonfiguration</guisubmenu> können die
2909         Einstellungen auch geändert werden. Dabei ist zu beachten, dass eine
2910         Änderung vorhandene Daten so belässt und damit evtl. die Ergebnisse
2911         verfälscht. Dies gilt vor Allem für die Warenbuchungsmethode (siehe
2912         auch <link linkend="config.eur.inventory-system-perpetual">
2913         Bemerkungen zur Bestandsmethode</link>).</para>
2914       </sect2>
2915
2916       <sect2 id="config.eur.inventory-system-perpetual">
2917         <title>Bemerkungen zur Bestandsmethode</title>
2918
2919         <para>Die Bestandsmethode ist eigentlich eine sehr elegante Methode,
2920         funktioniert in kivitendo aber nur unter bestimmten Bedingungen:
2921         Voraussetzung ist, daß auch immer alle Einkaufsrechnungen gepflegt
2922         werden, und man beim Jahreswechsel nicht mit einer leeren Datenbank
2923         anfängt, da bei jedem Verkauf anhand der gesamten Rechnungshistorie
2924         der Einkaufswert der Ware nach dem FIFO-Prinzip aus den
2925         Einkaufsrechnungen berechnet wird.</para>
2926
2927         <para>Die Bestandsmethode kann vom Prinzip her also nur funktioneren,
2928         wenn man mit den Buchungen bei Null anfängt, und man kann auch nicht
2929         im laufenden Betrieb von der Aufwandsmethode zur Bestandsmethode
2930         wechseln.</para>
2931       </sect2>
2932
2933       <sect2 id="config.eur.knonw-issues">
2934         <title>Bekannte Probleme</title>
2935
2936         <para>Bei bestimmten Berichten kann man derzeit noch inviduell
2937         einstellen, ob man nach Ist- oder Sollversteuerung auswertet, und es
2938         werden im Code Variablen wie $accrual oder $cash gesetzt. Diese
2939         Codestellen wurden noch nicht angepasst, sondern nur die, wo bisher
2940         die Konfigurationsvariable
2941         <varname>$::lx_office_conf{system}-&gt;{eur}</varname> ausgewertet
2942         wurde.</para>
2943
2944         <para>Es fehlen Hilfetext beim Neuanlegen eines Mandanten, was die
2945         Optionen bewirken, z.B. mit zwei Standardfällen.</para>
2946       </sect2>
2947     </sect1>
2948
2949     <sect1 id="config.skr04-update-3804">
2950       <title>SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</title>
2951
2952       <sect2 id="config.skr04-update-3804.introduction">
2953         <title>Einführung</title>
2954
2955         <para>Die Umsatzsteuerumstellung auf 19% für SKR04 für die
2956         Steuerschlüssel "EU ohne USt-ID Nummer" ist erst 2010 erfolgt.
2957         kivitendo beinhaltet ein Upgradeskript, das das Konto 3804 automatisch
2958         erstellt und die Steuereinstellungen korrekt einstellt. Hat der
2959         Benutzer aber schon selber das Konto 3804 angelegt, oder gab es schon
2960         Buchungen im Zeitraum nach dem 01.01.2007 auf das Konto 3803, wird das
2961         Upgradeskript vorsichtshalber nicht ausgeführt, da der Benutzer sich
2962         vielleicht schon selbst geholfen hat und mit seinen Änderungen
2963         zufrieden ist. Die korrekten Einstellungen kann man aber auch per Hand
2964         ausführen. Nachfolgend werden die entsprechenden Schritte anhand von
2965         Screenshots dargestellt.</para>
2966
2967         <para>Für den Fall, daß Buchungen mit der Steuerschlüssel "EU ohne
2968         USt.-IdNr." nach dem 01.01.2007 erfolgt sind, ist davon auszugehen,
2969         dass diese mit dem alten Umsatzsteuersatz von 16% gebucht worden sind,
2970         und diese Buchungen sollten entsprechend kontrolliert werden.</para>
2971       </sect2>
2972
2973       <sect2 id="config.skr04-update-3804.create-chart">
2974         <title>Konto 3804 manuell anlegen</title>
2975
2976         <para>Die folgenden Schritte sind notwendig, um das Konto manuell
2977         anzulegen und zu konfigurieren. Zuerst wird in
2978         <guimenu>System</guimenu> → <guisubmenu>Kontenübersicht</guisubmenu> →
2979         <guimenuitem>Konto erfassen</guimenuitem> das Konto angelegt.</para>
2980
2981         <screenshot>
2982           <screeninfo>Konto 3804 erfassen</screeninfo>
2983
2984           <mediaobject>
2985             <imageobject>
2986               <imagedata fileref="images/skr04-update-3804/konto3804.png"/>
2987             </imageobject>
2988           </mediaobject>
2989         </screenshot>
2990
2991         <para>Als Zweites muss Steuergruppe 13 für Konto 3803 angepasst
2992         werden. Dazu unter <guimenu>System</guimenu> →
2993         <guisubmenu>Steuern</guisubmenu> →
2994         <guimenuitem>Bearbeiten</guimenuitem> den Eintrag mit Steuerschlüssel
2995         13 auswählen und ihn wie im folgenden Screenshot angezeigt
2996         anpassen.</para>
2997
2998         <screenshot>
2999           <screeninfo>Steuerschlüssel 13 für 3803 (16%) anpassen</screeninfo>
3000
3001           <mediaobject>
3002             <imageobject>
3003               <imagedata fileref="images/skr04-update-3804/steuer3803.png"/>
3004             </imageobject>
3005           </mediaobject>
3006         </screenshot>
3007
3008         <para>Als Drittes wird ein neuer Eintrag mit Steuerschlüssel 13 für
3009         Konto 3804 (19%) angelegt. Dazu unter <guimenu>System</guimenu> →
3010         <guisubmenu>Steuern</guisubmenu> → <guimenuitem>Erfassen</guimenuitem>
3011         auswählen und die Werte aus dem Screenshot übernehmen.</para>
3012
3013         <screenshot>
3014           <screeninfo>Steuerschlüssel 13 für 3804 (19%) anlegen</screeninfo>
3015
3016           <mediaobject>
3017             <imageobject>
3018               <imagedata fileref="images/skr04-update-3804/steuer3804.png"/>
3019             </imageobject>
3020           </mediaobject>
3021         </screenshot>
3022
3023         <para>Als Nächstes sind alle Konten anzupassen, die als
3024         Steuerautomatikkonto die 3803 haben, sodass sie ab dem 1.1.2007 auch
3025         Steuerautomatik auf 3804 bekommen. Dies betrifft in der
3026         Standardkonfiguration die Konten 4315 und 4726. Als Beispiel für 4315
3027         müssen Sie dazu unter <guimenu>System</guimenu> →
3028         <guisubmenu>Kontenübersicht</guisubmenu> → <guimenuitem>Konten
3029         anzeigen</guimenuitem> das Konto 4315 anklicken und die Einstellungen
3030         wie im Screenshot gezeigt vornehmen.</para>
3031
3032         <screenshot>
3033           <screeninfo>Konto 4315 anpassen</screeninfo>
3034
3035           <mediaobject>
3036             <imageobject>
3037               <imagedata fileref="images/skr04-update-3804/konto4315.png"/>
3038             </imageobject>
3039           </mediaobject>
3040         </screenshot>
3041
3042         <para>Als Letztes sollte die Steuerliste unter
3043         <guimenu>System</guimenu> → <guisubmenu>Steuern</guisubmenu> →
3044         <guimenuitem>Bearbeiten</guimenuitem> kontrolliert werden. Zum
3045         Vergleich der Screenshot.</para>
3046
3047         <screenshot>
3048           <screeninfo>Steuerliste vergleichen</screeninfo>
3049
3050           <mediaobject>
3051             <imageobject>
3052               <imagedata fileref="images/skr04-update-3804/steuerliste.png"/>
3053             </imageobject>
3054           </mediaobject>
3055         </screenshot>
3056       </sect2>
3057     </sect1>
3058
3059     <sect1 id="config.bilanz">
3060       <title>Verhalten des Bilanzberichts</title>
3061
3062       <para>Bis Version 3.0 wurde "closedto" ("Bücher schließen zum") als
3063       Grundlage für das Startdatum benutzt. Schließt man die Bücher allerdings
3064       monatsweise führt dies zu falschen Werten.</para>
3065
3066       <para>In der Mandantenkonfiguration kann man dieses Verhalten genau
3067       einstellen indem man:</para>
3068
3069       <itemizedlist>
3070         <listitem>
3071           <para>weiterhin closed_to benutzt (Default, es ändert sich nichts zu
3072           vorher)</para>
3073         </listitem>
3074
3075         <listitem>
3076           <para>immer den Jahresanfang nimmt (1.1. relativ zum
3077           Stichtag)</para>
3078         </listitem>
3079
3080         <listitem>
3081           <para>immer die letzte Eröffnungsbuchung als Startdatum nimmt</para>
3082
3083           <para>- mit Jahresanfang als Alternative wenn es keine EB-Buchungen
3084           gibt</para>
3085
3086           <para>- oder mit "alle Buchungen" als Alternative"</para>
3087         </listitem>
3088
3089         <listitem>
3090           <para>mit Jahresanfang als Alternative wenn es keine EB-Buchungen
3091           gibt</para>
3092         </listitem>
3093
3094         <listitem>
3095           <para>immer alle Buchungen seit Beginn der Datenbank nimmt</para>
3096         </listitem>
3097       </itemizedlist>
3098
3099       <para>Folgende Hinweise zu den Optionen: Das "Bücher schließen Datum"
3100       ist sinnvoll, wenn man nur komplette Jahre schließt. Bei Wirtschaftsjahr
3101       = Kalendarjahr entspricht dies aber auch dem Jahresanfang. "Alle
3102       Buchungen" kann z.B. sinnvoll sein wenn man ohne Jahresabschluß
3103       durchbucht. Eröffnungsbuchung mit "alle Buchungen" als Fallback ist z.B.
3104       sinnvoll, wenn man am sich Anfang des zweiten Buchungsjahres befindet,
3105       und noch keinen Jahreswechsel und auch noch keine EB-Buchungen hat. Bei
3106       den Optionen mit EB-Buchungen wird vorausgesetzt, daß diese immer am 1.
3107       Tag des Wirtschaftsjahres gebucht werden. Zur Sicherheit wird das
3108       Startdatum im Bilanzbericht jetzt zusätzlich zum Stichtag mit angezeigt.
3109       Das hilft auch bei der Kontrolle für den Abgleich mit der GuV bzw.
3110       Erfolgsrechnung.</para>
3111     </sect1>
3112
3113     <sect1 id="config.erfolgsrechnung">
3114       <title>Erfolgsrechnung</title>
3115
3116       <para>Seit der Version 3.4.1 existiert in kivitendo der Bericht
3117       <emphasis role="bold"> Erfolgsrechnung</emphasis>.</para>
3118
3119       <para>Die Erfolgsrechnung kann in der Mandantenkonfiguration unter
3120       Features an- oder abgeschaltet werden. Mit der Einstellung
3121       <varname>default_manager = swiss </varname> in der
3122       <filename>config/kivitendo.conf</filename> wird beim neu Erstellen einer
3123       Datenbank automatisch die Anzeige der Erfolgsrechnung im Menü
3124       <guimenu>Berichte </guimenu> ausgewählt und ersetzt dort die GUV.</para>
3125
3126       <para>Im Gegensatz zur GUV werden bei der Erfolgsrechnung sämtliche
3127       Aufwands- und Erlöskonten einzeln aufgelistet (analog zur Bilanz),
3128       sortiert nach ERTRAG und AUFWAND.</para>
3129
3130       <para>Bei den Konteneinstellungen muss bei jedem Konto, das in der
3131       Erfolgsrechnung erscheinen soll, unter <varname>Sonstige
3132       Einstellungen/Erfolgsrechnung</varname> entweder
3133       <literal>01.Ertrag</literal> oder <literal>06.Aufwand</literal>
3134       ausgewählt werden.</para>
3135
3136       <para>Wird bei einem Erlöskonto <literal>06.Aufwand</literal>
3137       ausgewählt, so wird dieses Konto als Aufwandsminderung unter AUFWAND
3138       aufgelistet.</para>
3139
3140       <para>Wird bei einem Aufwandskonto <literal>01.Ertrag</literal>
3141       ausgewählt, so wird dieses Konto als Ertragsminderung unter ERTRAG
3142       aufgelistet.</para>
3143
3144       <para>Soll bei einer bereits bestehenden Buchhaltung in Zukunft
3145       zusätzlich die Erfolgsrechnung als Bericht verwendet werden, so müssen
3146       die Einstellungen zu allen Erlös- und Aufwandskonten unter
3147       <varname>Sonstige Einstellungen/Erfolgsrechnung</varname> überprüft und
3148       allenfalls neu gesetzt werden.</para>
3149     </sect1>
3150
3151     <sect1 id="config.rounding">
3152       <title>Rundung in Verkaufsbelegen</title>
3153
3154       <para>In der Schweiz hat die kleinste aktuell benutzte Münze den Wert
3155       von 5 Rappen (0.05 CHF).</para>
3156
3157       <para>Auch wenn im elektronischen Zahlungsverkehr Beträge mit einer
3158       Genauigkeit von 0.01 CHF verwendet werden können, ist es trotzdem nach
3159       wie vor üblich, Rechnungen mit auf 0.05 CHF gerundeten Beträgen
3160       auszustellen.</para>
3161
3162       <para>In kivitendo kann seit der Version 3.4.1 die Einstellung für eine
3163       solche Rundung pro Mandant / Datenbank festgelegt werden.</para>
3164
3165       <para>Die Einstellung wird beim Erstellen der Datenbank bei
3166       <literal>Genauigkeit</literal> festgelegt. Sie kann anschliessend über
3167       das Webinterface von kivitendo nicht mehr verändert werden.</para>
3168
3169       <para>Abhängig vom Wert für <varname>default_manager</varname> in
3170       <filename>config/kivitendo.conf</filename> werden dabei folgende Werte
3171       voreingestellt:</para>
3172
3173       <itemizedlist>
3174         <listitem>
3175           <para>0.05 (default_manager = swiss)</para>
3176         </listitem>
3177
3178         <listitem>
3179           <para>0.01 (default_manager = german)</para>
3180         </listitem>
3181       </itemizedlist>
3182
3183       <para>Der Wert wird in der Datenbank in der Tabelle <varname>defaults
3184       </varname>in der Spalte <varname>precision</varname> gespeichert.</para>
3185
3186       <para>In allen Verkaufsangeboten, Verkaufsaufträgen, Verkaufsrechnungen
3187       und Verkaufsgutschriften wird der Endbetrag inkl. MWST gerundet, wenn
3188       dieser nicht der eingestellten Genauigkeit entspricht.</para>
3189
3190       <para>Beim Buchen einer Verkaufsrechnung wird der Rundungsbetrag
3191       automatisch auf die in der Mandantenkonfiguration festgelegten
3192       Standardkonten für Rundungserträge bzw. Rundungsaufwendungen
3193       gebucht.</para>
3194
3195       <para>(Die berechnete MWST wird durch den Rundungsbetrag nicht mehr
3196       verändert.)</para>
3197
3198       <para>Die in den Druckvorlagen zur Verfügung stehenden Variablen
3199       <varname>quototal</varname>, <varname>ordtotal</varname> bzw.
3200       <varname>invtotal</varname> enthalten den gerundeten Betrag.</para>
3201
3202       <para><emphasis role="bold">Achtung:</emphasis> Werden Verkaufsbelege in
3203       anderen Währungen als der Standardwährung erstellt, so muss in kivitendo
3204       ab Version 3.4.1 die Genauigkeit 0.01 verwendet werden.</para>
3205
3206       <para>Das heisst, Firmen in der Schweiz, die teilweise
3207       Verkaufsrechnungen in Euro oder anderen Währungen erstellen wollen,
3208       müssen beim Erstellen der Datenbank als Genauigkeit 0.01 wählen und
3209       können zur Zeit die 5er Rundung noch nicht nutzen.</para>
3210     </sect1>
3211
3212     <sect1 id="config.client">
3213       <title>Einstellungen pro Mandant</title>
3214
3215       <para>Einige Einstellungen können von einem Benutzer mit dem <link
3216       linkend="Zusammenhänge">Recht</link> "Administration (Für die Verwaltung
3217       der aktuellen Instanz aus einem Userlogin heraus)" gemacht werden. Diese
3218       Einstellungen sind dann für die aktuellen Mandanten-Datenbank gültig.
3219       Die Einstellungen sind unter <guimenu>System</guimenu> →
3220       <guisubmenu>Mandantenkonfiguration</guisubmenu> erreichbar.</para>
3221
3222       <para>Bitte beachten Sie die Hinweise zu den einzelnen Einstellungen.
3223       Einige Einstellungen sollten nicht ohne Weiteres im laufenden Betrieb
3224       geändert werden (siehe auch <link
3225       linkend="config.eur.inventory-system-perpetual">Bemerkungen zu
3226       Bestandsmethode</link>).</para>
3227
3228       <para>Die Einstellungen <literal>show_bestbefore</literal> und
3229       <literal>payments_changeable</literal> aus dem Abschnitt
3230       <literal>features</literal> und die Einstellungen im Abschnitt
3231       <literal>datev_check</literal> (sofern schon vorhanden) der <link
3232       linkend="config.config-file">kivitendo-Konfigurationsdatei</link> werden
3233       bei einem Datenbankupdate einer älteren Version automatisch übernommen.
3234       Diese Einträge können danach aus der Konfigurationsdatei entfernt
3235       werden.</para>
3236     </sect1>
3237
3238     <sect1 id="kivitendo-ERP-verwenden">
3239       <title>kivitendo ERP verwenden</title>
3240
3241       <para>Nach erfolgreicher Installation ist der Loginbildschirm unter
3242       folgender URL erreichbar:</para>
3243
3244       <para><ulink
3245       url="http://localhost/kivitendo-erp/login.pl">http://localhost/kivitendo-erp/login.pl</ulink></para>
3246
3247       <para>Die Administrationsseite erreichen Sie unter:</para>
3248
3249       <para><ulink
3250       url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
3251     </sect1>
3252   </chapter>
3253
3254   <chapter id="features" xreflabel="Features und Funktionen">
3255     <title>Features und Funktionen</title>
3256
3257     <sect1 id="features.periodic-invoices"
3258            xreflabel="Wiederkehrende Rechnungen">
3259       <title>Wiederkehrende Rechnungen</title>
3260
3261       <sect2 id="features.periodic-invoices.introduction"
3262              xreflabel="Einführung in wiederkehrende Rechnungen">
3263         <title>Einführung</title>
3264
3265         <para>Wiederkehrende Rechnungen werden als normale Aufträge definiert
3266         und konfiguriert, mit allen dazugehörigen Kunden- und Artikelangaben.
3267         Die konfigurierten Aufträge werden später automatisch in Rechnungen
3268         umgewandelt, so als ob man den Workflow benutzen würde, und auch die
3269         Auftragsnummer wird übernommen, sodass alle wiederkehrenden
3270         Rechnungen, die aus einem Auftrag erstellt wurden, später leicht
3271         wiederzufinden sind.</para>
3272       </sect2>
3273
3274       <sect2 id="features.periodic-invoices.configuration"
3275              xreflabel="Konfiguration von wiederkehrenden Rechnungen">
3276         <title>Konfiguration</title>
3277
3278         <para>Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren,
3279         findet sich beim Bearbeiten des Auftrags ein neuer Knopf
3280         "Konfigurieren", der ein neues Fenster öffnet, in dem man die nötigen
3281         Parameter einstellen kann. Hinter dem Knopf wird außerdem noch
3282         angezeigt, ob der Auftrag als wiederkehrende Rechnung konfiguriert ist
3283         oder nicht.</para>
3284
3285         <para>Folgende Parameter kann man konfigurieren:</para>
3286
3287         <variablelist>
3288           <varlistentry>
3289             <term>Status</term>
3290
3291             <listitem>
3292               <para>Bei aktiven Rechnungen wird automatisch eine Rechnung
3293               erstellt, wenn die Periodizität erreicht ist (z.B. am Anfang
3294               eines neuen Monats).</para>
3295
3296               <para>Ist ein Auftrag nicht aktiv, so werden für ihn auch keine
3297               wiederkehrenden Rechnungen erzeugt. Stellt man nach längerer
3298               nicht-aktiver Zeit einen Auftrag wieder auf aktiv, wird beim
3299               nächsten Periodenwechsel für alle Perioden, seit der letzten
3300               aktiven Periode, jeweils eine Rechnung erstellt. Möchte man dies
3301               verhindern, muss man vorher das Startdatum neu setzen.</para>
3302
3303               <para>Für gekündigte Aufträge werden nie mehr Rechnungen
3304               erstellt. Man kann sich diese Aufträge aber gesondert in den
3305               Berichten anzeigen lassen.</para>
3306             </listitem>
3307           </varlistentry>
3308
3309           <varlistentry>
3310             <term>Periodizität</term>
3311
3312             <listitem>
3313               <para>Ob monatlich, quartalsweise oder jährlich auf neue
3314               Rechnungen überprüft werden soll. Für jede Periode seit dem
3315               Startdatum wird überprüft, ob für die Periode (beginnend immer
3316               mit dem ersten Tag der Periode) schon eine Rechnung erstellt
3317               wurde. Unter Umständen können bei einem Startdatum in der
3318               Vergangenheit gleich mehrere Rechnungen erstellt werden.</para>
3319             </listitem>
3320           </varlistentry>
3321
3322           <varlistentry>
3323             <term>Buchen auf</term>
3324
3325             <listitem>
3326               <para>Das Forderungskonto, in der Regel "Forderungen aus
3327               Lieferungen und Leistungen". Das Gegenkonto ergibt sich aus den
3328               Buchungsgruppen der betreffenden Waren.</para>
3329             </listitem>
3330           </varlistentry>
3331
3332           <varlistentry>
3333             <term>Startdatum</term>
3334
3335             <listitem>
3336               <para>ab welchem Datum auf Rechnungserstellung geprüft werden
3337               soll</para>
3338             </listitem>
3339           </varlistentry>
3340
3341           <varlistentry>
3342             <term>Enddatum</term>
3343
3344             <listitem>
3345               <para>ab wann keine Rechnungen mehr erstellt werden
3346               sollen</para>
3347             </listitem>
3348           </varlistentry>
3349
3350           <varlistentry>
3351             <term>Automatische Verlängerung um x Monate</term>
3352
3353             <listitem>
3354               <para>Sollen die wiederkehrenden Rechnungen bei Erreichen des
3355               eingetragenen Enddatums weiterhin erstellt werden, so kann man
3356               hier die Anzahl der Monate eingeben, um die das Enddatum
3357               automatisch nach hinten geschoben wird.</para>
3358             </listitem>
3359           </varlistentry>
3360
3361           <varlistentry>
3362             <term>Drucken</term>
3363
3364             <listitem>
3365               <para>Sind Drucker konfiguriert, so kann man sich die erstellten
3366               Rechnungen auch gleich ausdrucken lassen.</para>
3367             </listitem>
3368           </varlistentry>
3369         </variablelist>
3370
3371         <para>Nach Erstellung der Rechnungen kann eine E-Mail mit
3372         Informationen zu den erstellten Rechnungen verschickt werden.
3373         Konfiguriert wird dies in der <link
3374         linkend="config.config-file.sections-parameters">Konfigurationsdatei</link>
3375         <filename>config/kivitendo.conf</filename> im Abschnitt
3376         <varname>[periodic_invoices]</varname>.</para>
3377       </sect2>
3378
3379       <sect2 id="features.periodic-invoices.variables">
3380         <title>Spezielle Variablen</title>
3381
3382         <para>Um die erzeugten Rechnungen individualisieren zu können, werden
3383         beim Umwandeln des Auftrags in eine Rechnung einige speziell
3384         formatierte Variablen durch für die jeweils aktuelle
3385         Abrechnungsperiode gültigen Werte ersetzt. Damit ist es möglich, z.B.
3386         den Abrechnungszeitraum explizit auszuweisen. Eine Variable hat dabei
3387         die Syntax <literal>&lt;%variablenname%&gt;</literal>.</para>
3388
3389         <para>Sofern es sich um eine Datumsvariable handelt, kann das
3390         Ausgabeformat weiter bestimmt werden, indem an den Variablennamen
3391         Formatoptionen angehängt werden. Die Syntax sieht dabei wie folgt aus:
3392         <literal>&lt;%variablenname FORMAT=Formatinformation%&gt;</literal>.
3393         Die zur verfügung stehenden Formatinformationen werden unten genauer
3394         beschrieben.</para>
3395
3396         <para>Diese Variablen können auch beim automatischen Versand der
3397         erzeugten Rechnungen per E-Mail genutzt werden, indem sie in den
3398         Feldern für den Betreff oder die Nachricht verwendet werden.</para>
3399
3400         <para>Diese Variablen werden in den folgenden Elementen des Auftrags
3401         ersetzt:</para>
3402
3403         <itemizedlist>
3404           <listitem>
3405             <para>Bemerkungen</para>
3406           </listitem>
3407
3408           <listitem>
3409             <para>Interne Bemerkungen</para>
3410           </listitem>
3411
3412           <listitem>
3413             <para>Vorgangsbezeichnung</para>
3414           </listitem>
3415
3416           <listitem>
3417             <para>In den Beschreibungs- und Langtextfeldern aller
3418             Positionen</para>
3419           </listitem>
3420         </itemizedlist>
3421
3422         <para>Die zur Verfügung stehenden Variablen sind die Folgenden:</para>
3423
3424         <variablelist>
3425           <varlistentry>
3426             <term><varname>&lt;%current_quarter%&gt;</varname>,
3427             <varname>&lt;%previous_quarter%&gt;</varname>,
3428             <varname>&lt;%next_quarter%&gt;</varname></term>
3429
3430             <listitem>
3431               <para>Aktuelles, vorheriges und nächstes Quartal als Zahl
3432               zwischen <literal>1</literal> und <literal>4</literal>.</para>
3433             </listitem>
3434           </varlistentry>
3435
3436           <varlistentry>
3437             <term><varname>&lt;%current_month%&gt;</varname>,
3438             <varname>&lt;%previous_month%&gt;</varname>,
3439             <varname>&lt;%next_month%&gt;</varname></term>
3440
3441             <listitem>
3442               <para>Aktueller, vorheriger und nächster Monat als Zahl zwischen
3443               <literal>1</literal> und <literal>12</literal>.</para>
3444             </listitem>
3445           </varlistentry>
3446
3447           <varlistentry>
3448             <term><varname>&lt;%current_month_long%&gt;</varname>,
3449             <varname>&lt;%previous_month_long%&gt;</varname>,
3450             <varname>&lt;%next_month_long%&gt;</varname></term>
3451
3452             <listitem>
3453               <para>Aktueller, vorheriger und nächster Monat als Name
3454               (<literal>Januar</literal>, <literal>Februar</literal>
3455               etc.).</para>
3456             </listitem>
3457           </varlistentry>
3458
3459           <varlistentry>
3460             <term><varname>&lt;%current_year%&gt;</varname>,
3461             <varname>&lt;%previous_year%&gt;</varname>,
3462             <varname>&lt;%next_year%&gt;</varname></term>
3463
3464             <listitem>
3465               <para>Aktuelles, vorheriges und nächstes Jahr als vierstellige
3466               Jahreszahl (<literal>2013</literal> etc.).</para>
3467             </listitem>
3468           </varlistentry>
3469
3470           <varlistentry>
3471             <term><varname>&lt;%period_start_date%&gt;</varname>,
3472             <varname>&lt;%period_end_date%&gt;</varname></term>
3473
3474             <listitem>
3475               <para>Formatiertes Datum des ersten und letzten Tages im
3476               Abrechnungszeitraum (z.B. bei quartalsweiser Abrechnung und im
3477               ersten Quartal von 2013 wären dies der
3478               <literal>01.01.2013</literal> und
3479               <literal>31.03.2013</literal>).</para>
3480             </listitem>
3481           </varlistentry>
3482         </variablelist>
3483
3484         <para>Die invidiuellen Formatinformationen bestehen aus Paaren von
3485         Prozentzeichen und einem Buchstaben, welche beide zusammen durch den
3486         dazugehörigen Wert ersetzt werden. So wird z.B. <literal>%Y</literal>
3487         durch das viertstellige Jahr ersetzt. Alle möglichen Platzhalter
3488         sind:</para>
3489
3490         <variablelist>
3491           <varlistentry>
3492             <term><varname>%a</varname></term>
3493
3494             <listitem>
3495               <para>Der abgekürzte Wochentagsname.</para>
3496             </listitem>
3497           </varlistentry>
3498
3499           <varlistentry>
3500             <term><varname>%A</varname></term>
3501
3502             <listitem>
3503               <para>Der ausgeschriebene Wochentagsname.</para>
3504             </listitem>
3505           </varlistentry>
3506
3507           <varlistentry>
3508             <term><varname>%b</varname></term>
3509
3510             <listitem>
3511               <para>Der abgekürzte Monatsname.</para>
3512             </listitem>
3513           </varlistentry>
3514
3515           <varlistentry>
3516             <term><varname>%B</varname></term>
3517
3518             <listitem>
3519               <para>Der ausgeschriebene Monatsname.</para>
3520             </listitem>
3521           </varlistentry>
3522
3523           <varlistentry>
3524             <term><varname>%C</varname></term>
3525
3526             <listitem>
3527               <para>Das Jahrhundert (Jahr/100) als eine zweistellige
3528               Zahl.</para>
3529             </listitem>
3530           </varlistentry>
3531
3532           <varlistentry>
3533             <term><varname>%d</varname></term>
3534
3535             <listitem>
3536               <para>Der Monatstag als Zahl zwischen 01 und 31.</para>
3537             </listitem>
3538           </varlistentry>
3539
3540           <varlistentry>
3541             <term><varname>%D</varname></term>
3542
3543             <listitem>
3544               <para>Entspricht %m/%d/%y (amerikanisches Datumsformat).</para>
3545             </listitem>
3546           </varlistentry>
3547
3548           <varlistentry>
3549             <term><varname>%e</varname></term>
3550
3551             <listitem>
3552               <para>Wie %d (Monatstag als Zahl zwischen 1 und 31), allerdings
3553               werden führende Nullen durch Leerzeichen ersetzt.</para>
3554             </listitem>
3555           </varlistentry>
3556
3557           <varlistentry>
3558             <term><varname>%F</varname></term>
3559
3560             <listitem>
3561               <para>Entspricht %Y-%m-%d (das ISO-8601-Datumsformat).</para>
3562             </listitem>
3563           </varlistentry>
3564
3565           <varlistentry>
3566             <term><varname>%j</varname></term>
3567
3568             <listitem>
3569               <para>Der Tag im Jahr als Zahl zwischen 001 und 366
3570               inklusive.</para>
3571             </listitem>
3572           </varlistentry>
3573
3574           <varlistentry>
3575             <term><varname>%m</varname></term>
3576
3577             <listitem>
3578               <para>Der Monat als Zahl zwischen 01 und 12 inklusive.</para>
3579             </listitem>
3580           </varlistentry>
3581
3582           <varlistentry>
3583             <term><varname>%u</varname></term>
3584
3585             <listitem>
3586               <para>Der Wochentag als Zahl zwischen 1 und 7 inklusive, wobei
3587               die 1 dem Montag entspricht.</para>
3588             </listitem>
3589           </varlistentry>
3590
3591           <varlistentry>
3592             <term><varname>%U</varname></term>
3593
3594             <listitem>
3595               <para>Die Wochennummer als Zahl zwischen 00 und 53 inklusive,
3596               wobei der erste Sonntag im Jahr das Startdatum von Woche 01
3597               ist.</para>
3598             </listitem>
3599           </varlistentry>
3600
3601           <varlistentry>
3602             <term><varname>%V</varname></term>
3603
3604             <listitem>
3605               <para>Die ISO-8601:1988-Wochennummer als Zahl zwischen 01 und 53
3606               inklusive, wobei Woche 01 die erste Woche, von der mindestens
3607               vier Tage im Jahr liegen; Montag ist erster Tag der
3608               Woche.</para>
3609             </listitem>
3610           </varlistentry>
3611
3612           <varlistentry>
3613             <term><varname>%w</varname></term>
3614
3615             <listitem>
3616               <para>Der Wochentag als Zahl zwischen 0 und 6 inklusive, wobei
3617               die 0 dem Sonntag entspricht.</para>
3618             </listitem>
3619           </varlistentry>
3620
3621           <varlistentry>
3622             <term><varname>%W</varname></term>
3623
3624             <listitem>
3625               <para>Die Wochennummer als Zahl zwischen 00 und 53 inklusive,
3626               wobei der erste Montag im Jahr das Startdatum von Woche 01
3627               ist.</para>
3628             </listitem>
3629           </varlistentry>
3630
3631           <varlistentry>
3632             <term><varname>%y</varname></term>
3633
3634             <listitem>
3635               <para>Das Jahr als zweistellige Zahl zwischen 00 und 99
3636               inklusive.</para>
3637             </listitem>
3638           </varlistentry>
3639
3640           <varlistentry>
3641             <term><varname>%Y</varname></term>
3642
3643             <listitem>
3644               <para>Das Jahr als vierstellige Zahl.</para>
3645             </listitem>
3646           </varlistentry>
3647
3648           <varlistentry>
3649             <term><varname>%%</varname></term>
3650
3651             <listitem>
3652               <para>Das Prozentzeichen selber.</para>
3653             </listitem>
3654           </varlistentry>
3655         </variablelist>
3656
3657         <para>Anwendungsbeispiel für die Ausgabe, von welchem Monat und Jahr
3658         bis zu welchem Monat und Jahr die aktuelle Abrechnungsperiode dauert:
3659         <literal>Abrechnungszeitrum: &lt;%period_start_date FORMAT=%m/%Y%&gt;
3660         bis &lt;%period_end_date FORMAT=%m/%Y%&gt;</literal></para>
3661       </sect2>
3662
3663       <sect2 id="features.periodic-invoices.reports">
3664         <title>Auflisten</title>
3665
3666         <para>Unter Verkauf-&gt;Berichte-&gt;Aufträge finden sich zwei neue
3667         Checkboxen, "Wiederkehrende Rechnungen aktiv" und "Wiederkehrende
3668         Rechnungen inaktiv", mit denen man sich einen Überglick über die
3669         wiederkehrenden Rechnungen verschaffen kann.</para>
3670       </sect2>
3671
3672       <sect2 id="features.periodic-invoices.task-server">
3673         <title>Erzeugung der eigentlichen Rechnungen</title>
3674
3675         <para>Die zeitliche und periodische Überprüfung, ob eine
3676         wiederkehrende Rechnung automatisch erstellt werden soll, geschieht
3677         durch den <link linkend="config.task-server">Taskserver</link>, einen
3678         externen Dienst, der automatisch beim Start des Servers gestartet
3679         werden sollte.</para>
3680       </sect2>
3681
3682       <sect2 id="features.periodic-invoices.create-for-current-month">
3683         <title>Erste Rechnung für aktuellen Monat erstellen</title>
3684
3685         <para>Will man im laufenden Monat eine monatlich wiederkehrende
3686         Rechnung inkl. des laufenden Monats starten, stellt man das Startdatum
3687         auf den Monatsanfang und wartet ein paar Minuten, bis der Taskserver
3688         den neu konfigurieren Auftrag erkennt und daraus eine Rechnung
3689         generiert hat. Alternativ setzt man das Startdatum auf den
3690         Monatsersten des Folgemonats und erstellt die erste Rechnung direkt
3691         manuell über den Workflow.</para>
3692       </sect2>
3693     </sect1>
3694
3695     <sect1 id="features.bank" xreflabel="bankerweiterung">
3696       <title>Bankerweiterung</title>
3697
3698       <sect2 id="features.bank.introduction"
3699              xreflabel="Einführung in die Bankerweiterung">
3700         <title>Einführung</title>
3701
3702         <para>Die Beschreibung der Bankerweiterung befindet sich derzeit noch
3703         im Wiki und soll von dort später hierhin übernommen werden:</para>
3704
3705         <para><ulink
3706         url="http://redmine.kivitendo-premium.de/projects/forum/wiki/Bankerweiterung">http://redmine.kivitendo-premium.de/projects/forum/wiki/Bankerweiterung</ulink></para>
3707       </sect2>
3708     </sect1>
3709
3710     <sect1 id="dokumentenvorlagen-und-variablen">
3711       <title>Dokumentenvorlagen und verfügbare Variablen</title>
3712
3713       <sect2 id="dokumentenvorlagen-und-variablen.einführung">
3714         <title>Einführung</title>
3715
3716         <para>Dies ist eine Auflistung der Standard-Dokumentenvorlagen und
3717         aller zur Bearbeitung verfügbaren Variablen. Eine Variable wird in
3718         einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form
3719         <function>&lt;%variablenname%&gt;</function> verwendet wird. Für
3720         LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
3721         (siehe <xref
3722         linkend="dokumentenvorlagen-und-variablen.tag-style"/>).</para>
3723
3724         <para>kivitendo unterstützt LaTeX-, HTML- und OpenDocument-Vorlagen.
3725         Sofern es nicht ausdrücklich eingeschränkt wird, gilt das im Folgenden
3726         gesagte für alle Vorlagenarten.</para>
3727
3728         <para>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
3729         verfügbar als hier aufgelistet werden. Die meisten davon können
3730         allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
3731         werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann
3732         diese wie folgt erhalten werden:</para>
3733
3734         <itemizedlist>
3735           <listitem>
3736             <para><filename>SL/Form.pm</filename> öffnen und am Anfang die
3737             Zeile "<command>use Data::Dumper;</command>" einfügen.</para>
3738           </listitem>
3739
3740           <listitem>
3741             <para>In <filename>Form.pm</filename> die Funktion
3742             <function>parse_template</function> suchen und hier die Zeile
3743             <command>print(STDERR Dumper($self));</command> einfügen.</para>
3744           </listitem>
3745
3746           <listitem>
3747             <para>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
3748             ein PDF für eine Rechnung erzeugen.</para>
3749           </listitem>
3750
3751           <listitem>
3752             <para>Im <filename>error.log</filename> Apache steht die Ausgabe
3753             der Variablen <varname>$self</varname> in der Form <varname>'key'
3754             =&gt; 'value',</varname>. Alle <varname>key</varname>s sind
3755             verfügbar.</para>
3756           </listitem>
3757         </itemizedlist>
3758       </sect2>
3759
3760       <sect2 id="dokumentenvorlagen-und-variablen.variablen-ausgeben">
3761         <title>Variablen ausgeben</title>
3762
3763         <para>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
3764         Tags geschrieben werden, also z.B.
3765         <varname>&lt;%variablenname%&gt;</varname>.</para>
3766
3767         <para>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
3768         die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
3769         <varname>&lt;%variablenname FLAG1 FLAG2%&gt;</varname>. Momentan
3770         werden die folgenden Flags unterstützt:</para>
3771
3772         <itemizedlist>
3773           <listitem>
3774             <para><option>NOFORMAT</option> gilt nur für Zahlenwerte und gibt
3775             den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
3776             mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
3777             damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</para>
3778           </listitem>
3779
3780           <listitem>
3781             <para><option>NOESCAPE</option> unterdrückt das Escapen von
3782             Sonderzeichen für die Vorlagensprache. Wenn also in einer
3783             Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
3784             auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
3785             ist dieses Flag sinnvoll.</para>
3786           </listitem>
3787         </itemizedlist>
3788
3789         <para>Beispiel:</para>
3790
3791         <programlisting>&lt;%quototal NOFORMAT%&gt;</programlisting>
3792       </sect2>
3793
3794       <sect2 id="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">
3795         <title>Verwendung in Druckbefehlen</title>
3796
3797         <para>In der Admininstration können Drucker definiert werden. Auch im
3798         dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
3799         und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
3800         den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
3801         <function>`...`</function> nicht zu unerwünschtem Verhalten
3802         führen.</para>
3803
3804         <para>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
3805         für das die Telefonnummer eines Ansprechpartners als Teil der
3806         Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
3807         z.B. wie folgt aussehen:</para>
3808
3809         <programlisting>send_fax --number &lt;%if cp_phone2%&gt;&lt;%cp_phone2%&gt;&lt;%else%&gt;&lt;%cp_phone1%&gt;&lt;%end%&gt;</programlisting>
3810       </sect2>
3811
3812       <sect2 id="dokumentenvorlagen-und-variablen.tag-style"
3813              xreflabel="Anfang und Ende der Tags verändern">
3814         <title>Anfang und Ende der Tags verändern</title>
3815
3816         <para>Der Standardstil für Tags sieht vor, dass ein Tag mit dem
3817         Kleinerzeichen und einem Prozentzeichen beginnt und mit dem
3818         Prozentzeichen und dem Größerzeichen endet, beispielsweise
3819         <function>&lt;%customer%&gt;</function>. Da diese Form aber z.B. in
3820         LaTeX zu Problemen führen kann, weil das Prozentzeichen dort
3821         Kommentare einleitet, kann pro HTML- oder LaTeX-Dokumentenvorlage der
3822         Stil umgestellt werden.</para>
3823
3824         <para>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
3825         Format gültigen Kommentarzeichen anfangen, dann
3826         <function>config:</function> enthalten, die entsprechende Option
3827         setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
3828         enden. Beispiel für LaTeX:</para>
3829
3830         <programlisting>% config: tag-style=($ $)</programlisting>
3831
3832         <para>Dies würde kivitendo dazu veranlassen, Variablen zu ersetzen,
3833         wenn sie wie folgt aussehen: <function>($customer$)</function>. Das
3834         äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</para>
3835
3836         <programlisting>&lt;!-- config: tag-style=($ $) --&gt;</programlisting>
3837       </sect2>
3838
3839       <sect2 id="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">
3840         <title>Zuordnung von den Dateinamen zu den Funktionen</title>
3841
3842         <para>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
3843         welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
3844         "<filename>.ext</filename>" geeignet zu ersetzen:
3845         "<filename>.tex</filename>" für LaTeX-Vorlagen und
3846         "<filename>.odt</filename>" für OpenDocument-Vorlagen.</para>
3847
3848         <variablelist>
3849           <varlistentry>
3850             <term><filename>bin_list.ext</filename></term>
3851
3852             <listitem>
3853               <para>Lagerliste</para>
3854             </listitem>
3855           </varlistentry>
3856
3857           <varlistentry>
3858             <term><filename>check.ext</filename></term>
3859
3860             <listitem>
3861               <para>?</para>
3862             </listitem>
3863           </varlistentry>
3864
3865           <varlistentry>
3866             <term><filename>invoice.ext</filename></term>
3867
3868             <listitem>
3869               <para>Rechnung</para>
3870             </listitem>
3871           </varlistentry>
3872
3873           <varlistentry>
3874             <term><filename>packing_list.ext</filename></term>
3875
3876             <listitem>
3877               <para>Packliste</para>
3878             </listitem>
3879           </varlistentry>
3880
3881           <varlistentry>
3882             <term><filename>pick_list.ext</filename></term>
3883
3884             <listitem>
3885               <para>Sammelliste</para>
3886             </listitem>
3887           </varlistentry>
3888
3889           <varlistentry>
3890             <term><filename>purchase_delivery_order.ext</filename></term>
3891
3892             <listitem>
3893               <para>Lieferschein (Einkauf)</para>
3894             </listitem>
3895           </varlistentry>
3896
3897           <varlistentry>
3898             <term><filename>purcharse_order.ext</filename></term>
3899
3900             <listitem>
3901               <para>Bestellung an Lieferanten</para>
3902             </listitem>
3903           </varlistentry>
3904
3905           <varlistentry>
3906             <term><filename>request_quotation.ext</filename></term>
3907
3908             <listitem>
3909               <para>Anfrage an Lieferanten</para>
3910             </listitem>
3911           </varlistentry>
3912
3913           <varlistentry>
3914             <term><filename>sales_delivery_order.ext</filename></term>
3915
3916             <listitem>
3917               <para>Lieferschein (Verkauf)</para>
3918             </listitem>
3919           </varlistentry>
3920
3921           <varlistentry>
3922             <term><filename>sales_order.ext</filename></term>
3923
3924             <listitem>
3925               <para>Bestellung</para>
3926             </listitem>
3927           </varlistentry>
3928
3929           <varlistentry>
3930             <term><filename>sales_quotation.ext</filename></term>
3931
3932             <listitem>
3933               <para>Angebot an Kunden</para>
3934             </listitem>
3935           </varlistentry>
3936
3937           <varlistentry>
3938             <term><filename>zahlungserinnerung.ext</filename></term>
3939
3940             <listitem>
3941               <para>Mahnung (Dateiname im Programm konfigurierbar)</para>
3942             </listitem>
3943           </varlistentry>
3944
3945           <varlistentry>
3946             <term><filename>zahlungserinnerung_invoice.ext</filename></term>
3947
3948             <listitem>
3949               <para>Rechnung über Mahngebühren (Dateiname im Programm
3950               konfigurierbar)</para>
3951             </listitem>
3952           </varlistentry>
3953         </variablelist>
3954       </sect2>
3955
3956       <sect2 id="dokumentenvorlagen-und-variablen.dateinamen-erweitert">
3957         <title>Sprache, Drucker und E-Mail</title>
3958
3959         <para>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
3960         eingearbeitet. So wird aus der Vorlage
3961         <filename>sales_order.ext</filename> bei Sprache
3962         <function>de</function> und Druckerkürzel <function>lpr2</function>
3963         der Vorlagenname <filename>sales_order_de_lpr2.ext</filename>.
3964         Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
3965         bekommen dann noch das Kürzel <filename>_email</filename>, der
3966         vollständige Vorlagenname wäre dann
3967         <filename>sales_order_email_de_lpr2.ext</filename>. In allen Fällen
3968         kann eine Standarddatei <filename>default.ext</filename> hinterlegt
3969         werden. Diese wird verwendet, wenn keine der anderen Varianten
3970         gefunden wird.</para>
3971
3972         <para>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
3973         der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
3974         verschickt wird, ist:</para>
3975
3976         <orderedlist>
3977           <listitem>
3978             <para><filename>sales_order_email_de_lpr2.tex</filename></para>
3979           </listitem>
3980
3981           <listitem>
3982             <para><filename>sales_order_de_lpr2.tex</filename></para>
3983           </listitem>
3984
3985           <listitem>
3986             <para><filename>sales_order.tex</filename></para>
3987           </listitem>
3988
3989           <listitem>
3990             <para><filename>default.tex</filename></para>
3991           </listitem>
3992         </orderedlist>
3993
3994         <para>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
3995         Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
3996         siehe dazu <xref
3997         linkend="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"/>.</para>
3998       </sect2>
3999
4000       <sect2 id="dokumentenvorlagen-und-variablen.allgemeine-variablen">
4001         <title>Allgemeine Variablen, die in allen Vorlagen vorhanden
4002         sind</title>
4003
4004         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"
4005                xreflabel="Metainformationen zur angeforderten Vorlage">
4006           <title>Metainformationen zur angeforderten Vorlage</title>
4007
4008           <para>Diese Variablen liefern Informationen darüber welche Variante
4009           einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
4010           Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
4011           Formulare einbinden möchten.</para>
4012
4013           <variablelist>
4014             <varlistentry>
4015               <term><varname>template_meta.formname</varname></term>
4016
4017               <listitem>
4018                 <para>Basisname der Vorlage. Identisch mit der <link
4019                 linkend="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">Zurordnung
4020                 zu den Dateinamen</link> ohne die Erweiterung. Ein
4021                 Verkaufsauftrag enthält hier
4022                 <constant>sales_order</constant>.</para>
4023               </listitem>
4024             </varlistentry>
4025
4026             <varlistentry>
4027               <term><varname>template_meta.language.description</varname></term>
4028
4029               <listitem>
4030                 <para>Beschreibung der verwendeten Sprache</para>
4031               </listitem>
4032             </varlistentry>
4033
4034             <varlistentry>
4035               <term><varname>template_meta.language.template_code</varname></term>
4036
4037               <listitem>
4038                 <para>Vorlagenkürzel der verwendeten Sprache, identisch mit
4039                 dem Kürzel das im Dateinamen verwendetet wird.</para>
4040               </listitem>
4041             </varlistentry>
4042
4043             <varlistentry>
4044               <term><varname>template_meta.language.output_numberformat</varname></term>
4045
4046               <listitem>
4047                 <para>Zahlenformat der verwendeten Sprache in der Form
4048                 "<constant>1.000,00</constant>". Experimentell! Nur
4049                 interessant für Vorlagen die mit unformatierten Werten
4050                 arbeiten.</para>
4051               </listitem>
4052             </varlistentry>
4053
4054             <varlistentry>
4055               <term><varname>template_meta.language.output_dateformat</varname></term>
4056
4057               <listitem>
4058                 <para>Datumsformat der verwendeten Sprache in der Form
4059                 "<constant>dd.mm.yyyy</constant>". Experimentell! Nur
4060                 interessant für Vorlagen die mit unformatierten Werten
4061                 arbeiten.</para>
4062               </listitem>
4063             </varlistentry>
4064
4065             <varlistentry>
4066               <term><varname>template_meta.format</varname></term>
4067
4068               <listitem>
4069                 <para>Das angeforderte Format. Kann im Moment die Werte
4070                 <constant>pdf</constant>, <constant>postscript</constant>,
4071                 <constant>html</constant>, <constant>opendocument</constant>,
4072                 <constant>opendocument_pdf</constant> und
4073                 <constant>excel</constant> enthalten.</para>
4074               </listitem>
4075             </varlistentry>
4076
4077             <varlistentry>
4078               <term><varname>template_meta.extension</varname></term>
4079
4080               <listitem>
4081                 <para>Dateierweiterung, wie im Dateinamen. Wird aus
4082                 <constant>format</constant> entschieden.</para>
4083               </listitem>
4084             </varlistentry>
4085
4086             <varlistentry>
4087               <term><varname>template_meta.media</varname></term>
4088
4089               <listitem>
4090                 <para>Ausgabemedium. Kann zur Zeit die Werte
4091                 <constant>screen</constant> für Bildschirm,
4092                 <constant>email</constant> für E-Mail (triggert das
4093                 <constant>_email</constant> Kürzel im Dateinamen),
4094                 <constant>printer</constant> für Drucker, und
4095                 <constant>queue</constant> für Warteschlange enthalten.</para>
4096               </listitem>
4097             </varlistentry>
4098
4099             <varlistentry>
4100               <term><varname>template_meta.printer.description</varname></term>
4101
4102               <listitem>
4103                 <para>Beschreibung des ausgewählten Druckers</para>
4104               </listitem>
4105             </varlistentry>
4106
4107             <varlistentry>
4108               <term><varname>template_meta.printer.template_code</varname></term>
4109
4110               <listitem>
4111                 <para>Vorlagenürzel des ausgewählten Druckers, identisch mit
4112                 dem Kürzel das im Dateinamen verwendetet wird.</para>
4113               </listitem>
4114             </varlistentry>
4115
4116             <varlistentry>
4117               <term><varname>template_meta.tmpfile</varname></term>
4118
4119               <listitem>
4120                 <para>Datei-Prefix für temporäre Dateien.</para>
4121               </listitem>
4122             </varlistentry>
4123           </variablelist>
4124         </sect3>
4125
4126         <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.kunden-lieferanten">
4127           <title>Stammdaten von Kunden und Lieferanten</title>
4128
4129           <variablelist>
4130             <varlistentry>
4131               <term><varname>account_number</varname></term>
4132
4133               <listitem>
4134                 <para>Kontonummer</para>
4135               </listitem>
4136             </varlistentry>
4137
4138             <varlistentry>
4139               <term><varname>bank</varname></term>
4140
4141               <listitem>
4142                 <para>Name der Bank</para>
4143               </listitem>
4144             </varlistentry>
4145
4146             <varlistentry>
4147               <term><varname>bank_code</varname></term>
4148
4149               <listitem>
4150                 <para>Bankleitzahl</para>
4151               </listitem>
4152             </varlistentry>
4153
4154             <varlistentry>
4155               <term><varname>bic</varname></term>
4156
4157               <listitem>
4158                 <para>Bank-Identifikations-Code (Bank Identifier Code,
4159                 BIC)</para>
4160               </listitem>
4161             </varlistentry>
4162
4163             <varlistentry>
4164               <term><varname>business</varname></term>
4165
4166               <listitem>
4167                 <para>Kunden-/Lieferantentyp</para>
4168               </listitem>
4169             </varlistentry>
4170
4171             <varlistentry>
4172               <term><varname>city</varname></term>
4173
4174               <listitem>
4175                 <para>Stadt</para>
4176               </listitem>
4177             </varlistentry>
4178
4179             <varlistentry>
4180               <term><varname>contact</varname></term>
4181
4182               <listitem>
4183                 <para>Kontakt</para>
4184               </listitem>
4185             </varlistentry>
4186
4187             <varlistentry>
4188               <term><varname>country</varname></term>
4189
4190               <listitem>
4191                 <para>Land</para>
4192               </listitem>
4193             </varlistentry>
4194
4195             <varlistentry>
4196               <term><varname>c_vendor_id</varname></term>
4197
4198               <listitem>
4199                 <para>Lieferantennummer beim Kunden (nur Kunden)</para>
4200               </listitem>
4201             </varlistentry>
4202
4203             <varlistentry>
4204               <term><varname>v_customer_id</varname></term>
4205
4206               <listitem>
4207                 <para>Kundennummer beim Lieferanten (nur Lieferanten)</para>
4208               </listitem>
4209             </varlistentry>
4210
4211             <varlistentry>
4212               <term><varname>cp_email</varname></term>
4213
4214               <listitem>
4215                 <para>Email des Ansprechpartners</para>
4216               </listitem>
4217             </varlistentry>
4218
4219             <varlistentry>
4220               <term><varname>cp_givenname</varname></term>
4221
4222               <listitem>
4223                 <para>Vorname des Ansprechpartners</para>
4224               </listitem>
4225             </varlistentry>
4226
4227             <varlistentry>
4228               <term><varname>cp_greeting</varname></term>
4229
4230               <listitem>
4231                 <para>Anrede des Ansprechpartners</para>
4232               </listitem>
4233             </varlistentry>
4234
4235             <varlistentry>
4236               <term><varname>cp_name</varname></term>
4237
4238               <listitem>
4239                 <para>Name des Ansprechpartners</para>
4240               </listitem>
4241             </varlistentry>
4242
4243             <varlistentry>
4244               <term><varname>cp_phone1</varname></term>
4245
4246               <listitem>
4247                 <para>Telefonnummer 1 des Ansprechpartners</para>
4248               </listitem>
4249             </varlistentry>
4250
4251             <varlistentry>
4252               <term><varname>cp_phone2</varname></term>
4253
4254               <listitem>
4255                 <para>Telefonnummer 2 des Ansprechpartners</para>
4256               </listitem>
4257             </varlistentry>
4258
4259             <varlistentry>
4260               <term><varname>cp_title</varname></term>
4261
4262               <listitem>
4263                 <para>Titel des Ansprechpartners</para>
4264               </listitem>
4265             </varlistentry>
4266
4267             <varlistentry>
4268               <term><varname>creditlimit</varname></term>
4269
4270               <listitem>
4271                 <para>Kreditlimit</para>
4272               </listitem>
4273             </varlistentry>
4274
4275             <varlistentry>
4276               <term><varname>customeremail</varname></term>
4277
4278               <listitem>
4279                 <para>Email des Kunden; nur für Kunden</para>
4280               </listitem>
4281             </varlistentry>
4282
4283             <varlistentry>
4284               <term><varname>customerfax</varname></term>
4285
4286               <listitem>
4287                 <para>Faxnummer des Kunden; nur für Kunden</para>
4288               </listitem>
4289             </varlistentry>
4290
4291             <varlistentry>
4292               <term><varname>customernotes</varname></term>
4293
4294               <listitem>
4295                 <para>Bemerkungen beim Kunden; nur für Kunden</para>
4296               </listitem>
4297             </varlistentry>
4298
4299             <varlistentry>
4300               <term><varname>customernumber</varname></term>
4301
4302               <listitem>
4303                 <para>Kundennummer; nur für Kunden</para>
4304               </listitem>
4305             </varlistentry>
4306
4307             <varlistentry>
4308               <term><varname>customerphone</varname></term>
4309
4310               <listitem>
4311                 <para>Telefonnummer des Kunden; nur für Kunden</para>
4312               </listitem>
4313             </varlistentry>
4314
4315             <varlistentry>
4316               <term><varname>discount</varname></term>
4317
4318               <listitem>
4319                 <para>Rabatt</para>
4320               </listitem>
4321             </varlistentry>
4322
4323             <varlistentry>
4324               <term><varname>email</varname></term>
4325
4326               <listitem>
4327                 <para>Emailadresse</para>
4328               </listitem>
4329             </varlistentry>
4330
4331             <varlistentry>
4332               <term><varname>fax</varname></term>
4333
4334               <listitem>
4335                 <para>Faxnummer</para>
4336               </listitem>
4337             </varlistentry>
4338
4339             <varlistentry>
4340               <term><varname>gln</varname></term>
4341
4342               <listitem>
4343                 <para>GLN (Globale Lokationsnummer)</para>
4344               </listitem>
4345             </varlistentry>
4346
4347             <varlistentry>
4348               <term><varname>greeting</varname></term>
4349
4350               <listitem>
4351                 <para>Anrede</para>
4352               </listitem>
4353             </varlistentry>
4354
4355             <varlistentry>
4356               <term><varname>homepage</varname></term>
4357
4358               <listitem>
4359                 <para>Homepage</para>
4360               </listitem>
4361             </varlistentry>
4362
4363             <varlistentry>
4364               <term><varname>iban</varname></term>
4365
4366               <listitem>
4367                 <para>Internationale Kontonummer (International Bank Account
4368                 Number, IBAN)</para>
4369               </listitem>
4370             </varlistentry>
4371
4372             <varlistentry>
4373               <term><varname>language</varname></term>
4374
4375               <listitem>
4376                 <para>Sprache</para>
4377               </listitem>
4378             </varlistentry>
4379
4380             <varlistentry>
4381               <term><varname>name</varname></term>
4382
4383               <listitem>
4384                 <para>Firmenname</para>
4385               </listitem>
4386             </varlistentry>
4387
4388             <varlistentry>
4389               <term><varname>payment_description</varname></term>
4390
4391               <listitem>
4392                 <para>Name der Zahlart</para>
4393               </listitem>
4394             </varlistentry>
4395
4396             <varlistentry>
4397               <term><varname>payment_terms</varname></term>
4398
4399               <listitem>
4400                 <para>Zahlungskonditionen</para>
4401               </listitem>
4402             </varlistentry>
4403
4404             <varlistentry>
4405               <term><varname>phone</varname></term>
4406
4407               <listitem>
4408                 <para>Telefonnummer</para>
4409               </listitem>
4410             </varlistentry>
4411
4412             <varlistentry>
4413               <term><varname>shiptocity</varname></term>
4414
4415               <listitem>
4416                 <para>Stadt (Lieferadresse) <link
4417                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4418               </listitem>
4419             </varlistentry>
4420
4421             <varlistentry>
4422               <term><varname>shiptocontact</varname></term>
4423
4424               <listitem>
4425                 <para>Kontakt (Lieferadresse) <link
4426                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4427               </listitem>
4428             </varlistentry>
4429
4430             <varlistentry>
4431               <term><varname>shiptocountry</varname></term>
4432
4433               <listitem>
4434                 <para>Land (Lieferadresse) <link
4435                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4436               </listitem>
4437             </varlistentry>
4438
4439             <varlistentry>
4440               <term><varname>shiptodepartment_1</varname></term>
4441
4442               <listitem>
4443                 <para>Abteilung 1 (Lieferadresse) <link
4444                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4445               </listitem>
4446             </varlistentry>
4447
4448             <varlistentry>
4449               <term><varname>shiptodepartment_2</varname></term>
4450
4451               <listitem>
4452                 <para>Abteilung 2 (Lieferadresse) <link
4453                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4454               </listitem>
4455             </varlistentry>
4456
4457             <varlistentry>
4458               <term><varname>shiptoemail</varname></term>
4459
4460               <listitem>
4461                 <para>Email (Lieferadresse) <link
4462                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4463               </listitem>
4464             </varlistentry>
4465
4466             <varlistentry>
4467               <term><varname>shiptofax</varname></term>
4468
4469               <listitem>
4470                 <para>Fax (Lieferadresse) <link
4471                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4472               </listitem>
4473             </varlistentry>
4474
4475             <varlistentry>
4476               <term><varname>shiptogln</varname></term>
4477
4478               <listitem>
4479                 <para>GLN (Globale Lokationsnummer) (Lieferadresse) <link
4480                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4481               </listitem>
4482             </varlistentry>
4483
4484             <varlistentry>
4485               <term><varname>shiptoname</varname></term>
4486
4487               <listitem>
4488                 <para>Firmenname (Lieferadresse) <link
4489                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4490               </listitem>
4491             </varlistentry>
4492
4493             <varlistentry>
4494               <term><varname>shiptophone</varname></term>
4495
4496               <listitem>
4497                 <para>Telefonnummer (Lieferadresse) <link
4498                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4499               </listitem>
4500             </varlistentry>
4501
4502             <varlistentry>
4503               <term><varname>shiptostreet</varname></term>
4504
4505               <listitem>
4506                 <para>Straße und Hausnummer (Lieferadresse) <link
4507                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4508               </listitem>
4509             </varlistentry>
4510
4511             <varlistentry>
4512               <term><varname>shiptozipcode</varname></term>
4513
4514               <listitem>
4515                 <para>Postleitzahl (Lieferadresse) <link
4516                 linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
4517               </listitem>
4518             </varlistentry>
4519
4520             <varlistentry>
4521               <term><varname>street</varname></term>
4522
4523               <listitem>
4524                 <para>Straße und Hausnummer</para>
4525               </listitem>
4526             </varlistentry>
4527
4528             <varlistentry>
4529               <term><varname>taxnumber</varname></term>
4530
4531               <listitem>
4532                 <para>Steuernummer</para>
4533               </listitem>
4534             </varlistentry>
4535
4536             <varlistentry>
4537               <term><varname>ustid</varname></term>
4538
4539               <listitem>
4540                 <para>Umsatzsteuer-Identifikationsnummer</para>
4541               </listitem>
4542             </varlistentry>
4543
4544             <varlistentry>
4545               <term><varname>vendoremail</varname></term>
4546
4547               <listitem>
4548                 <para>Email des Lieferanten; nur für Lieferanten</para>
4549               </listitem>
4550             </varlistentry>
4551
4552             <varlistentry>
4553               <term><varname>vendorfax</varname></term>
4554
4555               <listitem>
4556                 <para>Faxnummer des Lieferanten; nur für Lieferanten</para>
4557               </listitem>
4558             </varlistentry>
4559
4560             <varlistentry>
4561               <term><varname>vendornotes</varname></term>
4562
4563               <listitem>
4564                 <para>Bemerkungen beim Lieferanten; nur für Lieferanten</para>
4565               </listitem>
4566             </varlistentry>
4567
4568             <varlistentry>
4569               <term><varname>vendornumber</varname></term>
4570
4571               <listitem>
4572                 <para>Lieferantennummer; nur für Lieferanten</para>
4573               </listitem>
4574             </varlistentry>
4575
4576             <varlistentry>
4577               <term><varname>vendorphone</varname></term>
4578
4579               <listitem>
4580                 <para>Telefonnummer des Lieferanten; nur für
4581                 Lieferanten</para>
4582               </listitem>
4583             </varlistentry>
4584
4585             <varlistentry>
4586               <term><varname>zipcode</varname></term>
4587
4588               <listitem>
4589                 <para>Postleitzahl</para>
4590               </listitem>
4591             </varlistentry>
4592           </variablelist>
4593
4594           <note id="dokumentenvorlagen-und-variablen.anmerkung-shipto">
4595             <para>Anmerkung: Sind die <varname>shipto*</varname>-Felder in den
4596             Stammdaten nicht eingetragen, so haben die Variablen
4597             <varname>shipto*</varname> den gleichen Wert wie die die
4598             entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich
4599             einige <varname>shipto*</varname>-Variablen so nicht in den
4600             Stammdaten wiederfinden sondern schlicht Kopien der
4601             Lieferdatenvariablen sind (z.B.
4602             <varname>shiptocontact</varname>).</para>
4603           </note>
4604         </sect3>
4605
4606         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-bearbeiter">
4607           <title>Informationen über den Bearbeiter</title>
4608
4609           <variablelist>
4610             <varlistentry>
4611               <term><varname>employee_address</varname></term>
4612
4613               <listitem>
4614                 <para>Adressfeld</para>
4615               </listitem>
4616             </varlistentry>
4617
4618             <varlistentry>
4619               <term><varname>employee_businessnumber</varname></term>
4620
4621               <listitem>
4622                 <para>Firmennummer</para>
4623               </listitem>
4624             </varlistentry>
4625
4626             <varlistentry>
4627               <term><varname>employee_company</varname></term>
4628
4629               <listitem>
4630                 <para>Firmenname</para>
4631               </listitem>
4632             </varlistentry>
4633
4634             <varlistentry>
4635               <term><varname>employee_co_ustid</varname></term>
4636
4637               <listitem>
4638                 <para>Usatzsteuer-Identifikationsnummer</para>
4639               </listitem>
4640             </varlistentry>
4641
4642             <varlistentry>
4643               <term><varname>employee_duns</varname></term>
4644
4645               <listitem>
4646                 <para>DUNS-Nummer</para>
4647               </listitem>
4648             </varlistentry>
4649
4650             <varlistentry>
4651               <term><varname>employee_email</varname></term>
4652
4653               <listitem>
4654                 <para>Email</para>
4655               </listitem>
4656             </varlistentry>
4657
4658             <varlistentry>
4659               <term><varname>employee_fax</varname></term>
4660
4661               <listitem>
4662                 <para>Fax</para>
4663               </listitem>
4664             </varlistentry>
4665
4666             <varlistentry>
4667               <term><varname>employee_name</varname></term>
4668
4669               <listitem>
4670                 <para>voller Name</para>
4671               </listitem>
4672             </varlistentry>
4673
4674             <varlistentry>
4675               <term><varname>employee_signature</varname></term>
4676
4677               <listitem>
4678                 <para>Signatur</para>
4679               </listitem>
4680             </varlistentry>
4681
4682             <varlistentry>
4683               <term><varname>employee_taxnumber</varname></term>
4684
4685               <listitem>
4686                 <para>Steuernummer</para>
4687               </listitem>
4688             </varlistentry>
4689
4690             <varlistentry>
4691               <term><varname>employee_tel</varname></term>
4692
4693               <listitem>
4694                 <para>Telefonnummer</para>
4695               </listitem>
4696             </varlistentry>
4697           </variablelist>
4698         </sect3>
4699
4700         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-verkaeufer">
4701           <title>Informationen über den Verkäufer</title>
4702
4703           <variablelist>
4704             <varlistentry>
4705               <term><varname>salesman_address</varname></term>
4706
4707               <listitem>
4708                 <para>Adressfeld</para>
4709               </listitem>
4710             </varlistentry>
4711
4712             <varlistentry>
4713               <term><varname>salesman_businessnumber</varname></term>
4714
4715               <listitem>
4716                 <para>Firmennummer</para>
4717               </listitem>
4718             </varlistentry>
4719
4720             <varlistentry>
4721               <term><varname>salesman_company</varname></term>
4722
4723               <listitem>
4724                 <para>Firmenname</para>
4725               </listitem>
4726             </varlistentry>
4727
4728             <varlistentry>
4729               <term><varname>salesman_co_ustid</varname></term>
4730
4731               <listitem>
4732                 <para>Usatzsteuer-Identifikationsnummer</para>
4733               </listitem>
4734             </varlistentry>
4735
4736             <varlistentry>
4737               <term><varname>salesman_duns</varname></term>
4738
4739               <listitem>
4740                 <para>DUNS-Nummer</para>
4741               </listitem>
4742             </varlistentry>
4743
4744             <varlistentry>
4745               <term><varname>salesman_email</varname></term>
4746
4747               <listitem>
4748                 <para>Email</para>
4749               </listitem>
4750             </varlistentry>
4751
4752             <varlistentry>
4753               <term><varname>salesman_fax</varname></term>
4754
4755               <listitem>
4756                 <para>Fax</para>
4757               </listitem>
4758             </varlistentry>
4759
4760             <varlistentry>
4761               <term><varname>salesman_name</varname></term>
4762
4763               <listitem>
4764                 <para>voller Name</para>
4765               </listitem>
4766             </varlistentry>
4767
4768             <varlistentry>
4769               <term><varname>salesman_signature</varname></term>
4770
4771               <listitem>
4772                 <para>Signatur</para>
4773               </listitem>
4774             </varlistentry>
4775
4776             <varlistentry>
4777               <term><varname>salesman_taxnumber</varname></term>
4778
4779               <listitem>
4780                 <para>Steuernummer</para>
4781               </listitem>
4782             </varlistentry>
4783
4784             <varlistentry>
4785               <term><varname>salesman_tel</varname></term>
4786
4787               <listitem>
4788                 <para>Telefonnummer</para>
4789               </listitem>
4790             </varlistentry>
4791           </variablelist>
4792         </sect3>
4793
4794         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-steuern">
4795           <title>Variablen für die einzelnen Steuern</title>
4796
4797           <variablelist>
4798             <varlistentry>
4799               <term><varname>tax</varname></term>
4800
4801               <listitem>
4802                 <para>Steuer</para>
4803               </listitem>
4804             </varlistentry>
4805
4806             <varlistentry>
4807               <term><varname>taxbase</varname></term>
4808
4809               <listitem>
4810                 <para>zu versteuernder Betrag</para>
4811               </listitem>
4812             </varlistentry>
4813
4814             <varlistentry>
4815               <term><varname>taxdescription</varname></term>
4816
4817               <listitem>
4818                 <para>Name der Steuer</para>
4819               </listitem>
4820             </varlistentry>
4821
4822             <varlistentry>
4823               <term><varname>taxrate</varname></term>
4824
4825               <listitem>
4826                 <para>Steuersatz</para>
4827               </listitem>
4828             </varlistentry>
4829           </variablelist>
4830         </sect3>
4831
4832         <sect3 id="dokumentenvorlagen-und-variablen.allgemein-lieferbedingungen">
4833           <title>Variablen für Lieferbedingungen</title>
4834
4835           <variablelist>
4836             <varlistentry>
4837               <term><varname>delivery_term</varname></term>
4838
4839               <listitem>
4840                 <para>Datenbank-Objekt der Lieferbedingung</para>
4841               </listitem>
4842             </varlistentry>
4843
4844             <varlistentry>
4845               <term><varname>delivery_term.description</varname></term>
4846
4847               <listitem>
4848                 <para>Beschreibung der Lieferbedingung</para>
4849               </listitem>
4850             </varlistentry>
4851
4852             <varlistentry>
4853               <term><varname>delivery_term.description_long</varname></term>
4854
4855               <listitem>
4856                 <para>Langtext bzw. übersetzter Langtext der
4857                 Lieferbedingung</para>
4858               </listitem>
4859             </varlistentry>
4860           </variablelist>
4861         </sect3>
4862       </sect2>
4863
4864       <sect2 id="dokumentenvorlagen-und-variablen.invoice">
4865         <title>Variablen in Rechnungen</title>
4866
4867         <sect3 id="dokumentenvorlagen-und-variablen.invoice-allgemein">
4868           <title>Allgemeine Variablen</title>
4869
4870           <variablelist>
4871             <varlistentry>
4872               <term><varname>creditremaining</varname></term>
4873
4874               <listitem>
4875                 <para>Verbleibender Kredit</para>
4876               </listitem>
4877             </varlistentry>
4878
4879             <varlistentry>
4880               <term><varname>currency</varname></term>
4881
4882               <listitem>
4883                 <para>Währung</para>
4884               </listitem>
4885             </varlistentry>
4886
4887             <varlistentry>
4888               <term><varname>cusordnumber</varname></term>
4889
4890               <listitem>
4891                 <para>Bestellnummer beim Kunden</para>
4892               </listitem>
4893             </varlistentry>
4894
4895             <varlistentry>
4896               <term><varname>deliverydate</varname></term>
4897
4898               <listitem>
4899                 <para>Lieferdatum</para>
4900               </listitem>
4901             </varlistentry>
4902
4903             <varlistentry>
4904               <term><varname>duedate</varname></term>
4905
4906               <listitem>
4907                 <para>Fälligkeitsdatum</para>
4908               </listitem>
4909             </varlistentry>
4910
4911             <varlistentry>
4912               <term><varname>globalprojectnumber</varname></term>
4913
4914               <listitem>
4915                 <para>Projektnummer des ganzen Beleges</para>
4916               </listitem>
4917             </varlistentry>
4918
4919             <varlistentry>
4920               <term><varname>globalprojectdescription</varname></term>
4921
4922               <listitem>
4923                 <para>Projekbeschreibung des ganzen Beleges</para>
4924               </listitem>
4925             </varlistentry>
4926
4927             <varlistentry>
4928               <term><varname>intnotes</varname></term>
4929
4930               <listitem>
4931                 <para>Interne Bemerkungen</para>
4932               </listitem>
4933             </varlistentry>
4934
4935             <varlistentry>
4936               <term><varname>invdate</varname></term>
4937
4938               <listitem>
4939                 <para>Rechnungsdatum</para>
4940               </listitem>
4941             </varlistentry>
4942
4943             <varlistentry>
4944               <term><varname>invnumber</varname></term>
4945
4946               <listitem>
4947                 <para>Rechnungsnummer</para>
4948               </listitem>
4949             </varlistentry>
4950
4951             <varlistentry>
4952               <term><varname>invtotal</varname></term>
4953
4954               <listitem>
4955                 <para>gesamter Rechnungsbetrag</para>
4956               </listitem>
4957             </varlistentry>
4958
4959             <varlistentry>
4960               <term><varname>notes</varname></term>
4961
4962               <listitem>
4963                 <para>Bemerkungen der Rechnung</para>
4964               </listitem>
4965             </varlistentry>
4966
4967             <varlistentry>
4968               <term><varname>orddate</varname></term>
4969
4970               <listitem>
4971                 <para>Auftragsdatum</para>
4972               </listitem>
4973             </varlistentry>
4974
4975             <varlistentry>
4976               <term><varname>ordnumber</varname></term>
4977
4978               <listitem>
4979                 <para>Auftragsnummer, wenn die Rechnung aus einem Auftrag
4980                 erstellt wurde</para>
4981               </listitem>
4982             </varlistentry>
4983
4984             <varlistentry>
4985               <term><varname>payment_description</varname></term>
4986
4987               <listitem>
4988                 <para>Name der Zahlart</para>
4989               </listitem>
4990             </varlistentry>
4991
4992             <varlistentry>
4993               <term><varname>payment_terms</varname></term>
4994
4995               <listitem>
4996                 <para>Zahlungskonditionen</para>
4997               </listitem>
4998             </varlistentry>
4999
5000             <varlistentry>
5001               <term><varname>quodate</varname></term>
5002
5003               <listitem>
5004                 <para>Angebotsdatum</para>
5005               </listitem>
5006             </varlistentry>
5007
5008             <varlistentry>
5009               <term><varname>quonumber</varname></term>
5010
5011               <listitem>
5012                 <para>Angebotsnummer</para>
5013               </listitem>
5014             </varlistentry>
5015
5016             <varlistentry>
5017               <term><varname>rounding</varname></term>
5018
5019               <listitem>
5020                 <para>Betrag, um den <varname>invtotal</varname> gerundet
5021                 wurde (kann positiv oder negativ sein)</para>
5022               </listitem>
5023             </varlistentry>
5024
5025             <varlistentry>
5026               <term><varname>shippingpoint</varname></term>
5027
5028               <listitem>
5029                 <para>Versandort</para>
5030               </listitem>
5031             </varlistentry>
5032
5033             <varlistentry>
5034               <term><varname>shipvia</varname></term>
5035
5036               <listitem>
5037                 <para>Transportmittel</para>
5038               </listitem>
5039             </varlistentry>
5040
5041             <varlistentry>
5042               <term><varname>subtotal</varname></term>
5043
5044               <listitem>
5045                 <para>Zwischensumme aller Posten ohne Steuern</para>
5046               </listitem>
5047             </varlistentry>
5048
5049             <varlistentry>
5050               <term><varname>total</varname></term>
5051
5052               <listitem>
5053                 <para>Restsumme der Rechnung (Summe abzüglich bereits
5054                 bezahlter Posten)</para>
5055               </listitem>
5056             </varlistentry>
5057
5058             <varlistentry>
5059               <term><varname>transaction_description</varname></term>
5060
5061               <listitem>
5062                 <para>Vorgangsbezeichnung</para>
5063               </listitem>
5064             </varlistentry>
5065
5066             <varlistentry>
5067               <term><varname>transdate</varname></term>
5068
5069               <listitem>
5070                 <para>Auftragsdatum wenn die Rechnung aus einem Auftrag
5071                 erstellt wurde</para>
5072               </listitem>
5073             </varlistentry>
5074           </variablelist>
5075         </sect3>
5076
5077         <sect3 id="dokumentenvorlagen-und-variablen.invoice-posten">
5078           <title>Variablen für jeden Posten auf der Rechnung</title>
5079
5080           <variablelist>
5081             <varlistentry>
5082               <term><varname>bin</varname></term>
5083
5084               <listitem>
5085                 <para>Stellage</para>
5086               </listitem>
5087             </varlistentry>
5088
5089             <varlistentry>
5090               <term><varname>description</varname></term>
5091
5092               <listitem>
5093                 <para>Artikelbeschreibung</para>
5094               </listitem>
5095             </varlistentry>
5096
5097             <varlistentry>
5098               <term><varname>cusordnumber_oe</varname></term>
5099
5100               <listitem>
5101                 <para>Bestellnummer des Kunden aus dem Auftrag, aus dem der
5102                 Posten ursprünglich stammt (nur Verkauf)</para>
5103               </listitem>
5104             </varlistentry>
5105
5106             <varlistentry>
5107               <term><varname>discount</varname></term>
5108
5109               <listitem>
5110                 <para>Rabatt als Betrag</para>
5111               </listitem>
5112             </varlistentry>
5113
5114             <varlistentry>
5115               <term><varname>discount_sub</varname></term>
5116
5117               <listitem>
5118                 <para>Zwischensumme mit Rabatt</para>
5119               </listitem>
5120             </varlistentry>
5121
5122             <varlistentry>
5123               <term><varname>donumber_do</varname></term>
5124
5125               <listitem>
5126                 <para>Lieferscheinnummer des Lieferscheins, aus dem die
5127                 Position ursprünglich stammt, wenn die Rechnung im Rahmen des
5128                 Workflows aus einem Lieferschein erstellt wurde.</para>
5129               </listitem>
5130             </varlistentry>
5131
5132             <varlistentry>
5133               <term><varname>drawing</varname></term>
5134
5135               <listitem>
5136                 <para>Zeichnung</para>
5137               </listitem>
5138             </varlistentry>
5139
5140             <varlistentry>
5141               <term><varname>ean</varname></term>
5142
5143               <listitem>
5144                 <para>EAN-Code</para>
5145               </listitem>
5146             </varlistentry>
5147
5148             <varlistentry>
5149               <term><varname>image</varname></term>
5150
5151               <listitem>
5152                 <para>Grafik</para>
5153               </listitem>
5154             </varlistentry>
5155
5156             <varlistentry>
5157               <term><varname>linetotal</varname></term>
5158
5159               <listitem>
5160                 <para>Zeilensumme (Anzahl * Einzelpreis)</para>
5161               </listitem>
5162             </varlistentry>
5163
5164             <varlistentry>
5165               <term><varname>longdescription</varname></term>
5166
5167               <listitem>
5168                 <para>Langtext</para>
5169               </listitem>
5170             </varlistentry>
5171
5172             <varlistentry>
5173               <term><varname>microfiche</varname></term>
5174
5175               <listitem>
5176                 <para>Mikrofilm</para>
5177               </listitem>
5178             </varlistentry>
5179
5180             <varlistentry>
5181               <term><varname>netprice</varname></term>
5182
5183               <listitem>
5184                 <para>Alternative zu <varname>sellprice</varname>, aber
5185                 <varname>netprice</varname> entspricht dem effektiven
5186                 Einzelpreis und beinhaltet Zeilenrabatt und Preisfaktor.
5187                 <varname>netprice</varname> wird rückgerechnet aus Zeilensumme
5188                 / Menge. Diese Variable ist nützlich, wenn man den gewährten
5189                 Rabatt in der Druckvorlage nicht anzeigen möchte, aber Menge *
5190                 Einzelpreis trotzdem die angezeigte Zeilensumme ergeben soll.
5191                 <varname>netprice</varname> hat nichts mit Netto/Brutto im
5192                 Sinne von Steuern zu tun.</para>
5193               </listitem>
5194             </varlistentry>
5195
5196             <varlistentry>
5197               <term><varname>nodiscount_linetotal</varname></term>
5198
5199               <listitem>
5200                 <para>Zeilensumme ohne Rabatt</para>
5201               </listitem>
5202             </varlistentry>
5203
5204             <varlistentry>
5205               <term><varname>nodiscount_sub</varname></term>
5206
5207               <listitem>
5208                 <para>Zwischensumme ohne Rabatt</para>
5209               </listitem>
5210             </varlistentry>
5211
5212             <varlistentry>
5213               <term><varname>number</varname></term>
5214
5215               <listitem>
5216                 <para>Artikelnummer</para>
5217               </listitem>
5218             </varlistentry>
5219
5220             <varlistentry>
5221               <term><varname>ordnumber_oe</varname></term>
5222
5223               <listitem>
5224                 <para>Auftragsnummer des Originalauftrags, aus dem der Posten
5225                 ursprünglich stammt. Nützlich, wenn die Rechnung aus mehreren
5226                 Lieferscheinen zusammengefasst wurde, oder wenn zwischendurch
5227                 eine Sammelauftrag aus mehreren Aufträgen erstellt wurde. In
5228                 letzterem Fall wird die unsprüngliche Auftragsnummer
5229                 angezeigt.</para>
5230               </listitem>
5231             </varlistentry>
5232
5233             <varlistentry>
5234               <term><varname>p_discount</varname></term>
5235
5236               <listitem>
5237                 <para>Rabatt in Prozent</para>
5238               </listitem>
5239             </varlistentry>
5240
5241             <varlistentry>
5242               <term><varname>partnotes</varname></term>
5243
5244               <listitem>
5245                 <para>Die beim Artikel gespeicherten Bemerkungen</para>
5246               </listitem>
5247             </varlistentry>
5248
5249             <varlistentry>
5250               <term><varname>partsgroup</varname></term>
5251
5252               <listitem>
5253                 <para>Warengruppe</para>
5254               </listitem>
5255             </varlistentry>
5256
5257             <varlistentry>
5258               <term><varname>price_factor</varname></term>
5259
5260               <listitem>
5261                 <para>Der Preisfaktor als Zahl, sofern einer eingestellt
5262                 ist</para>
5263               </listitem>
5264             </varlistentry>
5265
5266             <varlistentry>
5267               <term><varname>price_factor_name</varname></term>
5268
5269               <listitem>
5270                 <para>Der Name des Preisfaktors, sofern einer eingestellt
5271                 ist</para>
5272               </listitem>
5273             </varlistentry>
5274
5275             <varlistentry>
5276               <term><varname>projectnumber</varname></term>
5277
5278               <listitem>
5279                 <para>Projektnummer</para>
5280               </listitem>
5281             </varlistentry>
5282
5283             <varlistentry>
5284               <term><varname>projectdescription</varname></term>
5285
5286               <listitem>
5287                 <para>Projektbeschreibung</para>
5288               </listitem>
5289             </varlistentry>
5290
5291             <varlistentry>
5292               <term><varname>qty</varname></term>
5293
5294               <listitem>
5295                 <para>Anzahl</para>
5296               </listitem>
5297             </varlistentry>
5298
5299             <varlistentry>
5300               <term><varname>reqdate</varname></term>
5301
5302               <listitem>
5303                 <para>Lieferdatum</para>
5304               </listitem>
5305             </varlistentry>
5306
5307             <varlistentry>
5308               <term><varname>runningnumber</varname></term>
5309
5310               <listitem>
5311                 <para>Position auf der Rechnung (1, 2, 3...)</para>
5312               </listitem>
5313             </varlistentry>
5314
5315             <varlistentry>
5316               <term><varname>sellprice</varname></term>
5317
5318               <listitem>
5319                 <para>Verkaufspreis</para>
5320               </listitem>
5321             </varlistentry>
5322
5323             <varlistentry>
5324               <term><varname>serialnumber</varname></term>
5325
5326               <listitem>
5327                 <para>Seriennummer</para>
5328               </listitem>
5329             </varlistentry>
5330
5331             <varlistentry>
5332               <term><varname>tax_rate</varname></term>
5333
5334               <listitem>
5335                 <para>Steuersatz</para>
5336               </listitem>
5337             </varlistentry>
5338
5339             <varlistentry>
5340               <term><varname>transdate_do</varname></term>
5341
5342               <listitem>
5343                 <para>Datum des Lieferscheins, wenn die Rechnung im Rahmen des
5344                 Workflows aus einem Lieferschein stammte.</para>
5345               </listitem>
5346             </varlistentry>
5347
5348             <varlistentry>
5349               <term><varname>transdate_oe</varname></term>
5350
5351               <listitem>
5352                 <para>Datum des Auftrags, wenn die Rechnung im Rahmen des
5353                 Workflows aus einem Auftrag erstellt wurde. Wenn es
5354                 Sammelaufträge gab wird das Datum des ursprünglichen Auftrags
5355                 genommen.</para>
5356               </listitem>
5357             </varlistentry>
5358
5359             <varlistentry>
5360               <term><varname>transdate_quo</varname></term>
5361
5362               <listitem>
5363                 <para>Datum des Angebots, wenn die Position im Rahmen des
5364                 Workflows aus einem Angebot stammte.</para>
5365               </listitem>
5366             </varlistentry>
5367
5368             <varlistentry>
5369               <term><varname>unit</varname></term>
5370
5371               <listitem>
5372                 <para>Einheit</para>
5373               </listitem>
5374             </varlistentry>
5375
5376             <varlistentry>
5377               <term><varname>weight</varname></term>
5378
5379               <listitem>
5380                 <para>Gewicht</para>
5381               </listitem>
5382             </varlistentry>
5383           </variablelist>
5384
5385           <para>Für jeden Posten gibt es ein Unterarray mit den Informationen
5386           über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
5387           einer <function>foreach</function>-Schleife ausgegeben werden, da
5388           für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
5389           können. Die Variablen dafür lauten:</para>
5390
5391           <variablelist>
5392             <varlistentry>
5393               <term><varname>make</varname></term>
5394
5395               <listitem>
5396                 <para>Lieferant</para>
5397               </listitem>
5398             </varlistentry>
5399
5400             <varlistentry>
5401               <term><varname>model</varname></term>
5402
5403               <listitem>
5404                 <para>Lieferantenartikelnummer</para>
5405               </listitem>
5406             </varlistentry>
5407           </variablelist>
5408         </sect3>
5409
5410         <sect3 id="dokumentenvorlagen-und-variablen.invoice-zahlungen">
5411           <title>Variablen für die einzelnen Zahlungseingänge</title>
5412
5413           <variablelist>
5414             <varlistentry>
5415               <term><varname>payment</varname></term>
5416
5417               <listitem>
5418                 <para>Betrag</para>
5419               </listitem>
5420             </varlistentry>
5421
5422             <varlistentry>
5423               <term><varname>paymentaccount</varname></term>
5424
5425               <listitem>
5426                 <para>Konto</para>
5427               </listitem>
5428             </varlistentry>
5429
5430             <varlistentry>
5431               <term><varname>paymentdate</varname></term>
5432
5433               <listitem>
5434                 <para>Datum</para>
5435               </listitem>
5436             </varlistentry>
5437
5438             <varlistentry>
5439               <term><varname>paymentmemo</varname></term>
5440
5441               <listitem>
5442                 <para>Memo</para>
5443               </listitem>
5444             </varlistentry>
5445
5446             <varlistentry>
5447               <term><varname>paymentsource</varname></term>
5448
5449               <listitem>
5450                 <para>Beleg</para>
5451               </listitem>
5452             </varlistentry>
5453           </variablelist>
5454         </sect3>
5455
5456         <sect3 id="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc">
5457           <title>Benutzerdefinierte Kunden- und Lieferantenvariablen</title>
5458
5459           <para>Die vom Benutzer definierten Variablen für Kunden und
5460           Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
5461           ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem Präfix
5462           <varname>vc_cvar_</varname> und dem vom Benutzer festgelegten
5463           Variablennamen zusammen.</para>
5464
5465           <para>Beispiel: Der Benutzer hat eine Variable namens
5466           <varname>number_of_employees</varname> definiert, die die Anzahl der
5467           Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
5468           unter dem Namen <varname>vc_cvar_number_of_employees</varname> zur
5469           Verfügung.</para>
5470
5471           <para>Die benutzerdefinierten Variablen der Lieferadressen stehen
5472           unter einem ähnlichen Namensschema zur Verfügung. Hier lautet der
5473           Präfix <varname>shiptocvar_</varname>.</para>
5474
5475           <para>Analog stehen die benutzerdefinierten Variablen für
5476           Ansprechpersonen mit dem Namenspräfix <varname>cp_cvar_</varname>
5477           zur Verfügung.</para>
5478         </sect3>
5479       </sect2>
5480
5481       <sect2 id="dokumentenvorlagen-und-variablen.dunning">
5482         <title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
5483
5484         <sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
5485           <title>Namen der Vorlagen</title>
5486
5487           <para>Die Namen der Vorlagen werden im System-Menü vom Benutzer
5488           eingegeben. Wird für ein Mahnlevel die Option zur automatischen
5489           Erstellung einer Rechnung über die Mahngebühren und Zinsen
5490           aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem
5491           Vorlagenname für diese Mahnstufe mit dem Zusatz
5492           <constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
5493           für die ausgewählte Sprache und den ausgewählten Drucker
5494           angehängt.</para>
5495         </sect3>
5496
5497         <sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
5498           <title>Allgemeine Variablen in Mahnungen</title>
5499
5500           <para>Die Variablen des Bearbeiters, bzw. Verkäufers stehen wie
5501           gewohnt als <varname>employee_...</varname> bzw.
5502           <varname>salesman_...</varname> zur Verfügung. Werden mehrere
5503           Rechnungen in einer Mahnung zusammengefasst, so werden die Metadaten
5504           (Bearbeiter, Abteilung, etc) der ersten angemahnten Rechnung im
5505           Ausdruck genommen.</para>
5506
5507           <para>Die Adressdaten des Kunden stehen als Variablen
5508           <varname>name</varname>, <varname>street</varname>,
5509           <varname>zipcode</varname>, <varname>city</varname>,
5510           <varname>country</varname>, <varname>department_1</varname>,
5511           <varname>department_2</varname>, und <varname>email</varname> zur
5512           Verfügung. Der Ansprechpartner <varname>cp_...</varname> steht auch
5513           zu Verfügung, wird allerdings auch nur von der ersten angemahnten
5514           Rechnung (s.o.) genommen.</para>
5515
5516           <para>Weitere Variablen beinhalten:</para>
5517
5518           <variablelist>
5519             <varlistentry>
5520               <term><varname>dunning_date</varname></term>
5521
5522               <listitem>
5523                 <para>Datum der Mahnung</para>
5524               </listitem>
5525             </varlistentry>
5526
5527             <varlistentry>
5528               <term><varname>dunning_duedate</varname></term>
5529
5530               <listitem>
5531                 <para>Fälligkeitsdatum für diese Mahhnung</para>
5532               </listitem>
5533             </varlistentry>
5534
5535             <varlistentry>
5536               <term><varname>dunning_id</varname></term>
5537
5538               <listitem>
5539                 <para>Mahnungsnummer</para>
5540               </listitem>
5541             </varlistentry>
5542
5543             <varlistentry>
5544               <term><varname>fee</varname></term>
5545
5546               <listitem>
5547                 <para>Kumulative Mahngebühren</para>
5548               </listitem>
5549             </varlistentry>
5550
5551             <varlistentry>
5552               <term><varname>interest_rate</varname></term>
5553
5554               <listitem>
5555                 <para>Zinssatz per anno in Prozent</para>
5556               </listitem>
5557             </varlistentry>
5558
5559             <varlistentry>
5560               <term><varname>total_amount</varname></term>
5561
5562               <listitem>
5563                 <para>Gesamter noch zu zahlender Betrag als
5564                 <function>fee</function> + <function>total_interest</function>
5565                 + <function>total_open_amount</function></para>
5566               </listitem>
5567             </varlistentry>
5568
5569             <varlistentry>
5570               <term><varname>total_interest</varname></term>
5571
5572               <listitem>
5573                 <para>Zinsen per anno über alle Rechnungen</para>
5574               </listitem>
5575             </varlistentry>
5576
5577             <varlistentry>
5578               <term><varname>total_open_amount</varname></term>
5579
5580               <listitem>
5581                 <para>Summe über alle offene Beträge der Rechnungen</para>
5582               </listitem>
5583             </varlistentry>
5584           </variablelist>
5585         </sect3>
5586
5587         <sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
5588           <title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
5589
5590           <variablelist>
5591             <varlistentry>
5592               <term><varname>dn_amount</varname></term>
5593
5594               <listitem>
5595                 <para>Rechnungssumme (brutto)</para>
5596               </listitem>
5597             </varlistentry>
5598
5599             <varlistentry>
5600               <term><varname>dn_duedate</varname></term>
5601
5602               <listitem>
5603                 <para>Originales Fälligkeitsdatum der Rechnung</para>
5604               </listitem>
5605             </varlistentry>
5606
5607             <varlistentry>
5608               <term><varname>dn_dunning_date</varname></term>
5609
5610               <listitem>
5611                 <para>Datum der Mahnung</para>
5612               </listitem>
5613             </varlistentry>
5614
5615             <varlistentry>
5616               <term><varname>dn_dunning_duedate</varname></term>
5617
5618               <listitem>
5619                 <para>Fälligkeitsdatum der Mahnung</para>
5620               </listitem>
5621             </varlistentry>
5622
5623             <varlistentry>
5624               <term><varname>dn_fee</varname></term>
5625
5626               <listitem>
5627                 <para>Kummulative Mahngebühr</para>
5628               </listitem>
5629             </varlistentry>
5630
5631             <varlistentry>
5632               <term><varname>dn_interest</varname></term>
5633
5634               <listitem>
5635                 <para>Zinsen per anno für diese Rechnung</para>
5636               </listitem>
5637             </varlistentry>
5638
5639             <varlistentry>
5640               <term><varname>dn_invnumber</varname></term>
5641
5642               <listitem>
5643                 <para>Rechnungsnummer</para>
5644               </listitem>
5645             </varlistentry>
5646
5647             <varlistentry>
5648               <term><varname>dn_linetotal</varname></term>
5649
5650               <listitem>
5651                 <para>Noch zu zahlender Betrag (ergibt sich aus
5652                 <varname>dn_open_amount</varname> + <varname>dn_fee</varname>
5653                 + <varname>dn_interest</varname>)</para>
5654               </listitem>
5655             </varlistentry>
5656
5657             <varlistentry>
5658               <term><varname>dn_netamount</varname></term>
5659
5660               <listitem>
5661                 <para>Rechnungssumme (netto)</para>
5662               </listitem>
5663             </varlistentry>
5664
5665             <varlistentry>
5666               <term><varname>dn_open_amount</varname></term>
5667
5668               <listitem>
5669                 <para>Offener Rechnungsbetrag</para>
5670               </listitem>
5671             </varlistentry>
5672
5673             <varlistentry>
5674               <term><varname>dn_ordnumber</varname></term>
5675
5676               <listitem>
5677                 <para>Bestellnummer</para>
5678               </listitem>
5679             </varlistentry>
5680
5681             <varlistentry>
5682               <term><varname>dn_transdate</varname></term>
5683
5684               <listitem>
5685                 <para>Rechnungsdatum</para>
5686               </listitem>
5687             </varlistentry>
5688
5689             <varlistentry>
5690               <term><varname>dn_curr</varname></term>
5691
5692               <listitem>
5693                 <para>Währung, in der die Rechnung erstellt wurde. (Die
5694                 Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
5695               </listitem>
5696             </varlistentry>
5697           </variablelist>
5698         </sect3>
5699
5700         <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
5701           <title>Variablen in automatisch erzeugten Rechnungen über
5702           Mahngebühren</title>
5703
5704           <para>Die Variablen des Verkäufers stehen wie gewohnt als
5705           <varname>employee_...</varname> zur Verfügung. Die Adressdaten des
5706           Kunden stehen als Variablen <varname>name</varname>,
5707           <varname>street</varname>, <varname>zipcode</varname>,
5708           <varname>city</varname>, <varname>country</varname>,
5709           <varname>department_1</varname>, <varname>department_2</varname>,
5710           und <varname>email</varname> zur Verfügung.</para>
5711
5712           <para>Weitere Variablen beinhalten:</para>
5713
5714           <variablelist>
5715             <varlistentry>
5716               <term><varname>duedate</varname></term>
5717
5718               <listitem>
5719                 <para>Fälligkeitsdatum der Rechnung</para>
5720               </listitem>
5721             </varlistentry>
5722
5723             <varlistentry>
5724               <term><varname>dunning_id</varname></term>
5725
5726               <listitem>
5727                 <para>Mahnungsnummer</para>
5728               </listitem>
5729             </varlistentry>
5730
5731             <varlistentry>
5732               <term><varname>fee</varname></term>
5733
5734               <listitem>
5735                 <para>Mahngebühren</para>
5736               </listitem>
5737             </varlistentry>
5738
5739             <varlistentry>
5740               <term><varname>interest</varname></term>
5741
5742               <listitem>
5743                 <para>Zinsen</para>
5744               </listitem>
5745             </varlistentry>
5746
5747             <varlistentry>
5748               <term><varname>invamount</varname></term>
5749
5750               <listitem>
5751                 <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
5752                 <varname>interest</varname>)</para>
5753               </listitem>
5754             </varlistentry>
5755
5756             <varlistentry>
5757               <term><varname>invdate</varname></term>
5758
5759               <listitem>
5760                 <para>Rechnungsdatum</para>
5761               </listitem>
5762             </varlistentry>
5763
5764             <varlistentry>
5765               <term><varname>invnumber</varname></term>
5766
5767               <listitem>
5768                 <para>Rechnungsnummer</para>
5769               </listitem>
5770             </varlistentry>
5771           </variablelist>
5772         </sect3>
5773       </sect2>
5774
5775       <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
5776         <title>Variablen in anderen Vorlagen</title>
5777
5778         <sect3>
5779           <title>Einführung</title>
5780
5781           <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
5782           Rechnung. Allerdings heißen die Variablen, die mit
5783           <varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
5784           fangen sie mit <varname>quo</varname> für "quotation" an:
5785           <varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
5786           wiederum fangen sie mit <varname>ord</varname> für "order" an:
5787           <varname>ordnumber</varname> für Bestellnummer etc.</para>
5788
5789           <para>Manche Variablen sind in anderen Vorlagen hingegen gar nicht
5790           vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies
5791           sind Variablen, die vom Geschäftsablauf her in der entsprechenden
5792           Vorlage keine Bedeutung haben oder noch nicht belegt sein
5793           können.</para>
5794
5795           <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
5796           in Rechnungen aufgeführt.</para>
5797         </sect3>
5798
5799         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
5800           <title>Angebote und Preisanfragen</title>
5801
5802           <variablelist>
5803             <varlistentry>
5804               <term><varname>quonumber</varname></term>
5805
5806               <listitem>
5807                 <para>Angebots- bzw. Anfragenummer</para>
5808               </listitem>
5809             </varlistentry>
5810
5811             <varlistentry>
5812               <term><varname>reqdate</varname></term>
5813
5814               <listitem>
5815                 <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
5816                 Preisanfragen)</para>
5817               </listitem>
5818             </varlistentry>
5819
5820             <varlistentry>
5821               <term><varname>transdate</varname></term>
5822
5823               <listitem>
5824                 <para>Angebots- bzw. Anfragedatum</para>
5825               </listitem>
5826             </varlistentry>
5827           </variablelist>
5828         </sect3>
5829
5830         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
5831           <title>Auftragsbestätigungen und Lieferantenaufträge</title>
5832
5833           <variablelist>
5834             <varlistentry>
5835               <term><varname>ordnumber</varname></term>
5836
5837               <listitem>
5838                 <para>Auftragsnummer</para>
5839               </listitem>
5840             </varlistentry>
5841
5842             <varlistentry>
5843               <term><varname>reqdate</varname></term>
5844
5845               <listitem>
5846                 <para>Lieferdatum</para>
5847               </listitem>
5848             </varlistentry>
5849
5850             <varlistentry>
5851               <term><varname>transdate</varname></term>
5852
5853               <listitem>
5854                 <para>Auftragsdatum</para>
5855               </listitem>
5856             </varlistentry>
5857           </variablelist>
5858         </sect3>
5859
5860         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
5861           <title>Lieferscheine (Verkauf und Einkauf)</title>
5862
5863           <variablelist>
5864             <varlistentry>
5865               <term><varname>cusordnumber</varname></term>
5866
5867               <listitem>
5868                 <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
5869                 des Lieferanten (im Einkauf)</para>
5870               </listitem>
5871             </varlistentry>
5872
5873             <varlistentry>
5874               <term><varname>donumber</varname></term>
5875
5876               <listitem>
5877                 <para>Lieferscheinnummer</para>
5878               </listitem>
5879             </varlistentry>
5880
5881             <varlistentry>
5882               <term><varname>transdate</varname></term>
5883
5884               <listitem>
5885                 <para>Lieferscheindatum</para>
5886               </listitem>
5887             </varlistentry>
5888           </variablelist>
5889
5890           <para>Für jede Position eines Lieferscheines gibt es ein Unterarray
5891           mit den Informationen darüber, von welchem Lager und Lagerplatz aus
5892           die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
5893           Lagerplatz sie eingelagert wurden. Diese müssen mittels einer
5894           <function>foreach</function>-Schleife ausgegeben werden. Diese
5895           Variablen sind:</para>
5896
5897           <variablelist>
5898             <varlistentry>
5899               <term><varname>si_bin</varname></term>
5900
5901               <listitem>
5902                 <para>Lagerplatz</para>
5903               </listitem>
5904             </varlistentry>
5905
5906             <varlistentry>
5907               <term><varname>si_chargenumber</varname></term>
5908
5909               <listitem>
5910                 <para>Chargennummer</para>
5911               </listitem>
5912             </varlistentry>
5913
5914             <varlistentry>
5915               <term><varname>si_bestbefore</varname></term>
5916
5917               <listitem>
5918                 <para>Mindesthaltbarkeit</para>
5919               </listitem>
5920             </varlistentry>
5921
5922             <varlistentry>
5923               <term><varname>si_number</varname></term>
5924
5925               <listitem>
5926                 <para>Artikelnummer</para>
5927               </listitem>
5928             </varlistentry>
5929
5930             <varlistentry>
5931               <term><varname>si_qty</varname></term>
5932
5933               <listitem>
5934                 <para>Anzahl bzw. Menge</para>
5935               </listitem>
5936             </varlistentry>
5937
5938             <varlistentry>
5939               <term><varname>si_runningnumber</varname></term>
5940
5941               <listitem>
5942                 <para>Positionsnummer (1, 2, 3 etc)</para>
5943               </listitem>
5944             </varlistentry>
5945
5946             <varlistentry>
5947               <term><varname>si_unit</varname></term>
5948
5949               <listitem>
5950                 <para>Einheit</para>
5951               </listitem>
5952             </varlistentry>
5953
5954             <varlistentry>
5955               <term><varname>si_warehouse</varname></term>
5956
5957               <listitem>
5958                 <para>Lager</para>
5959               </listitem>
5960             </varlistentry>
5961           </variablelist>
5962         </sect3>
5963
5964         <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
5965           <title>Variablen für Sammelrechnung</title>
5966
5967           <variablelist>
5968             <varlistentry>
5969               <term><varname>c0total</varname></term>
5970
5971               <listitem>
5972                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &lt; 30
5973                 Tage</para>
5974               </listitem>
5975             </varlistentry>
5976
5977             <varlistentry>
5978               <term><varname>c30total</varname></term>
5979
5980               <listitem>
5981                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 30
5982                 und &lt; 60 Tage</para>
5983               </listitem>
5984             </varlistentry>
5985
5986             <varlistentry>
5987               <term><varname>c60total</varname></term>
5988
5989               <listitem>
5990                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 60
5991                 und &lt; 90 Tage</para>
5992               </listitem>
5993             </varlistentry>
5994
5995             <varlistentry>
5996               <term><varname>c90total</varname></term>
5997
5998               <listitem>
5999                 <para>Gesamtbetrag aller Rechnungen mit Fälligkeit &gt;= 90
6000                 Tage</para>
6001               </listitem>
6002             </varlistentry>
6003
6004             <varlistentry>
6005               <term><varname>total</varname></term>
6006
6007               <listitem>
6008                 <para>Gesamtbetrag aller Rechnungen</para>
6009               </listitem>
6010             </varlistentry>
6011           </variablelist>
6012
6013           <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
6014
6015           <variablelist>
6016             <varlistentry>
6017               <term><varname>invnumber</varname></term>
6018
6019               <listitem>
6020                 <para>Rechnungsnummer</para>
6021               </listitem>
6022             </varlistentry>
6023
6024             <varlistentry>
6025               <term><varname>invdate</varname></term>
6026
6027               <listitem>
6028                 <para>Rechnungsdatum</para>
6029               </listitem>
6030             </varlistentry>
6031
6032             <varlistentry>
6033               <term><varname>duedate</varname></term>
6034
6035               <listitem>
6036                 <para>Fälligkeitsdatum</para>
6037               </listitem>
6038             </varlistentry>
6039
6040             <varlistentry>
6041               <term><varname>amount</varname></term>
6042
6043               <listitem>
6044                 <para>Summe der Rechnung</para>
6045               </listitem>
6046             </varlistentry>
6047
6048             <varlistentry>
6049               <term><varname>open</varname></term>
6050
6051               <listitem>
6052                 <para>Noch offener Betrag der Rechnung</para>
6053               </listitem>
6054             </varlistentry>
6055
6056             <varlistentry>
6057               <term><varname>c0</varname></term>
6058
6059               <listitem>
6060                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &lt; 30
6061                 Tage</para>
6062               </listitem>
6063             </varlistentry>
6064
6065             <varlistentry>
6066               <term><varname>c30</varname></term>
6067
6068               <listitem>
6069                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 30 und
6070                 &lt; 60 Tage</para>
6071               </listitem>
6072             </varlistentry>
6073
6074             <varlistentry>
6075               <term><varname>c60</varname></term>
6076
6077               <listitem>
6078                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 60 und
6079                 &lt; 90 Tage</para>
6080               </listitem>
6081             </varlistentry>
6082
6083             <varlistentry>
6084               <term><varname>c90</varname></term>
6085
6086               <listitem>
6087                 <para>Noch offener Rechnungsbetrag mit Fälligkeit &gt;= 90
6088                 Tage</para>
6089               </listitem>
6090             </varlistentry>
6091           </variablelist>
6092         </sect3>
6093       </sect2>
6094
6095       <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
6096         <title>Blöcke, bedingte Anweisungen und Schleifen</title>
6097
6098         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
6099           <title>Einführung</title>
6100
6101           <para>Der Parser kennt neben den Variablen einige weitere
6102           Konstrukte, die gesondert behandelt werden. Diese sind wie
6103           Variablennamen in spezieller Weise markiert:
6104           <command>&lt;%anweisung%&gt; ... &lt;%end%&gt;</command></para>
6105
6106           <para>Anmerkung zum <command>&lt;%end%&gt;</command>: Der besseren
6107           Verständlichkeit halber kann man nach dem <command>end</command>
6108           noch beliebig weitere Wörter schreiben, um so zu markieren, welche
6109           Anweisung (z.B. <command>if</command> oder
6110           <command>foreach</command>) damit abgeschlossen wird.</para>
6111
6112           <para>Beispiel: Lautet der Beginn eines Blockes z.B.
6113           <command>&lt;%if type == "sales_quotation"%&gt;</command>, so könnte
6114           er mit <command>&lt;%end%&gt;</command> genauso abgeschlossen werden
6115           wie mit <command>&lt;%end if%&gt;</command> oder auch
6116           <command>&lt;%end type == "sales_quotation"%&gt;</command>.</para>
6117         </sect3>
6118
6119         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
6120           <title>Der if-Block</title>
6121
6122           <programlisting>&lt;%if variablenname%&gt;
6123 ...
6124 &lt;%end%&gt;</programlisting>
6125
6126           <para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
6127           und dem "end" werden nur ausgegeben, wenn die Variable
6128           <varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
6129
6130           <para>Handelt es sich bei der benannten Variable um ein Array, also
6131           um einen Variablennamen, über den man mit <command>&lt;%foreach
6132           variablenname%&gt;</command> iteriert, so wird mit diesem Konstrukt
6133           darauf getestet, ob das Array Elemente enthält. Somit würde im
6134           folgenden Beispiel nur dann eine Liste von Zahlungseingängen samt
6135           ihrer Überschrift "Zahlungseingänge" ausgegeben, wenn tatsächlich
6136           welche getätigt wurden:</para>
6137
6138           <programlisting>&lt;%if payment%&gt;
6139 Zahlungseingänge:
6140  &lt;%foreach payment%&gt;
6141    Am &lt;%paymentdate%&gt;: &lt;%payment%&gt; €
6142  &lt;%end foreach%&gt;
6143 &lt;%end if%&gt;</programlisting>
6144
6145           <para>Die Bedingung kann auch negiert werden, indem das Wort
6146           <function>not</function> nach dem <filename>if</filename> verwendet
6147           wird. Beispiel:</para>
6148
6149           <programlisting>&lt;%if not cp_greeting%&gt;
6150 ...
6151 &lt;%end%&gt;</programlisting>
6152
6153           <para>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
6154           oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
6155           einer Variablen mit einer festen Zeichenkette oder einer anderen
6156           Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
6157           oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
6158           die rechte Seite des Vergleichsoperators in Anführungszeichen
6159           gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
6160           anderer Variablen). Zwei Beispiele, die beide Vergleiche
6161           zeigen:</para>
6162
6163           <programlisting>&lt;%if var1 == "Wert"%&gt;</programlisting>
6164
6165           <para>Testet die Variable <varname>var1</varname> auf
6166           übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
6167           Mittels <function>!=</function> anstelle von <function>==</function>
6168           würde auf Ungleichheit getestet.</para>
6169
6170           <programlisting>&lt;%if var1 == var2%&gt;</programlisting>
6171
6172           <para>Testet die Variable <varname>var1</varname> auf
6173           übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
6174           <function>!=</function> anstelle von <function>==</function> würde
6175           auf Ungleichheit getestet.</para>
6176
6177           <para>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit
6178           auch Tests auf Übereinstimmung mit regulären Ausdrücken ohne
6179           Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
6180           dieselbe Syntax wie oben nur mit <function>=~</function> und
6181           <function>!~</function> als Vergleichsoperatoren.</para>
6182
6183           <para>Beispiel für einen Test, ob die Variable
6184           <varname>intnotes</varname> (interne Bemerkungen) das Wort
6185           <constant>schwierig</constant> enthält:</para>
6186
6187           <programlisting>&lt;%if intnotes =~ "schwierig"%&gt;</programlisting>
6188         </sect3>
6189
6190         <sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
6191           <title>Der foreach-Block</title>
6192
6193           <programlisting>&lt;%foreach variablenname%&gt;
6194 ...
6195 &lt;%end%&gt;</programlisting>
6196
6197           <para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
6198           wie das Perl-Array der Variablen <varname>variablenname</varname>
6199           Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen
6200           Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern
6201           benutzt. In jedem Durchlauf werden die <link
6202           linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
6203           Variablen</link> jeweils auf den Wert für die aktuelle Position
6204           gesetzt.</para>
6205
6206           <para>Die Syntax sieht normalerweise wie folgt aus:</para>
6207
6208           <programlisting>&lt;%foreach number%&gt;
6209 Position: &lt;%runningnumber%&gt;
6210 Anzahl: &lt;%qty%&gt;
6211 Artikelnummer: &lt;%number%&gt;
6212 Beschreibung: &lt;%description%&gt;
6213 ...
6214 &lt;%end%&gt;</programlisting>
6215
6216           <para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
6217           <function>&lt;%foreach%&gt;</function>-Block innerhalb einer
6218           Tabellenzelle auf, so wird die komplette Tabellenzeile so oft
6219           wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der
6220           Inhalt zwischen <function>&lt;%foreach%&gt;</function> und
6221           <function>&lt;%end%&gt;</function> wiederholt, nicht aber die
6222           komplette Zeile, in der er steht.</para>
6223         </sect3>
6224       </sect2>
6225
6226       <sect2 id="dokumentenvorlagen-und-variablen.markup">
6227         <title>Markup-Code zur Textformatierung innerhalb von
6228         Formularen</title>
6229
6230         <para>Wenn der Benutzer innhalb von Formularen in kivitendo Text
6231         anders formatiert haben möchte, so ist dies begrenzt möglich.
6232         kivitendo unterstützt die Textformatierung mit HTML-ähnlichen Tags.
6233         Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung
6234         Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird
6235         dann automatisch in Anweisungen für das ausgewählte Vorlagenformat
6236         (HTML oder PDF über LaTeX) umgesetzt.</para>
6237
6238         <para>Die unterstützen Formatierungen sind:</para>
6239
6240         <variablelist>
6241           <varlistentry>
6242             <term>&lt;b&gt;Text&lt;/b&gt;</term>
6243
6244             <listitem>
6245               <para>Text wird in Fettdruck gesetzt.</para>
6246             </listitem>
6247           </varlistentry>
6248
6249           <varlistentry>
6250             <term>&lt;i&gt;Text&lt;/i&gt;</term>
6251
6252             <listitem>
6253               <para>Text wird kursiv gesetzt.</para>
6254             </listitem>
6255           </varlistentry>
6256
6257           <varlistentry>
6258             <term>&lt;u&gt;Text&lt;/u&gt;</term>
6259
6260             <listitem>
6261               <para>Text wird unterstrichen.</para>
6262             </listitem>
6263           </varlistentry>
6264
6265           <varlistentry>
6266             <term>&lt;s&gt;Text&lt;/s&gt;</term>
6267
6268             <listitem>
6269               <para>Text wird durchgestrichen. Diese Formatierung ist nicht
6270               bei der Ausgabe als PDF über LaTeX verfügbar.</para>
6271             </listitem>
6272           </varlistentry>
6273
6274           <varlistentry>
6275             <term>&lt;bullet&gt;</term>
6276
6277             <listitem>
6278               <para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
6279               unten).</para>
6280             </listitem>
6281           </varlistentry>
6282         </variablelist>
6283
6284         <para>Der Befehl <command>&lt;bullet&gt;</command> funktioniert
6285         momentan auch nur in Latex-Vorlagen.</para>
6286       </sect2>
6287     </sect1>
6288
6289     <sect1 id="excel-templates">
6290       <title>Excel-Vorlagen</title>
6291
6292       <sect2 id="excel-templates.summary">
6293         <title>Zusammenfassung</title>
6294
6295         <para>Dieses Dokument beschreibt den Mechanismus, mit dem
6296         Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
6297         einhergehen.</para>
6298       </sect2>
6299
6300       <sect2 id="excel-templates.usage">
6301         <title>Bedienung</title>
6302
6303         <para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
6304         werden. Die Konfigurationsoption heißt <varname>excel_templates =
6305         1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
6306
6307         <para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
6308         anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
6309         werden. In den normalen Verkaufsmasken taucht nun
6310         <constant>Excel</constant> als auswählbares Format auf und kann von da
6311         an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
6312
6313         <para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
6314         eine Angebotsvorlage und wird unter dem internen Namen der Angebote
6315         <filename>sales_quotation.xls</filename> gespeichert.</para>
6316       </sect2>
6317
6318       <sect2 id="excel-templates.syntax">
6319         <title>Variablensyntax</title>
6320
6321         <para>Einfache Syntax:
6322         <command>&lt;&lt;varname&gt;&gt;</command></para>
6323
6324         <para>Dabei sind <constant>&lt;&lt;</constant> und
6325         <constant>&gt;&gt;</constant> die Delimiter. Da Excel auf festen
6326         Breiten besteht, kann der Tag künstlich verlängert werden, indem
6327         weitere <constant>&lt;</constant> oder <constant>&gt;</constant>
6328         eingefügt werden. Der Tag muss nicht symmetrisch sein.
6329         Beispiel:</para>
6330
6331         <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>
6332
6333         <para>Um die Limitierung der festen Breite zu reduzieren, können
6334         weitere Variablen in einem Block interpoliert werden. Whitespace wird
6335         dazwishen dann erhalten. Beispiel:</para>
6336
6337         <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>
6338
6339         <para>Die Variablen werden interpoliert, und linksbündig mit
6340         Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
6341         lang, werden überzählige Zeichen abgeschnitten.</para>
6342
6343         <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
6344         der Block mit einem Leerzeichen anfängt. Beispiel:</para>
6345
6346         <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>
6347
6348         <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
6349         Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
6350         entfernt.</para>
6351       </sect2>
6352
6353       <sect2 id="excel-templates.limitations">
6354         <title>Einschränkungen</title>
6355
6356         <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
6357         mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
6358         beschränkt sich daher darauf, Textstellen exakt durch einen anderen
6359         Text zu ersetzen.</para>
6360
6361         <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
6362         <command>&lt;%if%&gt;</command> und
6363         <command>&lt;%foreach%&gt;</command> nicht vorhanden. Der Delimiter
6364         <constant>&lt;% %&gt;</constant> kommt in den Headerinformationen
6365         evtl. vor. Deshalb wurde auf den sichereren Delimiter
6366         <constant>&lt;&lt;</constant> und <constant>&gt;&gt;</constant>
6367         gewechselt.</para>
6368       </sect2>
6369     </sect1>
6370
6371     <sect1 id="features.warehouse">
6372       <title>Mandantenkonfiguration Lager</title>
6373
6374       <para>Die Lagerverwaltung in kivitendo funktioniert standardmässig wie
6375       folgt: Wird ein Lager mit einem Lagerplatz angelegt, so gibt es die
6376       Möglichkeit hier über den Menüpunkt Lager entsprechende Warenbewegungen
6377       durchzuführen. Ferner kann jede Position eines Lieferscheins ein-, bzw.
6378       ausgelagert werden (Einkauf-, bzw. Verkauf). Es können beliebig viele
6379       Lager mit beliebig vielen Lagerplätzen abgebildet werden. Die
6380       Lagerbewegungen über einen Lieferschein erfolgt durch Anklicken jeder
6381       Einzelposition und das Auswählen dieser Position zu einem Lager mit
6382       Lagerplatz. Dieses Verfahren lässt sich schrittweise vereinfachen, je
6383       nachdem wie die Einstellungen in der Mandatenkonfiguration gesetzt
6384       werden.</para>
6385
6386       <itemizedlist>
6387         <listitem>
6388           <para><option>Auslagern über Standardlagerplatz</option> Hier wird
6389           ein zusätzlicher Knopf (Auslagern über Standard-Lagerplatz) in dem
6390           Lieferschein-Beleg hinzugefügt, der dann alle Lagerbewegungen über
6391           den Standardlagerplatz (konfigurierbar pro Ware) durchführt.</para>
6392         </listitem>
6393
6394         <listitem>
6395           <para><option>Auslagern ohne Bestandsprüfung</option> Das obige
6396           Auslagern schlägt fehl, wenn die entsprechende Menge für die
6397           Lagerbewegung nicht vorhanden ist, möchte man dies auch ignorieren
6398           und ggf. dann nachpflegen, so kann man eine Negativ-Warenmenge mit
6399           dieser Option erlauben. Hierfür muss ein entsprechender Lagerplatz
6400           (Fehlbestand, o.ä.) konfiguriert sein.</para>
6401         </listitem>
6402       </itemizedlist>
6403
6404       <para>Zusätzliche Funktionshinweise:</para>
6405
6406       <itemizedlist>
6407         <listitem>
6408           <para><option>Standard-Lagerplatz</option> Ist dieser konfiguriert,
6409           wird dies auch als Standard-Voreinstellung bei der Neuerfassung von
6410           Stammdaten → Waren / Dienstleistung / Erzeugnis verwendet.</para>
6411         </listitem>
6412
6413         <listitem>
6414           <para><option>Standard-Lagerplatz verwenden, falls keiner in
6415           Stammdaten definiert</option> Wird beim 'Auslagern über
6416           Standardlagerplatz' keine Standardlagerplatz zu der Ware gefunden,
6417           so wird mit dieser Option einfach der Standardlagerplatz
6418           verwendet.</para>
6419         </listitem>
6420       </itemizedlist>
6421     </sect1>
6422
6423     <sect1 id="features.swiss-charts-of-accounts">
6424       <title>Schweizer Kontenpläne</title>
6425
6426       <para>Seit der Version 3.5 stehen in kivitendo 3 Kontenpläne für den
6427       Einsatz in der Schweiz zur Verfügung, einer für Firmen und
6428       Organisationen, die nicht mehrwertsteuerpflichtig sind, einer für
6429       Firmen, die mehrwertsteuerpflichtig sind und einer speziell für
6430       Vereine.</para>
6431
6432       <para>Die Kontenpläne orientieren sich am in der Schweiz üblicherweise
6433       verwendeten KMU-Kontenrahmen und sind mit der Revision des
6434       Schweizerischen Obligationenrechts (OR) vom 1.1.2013 kompatibel,
6435       insbesondere <literal>Art.957a Abs.2</literal>.</para>
6436
6437       <para>Beim Vereinskontenplan sind standardmässig nur die Konten 1100
6438       (Debitoren CHF) und 1101 (Debitoren EUR) als Buchungskonten im Verkauf
6439       sowie die Konten 2000 (Kreditoren CHF) und 2001 (Kreditoren EUR) als
6440       Buchungskonten im Einkauf vorgesehen. Weitere Konten können bei Bedarf
6441       in den Konto-Detaileinstellungen als Einkaufs- oder Verkaufskonten
6442       konfiguriert werden.</para>
6443
6444       <para>Die Möglichkeit, Saldosteuersätze zu verwenden ist in der
6445       aktuellen Version von kivitendo noch nicht integriert.</para>
6446
6447       <para>Trotzdem können auch Firmen, die per Saldosteuersatz mit der
6448       Eidgenössischen Steuerverwaltung abrechnen, kivitendo bereits nutzen.
6449       Dazu wird der Kontenplan mit MWST ausgewählt. Anschliessend müssen alle
6450       Aufwandskonten editiert werden und dort der Steuersatz auf 0% gesetzt
6451       werden.</para>
6452
6453       <para>So werden bei Kreditorenbuchungen keine Vorsteuern
6454       verbucht.</para>
6455
6456       <para>Bezugssteuern für aus dem Ausland bezogene Dienstleistungen müssen
6457       manuell verbucht werden.</para>
6458
6459       <para>Wünsche für Anpassungen an den Schweizer Kontenplänen sowie
6460       Vorschläge für weitere (z.B. branchenspezifische) Kontenpläne bitte an
6461       <literal>empfang@revamp-it.ch</literal> senden.</para>
6462     </sect1>
6463
6464     <sect1 id="features.part_classification">
6465       <title>Artikelklassifizierung</title>
6466
6467       <sect2>
6468         <title>Übersicht</title>
6469
6470         <para>Die Klassifizierung von Artikeln dient einer weiteren
6471         Gliederung, um zum Beispiel den Einkauf vom Verkauf zu trennen,
6472         gekennzeichnet durch eine Beschreibung (z.B. "Einkauf") und ein Kürzel
6473         (z.B. "E"). Für jede Klassifizierung besteht eine Beschreibung und
6474         eine Abkürzung die normalerweise aus einem Zeichen besteht, kann aber
6475         auf mehrere Zeichen erweitert werden, falls zur Unterscheidung
6476         notwendig. Sinnvoll sind jedoch nur maximal 2 Zeichen.</para>
6477       </sect2>
6478
6479       <sect2>
6480         <title>Basisklassifizierung</title>
6481
6482         <para>Als Basisklassifizierungen gibt es</para>
6483
6484         <itemizedlist>
6485           <listitem>
6486             <para>Einkauf</para>
6487           </listitem>
6488
6489           <listitem>
6490             <para>Verkauf</para>
6491           </listitem>
6492
6493           <listitem>
6494             <para>Handelsware</para>
6495           </listitem>
6496
6497           <listitem>
6498             <para>Produktion</para>
6499           </listitem>
6500
6501           <listitem>
6502             <para>- keine - (diese wird bei einer Aktualisierung für alle
6503             existierenden Artikel verwendet und ist gültig für Verkauf und
6504             Einkauf)</para>
6505           </listitem>
6506         </itemizedlist>
6507
6508         <para>Es können weitere Klassifizierungen angelegt werden. So kann es
6509         z.B. für separat auszuweisende Artikel folgende Klassen geben:</para>
6510
6511         <itemizedlist>
6512           <listitem>
6513             <para>Lieferung (Logistik, Transport) mit Kürzel L</para>
6514           </listitem>
6515
6516           <listitem>
6517             <para>Material (Verpackungsmaterial) mit Kürzel M</para>
6518           </listitem>
6519         </itemizedlist>
6520       </sect2>
6521
6522       <sect2>
6523         <title>Attribute</title>
6524
6525         <para>Bisher haben die Klassifizierungen folgende Attribute, die auch
6526         alle gleichzeitg gültig sein können</para>
6527
6528         <itemizedlist>
6529           <listitem>
6530             <para>gültig für Verkauf - dieser Artikel kann im Verkauf genutzt
6531             werden</para>
6532           </listitem>
6533
6534           <listitem>
6535             <para>gültig für Einkauf - dieser Artikel kann im Einkauf genutzt
6536             werden</para>
6537           </listitem>
6538
6539           <listitem>
6540             <para>separat ausweisen - hierzu gibt es zur Dokumentengenerierung
6541             (LaTeX) eine zusätzliche Variable</para>
6542           </listitem>
6543         </itemizedlist>
6544
6545         <para>Für das Attribut "separat ausweisen" stehen in den
6546         LaTeX-Vorlagen die Variable <emphasis
6547         role="bold">&lt;%non_separate_subtotal%&gt; </emphasis>zur Verfügung,
6548         die alle nicht separat auszuweisenden Artikelkosten saldiert, sowie
6549         pro separat auszuweisenden Klassifizierungen die Variable<emphasis
6550         role="bold">&lt; %separate_X_subtotal%&gt;</emphasis>, wobei X das
6551         Kürzel der Klassifizierung ist.</para>
6552
6553         <para>Im obigen Beispiel wäre das für Lieferkosten <emphasis
6554         role="bold">&lt;%separate_L_subtotal%&gt;</emphasis> und für
6555         Verpackungsmaterial <emphasis role="bold">
6556         &lt;%separate_M_subtotal%&gt;</emphasis>.</para>
6557       </sect2>
6558
6559       <sect2>
6560         <title>Zwei-Zeichen Abkürzung</title>
6561
6562         <para>Der Typ des Artikels und die Klassifizierung werden durch zwei
6563         Buchstaben dargestellt. Der erste Buchstabe ist eine Lokalisierung des
6564         Artikel-Typs ('P','A','S'), deutsch 'W', 'E', und 'D' für Ware
6565         Erzeugnis oder Dienstleistung und ggf. weiterer Typen.</para>
6566
6567         <para>Der zweite Buchstabe (und ggf. auch ein dritter, falls nötig)
6568         entspricht der lokalisierten Abkürzung der Klassifizierung.</para>
6569
6570         <para>Diese Abkürzung wird überall beim Auflisten von Artikeln zur
6571         Erleichterung mit dargestellt.</para>
6572       </sect2>
6573     </sect1>
6574
6575     <sect1 id="features.file_managment">
6576       <title>Dateiverwaltung (Mini-DMS)</title>
6577
6578       <sect2>
6579         <title>Übersicht</title>
6580
6581         <para>Parallel zum alten WebDAV gibt es ein Datei-Management-System,
6582         das Dateien verschiedenen Typs verwaltet. Dies können</para>
6583
6584         <orderedlist>
6585           <listitem>
6586             <para>aus ERP-Daten per LaTeX Template erzeugte
6587             PDF-Dokumente,</para>
6588           </listitem>
6589
6590           <listitem>
6591             <para>zu bestimmten ERP-Daten gehörende Anhangdateien
6592             unterschiedlichen Formats,</para>
6593           </listitem>
6594
6595           <listitem>
6596             <para>per Scanner eingelesene PDF-Dateien,</para>
6597           </listitem>
6598
6599           <listitem>
6600             <para>per E-Mail empfangene Dateianhänge unterschiedlichen
6601             Formats,</para>
6602           </listitem>
6603
6604           <listitem>
6605             <para>sowie speziel für Artikel hochgeladene Bilder sein.</para>
6606           </listitem>
6607         </orderedlist>
6608
6609         <screenshot>
6610           <screeninfo>Übersicht</screeninfo>
6611
6612           <mediaobject>
6613             <imageobject>
6614               <imagedata contentwidth="600" fileref="images/DMS-Overview.png"/>
6615             </imageobject>
6616           </mediaobject>
6617         </screenshot>
6618       </sect2>
6619
6620       <sect2>
6621         <title>Struktur</title>
6622
6623         <para>Über eine vom Speichermedium unabhängige Zwischenschicht werden
6624         die Dateien und ihre Versionen in der Datenbank verwaltet. Darunter
6625         können verschiedene Implementierungen (Backends) gleichzeitig
6626         existieren:</para>
6627
6628         <itemizedlist>
6629           <listitem>
6630             <para>Dateisystem</para>
6631           </listitem>
6632
6633           <listitem>
6634             <para>WebDAV</para>
6635           </listitem>
6636
6637           <listitem>
6638             <para>Schnittstelle zu externen
6639             Dokumenten-Management-Systemen</para>
6640           </listitem>
6641
6642           <listitem>
6643             <para>andere Datenbank</para>
6644           </listitem>
6645
6646           <listitem>
6647             <para>etc ...</para>
6648           </listitem>
6649         </itemizedlist>
6650
6651         <para>Es gibt unterschiedliche Typen von Dateien. Jedem Typ läßt sich
6652         in der Mandantenkonfiguration ein bestimmtes Backend zuordnen.</para>
6653
6654         <itemizedlist>
6655           <listitem>
6656             <para>"document": Das sind entweder generierte, eingescannte oder
6657             hochgeladene PDF-Dateien, die zu bestimmten ERP-Daten
6658             (ERP-Objekte, wie z.B. Rechnung, Lieferschein) gehören.</para>
6659           </listitem>
6660
6661           <listitem>
6662             <para>"attachment": zusätzlich hochgeladene Dokumente, die an
6663             bestimmte ERP-Objekte angehängt werden, z.B. technische
6664             Zeichnungen, Aufmaße. Diese können auch für Artikel, Lieferanten
6665             und Kunden hinterlegt sein.</para>
6666           </listitem>
6667
6668           <listitem>
6669             <para>"image": Bilder für Artikel. Diese können auch verkleinert
6670             in einer Vorschau (Thumbnail) angezeigt werden.</para>
6671           </listitem>
6672         </itemizedlist>
6673
6674         <para>Zusätzlich werden in der Datenbank zu den Dateien neben der
6675         Zuordnung zu ERP-Objekten, Dateityp Dateinamen und Backend, in dem die
6676         Datei gespeichert ist, auch die Quelle der Datei notiert:</para>
6677
6678         <itemizedlist>
6679           <listitem>
6680             <para>"created": vom System erzeugte Dokumente"</para>
6681           </listitem>
6682
6683           <listitem>
6684             <para>"uploaded": hochgeladene Dokumente</para>
6685           </listitem>
6686
6687           <listitem>
6688             <para>"email": vom Mail-System empfangene Dateien</para>
6689           </listitem>
6690
6691           <listitem>
6692             <para>"scanner[1]": von einem oder mehreren Scannern erzeugte
6693             Dateien. Existieren mehrere Scanner, so sind diese durch
6694             unterschiedliche Quellennamen zu definieren.</para>
6695           </listitem>
6696         </itemizedlist>
6697
6698         <para>Je nach Dateityp sind nur bestimmte Quellen zulässig. So gibt es
6699         für "attachment" und "image" nur die Quelle "uploaded". Für "document"
6700         gibt es auf jeden Fall die Quelle "created". Die Quellen "scanner" und
6701         "email" müssen derzeit in der Datenbank konfiguriert werden (siehe
6702         <xref linkend="file_management.dbconfig"/>).</para>
6703       </sect2>
6704
6705       <sect2>
6706         <title>Anwendung</title>
6707
6708         <para>Die Daten werden bei den ERP-Objekten als extra Reiter
6709         dargestellt. Eine Verkaufsrechnung z.B. hat die Reiter "Dokumente" und
6710         "Dateianhänge".</para>
6711
6712         <screenshot>
6713           <screeninfo>Reiter "Dateianhänge"</screeninfo>
6714
6715           <mediaobject>
6716             <imageobject>
6717               <imagedata fileref="images/DMS-Anhaenge.png" scale="50"/>
6718             </imageobject>
6719           </mediaobject>
6720         </screenshot>
6721
6722         <para>Bei den Dateianhängen wird immer nur die aktuelle Version einer
6723         Datei angezeigt. Wird eine Datei mit gleichem Namen hochgeladen, so
6724         wird eine neue Version der Datei erstellt. Vorher wird der Anwender
6725         durch einen Dialog gefragt, ob er eine neue Version anlegen will oder
6726         ob er die Datei umbenennen will, falls es eine neue Datei sein
6727         soll.</para>
6728
6729         <screenshot>
6730           <screeninfo>Reiter "Dateianhänge"</screeninfo>
6731
6732           <mediaobject>
6733             <imageobject>
6734               <imagedata contentwidth="40"
6735                          fileref="images/DMS-Anhaenge-hochladen.png"
6736                          width="100"/>
6737             </imageobject>
6738           </mediaobject>
6739         </screenshot>
6740
6741         <para>Es können mehrere Dateien gleichzeitig hochgeladen werden,
6742         solange in Summe die maximale Größe nicht überschritten wird (siehe
6743         <xref linkend="file_management.clientconfig"/>).</para>
6744
6745         <screenshot>
6746           <screeninfo>Reiter "Dokumente"</screeninfo>
6747
6748           <mediaobject>
6749             <imageobject>
6750               <imagedata fileref="images/DMS-Dokumente.png" width="500"/>
6751             </imageobject>
6752           </mediaobject>
6753         </screenshot>
6754
6755         <para>Sind keine weiteren Quellen für Dokumente konfiguriert, so gibt
6756         es nur "erzeugte Dokumente". Es werden alle Versionen der generierten
6757         Datei angezeigt. Für Verkaufsrechnungen kommen keine anderen Quellen
6758         zur Geltung. Werden entsprechend der <xref
6759         linkend="file_management.dbconfig"/> zusätzliche Quellen konfiguriert,
6760         so sind diese z.B. bei Einkaufsrechnungen sichtbar:</para>
6761
6762         <screenshot>
6763           <screeninfo>Reiter "Dokumente"</screeninfo>
6764
6765           <mediaobject>
6766             <imageobject>
6767               <imagedata contentwidth="600"
6768                          fileref="images/DMS-Dokumente-Scanner.png"/>
6769             </imageobject>
6770           </mediaobject>
6771         </screenshot>
6772
6773         <para>Statt des Löschens wird hier die Datei zurück zur Quelle
6774         verschoben. Somit kann die Datei anschließend an ein anderes
6775         ERP-Objekt angehängt werden.</para>
6776
6777         <para>Derzeit sind "Titel" und "Beschreibung" noch nicht genutzt. Sie
6778         sind bisher nur bei Bildern relevant.</para>
6779       </sect2>
6780
6781       <sect2>
6782         <title>Konfigurierung</title>
6783
6784         <sect3 id="file_management.clientconfig"
6785                xreflabel="Mandantenkonfigurierung">
6786           <title>Mandantenkonfiguration</title>
6787
6788           <sect4>
6789             <title>Reiter "Features"</title>
6790
6791             <para>Unter dem Reiter <emphasis role="bold">Features</emphasis>
6792             im Abschnitt Dateimanagement ist neben dem "alten" WebDAV das
6793             Dateimangement generell zu- und abschaltbar, sowie die Zuordnung
6794             der Dateitypen zu Backends. Die Löschbarkeit von Dateien, sowie
6795             die maximale Uploadgröße sind Backend-unabhängig</para>
6796
6797             <screenshot>
6798               <screeninfo>Mandantenkonfig Reiter "Features"</screeninfo>
6799
6800               <mediaobject>
6801                 <imageobject>
6802                   <imagedata fileref="images/DMS-ClientConfig.png" width="500"/>
6803                 </imageobject>
6804               </mediaobject>
6805             </screenshot>
6806
6807             <para>Die einzelnen Backends sind einzeln einschaltbar.
6808             Spezifische Backend-Konfigurierungen sind hier noch
6809             ergänzbar.</para>
6810           </sect4>
6811
6812           <sect4>
6813             <title>Reiter "Allgemeine Dokumentenanhänge"</title>
6814
6815             <para>Unter dem Reiter <emphasis role="bold">Allgemeine
6816             Dokumentenanhänge</emphasis> kann für alle ERP-Dokumente (
6817             Angebote, Aufträge, Lieferscheine, Rechnungen im Verkauf und
6818             Einkauf ) allgemeingültige Anhänge hochgeladen werden.</para>
6819
6820             <screenshot>
6821               <screeninfo>Mandantenkonfig Reiter "Allgemeine
6822               Dokumentenanhänge"</screeninfo>
6823
6824               <mediaobject>
6825                 <imageobject>
6826                   <imagedata fileref="images/DMS-Allgemeine-Dokumentenanhaenge.png"
6827                              width="500"/>
6828                 </imageobject>
6829               </mediaobject>
6830             </screenshot>
6831
6832             <para>Diese Anhänge werden beim Generieren von PDF-Dateien an die
6833             ERP-Dokumente angehängt, z.B. AGBs oder aktuelle Angebote. Es
6834             werden in dem Fall die Daten kopiert, sodass an den ERP-Dokumenten
6835             immer die Anhänge zum Generierungszeitpunkt eingebettet
6836             sind.</para>
6837           </sect4>
6838         </sect3>
6839
6840         <sect3 id="file_management.dbconfig"
6841                xreflabel="Datenbank-Konfigurierung">
6842           <title>Datenbank-Konfigurierung</title>
6843
6844           <para>Die zusätzlichen Quellen für "email" oder ein oder mehrere
6845           Scanner sind derzeit vom Administrator direkt in der
6846           Datenbanktabelle "user_preferences" einzurichten. Die "value" ist im
6847           JSON-Format mit den jeweiligen Werten des Verzeichnisses und der
6848           Beschreibung der Quelle.</para>
6849
6850           <programlisting>
6851  id |  login    |  namespace   | version |   key    |          value
6852 ----+-----------+--------------+---------+----------+---------------------------
6853   1 | #default# | file_sources | 0.00000 | scanner1 |
6854                              {"dir":"/var/tmp/scanner1","desc":"Scanner Einkauf"}
6855   2 | #default# | file_sources | 0.00000 | scanner2 |
6856                              {"dir":"/var/tmp/scanner2","desc":"Scanner Verkauf"}
6857   3 | #default# | file_sources | 0.00000 | emails   |
6858                              {"dir":"/var/tmp/emails","desc":"Empfangene Mails" }
6859           </programlisting>
6860
6861           <para>Es ist daran gedacht, statt dem Default-Eintrag später für
6862           bestimmte Benutzer ('login') bestimmte Quellen zuzulassen. Dies wird
6863           nach Bedarf implementiert.</para>
6864         </sect3>
6865
6866         <sect3 id="file_management.kiviconfig"
6867                xreflabel="kivitendo-Konfigurationsdatei">
6868           <title>kivitendo-Konfigurationsdatei</title>
6869
6870           <para>Dort ist im Abschnitt [paths] der relative oder absolute Pfad
6871           zum Dokumentenwurzelverzeichnis einzutragen. Dieser muss für den
6872           Webserver schreib- und lesbar sein, jedoch nicht ausführbar.</para>
6873
6874           <programlisting>
6875 [paths]
6876 document_path = /var/local/kivi_documents
6877           </programlisting>
6878
6879           <para>Unter diesem Wurzelverzeichnis wird pro Mandant automatisch
6880           ein Unterverzeichnis mit der ID des Mandanten angelegt.</para>
6881         </sect3>
6882       </sect2>
6883     </sect1>
6884
6885     <sect1>
6886       <title>Webshop-Api</title>
6887
6888       <para>Das Shopmodul bietet die Möglichkeit Onlineshopartikel und
6889       Onlineshopbestellungen zu verwalten und zu bearbeiten.</para>
6890
6891       <para>Es ist Multishopfähig, d.h. Artikel können mehreren oder
6892       unterschiedlichen Shops zugeordnet werden. Bestellungen können aus
6893       mehreren Shops geholt werden.</para>
6894
6895       <para>Zur Zeit bietet das Modul nur einen Connector zur REST-Api von
6896       Shopware. Weitere Connectoren können dazu programmiert und eingerichtet
6897       werden.</para>
6898
6899       <sect2>
6900         <title>Rechte für die Webshopapi</title>
6901
6902         <para>In der Administration können folgende Rechte vergeben
6903         werden</para>
6904
6905         <itemizedlist>
6906           <listitem>
6907             <para>Webshopartikel anlegen und bearbeiten</para>
6908           </listitem>
6909
6910           <listitem>
6911             <para>Shopbestellungen holen und bearbeiten</para>
6912           </listitem>
6913
6914           <listitem>
6915             <para>Shop anlegen und bearbeiten</para>
6916           </listitem>
6917         </itemizedlist>
6918       </sect2>
6919
6920       <sect2>
6921         <title>Konfiguration</title>
6922
6923         <para>Unter System-&gt;Webshops können Shops angelegt und konfiguriert
6924         werden</para>
6925
6926         <mediaobject>
6927           <imageobject>
6928             <imagedata contentdepth="500" contentwidth="700"
6929                        fileref="images/Shop_Listing.png"/>
6930           </imageobject>
6931         </mediaobject>
6932       </sect2>
6933
6934       <sect2>
6935         <title>Webshopartikel</title>
6936
6937         <sect3>
6938           <title>Shopvariablenreiter in Artikelstammdaten</title>
6939
6940           <para>Mit dem Recht "Shopartikel anlegen und bearbeiten" und des
6941           Markers <emphasis role="bold">"Shopartikel" in den Basisdaten
6942           </emphasis>zeigt sich der Reiter "Shopvariablen" in den
6943           Artikelstammdaten. Hier können jetzt die Artikel mit
6944           unterschiedlichen Beschreibung und/oder Preisen für die
6945           konfigutierten Shops angelegt und bearbeitet werden. An dieser
6946           Stelle können auch beliebig viele Bilder dem Shopartikel zugeordnet
6947           werden. Artikelbilder gelten für alle Shops.</para>
6948
6949           <mediaobject>
6950             <imageobject>
6951               <imagedata contentdepth="500" contentwidth="600"
6952                          fileref="images/Shop_Artikel.png"/>
6953             </imageobject>
6954           </mediaobject>
6955
6956           <para>Die Artikelgruppen werden direkt vom Shopsystem geholt somit
6957           ist es möglich einen Artikel auch mehreren Gruppen
6958           zuzuordenen</para>
6959         </sect3>
6960
6961         <sect3>
6962           <title>Shopartikelliste</title>
6963
6964           <para>Unter dem Menu Webshop-&gt;Webshop Artikel hat man nochmal
6965           eine Gesamtübersicht. Von hier aus ist es möglich Artikel im Stapel
6966           unter verschiedenen Kriterien &lt;alles&gt;&lt;nur Preis&gt;&lt;nur
6967           Bestand&gt;&lt;Preis und Bestand&gt; an die jeweiligen Shops
6968           hochzuladen.</para>
6969
6970           <mediaobject>
6971             <imageobject>
6972               <imagedata fileref="images/Shop_Artikel_Listing.png"/>
6973             </imageobject>
6974           </mediaobject>
6975         </sect3>
6976       </sect2>
6977
6978       <sect2>
6979         <title>Bestellimport</title>
6980
6981         <para>Unter dem Menupunkt Webshop-&gt;Webshop Import öffnet sich die
6982         Bestellimportsliste. Hier ist sind Möglichkeiten gegeben Neue
6983         Bestellungen vom Shop abzuholen, geholte Bestellungen im Stapel oder
6984         einzeln als Auftrag zu transferieren. Die Liste kann nach
6985         verschiedenen Kriterien gefiltert werden.</para>
6986
6987         <mediaobject>
6988           <imageobject>
6989             <imagedata fileref="images/Shop_Bestell.png"/>
6990           </imageobject>
6991         </mediaobject>
6992
6993         <para>Bei Einträgen in der Liste.</para>
6994
6995         <itemizedlist>
6996           <listitem>
6997             <para>keine Kundennummer: Es gibt ähnliche Kundendatensätze und
6998             der Datensatz konnte nicht eindeutig zugewiesen werden.</para>
6999           </listitem>
7000
7001           <listitem>
7002             <para>Kundennummer und Rechnungen rot hinterlegt: Der Kunde hat
7003             offene Posten und kann deswegen nicht im Stapel übernommen
7004             werden.</para>
7005           </listitem>
7006
7007           <listitem>
7008             <para>Rechnungsadresse grün hinterlegt: Der Kunde konnte eindeutig
7009             einem Datensatz zugeordnet werden. Die Shopbestellung kann im
7010             Stapel mit dem Button "Anwenden" und wenn markiert als Auftrag
7011             übernommen werden.</para>
7012           </listitem>
7013
7014           <listitem>
7015             <para>Kundennummer vorhanden, aber die Checkbox "Auftrag
7016             erstellen" fehlt. Der Kunde hat vermutlich eine
7017             Shopauftragssperre.</para>
7018           </listitem>
7019
7020           <listitem>
7021             <para>Lieferadresse grau hinterlegt: Optische Anzeige, dass es
7022             sich um eine unterschiedliche Lieferadresse handelt.
7023             Lieferadressen werden aber grundsätzlich beim Transferieren zu
7024             Aufträgen mit übernommen.</para>
7025           </listitem>
7026
7027           <listitem>
7028             <para>In der Spalte Positionen/Betrag/Versandkosten zeigt sich ein
7029             tooltip zu den Positionen.</para>
7030           </listitem>
7031         </itemizedlist>
7032
7033         <para>Maske Auftrag erstellen</para>
7034
7035         <para>Viele Shopsysteme haben drei verschieden Adresstypen Kunden-,
7036         Rechnungs-, und Lieferadresse, die sich auch alle unterscheiden
7037         können. Diese werden im oberen Bereich angezeigt. Es ist möglich jede
7038         dieser Adresse einzeln in kivitendo als Kunde zu übernehmen. Es werden
7039         die Werte Formulareingabe übernommen. Es wird bei einer Änderung
7040         allerdings nur diese in die kivitendo Kundenstammdaten übernommen, die
7041         Shopbestellung bleibt bestehen.</para>
7042
7043         <para>Mit der mittleren Adresse(Rechnungsadresse) im oberen Bereich,
7044         kann ich den ausgewählten kivitendodatensatz des mittleren Bereich
7045         überschreiben. Das ist sinnvoll, wenn ich erkenne, das der Kunde z.B.
7046         umgezogen ist.</para>
7047
7048         <para>Im mittleren Bereich das Adresslisting zeigt:</para>
7049
7050         <itemizedlist>
7051           <listitem>
7052             <para>Rot hinterlegt: Kunde hat eine Shopauftragssperre, diese
7053             muss zuerst deaktiviert werden bevor ich diesem Kunden eine
7054             Shopbestellung zuordnen kann.</para>
7055           </listitem>
7056
7057           <listitem>
7058             <para>Kundenname fett und rot: Hier hat der Kunde eine Bemerkung
7059             in den Stammdaten. Ein Tooltip zeigt diese Bemerkung. Das kann dan
7060             auch der Grund für die Auftragssperre sein.</para>
7061           </listitem>
7062
7063           <listitem>
7064             <para>Die Buttons "Auftrag erstellen" und "Kunde mit
7065             Rechnungsadresse überschreiben" zeigen sich erst, wenn ein Kunde
7066             aus dem Listing ausgewählt ist.</para>
7067           </listitem>
7068
7069           <listitem>
7070             <para>Es ist aber möglich die Shopbestellung zu löschen.</para>
7071           </listitem>
7072
7073           <listitem>
7074             <para>Ist eine Bestellung schon übernommen, zeigen sich an dieser
7075             Stelle, die dazugehörigen Belegverknüpfungen.</para>
7076           </listitem>
7077         </itemizedlist>
7078       </sect2>
7079
7080       <sect2>
7081         <title>Mapping der Daten</title>
7082
7083         <para>Das Mapping der kivitendo Daten mit den Shopdaten geschieht in
7084         der Datei SL/ShopConnector/&lt;SHOPCONNECTORNAME&gt;.pm
7085         z.B.:SL/ShopConnector/Shopware.pm</para>
7086
7087         <para>In dieser Datei gibt es einen Bereich wo die Bestellpostionen,
7088         die Bestellkopfdaten und die Artikeldaten gemapt werden. In dieser
7089         Datei kann ein individelles Mapping dann gemacht werden. Zu Shopware
7090         gibt es hier eine sehr gute Dokumentation: <ulink
7091         url="https://developers.shopware.com/developers-guide/rest-api/">https://developers.shopware.com/developers-guide/rest-api/</ulink></para>
7092       </sect2>
7093     </sect1>
7094   </chapter>
7095
7096   <chapter>
7097     <title>Entwicklerdokumentation</title>
7098
7099     <sect1 id="devel.globals" xreflabel="Globale Variablen">
7100       <title>Globale Variablen</title>
7101
7102       <sect2>
7103         <title>Wie sehen globale Variablen in Perl aus?</title>
7104
7105         <para>Globale Variablen liegen in einem speziellen namespace namens
7106         "main", der von überall erreichbar ist. Darüber hinaus sind bareword
7107         globs global und die meisten speziellen Variablen sind...
7108         speziell.</para>
7109
7110         <para>Daraus ergeben sich folgende Formen:</para>
7111
7112         <variablelist>
7113           <varlistentry>
7114             <term><literal>$main::form</literal></term>
7115
7116             <listitem>
7117               <para>expliziter Namespace "main"</para>
7118             </listitem>
7119           </varlistentry>
7120
7121           <varlistentry>
7122             <term><literal>$::form</literal></term>
7123
7124             <listitem>
7125               <para>impliziter Namespace "main"</para>
7126             </listitem>
7127           </varlistentry>
7128
7129           <varlistentry>
7130             <term><literal>open FILE, "file.txt"</literal></term>
7131
7132             <listitem>
7133               <para><varname>FILE</varname> ist global</para>
7134             </listitem>
7135           </varlistentry>
7136
7137           <varlistentry>
7138             <term><literal>$_</literal></term>
7139
7140             <listitem>
7141               <para>speziell</para>
7142             </listitem>
7143           </varlistentry>
7144         </variablelist>
7145
7146         <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
7147         Schlüsselwort wie "<function>global</function>", mit dem man
7148         importieren kann. <function>my</function>, <function>our</function>
7149         und <function>local</function> machen was anderes.</para>
7150
7151         <variablelist>
7152           <varlistentry>
7153             <term><literal>my $form</literal></term>
7154
7155             <listitem>
7156               <para>lexikalische Variable, gültig bis zum Ende des
7157               Scopes</para>
7158             </listitem>
7159           </varlistentry>
7160
7161           <varlistentry>
7162             <term><literal>our $form</literal></term>
7163
7164             <listitem>
7165               <para><varname>$form</varname> referenziert ab hier
7166               <varname>$PACKAGE::form</varname>.</para>
7167             </listitem>
7168           </varlistentry>
7169
7170           <varlistentry>
7171             <term><literal>local $form</literal></term>
7172
7173             <listitem>
7174               <para>Alle Änderungen an <varname>$form</varname> werden am Ende
7175               des scopes zurückgesetzt</para>
7176             </listitem>
7177           </varlistentry>
7178         </variablelist>
7179       </sect2>
7180
7181       <sect2>
7182         <title>Warum sind globale Variablen ein Problem?</title>
7183
7184         <para>Das erste Problem ist <productname>FCGI</productname>.</para>
7185
7186         <para><productname>SQL-Ledger</productname> hat fast alles im globalen
7187         namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
7188         Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
7189         aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
7190         Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
7191         Datenbankverbindungen, weil die sehr lange zum Initialisieren
7192         brauchen.</para>
7193
7194         <para>Das zweite Problem ist <function>strict</function>. Unter
7195         <function>strict</function> werden alle Variablen die nicht explizit
7196         mit <function>Package</function>, <function>my</function> oder
7197         <function>our</function> angegeben werden als Tippfehler angemarkert,
7198         dies hat, seit der Einführung, u.a. schon so manche langwierige
7199         Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
7200         angegeben werden, werden die nicht geprüft, und somit kann sich
7201         schnell ein Tippfehler einschleichen.</para>
7202       </sect2>
7203
7204       <sect2>
7205         <title>Kanonische globale Variablen</title>
7206
7207         <para>Um dieses Problem im Griff zu halten gibt es einige wenige
7208         globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
7209         vorgegebenen Eigenschaften, und alles andere sollte anderweitig
7210         umhergereicht werden.</para>
7211
7212         <para>Diese Variablen sind im Moment die folgenden neun:</para>
7213
7214         <itemizedlist>
7215           <listitem>
7216             <para><varname>$::form</varname></para>
7217           </listitem>
7218
7219           <listitem>
7220             <para><varname>%::myconfig</varname></para>
7221           </listitem>
7222
7223           <listitem>
7224             <para><varname>$::locale</varname></para>
7225           </listitem>
7226
7227           <listitem>
7228             <para><varname>$::lxdebug</varname></para>
7229           </listitem>
7230
7231           <listitem>
7232             <para><varname>$::auth</varname></para>
7233           </listitem>
7234
7235           <listitem>
7236             <para><varname>$::lx_office_conf</varname></para>
7237           </listitem>
7238
7239           <listitem>
7240             <para><varname>$::instance_conf</varname></para>
7241           </listitem>
7242
7243           <listitem>
7244             <para><varname>$::dispatcher</varname></para>
7245           </listitem>
7246
7247           <listitem>
7248             <para><varname>$::request</varname></para>
7249           </listitem>
7250         </itemizedlist>
7251
7252         <para>Damit diese nicht erneut als Müllhalde missbraucht werden, im
7253         Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
7254         Eigenschaften (Konventionen):</para>
7255
7256         <sect3>
7257           <title>$::form</title>
7258
7259           <itemizedlist>
7260             <listitem>
7261               <para>Ist ein Objekt der Klasse
7262               "<classname>Form</classname>"</para>
7263             </listitem>
7264
7265             <listitem>
7266               <para>Wird nach jedem Request gelöscht</para>
7267             </listitem>
7268
7269             <listitem>
7270               <para>Muss auch in Tests und Konsolenscripts vorhanden
7271               sein.</para>
7272             </listitem>
7273
7274             <listitem>
7275               <para>Enthält am Anfang eines Requests die Requestparameter vom
7276               User</para>
7277             </listitem>
7278
7279             <listitem>
7280               <para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
7281               cachen, das wird aber momentan absichtlich zerstört</para>
7282             </listitem>
7283           </itemizedlist>
7284
7285           <para><varname>$::form</varname> wurde unter <productname>SQL
7286           Ledger</productname> als Gottobjekt für alles missbraucht. Sämtliche
7287           alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
7288           heißt, alles was einem lieb ist (alle Variablen die einem ans Herz
7289           gewachsen sind), sollte man vor einem Aufruf (!) von zum Beispiel
7290           <function>IS-&gt;retrieve_customer()</function> in Sicherheit
7291           bringen.</para>
7292
7293           <para>Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man
7294           Berechnung in einem bestimmten Format durchführt (SL/Form.pm Zeile
7295           3552, Stand version 2.7beta), um dies hinterher wieder auf den
7296           richtigen Wert zu setzen:</para>
7297
7298           <programlisting>  my $saved_numberformat    = $::myconfig{numberformat};
7299   $::myconfig{numberformat} = $numberformat;
7300   # (...) div Berechnungen
7301   $::myconfig{numberformat} = $saved_numberformat;</programlisting>
7302
7303           <para>Das Objekt der Klasse Form hat leider im Moment noch viele
7304           zentrale Funktionen die vom internen Zustand abhängen, deshalb bitte
7305           nie einfach zerstören oder überschreiben (zumindestens nicht kurz
7306           vor einem Release oder in Absprache über bspw. die devel-Liste ;-).
7307           Es geht ziemlich sicher etwas kaputt.</para>
7308
7309           <para><varname>$::form</varname> ist gleichzeitig der Standard Scope
7310           in den <productname>Template::Toolkit</productname> Templates
7311           außerhalb der Controller: der Ausdruck <function>[% var
7312           %]</function> greift auf <varname>$::form-&gt;{var}</varname> zu.
7313           Unter Controllern ist der Standard Scope anders, da lautet der
7314           Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
7315           normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
7316           <function>&lt;%var%&gt;</function> zeigt auf
7317           <varname>$::form-&gt;{var}</varname>. Nochmal von der anderen Seite
7318           erläutert, innerhalb von (Web-)Templates sieht man häufiger solche
7319           Konstrukte:</para>
7320
7321           <programlisting>[%- IF business %]
7322 # (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
7323 [%- END %]</programlisting>
7324
7325           <para>Entweder wird hier dann $::form-&gt;{business} ausgewertet
7326           oder aber der Funktion
7327           <function>$form-&gt;parse_html_template</function> wird explizit
7328           noch ein zusätzlicher Hash übergeben, der dann auch in den
7329           (Web-)Templates zu Verfügung steht, bspw. so:</para>
7330
7331           <programlisting>$form-&gt;parse_html_template("is/form_header", \%TMPL_VAR);</programlisting>
7332
7333           <para>Innerhalb von Schleifen wird
7334           <varname>$::form-&gt;{TEMPLATE_ARRAYS}{var}[$index]</varname>
7335           bevorzugt, wenn vorhanden. Ein Beispiel findet sich in SL/DO.pm,
7336           welches über alle Positionen eines Lieferscheins in Schleife
7337           läuft:</para>
7338
7339           <programlisting>for $i (1 .. $form-&gt;{rowcount}) {
7340   # ...
7341   push @{ $form-&gt;{TEMPLATE_ARRAYS}{runningnumber} },   $position;
7342   push @{ $form-&gt;{TEMPLATE_ARRAYS}{number} },          $form-&gt;{"partnumber_$i"};
7343   push @{ $form-&gt;{TEMPLATE_ARRAYS}{description} },     $form-&gt;{"description_$i"};
7344   # ...
7345 }</programlisting>
7346         </sect3>
7347
7348         <sect3>
7349           <title>%::myconfig</title>
7350
7351           <itemizedlist>
7352             <listitem>
7353               <para>Das einzige Hash unter den globalen Variablen</para>
7354             </listitem>
7355
7356             <listitem>
7357               <para>Wird spätestens benötigt wenn auf die Datenbank
7358               zugegriffen wird</para>
7359             </listitem>
7360
7361             <listitem>
7362               <para>Wird bei jedem Request neu erstellt.</para>
7363             </listitem>
7364
7365             <listitem>
7366               <para>Enthält die Userdaten des aktuellen Logins</para>
7367             </listitem>
7368
7369             <listitem>
7370               <para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
7371               extern serialisiert werden, weil da auch der Datenbankzugriff
7372               für diesen user drinsteht.</para>
7373             </listitem>
7374
7375             <listitem>
7376               <para>Enthält unter anderem Datumsformat dateformat und
7377               Nummernformat numberformat</para>
7378             </listitem>
7379
7380             <listitem>
7381               <para>Enthält Datenbankzugriffinformationen</para>
7382             </listitem>
7383           </itemizedlist>
7384
7385           <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
7386           ein Userobjekt. Die meisten Funktionen, die etwas anhand des
7387           aktuellen Users entscheiden müssen, befragen
7388           <varname>%::myconfig</varname>. Innerhalb der Anwendungen sind dies
7389           überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
7390           -&gt; <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
7391           Informationen über den Benutzer die über die
7392           Administrator-Schnittstelle eingegeben wurden.</para>
7393         </sect3>
7394
7395         <sect3>
7396           <title>$::locale</title>
7397
7398           <itemizedlist>
7399             <listitem>
7400               <para>Objekt der Klasse "Locale"</para>
7401             </listitem>
7402
7403             <listitem>
7404               <para>Wird pro Request erstellt</para>
7405             </listitem>
7406
7407             <listitem>
7408               <para>Muss auch für Tests und Scripte immer verfügbar
7409               sein.</para>
7410             </listitem>
7411
7412             <listitem>
7413               <para>Cached intern über Requestgrenzen hinweg benutzte
7414               Locales</para>
7415             </listitem>
7416           </itemizedlist>
7417
7418           <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
7419           Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
7420         </sect3>
7421
7422         <sect3>
7423           <title>$::lxdebug</title>
7424
7425           <itemizedlist>
7426             <listitem>
7427               <para>Objekt der Klasse "LXDebug"</para>
7428             </listitem>
7429
7430             <listitem>
7431               <para>Wird global gecached</para>
7432             </listitem>
7433
7434             <listitem>
7435               <para>Muss immer verfügbar sein, in nahezu allen
7436               Funktionen</para>
7437             </listitem>
7438           </itemizedlist>
7439
7440           <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
7441           bereit, wie "<function>enter_sub</function>" und
7442           "<function>leave_sub</function>", mit denen in den alten Modulen ein
7443           brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
7444           der man die Wallclockzeit seit Requeststart loggen kann, sowie
7445           "<function>message</function>" und "<function>dump</function>" mit
7446           denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
7447           packen kann.</para>
7448
7449           <para>Beispielsweise so:</para>
7450
7451           <programlisting>$main::lxdebug-&gt;message(0, 'Meine Konfig:' . Dumper (%::myconfig));
7452 $main::lxdebug-&gt;message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form-&gt;{vc});</programlisting>
7453         </sect3>
7454
7455         <sect3>
7456           <title>$::auth</title>
7457
7458           <itemizedlist>
7459             <listitem>
7460               <para>Objekt der Klasse "SL::Auth"</para>
7461             </listitem>
7462
7463             <listitem>
7464               <para>Wird global gecached</para>
7465             </listitem>
7466
7467             <listitem>
7468               <para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
7469             </listitem>
7470
7471             <listitem>
7472               <para>Wird nach jedem Request resettet.</para>
7473             </listitem>
7474           </itemizedlist>
7475
7476           <para><varname>$::auth</varname> stellt Funktionen bereit um die
7477           Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
7478           vom aktuellen User abhängen wird das Objekt aus
7479           Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
7480           Request kurz resettet.</para>
7481
7482           <para>Dieses Objekt kapselt auch den gerade aktiven Mandanten.
7483           Dessen Einstellungen können über
7484           <literal>$::auth-&gt;client</literal> abgefragt werden; Rückgabewert
7485           ist ein Hash mit den Werten aus der Tabelle
7486           <literal>auth.clients</literal>.</para>
7487         </sect3>
7488
7489         <sect3>
7490           <title>$::lx_office_conf</title>
7491
7492           <itemizedlist>
7493             <listitem>
7494               <para>Objekt der Klasse
7495               "<classname>SL::LxOfficeConf</classname>"</para>
7496             </listitem>
7497
7498             <listitem>
7499               <para>Global gecached</para>
7500             </listitem>
7501
7502             <listitem>
7503               <para>Repräsentation der
7504               <filename>config/kivitendo.conf[.default]</filename>-Dateien</para>
7505             </listitem>
7506           </itemizedlist>
7507
7508           <para>Globale Konfiguration. Configdateien werden zum Start gelesen
7509           und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
7510           das Programm die Konfiguration ändern kann oder sollte.</para>
7511
7512           <para>Beispielsweise ist über den Konfigurationseintrag [debug] die
7513           Debug- und Trace-Log-Datei wie folgt konfiguriert und
7514           verfügbar:</para>
7515
7516           <programlisting>[debug]
7517 file_name = /tmp/kivitendo-debug.log</programlisting>
7518
7519           <para>ist der Key <varname>file</varname> im Programm als
7520           <varname>$::lx_office_conf-&gt;{debug}{file}</varname>
7521           erreichbar.</para>
7522
7523           <warning>
7524             <para>Zugriff auf die Konfiguration erfolgt im Moment über
7525             Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
7526           </warning>
7527         </sect3>
7528
7529         <sect3>
7530           <title>$::instance_conf</title>
7531
7532           <itemizedlist>
7533             <listitem>
7534               <para>Objekt der Klasse
7535               "<classname>SL::InstanceConfiguration</classname>"</para>
7536             </listitem>
7537
7538             <listitem>
7539               <para>wird pro Request neu erstellt</para>
7540             </listitem>
7541           </itemizedlist>
7542
7543           <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
7544           speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
7545           ist hier eine Mandantendatenbank. Beispielsweise überprüft
7546           <programlisting>$::instance_conf-&gt;get_inventory_system eq 'perpetual'</programlisting>
7547           ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para>
7548         </sect3>
7549
7550         <sect3>
7551           <title>$::dispatcher</title>
7552
7553           <itemizedlist>
7554             <listitem>
7555               <para>Objekt der Klasse
7556               "<varname>SL::Dispatcher</varname>"</para>
7557             </listitem>
7558
7559             <listitem>
7560               <para>wird pro Serverprozess erstellt.</para>
7561             </listitem>
7562
7563             <listitem>
7564               <para>enthält Informationen über die technische Verbindung zum
7565               Server</para>
7566             </listitem>
7567           </itemizedlist>
7568
7569           <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
7570           global gespeichert wird. Wird vermutlich irgendwann in einem anderen
7571           Objekt untergebracht.</para>
7572         </sect3>
7573
7574         <sect3>
7575           <title>$::request</title>
7576
7577           <itemizedlist>
7578             <listitem>
7579               <para>Hashref (evtl später Objekt)</para>
7580             </listitem>
7581
7582             <listitem>
7583               <para>Wird pro Request neu initialisiert.</para>
7584             </listitem>
7585
7586             <listitem>
7587               <para>Keine Unterstruktur garantiert.</para>
7588             </listitem>
7589           </itemizedlist>
7590
7591           <para><varname>$::request</varname> ist ein generischer Platz um
7592           Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
7593           at a distance benutzt werden, sondern um lokales memoizing zu
7594           ermöglichen, das garantiert am Ende des Requests zerstört
7595           wird.</para>
7596
7597           <para>Vieles von dem, was im moment in <varname>$::form</varname>
7598           liegt, sollte eigentlich hier liegen. Die groben
7599           Differentialkriterien sind:</para>
7600
7601           <itemizedlist>
7602             <listitem>
7603               <para>Kommt es vom User, und soll unverändert wieder an den
7604               User? Dann <varname>$::form</varname>, steht da eh schon</para>
7605             </listitem>
7606
7607             <listitem>
7608               <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
7609               Requests gebraucht werden? Dann
7610               <varname>$::request</varname></para>
7611             </listitem>
7612
7613             <listitem>
7614               <para>Muss ich von anderen Teilen des Programms lesend drauf
7615               zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
7616               Wrappermethode</para>
7617             </listitem>
7618           </itemizedlist>
7619         </sect3>
7620       </sect2>
7621
7622       <sect2>
7623         <title>Ehemalige globale Variablen</title>
7624
7625         <para>Die folgenden Variablen waren einmal im Programm, und wurden
7626         entfernt.</para>
7627
7628         <sect3>
7629           <title>$::cgi</title>
7630
7631           <itemizedlist>
7632             <listitem>
7633               <para>war nötig, weil cookie Methoden nicht als
7634               Klassenfunktionen funktionieren</para>
7635             </listitem>
7636
7637             <listitem>
7638               <para>Aufruf als Klasse erzeugt Dummyobjekt was im
7639               Klassennamespace gehalten wird und über Requestgrenzen
7640               leaked</para>
7641             </listitem>
7642
7643             <listitem>
7644               <para>liegt jetzt unter
7645               <varname>$::request-&gt;{cgi}</varname></para>
7646             </listitem>
7647           </itemizedlist>
7648         </sect3>
7649
7650         <sect3>
7651           <title>$::all_units</title>
7652
7653           <itemizedlist>
7654             <listitem>
7655               <para>war nötig, weil einige Funktionen in Schleifen zum Teil
7656               ein paar hundert mal pro Request eine Liste der Einheiten
7657               brauchen, und de als Parameter durch einen Riesenstack von
7658               Funktionen geschleift werden müssten.</para>
7659             </listitem>
7660
7661             <listitem>
7662               <para>Liegt jetzt unter
7663               <varname>$::request-&gt;{cache}{all_units}</varname></para>
7664             </listitem>
7665
7666             <listitem>
7667               <para>Wird nur in
7668               <function>AM-&gt;retrieve_all_units()</function> gesetzt oder
7669               gelesen.</para>
7670             </listitem>
7671           </itemizedlist>
7672         </sect3>
7673
7674         <sect3>
7675           <title>%::called_subs</title>
7676
7677           <itemizedlist>
7678             <listitem>
7679               <para>wurde benutzt um callsub deep recursions
7680               abzufangen.</para>
7681             </listitem>
7682
7683             <listitem>
7684               <para>Wurde entfernt, weil callsub nur einen Bruchteil der
7685               möglichen Rekursioenen darstellt, und da nie welche
7686               auftreten.</para>
7687             </listitem>
7688
7689             <listitem>
7690               <para>komplette recursion protection wurde entfernt.</para>
7691             </listitem>
7692           </itemizedlist>
7693         </sect3>
7694       </sect2>
7695     </sect1>
7696
7697     <sect1 id="devel.fcgi">
7698       <title>Entwicklung unter FastCGI</title>
7699
7700       <sect2 id="devel.fcgi.general">
7701         <title>Allgemeines</title>
7702
7703         <para>Wenn Änderungen in der Konfiguration von kivitendo gemacht
7704         werden, muss der Webserver neu gestartet werden.</para>
7705
7706         <para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
7707         achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
7708         müssen folgende Aspekte beachtet werden.</para>
7709       </sect2>
7710
7711       <sect2 id="devel.fcgi.exiting">
7712         <title>Programmende und Ausnahmen</title>
7713
7714         <para>Betrifft die Funktionen <function>warn</function>,
7715         <function>die</function>, <function>exit</function>,
7716         <function>carp</function> und <function>confess</function>.</para>
7717
7718         <para>Fehler, die dass Programm normalerweise sofort beenden (fatale
7719         Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
7720         am Laufen zu halten. Man kann mit <function>die</function>,
7721         <function>confess</function> oder <function>carp</function> Fehler
7722         ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
7723         eigene <function>$::form-</function>error()&gt; tut im Prinzip das
7724         Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
7725         <function>exit</function> hingegen werden nicht abgefangen.
7726         <function>warn</function> wird direkt nach STDERR, also in Server Log
7727         eine Nachricht schreiben (sofern in der Konfiguration nicht die
7728         Warnungen in das kivitendo Log umgeleitet wurden), und
7729         <function>exit</function> wird die Ausführung beenden.</para>
7730
7731         <para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
7732         beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
7733         Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
7734         benutzen, alle anderen Exceptionmechanismen sind ok.</para>
7735       </sect2>
7736
7737       <sect2 id="devel.fcgi.globals">
7738         <title>Globale Variablen</title>
7739
7740         <para>Um zu vermeiden, dass Informationen von einem Request in einen
7741         anderen gelangen, müssen alle globalen Variablen vor einem Request
7742         sauber initialisiert werden. Das ist besonders wichtig im
7743         <varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
7744         diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
7745         werden.</para>
7746
7747         <para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
7748         abgetrennten Block, der alle kanonischen globalen Variablen listet und
7749         erklärt. Bitte keine anderen einführen ohne das sauber zu
7750         dokumentieren.</para>
7751
7752         <para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
7753         man sicher geht, dass man die richtige erwischt.</para>
7754       </sect2>
7755
7756       <sect2 id="devel.fcgi.performance">
7757         <title>Performance und Statistiken</title>
7758
7759         <para>Die kritischen Pfade des Programms sind die Belegmasken, und
7760         unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
7761         Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
7762         4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
7763         sind es je nach Menge der definierten Variablen 1-2s. Ab der
7764         Moose/Rose::DB Version sind es 5-6s.</para>
7765
7766         <para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
7767         den kritischen Pfaden, unter 0,15 sonst.</para>
7768       </sect2>
7769     </sect1>
7770
7771     <sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
7772       <title>SQL-Upgradedateien</title>
7773
7774       <sect2 id="db-upgrade-files.introduction"
7775              xreflabel="Einführung in die Datenbank-Upgradedateien">
7776         <title>Einführung</title>
7777
7778         <para>Datenbankupgrades werden über einzelne Upgrade-Scripte
7779         gesteuert, die sich im Verzeichnis
7780         <filename>sql/Pg-upgrade2</filename> befinden. In diesem Verzeichnis
7781         muss pro Datenbankupgrade eine Datei existieren, die neben den
7782         eigentlich auszuführenden SQL- oder Perl-Befehlen einige
7783         Kontrollinformationen enthält.</para>
7784
7785         <para>Kontrollinformationen definieren Abhängigkeiten und Prioritäten,
7786         sodass Datenbankscripte zwar in einer sicheren Reihenfolge ausgeführt
7787         werden (z.B. darf ein <literal>ALTER TABLE</literal> erst ausgeführt
7788         werden, wenn die Tabelle mit <literal>CREATE TABLE</literal> angelegt
7789         wurde), diese Reihenfolge aber so flexibel ist, dass man keine
7790         Versionsnummern braucht.</para>
7791
7792         <para>kivitendo merkt sich dabei, welches der Upgradescripte in
7793         <filename>sql/Pg-upgrade2</filename> bereits durchgeführt wurde und
7794         führt diese nicht erneut aus. Dazu dient die Tabelle
7795         "<literal>schema_info</literal>", die bei der Anmeldung automatisch
7796         angelegt wird.</para>
7797       </sect2>
7798
7799       <sect2 id="db-upgrade-files.format"
7800              xreflabel="Format der Upgradedateien">
7801         <title>Format der Kontrollinformationen</title>
7802
7803         <para>Die Kontrollinformationen sollten sich am Anfang der jeweiligen
7804         Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
7805         hat dabei das folgende Format:</para>
7806
7807         <para>Für SQL-Upgradedateien:</para>
7808
7809         <programlisting>-- @key: value</programlisting>
7810
7811         <para>Für Perl-Upgradedateien:</para>
7812
7813         <programlisting># @key: value</programlisting>
7814
7815         <para>Leerzeichen vor "<varname>value</varname>" werden
7816         entfernt.</para>
7817
7818         <para>Die folgenden Schlüsselworte werden verarbeitet:</para>
7819
7820         <variablelist>
7821           <varlistentry>
7822             <term><varname>tag</varname></term>
7823
7824             <listitem>
7825               <para>Wird zwingend benötigt. Dies ist der "Name" des Upgrades.
7826               Dieser "tag" kann von anderen Kontrolldateien in ihren
7827               Abhängigkeiten verwendet werden (Schlüsselwort
7828               "<varname>depends</varname>"). Der "tag" ist auch der Name, der
7829               in der Datenbank eingetragen wird.</para>
7830
7831               <para>Normalerweise sollte die Kontrolldatei genau so heißen wie
7832               der "tag", nur mit der Endung ".sql" bzw. "pl".</para>
7833
7834               <para>Ein Tag darf nur aus alphanumerischen Zeichen sowie den
7835               Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht
7836               erlaubt und sollten stattdessen mit Unterstrichen ersetzt
7837               werden.</para>
7838             </listitem>
7839           </varlistentry>
7840
7841           <varlistentry>
7842             <term><varname>charset</varname></term>
7843
7844             <listitem>
7845               <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script
7846               geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
7847               Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei
7848               Abwesenheit des Tags für SQL-Upgradedateien der Zeichensatz
7849               "<literal>ISO-8859-15</literal>" angenommen. Perl-Upgradescripte
7850               hingegen müssen immer in UTF-8 encodiert sein und sollten
7851               demnach auch ein "<literal>use utf8;</literal>"
7852               enthalten.</para>
7853             </listitem>
7854           </varlistentry>
7855
7856           <varlistentry>
7857             <term><varname>description</varname></term>
7858
7859             <listitem>
7860               <para>Benötigt. Eine Beschreibung, was in diesem Update
7861               passiert. Diese wird dem Benutzer beim eigentlichen
7862               Datenbankupdate angezeigt. Während der Tag in Englisch gehalten
7863               sein sollte, sollte die Beschreibung auf Deutsch
7864               erfolgen.</para>
7865             </listitem>
7866           </varlistentry>
7867
7868           <varlistentry>
7869             <term><varname>depends</varname></term>
7870
7871             <listitem>
7872               <para>Optional. Eine mit Leerzeichen getrennte Liste von "tags",
7873               von denen dieses Upgradescript abhängt. kivitendo stellt sicher,
7874               dass die in dieser Liste aufgeführten Scripte bereits
7875               durchgeführt wurden, bevor dieses Script ausgeführt wird.</para>
7876
7877               <para>Abhängigkeiten werden rekursiv betrachtet. Wenn also ein
7878               Script "b" existiert, das von Änderungen in "a" abhängt, und
7879               eine neue Kontrolldatei für "c" erstellt wird, die von
7880               Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den
7881               Tag "b" als Abhängigkeit zu definieren.</para>
7882
7883               <para>Es ist nicht erlaubt, sich selbst referenzierende
7884               Abhängigkeiten zu definieren (z.B. "a" -&gt; "b", "b" -&gt; "c"
7885               und "c" -&gt; "a").</para>
7886             </listitem>
7887           </varlistentry>
7888
7889           <varlistentry>
7890             <term><varname>priority</varname></term>
7891
7892             <listitem>
7893               <para>Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
7894               der Scripte ausgeführt werden, die die gleichen
7895               Abhängigkeitstiefen besitzen. Fehlt dieser Parameter, so wird
7896               der Wert 1000 benutzt.</para>
7897
7898               <para>Dies ist reine Kosmetik. Für echte Reihenfolgen muss
7899               "depends" benutzt werden. kivitendo sortiert die auszuführenden
7900               Scripte zuerst nach der Abhängigkeitstiefe (wenn "z" von "y"
7901               abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von
7902               2, "y" von 1 und "x" von 0. "x" würde hier zuerst ausgeführt,
7903               dann "y", dann "z"), dann nach der Priorität und bei gleicher
7904               Priorität alphabetisch nach dem "tag".</para>
7905             </listitem>
7906           </varlistentry>
7907
7908           <varlistentry>
7909             <term><varname>ignore</varname></term>
7910
7911             <listitem>
7912               <para>Optional. Falls der Wert auf 1 (true) steht, wird das
7913               Skript bei der Anmeldung ignoriert und entsprechend nicht
7914               ausgeführt.</para>
7915             </listitem>
7916           </varlistentry>
7917         </variablelist>
7918       </sect2>
7919
7920       <sect2 id="db-upgrade-files.format-perl-files"
7921              xreflabel="Format von Perl-Upgradedateien">
7922         <title>Format von in Perl geschriebenen
7923         Datenbankupgradescripten</title>
7924
7925         <para>In Perl geschriebene Datenbankscripte werden nicht einfach so
7926         ausgeführt sondern müssen sich an gewisse Konventionen halten. Dafür
7927         bekommen sie aber auch einige Komfortfunktionen bereitgestellt.</para>
7928
7929         <para>Ein Upgradescript stellt dabei eine vollständige Objektklasse
7930         dar, die vom Elternobjekt "<literal>SL::DBUpgrade2::Base</literal>"
7931         erben und eine Funktion namens "<literal>run</literal>" zur Verfügung
7932         stellen muss. Das Script wird ausgeführt, indem eine Instanz dieser
7933         Klasse erzeugt und darauf die erwähnte "<literal>run</literal>"
7934         aufgerufen wird.</para>
7935
7936         <para>Zu beachten ist, dass sich der Paketname der Datei aus dem Wert
7937         für "<literal>@tag</literal>" ableitet. Dabei werden alle Zeichen, die
7938         in Paketnamen ungültig wären (gerade Bindestriche), durch Unterstriche
7939         ersetzt. Insgesamt sieht der Paketname wie folgt aus:
7940         "<literal>SL::DBUpgrade2::tag</literal>".</para>
7941
7942         <para>Welche Komfortfunktionen zur Verfügung stehen, erfahren Sie in
7943         der Perl-Dokumentation zum oben genannten Modul; aufzurufen mit
7944         "<command>perldoc SL/DBUpgrade2/Base.pm</command>".</para>
7945
7946         <para>Ein Mindestgerüst eines gültigen Perl-Upgradescriptes sieht wie
7947         folgt aus:</para>
7948
7949         <programlisting># @tag: beispiel-upgrade-file42
7950 # @description: Ein schönes Beispielscript
7951 # @depends: release_3_1_0
7952 package SL::DBUpgrade2::beispiel_upgrade_file42;
7953
7954 use strict;
7955 use utf8;
7956
7957 use parent qw(SL::DBUpgrade2::Base);
7958
7959 sub run {
7960   my ($self) = @_;
7961
7962   # hier Aktionen ausführen
7963
7964   return 1;
7965 }
7966
7967 1;
7968 </programlisting>
7969       </sect2>
7970
7971       <sect2 id="db-upgrade-files.dbupgrade-tool"
7972              xreflabel="Hilfsscript dbupgrade2_tool.pl">
7973         <title>Hilfsscript dbupgrade2_tool.pl</title>
7974
7975         <para>Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern,
7976         existiert ein Hilfsscript namens
7977         "<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem
7978         kivitendo-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
7979         liest alle Datenbankupgradescripte aus dem Verzeichnis
7980         <filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die
7981         gleichen Methoden wie kivitendo selber, sodass alle Fehlersituationen
7982         von der Kommandozeile überprüft werden können.</para>
7983
7984         <para>Wird dem Script kein weiterer Parameter übergeben, so wird nur
7985         eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
7986         sich aber auch Informationen auf verschiedene Art ausgeben
7987         lassen:</para>
7988
7989         <itemizedlist>
7990           <listitem>
7991             <para>Listenform: "<command>./scripts/dbupgrade2_tool.pl
7992             --list</command>"</para>
7993
7994             <para>Gibt eine Liste aller Scripte aus. Die Liste ist in der
7995             Reihenfolge sortiert, in der kivitendo die Scripte ausführen
7996             würde. Es werden neben der Listenposition der Tag, die
7997             Abhängigkeitstiefe und die Priorität ausgegeben.</para>
7998           </listitem>
7999
8000           <listitem>
8001             <para>Baumform: "<command>./scripts/dbupgrade2_tool.pl
8002             --tree</command>"</para>
8003
8004             <para>Listet alle Tags in Baumform basierend auf den
8005             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von
8006             denen keine anderen abhängen. Die Unterknoten sind Scripte, die
8007             beim übergeordneten Script als Abhängigkeit eingetragen
8008             sind.</para>
8009           </listitem>
8010
8011           <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
8012             <para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl
8013             --rtree</command>"</para>
8014
8015             <para>Listet alle Tags in Baumform basierend auf den
8016             Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte mit
8017             der geringsten Abhängigkeitstiefe. Die Unterknoten sind Scripte,
8018             die das übergeordnete Script als Abhängigkeit eingetragen
8019             haben.</para>
8020           </listitem>
8021
8022           <listitem>
8023             <para>Baumform mit Postscriptausgabe:
8024             "<command>./scripts/dbupgrade2_tool.pl
8025             --graphviz</command>"</para>
8026
8027             <para>Benötigt das Tool "<command>graphviz</command>", um mit
8028             seiner Hilfe die <link
8029             linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte
8030             Baumform</link> in eine Postscriptdatei namens
8031             "<filename>db_dependencies.ps</filename>" auszugeben. Dies ist
8032             vermutlich die übersichtlichste Form, weil hierbei jeder Knoten
8033             nur einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen
8034             können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben
8035             werden.</para>
8036           </listitem>
8037
8038           <listitem>
8039             <para>Scripte, von denen kein anderes Script abhängt:
8040             "<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"</para>
8041
8042             <para>Listet die Tags aller Scripte auf, von denen keine anderen
8043             Scripte abhängen.</para>
8044           </listitem>
8045         </itemizedlist>
8046       </sect2>
8047     </sect1>
8048
8049     <sect1 id="translations-languages" xreflabel="Translations and languages">
8050       <title>Translations and languages</title>
8051
8052       <sect2 id="translations-languages.introduction"
8053              xreflabel="Introduction to translations and languages">
8054         <title>Introduction</title>
8055
8056         <note>
8057           <para>Dieser Abschnitt ist in Englisch geschrieben, um
8058           internationalen Übersetzern die Arbeit zu erleichtern.</para>
8059         </note>
8060
8061         <para>This section describes how localization packages in kivitendo
8062         are built. Currently the only language fully supported is German, and
8063         since most of the internal messages are held in English the English
8064         version is usable too.</para>
8065       </sect2>
8066
8067       <sect2 id="translations-languages.character-set"
8068              xreflabel="Character set">
8069         <title>Character set</title>
8070
8071         <para>All files included in a language pack must use UTF-8 as their
8072         encoding.</para>
8073       </sect2>
8074
8075       <sect2 id="translations-languages.file-structure"
8076              xreflabel="File structure">
8077         <title>File structure</title>
8078
8079         <para>The structure of locales in kivitendo is:</para>
8080
8081         <programlisting>kivitendo/locale/&lt;langcode&gt;/</programlisting>
8082
8083         <para>where &lt;langcode&gt; stands for an abbreviation of the
8084         language package. The builtin packages use two letter <ulink
8085         url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
8086         but the actual name is not relevant for the program and can easily be
8087         extended to <ulink
8088         url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
8089         tags</ulink> (i.e. "en_GB"). In fact the original language packages
8090         from SQL Ledger are named in this way.</para>
8091
8092         <para>In such a language directory the following files are
8093         recognized:</para>
8094
8095         <variablelist>
8096           <varlistentry>
8097             <term>LANGUAGE</term>
8098
8099             <listitem>
8100               <para>This file is mandatory.</para>
8101
8102               <para>The <filename>LANGUAGE</filename> file contains the self
8103               descripted name of the language. It should contain a native
8104               representation first, and in parenthesis an english translation
8105               after that. Example:</para>
8106
8107               <programlisting>Deutsch (German)</programlisting>
8108             </listitem>
8109           </varlistentry>
8110
8111           <varlistentry>
8112             <term>all</term>
8113
8114             <listitem>
8115               <para>This file is mandatory.</para>
8116
8117               <para>The central translation file. It is essentially an inline
8118               Perl script autogenerated by <command>locales.pl</command>. To
8119               generate it, generate the directory and the two files mentioned
8120               above, and execute the following command:</para>
8121
8122               <programlisting>scripts/locales.pl &lt;langcode&gt;</programlisting>
8123
8124               <para>Otherwise you can simply copy one of the other languages.
8125               You will be told how many are missing like this:</para>
8126
8127               <programlisting>$ scripts/locales.pl en
8128 English - 0.6% - 2015/2028 missing</programlisting>
8129
8130               <para>A file named "<filename>missing</filename>" will be
8131               generated and can be edited. You can also edit the
8132               "<filename>all</filename>" file directly. Edit everything you
8133               like to fit the target language and execute
8134               <command>locales.pl</command> again. See how the missing words
8135               get fewer.</para>
8136             </listitem>
8137           </varlistentry>
8138
8139           <varlistentry>
8140             <term>Num2text</term>
8141
8142             <listitem>
8143               <para>Legacy code from SQL Ledger. It provides a means for
8144               numbers to be converted into natural language, like
8145               <literal>1523 =&gt; one thousand five hundred twenty
8146               three</literal>. If you want to provide it, it must be inlinable
8147               Perl code which provides a <function>num2text</function> sub. If
8148               an <function>init</function> sub exists it will be executed
8149               first.</para>
8150
8151               <para>Only used in the check and receipt printing module.</para>
8152             </listitem>
8153           </varlistentry>
8154
8155           <varlistentry>
8156             <term>special_chars</term>
8157
8158             <listitem>
8159               <para>kivitendo comes with a lot of interfaces to different
8160               formats, some of which are rather picky with their accepted
8161               charset. The <filename>special_chars</filename> file contains a
8162               listing of chars not suited for different file format and
8163               provides substitutions. It is written in "Simple Ini" style,
8164               containing a block for every file format.</para>
8165
8166               <para>First entry should be the order of substitution for
8167               entries as a whitespace separated list. All entries are
8168               interpolated, so <literal>\n</literal>, <literal>\x20</literal>
8169               and <literal>\\</literal> all work.</para>
8170
8171               <para>After that every entry is a special char that should be
8172               translated when writing text into such a file.</para>
8173
8174               <para>Example:</para>
8175
8176               <programlisting>[Template/XML]
8177 order=&amp; &lt; &gt; \n
8178 &amp;=&amp;amp;
8179 &lt;=&amp;lt;
8180 &gt;=&amp;gt;
8181 \n=&lt;br&gt;</programlisting>
8182
8183               <para>Note the importance of the order in this example.
8184               Substituting &lt; and &gt; befor &amp; would lead to $gt; become
8185               &amp;amp;gt;</para>
8186
8187               <para>For a list of valid formats, see the German
8188               <filename>special_chars</filename> entry. As of this writing the
8189               following are recognized:</para>
8190
8191               <programlisting>HTML
8192 URL@HTML
8193 Template/HTML
8194 Template/XML
8195 Template/LaTeX
8196 Template/OpenDocument
8197 filenames</programlisting>
8198
8199               <para>The last of which is very machine dependant. Remember that
8200               a lot of characters are forbidden by some filesystems, for
8201               example MS Windows doesn't like ':' in its files where Linux
8202               doesn't mind that. If you want the files created with your
8203               language pack to be portable, find all chars that could cause
8204               trouble.</para>
8205             </listitem>
8206           </varlistentry>
8207
8208           <varlistentry>
8209             <term>missing</term>
8210
8211             <listitem>
8212               <para>This file is not a part of the language package
8213               itself.</para>
8214
8215               <para>This is a file generated by
8216               <command>scripts/locales.pl</command> while processing your
8217               locales. It's only to have the missing entries singled out and
8218               does not belong to a language package.</para>
8219             </listitem>
8220           </varlistentry>
8221
8222           <varlistentry>
8223             <term>lost</term>
8224
8225             <listitem>
8226               <para>This file is not a part of the language package
8227               itself.</para>
8228
8229               <para>Another file generated by
8230               <command>scripts/locales.pl</command>. If for any reason a
8231               translation does not appear anymore and can be deleted, it gets
8232               moved here. The last 50 or so entries deleted are saved here in
8233               case you made a typo, so that you don't have to translate
8234               everything again. If a tranlsation is missing, the lost file is
8235               checked first. If you maintain a language package, you might
8236               want to keep this safe somewhere.</para>
8237             </listitem>
8238           </varlistentry>
8239
8240           <varlistentry>
8241             <term>more/all</term>
8242
8243             <listitem>
8244               <para>This subdir and file is not a part of the language package
8245               itself.</para>
8246
8247               <para>If the directory more exists and contains a file called
8248               all it will be parsed in addition to the mandatory all (see
8249               above). The file is useful if you want to change some
8250               translations for the current installation without conflicting
8251               further upgrades. The file is not autogenerated and has the same
8252               format as the all, but needs another key (more_texts). See the
8253               german translation for an example or copy the following code:
8254               <programlisting>
8255 #!/usr/bin/perl
8256 # -*- coding: utf-8; -*-
8257 # vim: fenc=utf-8
8258
8259 use utf8;
8260
8261 # These are additional texts for custom translations.
8262 # The format is the same as for the normal file all, only
8263 # with another key (more_texts instead of texts).
8264 # The file has the form of 'english text'  =&gt; 'foreign text',
8265
8266 $self-&gt;{more_texts} = {
8267
8268   'Ship via'                    =&gt; 'Terms of delivery',
8269   'Shipping Point'              =&gt; 'Delivery time',
8270 }
8271               </programlisting></para>
8272             </listitem>
8273           </varlistentry>
8274         </variablelist>
8275       </sect2>
8276     </sect1>
8277
8278     <sect1 id="devel.testsuite">
8279       <title>Die kivitendo-Test-Suite</title>
8280
8281       <sect2 id="devel.testsuite.intro">
8282         <title>Einführung</title>
8283
8284         <para>kivitendo enthält eine Suite für automatisierte Tests. Sie
8285         basiert auf dem Standard-Perl-Modul
8286         <literal>Test::More</literal>.</para>
8287
8288         <para>Die grundlegenden Fakten sind:</para>
8289
8290         <itemizedlist>
8291           <listitem>
8292             <para>Alle Tests liegen im Unterverzeichnis
8293             <filename>t/</filename>.</para>
8294           </listitem>
8295
8296           <listitem>
8297             <para>Ein Script (bzw. ein Test) in <filename>t/</filename>
8298             enthält einen oder mehrere Testfälle.</para>
8299           </listitem>
8300
8301           <listitem>
8302             <para>Alle Dateinamen von Tests enden auf <literal>.t</literal>.
8303             Es sind selbstständig ausführbare Perl-Scripte.</para>
8304           </listitem>
8305
8306           <listitem>
8307             <para>Die Test-Suite besteht aus der Gesamtheit aller Tests,
8308             sprich aller Scripte in <filename>t/</filename>, deren Dateiname
8309             auf <literal>.t</literal> endet.</para>
8310           </listitem>
8311         </itemizedlist>
8312       </sect2>
8313
8314       <sect2 id="devel.testsuite.prerequisites">
8315         <title>Voraussetzungen</title>
8316
8317         <para>Für die Ausführung werden neben den für kivitendo eh schon
8318         benötigten Module noch weitere Perl-Module benötigt. Diese
8319         sind:</para>
8320
8321         <itemizedlist>
8322           <listitem>
8323             <para><literal>Test::Deep</literal> (Debian-Paketname:
8324             <literal>libtest-deep-perl</literal>; Fedora:
8325             <literal>perl-Test-Deep</literal>; openSUSE:
8326             <literal>perl-Test-Deep</literal>)</para>
8327           </listitem>
8328
8329           <listitem>
8330             <para><literal>Test::Exception</literal> (Debian-Paketname:
8331             <literal>libtest-exception-perl</literal>; Fedora:
8332             <literal>perl-Test-Exception</literal>; openSUSE:
8333             <literal>perl-Test-Exception</literal>)</para>
8334           </listitem>
8335
8336           <listitem>
8337             <para><literal>Test::Output</literal> (Debian-Paketname:
8338             <literal>libtest-output-perl</literal>; Fedora:
8339             <literal>perl-Test-Output</literal>; openSUSE:
8340             <literal>perl-Test-Output</literal>)</para>
8341           </listitem>
8342
8343           <listitem>
8344             <para><literal>Test::Harness</literal> 3.0.0 oder höher. Dieses
8345             Modul ist ab Perl 5.10.1 Bestandteil der Perl-Distribution und
8346             kann für frühere Versionen aus dem <ulink
8347             url="http://www.cpan.org">CPAN</ulink> bezogen werden.</para>
8348           </listitem>
8349
8350           <listitem>
8351             <para><literal>LWP::Simple</literal> aus dem Paket
8352             <literal>libwww-perl</literal> (Debian-Panetname:
8353             <literal>libwww-perl</literal>; Fedora:
8354             <literal>perl-libwww-perl</literal>; openSUSE:
8355             <literal>perl-libwww-perl</literal>)</para>
8356           </listitem>
8357
8358           <listitem>
8359             <para><literal>URI::Find</literal> (Debian-Panetname:
8360             <literal>liburi-find-perl</literal>; Fedora:
8361             <literal>perl-URI-Find</literal>; openSUSE:
8362             <literal>perl-URI-Find</literal>)</para>
8363           </listitem>
8364
8365           <listitem>
8366             <para><literal>Sys::CPU</literal> (Debian-Panetname:
8367             <literal>libsys-cpu-perl</literal>; Fedora und openSUSE: nicht
8368             vorhanden)</para>
8369           </listitem>
8370
8371           <listitem>
8372             <para><literal>Thread::Pool::Simple</literal> (Debian-Panetname:
8373             <literal>libthread-pool-simple-perl</literal>; Fedora und
8374             openSUSE: nicht vorhanden)</para>
8375           </listitem>
8376         </itemizedlist>
8377
8378         <para>Weitere Voraussetzung ist, dass die Testsuite ihre eigene
8379         Datenbank anlegen kann, um Produktivdaten nicht zu gefährden. Dazu
8380         müssen in der Konfigurationsdatei im Abschnit
8381         <literal>testing/database</literal> Datenbankverbindungsparameter
8382         angegeben werden. Der hier angegebene Benutzer muss weiterhin das
8383         Recht haben, Datenbanken anzulegen und zu löschen.</para>
8384
8385         <para>Der so angegebene Benutzer muss nicht zwingend über
8386         Super-User-Rechte verfügen. Allerdings gibt es einige
8387         Datenbank-Upgrades, die genau diese Rechte benötigen. Für den Fall
8388         kann man in diesem Konfigurationsabschnitt einen weiteren
8389         Benutzeraccount angeben, der dann über Super-User-Rechte verfügt, und
8390         mit dem die betroffenen Upgrades durchgeführt werden. In der
8391         Beispiel-Konfigurationsdatei finden Sie die benötigten
8392         Parameter.</para>
8393       </sect2>
8394
8395       <sect2 id="devel.testsuite.execution">
8396         <title>Existierende Tests ausführen</title>
8397
8398         <para>Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder,
8399         man lässt alle Tests auf einmal ausführen, oder man führt gezielt
8400         einzelne Scripte aus. Für beide Fälle gibt es das Helferscript
8401         <filename>t/test.pl</filename>.</para>
8402
8403         <para>Will man die komplette Test-Suite ausführen, so muss man einfach
8404         nur <filename>t/test.pl</filename> ohne weitere Parameter aus dem
8405         kivitendo-Basisverzeichnis heraus ausführen.</para>
8406
8407         <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen
8408         an <filename>t/test.pl</filename>. Beispielsweise:</para>
8409
8410         <programlisting>t/test.pl t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
8411       </sect2>
8412
8413       <sect2 id="devel.testsuite.meaning_of_scripts">
8414         <title>Bedeutung der verschiedenen Test-Scripte</title>
8415
8416         <para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für
8417         Programmierstil. Einige besonders zu erwähnende, weil auch während der
8418         Entwicklung nützliche Tests sind:</para>
8419
8420         <itemizedlist>
8421           <listitem>
8422             <para><filename>t/001compile.t</filename> -- compiliert alle
8423             Quelldateien und bricht bei Fehlern sofort ab</para>
8424           </listitem>
8425
8426           <listitem>
8427             <para><filename>t/002goodperl.t</filename> -- überprüft alle
8428             Perl-Dateien auf Anwesenheit von '<literal>use
8429             strict</literal>'-Anweisungen</para>
8430           </listitem>
8431
8432           <listitem>
8433             <para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von
8434             <function>system()</function> und <function>exec()</function> auf
8435             Gültigkeit</para>
8436           </listitem>
8437
8438           <listitem>
8439             <para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien
8440             Tab-Zeichen enthalten</para>
8441           </listitem>
8442
8443           <listitem>
8444             <para><filename>t/006spelling.t</filename> -- sucht nach häufigen
8445             Rechtschreibfehlern</para>
8446           </listitem>
8447
8448           <listitem>
8449             <para><filename>t/011pod.t</filename> -- überprüft die Syntax von
8450             Dokumentation im POD-Format auf Gültigkeit</para>
8451           </listitem>
8452         </itemizedlist>
8453
8454         <para>Weitere Test-Scripte überprüfen primär die Funktionsweise
8455         einzelner Funktionen und Module.</para>
8456       </sect2>
8457
8458       <sect2 id="devel.testsuite.create_new">
8459         <title>Neue Test-Scripte erstellen</title>
8460
8461         <para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich
8462         mit einem Test-Script abgesichert wird. Auch bestehende Funktion darf
8463         und soll ausdrücklich nachträglich mit Test-Scripten abgesichert
8464         werden.</para>
8465
8466         <sect3 id="devel.testsuite.ideas_for_non_function_tests">
8467           <title>Ideen für neue Test-Scripte, die keine konkreten Funktionen
8468           testen</title>
8469
8470           <para>Ideen, die abgesehen von Funktionen noch nicht umgesetzt
8471           wurden:</para>
8472
8473           <itemizedlist>
8474             <listitem>
8475               <para>Überprüfung auf fehlende symbolische Links</para>
8476             </listitem>
8477
8478             <listitem>
8479               <para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit
8480               gewissen Einschränkungen wie das Erlauben von deutschen
8481               Umlauten)</para>
8482             </listitem>
8483
8484             <listitem>
8485               <para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para>
8486             </listitem>
8487
8488             <listitem>
8489               <para>Überprüfung auf Leerzeichen am Ende von Zeilen</para>
8490             </listitem>
8491
8492             <listitem>
8493               <para>Test, ob alle zu übersetzenden Strings in
8494               <filename>locale/de/all</filename> vorhanden sind</para>
8495             </listitem>
8496
8497             <listitem>
8498               <para>Test, ob alle Webseiten-Templates in
8499               <filename>templates/webpages</filename> mit vom Perl-Modul
8500               <literal>Template</literal> compiliert werden können</para>
8501             </listitem>
8502           </itemizedlist>
8503         </sect3>
8504
8505         <sect3 id="devel.testsuite.directory_and_test_names">
8506           <title>Konvention für Verzeichnis- und Dateinamen</title>
8507
8508           <para>Es gibt momentan eine wenige Richtlinien, wie Test-Scripte zu
8509           benennen sind. Bitte die folgenden Punkte als Richtlinie betrachten
8510           und ihnen soweit es geht folgen:</para>
8511
8512           <itemizedlist>
8513             <listitem>
8514               <para>Die Dateiendung muss <filename>.t</filename>
8515               lauten.</para>
8516             </listitem>
8517
8518             <listitem>
8519               <para>Namen sind englisch, komplett klein geschrieben und
8520               einzelne Wörter mit Unterstrichten getrennt (beispielsweise
8521               <filename>bad_function_params.t</filename>).</para>
8522             </listitem>
8523
8524             <listitem>
8525               <para>Unterverzeichnisse sollten grob nach dem Themenbereich
8526               benannt sein, mit dem sich die Scripte darin befassen
8527               (beispielsweise <filename>background_jobs</filename> für Tests
8528               rund um Hintergrund-Jobs).</para>
8529             </listitem>
8530
8531             <listitem>
8532               <para>Test-Scripte sollten einen überschaubaren Bereich von
8533               Funktionalität testen, der logisch zusammenhängend ist (z.B. nur
8534               Tests für eine einzelne Funktion in einem Modul). Lieber mehrere
8535               Test-Scripte schreiben.</para>
8536             </listitem>
8537           </itemizedlist>
8538         </sect3>
8539
8540         <sect3 id="devel.testsuite.minimal_example">
8541           <title>Minimales Skelett für eigene Scripte</title>
8542
8543           <para>Der folgenden Programmcode enthält das kleinstmögliche
8544           Testscript und kann als Ausgangspunkt für eigene Tests verwendet
8545           werden:</para>
8546
8547           <programlisting>use Test::More tests =&gt; 0;
8548
8549 use lib 't';
8550
8551 use Support::TestSetup;
8552
8553 Support::TestSetup::login();</programlisting>
8554
8555           <para>Wird eine vollständig initialisierte kivitendo-Umgebung
8556           benötigt (Stichwort: alle globalen Variablen wie
8557           <varname>$::auth</varname>, <varname>$::form</varname> oder
8558           <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei
8559           <filename>config/kivitendo.conf</filename> im Abschnitt
8560           <literal>testing.login</literal> ein gültiger Login-Name eingetragen
8561           sein. Dieser wird für die Datenbankverbindung benötigt.</para>
8562
8563           <para>Wir keine vollständig initialisierte Umgebung benötigt, so
8564           kann die letzte Zeile <programlisting>Support::TestSetup::login();</programlisting>
8565           weggelassen werden, was die Ausführungszeit des Scripts leicht
8566           verringert.</para>
8567         </sect3>
8568       </sect2>
8569     </sect1>
8570
8571     <sect1 id="devel.style-guide">
8572       <title>Stil-Richtlinien</title>
8573
8574       <para>Die folgenden Regeln haben das Ziel, den Code möglichst gut les-
8575       und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich
8576       eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden
8577       wird (Stichworte "Klammern" oder "Hash-Keys").</para>
8578
8579       <para>Diese Regeln sind keine Schikane sondern erleichtern allen das
8580       Leben!</para>
8581
8582       <para>Jeder, der einen Patch schickt, sollte seinen Code vorher
8583       überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
8584       nicht.</para>
8585
8586       <orderedlist>
8587         <listitem>
8588           <para>Es werden keine echten Tabs sondern Leerzeichen
8589           verwendet.</para>
8590         </listitem>
8591
8592         <listitem>
8593           <para>Die Einrückung beträgt zwei Leerzeichen. Beispiel:</para>
8594
8595           <programlisting>foreach my $row (@data) {
8596   if ($flag) {
8597     # do something with $row
8598   }
8599
8600   if ($use_modules) {
8601     $row-&gt;{modules} = MODULE-&gt;retrieve(
8602       id   =&gt; $row-&gt;{id},
8603       date =&gt; $use_now ? localtime() : $row-&gt;{time},
8604     );
8605   }
8606
8607   $report-&gt;add($row);
8608 }</programlisting>
8609         </listitem>
8610
8611         <listitem>
8612           <para>Öffnende geschweifte Klammern befinden sich auf der gleichen
8613           Zeile wie der letzte Befehl. Beispiele:</para>
8614
8615           <programlisting>sub debug {
8616   ...
8617 }</programlisting>
8618
8619           <para>oder</para>
8620
8621           <programlisting>if ($form-&gt;{item_rows} &gt; 0) {
8622   ...
8623 }</programlisting>
8624         </listitem>
8625
8626         <listitem>
8627           <para>Schließende geschweifte Klammern sind so weit eingerückt wie
8628           der Befehl / die öffnende schließende Klammer, die den Block
8629           gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen
8630           Beispiele wie bei 3. gelten.</para>
8631         </listitem>
8632
8633         <listitem>
8634           <para>Die Wörter "<function>else</function>",
8635           "<function>elsif</function>", "<function>while</function>" befinden
8636           sich auf der gleichen Zeile wie schließende geschweifte Klammern.
8637           Beispiele:</para>
8638
8639           <programlisting>if ($form-&gt;{sum} &gt; 1000) {
8640   ...
8641 } elsif ($form-&gt;{sum} &gt; 0) {
8642   ...
8643 } else {
8644   ...
8645 }
8646
8647 do {
8648   ...
8649 } until ($a &gt; 0);</programlisting>
8650         </listitem>
8651
8652         <listitem>
8653           <para>Parameter von Funktionsaufrufen müssen mit runden Klammern
8654           versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
8655           und grep-ähnliche Operatoren. Beispiel:</para>
8656
8657           <programlisting>$main::lxdebug-&gt;message("Could not find file.");
8658 %options = map { $_ =&gt; 1 } grep { !/^#/ } @config_file;</programlisting>
8659         </listitem>
8660
8661         <listitem>
8662           <para>Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:</para>
8663
8664           <para>Generell gilt: Hashkeys und Arrayindices sollten nicht durch
8665           Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
8666           Blöcke schon. Beispiel:</para>
8667
8668           <programlisting>if (($form-&gt;{debug} == 1) &amp;&amp; ($form-&gt;{sum} - 100 &lt; 0)) {
8669   ...
8670 }
8671
8672 $array[$i + 1]             = 4;
8673 $form-&gt;{sum}              += $form-&gt;{"row_$i"};
8674 $form-&gt;{ $form-&gt;{index} } += 1;
8675
8676 map { $form-&gt;{sum} += $form-&gt;{"row_$_"} } 1..$rowcount;</programlisting>
8677         </listitem>
8678
8679         <listitem>
8680           <para>Mehrzeilige Befehle</para>
8681
8682           <orderedlist>
8683             <listitem>
8684               <para>Werden die Parameter eines Funktionsaufrufes auf mehrere
8685               Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
8686               werden, in der die ersten Funktionsparameter in der ersten Zeile
8687               stehen. Beispiel:</para>
8688
8689               <programlisting>$sth = $dbh-&gt;prepare("SELECT * FROM some_table WHERE col = ?",
8690                     $form-&gt;{some_col_value});</programlisting>
8691             </listitem>
8692
8693             <listitem>
8694               <para>Ein Spezialfall ist der ternäre Operator "?:", der am
8695               besten in einer übersichtlichen Tabellenstruktur organisiert
8696               wird. Beispiel:</para>
8697
8698               <programlisting>my $rowcount = $form-&gt;{"row_$i"} ? $i
8699              : $form-&gt;{oldcount} ? $form-&gt;{oldcount} + 1
8700              :                     $form-&gt;{rowcount} - $form-&gt;{rowbase};</programlisting>
8701             </listitem>
8702           </orderedlist>
8703         </listitem>
8704
8705         <listitem>
8706           <para>Kommentare</para>
8707
8708           <orderedlist>
8709             <listitem>
8710               <para>Kommentare, die alleine in einer Zeile stehen, sollten
8711               soweit wie der Code eingerückt sein.</para>
8712             </listitem>
8713
8714             <listitem>
8715               <para>Seitliche hängende Kommentare sollten einheitlich
8716               formatiert werden.</para>
8717             </listitem>
8718
8719             <listitem>
8720               <para>Sämtliche Kommentare und Sonstiges im Quellcode ist bitte
8721               auf Englisch zu verfassen. So wie ich keine Lust habe,
8722               französischen Quelltext zu lesen, sollte auch der kivitendo
8723               Quelltext für nicht-Deutschsprachige lesbar sein.
8724               Beispiel:</para>
8725
8726               <programlisting>my $found = 0;
8727 while (1) {
8728   last if $found;
8729
8730   # complicated check
8731   $found = 1 if //
8732 }
8733
8734 $i  = 0        # initialize $i
8735 $n  = $i;      # save $i
8736 $i *= $const;  # do something crazy
8737 $i  = $n;      # recover $i</programlisting>
8738             </listitem>
8739           </orderedlist>
8740         </listitem>
8741
8742         <listitem>
8743           <para>Hashkeys sollten nur in Anführungszeichen stehen, wenn die
8744           Interpolation gewünscht ist. Beispiel:</para>
8745
8746           <programlisting>$form-&gt;{sum}      = 0;
8747 $form-&gt;{"row_$i"} = $form-&gt;{"row_$i"} - 5;
8748 $some_hash{42}    = 54;</programlisting>
8749         </listitem>
8750
8751         <listitem>
8752           <para>Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen
8753           unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
8754           wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in
8755           grossen Tabellen), dann ist Lesbarkeit vorzuziehen.</para>
8756
8757           <para>Als Beispiel sei die Funktion
8758           <function>print_options</function> aus
8759           <filename>bin/mozilla/io.pl</filename> angeführt.</para>
8760         </listitem>
8761
8762         <listitem>
8763           <para>Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind
8764           unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs
8765           verfälschen.</para>
8766
8767           <para>Emacs und vim haben beide recht einfache Methoden zur
8768           Entfernung von trailing whitespace. Emacs kennt das Kommande
8769           <command>nuke-trailing-whitespace</command>, vim macht das gleiche
8770           manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
8771           BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern
8772           gebunden.</para>
8773         </listitem>
8774
8775         <listitem>
8776           <para>Es wird kein <command>perltidy</command> verwendet.</para>
8777
8778           <para>In der Vergangenheit wurde versucht,
8779           <command>perltidy</command> zu verwenden, um einen einheitlichen
8780           Stil zu erlangen. Es hat sich aber gezeigt, dass
8781           <command>perltidy</command>s sehr eigenwilliges Verhalten, was
8782           Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für
8783           den Interessierten sind hier die
8784           <command>perltidy</command>-Optionen, die grob den beschriebenen
8785           Richtlinien entsprechen:</para>
8786
8787           <programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
8788 -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
8789 -lp -vt=1 -vtc=1</programlisting>
8790         </listitem>
8791
8792         <listitem>
8793           <para><varname>STDERR</varname> ist tabu. Unkonditionale
8794           Debugmeldungen auch.</para>
8795
8796           <para>kivitendo bietet mit dem Modul <classname>LXDebug</classname>
8797           einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
8798           Grund, nach <varname>STDERR</varname> zu schreiben.</para>
8799
8800           <para>Die <classname>LXDebug</classname>-Methode
8801           "<function>message</function>" nimmt als ersten Paramter außerdem
8802           eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer
8803           angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden
8804           und werden in den meisten Fällen auch vom Repository
8805           zurückgewiesen.</para>
8806         </listitem>
8807
8808         <listitem>
8809           <para>Alle neuen Module müssen use strict verwenden.</para>
8810
8811           <para><varname>$form</varname>, <varname>$auth</varname>,
8812           <varname>$locale</varname>, <varname>$lxdebug</varname> und
8813           <varname>%myconfig</varname> werden derzeit aus dem main package
8814           importiert (siehe <xref linkend="devel.globals"/>. Alle anderen
8815           Konstrukte sollten lexikalisch lokal gehalten werden.</para>
8816         </listitem>
8817       </orderedlist>
8818     </sect1>
8819
8820     <sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
8821       <title>Dokumentation erstellen</title>
8822
8823       <sect2 id="devel.build-doc.introduction">
8824         <title>Einführung</title>
8825
8826         <para>Diese Dokumentation ist in <productname>DocBook</productname>
8827         XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor.
8828         Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen
8829         Editor nutzt, der spezielle Unterstützung für
8830         <productname>DocBook</productname> mitbringt. Wir empfehlen dafür den
8831         <ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
8832         Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos
8833         ist.</para>
8834       </sect2>
8835
8836       <sect2 id="devel.build-doc.required-software">
8837         <title>Benötigte Software</title>
8838
8839         <para>Bei <productname>DocBook</productname> ist Prinzip, dass
8840         ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden
8841         dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML
8842         erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script
8843         <command>scripts/build_doc.sh</command>.</para>
8844
8845         <para>Das Script benötigt zur Konvertierung verschiedene
8846         Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt
8847         werden:</para>
8848
8849         <itemizedlist>
8850           <listitem>
8851             <para><ulink
8852             url="http://www.oracle.com/technetwork/java/index.html">Java</ulink>
8853             in einer halbwegs aktuellen Version</para>
8854           </listitem>
8855
8856           <listitem>
8857             <para>Das Java-Build-System <ulink
8858             url="http://ant.apache.org/">Apache Ant</ulink></para>
8859           </listitem>
8860
8861           <listitem>
8862             <para>Das Dokumentations-System Dobudish für
8863             <productname>DocBook</productname> 4.5, eine Zusammenstellung
8864             diverser Stylesheets und Grafiken zur Konvertierung von
8865             <productname>DocBook</productname> XML in andere Formate. Das
8866             Paket, das benötigt wird, ist zum Zeitpunkt der
8867             Dokumentationserstellung
8868             <filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
8869             url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink>
8870             bereitsteht.</para>
8871           </listitem>
8872         </itemizedlist>
8873
8874         <para>Apache Ant sowie ein dazu passendes Java Runtime Environment
8875         sind auf allen gängigen Plattformen verfügbar. Beispiel für
8876         Debian/Ubuntu:</para>
8877
8878         <programlisting>apt-get install ant openjdk-7-jre</programlisting>
8879
8880         <para>Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis
8881         <filename>doc/build</filename> entpackt werden. Beispiel unter der
8882         Annahme, das <productname>Dobudish</productname> in
8883         <filename>$HOME/Downloads</filename> heruntergeladen wurde:</para>
8884
8885         <programlisting>cd doc/build
8886 unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
8887       </sect2>
8888
8889       <sect2 id="devel.build-doc.build">
8890         <title>PDFs und HTML-Seiten erstellen</title>
8891
8892         <para>Die eigentliche Konvertierung erfolgt nach Installation der
8893         benötigten Software mit einem einfachen Aufruf direkt aus dem
8894         kivitendo-Installationsverzeichnis heraus:</para>
8895
8896         <programlisting>./scripts/build_doc.sh</programlisting>
8897       </sect2>
8898
8899       <sect2 id="devel.build-doc.repository">
8900         <title>Einchecken in das Git-Repository</title>
8901
8902         <para>Sowohl die XML-Datei als auch die erzeugten PDF- und
8903         HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass
8904         nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut
8905         und alles zusammen in einem Commit eingecheckt werden sollten.</para>
8906
8907         <para>Die "<filename>dobudish</filename>"-Verzeichnisse bzw.
8908         symbolischen Links gehören hingegen nicht in das Repository.</para>
8909       </sect2>
8910     </sect1>
8911   </chapter>
8912 </book>