2.14. Drucken mit kivitendo

Das Drucksystem von kivitendo benutzt von Haus aus LaTeX-Vorlagen. Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am einfachsten ist dazu eine texlive Installation. Unter debianoiden Betriebssystemen installiert man die Pakete mit:

apt install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \
  texlive-latex-extra texlive-lang-german ghostscript

Für Fedora benötigen Sie die folgenden Pakete:

dnf install texlive-collection-latex texlive-collection-latexextra \
  texlive-collection-latexrecommended texlive-collection-langgerman \
  texlive-collection-langenglish

Für openSUSE benötigen Sie die folgenden Pakete:

zypper install texlive-collection-latex texlive-collection-latexextra \
  texlive-collection-latexrecommended texlive-collection-langgerman \
  texlive-collection-langenglish

[Anmerkung]Anmerkung

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:

scripts/installations_check.pl -l

kivitendo bringt drei alternative Vorlagensätze mit:

Der ehemalige Druckvorlagensatz "f-tex" wurde mit der Version 3.5.6 entfernt, da er nicht mehr gepflegt wird.

2.14.1. Vorlagenverzeichnis anlegen

Es lässt sich ein initialer Vorlagensatz erstellen. Die LaTeX-System-Abhängigkeiten hierfür kann man prüfen mit:

./scripts/installation_check.pl -lv

Der Angemeldete Benutzer muss in einer Gruppe sein, die über das Recht "Konfiguration -> Mandantenverwaltung" verfügt. Siehe auch Abschnitt 2.11.4, „Gruppen anlegen“.

Im Userbereich lässt sich unter: "System -> Mandantenverwaltung -> Verschiedenes" die Option "Neue Druckvorlagen aus Vorlagensatz erstellen" auswählen.

  1. Vorlagen auswählen: Wählen Sie hier den Vorlagensatz aus, der kopiert werden soll (RB, marei oder odt-rev.)

  2. Neuer Name: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen Bedingungen für Verzeichnisnamen frei gewählt werden.

Nach dem Speichern wird das Vorlagenverzeichnis angelegt und ist für den aktuellen Mandanten ausgewählt. Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Mandanten verwendet werden. Eventuell müssen Anpassungen (Logo, Erscheinungsbild, etc) noch vorgenommen werden. Den Ordner findet man im Dateisystem unter ./templates/[Neuer Name]

2.14.2. Der Druckvorlagensatz marei

[Anmerkung]Anmerkung

Die aktuelle Dokumentation inkl. dem Foliensatz vom kivi-Treffen im August 2023 befindet sich hier: https://peitex.de/materialien/2023-08-04_kivitendo/

2.14.2.1. Quickstart – Wo kann was angepasst werden?

[Anmerkung]Anmerkung

In keinem Fall sollten Dateien mit der Endung *.cls oder *.sty geändert werden. Durch Änderungen an diesen Dateien verhindert man Updates auf neuer Versionen. Zwar kopiert kivitendo die Datei und bearbeitet diese beim Update nicht. Allerdings sind sämtliche Änderungen über die Konfigurationsdateien möglich und erhöhen die Wartbarkeit.

  • Pfad zu Angaben über Mandant*innen (default: firma)

  • Logo/Briefpapier, falls für alle Mandant*innen in gleicher Struktur. Sonst in der ident.tex.

  • Layout der Kopf/Fußzeile

  • innerhalb dieser Datei werden auch die folgenden Dateien geladen:

  • firma/ident.tex Mandant*innenspezifische Konfiguration, Adressdaten

  • firma/$währungskürzel_account.tex

  • insettings.tex :

  • Sprache/Übersetzungen.\\Es muss mindestens eine Sprache angelegt werden!

            \item[deutsch.tex] Textschnipsel für Deutsch\\
                                  Dafür eine Sprache mit Vorlagenkürzel DE anlegen
            \item[english.tex] Textschnipsel für Englisch\\
                                  Dafür eine Sprache mit Vorlagenkürzel EN anlegen
            

Alle dokumententypspezifischen Einstellungen müssen in der jeweiligen Template-Datei modifiziert werden.

2.14.2.2. Aufbau

Die Grundstruktur besteht je Dokumententyp aus einer Basisdatei und verschiedenen Setup-Dateien.

Die Basis wurde so überarbeitet, dass Dokumente nun generell auf der Dokumentenklasse scrartcl.cls basieren und das Paket kiviletter.sty benutzen.

Mandant*innenspezifische Konfiguration findet sich in der Datei insettings.tex und dem Ordner eines spezifischen Mandant*innen (default=*firma/*).

2.14.2.3. Mandant*innen / Firma

Um gleiche Vorlagen für verschiedene Firmen verwenden zu können, wird je nach dem Wert der Kivitendo-Variablen \kivivar{kivicompany} ein Firmenverzeichnis ausgewählt (siehe insettings.tex), in dem Briefkopf, Identitäten und Währungs-/Kontoeinstellungen hinterlegt sind. \kivivar{kivicompany} enthält den Namen des verwendeten Mandant*innendaten. Ist kein Firmenname eingetragen, so wird das generische Unterverzeichnis *firma* verwendet.

2.14.2.4. Identitäten

In jedem Firmen-Unterverzeichnis soll eine Datei ident.tex vorhanden sein, die mit |\newcommand| Werte für |\telefon|, |\fax|, |\firma|, |\strasse|, |\ort|, |\ustid|, |\email| und |\homepage| definiert.

2.14.2.5. Währungen/Konten

Für jede Währung (siehe insettings.tex) soll eine Datei vorhanden sein, die das Währungssymbol (|\currency|) und folgende Angaben für ein Konto in dieser Währung enthält |\kontonummer|, |\bank|, |\bankleitzahl|, |\bic| und |\iban|. So kann in den Dokumenten je nach Währung ein anderes Konto angegeben werden. Nach demselben Schema können auch weitere, alternative Bankverbindungen angelegt werden, die dann in insettings.tex als Variable in der Fußzeile eingefügt werden.

Als Fallback (falls kivitendo keine Währung an das Druckvorlagen-System übergibt) ist Euro eingestellt. Dies lässt sich in der insettings.tex über das optionale Argument von |\setupCurrencyConfig| anpassen, z.B.

    \setupCurrencyConfig[chf]{\identpath}{\lxcurrency}

für Schweizer Franken als Standardwährung.

2.14.2.6. Briefbogen/Logos

Eine Hintergrundgrafik oder ein Logo kann in Abhängigkeit vom Medium (z.B. nur beim Verschicken mit E-Mail) eingebunden werden.

Desweiteren sind (auskommentierte) Beispiele enthalten für eine Grafik als Briefkopf, nur ein Logo, oder ein komplettes A4-PDF als Briefpapier.

Absolute Positionierung innerhalb des Brief-Layouts ist über die entsprechende Dokumentation des scrlayer-Paketes möglich. Da die Voreinstellungen bereits einige Sonderfälle automatisch berücksichtigen ist mit den Anpassungen Vorsicht geboten. Sämtliche Einstellungen sollten jedoch außerhalb der *.sty-Dateien vorgenommen werden. Anpassungen der insettings.tex betreffen hierbei alle Mandant*innen. Spezifischere Einstellungen sind über die zugehörige Konfigurationsdatei (ident.tex) möglich. In diesem Fall kann zum Ende der insettings eine weitere Konfigurationsdatei über die Verwendung von |\identpath| geladen werden. Ein Beispiel ist in der insettings.tex enthalten.

2.14.2.7. Fußzeile

Die Tabelle im Fuß verwendet die Angaben aus firma/ident.tex und *firma/\_account.tex. Ihre Struktur wird in der insettings.tex definiert. Sie kann anschließend auch Mandant*innenspezifisch überschrieben werden.

2.14.2.8. Seitenstil/Basislayout

Das Seitenlayout wird über \pck{scrlayer-scrpage} bestimmt. Die ausführliche Dokumentation findet sich in \cite{scrguide}. Es existieren in der Datei insettings.tex einige Hinweise zu den Anpassungen. Die Basiskonfiguration ist ebenfalls dort eingetragen.

Neben den in Abschnitt \ref{sec:options} beschriebenen Optionen zum Abschalten der Fußzeile kann der Inhalt der Fußzeile über die \pck{scrlayer-scrpage} Makros, wie

      \cfoot[|\meta{Inhalt auf der ersten Briefseite}|]{|\meta{Inhalt auf folgenden Briefseiten}|}    

geändert werden.

Die Kopfzeile unterscheidet sich von Dokumententyp zu Dokumententyp leicht, da diese über Datenbankvariablen befüllt wird. Hierfür wird das Makro |\ourhead| in der insettings.tex definiert.

      \DescribeMacro{\ourhead}\marg{Bezeichner}\marg{Eintrag}\marg{Titel}\marg{Nummer}\marg{Datum}    

Diese Definition kann ebenfalls über die insettings.tex angepasst oder auch nachträglich überschrieben werden:

      \newcommand{\ourhead}[5] {%
        \chead{%
          \makebox[\textwidth]{%
            \Ifstr{#1}{}{}{#1: #2 \hspace{0.7cm}}%
            #3%
            \Ifstr{#4}{}{}{~\nr: #4}%
            \Ifstr{#5}{}{}{\vom ~ #5}%
            \hspace{0.7cm} - \seite ~ \thepage/\letterlastpage  ~-%
          }%
        }%
      }
    

In der Standard-Einstellung sieht eine Kopfzeile mit obigen Aufruf dann folgendermaßen aus:

      \newcommand{\ourhead}[5] {%
          \makebox[\textwidth]{%
            \Ifstr{#1}{}{}{#1: #2 \hspace{0.7cm}}%
            #3%
            \Ifstr{#4}{}{}{~\nr: #4}%
            \Ifstr{#5}{}{}{\vom ~ #5}%
            \hspace{0.7cm} - \seite ~ \thepage/\letterlastpage  ~-%
          }%
      }

      \begingroup
      \def\letterlastpage{50}

      \ourhead{arg1}{arg2}{arg3}{arg4}{arg5}

      \smallskip
      Erzeugt mit dem Aufruf
      \ourhead{arg1}{arg2}{arg3}{arg4}{arg5}
      \endgroup    

2.14.2.9. Absenderergänzung

Die Absenderergänzung wird über die Variable |location| in der |kiviletter.sty| folgendermaßen belegt:

      \setkomavar{location}{
        \Ifkomavarempty{transaction}{}{{
              \usekomafont{transaction}
              \usekomavar{transaction}
            }
        }
        \par
        \medskip
        \parbox{\useplength{locwidth}}{
          \locationentry{date}
          \locationentry{myref}
          \locationentry{customer}
          \locationentry{yourref}
          \locationentry{delivery}
          \locationentry{quote}
          \locationentry{orderID}
          \locationentry{projectID}
          \locationentry{taxpoint}
          \locationentry[\ansprechpartner]{fromname}
          \locationentry{fromphone}
          \locationentry*{fromemail}
        }
      }    

Um die Reihenfolge der Variablenausgabe zu verändern, kann diese Definition als Basis in die insettings.tex oder ident.tex (Falls nur für eine Firma) kopiert und dort entsprechend modifiziert werden.

Das Vorgehen geht für alle vorbelegten Variablen analog.

2.14.2.10. Allgemeine TeXnische Hinweise

2.14.2.10.1. Änderung der Basisschriftart

\LaTeX{} kann grundsätzlich beliebige Schriftarten verwenden. Hierfür sollte allerdings immer darauf geachtet werden, dass die Lizenz der Schriftart das einbetten von Glyphen erlaubt. Dies liegt in der Verantwortung der Anwender*innen. Darüber hinaus ist wichtig, welches Kompilierungsprogramm verwendet werden muss. Um TrueType oder OpenType Schriftarten zu nutzen sollte |lualatex| verwendet werden. Bei Type1 Schriftarten, die speziell für \LaTeX{} installiert wurden, ist pdfLaTeX möglich. Da man heutzutage nur noch moderne Schriftformate Verwenden sollte, wird hier lediglich die Variante für |lualatex| aufgelistet.

Die Konfiguration läuft hierbei über das \pck{fontspec} Paket (Doku siehe \cite{fontspec}). Dann hängt es davon ab, ob die Basisschriftart eine Serifenschriftart ist oder nicht. In jedem Fall wird die Änderung entweder in der insettings.tex, sofern sie für alle Mandant*innen gelten soll oder in der Mantant*innenspezifischen Konfigurationsdatei gsesetzt.

2.14.2.10.1.1. Änderung, falls es ein Schriftpaket gibt

Wenn möglich sollte die Schriftart über ein entsprechendes Konfigurationspaket gesetzt werden. Ob ein solches existiert kann man sehr leicht über eine Suche nach dem Namen unter \url{ctan.org} herausfinden.

2.14.2.10.1.2. Änderung der Basisschriftart auf eine Schriftart mit Serifen
      \setmainfont{|\meta{Name der Schriftart, z.B. SourceSerifPro}|}    
2.14.2.10.1.3. Änderung der Basisschriftart auf eine Schriftart ohne Serifen
      \setsansfont{|\meta{Name der Schriftart, z.B. SourceSansPro}|}
      \renewcommand*{\familydefault}{\sfdefault}    
2.14.2.10.2. Unterscheidungen durch String-Vergleich
    \Ifstr{\lxmedia}{printer}{Falls gedruckt werden soll} {sonst}    

2.14.3. Der Druckvorlagensatz RB

Hierbei handelt es sich um einen vollständigen LaTeX Dokumentensatz mit alternativem Design. Die odt oder html-Varianten sind nicht gepflegt.

Die konzeptionelle Idee der Vorlagen wird hier auf Folie 5 bis 10 vorgestellt. Informationen zur Anpassung an die eigenen Firmendaten finden sich in der Datei Readme.tex im Vorlagenverzeichnis.

Eine kurze Übersicht der Features:

  • Mehrsprachenfähig, mit Deutscher und Englischer Übersetzung

  • Zentrale Konfigurationsdateien, die für alle Belege benutzt werden, z.B. für Kopf- und Fußzeilen, und Infos wie Bankdaten

  • mehrere vordefinierte Varianten für Logos/Hintergrundbilder

  • Berücksichtigung für Steuerzonen "EU mit USt-ID Nummer" oder "Außerhalb EU"

2.14.4. Der Druckvorlagensatz rev-odt

Hierbei handelt es sich um einen Dokumentensatz der mit odt-Vorlagen erstellt wurde. Es gibt in dem Verzeichnis eine Readme-Datei, die eventuell aktueller als die Dokumentation hier ist. Die odt-Vorlagen in diesem Verzeichnis "rev-odt" wurden von revamp-it, Zürich erstellt und werden laufend aktualisiert. Ein paar der Formulierungen in den Druckvorlagen entsprechen dem Schweizer Sprachgebrauch, z.B. "Offerte" oder "allfällig".

Hinweis zum Einsatz des Feldes "Land" bei den Stammdaten für KundInnen und LieferantInnen, sowie bei Lieferadressen: Die in diesem Vorlagensatz vorhandenen Vorlagen erwarten für "Land" das entsprechende Kürzel, das in Adressen vor die Postleitzahl gesetzt wird. Das Feld kann auch komplett leer bleiben. Wer dies anders handhaben möchte, muss die Vorlagen entsprechend anpassen.

odt-Vorlagen können mit LibreOffice oder OpenOffice editiert und den eigenen Bedürfnissen angepasst werden. Wichtig beim Editieren von if-Blöcken ist, dass immer der gesamte Block überschrieben werden muss und nicht nur Teile davon, da dies sonst oft zu einer odt-Datei führt, die vom Parser nicht korrekt gelesen werden kann.

Mahnungen können unter folgenden Einschränkungen mit den odt-Vorlagen im Vorlagensatz rev-odt erzeugt werden:

  • als Druckoption steht nur 'PDF(OpenDocument/OASIS)' zur Verfügung, das heisst, die Mahnungen werden als PDF-Datei ausgegeben.

  • für jede Rechnung muss eine eigene Mahnung erzeugt werden (auch wenn bei einzelnen KundInnen mehrere überfällige Rechnungen vorhanden sind).

Mehrere Mahnungen für eine Kundin / einen Kunden werden zu einer PDF-Datei zusammengefasst

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.

Zur Zeit gibt es in kivitendo noch keine Möglichkeit, odt-Vorlagen bei Briefen und Pflichtenheften einzusetzen. Entsprechende Vorlagen sind deshalb nicht vorhanden.

Fehlermeldungen, Anregungen und Wünsche bitte senden an: empfang@revamp-it.ch

2.14.5. Allgemeine Hinweise zu LaTeX Vorlagen

In den allermeisten Installationen sollte das Drucken jetzt schon funktionieren. Sollte ein Fehler auftreten, wirft TeX sehr lange Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeile, die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum Beispiel:

  • ! LaTeX Error: File `eurosym.sty' not found. Die entsprechende LaTeX-Bibliothek wurde nicht gefunden. Das tritt vor allem bei Vorlagen aus der Community auf. Installieren Sie die entsprechenden Pakete.

  • ! Package inputenc Error: Unicode char \u8:... set up for use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit einer Standardinstallation exotische utf8 Zeichen zu drucken. TeXLive unterstützt von Haus nur romanische Schriften und muss mit diversen Tricks dazu gebracht werden andere Zeichen zu akzeptieren. Adere TeX Systeme wie XeTeX schaffen hier Abhilfe.

Wird gar kein Fehler angezeigt, sondern nur der Name des Templates, heißt das normalerweise, dass das LaTeX Binary nicht gefunden wurde. Prüfen Sie den Namen in der Konfiguration (Standard: latexmk --pdflatex), und stellen Sie sicher, dass latexmk (oder das von Ihnen verwendete System) vom Webserver ausgeführt werden darf.

Wenn sich das Problem nicht auf Grund der Ausgabe im Webbrowser verifizieren lässt:

  • editiere [kivitendo-home]/config/kivitendo.conf und ändere "keep_temp_files" auf 1

    keep_temp_files = 1;

  • bei fastcgi oder mod_perl den Webserver neu Starten

  • Nochmal einen Druckversuch im Webfrontend auslösen

  • wechsel in das users Verzeichnis von kivitendo

    cd [kivitendo-home]/users

  • LaTeX Suchpfad anpassen:

    export TEXINPUTS=".:[kivitendo-home]/templates/[aktuelles_template_verzeichniss]:"

  • Finde heraus, welche Datei kivitendo beim letzten Durchlauf erstellt hat

    ls -lahtr ./1*.tex

    Es sollte die letzte Datei ganz unten sein

  • für besseren Hinweis auf Fehler texdatei nochmals übersetzen

    pdflatex ./1*.tex

    in der *.tex datei nach dem Fehler suchen.