Versionsnummer in Dokumentationen für 3.6.1 angepasst
[kivitendo-erp.git] / doc / dokumentation.xml
index 65daff9..1da2798 100644 (file)
@@ -2,7 +2,7 @@
 <!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.5.5: Installation, Konfiguration,
+  <title>kivitendo 3.6.1: Installation, Konfiguration,
   Entwicklung</title>
 
   <chapter id="Aktuelle-Hinweise">
           </listitem>
 
           <listitem>
-            <para>openSUSE 15.0</para>
+            <para>openSUSE Leap 15.x und SUSE Linux Enterprise Server 15 GA</para>
           </listitem>
 
           <listitem>
             <para><literal>DBD::Pg</literal></para>
           </listitem>
 
+          <listitem>
+            <para><literal>Digest::SHA</literal></para>
+          </listitem>
+
           <listitem>
             <para><literal>Email::Address</literal></para>
           </listitem>
             <para><literal>Image::Info</literal></para>
           </listitem>
 
+          <listitem>
+            <para><literal>Imager</literal></para>
+          </listitem>
+
+          <listitem>
+            <para><literal>Imager::QRCode</literal></para>
+          </listitem>
+
+          <listitem>
+            <para><literal>IPC::Run</literal></para>
+          </listitem>
+
           <listitem>
             <para><literal>JSON</literal></para>
           </listitem>
             linkend="config.sending-email.smtp"/>")</para>
           </listitem>
 
+          <listitem>
+            <para><literal>Math::Round</literal></para>
+          </listitem>
+
           <listitem>
             <para><literal>Params::Validate</literal></para>
           </listitem>
             <para><literal>Regexp::IPv6</literal></para>
           </listitem>
 
+          <listitem>
+            <para><literal>Rest::Client</literal></para>
+          </listitem>
+
           <listitem>
             <para><literal>Rose::Object</literal></para>
           </listitem>
             <para><literal>Text::Unidecode</literal></para>
           </listitem>
 
+          <listitem>
+            <para><literal>Try::Tiny</literal></para>
+          </listitem>
+
           <listitem>
             <para><literal>URI</literal></para>
           </listitem>
         </itemizedlist>
 
 
+        <para>Seit Version größer v3.6.0 sind die folgenden Pakete hinzugekommen: <literal>IPC::Run</literal></para>
+
+        <para>Seit Version größer v3.5.8 sind die folgenden Pakete hinzugekommen: <literal>Imager</literal>, <literal>Imager::QRCode</literal>
+<literal>Rest::Client</literal><literal>Term::ReadLine::Gnu</literal></para>
+
+        <para>Seit Version größer v3.5.6 sind die folgenden Pakete hinzugekommen: <literal>Try::Tiny</literal>, <literal>Math::Round</literal></para>
         <para>Seit Version größer v3.5.6 sind die folgenden Pakete hinzugekommen: <literal>XML::LibXML</literal>, <literal>CAM::PDF</literal></para>
         <para>Seit Version größer v3.5.3 sind die folgenden Pakete hinzugekommen: <literal>Exception::Class</literal></para>
 
   libtext-iconv-perl liburi-perl libxml-writer-perl 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 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\
+  libcrypt-pbkdf2-perl git libcgi-pm-perl libtext-unidecode-perl libwww-perl \
+  postgresql-contrib 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 \
   libdatetime-event-cron-perl libexception-class-perl libcam-pdf-perl \
-  libxml-libxml-perl
-</programlisting>
-<para>Sollten Pakete nicht zu Verfügung stehen, so können diese auch mittels CPAN installiert werden. Ferner muss für Ubuntu das Repository "Universe" aktiv sein (s.a. Anmerkungen).</para>
+  libxml-libxml-perl libtry-tiny-perl libmath-round-perl \
+  libimager-perl libimager-qrcode-perl librest-client-perl libipc-run-perl
+          </programlisting>
+
+          <para>Sollten Pakete nicht zu Verfügung stehen, so können diese auch mittels CPAN installiert werden. Ferner muss für Ubuntu das Repository "Universe" aktiv sein (s.a. Anmerkungen).</para>
           <note id="ubuntu-universe">
             <para>Die Perl Pakete für Ubuntu befinden sich im "Universe" Repository. Falls dies nicht aktiv ist, kann dies mit folgendem Aufruf aktiviert werden:
 <programlisting>add-apt-repository universe</programlisting></para>
         </sect3>
 
         <sect3>
-          <title>openSUSE</title>
+          <title>openSUSE Leap 15.x und SUSE Linux Enterprise Server 15 GA</title>
 
-          <para>Für openSUSE stehen die meisten der benötigten Perl-Pakete als RPM-Pakete zur Verfügung.</para>
-          <para>Dies setzt voraus, das eben die erforderlichen Repositories dem System bekannt gemacht worden sind.</para>
-          <para>Um zusätzliche Repositories für die Installation zur Verfügung zu stellen, kann man diese mit YaST oder auch in einem Terminal auf der Konsole bekannt geben. Wir beschränken uns hier mit der Eingabe auf der Konsole. Da wahrscheinlich für die Administration eine SSH-Verbindung zum Server benutzt wird.</para>
+          <para>Für openSUSE Leap 15.x stehen die meisten der benötigten Perl-Pakete als RPM-Pakete zur Verfügung.</para>
+          <para>Damit diese installiert werden können, muß das System die erforderlichen Repositories kennen und Zugriff über das Internet darauf haben.</para>
+          <para>Daher machen wir die Repositories dem System bekannt.</para>
+          <para>Um die zusätzlichen Repositories für die Installation zur Verfügung zu stellen, kann man diese mit YaST oder auch in einem Terminal auf der Konsole bekannt geben. Wir beschränken uns hier mit der Eingabe auf der Konsole. In den allermeisten Fällen verwenden die Administratoren eine sichere SSH-Verbindung zum zu administrierenden Server.</para>
           <para>Dazu geben wir folgenden Befehl ein:</para>
           <programlisting>zypper addrepo -f \
-  http://download.opensuse.org/repositories/devel:languages:perl/openSUSE_Leap_15.0/ \
+  http://download.opensuse.org/repositories/devel:languages:perl/openSUSE_Leap_15.2/ \
   "devel:languages:perl"
           </programlisting>
           <programlisting>zypper addrepo -f \
           <para>Sollte zypper eine Meldung ausgeben, ob der Repositorie Key abgelehnt, nicht vertraut oder für immer akzeptiert werden soll, ist die Beantwortung durch drücken der "i" Taste am besten geeignet. Wer noch mehr über zypper erfahren möchte, kann sich einmal die zypper Hilfe anschauen.</para>
           <programlisting>zypper --help</programlisting>
           <note>
-          <para>Offiziell wird von openSUSE nur noch Versionen ab 15.0 unterstützt. Die SuSE Macher haben ab Version 15.0 einen größen Umbau in der Verwaltung der Pakete vorgenommen, das heißt, der Paketumfang ist der SLES 15 als kleinsten Nenner angepasst. Dies gilt besonders der openSUE Distribution. Es gibt ja einmal die openSUSE Distri und die Professionelle SLES Version. Dadurch sind viele Pakete aus dem Repositorie enfernt worden, aber auch viele auf aktuellen Stand gehalten.</para>
+          <para>Offiziell wird von openSUSE nur noch Versionen ab 15.2 unterstützt. Die SuSE Macher haben ab Version 15.x einen großen Umbau in der Verwaltung der Pakete vorgenommen, das heißt, der Paketumfang ist der SLES 15 als Programmunterbau angepasst. Dies gilt besonders der openSUSE Distribution. Es gibt ja einmal die openSUSE Distri und die Professionelle SLES Version. Dadurch sind viele Pakete aus dem ursprünglich nur für die openSUSE geltenen Repositorie enfernt worden, aber auch viele auf aktuellem Stand gehalten.</para>
           </note>
-          <para>Das überprüfen wir mit YaST. Sollte openSUSE bis zur Version 15.0 zum Einsatz kommen und der Administrator bei der Installation der Distribution die KDE Oberfläche aktiviert hat, loggen wir uns am Server direkt ein, starten das Verwaltungsprogram in einer Konsole wie folgt:</para>
+          <para>Ab openSUSE Leap 15.x kann man die Distribution auch als reine Text Version, also ohne KDE Oberfläche aufsetzen. Vorteil hierbei ist, dass weniger Balast und unnötige Pakte installiert werden.</para>
+          <para>Bei openSUSE Versionen bis 15.x, also 10.x, 11.x, 12.x, 13.x hatte der Administrator die Möglichkeit, bei der Installation der Distribution die KDE Oberfläche zu aktivieren. In dieser Konstellation hat man die Möglichkeit, eine VNC Verbindung vom administrativen Client zu verwenden. Ist das nicht eingerichtet, arbeitet der Admin dann direkt am Bildschirm des Servers. Nun loggen wir uns am Server direkt ein, starten Yast2 in einer Konsole wie folgt:</para>
           <para>yast2 return.</para>
-          <para>Oder über die Menüführung wie folgt: Ein Klick auf das runde Icon, ganz links unten in der Menüleiste dann die Maus Verfahren auf System und YaST.</para>
-          <para>Sie können mit folgendem Befehl installiert werden:</para>
+          <para>Oder über die Menüführung wie folgt: Ein Klick auf das runde Icon, ganz links unten in der Menüleiste, dann die Maus verfahren auf System und YaST.</para>
+          <para>Im weiteren Verlauf der Installation, beschränken wir uns mit dem Installations Werkzeug zypper. Zypper ist ein Komandozeilen basiertes Installations Tool, welches bei openSUSE Standard ist. Zypper weist ein etwas eigenartiges Verhalten auf, dass sich in etwa wie folgt darstellt. Hat man die Repositories eingerichtet, kann man diese mit Yast als auch mit Zypper benutzen, setzt man einen Befehl wie etwa: zypper up ab, so findet zypper mehr neuere Programmversionen als Yast. Ich habe im allgemeinen noch keine Nachteile damit erlebt.</para>
+          <para>Programmpakete können mit folgendem Befehl installiert werden:</para>
           <para>zypper install Paketname</para>
           <para>Es wird empfohlen zusätzliche Pakete nicht direkt mit CPAN zu installieren, da man diese auch über andere Repositories beziehen kann, die bei openSUSE zur Verfügung stehen. Dadurch hat man den Vorteil, dass die Pakete mit YaST verwaltet werden, also wieder deinstalliert oder durch neuere ersetzt werden können. Zudem kann man auch noch eventuelle Bugs an openSUSE senden und diese dem Maintainer melden.</para>
 
   perl-Test-LongString perl-File-Find-Rule
           </programlisting>
 
-          <para>Zusätzlich müssen einige Pakete für den Umgang mit Latex installiert werden. Die Latex Module barcodes sind nützliche Helfer um auch Barcodes im Dokument zu plazieren, der Vollständigkeit halber hier für die Installation mit angegeben.
+          <para>Zusätzlich müssen einige Pakete für den Umgang mit Latex installiert werden. Die Latex Module barcodes sind nützliche Helfer um auch Barcodes im Dokument zu platzieren, der Vollständigkeit halber hier für die Installation mit angegeben.
               Dazu können Sie die folgenden Befehle nutzen:</para>
 
           <programlisting>zypper install texlive-wallpaper texlive-colortbl \
           </programlisting>
 
           <para>Zusätzlich müssen einige Pakete aus dem CPAN installiert
-          werden. Dazu können Sie die folgenden Befehle nutzen:</para>
+          werden. Dazu können Sie die folgenden Befehle anwenden:</para>
 
           <programlisting>cpan DateTime::event::Cron DateTime::Set FCGI \
   HTML::Restrict PBKDF2::Tiny Rose::Db::Object Set::Infinite</programlisting>
         <title>Andere Pakete installieren</title>
 
         <itemizedlist>
-      <listitem>
-            <para><literal>aqbanking-tools</literal> Für das Parsen des MT940 Bankformats (Version 6 oder höher)</para>
-          </listitem>
           <listitem>
             <para><literal>poppler-utils</literal> 'pdfinfo' zum Erkennen der Seitenanzahl bei der PDF-Generierung</para>
           </listitem>
             <para><literal>Postgres Trigram-Index</literal> Für datenbankoptimierte Suchanfragen. Bspw. im Paket <literal>postgresql-contrib</literal> enthalten</para>
           </listitem>
         </itemizedlist>
-        <para>Debian und Ubuntu: <programlisting>apt install aqbanking-tools postgresql-contrib poppler-utils</programlisting></para>
-        <para>Fedora: <programlisting>dnf install aqbanking poppler-utils postgresql-contrib</programlisting></para>
-        <para>openSUSE: <programlisting>zypper install aqbanking-tools poppler-tools</programlisting></para>
+        <para>Debian und Ubuntu: <programlisting>apt install postgresql-contrib poppler-utils</programlisting></para>
+        <para>Fedora: <programlisting>dnf install poppler-utils postgresql-contrib</programlisting></para>
+        <para>openSUSE: <programlisting>zypper install poppler-tools</programlisting></para>
       </sect2>
     </sect1>
 
@@ -1128,6 +1164,10 @@ Alias /kivitendo-erp/ /var/www/kivitendo-erp/
             <listitem>
               <para>Apache 2.4.29 (Ubuntu 18.04 LTS) und mod_fcgid</para>
             </listitem>
+             <listitem>
+              <para>Apache 2.4.41 (Ubuntu 20.04 LTS) und mod_fcgid</para>
+            </listitem>
+
           </itemizedlist>
 
           <para>Als Perl Backend wird das Modul <filename>FCGI.pm</filename>
@@ -1268,6 +1308,26 @@ Alias       /url/for/kivitendo-erp-fcgid/          /path/to/kivitendo-erp/</prog
 
        <programlisting>SetEnvIf Authorization "(.*)" HTTP_AUTHORIZATION=$1</programlisting>
       </sect2>
+      <sect2>
+       <title>Aktivierung von mod_rewrite/directory_match für git basierte Installationen</title>
+
+       <para>
+        Aufgrund von aktuellen (Mitte 2020) Sicherheitswarnungen für git basierte Webanwendungen ist die mitausgelieferte .htaccess
+        restriktiver geworden und verhindert somit das Auslesen von git basierten Daten.
+        Für debian/ubuntu muss das Modul mod_rewrite einmalig so aktiviert werden:
+        <programlisting>a2enmod rewrite</programlisting>
+        Alternativ und für Installationen ohne Apache ist folgender Artikel interessant:
+        <ulink url="https://www.cyberscan.io/blog/git-luecke">git-lücke</ulink>.
+        Anstelle des dort beschriebenen DirectoryMatch für Apache2 würden wir etwas weitergehend auch noch das Verzeichnis config miteinbeziehen
+        sowie ferner auch die Möglichkeit nicht ausschließen, dass es in Unterverzeichnissen auch noch .git Repositories geben kann.
+        Die Empfehlung für Apache 2.4 wäre damit:
+        <programlisting>
+        &lt;DirectoryMatch "/(\.git|config)/"&gt;
+          Require all denied
+        &lt;/DirectoryMatch&gt;</programlisting>
+       </para>
+      </sect2>
+
 
       <sect2>
         <title>Weitergehende Konfiguration</title>
@@ -1282,6 +1342,19 @@ Alias       /url/for/kivitendo-erp-fcgid/          /path/to/kivitendo-erp/</prog
         url="https://mozilla.github.io/server-side-tls/ssl-config-generator/">
         SSL-Konfigurations-Generator</ulink>.</para>
       </sect2>
+      <sect2>
+        <title>Aktivierung von Apache2 modsecurity</title>
+
+        <para>Aufgrund des OpenSource Charakters ist kivitendo nicht "out of the box" sicher.
+  Organisatorisch empfehlen wir hier die enge Zusammenarbeit mit einem kivitendo Partner der auch in der
+Lage ist weiterführende Fragen in Bezug auf Datenschutz und Datensicherheit zu beantworten.
+Unabhängig davon empfehlen wir im Webserver Bereich die Aktivierung und Konfiguration des Moduls modsecurity für den Apache2, damit
+XSS und SQL-Injections verhindert werden.</para>
+<para> Als Idee hierfür sei dieser Blog-Eintrag genannt:
+<ulink url="https://doxsec.wordpress.com/2017/06/11/using-modsecurity-web-application-firewall-to-prevent-sql-injection-and-xss-using-blocking-rules/">
+        Test Apache2 modsecurity for SQL Injection</ulink>.</para>
+      </sect2>
+
     </sect1>
 
     <sect1 id="config.task-server">
@@ -1487,7 +1560,7 @@ systemctl enable kivitendo-task-server.service</programlisting>
           <listitem>
             <para><literal>status</literal> berichtet, ob der Task-Server
             läuft.</para>
-          </listitem>yy
+          </listitem>
         </itemizedlist>
 
         <para>Der Task-Server wechselt beim Starten automatisch in das
@@ -1500,7 +1573,7 @@ systemctl enable kivitendo-task-server.service</programlisting>
         so startet dieser nach Beendigung automatisch erneut.</para>
 
       </sect2>
-      <sect2 id="Tasks konfigurieren">
+      <sect2 id="Tasks-konfigurieren">
         <title>Exemplarische Konfiguration eines Hintergrund-Jobs, der die Jahreszahl in allen Nummernkreisen zum Jahreswechsel erhöht</title>
 
         <para>Hintergrund-Jobs werden über System -> Hintergrund-Jobs und Task-Server -> Aktuelle Hintergrund-Jobs anzeigen -> Aktions-Knopf 'erfassen' angelegt. </para>
@@ -1547,7 +1620,7 @@ multiplier     Nummernkreis 2020
 1000      ->   2020000
 </programlisting>
 <para>Wir gehen jetzt beispielhaft von einer letzten Rechnungsnummer von RE2019456 aus. Demnach sollte ab Januar 2020 die erste Nummer RE2020001 sein. Da der Task auch Präfixe berücksichtigt, kann dies mit folgenden JSON-kodierten Werten umgesetzt werden:</para>
-<literal>Daten:</literal><programlisting>multiplier: 100
+<para><literal>Daten:</literal></para><programlisting>multiplier: 100
 digits_year: 4</programlisting>
           </listitem>
         </itemizedlist>
@@ -2135,7 +2208,7 @@ digits_year: 4</programlisting>
       debianoiden Betriebssystemen installiert man die Pakete mit:</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 ghostscript</programlisting></para>
+  texlive-latex-extra texlive-lang-german ghostscript</programlisting></para>
 
       <para>Für Fedora benötigen Sie die folgenden Pakete:</para>
 
@@ -2149,24 +2222,23 @@ digits_year: 4</programlisting>
   texlive-collection-latexrecommended texlive-collection-langgerman \
   texlive-collection-langenglish</programlisting></para>
 
+      <note><para>kivitendo erwartet eine aktuelle TeX Live Umgebung, um PDF/A zu erzeugen. Aktuelle Distributionen von 2020 erfüllen diese. Überprüfbar ist dies mit dem Aufruf des installation_check.pl mit Parameter -l:</para><para><programlisting>scripts/installations_check.pl -l</programlisting></para></note>
       <para>kivitendo bringt drei alternative Vorlagensätze mit:</para>
 
       <itemizedlist>
         <listitem>
           <para>RB</para>
         </listitem>
-
         <listitem>
-          <para>f-tex</para>
+          <para>marei</para>
         </listitem>
-
         <listitem>
           <para>rev-odt</para>
         </listitem>
       </itemizedlist>
 
-      <para>Der ehemalige Druckvorlagensatz "Standard" wurde mit der Version
-      3.3 entfernt, da er nicht mehr gepflegt wurde.</para>
+      <para>Der ehemalige Druckvorlagensatz "f-tex" wurde mit der Version
+      3.5.6 entfernt, da er nicht mehr gepflegt wird.</para>
 
       <sect2 id="Vorlagenverzeichnis-anlegen"
              xreflabel="Vorlagenverzeichnis anlegen">
@@ -2190,7 +2262,7 @@ digits_year: 4</programlisting>
           <listitem>
             <para><option>Vorlagen auswählen</option>: Wählen Sie hier den
             Vorlagensatz aus, der kopiert werden soll
-            (<filename>RB</filename>, <filename>f-tex</filename> oder
+            (<filename>RB</filename>, <filename>marei</filename> oder
             <filename>odt-rev</filename>.)</para>
           </listitem>
 
@@ -2248,247 +2320,7 @@ digits_year: 4</programlisting>
         </itemizedlist>
       </sect2>
 
-      <sect2 id="f-tex">
-        <title>f-tex</title>
-
-        <para>Ein Vorlagensatz, der in wenigen Minuten alle Dokumente zur
-        Verfügung stellt.</para>
-
-        <sect3 id="f-tex-Feature-Übersicht">
-          <title>Feature-Übersicht</title>
-
-          <itemizedlist>
-            <listitem>
-              <para>Keine Redundanz. Es wird ein- und dieselbe LaTeX-Vorlage
-              für alle briefartigen Dokumente verwendet. Also Angebot,
-              Rechnung, Proformarechnung, Lieferschein, aber eben nicht für
-              Paketaufkleber etc.</para>
-            </listitem>
-
-            <listitem>
-              <para>Leichte Anpassung an das Firmen-Layout durch Verwendung
-              eines Hintergrund-PDFs. Dieses kann leicht mit dem eigenen
-              Lieblingsprogramm erstellt werden (Openoffice, Inkscape, Gimp,
-              Adobe*)</para>
-            </listitem>
-
-            <listitem>
-              <para>Hintergrund-PDF umschaltbar auf "nur erste Seite"
-              (Standard) oder "alle Seiten" (Option
-              "<option>bgPdfFirstPageOnly</option>" in Datei
-              <filename>letter.lco</filename>)</para>
-            </listitem>
-
-            <listitem>
-              <para>Hintergrund-PDF für Ausdruck auf bereits bedrucktem
-              Briefpapier abschaltbar. Es wird dann nur bei per E-Mail
-              versendeten Dokumenten eingebunden (Option
-              "<option>bgPdfEmailOnly</option>" in Datei
-              <filename>letter.lco</filename>).</para>
-            </listitem>
-
-            <listitem>
-              <para>Nutzung der Layout-Funktionen von LaTeX für Seitenumbruch,
-              Wiederholung von Kopfzeilen, Zwischensummen etc. (danke an
-              Kai-Martin Knaak für die Vorarbeit)</para>
-            </listitem>
-
-            <listitem>
-              <para>Anzeige des Empfängerlandes im Adressfeld nur, wenn es vom
-              Land des eigenen Unternehmens abweicht (also die Rechnung das
-              Land verlässt).</para>
-            </listitem>
-
-            <listitem>
-              <para>Multisprachfähig leicht um weitere Sprachen zu erweitern,
-              alle Übersetzungen in der Datei
-              <filename>translatinos.tex</filename>.</para>
-            </listitem>
-
-            <listitem>
-              <para>Auflistung von Bruttopreisen für Endverbraucher.</para>
-            </listitem>
-          </itemizedlist>
-        </sect3>
-
-        <sect3 id="f-tex-Installation">
-          <title>Die Installation</title>
-
-          <itemizedlist>
-            <listitem>
-              <para>Vorlagenverzeichnis mit Option f-tex anlegen, siehe: <xref
-              linkend="Vorlagenverzeichnis-anlegen"/>. Das Vorlagensystem
-              funktioniert jetzt schon, hat allerdings noch einen
-              Beispiel-Briefkopf.</para>
-            </listitem>
-
-            <listitem>
-              <para>Erstelle eine pdf-Hintergrund Datei und verlinke sie nach
-              <filename>./letter_head.pdf</filename>.</para>
-            </listitem>
-
-            <listitem>
-              <para>Editiere den Bereich "<option>settings</option>" in der
-              datei <filename>letter.lco</filename>.</para>
-            </listitem>
-          </itemizedlist>
-
-          <para>oder etwas detaillierter:</para>
-
-          <para>Es wird eine Datei <filename>sample.lco</filename> erstellt
-          und diese nach <filename>letter.lco</filename> verlinkt. Eigentlich
-          ist dies die Datei die für die firmenspezifischen Anpassungen
-          gedacht ist. Da die Einstiegshürde in LaTeX nicht ganz niedrig ist,
-          wird in dieser Datei auf ein Hintergrund-PDF verwiesen. Ich empfehle
-          über dieses PDF die persönlichen Layoutanpassungen vorzunehmen und
-          <filename>sample.lco</filename> unverändert zu lassen. Die Anpassung
-          über eine <filename>*.lco</filename>-Datei, die letztlich auf
-          <filename>letter.lco</filename> verlinkt ist ist aber auch
-          möglich.</para>
-
-          <para>Es wird eine Datei <filename>sample_head.pdf</filename> mit
-          ausgeliefert, diese wird nach <filename>letter_head.pdf</filename>
-          verlinkt. Damit gibt es schon mal eine funktionsfähige Vorlage.
-          Schau Dir nach Abschluss der Installation die Datei
-          <filename>sample_head.pdf</filename> an und erstelle ein
-          entsprechendes PDF passend zum Briefkopf Deiner Firma, diese dann im
-          Template Verzeichniss ablegen und statt
-          <filename>sample_head.pdf</filename> nach
-          <filename>letter_head.pdf</filename> verlinken.</para>
-
-          <para>Letzlich muss <filename>letter_head.pdf</filename> auf das
-          passende Hintergrund-PDF verweisen, welches gewünschten Briefkopf
-          enthält.</para>
-
-          <para>Es wird eine Datei <filename>mydata.tex.example</filename>
-          ausgeliefert, die nach <filename>mytdata.tex</filename> verlinkt
-          ist. Bei verwendetem Hintergrund-PDF wird nur der Eintrag für das
-          Land verwendet. Die Datei muss also nicht angefasst werden. Die
-          anderen Werte sind für das Modul 'lp' (Label Print in erp - zur Zeit
-          nicht im öffentlichen Zweig).</para>
-
-          <para>Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc.
-          sollten über die Hintergrund-PDF-Datei oder die
-          <filename>*.lco</filename>-Datei erfolgen.</para>
-        </sect3>
-
-        <sect3 id="f-tex-Funktionsübersicht">
-          <title>f-tex Funktionsübersicht</title>
-
-          <para>Das Konzept von kivitendo sieht vor, für jedes Dokument
-          (Auftragsbestätigung, Lieferschein, Rechnung, etc.) eine
-          LaTeX-Vorlage vorzuhalten, dies ist sehr wartungsunfreundlich. Auch
-          das Einlesen einer einheitlichen Quelle für den Briefkopf bringt nur
-          bedingte Vorteile, da hier leicht die Pflege der Artikel-Tabellen
-          aus dem Ruder läuft. Bei dem vorliegenden Ansatz wird für alle
-          briefartigen Dokumente mit Artikel-Tabellen eine einheitliche
-          LaTeX-Vorlage verwendet, welche über Codeweichen die Besonderheiten
-          der jeweiligen Dokumente berücksichtigt:</para>
-
-          <itemizedlist>
-            <listitem>
-              <para>Tabellen mit oder ohne Preis</para>
-            </listitem>
-
-            <listitem>
-              <para>Sprache der Tabellenüberschriften etc.</para>
-            </listitem>
-
-            <listitem>
-              <para>Anpassung der Bezugs-Zeile (z.B. Rechnungsnummer versus
-              Angebotsnummer)</para>
-            </listitem>
-
-            <listitem>
-              <para>Darstellung von Brutto oder Netto-Preisen in der
-              Auflistung (Endverbraucher versus gewerblicher Kunde)</para>
-            </listitem>
-          </itemizedlist>
-
-          <para>Nachteil:</para>
-
-          <para>LaTeX hat ohnehin eine sehr steile Lehrnkurve. Die Datei
-          <filename>letter.tex</filename> ist sehr komplex und verstärkt damit
-          diesen Effekt noch einmal erheblich. Wer LaTeX-Erfahrung hat, oder
-          geübt ist Scriptsparachen nachzuvollziehen kann natürlich auch
-          innerhalb der Tabellendarstellung gut persönliche Anpassungen
-          vornehmen. Aber man kann sich hier bei Veränderungen sehr schnell
-          heftig in den Fuss schiessen.</para>
-
-          <para>Wer nicht so tief in die Materie einsteigen will oder leicht
-          zu frustrieren ist, sollte sein Hintergrund-PDF auf Basis der
-          mitglieferten Datei <filename>sample_head.pdf</filename> erstellen,
-          und sich an der Form der dargestellten Tabellen, wie sie
-          ausgeliefert werden, erfreuen.</para>
-
-          <para>Kleiner Tipp: Nicht zu viel auf einmal wollen, lieber kleine,
-          kontinuierliche Schritte gehen.</para>
-        </sect3>
-
-        <sect3 id="f-tex-Bruttopreise">
-          <title>Bruttopreise für Endverbraucher</title>
-
-          <para>Der auszuweisende Bruttopreis wird innerhalb der
-          LaTeX-Umgebung berechnet. Es gibt zwar ein Feld, um bei Aufträgen
-          "alle Preise Brutto" auszuwählen, aber:</para>
-
-          <itemizedlist>
-            <listitem>
-              <para>hierfür müssen die Preise auch in Brutto in der Datenbank
-              stehen (ja - das lässt sich über die Preisgruppen und die
-              Zuordung einer Default-Preisgruppe handhaben)</para>
-            </listitem>
-
-            <listitem>
-              <para>man darf beim Anlegen des Vorgangs nicht vergessen, dieses
-              Häkchen zu setzen. (Das ist in der Praxis, wenn man sowohl
-              Endverbraucher als auch Gewerbekunden beliefert, der eigentliche
-              Knackpunkt)</para>
-            </listitem>
-          </itemizedlist>
-
-          <para>Es gibt mit f-tex eine weitere Alternative. Die Information ob
-          Brutto oder Nettorechnung wird mit den Zahlarten verknüpft.
-          Zahlarten bei denen Rechnungen, Angebote, etc, in Brutto ausgegeben
-          werden sollen, enden mit "_E" (für Endverbraucher). Falls identische
-          Zahlarten für Gewerbekunden und Endverbraucher vorhanden sind, legt
-          man diese einfach doppelt an (einmal mit der Namensendung "_E").
-          Gewinn:</para>
-
-          <itemizedlist>
-            <listitem>
-              <para>Die Entscheidung, ob Nettopreise ausgewiesen werden, ist
-              nicht mehr fix mit einer Preisliste verbunden.</para>
-            </listitem>
-
-            <listitem>
-              <para>Die Default-Zahlart kann im Kundendatensatz hinterlegt
-              werden, und man muss nicht mehr daran denken, "alle Preise
-              Netto" auszuwählen.</para>
-            </listitem>
-
-            <listitem>
-              <para>Die Entscheidung, ob Netto- oder Bruttopreise ausgewiesen
-              werden, kann direkt beim Drucken revidiert werden, ohne dass
-              sich der Auftragswert ändert.</para>
-            </listitem>
-          </itemizedlist>
-        </sect3>
-
-        <sect3 id="f-tex-lieferadressen">
-          <title>Lieferadressen</title>
-
-          <para>In Lieferscheinen kommen <varname>shipto*</varname>-Variablen
-          im Adressfeld zum Einsatz. Wenn die
-          <varname>shipto*</varname>-Variable leer ist, wird die entsprechende
-          Adressvariable eingesetzt. Wenn also die Lieferadresse in Straße,
-          Hausnummer und Ort abweicht, müssen auch nur diese Felder in der
-          Lieferadresse ausgefüllt werden. Für den Firmenname wird der Wert
-          der Hauptadresse angezeigt.</para>
-        </sect3>
-      </sect2>
-
-      <sect2 id="Vorlagen-rev-odt">
+     <sect2 id="Vorlagen-rev-odt">
         <title>Der Druckvorlagensatz rev-odt</title>
 
         <para>Hierbei handelt es sich um einen Dokumentensatz der mit
@@ -2746,7 +2578,7 @@ digits_year: 4</programlisting>
           sales_order_besr.odt</para>
         </sect3>
 
-        <sect3>
+        <sect3 id="opendocument-druckvorlagen-mit-makros.vorbereitungen">
           <title>Vorbereitungen im Adminbereich</title>
 
           <para>Damit beim Erstellen von Rechnungen und Aufträgen neben der
@@ -2959,6 +2791,193 @@ digits_year: 4</programlisting>
           </itemizedlist>
         </sect3>
       </sect2>
+
+      <sect2>
+        <title>Schweizer QR-Rechnung mit OpenDocument Vorlagen</title>
+
+        <sect3>
+          <title>Übersicht</title>
+
+          <para>Mit der Version 3.6.0 unterstützt Kivitendo die Erstellung von
+          Schweizer QR-Rechnungen gemäss <ulink
+          url="https://www.paymentstandards.ch/dam/downloads/ig-qr-bill-de.pdf">Swiss
+          Payment Standards, Version 2.2</ulink>. Implementiert sind hierbei die
+          Varianten:</para>
+
+          <itemizedlist>
+            <listitem>
+              <para><emphasis role="bold">QR-IBAN mit
+              QR-Referenz</emphasis></para>
+            </listitem>
+
+            <listitem>
+              <para><emphasis role="bold">IBAN ohne Referenz</emphasis></para>
+            </listitem>
+          </itemizedlist>
+
+          <para>Der Vorlagensatz "rev-odt" enthält die Vorlage
+          <literal>invoice_qr.odt</literal>, welche für die Erstellung von
+          QR-Rechnungen vorgesehen ist. Damit diese verwendet werden kann muss
+          wie obenstehend beschrieben ein Drucker hinzugefügt werden (siehe
+          <xref linkend="opendocument-druckvorlagen-mit-makros.vorbereitungen"/>
+          ). Alternativ kann die Vorlage umbenannt werden in
+          <literal>invoice.odt</literal>.</para>
+
+          <para>Die Vorlage <literal>invoice_qr.odt</literal> kann beliebig
+          angepasst werden. Zwingend muss diese jedoch das QR-Code Platzhalter
+          Bild, als eingebettetes Bild, enthalten. Da dieses beim
+          Ausdrucken/Erzeugen der Rechnung durch das neu generierte QR-Code
+          Bild ersetzt wird.</para>
+        </sect3>
+
+        <sect3>
+          <title>Einstellungen</title>
+
+          <sect4>
+            <title>Mandantenkonfiguration</title>
+
+            <para>Unter <emphasis>System → Mandantenkonfiguration →
+            Features</emphasis>. Im Abschnitt <emphasis>Einkauf und
+            Verkauf</emphasis>, beim Punkt <emphasis>Verkaufsrechnungen mit
+            Schweizer QR-Rechnung erzeugen</emphasis>, die gewünschte Variante
+            wählen.</para>
+          </sect4>
+
+          <sect4>
+            <title>Konfiguration der Bankkonten</title>
+
+            <para>Unter <emphasis>System → Bankkonten</emphasis> muss bei
+            mindestens einem Bankkonto die Option <emphasis>Nutzung mit
+            Schweizer QR-Rechnung</emphasis> auf <emphasis
+            role="bold">Ja</emphasis> gestellt werden.</para>
+
+            <tip>
+              <para>Für die Variante <emphasis role="bold">QR-IBAN mit
+              QR-Referenz</emphasis> muss dieses Konto unter IBAN eine gültige
+              <emphasis role="bold">QR-IBAN Nummer</emphasis> enthalten. Diese
+              unterscheidet sich von der regulären IBAN.</para>
+
+              <para>Zusätzlich muss eine gültige <emphasis role="bold">Bankkonto
+              Identifikationsnummer</emphasis> angegeben werden
+              (6-stellig).</para>
+
+              <para>Diese werden von der jeweiligen Bank vergeben.</para>
+            </tip>
+
+            <para>Sind mehrere Konten ausgewählt wird das erste
+            verwendet.</para>
+          </sect4>
+
+          <sect4>
+            <title>Rechnungen ohne Betrag</title>
+
+            <para>Für Rechnungen ohne Betrag (z.B. Spenden) kann, in der
+            jeweiligen Rechnung, die Checkbox <emphasis>QR-Rechnung ohne
+            Betrag</emphasis> aktiviert werden. Diese Checkbox erscheint nur,
+            wenn QR-Rechnungen in der Mandantenkonfiguration aktiviert sind
+            (variante ausgewählt).</para>
+
+            <para>Dies wirkt sich lediglich auf den erzeugten QR-Code aus. Die
+            Vorlage muss separat angepasst und ausgewählt werden.</para>
+          </sect4>
+        </sect3>
+
+        <sect3>
+          <title>Adressdaten</title>
+
+          <para>Die Adressdaten zum Zahlungsempfänger werden aus der
+          Mandantenkonfiguration entnommen. Unter <emphasis>System →
+          Mandantenkonfiguration → Verschiedenes</emphasis>, Abschnitt
+          <emphasis>Firmenname und -adresse.</emphasis></para>
+
+          <para>Die Adressdaten zum Zahlungspflichtigen stammen aus den
+          Kundendaten der jeweiligen Rechnung.</para>
+
+          <para>Die Adressen müssen inklusive Land angegeben werden. Akzeptiert
+          werden Ländername oder Ländercode, also z.B. "Schweiz" oder "CH".
+          </para>
+
+          <para>Diese können in der Vorlage mit den jeweiligen Variablen
+          eingetragen werden. Siehe auch: <xref
+          linkend="dokumentenvorlagen-und-variablen"/></para>
+
+          <para>Der erzeugte QR-Code verwendet Adress-Typ "K" (Kombinierte
+          Adressfelder, 2 Zeilen).</para>
+        </sect3>
+
+        <sect3>
+          <title>Referenznummer</title>
+
+          <para>Die Referenznummer wird in Kivitendo erzeugt und setzt sich
+          wiefolgt zusammen:</para>
+
+          <itemizedlist>
+            <listitem>
+              <para>Bankkonto Identifikationsnummer (6-stellig)</para>
+            </listitem>
+
+            <listitem>
+              <para>Kundennummer (6-stellig, mit führenden Nullen
+              aufgefüllt)</para>
+            </listitem>
+
+            <listitem>
+              <para>Auftragsnummer (7-stellig, mit führenden Nullen
+              aufgefüllt)</para>
+            </listitem>
+
+            <listitem>
+              <para>Rechnungsnummer (7-stellig, mit führenden Nullen
+              aufgefüllt)</para>
+            </listitem>
+
+            <listitem>
+              <para>Prüfziffer (1-stellig, berechnet mittels modulo 10,
+              rekursiv)</para>
+            </listitem>
+          </itemizedlist>
+
+          <para>Es sind lediglich Ziffern erlaubt. Allfällige Prefixe mit
+          Buchstaben werden entfernt und fehlende Stellen werden mit führenden
+          Nullen aufgefüllt.</para>
+        </sect3>
+
+        <sect3>
+          <title>Zusätzliche Variablen für Vorlage</title>
+
+          <para>Zusätzlich zu den in der Vorlage standardmässig verfügbaren
+          Variablen (siehe <xref linkend="dokumentenvorlagen-und-variablen"/>),
+          werden die folgenden Variablen erzeugt:</para>
+
+          <variablelist>
+            <varlistentry>
+              <term>ref_number_formatted</term>
+
+              <listitem>
+                <para>Referenznummer formatiert mit Leerzeichen, z.B.: 21 00000
+                00003 13947 14300 09017</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term>iban_formatted</term>
+
+              <listitem>
+                <para>IBAN formatiert mit Leerzeichen</para>
+              </listitem>
+            </varlistentry>
+
+            <varlistentry>
+              <term>amount_formatted</term>
+
+              <listitem>
+                <para>Betrag formatiert mit Tausendertrennzeichen Leerschlag,
+                z.B.: 1 005.55</para>
+              </listitem>
+            </varlistentry>
+          </variablelist>
+        </sect3>
+      </sect2>
     </sect1>
 
     <sect1 id="nomenclature">
@@ -3871,6 +3890,11 @@ digits_year: 4</programlisting>
         bis zu welchem Monat und Jahr die aktuelle Abrechnungsperiode dauert:
         <literal>Abrechnungszeitrum: &lt;%period_start_date FORMAT=%m/%Y%&gt;
         bis &lt;%period_end_date FORMAT=%m/%Y%&gt;</literal></para>
+
+        <para>Beim automatischen Versand der Rechnugen via E-Mail können neben diesen speziellen Variablen auch einige Eigenschaften der
+        Rechnung selber als Variablen im Betreff &amp; dem Text der E-Mails genutzt werden. Beispiele sind
+        <varname>&lt;%invnumber%&gt;</varname> für die Rechnungsnummber oder <varname>&lt;transaction_description%&gt;</varname> für die
+        Vorgangsbezeichnung. Diese Variablen stehen beim Erzeugen der Rechnung logischerweise noch nicht zur Verfügung.</para>
       </sect2>
 
       <sect2 id="features.periodic-invoices.reports">
@@ -5081,6 +5105,32 @@ digits_year: 4</programlisting>
             </varlistentry>
           </variablelist>
         </sect3>
+
+        <sect3 id="dokumentenvorlagen-und-variablen.abweichende-rechnungsadresse">
+          <title>Informationen über abweichende Rechnungsadressen (nur Verkaufsbelege)</title>
+
+          <para>
+            Abweichende Rechnungsadressen gibt es nur in Verkaufsbelegen. Die entsprechenden Variablen sind nur dann mit Inhalt gefüllt,
+            wenn im Beleg eine abweichende Rechnungsadresse ausgewählt wurde. Ob eine Adresse überhaupt ausgewählt wurde, kann über die
+            Variable <literal>billing_address_id</literal> getestet werden, die die Datenbank-ID der abweichenden Rechnungsadresse enthält,
+            wenn eine ausgewählt ist.
+          </para>
+
+          <para>
+            Die Variablennamen starten alle mit dem Präfix <literal>billing_address_</literal> und heißen anschließend so, wie ihre Pendants
+            aus der Standard-Rechnungsadresse des Kunden. Beispiel: die Postleitzahl, die in der normalen Rechnungsadresse in
+            <literal>zipcode</literal> steht, steht für die abweichende Rechnungsadresse in <literal>billing_address_zipcode</literal>.
+          </para>
+
+          <para>
+            Die folgenden Variablen stehen so zur Verfügung: <literal>billing_address_name</literal>,
+            <literal>billing_address_department_1</literal>, <literal>billing_address_department_2</literal>,
+            <literal>billing_address_contact</literal>, <literal>billing_address_street</literal>,
+            <literal>billing_address_zipcode</literal>, <literal>billing_address_city</literal>, <literal>billing_address_country</literal>,
+            <literal>billing_address_gln</literal>, <literal>billing_address_email</literal>, <literal>billing_address_phone</literal> und
+            <literal>billing_address_fax</literal>.
+          </para>
+        </sect3>
       </sect2>
 
       <sect2 id="dokumentenvorlagen-und-variablen.invoice">
@@ -7352,7 +7402,7 @@ document_path = /var/local/kivi_documents
         export PATH=/usr/local/texlive/2020/bin/x86_64-linux:$PATH
         hash -r
 
-        exec pdflatex $@
+        exec pdflatex &quot;$@&quot;
         ------------------------------------------------------------
 
         4. In config/kivitendo.conf den Parameter »latex« auf den Pfad zu »run_pdflatex.sh« setzen
@@ -7375,7 +7425,7 @@ document_path = /var/local/kivi_documents
                        Version 3.5.6 den ZUGFeRD 2.1 Standard um.</para>
 
                        <para>Weiter Details zu ZUGFeRD sind unter diesem Link zu finden:
-                       <ulink>https://www.ferd-net.de/standards/was-ist-zugferd/index.html</ulink>
+                       <ulink url="https://www.ferd-net.de/standards/was-ist-zugferd/index.html">https://www.ferd-net.de/standards/was-ist-zugferd/index.html</ulink>
       </para>
                </sect2>
 
@@ -7430,7 +7480,7 @@ document_path = /var/local/kivi_documents
                        <sect3>
                                <title>Konfiguration der Bankkonten</title>
 
-                               <para>Unter „System → Bankonten“ muss bei mindestens einem
+                               <para>Unter „System → Bankkonten“ muss bei mindestens einem
                                Bankkonto die Option „Nutzung mit ZUGFeRD“ auf „Ja“ gestellt
                                werden.</para>
                        </sect3>
@@ -7442,7 +7492,7 @@ document_path = /var/local/kivi_documents
                        <title>Einlesen von ZUGFeRD Rechnungen in Kivitendo</title>
 
                        <para>Es lassen sich auch Rechnungen von Kreditoren, die im
-                       ZUGFeRD Format erstellt wurden im Kivitendo importieren.
+                       ZUGFeRD Format erstellt wurden, nach Kivitendo importieren.
                        Hierfür müssen auch zwei Voraussetzungen erfüllt werden:
                        </para>
 
@@ -7460,7 +7510,7 @@ document_path = /var/local/kivi_documents
                        </orderedlist>
 
                        <para>Wenn diese Voraussetzungen erfüllt sind, kann die Rechnung
-                       über „Finanzbuchhaltung“ → „ZUGFeRD Import“ über die „Durchsuchen“
+                       über „Finanzbuchhaltung“ → „Factur-X-/ZUGFeRD-Import“ über die „Durchsuchen“
                        Schaltfläche ausgewählt werden und über die Schaltfläche „Import“
                        eingeladen werden. Es öffnet sich daraufhin die Kreditorenbuchung.
                        Die auslesbaren Daten aus dem eingebetteten XML der PDF Datei