<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<book id="kivitendo-documentation" lang="de">
- <title>kivitendo 3.4.1: Installation, Konfiguration, Entwicklung</title>
+ <title>kivitendo 3.5.3: Installation, Konfiguration,
+ Entwicklung</title>
<chapter id="Aktuelle-Hinweise">
<title>Aktuelle Hinweise</title>
ohne große Probleme auf den derzeit aktuellen verbreiteten
Distributionen läuft.</para>
- <para>Anfang 2016 sind das folgende Systeme, von denen bekannt ist,
+ <para>Anfang 2019 sind das folgende Systeme, von denen bekannt ist,
dass kivitendo auf ihnen läuft:</para>
<itemizedlist>
<itemizedlist>
<listitem>
- <para>7.0 "Wheezy"</para>
+ <para>8.0 "Jessie"</para>
</listitem>
-
<listitem>
- <para>8.0 "Jessie"</para>
+ <para>9.0 "Stretch"</para>
</listitem>
+
</itemizedlist>
</listitem>
<listitem>
- <para>Ubuntu 12.04 LTS "Precise Pangolin", 14.04 "Trusty Tahr"
- LTS, 15.10 "Wily Werewolf" und 16.04 "Xenial Xerus" LTS
- Alpha</para>
+ <para>16.04 "Xenial Xerus" LTS und 18.04 "Bionic Beaver" LTS
+ </para>
</listitem>
<listitem>
- <para>openSUSE LEAP 42.1</para>
+ <para>openSUSE 15.0</para>
</listitem>
<listitem>
- <para>Fedora 22</para>
+ <para>Fedora 29</para>
</listitem>
</itemizedlist>
</sect2>
<title>Benötigte Perl-Pakete installieren</title>
<para>Zum Betrieb von kivitendo werden zwingend ein Webserver (meist
- Apache) und ein Datenbankserver (PostgreSQL) in einer aktuellen Version
- (s.a. Liste der unterstützten Betriebssysteme) benötigt.</para>
+ Apache) und ein Datenbankserver (PostgreSQL) in einer aktuellen
+ Version (s.a. Liste der unterstützten Betriebssysteme)
+ benötigt.</para>
<para>Zusätzlich benötigt kivitendo einige Perl-Pakete, die nicht
Bestandteil einer Standard-Perl-Installation sind. Um zu überprüfen,
<itemizedlist>
<listitem>
- <para><literal>parent</literal> (nur bei Perl vor 5.10.1)</para>
+ <para><literal>Algorithm::CheckDigits</literal></para>
</listitem>
<listitem>
<para><literal>Archive::Zip</literal></para>
</listitem>
- <listitem>
- <para><literal>Algorithm::CheckDigits</literal></para>
- </listitem>
-
<listitem>
<para><literal>CGI</literal></para>
</listitem>
<para><literal>Config::Std</literal></para>
</listitem>
+ <listitem>
+ <para><literal>Daemon::Generic</literal></para>
+ </listitem>
+
<listitem>
<para><literal>DateTime</literal></para>
</listitem>
+ <listitem>
+ <para><literal>DateTime::Event::Cron</literal></para>
+ </listitem>
+
<listitem>
<para><literal>DateTime::Format::Strptime</literal></para>
</listitem>
+ <listitem>
+ <para><literal>DateTime::Set</literal></para>
+ </listitem>
+
<listitem>
<para><literal>DBI</literal></para>
</listitem>
<para><literal>File::Copy::Recursive</literal></para>
</listitem>
+ <listitem>
+ <para><literal>File::Flock</literal></para>
+ </listitem>
+
+ <listitem>
+ <para><literal>File::MimeInfo</literal></para>
+ </listitem>
+
+ <listitem>
+ <para><literal>File::Slurp</literal></para>
+ </listitem>
+
<listitem>
<para><literal>GD</literal></para>
</listitem>
<para><literal>List::UtilsBy</literal></para>
</listitem>
+ <listitem>
+ <para>LWP::Authen::Digest</para>
+ </listitem>
+
+ <listitem>
+ <para>LWP::UserAgent</para>
+ </listitem>
+
<listitem>
<para><literal>Net::SMTP::SSL</literal> (optional, bei
E-Mail-Versand über SSL; siehe Abschnitt "<xref
<para><literal>PDF::API2</literal></para>
</listitem>
+ <listitem>
+ <para><literal>Regexp::IPv6</literal></para>
+ </listitem>
+
<listitem>
<para><literal>Rose::Object</literal></para>
</listitem>
neuer</para>
</listitem>
+ <listitem>
+ <para><literal>Set::Infinite</literal></para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Set::Crontab</literal></para>
+ </listitem>
+
<listitem>
<para><literal>String::ShellQuote</literal></para>
</listitem>
<para><literal>Text::Iconv</literal></para>
</listitem>
+ <listitem>
+ <para><literal>Text::Unidecode</literal></para>
+ </listitem>
+
<listitem>
<para><literal>URI</literal></para>
</listitem>
</listitem>
<listitem>
- <para><literal>YAML</literal></para>
+ <para><literal>YAML::XS</literal> oder <literal>YAML</literal></para>
</listitem>
</itemizedlist>
+ <para>Seit Version größer v3.5.1 sind die folgenden Pakete hinzugekommen: <literal>Set::Infinite</literal>,
+ <literal>List::UtilsBy</literal>, <literal>DateTime::Set</literal>, <literal>DateTime::Event::Cron</literal>
+ <literal>Daemon::Generic</literal> <literal>DateTime::Event::Cron</literal> <literal>File::Flock</literal>
+ <literal>File::Slurp</literal> <literal>Set::Crontab</literal> <literal>Exception::Lite</literal>. Für das letzte Modul
+ liefert kivitendo ein fallback-Modul aus, da es überhaupt nicht in debian oder in der benötigten Version zu Verfügung stehen (Stand
+ Anfang 2019).</para>
+
+ <para>Seit Version größer v3.5.0 sind die folgenden Pakete
+ hinzugekommen: <literal>Text::Unidecode</literal>,
+ <literal>LWP::Authen::Digest</literal>,
+ <literal>LWP::UserAgent</literal></para>
+
<para>Seit Version v3.4.0 sind die folgenden Pakete hinzugekommen:
- <literal>Algorithm::CheckDigits</literal><literal>PBKDF2::Tiny</literal></para>
+ <literal>Algorithm::CheckDigits</literal>,
+ <literal>PBKDF2::Tiny</literal></para>
<para>Seit Version v3.2.0 sind die folgenden Pakete hinzugekommen:
<literal>GD</literal>, <literal>HTML::Restrict</literal>,
<title>Debian und Ubuntu</title>
<para>Für Debian und Ubuntu stehen die meisten der benötigten
- Perl-Pakete als Debian-Pakete zur Verfügung. Sie können mit
+ Pakete als Debian-Pakete zur Verfügung. Sie können mit
folgendem Befehl installiert werden:</para>
<programlisting>apt install apache2 libarchive-zip-perl libclone-perl \
libparams-validate-perl libpdf-api2-perl librose-db-object-perl \
librose-db-perl librose-object-perl libsort-naturally-perl \
libstring-shellquote-perl libtemplate-perl libtext-csv-xs-perl \
- libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-perl \
+ libtext-iconv-perl liburi-perl libxml-writer-perl libyaml-libyaml-perl \
libimage-info-perl libgd-gd2-perl libapache2-mod-fcgid \
libfile-copy-recursive-perl postgresql libalgorithm-checkdigits-perl \
- libcrypt-pbkdf2-perl git libcgi-pm-perl
-</programlisting>
+ libcrypt-pbkdf2-perl git libcgi-pm-perl libtext-unidecode-perl libwww-perl\
+ postgresql-contrib aqbanking-tools poppler-utils libhtml-restrict-perl\
+ libdatetime-set-perl libset-infinite-perl liblist-utilsby-perl\
+ libdaemon-generic-perl libfile-flock-perl libfile-slurp-perl\
+ libfile-mimeinfo-perl libpbkdf2-tiny-perl libregexp-ipv6-perl \
+ libset-crontab-perl libdatetime-event-perl
- <para>Für das Paket HTML::Restrict gibt es kein Debian-Paket, dies
- muß per CPAN installiert werden. Unter Ubuntu funktioniert das
- mit:</para>
+</programlisting>
+ <para>Ab Ubuntu Version 18.04 LTS, bzw. Debian Buster sind alle benötigten Pakete in der Distribution verfügbar.</para>
+ <para>Für ältere Ubuntu/Debians müßen einige Pakete per CPAN installiert werden.
+ Das geht bspw. für das benötige Paket HTML::Restrict mit:</para>
<programlisting>apt-get install build-essential
cpan HTML::Restrict</programlisting>
RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl
installiert werden:</para>
- <programlisting>dnf install httpd mod_fcgid perl-Archive-Zip perl-Clone perl-DBD-Pg \
- perl-DBI perl-DateTime perl-Email-Address perl-Email-MIME perl-FCGI \
- perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils perl-Net-SMTP-SSL perl-Net-SSLGlue \
- perl-PDF-API2 perl-Params-Validate perl-Rose-DB perl-Rose-DB-Object \
+ <programlisting>dnf install httpd mod_fcgid postgresql-server postgresql-contrib\
+ perl-Algorithm-CheckDigits perl-Archive-Zip perl-CPAN perl-Class-XSAccessor \
+ perl-Clone perl-Config-Std perl-DBD-Pg perl-DBI perl-Daemon-Generic \
+ perl-DateTime perl-DateTime-Set perl-Email-Address perl-Email-MIME perl-FCGI \
+ perl-File-Copy-Recursive perl-File-Flock perl-File-MimeInfo perl-File-Slurp \
+ perl-GD perl-HTML-Restrict perl-JSON perl-List-MoreUtils perl-List-UtilsBy \
+ perl-Net-SMTP-SSL perl-Net-SSLGlue perl-PBKDF2-Tiny perl-PDF-API2 \
+ perl-Params-Validate perl-Regexp-IPv6 perl-Rose-DB perl-Rose-DB-Object \
perl-Rose-Object perl-Sort-Naturally perl-String-ShellQuote \
- perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
- perl-XML-Writer perl-YAML perl-parent postgresql-server perl-CPAN \
- perl-Algorithm-CheckDigits perl-GD perl-Class-XSAccessor perl-Text-Balanced</programlisting>
-
- <para>Zusätzlich müssen einige Pakete aus dem CPAN installiert
- werden. Dazu können Sie die folgenden Befehle nutzen:</para>
-
- <programlisting>cpan Config::Std HTML::Restrict</programlisting>
+ perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI perl-XML-Writer \
+ perl-YAML perl-libwww-perl</programlisting>
</sect3>
<sect3>
RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl
installiert werden:</para>
- <programlisting>zypper install apache2 apache2-mod_fcgid perl-Archive-Zip perl-Clone \
- perl-Config-Std perl-DBD-Pg perl-DBI perl-DateTime perl-Email-Address \
- perl-Email-MIME perl-FastCGI perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils \
- perl-Net-SMTP-SSL perl-Net-SSLGlue perl-PDF-API2 perl-Params-Validate \
- perl-Sort-Naturally perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv \
- perl-URI perl-XML-Writer perl-YAML perl-CPAN \
- perl-Algorithm-CheckDigits perl-GD perl-Class-XSAccessor postgresql-server</programlisting>
+ <programlisting>zypper install apache2 apache2-mod_fcgid postgresql-server postgresql-contrib\
+ perl-Algorithm-CheckDigits perl-Archive-Zip perl-CGI perl-Class-XSAccessor \
+ perl-Clone perl-Config-Std perl-DBD-Pg perl-DBI perl-Daemon-Generic \
+ perl-DateTime perl-DateTime-Format-Strptime perl-Email-Address \
+ perl-Email-MIME perl-FastCGI perl-File-Copy-Recursive perl-File-Flock \
+ perl-File-MimeInfo perl-File-Slurp perl-GD perl-Image-Info perl-JSON \
+ perl-List-MoreUtils perl-List-UtilsBy perl-Net-SMTP-SSL perl-Net-SSLGlue \
+ perl-PDF-API2 perl-Params-Validate perl-Regexp-IPv6 perl-Set-Crontab \
+ perl-Sort-Naturally perl-String-ShellQuote perl-Template-Toolkit \
+ perl-Text-CSV_XS perl-Text-Iconv perl-Text-Unidecode perl-URI \
+ perl-XML-Writer perl-YAML perl-libwww-perl
+ </programlisting>
<para>Zusätzlich müssen einige Pakete aus dem CPAN installiert
werden. Dazu können Sie die folgenden Befehle nutzen:</para>
- <programlisting>cpan Rose::Db::Object</programlisting>
+ <programlisting>cpan DateTime::event::Cron DateTime::Set FCGI \
+ HTML::Restrict PBKDF2::Tiny Rose::Db::Object Set::Infinite</programlisting>
</sect3>
</sect2>
+
+ <sect2>
+ <title>Andere Pakete installieren</title>
+
+ <para>Seit Version v3.4.0 wird für den Bankimport optional das Paket
+ 'aqbanking-tools' benötigt.</para>
+
+ <para>Debian und Ubuntu: <programlisting>apt install aqbanking-tools
+ </programlisting></para>
+
+ <para>Fedora: <programlisting>dnf install aqbanking</programlisting></para>
+
+ <para>openSUSE: <programlisting>zypper install aqbanking-tools</programlisting></para>
+
+ <para>Seit Version v3.4.1 wird generell zum Feststellen der
+ Seitenanzahl von PDF_Dokumenten 'pdfinfo' benötigt was im Paket
+ 'poppler-utils' enthalten ist.</para>
+
+ <para>Debian und Ubuntu: <programlisting>apt install poppler-utils
+ </programlisting></para>
+
+ <para>Fedora: <programlisting>dnf install poppler-utils</programlisting></para>
+
+ <para>openSUSE: <programlisting>zypper install poppler-tools</programlisting></para>
+ </sect2>
</sect1>
<sect1 id="Manuelle-Installation-des-Programmpaketes"
url="https://github.com/kivitendo/kivitendo-erp/releases">hier</ulink>
heruntergeladen werden.</para>
- <para>Die kivitendo ERP Installationsdatei
- (<filename>kivitendo-erp-3.4.1.tgz</filename>) wird im
+ <para>Diese aktuelleste kivitendo ERP-Archiv
+ (<filename>kivitendo-erp-*.tgz</filename>) wird dann im
Dokumentenverzeichnis des Webservers (z.B.
<filename>/var/www/html/</filename>,
<filename>/srv/www/htdocs</filename> oder
<filename>/var/www/</filename>) entpackt:</para>
<programlisting>cd /var/www
-tar xvzf kivitendo-erp-3.4.1.tgz</programlisting>
+tar xvzf kivitendo-erp-*.tgz</programlisting>
<para>Wechseln Sie in das entpackte Verzeichnis:</para>
restlichen Dateien müssen für diesen Benutzer lesbar sein. Die Benutzer-
und Gruppennamen sind bei verschiedenen Distributionen unterschiedlich
(z.B. bei Debian/Ubuntu <constant>www-data</constant>, bei Fedora
- <constant>apache</constant> oder bei OpenSUSE
+ <constant>apache</constant> oder bei openSUSE
<constant>wwwrun</constant>).</para>
<para>Der folgende Befehl ändert den Besitzer für die oben genannten
<para>Wir empfehlen eine Installation mittels des Versionsmanagager
git. Hierfür muss ein git-Client installiert sein. Damit ist man sehr
viel flexibler für zukünftige Upgrades. Installations-Anleitung (bitte
- die Pfade anpassen) bspw. wie folgt: <programlisting>cd /usr/local/src/
+ die Pfade anpassen) bspw. wie folgt: <programlisting>cd /var/www/
git clone https://github.com/kivitendo/kivitendo-erp.git
cd kivitendo-erp/
-git checkout `git tag -l | egrep -ve "(beta|rc)" | tail -1`</programlisting>
- Sehr sinnvoll ist es, direkt im Anschluss einen eigenen Branch zu
- erzeugen, um bspw. seine eigenen Druckvorlagen-Anpassungen damit zu
- verwalten. Hierfür reicht ein simples <programlisting> git checkout -b meine_eigenen_änderungen</programlisting>
+git checkout `git tag -l | egrep -ve "(alpha|beta|rc)" | tail -1`</programlisting>
+ Erläuterung: Der Befehl wechselt zur letzten Stable-Version (git tag
+ -l listet alle Tags auf, das egrep schmeisst alle Einträge mit alpha,
+ beta oder rc raus und das tail gibt davon den obersten Treffer
+ zurück). Sehr sinnvoll ist es, direkt im Anschluss einen eigenen
+ Branch zu erzeugen, um bspw. seine eigenen Druckvorlagen-Anpassungen
+ damit zu verwalten. Hierfür reicht ein simples <programlisting> git checkout -b meine_eigenen_änderungen</programlisting>
nach dem letzten Kommando (weiterführende Informationen <ulink
- url="http://git-scm.com/book/en/v2/Getting-Started-Git-Basics">getting
- started with git</ulink>).</para>
+ url="http://www-cs-students.stanford.edu/~blynn/gitmagic/index.html">
+ Git Magic</ulink>).</para>
+
+ <para>Ein beispielhafter Workflow für Druckvorlagen-Anpassungen von
+ 3.4.1 nach 3.5: <programlisting>
+$ git clone https://github.com/kivitendo/kivitendo-erp.git
+$ cd kivitendo-erp/
+$ git checkout release-3.4.1 # das ist der aktuelle release, den wir wollen
+$ git add templates/fullhouse # das sind unsere druckvorlagen inkl. produktbilder
+$ git commit -m "juhu tolle ändernungen"
+[meine_aenderungen 1d89e41] juhu tolle ändernungen
+ 4 files changed, 380 insertions(+)
+ create mode 100644 templates/fullhouse/img/webdav/tesla.png
+ create mode 100644 templates/fullhouse/mahnung.tex
+ create mode 100644 templates/fullhouse/zahlungserinnerung_zwei.tex
+ create mode 100644 templates/fullhouse/zahlungserinnerung_zwei_invoice.tex
+
+# 5 Jahre später ...
+
+$ git fetch
+$ git rebase --onto release-3.5.0 release-3.4.1 meine_aenderungen
+Zunächst wird der Branch zurückgespult, um Ihre Änderungen
+darauf neu anzuwenden ...
+Wende an: juhu tolle ändernungen
+$ service apache2 restart
+</programlisting></para>
</note>
</sect1>
[system]
default_manager = german</programlisting>
- <para>Für kivitendo Installationen in der Schweiz sollte hier <varname>german</varname>
- durch <varname>swiss</varname> ersetzt werden.</para>
- <para>Die Einstellung <varname>default_manager = swiss</varname> bewirkt:</para>
- <itemizedlist>
- <listitem>
- <para>Beim Erstellen einer neuen Datenbank in der kivitendo Administration
- werden automatisch die Standard-Werte für die Schweiz voreingestellt:
- Währung CHF, 5er-Rundung, Schweizer KMU-Kontenplan, Sollversteuerung,
- Aufwandsmethode, Bilanzierung (die Werte können aber manuell angepasst werden).</para>
- </listitem>
- <listitem>
- <para>Einstellen der Standardkonten für Rundungserträge und -aufwendungen
- (unter Mandantenkonfiguration → Standardkonten veränderbar)</para>
- </listitem>
- <listitem>
- <para>das verwendete Zahlenformat wird auf <varname>1'000.00</varname> eingestellt
- (unter Programm → Benutzereinstellungen veränderbar)</para>
- </listitem>
- <listitem>
- <para>DATEV-Automatik und UStVA werden nicht angezeigt, Erfolgsrechnung
- ersetzt GUV ( unter Mandantenkonfiguration → Features veränderbar)</para>
- </listitem>
- </itemizedlist>
+ <para>Für kivitendo Installationen in der Schweiz sollte hier
+ <varname>german</varname> durch <varname>swiss</varname> ersetzt
+ werden.</para>
+
+ <para>Die Einstellung <varname>default_manager = swiss</varname>
+ bewirkt:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Beim Erstellen einer neuen Datenbank in der kivitendo
+ Administration werden automatisch die Standard-Werte für die
+ Schweiz voreingestellt: Währung CHF, 5er-Rundung, Schweizer
+ KMU-Kontenplan, Sollversteuerung, Aufwandsmethode, Bilanzierung
+ (die Werte können aber manuell angepasst werden).</para>
+ </listitem>
+
+ <listitem>
+ <para>Einstellen der Standardkonten für Rundungserträge und
+ -aufwendungen (unter Mandantenkonfiguration → Standardkonten
+ veränderbar)</para>
+ </listitem>
+
+ <listitem>
+ <para>das verwendete Zahlenformat wird auf
+ <varname>1'000.00</varname> eingestellt (unter Programm →
+ Benutzereinstellungen veränderbar)</para>
+ </listitem>
+
+ <listitem>
+ <para>DATEV-Automatik und UStVA werden nicht angezeigt,
+ Erfolgsrechnung ersetzt GUV ( unter Mandantenkonfiguration →
+ Features veränderbar)</para>
+ </listitem>
+ </itemizedlist>
<para>Nutzt man wiederkehrende Rechnungen, kann man unter
<varname>[periodic_invoices]</varname> den Login eines Benutzers
<title>Anpassung der PostgreSQL-Konfiguration</title>
<para>PostgreSQL muss auf verschiedene Weisen angepasst werden.</para>
-
+ <para>Dies variert je nach eingesetzter Distribution, da distributionsabhängig unterschiedliche Strategien beim Upgrade der Postgres Version eingesetzt werden.
+ Als Hinweis einige Links zu den drei Distribution (Stand Dezember 2018):</para>
+ <itemizedlist>
+ <listitem>
+ <para><ulink url="https://fedoraproject.org/wiki/PostgreSQL">Fedora (Postgres-Installation unter Fedora)</ulink></para>
+ </listitem>
+ <listitem>
+ <para><ulink url="https://help.ubuntu.com/lts/serverguide/postgresql.html">Ubuntu (Infos für Postgres für die aktuelle LTS Version)</ulink></para>
+ </listitem>
+ <listitem>
+ <para><ulink url="https://de.opensuse.org/PostgreSQL">OpenSuSE (aktuell nur bis Version OpenSuSE 13 verifiziert)</ulink></para>
+ </listitem>
+ </itemizedlist>
<sect2 id="Zeichensätze-die-Verwendung-von-UTF-8">
<title>Zeichensätze/die Verwendung von Unicode/UTF-8</title>
</note>
</sect2>
+ <sect2 id="Erweiterung-für-trigram">
+ <title>Erweiterung für Trigram Prozeduren</title>
+
+ <para>Ab Version 3.5.1 wird die Trigram-Index-Erweiterung benötigt.
+ Diese wird mit dem SQL-Updatescript
+ sql/Pg-upgrade2/trigram_extension.sql und Datenbank-Super-Benutzer
+ Rechten automatisch installiert. Dazu braucht der
+ DatenbankSuperbenutzer "postgres" ein Passwort.</para>
+
+ <programlisting>su - postgres
+psql
+\password postgres
+
+Eingabe Passwort
+\q</programlisting>
+
+ <para>Benutzername Postgres und Passwort können jetzt beim Anlegen
+ einer Datenbank bzw. bei Updatescripten, die SuperuserRechte
+ benötigen, eingegeben werden.</para>
+
+ <note>
+ <para><literal>pg_trgm</literal> ist je nach Distribution nicht im
+ Standard-Paket von Postgres enthalten. Ein <programlisting>select * from pg_available_extensions where name ='pg_trgm';</programlisting>
+ in template1 sollte entsprechend erfolgreich sein. Andernfalls muss
+ das Paket nachinstalliert werden, bspw. bei debian/ubuntu
+ <programlisting>apt install postgresql-contrib</programlisting></para>
+ </note>
+ </sect2>
+
<sect2 id="Datenbankbenutzer-anlegen">
<title>Datenbankbenutzer anlegen</title>
</Directory>
<Directory /var/www/kivitendo-erp/users>
- Order Deny,Allow
- Deny from All
+ Require all granted
</Directory></programlisting>
<para>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
<itemizedlist>
<listitem>
- <para>Apache 2.2.11 (Ubuntu) und mod_fcgid.</para>
+ <para>Apache 2.4.7 (Ubuntu 14.04.2 LTS) und mod_fcgid.</para>
</listitem>
-
<listitem>
- <para>Apache 2.2.11 / 2.2.22 (Ubuntu) und mod_fastcgi.</para>
+ <para>Apache 2.4.18 (Ubuntu 16.04 LTS) und mod_fcgid</para>
</listitem>
-
<listitem>
- <para>Apache 2.4.7 (Ubuntu 14.04.2 LTS) und mod_fcgid.</para>
+ <para>Apache 2.4.29 (Ubuntu 18.04 LTS) und mod_fcgid</para>
</listitem>
</itemizedlist>
- <para>Dabei wird mod_fcgid empfohlen, weil mod_fastcgi seit geraumer
- Zeit nicht mehr weiter entwickelt wird. Im Folgenden wird auf
- mod_fastcgi nicht mehr explizit eingegangen.</para>
-
<para>Als Perl Backend wird das Modul <filename>FCGI.pm</filename>
verwendet.</para>
<programlisting>
Order Deny,Allow
Deny from All </programlisting>
-
</warning>
<para>Seit mod_fcgid-Version 2.3.6 gelten sehr kleine Grenzen für
</sect3>
</sect2>
+ <sect2>
+ <title>Authentifizierung mittels HTTP Basic Authentication</title>
+
+ <para>
+ Kivitendo unterstützt, dass Benutzerauthentifizierung über den Webserver mittels des »Basic«-HTTP-Authentifizierungs-Schema erfolgt
+ (siehe <ulink url="https://tools.ietf.org/html/rfc7617">RFC 7617</ulink>). Dazu ist es aber nötig, dass der dabei vom Client
+ mitgeschickte Header <constant>Authorization</constant> vom Webserver an Kivitendo über die Umgebungsvariable
+ <constant>HTTP_AUTHORIZATION</constant> weitergegeben wird, was standardmäßig nicht der Fall ist. Für Apache kann dies über die
+ folgende Konfigurationsoption aktiviert werden:
+ </para>
+
+ <programlisting>SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1</programlisting>
+ </sect2>
+
<sect2>
<title>Weitergehende Konfiguration</title>
Konfigurationsmöglichkeiten sprengen allerdings den Rahmen dieser
Anleitung, hier ein Hinweis auf einen entsprechenden <ulink
url="http://redmine.kivitendo-premium.de/boards/1/topics/142">Foreneintrag
- (Stand Sept. 2015)</ulink></para>
+ (Stand Sept. 2015)</ulink> und einen aktuellen (Stand Mai 2017) <ulink
+ url="https://mozilla.github.io/server-side-tls/ssl-config-generator/">
+ SSL-Konfigurations-Generator</ulink>.</para>
</sect2>
</sect1>
Servers integriert werden muss, damit er automatisch gestartet wird.
Dies kann kivitendo nicht für Sie erledigen.</para>
+ <para>Da der Taskserver als Perlscript läuft, wird Arbeitsspeicher, der
+ einmal benötigt wurde, nicht mehr an das Betriebssystem zurückgegeben,
+ solange der Taskserver läuft. Dies kann dazu führen, dass ein länger
+ laufender Taskserver mit der Zeit immer mehr Arbeitsspeicher für sich
+ beansprucht. Es ist deshalb sinnvoll, dass der Taskserver in
+ regelmässigen Abständen neu gestartet wird.</para>
+
<sect2 id="Konfiguration-des-Task-Servers">
<title>Verfügbare und notwendige Konfigurationsoptionen</title>
anstelle eines symbolischen Links verwendet werden können.</para>
<sect3>
- <title>SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE,
- ältere Fedora)</title>
+ <title>SystemV-basierende Systeme (z.B. ältere Debian, ältere
+ openSUSE, ältere Fedora)</title>
<para>Kopieren Sie die Datei
<filename>scripts/boot/system-v/kivitendo-task-server</filename>
<para>Debian-basierende Systeme:</para>
<programlisting>update-rc.d kivitendo-task-server defaults
-# Nur bei Debian Squeeze und neuer:
insserv kivitendo-task-server</programlisting>
</listitem>
<listitem>
- <para>Ältere OpenSUSE und ältere Fedora:</para>
+ <para>Ältere openSUSE und ältere Fedora:</para>
<programlisting>chkconfig --add kivitendo-task-server</programlisting>
</listitem>
<sect3>
<title>systemd-basierende Systeme (z.B. neure openSUSE, neuere
- Fedora, neuere Ubuntu und Debians)</title>
+ Fedora, neuere Ubuntu und neuere Debians)</title>
- <para>Kopieren Sie die Datei <filename>scripts/boot/systemd/kivitendo-task-server.service</filename> nach
- <filename>/etc/systemd/system/</filename>. Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeilen
- <literal>ExecStart=....</literal> und <literal>ExecStop=...</literal>).</para>
+ <para>Kopieren Sie die Datei
+ <filename>scripts/boot/systemd/kivitendo-task-server.service</filename>
+ nach <filename>/etc/systemd/system/</filename>. Passen Sie in der
+ kopierten Datei den Pfad zum Task-Server an (Zeilen
+ <literal>ExecStart=....</literal> und
+ <literal>ExecStop=...</literal>).</para>
- <para>Machen Sie anschließend das Script systemd bekannt, und binden Sie es in den Boot-Prozess ein. Dazu führen Sie die folgenden
- Befehl aus:</para>
+ <para>Machen Sie anschließend das Script systemd bekannt, und binden
+ Sie es in den Boot-Prozess ein. Dazu führen Sie die folgenden Befehl
+ aus:</para>
<programlisting>systemctl daemon-reload
systemctl enable kivitendo-task-server.service</programlisting>
- <para>Wenn Sie den Task-Server jetzt sofort starten möchten, anstatt den Server neu zu starten, so können Sie das mit dem
- folgenden Befehl tun:</para>
+ <para>Wenn Sie den Task-Server jetzt sofort starten möchten, anstatt
+ den Server neu zu starten, so können Sie das mit dem folgenden
+ Befehl tun:</para>
<programlisting>systemctl start kivitendo-task-server.service</programlisting>
</sect3>
einfachsten ist dazu eine <literal>texlive</literal> Installation. Unter
debianoiden Betriebssystemen installiert man die Pakete mit:</para>
- <para><programlisting>apt-get install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \
- texlive-latex-extra texlive-lang-german texlive-generic-extra</programlisting></para>
+ <para><programlisting>apt install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \
+ texlive-latex-extra texlive-lang-german texlive-generic-extra texlive-xetex </programlisting></para>
<para>Für Fedora benötigen Sie die folgenden Pakete:</para>
und nicht nur Teile davon, da dies sonst oft zu einer odt-Datei führt,
die vom Parser nicht korrekt gelesen werden kann.</para>
+ <para>Mahnungen können unter folgenden Einschränkungen mit den
+ odt-Vorlagen im Vorlagensatz rev-odt erzeugt werden:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>als Druckoption steht nur 'PDF(OpenDocument/OASIS)' zur
+ Verfügung, das heisst, die Mahnungen werden als PDF-Datei
+ ausgegeben.</para>
+ </listitem>
+
+ <listitem>
+ <para>für jede Rechnung muss eine eigene Mahnung erzeugt werden
+ (auch wenn bei einzelnen KundInnen mehrere überfällige Rechnungen
+ vorhanden sind).</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Mehrere Mahnungen für eine Kundin / einen Kunden werden zu einer
+ PDF-Datei zusammengefasst</para>
+
+ <para>Die Vorlagen zahlungserinnerung.odt sowie mahnung.odt sind für
+ das Erstellen einer Zahlungserinnerung bzw. Mahnung selbst vorgesehen,
+ die Vorlage mahnung_invoice.odt für das Erstellen einer Rechnung über
+ die verrechneten Mahngebühren und Verzugszinsen.</para>
+
<para>Zur Zeit gibt es in kivitendo noch keine Möglichkeit,
- odt-Vorlagen bei Mahnungen, Briefen und Pflichtenheften einzusetzen.
+ odt-Vorlagen bei Briefen und Pflichtenheften einzusetzen.
Entsprechende Vorlagen sind deshalb nicht vorhanden.</para>
<para>Fehlermeldungen, Anregungen und Wünsche bitte senden an:
<title>OpenDocument-Vorlagen</title>
<para>kivitendo unterstützt die Verwendung von Vorlagen im
- OpenDocument-Format, wie es LibreOffice oder OpenOffice (ab Version 2) erzeugen.
- kivitendo kann dabei sowohl neue OpenDocument-Dokumente als auch aus
- diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
+ OpenDocument-Format, wie es LibreOffice oder OpenOffice (ab Version 2)
+ erzeugen. kivitendo kann dabei sowohl neue OpenDocument-Dokumente als
+ auch aus diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
OpenDocument-Vorlagen zu aktivieren muss in der Datei
<filename>config/kivitendo.conf</filename> die Variable
<literal>opendocument</literal> im Abschnitt
<para>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
- LibreOffice oder OpenOffice benötigt. Soll dieses Feature genutzt werden, so muss
- neben LibreOffice oder OpenOffice auch der “X virtual frame buffer”
- (xvfb) installiert werden. Bei Debian ist er im Paket “xvfb” enthalten.
- Andere Distributionen enthalten ihn in anderen Paketen.</para>
+ LibreOffice oder OpenOffice benötigt. Soll dieses Feature genutzt
+ werden, so muss neben LibreOffice oder OpenOffice auch der “X virtual
+ frame buffer” (xvfb) installiert werden. Bei Debian ist er im Paket
+ “xvfb” enthalten. Andere Distributionen enthalten ihn in anderen
+ Paketen.</para>
<para>Nach der Installation müssen in der Datei
<filename>config/kivitendo.conf</filename> im Abschnitt
- <literal>applications</literal> zwei weitere Variablen
- angepasst werden:</para>
- <para><literal>openofficeorg_writer</literal> muss den
- vollständigen Pfad zu LibreOffice oder OpenOffice enthalten.
- Dabei dürfen keine Anführungszeichen eingesetzt werden.</para>
+ <literal>applications</literal> zwei weitere Variablen angepasst
+ werden:</para>
+
+ <para><literal>openofficeorg_writer</literal> muss den vollständigen
+ Pfad zu LibreOffice oder OpenOffice enthalten. Dabei dürfen keine
+ Anführungszeichen eingesetzt werden.</para>
+
<para>Beispiel für Debian oder Ubuntu:</para>
+
<programlisting>openofficeorg_writer = /usr/bin/libreoffice</programlisting>
+
<para><literal>xvfb</literal> muss den Pfad zum “X virtual frame buffer”
enthalten.</para>
<para>Zusätzlich gibt es zwei verschiedene Arten, wie kivitendo mit
- LibreOffice bzw. OpenOffice kommuniziert. Die erste Variante, die benutzt
- wird, wenn die Variable <literal>$openofficeorg_daemon</literal> gesetzt
- ist, startet ein LibreOffice oder OpenOffice, das auch nach der Umwandlung
- des Dokumentes gestartet bleibt. Bei weiteren Umwandlungen wird dann diese
- laufende Instanz benutzt. Der Vorteil ist, dass die Zeit zur Umwandlung
- deutlich reduziert wird, weil nicht für jedes Dokument ein LibreOffice bzw.
- OpenOffice gestartet werden muss. Der Nachteil ist, dass diese Methode
- Python und die Python-UNO-Bindings benötigt, die Bestandteil von LibreOffice
- bzw. OpenOffice sind.</para>
+ LibreOffice bzw. OpenOffice kommuniziert. Die erste Variante, die
+ benutzt wird, wenn die Variable <literal>$openofficeorg_daemon</literal>
+ gesetzt ist, startet ein LibreOffice oder OpenOffice, das auch nach der
+ Umwandlung des Dokumentes gestartet bleibt. Bei weiteren Umwandlungen
+ wird dann diese laufende Instanz benutzt. Der Vorteil ist, dass die Zeit
+ zur Umwandlung deutlich reduziert wird, weil nicht für jedes Dokument
+ ein LibreOffice bzw. OpenOffice gestartet werden muss. Der Nachteil ist,
+ dass diese Methode Python und die Python-UNO-Bindings benötigt, die
+ Bestandteil von LibreOffice bzw. OpenOffice sind.</para>
<note>
<para>Für die Verbindung zu LibreOffice bzw. OpenOffice wird
normalerweise der Python-Interpreter
- <filename>/usr/bin/python</filename> benutzt.
- Sollte dies nicht der richtige sein, so kann man mit zwei
- Konfigurationsvariablen entscheiden, welcher Python-Interpreter
- genutzt wird. Mit der Option <literal>python_uno</literal> aus dem
- Abschnitt <literal>applications</literal> wird der Interpreter selber
+ <filename>/usr/bin/python</filename> benutzt. Sollte dies nicht der
+ richtige sein, so kann man mit zwei Konfigurationsvariablen
+ entscheiden, welcher Python-Interpreter genutzt wird. Mit der Option
+ <literal>python_uno</literal> aus dem Abschnitt
+ <literal>applications</literal> wird der Interpreter selber
festgelegt; sie steht standardmäßig auf dem eben erwähnten Wert
<literal>/usr/bin/python</literal>.</para>
</note>
<para>Ist <literal>$openofficeorg_daemon</literal> nicht gesetzt, so
- wird für jedes Dokument LibreOffice bzw. OpenOffice neu gestartet
- und die Konvertierung mit Hilfe eines Makros durchgeführt. Dieses
- Makro muss in der Dokumentenvorlage enthalten sein und
+ wird für jedes Dokument LibreOffice bzw. OpenOffice neu gestartet und
+ die Konvertierung mit Hilfe eines Makros durchgeführt. Dieses Makro muss
+ in der Dokumentenvorlage enthalten sein und
“Standard.Conversion.ConvertSelfToPDF()” heißen. Die Beispielvorlage
- ‘<literal>templates/print/rev-odt/invoice.odt</literal>’
- enthält ein solches Makro, das in jeder anderen Dokumentenvorlage
- ebenfalls enthalten sein muss.</para>
+ ‘<literal>templates/print/rev-odt/invoice.odt</literal>’ enthält ein
+ solches Makro, das in jeder anderen Dokumentenvorlage ebenfalls
+ enthalten sein muss.</para>
- <para>Als letztes muss herausgefunden werden, welchen Namen
- OpenOffice bzw. LibreOffice dem Verzeichnis mit den Benutzereinstellungen
- gibt. Unter Debian ist dies momentan
- <literal>~/.config/libreoffice</literal>. kivitendo verwendet das
- Verzeichnis <literal>users/.openoffice.org2</literal>.
- Eventuell muss dieses Verzeichnis umbenannt werden.</para>
+ <para>Als letztes muss herausgefunden werden, welchen Namen OpenOffice
+ bzw. LibreOffice dem Verzeichnis mit den Benutzereinstellungen gibt.
+ Unter Debian ist dies momentan <literal>~/.config/libreoffice</literal>.
+ kivitendo verwendet das Verzeichnis
+ <literal>users/.openoffice.org2</literal>. Eventuell muss dieses
+ Verzeichnis umbenannt werden.</para>
<para>Dieses Verzeichnis, wie auch das komplette
<literal>users</literal>-Verzeichnis, muss vom Webserver beschreibbar
sein. Dieses wurde bereits erledigt (siehe <xref
- linkend="Manuelle-Installation-des-Programmpaketes"/>), kann aber
- erneut überprüft werden, wenn die Konvertierung nach PDF
- fehlschlägt.</para>
+ linkend="Manuelle-Installation-des-Programmpaketes"/>), kann aber erneut
+ überprüft werden, wenn die Konvertierung nach PDF fehlschlägt.</para>
<sect2>
<title>OpenDocument (odt) Druckvorlagen mit Makros</title>
</listitem>
<listitem>
- <para>Druckerbeschreibung → aussagekräftiger Text: wird in
- der Auftrags- bzw. Rechnungsmaske als Auswahl angezeigt (z.B.
- mit Einzahlungsschein Bank xy)</para>
+ <para>Druckerbeschreibung → aussagekräftiger Text: wird in der
+ Auftrags- bzw. Rechnungsmaske als Auswahl angezeigt (z.B. mit
+ Einzahlungsschein Bank xy)</para>
</listitem>
<listitem>
- <para>Druckbefehl → beliebiger Text (hat für das Erzeugen
- von Aufträgen oder Rechnungen als odt-Datei keine Bedeutung,
- darf aber nicht leer sein)</para>
+ <para>Druckbefehl → beliebiger Text (hat für das Erzeugen von
+ Aufträgen oder Rechnungen als odt-Datei keine Bedeutung, darf
+ aber nicht leer sein)</para>
</listitem>
<listitem>
- <para>Vorlagenkürzel → besr bzw. selbst gewähltes
- Vorlagensuffix (muss genau der Zeichenfolge entsprechen, die
- zwischen "invoice_" bzw. "sales_order_" und ".odt"
- steht.)</para>
+ <para>Vorlagenkürzel → besr bzw. selbst gewähltes Vorlagensuffix
+ (muss genau der Zeichenfolge entsprechen, die zwischen
+ "invoice_" bzw. "sales_order_" und ".odt" steht.)</para>
</listitem>
<listitem>
<itemizedlist>
<listitem>
- <para>Programm → Benutzereinstellungen →
- Druckoptionen</para>
+ <para>Programm → Benutzereinstellungen → Druckoptionen</para>
</listitem>
<listitem>
</listitem>
<listitem>
- <para>Standarddrucker → gewünschte Druckerbeschreibung
- auswählen (z.B. mit Einzahlungsschein Bank xy)</para>
+ <para>Standarddrucker → gewünschte Druckerbeschreibung auswählen
+ (z.B. mit Einzahlungsschein Bank xy)</para>
</listitem>
<listitem>
</listitem>
<listitem>
- <para>DDDEND: muss am Ende der Zeile vorhanden sein</para>
- </listitem>
+ <para>DDDEND: muss am Ende der Zeile vorhanden sein</para>
+ </listitem>
</itemizedlist></para>
</listitem>
<itemizedlist>
<listitem>
- <para>Extras → Optionen → Sicherheit →
- Makrosicherheit</para>
+ <para>Extras → Optionen → Sicherheit → Makrosicherheit</para>
</listitem>
<listitem>
<listitem>
<para>Beim Öffnen einer odt-Rechnung oder eines odt-Auftrags bei
- der entsprechenden Nachfrage "Makros ausführen" auswählen.
- </para>
+ der entsprechenden Nachfrage "Makros ausführen"
+ auswählen.</para>
<para><emphasis role="bold">Wichtig</emphasis>: die Makros sind
so eingestellt, dass sie beim Öffnen der Vorlagen selbst nicht
</sect2>
</sect1>
+ <sect1 id="nomenclature">
+ <title>Nomenklatur</title>
+
+ <sect2 id="booking.dates">
+ <title>Datum bei Buchungen</title>
+
+ <para>Seit der Version 3.5 werden für Buchungen in kivitendo
+ einheitlich folgende Bezeichnungen verwendet:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><option>Erfassungsdatum</option> (en: <option>Entry
+ Date</option>, code: <option>Gldate</option>)</para>
+
+ <para>bezeichnet das Datum, an dem die Buchung in kivitendo
+ erfasst wurde.</para>
+ </listitem>
+
+ <listitem>
+ <para><option>Buchungsdatum</option> (en: <option>Booking
+ Date</option>, code: <option>Transdate</option>)</para>
+
+ <para>bezeichnet das buchhaltungstechnisch für eine Buchung
+ relevante Datum</para>
+
+ <para>Das <option>Rechnungsdatum</option> bei Verkaufs- und
+ Einkaufsrechnungen entspricht dem Buchungsdatum. Das heisst, in
+ Berichten wie dem Buchungsjournal, in denen eine Spalte
+ <option>Buchungsdatum</option> angezeigt werden kann, erscheint
+ hier im Fall von Rechnungen das Rechnungsdatum.</para>
+ </listitem>
+
+ <listitem>
+ <para>Bezieht sich ein verbuchter Beleg auf einen Zeitpunkt, der
+ nicht mit dem Buchungsdatum übereinstimmt, so kann dieses Datum
+ momentan in kivitendo nur unter Bemerkungen erfasst werden.</para>
+
+ <para>Möglicherweise wird für solche Fälle in einer späteren
+ Version von kivitendo ein dritter Datumswert für Buchungen
+ erstellt. (Beispiel: Einkaufsbeleg stammt aus einem früheren Jahr,
+ das bereits buchhaltungstechnisch abgeschlossen wurde, und muss
+ deshalb später verbucht werden.)</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+ </sect1>
+
<sect1 id="config.eur">
<title>Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
EUR</title>
eingestellt werden.</para>
<para>Für die Schweiz sind folgende Einstellungen üblich:
- <itemizedlist>
+ <itemizedlist>
<listitem>
- <para>Sollversteuerung</para>
+ <para>Sollversteuerung</para>
</listitem>
+
<listitem>
- <para>Aufwandsmethode</para>
- </listitem>
- <listitem>
- <para>Bilanzierung</para>
- </listitem>
- </itemizedlist>
- Diese Einstellungen werden automatisch beim Erstellen einer neuen
- Datenbank vorausgewählt, wenn in <filename>config/kivitendo.conf</filename> unter
- <varname>[system]</varname> <literal>default_manager = swiss</literal> eingestellt ist.
- </para>
+ <para>Aufwandsmethode</para>
+ </listitem>
+
+ <listitem>
+ <para>Bilanzierung</para>
+ </listitem>
+ </itemizedlist> Diese Einstellungen werden automatisch beim
+ Erstellen einer neuen Datenbank vorausgewählt, wenn in
+ <filename>config/kivitendo.conf</filename> unter
+ <varname>[system]</varname> <literal>default_manager = swiss</literal>
+ eingestellt ist.</para>
<para>Beim Upgrade bestehender Mandanten wird eur ausgelesen und die
Variablen werden so gesetzt, daß sich an der Funktionalität nichts
<para>Die folgenden Schritte sind notwendig, um das Konto manuell
anzulegen und zu konfigurieren. Zuerst wird in
- <guimenu>System</guimenu> →
- <guisubmenu>Kontenübersicht</guisubmenu> → <guimenuitem>Konto
- erfassen</guimenuitem> das Konto angelegt.</para>
+ <guimenu>System</guimenu> → <guisubmenu>Kontenübersicht</guisubmenu> →
+ <guimenuitem>Konto erfassen</guimenuitem> das Konto angelegt.</para>
<screenshot>
<screeninfo>Konto 3804 erfassen</screeninfo>
<para>Als Drittes wird ein neuer Eintrag mit Steuerschlüssel 13 für
Konto 3804 (19%) angelegt. Dazu unter <guimenu>System</guimenu> →
- <guisubmenu>Steuern</guisubmenu> →
- <guimenuitem>Erfassen</guimenuitem> auswählen und die Werte aus dem
- Screenshot übernehmen.</para>
+ <guisubmenu>Steuern</guisubmenu> → <guimenuitem>Erfassen</guimenuitem>
+ auswählen und die Werte aus dem Screenshot übernehmen.</para>
<screenshot>
<screeninfo>Steuerschlüssel 13 für 3804 (19%) anlegen</screeninfo>
</sect1>
<sect1 id="config.erfolgsrechnung">
- <title>Erfolgsrechnung</title>
-
- <para>Seit der Version 3.4.1 existiert in kivitendo der Bericht <emphasis role="bold">
- Erfolgsrechnung</emphasis>.</para>
-
- <para>Die Erfolgsrechnung kann in der Mandantenkonfiguration unter Features
- an- oder abgeschaltet werden. Mit der Einstellung <varname>default_manager = swiss
- </varname> in der <filename>config/kivitendo.conf</filename> wird beim neu Erstellen
- einer Datenbank automatisch die Anzeige der Erfolgsrechnung im Menü <guimenu>Berichte
- </guimenu> ausgewählt und ersetzt dort die GUV.</para>
-
- <para>Im Gegensatz zur GUV werden bei der Erfolgsrechnung sämtliche Aufwands- und
- Erlöskonten einzeln aufgelistet (analog zur Bilanz), sortiert nach ERTRAG und AUFWAND.</para>
-
- <para>Bei den Konteneinstellungen muss bei jedem Konto, das in der Erfolgsrechnung
- erscheinen soll, unter <varname>Sonstige Einstellungen/Erfolgsrechnung</varname>
- entweder <literal>01.Ertrag</literal> oder <literal>06.Aufwand</literal> ausgewählt
- werden.</para>
-
- <para>Wird bei einem Erlöskonto <literal>06.Aufwand</literal> ausgewählt,
- so wird dieses Konto als Aufwandsminderung unter AUFWAND aufgelistet.</para>
-
- <para>Wird bei einem Aufwandskonto <literal>01.Ertrag</literal> ausgewählt,
- so wird dieses Konto als Ertragsminderung unter ERTRAG aufgelistet.</para>
-
- <para>Soll bei einer bereits bestehenden Buchhaltung in Zukunft zusätzlich
- die Erfolgsrechnung als Bericht verwendet werden, so müssen die Einstellungen
- zu allen Erlös- und Aufwandskonten unter <varname>Sonstige
- Einstellungen/Erfolgsrechnung</varname> überprüft und allenfalls neu gesetzt werden.</para>
+ <title>Erfolgsrechnung</title>
+
+ <para>Seit der Version 3.4.1 existiert in kivitendo der Bericht
+ <emphasis role="bold"> Erfolgsrechnung</emphasis>.</para>
+
+ <para>Die Erfolgsrechnung kann in der Mandantenkonfiguration unter
+ Features an- oder abgeschaltet werden. Mit der Einstellung
+ <varname>default_manager = swiss </varname> in der
+ <filename>config/kivitendo.conf</filename> wird beim neu Erstellen einer
+ Datenbank automatisch die Anzeige der Erfolgsrechnung im Menü
+ <guimenu>Berichte </guimenu> ausgewählt und ersetzt dort die GUV.</para>
+
+ <para>Im Gegensatz zur GUV werden bei der Erfolgsrechnung sämtliche
+ Aufwands- und Erlöskonten einzeln aufgelistet (analog zur Bilanz),
+ sortiert nach ERTRAG und AUFWAND.</para>
+
+ <para>Bei den Konteneinstellungen muss bei jedem Konto, das in der
+ Erfolgsrechnung erscheinen soll, unter <varname>Sonstige
+ Einstellungen/Erfolgsrechnung</varname> entweder
+ <literal>01.Ertrag</literal> oder <literal>06.Aufwand</literal>
+ ausgewählt werden.</para>
+
+ <para>Wird bei einem Erlöskonto <literal>06.Aufwand</literal>
+ ausgewählt, so wird dieses Konto als Aufwandsminderung unter AUFWAND
+ aufgelistet.</para>
+
+ <para>Wird bei einem Aufwandskonto <literal>01.Ertrag</literal>
+ ausgewählt, so wird dieses Konto als Ertragsminderung unter ERTRAG
+ aufgelistet.</para>
+
+ <para>Soll bei einer bereits bestehenden Buchhaltung in Zukunft
+ zusätzlich die Erfolgsrechnung als Bericht verwendet werden, so müssen
+ die Einstellungen zu allen Erlös- und Aufwandskonten unter
+ <varname>Sonstige Einstellungen/Erfolgsrechnung</varname> überprüft und
+ allenfalls neu gesetzt werden.</para>
</sect1>
<sect1 id="config.rounding">
- <title>Rundung in Verkaufsbelegen</title>
+ <title>Rundung in Verkaufsbelegen</title>
- <para>In der Schweiz hat die kleinste aktuell benutzte Münze den Wert von 5 Rappen (0.05 CHF).</para>
+ <para>In der Schweiz hat die kleinste aktuell benutzte Münze den Wert
+ von 5 Rappen (0.05 CHF).</para>
- <para>Auch wenn im elektronischen Zahlungsverkehr Beträge mit einer Genauigkeit
- von 0.01 CHF verwendet werden können, ist es trotzdem nach wie vor üblich,
- Rechnungen mit auf 0.05 CHF gerundeten Beträgen auszustellen.</para>
+ <para>Auch wenn im elektronischen Zahlungsverkehr Beträge mit einer
+ Genauigkeit von 0.01 CHF verwendet werden können, ist es trotzdem nach
+ wie vor üblich, Rechnungen mit auf 0.05 CHF gerundeten Beträgen
+ auszustellen.</para>
- <para>In kivitendo kann seit der Version 3.4.1 die Einstellung für eine solche
- Rundung pro Mandant / Datenbank festgelegt werden.</para>
+ <para>In kivitendo kann seit der Version 3.4.1 die Einstellung für eine
+ solche Rundung pro Mandant / Datenbank festgelegt werden.</para>
- <para>Die Einstellung wird beim Erstellen der Datenbank bei <literal>Genauigkeit</literal>
- festgelegt. Sie kann anschliessend über das Webinterface von kivitendo nicht mehr
- verändert werden.</para>
+ <para>Die Einstellung wird beim Erstellen der Datenbank bei
+ <literal>Genauigkeit</literal> festgelegt. Sie kann anschliessend über
+ das Webinterface von kivitendo nicht mehr verändert werden.</para>
- <para>Abhängig vom Wert für <varname>default_manager</varname> in
- <filename>config/kivitendo.conf</filename> werden dabei folgende
- Werte voreingestellt:</para>
- <itemizedlist>
+ <para>Abhängig vom Wert für <varname>default_manager</varname> in
+ <filename>config/kivitendo.conf</filename> werden dabei folgende Werte
+ voreingestellt:</para>
+
+ <itemizedlist>
<listitem>
<para>0.05 (default_manager = swiss)</para>
</listitem>
+
<listitem>
<para>0.01 (default_manager = german)</para>
</listitem>
</itemizedlist>
+
<para>Der Wert wird in der Datenbank in der Tabelle <varname>defaults
</varname>in der Spalte <varname>precision</varname> gespeichert.</para>
<para>In allen Verkaufsangeboten, Verkaufsaufträgen, Verkaufsrechnungen
- und Verkaufsgutschriften wird der Endbetrag inkl. MWST gerundet,
- wenn dieser nicht der eingestellten Genauigkeit entspricht.</para>
+ und Verkaufsgutschriften wird der Endbetrag inkl. MWST gerundet, wenn
+ dieser nicht der eingestellten Genauigkeit entspricht.</para>
<para>Beim Buchen einer Verkaufsrechnung wird der Rundungsbetrag
automatisch auf die in der Mandantenkonfiguration festgelegten
- Standardkonten für Rundungserträge bzw. Rundungsaufwendungen gebucht.</para>
+ Standardkonten für Rundungserträge bzw. Rundungsaufwendungen
+ gebucht.</para>
- <para>(Die berechnete MWST wird durch den Rundungsbetrag nicht mehr verändert.)</para>
+ <para>(Die berechnete MWST wird durch den Rundungsbetrag nicht mehr
+ verändert.)</para>
<para>Die in den Druckvorlagen zur Verfügung stehenden Variablen
<varname>quototal</varname>, <varname>ordtotal</varname> bzw.
<varname>invtotal</varname> enthalten den gerundeten Betrag.</para>
- <para><emphasis role="bold">Achtung:</emphasis> Werden Verkaufsbelege
- in anderen Währungen als der Standardwährung erstellt, so muss in
- kivitendo 3.4.1 die Genauigkeit 0.01 verwendet werden.</para>
- <para>Das heisst, Firmen in der Schweiz, die teilweise Verkaufsrechnungen
- in Euro oder anderen Währungen erstellen wollen, müssen beim Erstellen
- der Datenbank als Genauigkeit 0.01 wählen und können zur Zeit die
- 5er Rundung noch nicht nutzen.</para>
+ <para><emphasis role="bold">Achtung:</emphasis> Werden Verkaufsbelege in
+ anderen Währungen als der Standardwährung erstellt, so muss in kivitendo
+ ab Version 3.4.1 die Genauigkeit 0.01 verwendet werden.</para>
+
+ <para>Das heisst, Firmen in der Schweiz, die teilweise
+ Verkaufsrechnungen in Euro oder anderen Währungen erstellen wollen,
+ müssen beim Erstellen der Datenbank als Genauigkeit 0.01 wählen und
+ können zur Zeit die 5er Rundung noch nicht nutzen.</para>
</sect1>
<sect1 id="config.client">
linkend="dokumentenvorlagen-und-variablen.tag-style"/>).</para>
<para>kivitendo unterstützt LaTeX-, HTML- und OpenDocument-Vorlagen.
- Sofern es nicht ausdrücklich eingeschränkt wird, gilt das im
- Folgenden gesagte für alle Vorlagenarten.</para>
+ Sofern es nicht ausdrücklich eingeschränkt wird, gilt das im Folgenden
+ gesagte für alle Vorlagenarten.</para>
<para>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
verfügbar als hier aufgelistet werden. Die meisten davon können
<term><varname>rounding</varname></term>
<listitem>
- <para>Betrag, um den <varname>invtotal</varname> gerundet wurde
- (kann positiv oder negativ sein)</para>
+ <para>Betrag, um den <varname>invtotal</varname> gerundet
+ wurde (kann positiv oder negativ sein)</para>
</listitem>
</varlistentry>
<para>Die benutzerdefinierten Variablen der Lieferadressen stehen
unter einem ähnlichen Namensschema zur Verfügung. Hier lautet der
Präfix <varname>shiptocvar_</varname>.</para>
+
+ <para>Analog stehen die benutzerdefinierten Variablen für
+ Ansprechpersonen mit dem Namenspräfix <varname>cp_cvar_</varname>
+ zur Verfügung.</para>
</sect3>
</sect2>
<sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
<title>Allgemeine Variablen in Mahnungen</title>
- <para>Die Variablen des Bearbeiters, bzw. Verkäufers stehen wie gewohnt als
- <varname>employee_...</varname> bzw. <varname>salesman_...</varname> zur Verfügung.
- Werden mehrere Rechnungen in einer Mahnung zusammengefasst, so werden
- die Metadaten (Bearbeiter, Abteilung, etc) der ersten angemahnten Rechnung
- im Ausdruck genommen.</para>
- <para>Die Adressdaten des Kunden stehen als Variablen <varname>name</varname>,
- <varname>street</varname>, <varname>zipcode</varname>,
- <varname>city</varname>, <varname>country</varname>,
- <varname>department_1</varname>, <varname>department_2</varname>,
- und <varname>email</varname> zur Verfügung. Der Ansprechpartner <varname>cp_...</varname>
- steht auch zu Verfügung, wird allerdings auch nur von der ersten angemahnten Rechnung (s.o.)
- genommen.</para>
+ <para>Die Variablen des Bearbeiters, bzw. Verkäufers stehen wie
+ gewohnt als <varname>employee_...</varname> bzw.
+ <varname>salesman_...</varname> zur Verfügung. Werden mehrere
+ Rechnungen in einer Mahnung zusammengefasst, so werden die Metadaten
+ (Bearbeiter, Abteilung, etc) der ersten angemahnten Rechnung im
+ Ausdruck genommen.</para>
+
+ <para>Die Adressdaten des Kunden stehen als Variablen
+ <varname>name</varname>, <varname>street</varname>,
+ <varname>zipcode</varname>, <varname>city</varname>,
+ <varname>country</varname>, <varname>department_1</varname>,
+ <varname>department_2</varname>, und <varname>email</varname> zur
+ Verfügung. Der Ansprechpartner <varname>cp_...</varname> steht auch
+ zu Verfügung, wird allerdings auch nur von der ersten angemahnten
+ Rechnung (s.o.) genommen.</para>
<para>Weitere Variablen beinhalten:</para>
</sect1>
<sect1 id="features.warehouse">
-
-
<title>Mandantenkonfiguration Lager</title>
- <para>
- Die Lagerverwaltung in kivitendo funktioniert standardmässig wie folgt: Wird ein Lager mit einem Lagerplatz angelegt, so gibt es die
- Möglichkeit hier über den Menüpunkt Lager entsprechende Warenbewegungen durchzuführen. Ferner kann jede Position eines Lieferscheins
- ein-, bzw. ausgelagert werden (Einkauf-, bzw. Verkauf). Es können beliebig viele Lager mit beliebig vielen Lagerplätzen abgebildet
- werden. Die Lagerbewegungen über einen Lieferschein erfolgt durch Anklicken jeder Einzelposition und das Auswählen dieser Position zu
- einem Lager mit Lagerplatz. Dieses Verfahren lässt sich schrittweise vereinfachen, je nachdem wie die Einstellungen in der
- Mandatenkonfiguration gesetzt werden.
- </para>
+ <para>Die Lagerverwaltung in kivitendo funktioniert standardmässig wie
+ folgt: Wird ein Lager mit einem Lagerplatz angelegt, so gibt es die
+ Möglichkeit hier über den Menüpunkt Lager entsprechende Warenbewegungen
+ durchzuführen. Ferner kann jede Position eines Lieferscheins ein-, bzw.
+ ausgelagert werden (Einkauf-, bzw. Verkauf). Es können beliebig viele
+ Lager mit beliebig vielen Lagerplätzen abgebildet werden. Die
+ Lagerbewegungen über einen Lieferschein erfolgt durch Anklicken jeder
+ Einzelposition und das Auswählen dieser Position zu einem Lager mit
+ Lagerplatz. Dieses Verfahren lässt sich schrittweise vereinfachen, je
+ nachdem wie die Einstellungen in der Mandatenkonfiguration gesetzt
+ werden.</para>
<itemizedlist>
<listitem>
</listitem>
</itemizedlist>
- <para>
- Zusätzliche Funktionshinweise:
- </para>
+ <para>Zusätzliche Funktionshinweise:</para>
<itemizedlist>
<listitem>
verwendet.</para>
</listitem>
</itemizedlist>
-
-
</sect1>
<sect1 id="features.swiss-charts-of-accounts">
- <title>Schweizer Kontenpläne</title>
-
- <para>Seit der Version 3.4.1 stehen in kivitendo 2 Kontenpläne für
- den Einsatz in der Schweiz zur Verfügung, einer für Firmen und
- Organisationen, die nicht mehrwertsteuerpflichtig sind, und einer
- für Firmen, die mehrwertsteuerpflichtig sind.</para>
-
- <para>Die Kontenpläne orientieren sich am in der Schweiz üblicherweise
- verwendeten KMU-Kontenrahmen und sind mit der Revision des Schweizerischen
- Obligationenrechts (OR) vom 1.1.2013 kompatibel, insbesondere
- <literal>Art.957a Abs.2</literal>.</para>
-
- <para>Die Möglichkeit, Saldosteuersätze zu verwenden ist in der aktuellen
- Version von kivitendo noch nicht integriert.</para>
+ <title>Schweizer Kontenpläne</title>
+
+ <para>Seit der Version 3.5 stehen in kivitendo 3 Kontenpläne für den
+ Einsatz in der Schweiz zur Verfügung, einer für Firmen und
+ Organisationen, die nicht mehrwertsteuerpflichtig sind, einer für
+ Firmen, die mehrwertsteuerpflichtig sind und einer speziell für
+ Vereine.</para>
+
+ <para>Die Kontenpläne orientieren sich am in der Schweiz üblicherweise
+ verwendeten KMU-Kontenrahmen und sind mit der Revision des
+ Schweizerischen Obligationenrechts (OR) vom 1.1.2013 kompatibel,
+ insbesondere <literal>Art.957a Abs.2</literal>.</para>
+
+ <para>Beim Vereinskontenplan sind standardmässig nur die Konten 1100
+ (Debitoren CHF) und 1101 (Debitoren EUR) als Buchungskonten im Verkauf
+ sowie die Konten 2000 (Kreditoren CHF) und 2001 (Kreditoren EUR) als
+ Buchungskonten im Einkauf vorgesehen. Weitere Konten können bei Bedarf
+ in den Konto-Detaileinstellungen als Einkaufs- oder Verkaufskonten
+ konfiguriert werden.</para>
+
+ <para>Die Möglichkeit, Saldosteuersätze zu verwenden ist in der
+ aktuellen Version von kivitendo noch nicht integriert.</para>
+
+ <para>Trotzdem können auch Firmen, die per Saldosteuersatz mit der
+ Eidgenössischen Steuerverwaltung abrechnen, kivitendo bereits nutzen.
+ Dazu wird der Kontenplan mit MWST ausgewählt. Anschliessend müssen alle
+ Aufwandskonten editiert werden und dort der Steuersatz auf 0% gesetzt
+ werden.</para>
- <para>Trotzdem können auch Firmen, die per Saldosteuersatz mit der
- Eidgenössischen Steuerverwaltung abrechnen, kivitendo bereits nutzen.
- Dazu wird der Kontenplan mit MWST ausgewählt. Anschliessend müssen
- alle Aufwandskonten editiert werden und dort der Steuersatz auf 0%
- gesetzt werden.</para>
+ <para>So werden bei Kreditorenbuchungen keine Vorsteuern
+ verbucht.</para>
- <para>So werden bei Kreditorenbuchungen keine Vorsteuern verbucht.</para>
+ <para>Bezugssteuern für aus dem Ausland bezogene Dienstleistungen müssen
+ manuell verbucht werden.</para>
- <para>Wünsche für Anpassungen an den Schweizer Kontenplänen sowie
- Vorschläge für weitere (z.B. branchenspezifische) Kontenpläne
- bitte an <literal>empfang@revamp-it.ch</literal> senden.</para>
+ <para>Wünsche für Anpassungen an den Schweizer Kontenplänen sowie
+ Vorschläge für weitere (z.B. branchenspezifische) Kontenpläne bitte an
+ <literal>empfang@revamp-it.ch</literal> senden.</para>
</sect1>
- <sect1>
+
+ <sect1 id="features.part_classification">
<title>Artikelklassifizierung</title>
<sect2>
<title>Übersicht</title>
- <para>Die Klassifizierung von Artikeln dient einer weiteren Gliederung
- um zum Beispiel den Einkauf vom Verkauf zu trennen, gekennzeichnet
- durch eine Beschreibung (z.B. "Einkauf") und ein Kürzel (z.B. "E").
- Für jede Klassifizierung besteht eine Beschreibung und eine Abkürzung
- die normalerweise aus einem Zeichen besteht, kann aber auf mehrere
- Zeichen erweitert werden, falls zur Unterscheidung notwendig, sinnvoll
- sind jedoch nur maximal 2 Zeichen.</para>
+ <para>Die Klassifizierung von Artikeln dient einer weiteren
+ Gliederung, um zum Beispiel den Einkauf vom Verkauf zu trennen,
+ gekennzeichnet durch eine Beschreibung (z.B. "Einkauf") und ein Kürzel
+ (z.B. "E"). Für jede Klassifizierung besteht eine Beschreibung und
+ eine Abkürzung die normalerweise aus einem Zeichen besteht, kann aber
+ auf mehrere Zeichen erweitert werden, falls zur Unterscheidung
+ notwendig. Sinnvoll sind jedoch nur maximal 2 Zeichen.</para>
</sect2>
<sect2>
<listitem>
<para>- keine - (diese wird bei einer Aktualisierung für alle
- existierenden Artikel genommen, gültig für Verkauf und
+ existierenden Artikel verwendet und ist gültig für Verkauf und
Einkauf)</para>
</listitem>
</itemizedlist>
<para>Es können weitere Klassifizierungen angelegt werden. So kann es
- z.B. für separat auszuweisende Artikel folgened Klassen geben:</para>
+ z.B. für separat auszuweisende Artikel folgende Klassen geben:</para>
- <orderedlist>
+ <itemizedlist>
<listitem>
<para>Lieferung (Logistik, Transport) mit Kürzel L</para>
</listitem>
<listitem>
<para>Material (Verpackungsmaterial) mit Kürzel M</para>
</listitem>
- </orderedlist>
+ </itemizedlist>
</sect2>
<sect2>
<listitem>
<para>separat ausweisen - hierzu gibt es zur Dokumentengenerierung
- (LaTeX) zusätzliche Variable</para>
+ (LaTeX) eine zusätzliche Variable</para>
</listitem>
</itemizedlist>
- <para>Beim separat ausweisen stehen im LaTeX die Variable <emphasis
+ <para>Für das Attribut "separat ausweisen" stehen in den
+ LaTeX-Vorlagen die Variable <emphasis
role="bold"><%non_separate_subtotal%> </emphasis>zur Verfügung,
die alle nicht separat auszuweisenden Artikelkosten saldiert, sowie
pro separat auszuweisenden Klassifizierungen die Variable<emphasis
- role="bold"> <%separate_X_subtotal%></emphasis> wobei X das
+ role="bold">< %separate_X_subtotal%></emphasis>, wobei X das
Kürzel der Klassifizierung ist.</para>
<para>Im obigen Beispiel wäre das für Lieferkosten <emphasis
role="bold"><%separate_L_subtotal%></emphasis> und für
- Verpackungsmaterial <emphasis
- role="bold"><%separate_M_subtotal%> </emphasis>.</para>
+ Verpackungsmaterial <emphasis role="bold">
+ <%separate_M_subtotal%></emphasis>.</para>
</sect2>
<sect2>
<title>Zwei-Zeichen Abkürzung</title>
- <para>Der Typ des Artikel und die Klassifizierung werden durch zwei
+ <para>Der Typ des Artikels und die Klassifizierung werden durch zwei
Buchstaben dargestellt. Der erste Buchstabe ist eine Lokalisierung des
- Typs des Artikel ('P','A','S') , deutch 'W', 'E', und 'D' für Ware
- Erzeugnis oder Dienstleistung, ggf. weitere Typen.</para>
+ Artikel-Typs ('P','A','S'), deutsch 'W', 'E', und 'D' für Ware
+ Erzeugnis oder Dienstleistung und ggf. weiterer Typen.</para>
- <para>Der zweite (und ggf. auch ein dritter Buchstabe, falls nötig)
+ <para>Der zweite Buchstabe (und ggf. auch ein dritter, falls nötig)
entspricht der lokalisierten Abkürzung der Klassifizierung.</para>
<para>Diese Abkürzung wird überall beim Auflisten von Artikeln zur
Erleichterung mit dargestellt.</para>
</sect2>
</sect1>
+
+ <sect1 id="features.file_managment">
+ <title>Dateiverwaltung (Mini-DMS)</title>
+
+ <sect2>
+ <title>Übersicht</title>
+
+ <para>Parallel zum alten WebDAV gibt es ein Datei-Management-System,
+ das Dateien verschiedenen Typs verwaltet. Dies können</para>
+
+ <orderedlist>
+ <listitem>
+ <para>aus ERP-Daten per LaTeX Template erzeugte
+ PDF-Dokumente,</para>
+ </listitem>
+
+ <listitem>
+ <para>zu bestimmten ERP-Daten gehörende Anhangdateien
+ unterschiedlichen Formats,</para>
+ </listitem>
+
+ <listitem>
+ <para>per Scanner eingelesene PDF-Dateien,</para>
+ </listitem>
+
+ <listitem>
+ <para>per E-Mail empfangene Dateianhänge unterschiedlichen
+ Formats,</para>
+ </listitem>
+
+ <listitem>
+ <para>sowie speziel für Artikel hochgeladene Bilder sein.</para>
+ </listitem>
+ </orderedlist>
+
+ <screenshot>
+ <screeninfo>Übersicht</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata contentwidth="600" fileref="images/DMS-Overview.png"/>
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+ </sect2>
+
+ <sect2>
+ <title>Struktur</title>
+
+ <para>Über eine vom Speichermedium unabhängige Zwischenschicht werden
+ die Dateien und ihre Versionen in der Datenbank verwaltet. Darunter
+ können verschiedene Implementierungen (Backends) gleichzeitig
+ existieren:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Dateisystem</para>
+ </listitem>
+
+ <listitem>
+ <para>WebDAV</para>
+ </listitem>
+
+ <listitem>
+ <para>Schnittstelle zu externen
+ Dokumenten-Management-Systemen</para>
+ </listitem>
+
+ <listitem>
+ <para>andere Datenbank</para>
+ </listitem>
+
+ <listitem>
+ <para>etc ...</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Es gibt unterschiedliche Typen von Dateien. Jedem Typ läßt sich
+ in der Mandantenkonfiguration ein bestimmtes Backend zuordnen.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>"document": Das sind entweder generierte, eingescannte oder
+ hochgeladene PDF-Dateien, die zu bestimmten ERP-Daten
+ (ERP-Objekte, wie z.B. Rechnung, Lieferschein) gehören.</para>
+ </listitem>
+
+ <listitem>
+ <para>"attachment": zusätzlich hochgeladene Dokumente, die an
+ bestimmte ERP-Objekte angehängt werden, z.B. technische
+ Zeichnungen, Aufmaße. Diese können auch für Artikel, Lieferanten
+ und Kunden hinterlegt sein.</para>
+ </listitem>
+
+ <listitem>
+ <para>"image": Bilder für Artikel. Diese können auch verkleinert
+ in einer Vorschau (Thumbnail) angezeigt werden.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Zusätzlich werden in der Datenbank zu den Dateien neben der
+ Zuordnung zu ERP-Objekten, Dateityp Dateinamen und Backend, in dem die
+ Datei gespeichert ist, auch die Quelle der Datei notiert:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>"created": vom System erzeugte Dokumente"</para>
+ </listitem>
+
+ <listitem>
+ <para>"uploaded": hochgeladene Dokumente</para>
+ </listitem>
+
+ <listitem>
+ <para>"email": vom Mail-System empfangene Dateien</para>
+ </listitem>
+
+ <listitem>
+ <para>"scanner[1]": von einem oder mehreren Scannern erzeugte
+ Dateien. Existieren mehrere Scanner, so sind diese durch
+ unterschiedliche Quellennamen zu definieren.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Je nach Dateityp sind nur bestimmte Quellen zulässig. So gibt es
+ für "attachment" und "image" nur die Quelle "uploaded". Für "document"
+ gibt es auf jeden Fall die Quelle "created". Die Quellen "scanner" und
+ "email" müssen derzeit in der Datenbank konfiguriert werden (siehe
+ <xref linkend="file_management.dbconfig"/>).</para>
+ </sect2>
+
+ <sect2>
+ <title>Anwendung</title>
+
+ <para>Die Daten werden bei den ERP-Objekten als extra Reiter
+ dargestellt. Eine Verkaufsrechnung z.B. hat die Reiter "Dokumente" und
+ "Dateianhänge".</para>
+
+ <screenshot>
+ <screeninfo>Reiter "Dateianhänge"</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/DMS-Anhaenge.png" scale="50"/>
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para>Bei den Dateianhängen wird immer nur die aktuelle Version einer
+ Datei angezeigt. Wird eine Datei mit gleichem Namen hochgeladen, so
+ wird eine neue Version der Datei erstellt. Vorher wird der Anwender
+ durch einen Dialog gefragt, ob er eine neue Version anlegen will oder
+ ob er die Datei umbenennen will, falls es eine neue Datei sein
+ soll.</para>
+
+ <screenshot>
+ <screeninfo>Reiter "Dateianhänge"</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata contentwidth="40"
+ fileref="images/DMS-Anhaenge-hochladen.png"
+ width="100"/>
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para>Es können mehrere Dateien gleichzeitig hochgeladen werden,
+ solange in Summe die maximale Größe nicht überschritten wird (siehe
+ <xref linkend="file_management.clientconfig"/>).</para>
+
+ <screenshot>
+ <screeninfo>Reiter "Dokumente"</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/DMS-Dokumente.png" width="500"/>
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para>Sind keine weiteren Quellen für Dokumente konfiguriert, so gibt
+ es nur "erzeugte Dokumente". Es werden alle Versionen der generierten
+ Datei angezeigt. Für Verkaufsrechnungen kommen keine anderen Quellen
+ zur Geltung. Werden entsprechend der <xref
+ linkend="file_management.dbconfig"/> zusätzliche Quellen konfiguriert,
+ so sind diese z.B. bei Einkaufsrechnungen sichtbar:</para>
+
+ <screenshot>
+ <screeninfo>Reiter "Dokumente"</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata contentwidth="600"
+ fileref="images/DMS-Dokumente-Scanner.png"/>
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para>Statt des Löschens wird hier die Datei zurück zur Quelle
+ verschoben. Somit kann die Datei anschließend an ein anderes
+ ERP-Objekt angehängt werden.</para>
+
+ <para>Derzeit sind "Titel" und "Beschreibung" noch nicht genutzt. Sie
+ sind bisher nur bei Bildern relevant.</para>
+ </sect2>
+
+ <sect2>
+ <title>Konfigurierung</title>
+
+ <sect3 id="file_management.clientconfig"
+ xreflabel="Mandantenkonfigurierung">
+ <title>Mandantenkonfiguration</title>
+
+ <sect4>
+ <title>Reiter "Features"</title>
+
+ <para>Unter dem Reiter <emphasis role="bold">Features</emphasis>
+ im Abschnitt Dateimanagement ist neben dem "alten" WebDAV das
+ Dateimangement generell zu- und abschaltbar, sowie die Zuordnung
+ der Dateitypen zu Backends. Die Löschbarkeit von Dateien, sowie
+ die maximale Uploadgröße sind Backend-unabhängig</para>
+
+ <screenshot>
+ <screeninfo>Mandantenkonfig Reiter "Features"</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/DMS-ClientConfig.png" width="500"/>
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para>Die einzelnen Backends sind einzeln einschaltbar.
+ Spezifische Backend-Konfigurierungen sind hier noch
+ ergänzbar.</para>
+ </sect4>
+
+ <sect4>
+ <title>Reiter "Allgemeine Dokumentenanhänge"</title>
+
+ <para>Unter dem Reiter <emphasis role="bold">Allgemeine
+ Dokumentenanhänge</emphasis> kann für alle ERP-Dokumente (
+ Angebote, Aufträge, Lieferscheine, Rechnungen im Verkauf und
+ Einkauf ) allgemeingültige Anhänge hochgeladen werden.</para>
+
+ <screenshot>
+ <screeninfo>Mandantenkonfig Reiter "Allgemeine
+ Dokumentenanhänge"</screeninfo>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/DMS-Allgemeine-Dokumentenanhaenge.png"
+ width="500"/>
+ </imageobject>
+ </mediaobject>
+ </screenshot>
+
+ <para>Diese Anhänge werden beim Generieren von PDF-Dateien an die
+ ERP-Dokumente angehängt, z.B. AGBs oder aktuelle Angebote. Es
+ werden in dem Fall die Daten kopiert, sodass an den ERP-Dokumenten
+ immer die Anhänge zum Generierungszeitpunkt eingebettet
+ sind.</para>
+ </sect4>
+ </sect3>
+
+ <sect3 id="file_management.dbconfig"
+ xreflabel="Datenbank-Konfigurierung">
+ <title>Datenbank-Konfigurierung</title>
+
+ <para>Die zusätzlichen Quellen für "email" oder ein oder mehrere
+ Scanner sind derzeit vom Administrator direkt in der
+ Datenbanktabelle "user_preferences" einzurichten. Die "value" ist im
+ JSON-Format mit den jeweiligen Werten des Verzeichnisses und der
+ Beschreibung der Quelle.</para>
+
+ <programlisting>
+ id | login | namespace | version | key | value
+----+-----------+--------------+---------+----------+---------------------------
+ 1 | #default# | file_sources | 0.00000 | scanner1 |
+ {"dir":"/var/tmp/scanner1","desc":"Scanner Einkauf"}
+ 2 | #default# | file_sources | 0.00000 | scanner2 |
+ {"dir":"/var/tmp/scanner2","desc":"Scanner Verkauf"}
+ 3 | #default# | file_sources | 0.00000 | emails |
+ {"dir":"/var/tmp/emails","desc":"Empfangene Mails" }
+ </programlisting>
+
+ <para>Es ist daran gedacht, statt dem Default-Eintrag später für
+ bestimmte Benutzer ('login') bestimmte Quellen zuzulassen. Dies wird
+ nach Bedarf implementiert.</para>
+ </sect3>
+
+ <sect3 id="file_management.kiviconfig"
+ xreflabel="kivitendo-Konfigurationsdatei">
+ <title>kivitendo-Konfigurationsdatei</title>
+
+ <para>Dort ist im Abschnitt [paths] der relative oder absolute Pfad
+ zum Dokumentenwurzelverzeichnis einzutragen. Dieser muss für den
+ Webserver schreib- und lesbar sein, jedoch nicht ausführbar.</para>
+
+ <programlisting>
+[paths]
+document_path = /var/local/kivi_documents
+ </programlisting>
+
+ <para>Unter diesem Wurzelverzeichnis wird pro Mandant automatisch
+ ein Unterverzeichnis mit der ID des Mandanten angelegt.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <sect1>
+ <title>Webshop-Api</title>
+
+ <para>Das Shopmodul bietet die Möglichkeit Onlineshopartikel und
+ Onlineshopbestellungen zu verwalten und zu bearbeiten.</para>
+
+ <para>Es ist Multishopfähig, d.h. Artikel können mehreren oder
+ unterschiedlichen Shops zugeordnet werden. Bestellungen können aus
+ mehreren Shops geholt werden.</para>
+
+ <para>Zur Zeit bietet das Modul nur einen Connector zur REST-Api von
+ Shopware. Weitere Connectoren können dazu programmiert und eingerichtet
+ werden.</para>
+
+ <sect2>
+ <title>Rechte für die Webshopapi</title>
+
+ <para>In der Administration können folgende Rechte vergeben
+ werden</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Webshopartikel anlegen und bearbeiten</para>
+ </listitem>
+
+ <listitem>
+ <para>Shopbestellungen holen und bearbeiten</para>
+ </listitem>
+
+ <listitem>
+ <para>Shop anlegen und bearbeiten</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Konfiguration</title>
+
+ <para>Unter System->Webshops können Shops angelegt und konfiguriert
+ werden</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata contentdepth="500" contentwidth="700"
+ fileref="images/Shop_Listing.png"/>
+ </imageobject>
+ </mediaobject>
+ </sect2>
+
+ <sect2>
+ <title>Webshopartikel</title>
+
+ <sect3>
+ <title>Shopvariablenreiter in Artikelstammdaten</title>
+
+ <para>Mit dem Recht "Shopartikel anlegen und bearbeiten" und des
+ Markers <emphasis role="bold">"Shopartikel" in den Basisdaten
+ </emphasis>zeigt sich der Reiter "Shopvariablen" in den
+ Artikelstammdaten. Hier können jetzt die Artikel mit
+ unterschiedlichen Beschreibung und/oder Preisen für die
+ konfigutierten Shops angelegt und bearbeitet werden. An dieser
+ Stelle können auch beliebig viele Bilder dem Shopartikel zugeordnet
+ werden. Artikelbilder gelten für alle Shops.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata contentdepth="500" contentwidth="600"
+ fileref="images/Shop_Artikel.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>Die Artikelgruppen werden direkt vom Shopsystem geholt somit
+ ist es möglich einen Artikel auch mehreren Gruppen
+ zuzuordenen</para>
+ </sect3>
+
+ <sect3>
+ <title>Shopartikelliste</title>
+
+ <para>Unter dem Menu Webshop->Webshop Artikel hat man nochmal
+ eine Gesamtübersicht. Von hier aus ist es möglich Artikel im Stapel
+ unter verschiedenen Kriterien <alles><nur Preis><nur
+ Bestand><Preis und Bestand> an die jeweiligen Shops
+ hochzuladen.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/Shop_Artikel_Listing.png"/>
+ </imageobject>
+ </mediaobject>
+ </sect3>
+ </sect2>
+
+ <sect2>
+ <title>Bestellimport</title>
+
+ <para>Unter dem Menupunkt Webshop->Webshop Import öffnet sich die
+ Bestellimportsliste. Hier ist sind Möglichkeiten gegeben Neue
+ Bestellungen vom Shop abzuholen, geholte Bestellungen im Stapel oder
+ einzeln als Auftrag zu transferieren. Die Liste kann nach
+ verschiedenen Kriterien gefiltert werden.</para>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="images/Shop_Bestell.png"/>
+ </imageobject>
+ </mediaobject>
+
+ <para>Bei Einträgen in der Liste.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>keine Kundennummer: Es gibt ähnliche Kundendatensätze und
+ der Datensatz konnte nicht eindeutig zugewiesen werden.</para>
+ </listitem>
+
+ <listitem>
+ <para>Kundennummer und Rechnungen rot hinterlegt: Der Kunde hat
+ offene Posten und kann deswegen nicht im Stapel übernommen
+ werden.</para>
+ </listitem>
+
+ <listitem>
+ <para>Rechnungsadresse grün hinterlegt: Der Kunde konnte eindeutig
+ einem Datensatz zugeordnet werden. Die Shopbestellung kann im
+ Stapel mit dem Button "Anwenden" und wenn markiert als Auftrag
+ übernommen werden.</para>
+ </listitem>
+
+ <listitem>
+ <para>Kundennummer vorhanden, aber die Checkbox "Auftrag
+ erstellen" fehlt. Der Kunde hat vermutlich eine
+ Shopauftragssperre.</para>
+ </listitem>
+
+ <listitem>
+ <para>Lieferadresse grau hinterlegt: Optische Anzeige, dass es
+ sich um eine unterschiedliche Lieferadresse handelt.
+ Lieferadressen werden aber grundsätzlich beim Transferieren zu
+ Aufträgen mit übernommen.</para>
+ </listitem>
+
+ <listitem>
+ <para>In der Spalte Positionen/Betrag/Versandkosten zeigt sich ein
+ tooltip zu den Positionen.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Maske Auftrag erstellen</para>
+
+ <para>Viele Shopsysteme haben drei verschieden Adresstypen Kunden-,
+ Rechnungs-, und Lieferadresse, die sich auch alle unterscheiden
+ können. Diese werden im oberen Bereich angezeigt. Es ist möglich jede
+ dieser Adresse einzeln in kivitendo als Kunde zu übernehmen. Es werden
+ die Werte Formulareingabe übernommen. Es wird bei einer Änderung
+ allerdings nur diese in die kivitendo Kundenstammdaten übernommen, die
+ Shopbestellung bleibt bestehen.</para>
+
+ <para>Mit der mittleren Adresse(Rechnungsadresse) im oberen Bereich,
+ kann ich den ausgewählten kivitendodatensatz des mittleren Bereich
+ überschreiben. Das ist sinnvoll, wenn ich erkenne, das der Kunde z.B.
+ umgezogen ist.</para>
+
+ <para>Im mittleren Bereich das Adresslisting zeigt:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Rot hinterlegt: Kunde hat eine Shopauftragssperre, diese
+ muss zuerst deaktiviert werden bevor ich diesem Kunden eine
+ Shopbestellung zuordnen kann.</para>
+ </listitem>
+
+ <listitem>
+ <para>Kundenname fett und rot: Hier hat der Kunde eine Bemerkung
+ in den Stammdaten. Ein Tooltip zeigt diese Bemerkung. Das kann dan
+ auch der Grund für die Auftragssperre sein.</para>
+ </listitem>
+
+ <listitem>
+ <para>Die Buttons "Auftrag erstellen" und "Kunde mit
+ Rechnungsadresse überschreiben" zeigen sich erst, wenn ein Kunde
+ aus dem Listing ausgewählt ist.</para>
+ </listitem>
+
+ <listitem>
+ <para>Es ist aber möglich die Shopbestellung zu löschen.</para>
+ </listitem>
+
+ <listitem>
+ <para>Ist eine Bestellung schon übernommen, zeigen sich an dieser
+ Stelle, die dazugehörigen Belegverknüpfungen.</para>
+ </listitem>
+ </itemizedlist>
+ </sect2>
+
+ <sect2>
+ <title>Mapping der Daten</title>
+
+ <para>Das Mapping der kivitendo Daten mit den Shopdaten geschieht in
+ der Datei SL/ShopConnector/<SHOPCONNECTORNAME>.pm
+ z.B.:SL/ShopConnector/Shopware.pm</para>
+
+ <para>In dieser Datei gibt es einen Bereich wo die Bestellpostionen,
+ die Bestellkopfdaten und die Artikeldaten gemapt werden. In dieser
+ Datei kann ein individelles Mapping dann gemacht werden. Zu Shopware
+ gibt es hier eine sehr gute Dokumentation: <ulink
+ url="https://developers.shopware.com/developers-guide/rest-api/">https://developers.shopware.com/developers-guide/rest-api/</ulink></para>
+ </sect2>
+ </sect1>
</chapter>
<chapter>
</listitem>
<listitem>
- <para>Enthält unter anderem Listenbegrenzung vclimit,
- Datumsformat dateformat und Nummernformat numberformat</para>
+ <para>Enthält unter anderem Datumsformat dateformat und
+ Nummernformat numberformat</para>
</listitem>
<listitem>
</sect2>
</sect1>
+ <sect1 id="dev-programmatic-api-calls" xreflabel="Programmatische API-Aufrufe">
+ <title>Programmatische API-Aufrufe</title>
+
+ <sect2 id="dev-programmatic-api-calls.introduction" xreflabel="Einführung in programmatische API-Aufrufe">
+ <title>Einführung</title>
+
+ <para>
+ Es ist möglich, Funktionen in kivitendo programmatisch aus anderen Programmen aufzurufen. Dazu ist nötig, dass
+ Authentifizierungsinformationen in jedem Aufruf mitgegeben werden. Dafür gibt es zwei Methoden: die HTTP-»Basic«-Authentifizierung
+ oder die Übergabe als spziell benannte GET-Parameter. Neben den Authentifizierungsinformationen muss auch der zu verwendende Mandant
+ übergeben werden.
+ </para>
+ </sect2>
+
+ <sect2 id="dev-programmatic-api-calls.client_selection" xreflabel="Mandantenauswahl bei programmatischen API-Aufrufen">
+ <title>Wahl des Mandanten</title>
+
+ <para>
+ Der zu verwendende Mandant kann als Parameter <varname>{AUTH}client_id</varname> mit jedem Request mitgeschickt werden. Der Wert
+ muss dabei die Datenbank-ID des Mandanten sein. kivitendo prüft, ob der Account, der über die Authentifizierungsinformationen
+ übergeben wurde, Zugriff auf den angegebenen Mandanten hat.
+ </para>
+
+ <para>
+ Wird in einem Request kein Mandant mitgegeben, so wird derjenige Mandant genommen, wer als Standardmandant markiert wurde. Gibt es
+ keinen solchen, kommt es zu einer Fehlermeldung.
+ </para>
+ </sect2>
+
+ <sect2 id="dev-programmatic-api-calls.http_basic_authentication" xreflabel="Programmatische API-Aufrufe mit HTTP-»Basic« authentifizieren">
+ <title>HTTP-»Basic«-Authentifizierung</title>
+
+ <para>
+ Für diese Methode muss jedem Request der bekannte HTTP-Header <constant>Authorization</constant> mitgeschickt werden (siehe <ulink
+ url="https://tools.ietf.org/html/rfc7617">RFC 7617</ulink>). Unterstützt wird ausschließlich die »Basic«-Methode. Loginname und
+ Passwort werden bei dieser Methode durch einen Doppelpunkt getrennt und Base64-encodiert im genannten HTTP-Header übertragen.
+ </para>
+
+ <para>
+ Diese Informationen müssen einen vorhandenen Account benennen. kivitendo prüft genau wie bei Benutzung über den Webbrowser, ob
+ dieser Account Zugriff auf den Mandanten sowie auf die angeforderte Funktion hat.
+ </para>
+
+ <para>
+ Da die Logininformationen im Klartext im Request stehen, sollte der Zugriff auf kivitendo ausschließlich über HTTPS verschlüsselt
+ erfolgen.
+ </para>
+ </sect2>
+
+ <sect2 id="dev-programmatic-api-calls.authentication_via_parameters" xreflabel="Programmatische API-Aufrufe mit Parametern authentifizieren">
+ <title>Authentifizierung mit Parametern</title>
+
+ <para>
+ Für diese Methode müssen jedem Request zwei Parameter mitgegeben werden: <varname>{AUTH}login</varname> und
+ <varname>{AUTH}password</varname>. Diese Informationen müssen einen vorhandenen Account benennen. kivitendo prüft genau wie bei
+ Benutzung über den Webbrowser, ob dieser Account Zugriff auf den Mandanten sowie auf die angeforderte Funktion hat.
+ </para>
+
+ <para>
+ Da die Logininformationen im Klartext im Request stehen, sollte der Zugriff auf kivitendo ausschließlich über HTTPS verschlüsselt
+ erfolgen.
+ </para>
+
+ <note>
+ <para>
+ Die Verwendung dieser Methode ist veraltet. Statt dessen sollte die oben erwähnte HTTP-»Basic«-Authentifizierung verwendet werden.
+ </para>
+ </note>
+ </sect2>
+
+ <sect2 id="dev-programmatic-api-calls.examples">
+ <title>Beispiele</title>
+
+ <para>
+ Das folgende Beispiel nutzt das Kommandozeilenprogramm »curl« und ruft die Funktion auf, die eine vorhandene Telefonnummer in den
+ Ansprechpersonen sucht und dazu Informationen zurückliefert. Dabei wird die HTTP-»Basic«-Authentifizierung genutzt.
+ </para>
+
+ <programlisting>$ curl --silent --user 'jdoe:SecretPassword!' \
+ 'https://…/controller.pl?action=PhoneNumber/look_up&number=053147110815'</programlisting>
+ </sect2>
+ </sect1>
+
<sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
<title>SQL-Upgradedateien</title>
<literal>perl-URI-Find</literal>; openSUSE:
<literal>perl-URI-Find</literal>)</para>
</listitem>
+
+ <listitem>
+ <para><literal>Sys::CPU</literal> (Debian-Panetname:
+ <literal>libsys-cpu-perl</literal>; Fedora und openSUSE: nicht
+ vorhanden)</para>
+ </listitem>
+
+ <listitem>
+ <para><literal>Thread::Pool::Simple</literal> (Debian-Panetname:
+ <literal>libthread-pool-simple-perl</literal>; Fedora und
+ openSUSE: nicht vorhanden)</para>
+ </listitem>
</itemizedlist>
<para>Weitere Voraussetzung ist, dass die Testsuite ihre eigene
<literal>testing/database</literal> Datenbankverbindungsparameter
angegeben werden. Der hier angegebene Benutzer muss weiterhin das
Recht haben, Datenbanken anzulegen und zu löschen.</para>
+
+ <para>Der so angegebene Benutzer muss nicht zwingend über
+ Super-User-Rechte verfügen. Allerdings gibt es einige
+ Datenbank-Upgrades, die genau diese Rechte benötigen. Für den Fall
+ kann man in diesem Konfigurationsabschnitt einen weiteren
+ Benutzeraccount angeben, der dann über Super-User-Rechte verfügt, und
+ mit dem die betroffenen Upgrades durchgeführt werden. In der
+ Beispiel-Konfigurationsdatei finden Sie die benötigten
+ Parameter.</para>
</sect2>
<sect2 id="devel.testsuite.execution">
sein. Dieser wird für die Datenbankverbindung benötigt.</para>
<para>Wir keine vollständig initialisierte Umgebung benötigt, so
- kann die letzte Zeile <code>Support::TestSetup::login();</code>
+ kann die letzte Zeile <programlisting>Support::TestSetup::login();</programlisting>
weggelassen werden, was die Ausführungszeit des Scripts leicht
verringert.</para>
</sect3>