kivitendo/doc/dokumentation.xml @ f4343bc1
7ee506b3 | Moritz Bunkus | <?xml version="1.0" encoding="utf-8"?>
|
||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
|
||||
5fa26f9a | Moritz Bunkus | <book id="kivitendo-documentation" lang="de">
|
||
7ff9c8f6 | Moritz Bunkus | <title>kivitendo 3.0.0: Installation, Konfiguration, Entwicklung</title>
|
||
7ee506b3 | Moritz Bunkus | |||
<chapter id="Aktuelle-Hinweise">
|
||||
<title>Aktuelle Hinweise</title>
|
||||
<para>Aktuelle Installations- und Konfigurationshinweise gibt es:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
5fa26f9a | Moritz Bunkus | <para>im kivitendo-Forum: <ulink
|
||
url="https://forum.kivitendo.org/">https://forum.kivitendo.org/</ulink></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</itemizedlist>
|
||||
</chapter>
|
||||
6023717e | Moritz Bunkus | <chapter id="config">
|
||
7ee506b3 | Moritz Bunkus | <title>Installation und Grundkonfiguration</title>
|
||
c8a19933 | Moritz Bunkus | <sect1 id="Installation-Übersicht">
|
||
<title>Übersicht</title>
|
||||
<para>
|
||||
Die Installation von kivitendo umfasst mehrere Schritte. Die folgende Liste kann sowohl für Neulinge als auch für alte Hasen als
|
||||
Übersicht und Stichpunktliste zum Abhaken dienen, um eine Version mit minimalen Features möglichst schnell zum Laufen zu kriegen.
|
||||
</para>
|
||||
<orderedlist>
|
||||
<listitem><para><emphasis>Voraussetzungen überprüfen</emphasis>: kivitendo benötigt gewisse Ressourcen und benutzt weitere
|
||||
Programme. Das Kapitel "<xref linkend="Benötigte-Software-und-Pakete"/>" erläutert diese. Auch die Liste der benötigten Perl-Module
|
||||
befindet sich hier.</para></listitem>
|
||||
<listitem><para><emphasis>Installation von kivitendo</emphasis>: Diese umfasst die "<xref
|
||||
linkend="Manuelle-Installation-des-Programmpaketes"/>" sowie grundlegende Einstellungen, die der "<xref
|
||||
linkend="config.config-file"/>" erläutert.</para></listitem>
|
||||
<listitem><para><emphasis>Konfiguration externer Programme</emphasis>: hierzu gehören die Datenbank ("<xref
|
||||
linkend="Anpassung-der-PostgreSQL-Konfiguration"/>") und der Webserver ("<xref
|
||||
linkend="Apache-Konfiguration"/>"). </para></listitem>
|
||||
<listitem><para><emphasis>Benutzerinformationen speichern können</emphasis>: man benötigt mindestens eine Datenbank, in der
|
||||
Informationen zur Authentifizierung sowie die Nutzdaten gespeichert werden. Wie man das als Administrator macht, verrät "<xref
|
||||
linkend="Benutzerauthentifizierung-und-Administratorpasswort"/>".</para></listitem>
|
||||
<listitem><para><emphasis>Benutzer, Gruppen und Datenbanken anlegen</emphasis>: wie dies alles zusammenspielt erläutert "<xref
|
||||
linkend="Benutzer--und-Gruppenverwaltung"/>".</para></listitem>
|
||||
<listitem><para><emphasis>Los geht's</emphasis>: alles soweit erledigt? Dann kann es losgehen: "<xref
|
||||
linkend="kivitendo-ERP-verwenden"/>"</para></listitem>
|
||||
</orderedlist>
|
||||
<para>
|
||||
Alle weiteren Unterkapitel in diesem Kapitel sind ebenfalls wichtig und dienen sollten vor einer ernsthaften Inbetriebnahme gelesen
|
||||
werden.
|
||||
</para>
|
||||
</sect1>
|
||||
7ee506b3 | Moritz Bunkus | <sect1 id="Benötigte-Software-und-Pakete">
|
||
<title>Benötigte Software und Pakete</title>
|
||||
<sect2 id="Betriebssystem">
|
||||
<title>Betriebssystem</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo ist für Linux konzipiert, und sollte auf jedem
|
||
7ee506b3 | Moritz Bunkus | unixoiden Betriebssystem zum Laufen zu kriegen sein. Getestet ist
|
||
diese Version im speziellen auf Debian und Ubuntu, grundsätzlich wurde
|
||||
bei der Auswahl der Pakete aber darauf Rücksicht genommen, dass es
|
||||
ohne große Probleme auf den derzeit aktuellen verbreiteten
|
||||
Distributionen läuft.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Mitte 2012 sind das folgende Systeme, von denen bekannt ist,
|
||
dass kivitendo auf ihnen läuft:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<itemizedlist>
|
||||
d3a086e3 | Wulf Coulmann | |||
7ee506b3 | Moritz Bunkus | <listitem>
|
||
d3a086e3 | Wulf Coulmann | <para>Debian</para>
|
||
<itemizedlist>
|
||||
<listitem>
|
||||
829e589a | Moritz Bunkus | <para>6.0 "Squeeze" (hier muss allerdings das Modul FCGI in der Version >= 0.72 compiled werden, und <literal>Rose::DB::Object</literal> ist zu alt)</para>
|
||
d3a086e3 | Wulf Coulmann | </listitem>
|
||
<listitem>
|
||||
6066c769 | Moritz Bunkus | <para>7.0 "Wheezy"</para>
|
||
d3a086e3 | Wulf Coulmann | </listitem>
|
||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
9ef71acd | Moritz Bunkus | <para>Ubuntu 12.04 LTS "Precise Pangolin", 12.10 "Quantal Quetzal" und 13.04 "Precise Pangolin"</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
829e589a | Moritz Bunkus | <para>openSUSE 12.2 und 12.3</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
<para>SuSE Linux Enterprice Server 11</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
9ef71acd | Moritz Bunkus | <para>Fedora 16 bis 19</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</itemizedlist>
|
||||
</sect2>
|
||||
<sect2 id="Pakete" xreflabel="Pakete">
|
||||
6066c769 | Moritz Bunkus | <title>Benötigte Perl-Pakete installieren</title>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <para>Zum Betrieb von kivitendo werden zwingend ein Webserver (meist
|
||
9ef71acd | Moritz Bunkus | Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.4)
|
||
7ee506b3 | Moritz Bunkus | benötigt.</para>
|
||
6066c769 | Moritz Bunkus | <para>Zusätzlich benötigt kivitendo einige Perl-Pakete, die nicht Bestandteil einer Standard-Perl-Installation sind. Um zu
|
||
überprüfen, ob die erforderlichen Pakete installiert und aktuell genug sind, wird ein Script mitgeliefert, das wie folgt aufgerufen
|
||||
wird:</para>
|
||||
<programlisting>./scripts/installation_check.pl</programlisting>
|
||||
<para>Die vollständige Liste der benötigten Perl-Module lautet:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<itemizedlist>
|
||||
987594db | Moritz Bunkus | <listitem><para><literal>parent</literal> (nur bei Perl vor 5.10.1)</para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Archive::Zip</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Config::Std</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>DateTime</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>DBI</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>DBD::Pg</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Email::Address</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Email::MIME</literal></para></listitem>
|
||
a7121495 | Moritz Bunkus | |||
6066c769 | Moritz Bunkus | <listitem><para><literal>FCGI</literal> (nicht Versionen 0.68 bis 0.71 inklusive; siehe <xref linkend="Apache-Konfiguration.FCGI.WebserverUndPlugin"/>)</para></listitem>
|
||
8ac5bc8d | Moritz Bunkus | <listitem><para><literal>File::Copy::Recursive</literal></para></listitem>
|
||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>JSON</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>List::MoreUtils</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Net::SMTP::SSL</literal> (optional, bei E-Mail-Versand über SSL; siehe Abschnitt "<xref
|
||
linkend="config.sending-email.smtp"/>")</para></listitem>
|
||||
a7121495 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Net::SSLGlue</literal> (optional, bei E-Mail-Versand über TLS; siehe Abschnitt "<xref
|
||
linkend="config.sending-email.smtp"/>")</para></listitem>
|
||||
a7121495 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Params::Validate</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>PDF::API2</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Rose::Object</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Rose::DB</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
829e589a | Moritz Bunkus | <listitem><para><literal>Rose::DB::Object</literal> Version 0.788 oder neuer</para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Template</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Text::CSV_XS</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Text::Iconv</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>URI</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>XML::Writer</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>YAML</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | </itemizedlist>
|
||
829e589a | Moritz Bunkus | <para>Seit v3.0.0 sind die folgenden Pakete hinzugekommen: <literal>File::Copy::Recursive</literal>.</para>
|
||
a7121495 | Moritz Bunkus | <para>Seit v2.7.0 sind die folgenden Pakete hinzugekommen: <literal>Email::MIME</literal>, <literal>Net::SMTP::SSL</literal>,
|
||
<literal>Net::SSLGlue</literal>.</para>
|
||||
7ee506b3 | Moritz Bunkus | <para>Gegenüber Version 2.6.0 sind zu dieser Liste 2 Pakete
|
||
hinzugekommen, <literal>URI</literal> und
|
||||
5fa26f9a | Moritz Bunkus | <literal>XML::Writer</literal> sind notwendig. Ohne startet kivitendo
|
||
7ee506b3 | Moritz Bunkus | nicht.</para>
|
||
<para>Gegenüber Version 2.6.1 sind <literal>parent</literal>,
|
||||
<literal>DateTime</literal>, <literal>Rose::Object</literal>,
|
||||
<literal>Rose::DB</literal> und <literal>Rose::DB::Object</literal>
|
||||
neu hinzugekommen. <literal>IO::Wrap</literal> wurde entfernt.</para>
|
||||
<para>Gegenüber Version 2.6.3 ist <literal>JSON</literal> neu
|
||||
hinzugekommen.</para>
|
||||
<para><literal>Email::Address</literal> und
|
||||
<literal>List::MoreUtils</literal> sind schon länger feste
|
||||
5fa26f9a | Moritz Bunkus | Abhängigkeiten, wurden aber bisher mit kivitendo mitgeliefert. Beide
|
||
7ee506b3 | Moritz Bunkus | sind auch in 2.6.1 weiterhin mit ausgeliefert, wurden in einer
|
||
zukünftigen Version aber aus dem Paket entfernt werden. Es wird
|
||||
empfohlen diese Module zusammen mit den anderen als Bibliotheken zu
|
||||
installieren.</para>
|
||||
6066c769 | Moritz Bunkus | <sect3>
|
||
<title>Debian und Ubuntu</title>
|
||||
<para>Alle benötigten Perl-Pakete stehen für Debian und Ubuntu als Debian-Pakete zur Verfügung. Sie können mit folgendem Befehl
|
||||
installiert werden:</para>
|
||||
<programlisting>apt-get install apache2 libarchive-zip-perl libclone-perl \
|
||||
libconfig-std-perl libdatetime-perl libdbd-pg-perl libdbi-perl \
|
||||
libemail-address-perl libemail-mime-perl libfcgi-perl libjson-perl \
|
||||
liblist-moreutils-perl libnet-smtp-ssl-perl libnet-sslglue-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 \
|
||||
8ac5bc8d | Moritz Bunkus | libfile-copy-recursive-perl postgresql</programlisting>
|
||
6066c769 | Moritz Bunkus | </sect3>
|
||
7ee506b3 | Moritz Bunkus | |||
6066c769 | Moritz Bunkus | <sect3>
|
||
<title>Fedora Core</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
6066c769 | Moritz Bunkus | <para>Für Fedora Core stehen die meisten der benötigten Perl-Pakete als RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl installeirt werden:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
6066c769 | Moritz Bunkus | <programlisting>yum install httpd perl-Archive-Zip perl-Clone perl-DBD-Pg \
|
||
perl-DBI perl-DateTime perl-Email-Address perl-Email-MIME perl-FCGI \
|
||||
8ac5bc8d | Moritz Bunkus | perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils perl-Net-SMTP-SSL perl-Net-SSLGlue \
|
||
6066c769 | Moritz Bunkus | perl-PDF-API2 perl-Params-Validate perl-Rose-DB perl-Rose-DB-Object \
|
||
perl-Rose-Object perl-Sort-Naturally perl-String-ShellQuote \
|
||||
90baed86 | Moritz Bunkus | perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
|
||
6066c769 | Moritz Bunkus | perl-XML-Writer perl-YAML perl-parent postgresql-server</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
6066c769 | Moritz Bunkus | <para>Zusätzlich müssen einige Pakete aus dem CPAN installiert werden. Dazu können Sie die folgenden Befehle nutzen:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
6066c769 | Moritz Bunkus | <programlisting>yum install perl-CPAN
|
||
cpan Config::Std</programlisting>
|
||||
7ee506b3 | Moritz Bunkus | |||
6066c769 | Moritz Bunkus | </sect3>
|
||
7ee506b3 | Moritz Bunkus | |||
6066c769 | Moritz Bunkus | <sect3>
|
||
<title>openSUSE</title>
|
||||
<para>Für openSUSE stehen die meisten der benötigten Perl-Pakete als RPM-Pakete zur Verfügung. Sie können mit folgendem Befehl
|
||||
installiert werden:</para>
|
||||
<programlisting>zypper install apache2 perl-Archive-Zip perl-Clone \
|
||||
perl-Config-Std perl-DBD-Pg perl-DBI perl-DateTime perl-Email-Address \
|
||||
8ac5bc8d | Moritz Bunkus | perl-Email-MIME perl-FastCGI perl-File-Copy-Recursive perl-JSON perl-List-MoreUtils \
|
||
6066c769 | Moritz Bunkus | 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 postgresql-server</programlisting>
|
||||
<para>Zusätzlich müssen einige Pakete aus dem CPAN installiert werden. Dazu können Sie die folgenden Befehle nutzen:</para>
|
||||
<programlisting>yum install perl-CPAN
|
||||
cpan Rose::Db::Object</programlisting>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
</sect1>
|
||||
<sect1 id="Manuelle-Installation-des-Programmpaketes"
|
||||
xreflabel="Manuelle Installation des Programmpaketes">
|
||||
<title>Manuelle Installation des Programmpaketes</title>
|
||||
7ff9c8f6 | Moritz Bunkus | <para>Die kivitendo ERP Installationsdatei (<filename>kivitendo-erp-3.0.0.tgz</filename>) wird im Dokumentenverzeichnis des Webservers
|
||
6066c769 | Moritz Bunkus | (z.B. <filename>/var/www/html/</filename>, <filename>/srv/www/htdocs</filename> oder <filename>/var/www/</filename>) entpackt:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <programlisting>cd /var/www
|
||
7ff9c8f6 | Moritz Bunkus | tar xvzf kivitendo-erp-3.0.0.tgz</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <para>Wechseln Sie in das entpackte Verzeichnis:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <programlisting>cd kivitendo-erp</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Alternativ können Sie auch einen Alias in der
|
||||
Webserverkonfiguration benutzen, um auf das tatsächliche
|
||||
Installationsverzeichnis zu verweisen.</para>
|
||||
9785598b | Moritz Bunkus | <para>Die Verzeichnisse <filename>users</filename>, <filename>spool</filename> und <filename>webdav</filename> müssen für den Benutzer
|
||
beschreibbar sein, unter dem der Webserver läuft. Die 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
|
||||
6066c769 | Moritz Bunkus | core <constant>apache</constant> oder bei OpenSUSE <constant>wwwrun</constant>).</para>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Der folgende Befehl ändert den Besitzer für die oben genannten
|
||||
Verzeichnisse auf einem Debian/Ubuntu-System:</para>
|
||||
9785598b | Moritz Bunkus | <programlisting>chown -R www-data users spool webdav</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
9785598b | Moritz Bunkus | <para>Weiterhin muss der Webserver-Benutzer in den Verzeichnissen <filename>templates</filename> und <filename>users</filename>
|
||
5fa26f9a | Moritz Bunkus | Unterverzeichnisse für jeden neuen Benutzer anlegen dürfen, der in kivitendo angelegt wird:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
9785598b | Moritz Bunkus | <programlisting>chown www-data templates users</programlisting>
|
||
7ee506b3 | Moritz Bunkus | </sect1>
|
||
<sect1 id="config.config-file">
|
||||
5fa26f9a | Moritz Bunkus | <title>kivitendo-Konfigurationsdatei</title>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="config.config-file.introduction"
|
||
xreflabel="Einführung in die Konfigurationsdatei">
|
||||
<title>Einführung</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <para>In kivitendo gibt es nur noch eine Konfigurationsdatei,
|
||
die benötigt wird: <filename>config/kivitendo.conf</filename> (kurz:
|
||||
3adb0cb7 | Moritz Bunkus | "die Hauptkonfigurationsdatei"). Diese muss bei der Erstinstallation
|
||
5fa26f9a | Moritz Bunkus | von kivitendo bzw. der Migration von älteren Versionen angelegt
|
||
3adb0cb7 | Moritz Bunkus | werden.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Als Vorlage dient die Datei
|
||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf.default</filename> (kurz: "die
|
||
3adb0cb7 | Moritz Bunkus | Default-Datei"):</para>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <programlisting>$ cp config/kivitendo.conf.default config/kivitendo.conf</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die Default-Datei wird immer zuerst eingelesen. Werte, die in
|
||
der Hauptkonfigurationsdatei stehen, überschreiben die Werte aus der
|
||||
Default-Datei. Die Hauptkonfigurationsdatei muss also nur die
|
||||
9785598b | Moritz Bunkus | Abschnitte und Werte enthalten, die von denen der Default-Datei
|
||
3adb0cb7 | Moritz Bunkus | abweichen.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <note>
|
||
<para>
|
||||
Vor der Umbenennung in kivitendo hieß diese Datei noch <filename>config/lx_office.conf</filename>. Aus Gründen der Kompatibilität
|
||||
wird diese Datei eingelesen, sofern die Datei <filename>config/kivitendo.conf</filename> nicht existiert.
|
||||
</para>
|
||||
</note>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Diese Hauptkonfigurationsdatei ist dann eine
|
||
installationsspezifische Datei, d.h. sie enthält bspw. lokale
|
||||
Passwörter und wird auch nicht im Versionsmanagement (git)
|
||||
verwaltet.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die Konfiguration ist ferner serverabhängig, d.h. für alle
|
||
Mandaten, bzw. Datenbanken gleich.</para>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="config.config-file.sections-parameters">
|
||
<title>Abschnitte und Parameter</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die Konfigurationsdatei besteht aus mehreren Teilen, die
|
||
entsprechend kommentiert sind:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <itemizedlist>
|
||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>authentication</literal> (siehe Abschnitt "<xref
|
||
linkend="Benutzerauthentifizierung-und-Administratorpasswort"/>" in diesem Kapitel)</para></listitem>
|
||||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>authentication/database</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>authentication/ldap</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>system</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>features</literal> (siehe Kapitel "<xref linkend="features"/>")</para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>paths</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>applications</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>environment</literal></para></listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>mail_delivery</literal> (siehe Abschnitt "<xref linkend="config.sending-email.smtp"/>)</para></listitem>
|
||
a7121495 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>print_templates</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>task_server</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>periodic_invoices</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>console</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>debug</literal></para></listitem>
|
||
3adb0cb7 | Moritz Bunkus | </itemizedlist>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die üblicherweise wichtigsten Parameter, die am Anfang
|
||
einzustellen oder zu kontrollieren sind, sind:</para>
|
||||
<programlisting>[authentication]
|
||||
7ee506b3 | Moritz Bunkus | admin_password = geheim
|
||
[authentication/database]
|
||||
host = localhost
|
||||
port = 5432
|
||||
5fa26f9a | Moritz Bunkus | db = kivitendo_auth
|
||
7ee506b3 | Moritz Bunkus | user = postgres
|
||
dbda14c2 | Moritz Bunkus | password =</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Nutzt man wiederkehrende Rechnungen, kann man unter
|
||
<varname>[periodic_invoices]</varname> den Login eines Benutzers
|
||||
angeben, der nach Erstellung der Rechnungen eine entsprechende E-Mail
|
||||
mit Informationen über die erstellten Rechnungen bekommt.</para>
|
||||
854c9a62 | Moritz Bunkus | <para>kivitendo bringt eine eigene Komponente zur zeitgesteuerten Ausführung bestimmter Aufgaben mit, den <link
|
||
linkend="config.task-server">Taskserver</link>. Er wird u.a. für Features wie die <link
|
||||
linkend="features.periodic-invoices">wiederkehrenden Rechnungen</link> benötigt, erledigt aber auch andere erforderliche Aufgaben
|
||||
und muss daher in Betrieb genommen werden. Der Taskserver benötigt zwei Konfigurationseinstellungen, die unter
|
||||
<varname>[task_server]</varname> anzugeben sind: ein Mandant (entweder der Mandantenname oder eine Datenbank-ID, Variable
|
||||
<varname>client</varname>), aus dem die Datenbankkonfiguration entnommen wird, sowie ein Login (Variable <varname>login</varname>)
|
||||
eines Benutzers, der für gewisse Dinge wie die Rechnungserstellung als Verkäufer eingetragen wird.</para>
|
||||
3adb0cb7 | Moritz Bunkus | |||
<para>Für Entwickler finden sich unter <varname>[debug]</varname>
|
||||
wichtige Funktionen, um die Fehlersuche zu erleichtern.</para>
|
||||
</sect2>
|
||||
<sect2 id="config.config-file.prior-versions">
|
||||
<title>Versionen vor 2.6.3</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>In älteren kivitendo Versionen gab es im Verzeichnis
|
||
3adb0cb7 | Moritz Bunkus | <filename>config</filename> die Dateien
|
||
<filename>authentication.pl</filename> und
|
||||
<filename>lx-erp.conf</filename>, die jeweils Perl-Dateien waren. Es
|
||||
gab auch die Möglichkeit, eine lokale Version der Konfigurationsdatei
|
||||
zu erstellen (<filename>lx-erp-local.conf</filename>). Dies ist ab
|
||||
2.6.3 nicht mehr möglich, aber auch nicht mehr nötig.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Beim Update von einer kivitendo-Version vor 2.6.3 auf 2.6.3 oder
|
||
3adb0cb7 | Moritz Bunkus | jünger müssen die Einstellungen aus den alten Konfigurationsdateien
|
||
manuell übertragen und die alten Konfigurationsdateien anschließend
|
||||
5fa26f9a | Moritz Bunkus | gelöscht oder verschoben werden. Ansonsten zeigt kivitendo eine
|
||
3adb0cb7 | Moritz Bunkus | entsprechende Fehlermeldung an.</para>
|
||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | </sect1>
|
||
<sect1 id="Anpassung-der-PostgreSQL-Konfiguration">
|
||||
<title>Anpassung der PostgreSQL-Konfiguration</title>
|
||||
<para>PostgreSQL muss auf verschiedene Weisen angepasst werden.</para>
|
||||
<sect2 id="Zeichensätze-die-Verwendung-von-UTF-8">
|
||||
dbda14c2 | Moritz Bunkus | <title>Zeichensätze/die Verwendung von Unicode/UTF-8</title>
|
||
7ee506b3 | Moritz Bunkus | |||
dbda14c2 | Moritz Bunkus | <para>kivitendo setzt zwingend voraus, dass die Datenbank Unicode/UTF-8 als Encoding einsetzt. Bei aktuellen Serverinstallationen
|
||
braucht man hier meist nicht einzugreifen.</para>
|
||||
b68213ba | root | |||
dbda14c2 | Moritz Bunkus | <para>Das Encoding des Datenbankservers kann überprüft werden. Ist das Encoding der Datenbank "template1" "Unicode" bzw. "UTF-8", so
|
||
braucht man nichts weiteres diesbezüglich unternehmen. Zum Testen:</para>
|
||||
b68213ba | root | |||
<programlisting>su postgres
|
||||
echo '\l' | psql
|
||||
exit </programlisting>
|
||||
dbda14c2 | Moritz Bunkus | <para>Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
|
||
Unicode-Encoding anzulegen und diesen zu verwenden. Unter Debian und
|
||||
9ef71acd | Moritz Bunkus | Ubuntu kann dies z.B. für PostgreSQL 9.3 mit dem folgenden Befehl
|
||
3adb0cb7 | Moritz Bunkus | getan werden:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
9ef71acd | Moritz Bunkus | <programlisting>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 9.3 clustername</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die Datenbankversionsnummer muss an die tatsächlich verwendete
|
||
Versionsnummer angepasst werden.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<para>Unter anderen Distributionen gibt es ähnliche Methoden.</para>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Das Encoding einer Datenbank kann in <command>psql</command> mit
|
||
<literal>\l</literal> geprüft werden.</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Änderungen-an-Konfigurationsdateien">
|
||||
<title>Änderungen an Konfigurationsdateien</title>
|
||||
90baed86 | Moritz Bunkus | <para>In der Datei <filename>postgresql.conf</filename>, die je nach
|
||
7ee506b3 | Moritz Bunkus | Distribution in verschiedenen Verzeichnissen liegen kann (z.B.
|
||
90baed86 | Moritz Bunkus | <filename>/var/lib/pgsql/data/</filename> oder
|
||
3adb0cb7 | Moritz Bunkus | <filename>/etc/postgresql/</filename>, muss sichergestellt werden,
|
||
dass TCP/IP-Verbindungen aktiviert sind. Das Verhalten wird über den
|
||||
90baed86 | Moritz Bunkus | Parameter <varname>listen_address</varname> gesteuert. Laufen
|
||
5fa26f9a | Moritz Bunkus | PostgreSQL und kivitendo auf demselben Rechner, so kann dort der Wert
|
||
7ee506b3 | Moritz Bunkus | <literal>localhost</literal> verwendet werden. Andernfalls müssen
|
||
Datenbankverbindungen auch von anderen Rechnern aus zugelassen werden,
|
||||
90baed86 | Moritz Bunkus | was mit dem Wert <literal>*</literal> geschieht.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>In der Datei <filename>pg_hba.conf</filename>, die im gleichen
|
||
3adb0cb7 | Moritz Bunkus | Verzeichnis wie die <filename>postgresql.conf</filename> zu finden
|
||
sein sollte, müssen die Berichtigungen für den Zugriff geändert
|
||||
b68213ba | root | werden. Hier gibt es mehrere Möglichkeiten. sinnvoll ist es nur die
|
||
nögiten Verbindungen immer zuzulassen, für eine lokal laufenden
|
||||
Datenbank zum Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <programlisting>local all kivitendo password
|
||
host all kivitendo 127.0.0.1 255.255.255.255 password</programlisting>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Erweiterung-für-servergespeicherte-Prozeduren">
|
||||
<title>Erweiterung für servergespeicherte Prozeduren</title>
|
||||
<para>In der Datenbank <literal>template1</literal> muss die
|
||||
Unterstützung für servergespeicherte Prozeduren eingerichet werden.
|
||||
b68213ba | root | Melden Sie sich dafür als Benutzer “postgres” an der Datenbank an:
|
||
<programlisting>su - postgres
|
||||
psql template1</programlisting>
|
||||
7ee506b3 | Moritz Bunkus | führen Sie die folgenden Kommandos aus:</para>
|
||
b68213ba | root | <programlisting>create language 'plpgsql';
|
||
\q</programlisting>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Datenbankbenutzer-anlegen">
|
||||
<title>Datenbankbenutzer anlegen</title>
|
||||
<para>Wenn Sie nicht den Datenbanksuperuser “postgres” zum Zugriff
|
||||
benutzen wollen, so sollten Sie bei PostgreSQL einen neuen Benutzer
|
||||
anlegen. Ein Beispiel, wie Sie einen neuen Benutzer anlegen
|
||||
können:</para>
|
||||
d3a086e3 | Wulf Coulmann | <para>Die Frage, ob der neue User Superuser sein soll, können Sie mit nein
|
||
beantworten, genauso ist die Berechtigung neue User (Roles) zu
|
||||
generieren nicht nötig.</para>
|
||||
075be078 | Moritz Bunkus | <programlisting>su - postgres
|
||
b68213ba | root | createuser -d -P kivitendo
|
||
exit</programlisting>
|
||||
7ee506b3 | Moritz Bunkus | |||
<para>Wenn Sie später einen Datenbankzugriff konfigurieren, verändern
|
||||
5fa26f9a | Moritz Bunkus | Sie den evtl. voreingestellten Benutzer “postgres” auf “kivitendo” bzw.
|
||
7ee506b3 | Moritz Bunkus | den hier gewählten Benutzernamen.</para>
|
||
</sect2>
|
||||
</sect1>
|
||||
<sect1 id="Apache-Konfiguration">
|
||||
<title>Webserver-Konfiguration</title>
|
||||
<sect2>
|
||||
<title>Grundkonfiguration mittels CGI</title>
|
||||
<note>
|
||||
<para>Für einen deutlichen Performanceschub sorgt die Ausführung
|
||||
mittels FastCGI/FCGI. Die Einrichtung wird ausführlich im Abschnitt
|
||||
3adb0cb7 | Moritz Bunkus | <xref linkend="Apache-Konfiguration.FCGI" /> beschrieben.</para>
|
||
7ee506b3 | Moritz Bunkus | </note>
|
||
<para>Der Zugriff auf das Programmverzeichnis muss in der Apache
|
||||
Webserverkonfigurationsdatei <literal>httpd.conf</literal> eingestellt
|
||||
werden. Fügen Sie den folgenden Abschnitt dieser Datei oder einer
|
||||
anderen Datei hinzu, die beim Starten des Webservers eingelesen
|
||||
wird:</para>
|
||||
90baed86 | Moritz Bunkus | <programlisting>AddHandler cgi-script .pl
|
||
5b5cdc9f | Bernd Bleßmann | Alias /kivitendo-erp/ /var/www/kivitendo-erp/
|
||
90baed86 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <Directory /var/www/kivitendo-erp>
|
||
6f36a812 | Moritz Bunkus | Options ExecCGI Includes FollowSymlinks
|
||
90baed86 | Moritz Bunkus | </Directory>
|
||
5fa26f9a | Moritz Bunkus | <Directory /var/www/kivitendo-erp/users>
|
||
90baed86 | Moritz Bunkus | Order Deny,Allow
|
||
Deny from All
|
||||
</Directory></programlisting>
|
||||
7ee506b3 | Moritz Bunkus | |||
<para>Ersetzen Sie dabei die Pfade durch diejenigen, in die Sie vorher
|
||||
5fa26f9a | Moritz Bunkus | das kivitendo-Archiv entpacket haben.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <note>
|
||
3adb0cb7 | Moritz Bunkus | <para>Vor den einzelnen Optionen muss bei einigen Distributionen ein
|
||
Plus ‘<literal>+</literal>’ gesetzt werden.</para>
|
||||
90baed86 | Moritz Bunkus | </note>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Auf einigen Webservern werden manchmal die Grafiken und
|
||||
Style-Sheets nicht ausgeliefert. In solchen Fällen hat es oft
|
||||
geholfen, die folgende Option in die Konfiguration aufzunehmen:</para>
|
||||
90baed86 | Moritz Bunkus | <programlisting>EnableSendfile Off</programlisting>
|
||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Apache-Konfiguration.FCGI"
|
||||
xreflabel="Konfiguration für FastCGI/FCGI">
|
||||
<title>Konfiguration für FastCGI/FCGI</title>
|
||||
<sect3 id="Apache-Konfiguration.FCGI.WasIstEs">
|
||||
<title>Was ist FastCGI?</title>
|
||||
<para>Direkt aus <ulink
|
||||
url="http://de.wikipedia.org/wiki/FastCGI">Wikipedia</ulink>
|
||||
kopiert:</para>
|
||||
<para><citation> FastCGI ist ein Standard für die Einbindung
|
||||
externer Software zur Generierung dynamischer Webseiten in einem
|
||||
Webserver. FastCGI ist vergleichbar zum Common Gateway Interface
|
||||
(CGI), wurde jedoch entwickelt, um dessen Performance-Probleme zu
|
||||
umgehen. </citation></para>
|
||||
</sect3>
|
||||
<sect3 id="Apache-Konfiguration.FCGI.Warum">
|
||||
<title>Warum FastCGI?</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>Perl Programme (wie kivitendo eines ist) werden nicht statisch
|
||
7ee506b3 | Moritz Bunkus | kompiliert. Stattdessen werden die Quelldateien bei jedem Start
|
||
übersetzt, was bei kurzen Laufzeiten einen Großteil der Laufzeit
|
||||
ausmacht. Während SQL Ledger einen Großteil der Funktionalität in
|
||||
einzelne Module kapselt, um immer nur einen kleinen Teil laden zu
|
||||
5fa26f9a | Moritz Bunkus | müssen, ist die Funktionalität von kivitendo soweit gewachsen, dass
|
||
7ee506b3 | Moritz Bunkus | immer mehr Module auf den Rest des Programms zugreifen. Zusätzlich
|
||
benutzen wir umfangreiche Bibliotheken um Funktionaltät nicht selber
|
||||
entwickeln zu müssen, die zusätzliche Ladezeit kosten. All dies
|
||||
5fa26f9a | Moritz Bunkus | führt dazu dass ein kivitendo Aufruf der Kernmasken mittlerweile
|
||
7ee506b3 | Moritz Bunkus | deutlich länger dauert als früher, und dass davon 90% für das Laden
|
||
der Module verwendet wird.</para>
|
||||
<para>Mit FastCGI werden nun die Module einmal geladen, und danach
|
||||
wird nur die eigentliche Programmlogik ausgeführt.</para>
|
||||
</sect3>
|
||||
<sect3 id="Apache-Konfiguration.FCGI.WebserverUndPlugin">
|
||||
<title>Getestete Kombinationen aus Webservern und Plugin</title>
|
||||
<para>Folgende Kombinationen sind getestet:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Apache 2.2.11 (Ubuntu) und mod_fcgid.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Apache 2.2.11 (Ubuntu) und mod_fastcgi.</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>
|
||||
<warning>
|
||||
cc3ea92a | Moritz Bunkus | <para>FCGI-Versionen ab 0.69 und bis zu 0.71 inklusive sind extrem strict in der Behandlung von Unicode, und verweigern
|
||
bestimmte Eingaben von kivitendo. Falls es Probleme mit Umlauten in Ihrere Installation gibt, muss zwingend Version 0.68 oder
|
||||
aber Version 0.72 und neuer eingesetzt werden.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
d575e646 | Moritz Bunkus | <para>Mit <ulink url="http://www.cpan.org">CPAN</ulink> lässt sie sich die Vorgängerversion wie folgt
|
||
3adb0cb7 | Moritz Bunkus | installieren:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <programlisting>force install M/MS/MSTROUT/FCGI-0.68.tar.gz</programlisting>
|
||
</warning>
|
||||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
<sect3 id="Apache-Konfiguration.FCGI.Konfiguration">
|
||||
<title>Konfiguration des Webservers</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>Bevor Sie versuchen, eine kivitendo Installation unter FCGI
|
||
7ee506b3 | Moritz Bunkus | laufen zu lassen, empfliehlt es sich die Installation ersteinmal
|
||
unter CGI aufzusetzen. FCGI macht es nicht einfach Fehler zu
|
||||
debuggen die beim ersten aufsetzen auftreten können. Sollte die
|
||||
Installation schon funktionieren, lesen Sie weiter.</para>
|
||||
<para>Zuerst muss das FastCGI-Modul aktiviert werden. Dies kann
|
||||
unter Debian/Ubuntu z.B. mit folgendem Befehl geschehen:</para>
|
||||
<programlisting>a2enmod fcgid</programlisting>
|
||||
5fa26f9a | Moritz Bunkus | <para>Die Konfiguration für die Verwendung von kivitendo mit FastCGI
|
||
7ee506b3 | Moritz Bunkus | erfolgt durch Anpassung der vorhandenen <function>Alias</function>-
|
||
und <function>Directory</function>-Direktiven. Dabei wird zwischen
|
||||
5fa26f9a | Moritz Bunkus | dem Installationspfad von kivitendo im Dateisystem
|
||
("<filename>/path/to/kivitendo-erp</filename>") und der URL
|
||||
unterschieden, unter der kivitendo im Webbrowser erreichbar ist
|
||||
("<filename>/url/for/kivitendo-erp</filename>").</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<para>Folgender Konfigurationsschnipsel funktioniert mit
|
||||
mod_fastcgi:</para>
|
||||
5fa26f9a | Moritz Bunkus | <programlisting>AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fcgi
|
||
Alias /url/for/kivitendo-erp/ /path/to/kivitendo-erp/
|
||||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <Directory /path/to/kivitendo-erp>
|
||
7ee506b3 | Moritz Bunkus | AllowOverride All
|
||
Options ExecCGI Includes FollowSymlinks
|
||||
Order Allow,Deny
|
||||
Allow from All
|
||||
</Directory>
|
||||
5fa26f9a | Moritz Bunkus | <DirectoryMatch /path/to/kivitendo-erp/users>
|
||
7ee506b3 | Moritz Bunkus | Order Deny,Allow
|
||
Deny from All
|
||||
</DirectoryMatch></programlisting>
|
||||
b014f096 | Bernd Bleßmann | <para>Seit mod_fcgid-Version 2.3.6 gelten sehr kleine Grenzen für
|
||
7ee506b3 | Moritz Bunkus | die maximale Größe eines Requests. Diese sollte wie folgt
|
||
hochgesetzt werden:</para>
|
||||
<programlisting>FcgidMaxRequestLen 10485760</programlisting>
|
||||
<para>Das ganze sollte dann so aussehen:</para>
|
||||
<programlisting>AddHandler fcgid-script .fpl
|
||||
5fa26f9a | Moritz Bunkus | AliasMatch ^/url/for/kivitendo-erp/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
|
||
Alias /url/for/kivitendo-erp/ /path/to/kivitendo-erp/
|
||||
7ee506b3 | Moritz Bunkus | FcgidMaxRequestLen 10485760
|
||
5fa26f9a | Moritz Bunkus | <Directory /path/to/kivitendo-erp>
|
||
7ee506b3 | Moritz Bunkus | AllowOverride All
|
||
Options ExecCGI Includes FollowSymlinks
|
||||
Order Allow,Deny
|
||||
Allow from All
|
||||
</Directory>
|
||||
5fa26f9a | Moritz Bunkus | <DirectoryMatch /path/to/kivitendo-erp/users>
|
||
7ee506b3 | Moritz Bunkus | Order Deny,Allow
|
||
Deny from All
|
||||
</DirectoryMatch></programlisting>
|
||||
<para>Hierdurch wird nur ein zentraler Dispatcher gestartet. Alle
|
||||
Zugriffe auf die einzelnen Scripte werden auf diesen umgeleitet.
|
||||
Dadurch, dass zur Laufzeit öfter mal Scripte neu geladen werden,
|
||||
gibt es hier kleine Performance-Einbußen.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Es ist möglich, die gleiche kivitendo Version parallel unter
|
||
7ee506b3 | Moritz Bunkus | CGI und FastCGI zu betreiben. Dafür bleiben die Directorydirektiven
|
||
wie oben beschrieben, die URLs werden aber umgeleitet:</para>
|
||||
<programlisting># Zugriff über CGI
|
||||
5fa26f9a | Moritz Bunkus | Alias /url/for/kivitendo-erp /path/to/kivitendo-erp
|
||
7ee506b3 | Moritz Bunkus | |||
# Zugriff mit mod_fcgid:
|
||||
5fa26f9a | Moritz Bunkus | AliasMatch ^/url/for/kivitendo-erp-fcgid/[^/]+\.pl /path/to/kivitendo-erp/dispatcher.fpl
|
||
Alias /url/for/kivitendo-erp-fcgid/ /path/to/kivitendo-erp/</programlisting>
|
||||
90baed86 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <para>Dann ist unter <filename>/url/for/kivitendo-erp/</filename>
|
||
3adb0cb7 | Moritz Bunkus | die normale Version erreichbar, und unter
|
||
5fa26f9a | Moritz Bunkus | <constant>/url/for/kivitendo-erp-fcgid/</constant> die
|
||
3adb0cb7 | Moritz Bunkus | FastCGI-Version.</para>
|
||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
</sect2>
|
||||
</sect1>
|
||||
6023717e | Moritz Bunkus | <sect1 id="config.task-server">
|
||
7ee506b3 | Moritz Bunkus | <title>Der Task-Server</title>
|
||
854c9a62 | Moritz Bunkus | <para>Der Task-Server ist ein Prozess, der im Hintergrund läuft, in regelmäßigen Abständen nach abzuarbeitenden Aufgaben sucht und
|
||
diese zu festgelegten Zeitpunkten abarbeitet (ähnlich wie Cron). Dieser Prozess wird u.a. für die Erzeugung der wiederkehrenden
|
||||
Rechnungen und weitere essenzielle Aufgaben benutzt.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<sect2 id="Konfiguration-des-Task-Servers">
|
||||
<title>Verfügbare und notwendige Konfigurationsoptionen</title>
|
||||
<para>Die Konfiguration erfolgt über den Abschnitt
|
||||
<literal>[task_server]</literal> in der Datei
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf</filename>. Die dort verfügbaren
|
||
7ee506b3 | Moritz Bunkus | Optionen sind:</para>
|
||
90baed86 | Moritz Bunkus | <variablelist>
|
||
854c9a62 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>client</varname></term>
|
||||
<listitem>
|
||||
<para>Name oder Datenbank-ID eines vorhandenen kivitendo-Mandanten, der benutzt wird, um die zu verwendende
|
||||
Datenbankverbindung auszulesen. Der Mandant muss in der Administration angelegt werden. Diese Option muss angegeben
|
||||
werden.</para>
|
||||
<para>Diese Option kam mit Release v3.x.0 hinzu und muss daher in Konfigurationen, die von älteren Versionen aktualisiert
|
||||
wurden, ergänzt werden.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>login</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
854c9a62 | Moritz Bunkus | <para>gültiger kivitendo-Benutzername, der z.B. als Verkäufer beim Erzeugen wiederkehrender Rechnungen benötigt wird. Der
|
||
Benutzer muss in der Administration angelegt werden. Diese Option muss angegeben werden.</para>
|
||||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>run_as</varname></term>
|
||||
<listitem>
|
||||
<para>Wird der Server vom Systembenutzer <literal>root</literal>
|
||||
gestartet, so wechselt er auf den mit <literal>run_as</literal>
|
||||
angegebenen Systembenutzer. Der Systembenutzer muss dieselben
|
||||
Lese- und Schreibrechte haben, wie auch der Webserverbenutzer
|
||||
(siehe see <xref
|
||||
linkend="Manuelle-Installation-des-Programmpaketes" />). Daher
|
||||
ist es sinnvoll, hier denselben Systembenutzer einzutragen,
|
||||
unter dem auch der Webserver läuft.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>debug</varname></term>
|
||||
<listitem>
|
||||
<para>Schaltet Debug-Informationen an und aus.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Einbinden-in-den-Boot-Prozess">
|
||||
<title>Automatisches Starten des Task-Servers beim Booten</title>
|
||||
<para>Der Task-Server verhält sich von seinen Optionen her wie ein
|
||||
reguläres SystemV-kompatibles Boot-Script. Außerdem wechselt er beim
|
||||
5fa26f9a | Moritz Bunkus | Starten automatisch in das kivitendo-Installationsverzeichnis.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Deshalb ist es möglich, ihn durch Setzen eines symbolischen
|
||||
Links aus einem der Runlevel-Verzeichnisse heraus in den Boot-Prozess
|
||||
einzubinden. Da das bei neueren Linux-Distributionen aber nicht
|
||||
zwangsläufig funktioniert, werden auch Start-Scripte mitgeliefert, die
|
||||
anstelle eines symbolischen Links verwendet werden können.</para>
|
||||
<sect3>
|
||||
6066c769 | Moritz Bunkus | <title>SystemV-basierende Systeme (z.B. Debian, ältere OpenSUSE, ältere Fedora Core)</title>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Kopieren Sie die Datei
|
||||
dc8fb58c | Moritz Bunkus | <filename>scripts/boot/system-v/kivitendo-server</filename>
|
||
nach <filename>/etc/init.d/kivitendo-server</filename>. Passen
|
||||
7ee506b3 | Moritz Bunkus | Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
|
||
<literal>DAEMON=....</literal>). Binden Sie das Script in den
|
||||
Boot-Prozess ein. Dies ist distributionsabhängig:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>Debian-basierende Systeme:</para>
|
||||
dc8fb58c | Moritz Bunkus | <programlisting>update-rc.d kivitendo-task-server defaults
|
||
90baed86 | Moritz Bunkus | # Nur bei Debian Squeeze und neuer:
|
||
dc8fb58c | Moritz Bunkus | insserv kivitendo-task-server</programlisting>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
6066c769 | Moritz Bunkus | <para>Ältere OpenSUSE und ältere Fedora Core:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
dc8fb58c | Moritz Bunkus | <programlisting>chkconfig --add kivitendo-task-server</programlisting>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</itemizedlist>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
|
||
560f9681 | Moritz Bunkus | werden:</para>
|
||
<programlisting>/etc/init.d/kivitendo-task-server start</programlisting>
|
||||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
<sect3>
|
||||
<title>Upstart-basierende Systeme (z.B. Ubuntu)</title>
|
||||
<para>Kopieren Sie die Datei
|
||||
dc8fb58c | Moritz Bunkus | <filename>scripts/boot/upstart/kivitendo-task-server.conf</filename>
|
||
nach <filename>/etc/init/kivitendo-task-server.conf</filename>.
|
||||
7ee506b3 | Moritz Bunkus | Passen Sie in der kopierten Datei den Pfad zum Task-Server an (Zeile
|
||
<literal>exec ....</literal>).</para>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
|
||
560f9681 | Moritz Bunkus | werden:</para>
|
||
<programlisting>service kivitendo-task-server start</programlisting>
|
||||
</sect3>
|
||||
<sect3>
|
||||
6066c769 | Moritz Bunkus | <title>systemd-basierende Systeme (z.B. neure OpenSUSE, neuere Fedora Core)</title>
|
||
560f9681 | Moritz Bunkus | |||
<para>Verlinken 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 (Zeile
|
||||
<literal>ExecStart=....</literal> und <literal>ExecStop=...</literal>). Binden Sie das Script in den Boot-Prozess ein.
|
||||
</para>
|
||||
<para>Alle hierzu benötigten Befehle sehen so aus:</para>
|
||||
<programlisting>cd /var/www/kivitendo-erp/scripts/boot/systemd
|
||||
ln -s $(pwd)/kivitendo-task-server.service /etc/systemd/system/</programlisting>
|
||||
<para>Danach kann der Task-Server mit dem folgenden Befehl gestartet
|
||||
werden:</para>
|
||||
<programlisting>systemctl start kivitendo-task-server.service</programlisting>
|
||||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
</sect2>
|
||||
<sect2 id="Prozesskontrolle">
|
||||
<title>Wie der Task-Server gestartet und beendet wird</title>
|
||||
<para>Der Task-Server wird wie folgt kontrolliert:</para>
|
||||
90baed86 | Moritz Bunkus | <programlisting>./scripts/task_server.pl Befehl</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
<para><literal>Befehl</literal> ist dabei eine der folgenden
|
||||
Optionen:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>start</literal> startet eine neue Instanz des
|
||||
Task-Servers. Die Prozess-ID wird innerhalb des
|
||||
<filename>users</filename>-Verzeichnisses abgelegt.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><literal>stop</literal> beendet einen laufenden
|
||||
Task-Server.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><literal>restart</literal> beendet und startet ihn
|
||||
neu.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><literal>status</literal> berichtet, ob der Task-Server
|
||||
läuft.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>Der Task-Server wechselt beim Starten automatisch in das
|
||||
5fa26f9a | Moritz Bunkus | kivitendo-Installationsverzeichnis.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Dieselben Optionen können auch für die SystemV-basierenden
|
||||
Runlevel-Scripte benutzt werden (siehe oben).</para>
|
||||
</sect2>
|
||||
c979fc6c | Geoffrey Richardson | <sect2 id="Prozesskontrolle2">
|
||
<title>Task-Server mit mehreren Mandanten</title>
|
||||
854c9a62 | Moritz Bunkus | <para>Beim Task-Server werden der zu verwendende Mandant und Login-Name des Benutzers, unter dem der Task-Server laufen soll, in die
|
||
Konfigurationsdatei geschrieben. Hat man mehrere Mandanten, muss man auch mehrere Konfigurationsdateien anlegen.</para>
|
||||
c979fc6c | Geoffrey Richardson | |||
854c9a62 | Moritz Bunkus | <para>Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf, wo in der Kategorie <varname>[task_server]</varname> die
|
||
gewünschten Werte für <varname>client</varname> und <varname>login</varname> eingetragen werden.</para>
|
||||
c979fc6c | Geoffrey Richardson | |||
<para>Der alternative Task-Server wird dann mit folgendem Befehl
|
||||
gestartet:</para>
|
||||
<programlisting>./scripts/task_server.pl -c config/DATEINAME.conf</programlisting>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | </sect1>
|
||
<sect1 id="Benutzerauthentifizierung-und-Administratorpasswort">
|
||||
<title>Benutzerauthentifizierung und Administratorpasswort</title>
|
||||
<para>Informationen über die Einrichtung der Benutzerauthentifizierung,
|
||||
über die Verwaltung von Gruppen und weitere Einstellungen</para>
|
||||
<sect2 id="Grundlagen-zur-Benutzerauthentifizierung">
|
||||
<title>Grundlagen zur Benutzerauthentifizierung</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo verwaltet die Benutzerinformationen in einer
|
||
7ee506b3 | Moritz Bunkus | Datenbank, die im folgenden “Authentifizierungsdatenbank” genannt
|
||
wird. Für jeden Benutzer kann dort eine eigene Datenbank für die
|
||||
eigentlichen Finanzdaten hinterlegt sein. Diese beiden Datenbanken
|
||||
können, müssen aber nicht unterschiedlich sein.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Im einfachsten Fall gibt es für kivitendo nur eine einzige
|
||
7ee506b3 | Moritz Bunkus | Datenbank, in der sowohl die Benutzerinformationen als auch die Daten
|
||
abgelegt werden.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Zusätzlich ermöglicht es kivitendo, dass die Benutzerpasswörter
|
||
7ee506b3 | Moritz Bunkus | entweder gegen die Authentifizierungsdatenbank oder gegen einen
|
||
LDAP-Server überprüft werden.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Welche Art der Passwortüberprüfung kivitendo benutzt und wie
|
||
kivitendo die Authentifizierungsdatenbank erreichen kann, wird in der
|
||||
Konfigurationsdatei <filename>config/kivitendo.conf</filename>
|
||||
7ee506b3 | Moritz Bunkus | festgelegt. Diese muss bei der Installation und bei einem Upgrade von
|
||
einer Version vor v2.6.0 angelegt werden. Eine
|
||||
Beispielkonfigurationsdatei
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf.default</filename> existiert, die als
|
||
7ee506b3 | Moritz Bunkus | Vorlage benutzt werden kann.</para>
|
||
</sect2>
|
||||
<sect2 id="Administratorpasswort">
|
||||
<title>Administratorpasswort</title>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Das Passwort, das zum Zugriff auf das Aministrationsinterface
|
||
benutzt wird, wird ebenfalls in dieser Datei gespeichert. Es kann auch
|
||||
nur dort und nicht mehr im Administrationsinterface selber geändert
|
||||
werden. Der Parameter dazu heißt <varname>admin_password</varname> im
|
||||
Abschnitt <varname>[authentication]</varname>.</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Authentifizierungsdatenbank">
|
||||
<title>Authentifizierungsdatenbank</title>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Die Verbindung zur Authentifizierungsdatenbank wird mit den
|
||
Parametern in <varname>[authentication/database]</varname>
|
||||
konfiguriert. Hier sind die folgenden Parameter anzugeben:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>host</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Der Rechnername oder die IP-Adresse des
|
||||
Datenbankservers</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>port</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Die Portnummer des Datenbankservers, meist 5432</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>db</literal></term>
|
||||
<listitem>
|
||||
<para>Der Name der Authentifizierungsdatenbank</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><literal>user</literal></term>
|
||||
<listitem>
|
||||
5fa26f9a | Moritz Bunkus | <para>Der Benutzername, mit dem sich kivitendo beim
|
||
3adb0cb7 | Moritz Bunkus | Datenbankserver anmeldet (z.B.
|
||
"<literal>postgres</literal>")</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><literal>password</literal></term>
|
||||
<listitem>
|
||||
<para>Das Passwort für den Datenbankbenutzer</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <para>Die Datenbank muss noch nicht existieren. kivitendo kann sie
|
||
7ee506b3 | Moritz Bunkus | automatisch anlegen (mehr dazu siehe unten).</para>
|
||
</sect2>
|
||||
<sect2 id="Passwortüberprüfung">
|
||||
<title>Passwortüberprüfung</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo unterstützt Passwortüberprüfung auf zwei Arten: gegen
|
||
3adb0cb7 | Moritz Bunkus | die Authentifizierungsdatenbank und gegen einen externen LDAP- oder
|
||
Active-Directory-Server. Welche davon benutzt wird, regelt der
|
||||
Parameter <varname>module</varname> im Abschnitt
|
||||
90baed86 | Moritz Bunkus | <varname>[authentication]</varname>.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Sollen die Benutzerpasswörter in der Authentifizierungsdatenbank
|
||
gespeichert werden, so muss der Parameter <varname>module</varname>
|
||||
den Wert <literal>DB</literal> enthalten. In diesem Fall können sowohl
|
||||
der Administrator als auch die Benutzer selber ihre Psaswörter in
|
||||
5fa26f9a | Moritz Bunkus | kivitendo ändern.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Soll hingegen ein externer LDAP- oder Active-Directory-Server
|
||
benutzt werden, so muss der Parameter <varname>module</varname> auf
|
||||
<literal>LDAP</literal> gesetzt werden. In diesem Fall müssen
|
||||
zusätzliche Informationen über den LDAP-Server im Abschnitt
|
||||
90baed86 | Moritz Bunkus | <literal>[authentication/ldap]</literal> angegeben werden:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>host</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Der Rechnername oder die IP-Adresse des LDAP- oder
|
||||
Active-Directory-Servers. Diese Angabe ist zwingend
|
||||
erforderlich.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>port</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Die Portnummer des LDAP-Servers; meist 389.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>tls</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Wenn Verbindungsverschlüsselung gewünscht ist, so diesen
|
||||
Wert auf ‘<literal>1</literal>’ setzen, andernfalls auf
|
||||
‘<literal>0</literal>’ belassen</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>attribute</literal></term>
|
||||
<listitem>
|
||||
<para>Das LDAP-Attribut, in dem der Benutzername steht, den der
|
||||
Benutzer eingegeben hat. Für Active-Directory-Server ist dies
|
||||
meist ‘<literal>sAMAccountName</literal>’, für andere
|
||||
LDAP-Server hingegen ‘<literal>uid</literal>’. Diese Angabe ist
|
||||
zwingend erforderlich.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><literal>base_dn</literal></term>
|
||||
<listitem>
|
||||
<para>Der Abschnitt des LDAP-Baumes, der durchsucht werden soll.
|
||||
Diese Angabe ist zwingend erforderlich.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><literal>filter</literal></term>
|
||||
<listitem>
|
||||
<para>Ein optionaler LDAP-Filter. Enthält dieser Filter das Wort
|
||||
<literal><%login%></literal>, so wird dieses durch den vom
|
||||
Benutzer eingegebenen Benutzernamen ersetzt. Andernfalls wird
|
||||
der LDAP-Baum nach einem Element durchsucht, bei dem das oben
|
||||
angegebene Attribut mit dem Benutzernamen identisch ist.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><literal>bind_dn</literal> und
|
||||
<literal>bind_password</literal></term>
|
||||
<listitem>
|
||||
<para>Wenn der LDAP-Server eine Anmeldung erfordert, bevor er
|
||||
durchsucht werden kann (z.B. ist dies bei
|
||||
Active-Directory-Servern der Fall), so kann diese hier angegeben
|
||||
werden. Für Active-Directory-Server kann als
|
||||
‘<literal>bind_dn</literal>’ entweder eine komplette LDAP-DN wie
|
||||
z.B. ‘<literal>cn=Martin
|
||||
Mustermann,cn=Users,dc=firmendomain</literal>’ auch nur der
|
||||
volle Name des Benutzers eingegeben werden; in diesem Beispiel
|
||||
also ‘<literal>Martin Mustermann</literal>’.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Name-des-Session-Cookies">
|
||||
<title>Name des Session-Cookies</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>Sollen auf einem Server mehrere kivitendo-Installationen
|
||
3adb0cb7 | Moritz Bunkus | aufgesetzt werden, so müssen die Namen der Session-Cookies für alle
|
||
Installationen unterschiedlich sein. Der Name des Cookies wird mit dem
|
||||
Parameter <varname>cookie_name</varname> im Abschnitt
|
||||
90baed86 | Moritz Bunkus | <varname>[authentication]</varname>gesetzt.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Diese Angabe ist optional, wenn nur eine Installation auf dem
|
||||
Server existiert.</para>
|
||||
</sect2>
|
||||
<sect2 id="Anlegen-der-Authentifizierungsdatenbank">
|
||||
<title>Anlegen der Authentifizierungsdatenbank</title>
|
||||
<para>Nachdem alle Einstellungen in
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf</filename> vorgenommen wurden, muss
|
||
kivitendo die Authentifizierungsdatenbank anlegen. Dieses geschieht
|
||||
7ee506b3 | Moritz Bunkus | automatisch, wenn Sie sich im Administrationsmodul anmelden, das unter
|
||
der folgenden URL erreichbar sein sollte:</para>
|
||||
<para><ulink
|
||||
854c9a62 | Moritz Bunkus | url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
|
||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
</sect1>
|
||||
<sect1 id="Benutzer--und-Gruppenverwaltung">
|
||||
854c9a62 | Moritz Bunkus | <title>Mandanten-, Benutzer- und Gruppenverwaltung</title>
|
||
7ee506b3 | Moritz Bunkus | |||
854c9a62 | Moritz Bunkus | <para>Nach der Installation müssen Mandanten, Benutzer, Gruppen und Datenbanken angelegt werden. Dieses geschieht im
|
||
Administrationsmenü, das Sie unter folgender URL finden:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<para><ulink
|
||||
854c9a62 | Moritz Bunkus | url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Verwenden Sie zur Anmeldung das Password, dass Sie in der Datei
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf</filename> eingetragen haben.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
<sect2 id="Zusammenhänge">
|
||||
<title>Zusammenhänge</title>
|
||||
854c9a62 | Moritz Bunkus | <para>kivitendo verwaltet zwei Sets von Daten, die je nach Einrichtung in einer oder zwei Datenbanken gespeichert werden.</para>
|
||
<para>Das erste Set besteht aus Anmeldeinformationen: welche Benutzer und Mandanten gibt es, welche Gruppen, welche BenutzerIn hat
|
||||
Zugriff auf welche Mandanten, und welche Gruppe verfügt über welche Rechte. Diese Informationen werden in der
|
||||
Authentifizierungsdatenbank gespeichert. Dies ist diejenige Datenbank, deren Verbindungsparameter in der Konfigurationsdatei
|
||||
<filename>config/kivitendo.conf</filename> gespeichert werden.</para>
|
||||
<para>Das zweite Set besteht aus den eigentlichen Verkehrsdaten eines Mandanten: Stammdaten (Kunden, Lieferanten, Waren), Belege
|
||||
(Angebote, Liferscheine, Rechnungen), Einstellungen. Diese werden in einer Mandantendatenbank gespeichert. Die
|
||||
Verbindungsinformationen einer solchen Mandantendatenbank werden im Administrationsbereich konfiguriert, indem man einen Mandanten
|
||||
anlegt und dort die Parameter einträgt. Dabei hat jeder Mandant eine eigene Datenbank.</para>
|
||||
<para>Aufgrund des Datenbankdesigns ist es für einfache Fälle möglich, die Authentifizierungsdatenbank und eine der
|
||||
Mandantendatenbanken in ein und derselben Datenbank zu speichern. Arbeitet man hingegen mit mehr als einem Mandanten, wird
|
||||
empfohlen, für die Authentifizierungsdatenbank eine eigene Datenbank zu verwenden, die nicht gleichzeitig für einen Mandanten
|
||||
verwendet wird.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo verwendet eine Datenbank zum Speichern all seiner
|
||
7ee506b3 | Moritz Bunkus | Informationen wie Kundendaten, Artikel, Angebote, Rechnungen etc. Um
|
||
5fa26f9a | Moritz Bunkus | mit kivitendo arbeiten zu können, muss eine Person einen
|
||
7ee506b3 | Moritz Bunkus | Benutzeraccount haben. Jedem Benutzeraccount wiederum wird genau eine
|
||
Datenbank zugewiesen, mit der dieser Benutzer arbeiten kann. Es ist
|
||||
möglich und normal, dass mehreren Benutzern die selbe Datenbank
|
||||
zugewiesen wird, sodass sie alle mit den selben Daten arbeiten
|
||||
können.</para>
|
||||
854c9a62 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Mandanten-Benutzer-Gruppen">
|
||||
<title>Mandanten, Benutzer und Gruppen</title>
|
||||
<para>kivitendos Administration kennt Mandanten, Benutzer und Gruppen, die sich frei zueinander zuordnen lassen.</para>
|
||||
<para>kivitendo kann mehrere Mandaten aus einer Installation heraus verwalten. Welcher Mandant benutzt wird, kann direkt beim Login
|
||||
ausgewählt werden. Für jeden Mandanten wird ein eindeutiger Name vergeben, der beim Login angezeigt wird. Weiterhin benötigt der
|
||||
Mandant Datenbankverbindungsparameter für seine Mandantendatenbank. Diese sollte über die <link
|
||||
linkend="Datenbanken-anlegen">Datenbankverwaltung</link> geschehen.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
854c9a62 | Moritz Bunkus | <para>Ein Benutzer ist eine Person, die Zugriff auf kivitendo erhalten soll. Sie erhält einen Loginnamen sowie ein
|
||
Passwort. Weiterhin legt der Administrator fest, an welchen Mandanten sich ein Benutzer anmelden kann, was beim Login verifiziert
|
||||
wird.</para>
|
||||
<para>Gruppen dienen dazu, Benutzern innerhalb eines Mandanten Zugriff auf bestimmte Funktionen zu geben. Einer Gruppe werden dafür
|
||||
vom Administrator gewisse Rechte zugeordnet. Weiterhin legt der Administrator fest, für welche Mandanten eine Gruppe gilt, und
|
||||
welche Benutzer Mitglieder in dieser Gruppe sind. Meldet sich ein Benutzer dann an einem Mandanten an, so erhält er alle Rechte von
|
||||
allen denjenigen Gruppen, die zum Einen dem Mandanten zugeordnet sind und in denen der Benutzer zum Anderen Mitglied ist, </para>
|
||||
<para>Die Reihenfolge, in der Datenbanken, Mandanten, Gruppen und Benutzer angelegt werden, kann im Prinzip beliebig gewählt
|
||||
werden. Die folgende Reihenfolge beinhaltet die wenigsten Arbeitsschritte:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<orderedlist numeration="arabic">
|
||||
<listitem>
|
||||
<para>Datenbank anlegen</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Gruppen anlegen</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
854c9a62 | Moritz Bunkus | <para>Benutzer anlegen und Gruppen als Mitglied zuordnen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
854c9a62 | Moritz Bunkus | <para>Mandanten anlegen und Gruppen sowie Benutzer zuweisen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</orderedlist>
|
||||
</sect2>
|
||||
<sect2 id="Datenbanken-anlegen">
|
||||
<title>Datenbanken anlegen</title>
|
||||
<para>Zuerst muss eine Datenbank angelegt werden. Verwenden Sie für
|
||||
den Datenbankzugriff den vorhin angelegten Benutzer (in unseren
|
||||
5fa26f9a | Moritz Bunkus | Beispielen ist dies ‘<literal>kivitendo</literal>’).</para>
|
||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Gruppen-anlegen">
|
||||
<title>Gruppen anlegen</title>
|
||||
<para>Eine Gruppe wird in der Gruppenverwaltung angelegt. Ihr muss ein
|
||||
Name gegeben werden, eine Beschreibung ist hingegen optional. Nach dem
|
||||
Anlegen können Sie die verschiedenen Bereiche wählen, auf die
|
||||
Mitglieder dieser Gruppe Zugriff haben sollen.</para>
|
||||
854c9a62 | Moritz Bunkus | <para>Benutzergruppen werden zwar in der Authentifizierungsdatenbank gespeichert, gelten aber nicht automatisch für alle
|
||
Mandanten. Der Administrator legt vielmehr fest, für welche Mandanten eine Gruppe gültig ist. Dies kann entweder beim Bearbeiten der
|
||||
Gruppe geschehen ("diese Gruppe ist gültig für Mandanten X, Y und Z"), oder aber wenn man einen Mandanten bearbeitet ("für diesen
|
||||
Mandanten sind die Gruppen A, B und C gültig").</para>
|
||||
<para>Wurden bereits Benutzer angelegt, so können hier die Mitglieder dieser Gruppe festgelegt werden ("in dieser Gruppe sind die
|
||||
Benutzer X, Y und Z Mitglieder"). Dies kann auch nachträglich beim Bearbeiten eines Benutzers geschehen ("dieser Benutzer ist
|
||||
Mitglied in den Gruppen A, B und C").</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
<sect2 id="Benutzer-anlegen">
|
||||
<title>Benutzer anlegen</title>
|
||||
854c9a62 | Moritz Bunkus | <para>Beim Anlegen von Benutzern werden für viele Parameter Standardeinstellungen vorgenommen, die den Gepflogenheiten des deutschen
|
||
Raumes entsprechen.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
854c9a62 | Moritz Bunkus | <para>Zwingend anzugeben ist der Loginname. Wenn die Passwortauthentifizierung über die Datenbank eingestellt ist, so kann hier auch
|
||
das Benutzerpasswort gesetzt bzw. geändert werden. Ist hingegen die LDAP-Authentifizierung aktiv, so ist das Passwort-Feld
|
||||
deaktiviert.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
854c9a62 | Moritz Bunkus | <para>Hat man bereits Mandanten und Gruppen angelegt, so kann hier auch konfiguriert werden, auf welche Mandanten der Benutzer
|
||
Zugriff hat bzw. in welchen Gruppen er Mitglied ist. Beide Zuweisungen können sowohl beim Benutzer vorgenommen werden ("dieser
|
||||
Benutzer hat Zugriff auf Mandanten X, Y, Z" bzw. "dieser Benutzer ist Mitglied in Gruppen X, Y und Z") als auch beim Mandanten ("auf
|
||||
diesen Mandanten haben Benutzer A, B und C Zugriff") bzw. bei der Gruppe ("in dieser Gruppe sind Benutzer A, B und C
|
||||
Mitglieder").</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
854c9a62 | Moritz Bunkus | <sect2 id="Mandanten-anlegen">
|
||
<title>Mandanten anlegen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
854c9a62 | Moritz Bunkus | <para>Ein Mandant besteht aus Administrationssicht primär aus einem eindeutigen Namen. Weiterhin wird hier hinterlegt, welche
|
||
Datenbank als Mandantendatenbank benutzt wird. Hier müssen die Zugriffsdaten einer der eben angelegten Datenbanken eingetragen
|
||||
werden.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
854c9a62 | Moritz Bunkus | <para>Hat man bereits Benutzer und Gruppen angelegt, so kann hier auch konfiguriert werden, welche Benutzer Zugriff auf den
|
||
Mandanten haben bzw. welche Gruppen für den Mandanten gültig sind. Beide Zuweisungen können sowohl beim Mandanten vorgenommen werden
|
||||
("auf diesen Mandanten haben Benutzer X, Y und Z Zugriff" bzw. "für diesen Mandanten sind die Gruppen X, Y und Z gültig") als auch
|
||||
beim Benutzer ("dieser Benutzer hat Zugriff auf Mandanten A, B und C") bzw. bei der Gruppe ("diese Gruppe ist für Mandanten A, B und
|
||||
C gültig").</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
</sect1>
|
||||
cc3ea92a | Moritz Bunkus | <sect1 id="config.sending-email" xreflabel="E-Mail-Versand aus kivitendo heraus">
|
||
a7121495 | Moritz Bunkus | <title>E-Mail-Versand aus kivitendo heraus</title>
|
||
<para>kivitendo kann direkt aus dem Programm heraus E-Mails versenden, z.B. um ein Angebot direkt an einen Kunden zu
|
||||
verschicken. Damit dies funktioniert, muss eingestellt werden, über welchen Server die E-Mails verschickt werden sollen. kivitendo
|
||||
unterstützt dabei zwei Mechanismen: Versand über einen lokalen E-Mail-Server (z.B. mit <productname>Postfix</productname> oder
|
||||
<productname>Exim</productname>, was auch die standardmäßig aktive Methode ist) sowie Versand über einen SMTP-Server (z.B. der des
|
||||
eigenen Internet-Providers).</para>
|
||||
<para>Welche Methode und welcher Server verwendet werden, wird über die Konfigurationsdatei <filename>config/kivitendo.conf</filename>
|
||||
festgelegt. Dort befinden sich alle Einstellungen zu diesem Thema im Abschnitt '<literal>[mail_delivery]</literal>'.</para>
|
||||
cc3ea92a | Moritz Bunkus | <sect2 id="config.sending-email.sendmail" xreflabel="E-Mail-Versand über lokalen E-Mail-Server">
|
||
a7121495 | Moritz Bunkus | <title>Versand über lokalen E-Mail-Server</title>
|
||
<para>Diese Methode bietet sich an, wenn auf dem Server, auf dem kivitendo läuft, bereits ein funktionsfähiger E-Mail-Server wie
|
||||
z.B. <productname>Postfix</productname>, <productname>Exim</productname> oder <productname>Sendmail</productname> läuft.</para>
|
||||
<para>Um diese Methode auszuwählen, muss der Konfigurationsparameter '<literal>method = sendmail</literal>' gesetzt sein. Dies ist
|
||||
gleichzeitig der Standardwert, falls er nicht verändert wird.</para>
|
||||
<para>Um zu kontrollieren, wie das Programm zum Einliefern gestartet wird, dient der Parameter '<literal>sendmail =
|
||||
...</literal>'. Der Standardwert verweist auf das Programm <filename>/usr/bin/sendmail</filename>, das bei allen oben genannten
|
||||
E-Mail-Serverprodukten für diesen Zweck funktionieren sollte.</para>
|
||||
<para>Die Konfiguration des E-Mail-Servers selber würde den Rahmen dieses sprengen. Hierfür sei auf die Dokumentation des
|
||||
E-Mail-Servers verwiesen.</para>
|
||||
</sect2>
|
||||
cc3ea92a | Moritz Bunkus | <sect2 id="config.sending-email.smtp" xreflabel="E-Mail-Versand über einen SMTP-Server">
|
||
a7121495 | Moritz Bunkus | <title>Versand über einen SMTP-Server</title>
|
||
<para>Diese Methode bietet sich an, wenn kein lokaler E-Mail-Server vorhanden oder zwar einer vorhanden, dieser aber nicht
|
||||
konfiguriert ist.</para>
|
||||
<para>Um diese Methode auszuwählen, muss der Konfigurationsparameter '<literal>method = smtp</literal>' gesetzt sein. Die folgenden
|
||||
Parameter dienen dabei der weiteren Konfiguration:</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><varname>hostname</varname></term>
|
||||
<listitem><para>Name oder IP-Adresse des SMTP-Servers. Standardwert: '<literal>localhost</literal>'</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>port</varname></term>
|
||||
<listitem><para>Portnummer. Der Standardwert hängt von der verwendeten Verschlüsselungsmethode ab. Gilt '<literal>security =
|
||||
none</literal>' oder '<literal>security = tls</literal>', so ist 25 die Standardportnummer. Für '<literal>security =
|
||||
ssl</literal>' ist 465 die Portnummer. Muss normalerweise nicht geändert werden.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>security</varname></term>
|
||||
<listitem><para>Wahl der zu verwendenden Verschlüsselung der Verbindung mit dem Server. Standardwert ist
|
||||
'<literal>none</literal>', wodurch keine Verschlüsselung verwendet wird. Mit '<literal>tls</literal>' wird TLS-Verschlüsselung
|
||||
eingeschaltet, und mit '<literal>ssl</literal>' wird Verschlüsselung via SSL eingeschaltet. Achtung: Für
|
||||
'<literal>tls</literal>' und '<literal>ssl</literal>' werden zusätzliche Perl-Module benötigt (siehe unten).</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>login</varname> und <varname>password</varname></term>
|
||||
<listitem><para>Falls der E-Mail-Server eine Authentifizierung verlangt, so können mit diesen zwei Parametern der Benutzername
|
||||
und das Passwort angegeben werden. Wird Authentifizierung verwendet, so sollte aus Sicherheitsgründen auch eine Form von
|
||||
Verschlüsselung aktiviert werden.</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
<para>Wird Verschlüsselung über TLS oder SSL aktiviert, so werden zusätzliche Perl-Module benötigt. Diese sind:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>TLS-Verschlüsselung: Modul <literal>Net::SSLGlue</literal> (Debian-Paketname
|
||||
6066c769 | Moritz Bunkus | <literal>libnet-sslglue-perl</literal>, Fedora Core: <literal>perl-Net-SSLGlue</literal>, openSUSE:
|
||
a7121495 | Moritz Bunkus | <literal>perl-Net-SSLGlue</literal></para></listitem>
|
||
<listitem><para>SSL-Verschlüsselung: Modul <literal>Net::SMTP::SSL</literal> (Debian-Paketname
|
||||
6066c769 | Moritz Bunkus | <literal>libnet-smtp-ssl-perl</literal>, Fedora Core: <literal>perl-Net-SMTP-SSL</literal>, openSUSE:
|
||
a7121495 | Moritz Bunkus | <literal>perl-Net-SMTP-SSL</literal></para></listitem>
|
||
</itemizedlist>
|
||||
</sect2>
|
||||
</sect1>
|
||||
5fa26f9a | Moritz Bunkus | <sect1 id="Drucken-mit-kivitendo">
|
||
<title>Drucken mit kivitendo</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
d575e646 | Moritz Bunkus | <para>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 <literal>texlive</literal> Installation. Unter Debianoiden Betriebssystemen installiert man
|
||||
die Pakete mit:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
d575e646 | Moritz Bunkus | <para><programlisting>aptitude install texlive-base-bin texlive-latex-recommended texlive-fonts-recommended \
|
||
texlive-latex-extra texlive-lang-german texlive-generic-extra</programlisting></para>
|
||||
7ee506b3 | Moritz Bunkus | |||
d575e646 | Moritz Bunkus | <para>TODO: RPM-Pakete.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
d575e646 | Moritz Bunkus | <para>kivitendo bringt drei alternative Vorlagensätze mit:</para>
|
||
<itemizedlist>
|
||||
<listitem><para>Standard</para></listitem>
|
||||
<listitem><para>f-tex</para></listitem>
|
||||
<listitem><para>RB</para></listitem>
|
||||
</itemizedlist>
|
||||
d3a086e3 | Wulf Coulmann | |||
<sect2 id="Vorlagenverzeichnis-anlegen" xreflabel="Vorlagenverzeichnis anlegen">
|
||||
<title>Vorlagenverzeichnis anlegen</title>
|
||||
d575e646 | Moritz Bunkus | <para>Im Administrationsbereich lässt sich bei einem Benutzer/Mandanten einer dieser Vorlagensätze als Basis für die zu
|
||
druckenden Dokumente auswählen. Rufen Sie dazu die <guimenu>Benutzerverwaltung</guimenu> auf.</para>
|
||||
<para>Wählen Sie dort einen Benutzer aus oder legen Sie einen neuen an. In der Benutzerbearbeiten-Maske müssen Sie zwei Dinge
|
||||
angeben:</para>
|
||||
<orderedlist>
|
||||
<listitem><para><option>Name</option>: Der Verzeichnisname für den neuen Vorlagensatz. Dieser kann im Rahmen der üblichen
|
||||
Bedingungen für Verzeichnisnamen frei gewählt werden.</para></listitem>
|
||||
<listitem><para><option>Vorlagen auswählen</option>: Wählen Sie hier den Vorlagensatz aus, der kopiert werden soll
|
||||
(<filename>Standard</filename>, <filename>f-tex</filename> oder <filename>RB</filename>.)</para></listitem>
|
||||
</orderedlist>
|
||||
d3a086e3 | Wulf Coulmann | |||
d575e646 | Moritz Bunkus | <para>Der gleiche Vorlagensatz kann, wenn er mal angelegt ist, bei mehreren Benutzern verwendet werden.</para>
|
||
d3a086e3 | Wulf Coulmann | |||
<para>Die Abhängigkeiten kann man prüfen mit:</para>
|
||||
d575e646 | Moritz Bunkus | |||
<programlisting>/scripts/installation_check.pl -l</programlisting>
|
||||
d3a086e3 | Wulf Coulmann | |||
</sect2>
|
||||
d575e646 | Moritz Bunkus | <sect2 id="Vorlagen-Standard">
|
||
<title>Standard</title>
|
||||
d3a086e3 | Wulf Coulmann | |||
d575e646 | Moritz Bunkus | <para>Der Standard-Vorlagensatz von Kivitendo. Wie unter <ulink url="http://demo.kivitendo.org">http://demo.kivitendo.org</ulink> zu
|
||
sehen.</para>
|
||||
d3a086e3 | Wulf Coulmann | |||
</sect2>
|
||||
<sect2 id="f-tex">
|
||||
<title>f-tex</title>
|
||||
d575e646 | Moritz Bunkus | <para>Ein Vorlagensatz, der in wenigen Minuten alle Dokumente zur Verfügung stellt.</para>
|
||
d3a086e3 | Wulf Coulmann | |||
<sect3 id="f-tex-Feature-Übersicht">
|
||||
d575e646 | Moritz Bunkus | <title>Feature-Übersicht</title>
|
||
d3a086e3 | Wulf Coulmann | <itemizedlist>
|
||
d575e646 | Moritz Bunkus | <listitem><para>Keine Redundanz. Es wird ein- und dieselbe LaTeX-Vorlage für alle briefartigen Dokumente verwendet. Also
|
||
Angebot, Rechnung, Performarechnung, Lieferschein, aber eben nicht für Paketaufkleber etc..</para></listitem>
|
||||
<listitem><para>Leichte Anpassung an das Firmen-Layout durch verwendung eines Hintergrund-PDF. 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>
|
||||
d3a086e3 | Wulf Coulmann | </itemizedlist>
|
||
</sect3>
|
||||
d575e646 | Moritz Bunkus | <sect3 id="f-tex-Installation">
|
||
<title>Die Installation</title>
|
||||
d3a086e3 | Wulf Coulmann | <itemizedlist>
|
||
d575e646 | Moritz Bunkus | <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>
|
||||
d3a086e3 | Wulf Coulmann | </itemizedlist>
|
||
<para>oder etwas Detaillierter:</para>
|
||||
<para>
|
||||
d575e646 | Moritz Bunkus | 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 Hintergrundpdf verwiesen. Ich empfehle über dieses PDF die persönlichen Layoutanpassungen
|
||||
vorzunehmen und <filename>sample.lco</filename> unverändert zu lassen. Die die Anpassung über eine
|
||||
<filename>*.lco</filename>-Datei die letztlich auf <filename>letter.lco</filename> verlinkt ist ist aber auch möglich.
|
||||
d3a086e3 | Wulf Coulmann | </para>
|
||
d575e646 | Moritz Bunkus | |||
d3a086e3 | Wulf Coulmann | <para>
|
||
d575e646 | Moritz Bunkus | 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_haed.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.
|
||||
d3a086e3 | Wulf Coulmann | </para>
|
||
d575e646 | Moritz Bunkus | |||
d3a086e3 | Wulf Coulmann | <para>
|
||
d575e646 | Moritz Bunkus | letzlich muss <filename>letter_head.pdf</filename> auf das passende Hintergrund-PDF verweisen, welches gewünschten Briefkopf
|
||
enthält. Bei Updates oder nach erneutem
|
||||
d3a086e3 | Wulf Coulmann | </para>
|
||
d575e646 | Moritz Bunkus | |||
d3a086e3 | Wulf Coulmann | <para>
|
||
d575e646 | Moritz Bunkus | 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).
|
||||
d3a086e3 | Wulf Coulmann | </para>
|
||
<para>
|
||||
d575e646 | Moritz Bunkus | Alle Anpassungen zum Briefkopf, Fusszeilen, Firmenlogos, etc. sollten über die Hintergrund-PDF-Datei oder die
|
||
<filename>*.lco</filename>-Datei erfolgen.
|
||||
d3a086e3 | Wulf Coulmann | </para>
|
||
</sect3>
|
||||
d575e646 | Moritz Bunkus | |||
d3a086e3 | Wulf Coulmann | <sect3 id="f-tex-Funktionsübersicht">
|
||
<title>f-tex Funktionsübersicht</title>
|
||||
<para>
|
||||
d575e646 | Moritz Bunkus | 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.
|
||||
d3a086e3 | Wulf Coulmann | </para>
|
||
d575e646 | Moritz Bunkus | |||
d3a086e3 | Wulf Coulmann | <itemizedlist>
|
||
d575e646 | Moritz Bunkus | <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>
|
||||
d3a086e3 | Wulf Coulmann | </itemizedlist>
|
||
<para>Nachteil:</para>
|
||||
d575e646 | Moritz Bunkus | |||
d3a086e3 | Wulf Coulmann | <para>
|
||
d575e646 | Moritz Bunkus | 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 häftig in den Fuss schiessen.
|
||||
d3a086e3 | Wulf Coulmann | </para>
|
||
d575e646 | Moritz Bunkus | |||
<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.
|
||||
d3a086e3 | Wulf Coulmann | </para>
|
||
d575e646 | Moritz Bunkus | <para>Kleiner Tipp: Nicht zu viel auf einmal wollen, lieber kleine kontinuierliche Schritte gehen.</para>
|
||
d3a086e3 | Wulf Coulmann | |||
d575e646 | Moritz Bunkus | </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>
|
||||
d3a086e3 | Wulf Coulmann | <itemizedlist>
|
||
<listitem>
|
||||
d575e646 | Moritz Bunkus | <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>
|
||||
d3a086e3 | Wulf Coulmann | </listitem>
|
||
<listitem>
|
||||
d575e646 | Moritz Bunkus | <para>man darf beim Anlegen des Vorgangs nicht vergessen Dieses Häkchen zu setzen. (das ist in der Praxis wenn man sowohl
|
||
Endverbraucher- wie Gewerbekunden beliefert der eigentliche Knackpunkt)</para>
|
||||
d3a086e3 | Wulf Coulmann | </listitem>
|
||
</itemizedlist>
|
||||
<para>
|
||||
d575e646 | Moritz Bunkus | 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>
|
||||
d3a086e3 | Wulf Coulmann | |||
<itemizedlist>
|
||||
d575e646 | Moritz Bunkus | <listitem><para>Die Entscheidung, ob Netopreise 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 reviediert werden,
|
||||
ohne dass sich der Auftragswert ändert.</para></listitem>
|
||||
d3a086e3 | Wulf Coulmann | </itemizedlist>
|
||
</sect3>
|
||||
d575e646 | Moritz Bunkus | <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>
|
||||
d3a086e3 | Wulf Coulmann | </sect2>
|
||
d575e646 | Moritz Bunkus | <sect2 id="Vorlagen-RB">
|
||
d3a086e3 | Wulf Coulmann | <title>RB</title>
|
||
d575e646 | Moritz Bunkus | <para>Vollständiger Dokumentensatz mit alternativem Design</para>
|
||
d3a086e3 | Wulf Coulmann | |||
</sect2>
|
||||
d575e646 | Moritz Bunkus | <sect2 id="allgemeine-hinweise-zu-latex">
|
||
d3a086e3 | Wulf Coulmann | <title>Allgemeine Hinweise zu LaTeX Vorlagen</title>
|
||
<para>In den allermeisten Installationen sollte drucken jetzt schon
|
||||
funktionieren. Sollte ein Fehler auftreten wirft TeX sehr lange
|
||||
Fehlerbeschreibungen, der eigentliche Fehler ist immer die erste Zeite
|
||||
die mit einem Ausrufezeichen anfängt. Häufig auftretende Fehler sind zum
|
||||
Beispiel:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>! 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.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
d575e646 | Moritz Bunkus | <para>! Package inputenc Error: Unicode char \u8:... set up for
|
||
d3a086e3 | Wulf Coulmann | 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.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>Wird garkein 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:
|
||||
<literal>pdflatex</literal>), und stellen Sie sicher, dass pdflatex
|
||||
(oder das von Ihnen verwendete System) vom Webserver ausgeführt werden
|
||||
darf.</para>
|
||||
<para>Wenn sich das Problem nicht auf Grund der ausgabe im Webbrowser verifizieren lässt:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para> editiere [kivitendo-home]/config/kivitendo.conf und ändere "keep_tmp_files" auf 1</para>
|
||||
<para><programlisting>keep_temp_files = 1;</programlisting></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>bei fastcgi oder mod_perl den Webserver neu Starten</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Nochmal einen Druckversuch im Webfrontend auslösen</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>wechsele in das users Verzeichnis von kivitendo</para>
|
||||
<para><programlisting>cd [kivitendo-home]/users</programlisting></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>LaTeX Suchpfad anpassen:</para>
|
||||
<para><programlisting>export TEXINPUTS=".:[kivitendo-home]/templates/[aktuelles_template_verzeichniss]:"</programlisting></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Finde herraus welche Datei kivitendo beim letzten Durchlauf erstellt hat</para>
|
||||
<para><programlisting>ls -lahtr ./1*.tex</programlisting></para>
|
||||
<para>Es sollte die letzte Datei ganz unten sein</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>für besseren Hinweis auf Fehler texdatei nochmals übersetzen</para>
|
||||
<para><programlisting>pdflatex ./1*.tex</programlisting></para>
|
||||
<para>in der *.tex datei nach dem Fehler suchen.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | </sect1>
|
||
<sect1 id="OpenDocument-Vorlagen">
|
||||
<title>OpenDocument-Vorlagen</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo unterstützt die Verwendung von Vorlagen im
|
||
7ee506b3 | Moritz Bunkus | OpenDocument-Format, wie es OpenOffice.org ab Version 2 erzeugt.
|
||
5fa26f9a | Moritz Bunkus | kivitendo kann dabei sowohl neue OpenDocument-Dokumente als auch aus
|
||
7ee506b3 | Moritz Bunkus | diesen direkt PDF-Dateien erzeugen. Um die Unterstützung von
|
||
OpenDocument-Vorlagen zu aktivieren muss in der Datei
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf</filename> die Variable
|
||
7ee506b3 | Moritz Bunkus | <literal>opendocument</literal> im Abschnitt
|
||
<literal>print_templates</literal> auf ‘<literal>1</literal>’ stehen.
|
||||
Dieses ist die Standardeinstellung.</para>
|
||||
<para>Während die Erzeugung von reinen OpenDocument-Dateien keinerlei
|
||||
weitere Software benötigt, wird zur Umwandlung dieser Dateien in PDF
|
||||
OpenOffice.org benötigt. Soll dieses Feature genutzt werden, so muss
|
||||
neben OpenOffice.org ab Version 2 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
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf</filename> zwei weitere Variablen
|
||
7ee506b3 | Moritz Bunkus | angepasst werden: <literal>openofficeorg_writer</literal> muss den
|
||
vollständigen Pfad zur OpenOffice.org Writer-Anwendung enthalten.
|
||||
<literal>xvfb</literal> muss den Pfad zum “X virtual frame buffer”
|
||||
enthalten. Beide stehen im Abschnitt
|
||||
<literal>applications</literal>.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Zusätzlich gibt es zwei verschiedene Arten, wie kivitendo mit
|
||
7ee506b3 | Moritz Bunkus | OpenOffice kommuniziert. Die erste Variante, die benutzt wird, wenn die
|
||
Variable <literal>$openofficeorg_daemon</literal> gesetzt ist, startet
|
||||
ein 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 OpenOffice gestartet
|
||||
werden muss. Der Nachteil ist, dass diese Methode Python und die
|
||||
Python-UNO-Bindings benötigt, die Bestandteil von OpenOffice 2
|
||||
sind.</para>
|
||||
1725e45a | Moritz Bunkus | <note>
|
||
<para>
|
||||
Für die Verbindung zu 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
|
||||
festgelegt; sie steht standardmäßig auf dem eben erwähnten Wert <literal>/usr/bin/python</literal>.
|
||||
</para>
|
||||
<para>
|
||||
Zusätzlich ist es möglich, Pfade anzugeben, in denen Python neben seinen normalen Suchpfaden ebenfalls nach Modulen gesucht wird,
|
||||
z.B. falls sich diese in einem gesonderten OpenOffice-Verzeichnis befinden. Diese zweite Variable heißt
|
||||
<literal>python_uno_path</literal> und befindet sich im Abschnitt <literal>environment</literal>. Sie ist standardmäßig
|
||||
leer. Werden hier mehrere Pfade angegeben, so müssen diese durch Doppelpunkte voneinander getrennt werden. Der Inhalt wird an den
|
||||
Python-Interpreter über die Umgebungsvariable <literal>PYTHONPATH</literal> übergeben.
|
||||
</para>
|
||||
</note>
|
||||
7ee506b3 | Moritz Bunkus | <para>Ist <literal>$openofficeorg_daemon</literal> nicht gesetzt, so
|
||
wird für jedes Dokument 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/mastertemplates/German/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.org Writer dem Verzeichnis mit den Benutzereinstellungen
|
||||
gibt. Unter Debian ist dies momentan
|
||||
<literal>~/.openoffice.org2</literal>. Sollte der Name bei Ihrer
|
||||
OpenOffice.org-Installation anders sein, so muss das Verzeichnis
|
||||
<literal>users/.openoffice.org2</literal> entsprechend umbenannt werden.
|
||||
Ist der Name z.B. einfach nur <literal>.openoffice</literal>, so wäre
|
||||
folgender Befehl auszuführen:</para>
|
||||
<para><literal>mv users/.openoffice.org2
|
||||
users/.openoffice</literal></para>
|
||||
<para>Dieses Verzeichnis, wie auch das komplette
|
||||
<literal>users</literal>-Verzeichnis, muss vom Webserver beschreibbar
|
||||
sein. Dieses wurde bereits erledigt (siehe <xref
|
||||
3adb0cb7 | Moritz Bunkus | linkend="Manuelle-Installation-des-Programmpaketes" />), kann aber
|
||
erneut überprüft werden, wenn die Konvertierung nach PDF
|
||||
fehlschlägt.</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect1>
|
||
539f5981 | Moritz Bunkus | <sect1 id="config.eur">
|
||
3adb0cb7 | Moritz Bunkus | <title>Konfiguration zur Einnahmenüberschussrechnung/Bilanzierung:
|
||
EUR</title>
|
||||
539f5981 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="config.eur.introduction"
|
||
xreflabel="Einführung in die Konfiguration zur EUR">
|
||||
<title>Einführung</title>
|
||||
539f5981 | Moritz Bunkus | |||
4bacfb02 | Moritz Bunkus | <para>kivitendo besaß bis inklusive Version 2.6.3 einen Konfigurationsparameter namens <varname>eur</varname>, der sich in der
|
||
Konfigurationsdatei <filename>config/kivitendo.conf</filename> (damals noch <filename>config/lx_office.conf</filename>)
|
||||
befand. Somit galt er für alle Mandanten, die in dieser Installation benutzt wurden.</para>
|
||||
539f5981 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Mit der nachfolgenden Version wurde der Parameter zum Einen in
|
||
die Mandantendatenbank verschoben und dabei auch gleich in drei
|
||||
Einzelparameter aufgeteilt, mit denen sich das Verhalten genauer
|
||||
steuern lässt.</para>
|
||||
539f5981 | Moritz Bunkus | </sect2>
|
||
3adb0cb7 | Moritz Bunkus | <sect2 id="config.eur.parameters"
|
||
xreflabel="Konfigurationsparameter für EUR">
|
||||
<title>Konfigurationsparameter</title>
|
||||
<para>Es gibt drei Parameter, die die Gewinnermittlungsart,
|
||||
Versteuerungsart und die Warenbuchungsmethode regeln:</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><varname>profit_determination</varname></term>
|
||||
<listitem>
|
||||
<para>Dieser Parameter legt die Berechnungsmethode für die
|
||||
Gewinnermittlung fest. Er enthält entweder
|
||||
<literal>balance</literal> für
|
||||
Betriebsvermögensvergleich/Bilanzierung oder
|
||||
<literal>income</literal> für die
|
||||
Einnahmen-Überschuss-Rechnung.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>accounting_method</varname></term>
|
||||
<listitem>
|
||||
<para>Dieser Parameter steuert die Buchungs- und
|
||||
Berechnungsmethoden für die Versteuerungsart. Er enthält
|
||||
entweder <literal>accrual</literal> für die Soll-Versteuerung
|
||||
oder <literal>cash</literal> für die Ist-Versteuerung.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>inventory_system</varname></term>
|
||||
<listitem>
|
||||
<para>Dieser Parameter legt die Warenbuchungsmethode fest. Er
|
||||
enthält entweder <literal>perpetual</literal> für die
|
||||
Bestandsmethode oder <literal>periodic</literal> für die
|
||||
Aufwandsmethode.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
<para>Zum Vergleich der Funktionalität bis und nach 2.6.3:
|
||||
<varname>eur</varname> = 1 bedeutete Einnahmen-Überschuss-Rechnung,
|
||||
Ist-Versteuerung und Aufwandsmethode. <varname>eur</varname> = 0
|
||||
bedeutete hingegen Bilanzierung, Soll-Versteuerung und
|
||||
Bestandsmethode.</para>
|
||||
<para>Die Konfiguration "<varname>eur</varname>" unter
|
||||
<varname>[system]</varname> in der <link
|
||||
linkend="config.config-file">Konfigurationsdatei</link>
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf</filename> wird nun nicht mehr
|
||
3adb0cb7 | Moritz Bunkus | benötigt und kann entfernt werden. Dies muss manuell geschehen.</para>
|
||
539f5981 | Moritz Bunkus | </sect2>
|
||
<sect2 id="config.eur.setting-parameters">
|
||||
3adb0cb7 | Moritz Bunkus | <title>Festlegen der Parameter</title>
|
||
<para>Beim Anlegen eines neuen Mandanten bzw. einer neuen Datenbank in
|
||||
der Admininstration können diese Optionen nun unabhängig voneinander
|
||||
eingestellt werden.</para>
|
||||
<para>Beim Upgrade bestehender Mandanten wird eur ausgelesen und die
|
||||
Variablen werden so gesetzt, daß sich an der Funktionalität nichts
|
||||
ändert.</para>
|
||||
<para>Die aktuelle Konfiguration wird unter Nummernkreise und
|
||||
6c0c0f2c | Bernd Bleßmann | Standardkonten unter dem neuen Punkt "Einstellungen" (read-only)
|
||
angezeigt. Unter <guimenu>System</guimenu>
|
||||
-> <guisubmenu>Mandantenkonfiguration</guisubmenu> können
|
||||
die Einstellungen auch geändert werden. Dabei ist zu beachten,
|
||||
dass eine Änderung vorhandene Daten so belässt und damit
|
||||
evtl. die Ergebnisse verfälscht. Dies gilt vor Allem für die
|
||||
Warenbuchungsmethode (siehe auch
|
||||
<link linkend="config.eur.inventory-system-perpetual">
|
||||
Bemerkungen zu Bestandsmethode</link>).</para>
|
||||
539f5981 | Moritz Bunkus | </sect2>
|
||
<sect2 id="config.eur.inventory-system-perpetual">
|
||||
3adb0cb7 | Moritz Bunkus | <title>Bemerkungen zu Bestandsmethode</title>
|
||
<para>Die Bestandsmethode ist eigentlich eine sehr elegante Methode,
|
||||
5fa26f9a | Moritz Bunkus | funktioniert in kivitendo aber nur unter bestimmten Bedingungen:
|
||
3adb0cb7 | Moritz Bunkus | Voraussetzung ist, daß auch immer alle Einkaufsrechnungen gepflegt
|
||
werden, und man beim Jahreswechsel nicht mit einer leeren Datenbank
|
||||
anfängt, da bei jedem Verkauf anhand der gesamten Rechnungshistorie
|
||||
der Einkaufswert der Ware nach dem FIFO-Prinzip aus den
|
||||
Einkaufsrechnungen berechnet wird.</para>
|
||||
<para>Die Bestandsmethode kann vom Prinzip her also nur funktioneren,
|
||||
wenn man mit den Buchungen bei Null anfängt, und man kann auch nicht
|
||||
im laufenden Betrieb von der Aufwandsmethode zur Bestandsmethode
|
||||
wechseln.</para>
|
||||
539f5981 | Moritz Bunkus | </sect2>
|
||
<sect2 id="config.eur.knonw-issues">
|
||||
3adb0cb7 | Moritz Bunkus | <title>Bekannte Probleme</title>
|
||
539f5981 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Bei bestimmten Berichten kann man derzeit noch inviduell
|
||
einstellen, ob man nach Ist- oder Sollversteuerung auswertet, und es
|
||||
werden im Code Variablen wie $accrual oder $cash gesetzt. Diese
|
||||
Codestellen wurden noch nicht angepasst, sondern nur die, wo bisher
|
||||
die Konfigurationsvariable
|
||||
<varname>$::lx_office_conf{system}->{eur}</varname> ausgewertet
|
||||
wurde.</para>
|
||||
539f5981 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Es fehlen Hilfetext beim Neuanlegen eines Mandanten, was die
|
||
Optionen bewirken, z.B. mit zwei Standardfällen.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1 id="config.skr04-update-3804">
|
||||
<title>SKR04 19% Umstellung für innergemeinschaftlichen Erwerb</title>
|
||||
<sect2 id="config.skr04-update-3804.introduction">
|
||||
<title>Einführung</title>
|
||||
<para>Die Umsatzsteuerumstellung auf 19% für SKR04 für die
|
||||
Steuerschlüssel "EU ohne USt-ID Nummer" ist erst 2010 erfolgt.
|
||||
5fa26f9a | Moritz Bunkus | kivitendo beinhaltet ein Upgradeskript, das das Konto 3804 automatisch
|
||
3adb0cb7 | Moritz Bunkus | erstellt und die Steuereinstellungen korrekt einstellt. Hat der
|
||
Benutzer aber schon selber das Konto 3804 angelegt, oder gab es schon
|
||||
Buchungen im Zeitraum nach dem 01.01.2007 auf das Konto 3803, wird das
|
||||
Upgradeskript vorsichtshalber nicht ausgeführt, da der Benutzer sich
|
||||
vielleicht schon selbst geholfen hat und mit seinen Änderungen
|
||||
zufrieden ist. Die korrekten Einstellungen kann man aber auch per Hand
|
||||
ausführen. Nachfolgend werden die entsprechenden Schritte anhand von
|
||||
Screenshots dargestellt.</para>
|
||||
<para>Für den Fall, daß Buchungen mit der Steuerschlüssel "EU ohne
|
||||
USt.-IdNr." nach dem 01.01.2007 erfolgt sind, ist davon auszugehen,
|
||||
dass diese mit dem alten Umsatzsteuersatz von 16% gebucht worden sind,
|
||||
und diese Buchungen sollten entsprechend kontrolliert werden.</para>
|
||||
</sect2>
|
||||
<sect2 id="config.skr04-update-3804.create-chart">
|
||||
<title>Konto 3804 manuell anlegen</title>
|
||||
<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>
|
||||
<screenshot>
|
||||
<screeninfo>Konto 3804 erfassen</screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="images/skr04-update-3804/konto3804.png" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</screenshot>
|
||||
<para>
|
||||
Als Zweites muss Steuergruppe 13 für Konto 3803 angepasst werden. Dazu unter <guimenu>System</guimenu> ->
|
||||
<guisubmenu>Steuern</guisubmenu> -> <guimenuitem>Bearbeiten</guimenuitem> den Eintrag mit Steuerschlüssel 13 auswählen und ihn
|
||||
wie im folgenden Screenshot angezeigt anpassen.
|
||||
</para>
|
||||
<screenshot>
|
||||
<screeninfo>Steuerschlüssel 13 für 3803 (16%) anpassen</screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="images/skr04-update-3804/steuer3803.png" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</screenshot>
|
||||
<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>
|
||||
<screenshot>
|
||||
<screeninfo>Steuerschlüssel 13 für 3804 (19%) anlegen</screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="images/skr04-update-3804/steuer3804.png" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</screenshot>
|
||||
<para>
|
||||
Als Nächstes sind alle Konten anzupassen, die als Steuerautomatikkonto die 3803 haben, sodass sie ab dem 1.1.2007 auch
|
||||
Steuerautomatik auf 3804 bekommen. Dies betrifft in der Standardkonfiguration die Konten 4315 und 4726. Als Beispiel für 4315
|
||||
müssen Sie dazu unter <guimenu>System</guimenu> -> <guisubmenu>Kontenübersicht</guisubmenu> -> <guimenuitem>Konten
|
||||
anzeigen</guimenuitem> das Konto 4315 anklicken und die Einstellungen wie im Screenshot gezeigt vornehmen.
|
||||
</para>
|
||||
<screenshot>
|
||||
<screeninfo>Konto 4315 anpassen</screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="images/skr04-update-3804/konto4315.png" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</screenshot>
|
||||
<para>
|
||||
Als Letztes sollte die Steuerliste unter <guimenu>System</guimenu> -> <guisubmenu>Steuern</guisubmenu> ->
|
||||
<guimenuitem>Bearbeiten</guimenuitem> kontrolliert werden. Zum Vergleich der Screenshot.
|
||||
</para>
|
||||
<screenshot>
|
||||
<screeninfo>Steuerliste vergleichen</screeninfo>
|
||||
<mediaobject>
|
||||
<imageobject>
|
||||
<imagedata fileref="images/skr04-update-3804/steuerliste.png" />
|
||||
</imageobject>
|
||||
</mediaobject>
|
||||
</screenshot>
|
||||
539f5981 | Moritz Bunkus | </sect2>
|
||
</sect1>
|
||||
6c0c0f2c | Bernd Bleßmann | <sect1 id="config.client">
|
||
<title>Einstellungen pro Mandant</title>
|
||||
<para>Einige Einstellungen können von einem Benutzer mit dem
|
||||
<link linkend="Zusammenhänge">Recht</link> "Administration
|
||||
(Für die Verwaltung der aktuellen Instanz aus einem Userlogin heraus)"
|
||||
gemacht werden. Diese Einstellungen sind dann für die aktuellen
|
||||
Mandanten-Datenbank gültig. Die Einstellungen sind
|
||||
unter <guimenu>System</guimenu>
|
||||
-> <guisubmenu>Mandantenkonfiguration</guisubmenu> erreichbar.</para>
|
||||
<para>Bitte beachten Sie die Hinweise zu den einzelnen
|
||||
Einstellungen. Einige Einstellungen sollten nicht ohne Weiteres
|
||||
im laufenden Betrieb geändert werden (siehe
|
||||
auch <link linkend="config.eur.inventory-system-perpetual">Bemerkungen zu
|
||||
Bestandsmethode</link>).</para>
|
||||
<para>Die Einstellungen <literal>show_bestbefore</literal>
|
||||
und <literal>payments_changeable</literal> aus dem
|
||||
Abschnitt <literal>features</literal> und die Einstellungen im
|
||||
Abschnitt <literal>datev_check</literal> (sofern schon vorhanden)
|
||||
der <link linkend="config.config-file">kivitendo-Konfigurationsdatei</link>
|
||||
werden bei einem Datenbankupdate einer älteren Version automatisch
|
||||
übernommen. Diese Einträge können danach aus der Konfigurationsdatei
|
||||
entfernt werden.</para>
|
||||
</sect1>
|
||||
5fa26f9a | Moritz Bunkus | <sect1 id="kivitendo-ERP-verwenden">
|
||
<title>kivitendo ERP verwenden</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
<para>Nach erfolgreicher Installation ist der Loginbildschirm unter
|
||||
folgender URL erreichbar:</para>
|
||||
<para><ulink
|
||||
5fa26f9a | Moritz Bunkus | url="http://localhost/kivitendo-erp/login.pl">http://localhost/kivitendo-erp/login.pl</ulink></para>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Die Administrationsseite erreichen Sie unter:</para>
|
||||
<para><ulink
|
||||
854c9a62 | Moritz Bunkus | url="http://localhost/kivitendo-erp/controller.pl?action=Admin/login">http://localhost/kivitendo-erp/controller.pl?action=Admin/login</ulink></para>
|
||
7ee506b3 | Moritz Bunkus | </sect1>
|
||
</chapter>
|
||||
90baed86 | Moritz Bunkus | <chapter id="features" xreflabel="Features und Funktionen">
|
||
6023717e | Moritz Bunkus | <title>Features und Funktionen</title>
|
||
3adb0cb7 | Moritz Bunkus | <sect1 id="features.periodic-invoices"
|
||
xreflabel="Wiedekehrende Rechnungen">
|
||||
<title>Wiederkehrende Rechnungen</title>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="features.periodic-invoices.introduction"
|
||
xreflabel="Einführung in wiederkehrende Rechnungen">
|
||||
<title>Einführung</title>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Wiederkehrende Rechnungen werden als normale Aufträge definiert
|
||
und konfiguriert, mit allen dazugehörigen Kunden- und Artikelangaben.
|
||||
Die konfigurierten Aufträge werden später automatisch in Rechnungen
|
||||
umgewandelt, so als ob man den Workflow benutzen würde, und auch die
|
||||
Auftragsnummer wird übernommen, sodass alle wiederkehrenden
|
||||
Rechnungen, die aus einem Auftrag erstellt wurden, später leicht
|
||||
wiederzufinden sind.</para>
|
||||
</sect2>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="features.periodic-invoices.configuration"
|
||
xreflabel="Konfiguration von wiederkehrenden Rechnungen">
|
||||
<title>Konfiguration</title>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Um einen Auftrag für wiederkehrende Rechnung zu konfigurieren,
|
||
findet sich beim Bearbeiten des Auftrags ein neuer Knopf
|
||||
"Konfigurieren", der ein neues Fenster öffnet, in dem man die nötigen
|
||||
Parameter einstellen kann. Hinter dem Knopf wird außerdem noch
|
||||
angezeigt, ob der Auftrag als wiederkehrende Rechnung konfiguriert ist
|
||||
oder nicht.</para>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Folgende Parameter kann man konfigurieren:</para>
|
||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <variablelist>
|
||
<varlistentry>
|
||||
<term>Status</term>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Bei aktiven Rechnungen wird automatisch eine Rechnung
|
||||
erstellt, wenn die Periodizität erreicht ist (z.B. Anfang eines
|
||||
neuen Monats).</para>
|
||||
<para>Ist ein Auftrag nicht aktiv, so werden für ihn auch keine
|
||||
wiederkehrenden Rechnungen erzeugt. Stellt man nach längerer
|
||||
nicht-aktiver Zeit einen Auftrag wieder auf aktiv, wird beim
|
||||
nächsten Periodenwechsel für alle Perioden, seit der letzten
|
||||
aktiven Periode, jeweils eine Rechnung erstellt. Möchte man dies
|
||||
verhindern, muss man vorher das Startdatum neu setzen.</para>
|
||||
<para>Für gekündigte Aufträge werden nie mehr Rechnungen
|
||||
erstellt. Man kann sich diese Aufträge aber gesondert in den
|
||||
Berichten anzeigen lassen.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term>Periodizität</term>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Ob monatlich, quartalsweise oder jährlich auf neue
|
||||
Rechnungen überprüft werden soll. Für jede Periode seit dem
|
||||
Startdatum wird überprüft, ob für die Periode (beginnend immer
|
||||
mit dem ersten Tag der Periode) schon eine Rechnung erstellt
|
||||
wurde. Unter Umständen können bei einem Startdatum in der
|
||||
Vergangenheit gleich mehrere Rechnungen erstellt werden.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term>Buchen auf</term>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Das Forderungskonto, in der Regel "Forderungen aus
|
||||
Lieferungen und Leistungen". Das Gegenkonto ergibt sich aus den
|
||||
Buchungsgruppen der betreffenden Waren.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term>Startdatum</term>
|
||||
6023717e | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>ab welchem Datum auf Rechnungserstellung geprüft werden
|
||||
soll</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Enddatum</term>
|
||||
<listitem>
|
||||
<para>ab wann keine Rechnungen mehr erstellt werden
|
||||
sollen</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Automatische Verlängerung um x Monate</term>
|
||||
<listitem>
|
||||
<para>Sollen die wiederkehrenden Rechnungen bei Erreichen des
|
||||
eingetragenen Enddatums weiterhin erstellt werden, so kann man
|
||||
hier die Anzahl der Monate eingeben, um die das Enddatum
|
||||
automatisch nach hinten geschoben wird.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Drucken</term>
|
||||
<listitem>
|
||||
<para>Sind Drucker konfiguriert, so kann man sich die erstellten
|
||||
Rechnungen auch gleich ausdrucken lassen.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
<para>Nach Erstellung der Rechnungen kann eine E-Mail mit
|
||||
Informationen zu den erstellten Rechnungen verschickt werden.
|
||||
Konfiguriert wird dies in der <link
|
||||
linkend="config.config-file.sections-parameters">Konfigurationsdatei</link>
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf</filename> im Abschnitt
|
||
3adb0cb7 | Moritz Bunkus | <varname>[periodic_invoices]</varname>.</para>
|
||
</sect2>
|
||||
2bc66c62 | Moritz Bunkus | <sect2 id="features.periodic-invoices.variables">
|
||
<title>Spezielle Variablen</title>
|
||||
<para>
|
||||
Um die erzeugten Rechnungen individualisieren zu können, werden beim Umwandeln des Auftrags in eine Rechnung einige speziell
|
||||
formatierte Variablen durch für die jeweils aktuelle Abrechnungsperiode gültigen Werte ersetzt. Damit ist es möglich, z.B. den
|
||||
Abrechnungszeitraum explizit auszuweisen. Eine Variable hat dabei die Syntax <literal><%variablenname%></literal>.
|
||||
</para>
|
||||
<para>
|
||||
Diese Variablen werden in den folgenden Elementen des Auftrags ersetzt:
|
||||
</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>Bemerkungen</para></listitem>
|
||||
<listitem><para>Interne Bemerkungen</para></listitem>
|
||||
<listitem><para>Vorgangsbezeichnung</para></listitem>
|
||||
<listitem><para>In den Beschreibungs- und Langtextfeldern aller Positionen</para></listitem>
|
||||
</itemizedlist>
|
||||
<para>Die zur Verfügung stehenden Variablen sind die Folgenden:</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><varname><%current_quarter%></varname>, <varname><%previous_quarter%></varname>, <varname><%next_quarter%></varname></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Aktuelles, vorheriges und nächstes Quartal als Zahl zwischen <literal>1</literal> und <literal>4</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname><%current_month%></varname>, <varname><%previous_month%></varname>, <varname><%next_month%></varname></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Aktueller, vorheriger und nächster Monat als Zahl zwischen <literal>1</literal> und <literal>12</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname><%current_month_long%></varname>, <varname><%previous_month_long%></varname>, <varname><%next_month_long%></varname></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Aktueller, vorheriger und nächster Monat als Name (<literal>Januar</literal>, <literal>Februar</literal> etc.).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname><%current_year%></varname>, <varname><%previous_year%></varname>, <varname><%next_year%></varname></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Aktuelles, vorheriges und nächstes Jahr als vierstellige Jahreszahl (<literal>2013</literal> etc.).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname><%period_start_date%></varname>, <varname><%period_end_date%></varname></term>
|
||||
<listitem>
|
||||
<para>
|
||||
Formatiertes Datum des ersten und letzten Tages im Abrechnungszeitraum (z.B. bei quartalsweiser Abrechnung und im ersten
|
||||
Quartal von 2013 wären dies der <literal>01.01.2013</literal> und <literal>31.03.2013</literal>).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect2>
|
||||
3adb0cb7 | Moritz Bunkus | <sect2 id="features.periodic-invoices.reports">
|
||
<title>Auflisten</title>
|
||||
<para>Unter Verkauf->Berichte->Aufträge finden sich zwei neue
|
||||
Checkboxen, "Wiederkehrende Rechnungen aktiv" und "Wiederkehrende
|
||||
Rechnungen inaktiv", mit denen man sich einen Überglick über die
|
||||
wiederkehrenden Rechnungen verschaffen kann.</para>
|
||||
</sect2>
|
||||
<sect2 id="features.periodic-invoices.task-server">
|
||||
<title>Erzeugung der eigentlichen Rechnungen</title>
|
||||
<para>Die zeitliche und periodische Überprüfung, ob eine
|
||||
wiederkehrende Rechnung automatisch erstellt werden soll, geschieht
|
||||
durch den <link linkend="config.task-server">Taskserver</link>, einen
|
||||
externen Dienst, der automatisch beim Start des Servers gestartet
|
||||
werden sollte.</para>
|
||||
</sect2>
|
||||
<sect2 id="features.periodic-invoices.create-for-current-month">
|
||||
<title>Erste Rechnung für aktuellen Monat erstellen</title>
|
||||
<para>Will man im laufenden Monat eine monatlich wiederkehrende
|
||||
Rechnung inkl. des laufenden Monats starten, stellt man das Startdatum
|
||||
auf den Monatsanfang und wartet ein paar Minuten, bis der Taskserver
|
||||
den neu konfigurieren Auftrag erkennt und daraus eine Rechnung
|
||||
generiert hat. Alternativ setzt man das Startdatum auf den
|
||||
Monatsersten des Folgemonats und erstellt die erste Rechnung direkt
|
||||
manuell über den Workflow.</para>
|
||||
</sect2>
|
||||
6023717e | Moritz Bunkus | </sect1>
|
||
90baed86 | Moritz Bunkus | <sect1 id="dokumentenvorlagen-und-variablen">
|
||
<title>Dokumentenvorlagen und verfügbare Variablen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect2 id="dokumentenvorlagen-und-variablen.einführung">
|
||
<title>Einführung</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Dies ist eine Auflistung der Standard-Dokumentenvorlagen und
|
||
aller zur Bearbeitung verfügbaren Variablen. Eine Variable wird in
|
||||
einer Vorlage durch ihren Inhalt ersetzt, wenn sie in der Form
|
||||
<function><%variablenname%></function> verwendet wird. Für
|
||||
LaTeX- und HTML-Vorlagen kann man die Form dieser Tags auch verändern
|
||||
(siehe <xref
|
||||
3adb0cb7 | Moritz Bunkus | linkend="dokumentenvorlagen-und-variablen.tag-style" />).</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Früher wurde hier nur über LaTeX gesprochen. Inzwischen
|
||
5fa26f9a | Moritz Bunkus | unterstützt kivitendo aber auch OpenDocument-Vorlagen. Sofern es nicht
|
||
90baed86 | Moritz Bunkus | ausdrücklich eingeschränkt wird, gilt das im Folgenden gesagte für
|
||
alle Vorlagenarten.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Insgesamt sind technisch gesehen eine ganze Menge mehr Variablen
|
||
verfügbar als hier aufgelistet werden. Die meisten davon können
|
||||
allerdings innerhalb einer solchen Vorlage nicht sinnvoll verwendet
|
||||
werden. Wenn eine Auflistung dieser Variablen gewollt ist, so kann
|
||||
diese wie folgt erhalten werden:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><filename>SL/Form.pm</filename> öffnen und am Anfang die
|
||||
Zeile "<command>use Data::Dumper;</command>" einfügen.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>In <filename>Form.pm</filename> die Funktion
|
||||
<function>parse_template</function> suchen und hier die Zeile
|
||||
<command>print(STDERR Dumper($self));</command> einfügen.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Einmal per Browser die gewünschte Vorlage "benutzen", z.B.
|
||||
ein PDF für eine Rechnung erzeugen.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Im <filename>error.log</filename> Apache steht die Ausgabe
|
||||
der Variablen <varname>$self</varname> in der Form <varname>'key'
|
||||
=> 'value',</varname>. Alle <varname>key</varname>s sind
|
||||
verfügbar.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
<sect2 id="dokumentenvorlagen-und-variablen.variablen-ausgeben">
|
||||
<title>Variablen ausgeben</title>
|
||||
<para>Um eine Variable auszugeben, müssen sie einfach nur zwischen die
|
||||
Tags geschrieben werden, also z.B.
|
||||
<varname><%variablenname%></varname>.</para>
|
||||
<para>Optional kann man auch mit Leerzeichen getrennte Flags angeben,
|
||||
die man aber nur selten brauchen wird. Die Syntax sieht also so aus:
|
||||
<varname><%variablenname FLAG1 FLAG2%></varname>. Momentan
|
||||
werden die folgenden Flags unterstützt:</para>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><option>NOFORMAT</option> gilt nur für Zahlenwerte und gibt
|
||||
den Wert ohne Formatierung, also ohne Tausendertrennzeichen mit
|
||||
mit einem Punkt als Dezimaltrennzeichen aus. Nützlich z.B., wenn
|
||||
damit in der Vorlage z.B. von LaTeX gerechnet werden soll.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><option>NOESCAPE</option> unterdrückt das Escapen von
|
||||
Sonderzeichen für die Vorlagensprache. Wenn also in einer
|
||||
Variablen bereits gültiger LaTeX-Code steht und dieser von LaTeX
|
||||
auch ausgewertet und nicht wortwörtlich angezeigt werden soll, so
|
||||
ist dieses Flag sinnvoll.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
<para>Beispiel:</para>
|
||||
<programlisting><%quototal NOFORMAT%></programlisting>
|
||||
</sect2>
|
||||
<sect2 id="dokumentenvorlagen-und-variablen.verwendung-in-druckbefehlen">
|
||||
<title>Verwendung in Druckbefehlen</title>
|
||||
<para>In der Admininstration können Drucker definiert werden. Auch im
|
||||
dort eingebbaren Druckbefehl können die hier aufgelisteten Variablen
|
||||
und Kontrollstrukturen verwendet werden. Ihr Inhalt wird dabei nach
|
||||
den Regeln der gängigen Shells formatiert, sodass Sonderzeichen wie
|
||||
<function>`...`</function> nicht zu unerwünschtem Verhalten
|
||||
führen.</para>
|
||||
<para>Dies erlaubt z.B. die Definition eines Faxes als Druckerbefehl,
|
||||
für das die Telefonnummer eines Ansprechpartners als Teil der
|
||||
Kommandozeile verwendet wird. Für ein fiktives Kommando könnte das
|
||||
z.B. wie folgt aussehen:</para>
|
||||
<programlisting>send_fax --number <%if cp_phone2%><%cp_phone2%><%else%><%cp_phone1%><%end%></programlisting>
|
||||
</sect2>
|
||||
<sect2 id="dokumentenvorlagen-und-variablen.tag-style"
|
||||
xreflabel="Anfang und Ende der Tags verändern">
|
||||
<title>Anfang und Ende der Tags verändern</title>
|
||||
<para>Der Standardstil für Tags sieht vor, dass ein Tag mit dem
|
||||
Kleinerzeichen und einem Prozentzeichen beginnt und mit dem
|
||||
Prozentzeichen und dem Größerzeichen endet, beispielsweise
|
||||
<function><%customer%></function>. Da diese Form aber z.B. in
|
||||
LaTeX zu Problemen führen kann, weil das Prozentzeichen dort
|
||||
Kommentare einleitet, kann pro HTML- oder LaTeX-Dokumentenvorlage der
|
||||
Stil umgestellt werden.</para>
|
||||
<para>Dazu werden in die Datei Zeilen geschrieben, die mit dem für das
|
||||
Format gültigen Kommentarzeichen anfangen, dann
|
||||
<function>config:</function> enthalten, die entsprechende Option
|
||||
setzen und bei HTML-Dokumentenvorlagen mit dem Kommentarendzeichen
|
||||
enden. Beispiel für LaTeX:</para>
|
||||
<programlisting>% config: tag-style=($ $)</programlisting>
|
||||
5fa26f9a | Moritz Bunkus | <para>Dies würde kivitendo dazu veranlassen, Variablen zu ersetzen,
|
||
90baed86 | Moritz Bunkus | wenn sie wie folgt aussehen: <function>($customer$)</function>. Das
|
||
äquivalente Beispiel für HTML-Dokumentenvorlagen sieht so aus:</para>
|
||||
<programlisting><!-- config: tag-style=($ $) --></programlisting>
|
||||
</sect2>
|
||||
<sect2 id="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">
|
||||
<title>Zuordnung von den Dateinamen zu den Funktionen</title>
|
||||
<para>Diese folgende kurze Auflistung zeigt, welche Vorlage bei
|
||||
welcher Funktion ausgelesen wird. Dabei ist die Dateiendung
|
||||
"<filename>.ext</filename>" geeignet zu ersetzen:
|
||||
"<filename>.tex</filename>" für LaTeX-Vorlagen und
|
||||
"<filename>.odt</filename>" für OpenDocument-Vorlagen.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<variablelist>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><filename>bin_list.ext</filename></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lagerliste</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><filename>check.ext</filename></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>?</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><filename>invoice.ext</filename></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><filename>packing_list.ext</filename></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Packliste</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><filename>pick_list.ext</filename></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Sammelliste</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><filename>purchase_delivery_order.ext</filename></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferschein (Einkauf)</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><filename>purcharse_order.ext</filename></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Bestellung an Lieferanten</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><filename>request_quotation.ext</filename></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Anfrage an Lieferanten</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><filename>sales_delivery_order.ext</filename></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Lieferschein (Verkauf)</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><filename>sales_order.ext</filename></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Bestellung</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><filename>sales_quotation.ext</filename></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Angebot an Kunden</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><filename>zahlungserinnerung.ext</filename></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Mahnung (Dateiname im Programm konfigurierbar)</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><filename>zahlungserinnerung_invoice.ext</filename></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Rechnung über Mahngebühren (Dateiname im Programm
|
||||
konfigurierbar)</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect2>
|
||||
<sect2 id="dokumentenvorlagen-und-variablen.dateinamen-erweitert">
|
||||
<title>Sprache, Drucker und E-Mail</title>
|
||||
<para>Angeforderte Sprache und Druckerkürzel in den Dateinamen mit
|
||||
eingearbeitet. So wird aus der Vorlage
|
||||
<filename>sales_order.ext</filename> bei Sprache
|
||||
<function>de</function> und Druckerkürzel <function>lpr2</function>
|
||||
der Vorlagenname <filename>sales_order_de_lpr2.ext</filename>.
|
||||
Zusätzlich können für E-Mails andere Vorlagen erstellt werden, diese
|
||||
bekommen dann noch das Kürzel <filename>_email</filename>, der
|
||||
vollständige Vorlagenname wäre dann
|
||||
<filename>sales_order_email_de_lpr2.ext</filename>. In allen Fällen
|
||||
kann eine Standarddatei <filename>default.ext</filename> hinterlegt
|
||||
werden. Diese wird verwendet, wenn keine der anderen Varianten
|
||||
gefunden wird.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Die vollständige Suchreihenfolge für einen Verkaufsauftrag mit
|
||
der Sprache "de" und dem Drucker "lpr2", der per E-Mail im Format PDF
|
||||
verschickt wird, ist:</para>
|
||||
<orderedlist>
|
||||
7ee506b3 | Moritz Bunkus | <listitem>
|
||
90baed86 | Moritz Bunkus | <para><filename>sales_order_email_de_lpr2.tex</filename></para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para><filename>sales_order_de_lpr2.tex</filename></para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para><filename>sales_order.tex</filename></para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para><filename>default.tex</filename></para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
90baed86 | Moritz Bunkus | </orderedlist>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Die kurzen Varianten dieser Vorlagentitel müssen dann entweder
|
||
Standardwerte anzeigen, oder die angeforderten Werte selbst auswerten,
|
||||
siehe dazu <xref
|
||||
3adb0cb7 | Moritz Bunkus | linkend="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta" />.</para>
|
||
90baed86 | Moritz Bunkus | </sect2>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect2 id="dokumentenvorlagen-und-variablen.allgemeine-variablen">
|
||
<title>Allgemeine Variablen, die in allen Vorlagen vorhanden
|
||||
sind</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.meta"
|
||
xreflabel="Metainformationen zur angeforderten Vorlage">
|
||||
<title>Metainformationen zur angeforderten Vorlage</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Diese Variablen liefern Informationen darüber welche Variante
|
||
einer Vorlage der Benutzer angefragt hat. Sie sind nützlich für
|
||||
Vorlagenautoren, die aus einer zentralen Layoutvorlage die einzelnen
|
||||
Formulare einbinden möchten.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
<varlistentry>
|
||||
<term><varname>template_meta.formname</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Basisname der Vorlage. Identisch mit der <link
|
||||
linkend="dokumentenvorlagen-und-variablen.zuordnung-dateinamen">Zurordnung
|
||||
zu den Dateinamen</link> ohne die Erweiterung. Ein
|
||||
Verkaufsauftrag enthält hier
|
||||
<constant>sales_order</constant>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.language.description</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Beschreibung der verwendeten Sprache</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.language.template_code</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Vorlagenürzel der verwendeten Sprache, identisch mit dem
|
||||
Kürzel das im Dateinamen verwendetet wird.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.language.output_numberformat</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Zahlenformat der verwendeten Sprache in der Form
|
||||
"<constant>1.000,00</constant>". Experimentell! Nur
|
||||
interessant für Vorlagen die mit unformatierten Werten
|
||||
arbeiten.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.language.output_dateformat</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Datumsformat der verwendeten Sprache in der Form
|
||||
"<constant>dd.mm.yyyy</constant>". Experimentell! Nur
|
||||
interessant für Vorlagen die mit unformatierten Werten
|
||||
arbeiten.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.format</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Das angeforderte Format. Kann im Moment die Werte
|
||||
<constant>pdf</constant>, <constant>postscript</constant>,
|
||||
<constant>html</constant>, <constant>opendocument</constant>,
|
||||
<constant>opendocument_pdf</constant> und
|
||||
<constant>excel</constant> enthalten.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.extension</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Dateierweiterung, wie im Dateinamen. Wird aus
|
||||
<constant>format</constant> entschieden.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.media</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Ausgabemedium. Kann zur Zeit die Werte
|
||||
<constant>screen</constant> für Bildschirm,
|
||||
<constant>email</constant> für E-Mmail (triggert das
|
||||
<constant>_email</constant> Kürzel im Dateinamen),
|
||||
<constant>printer</constant> für Drucker, und
|
||||
<constant>queue</constant> für Warteschlange enthalten.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.printer.description</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Beschreibung des ausgewählten Druckers</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>template_meta.printer.template_code</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Vorlagenürzel des ausgewählten Druckers, identisch mit
|
||||
dem Kürzel das im Dateinamen verwendetet wird.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
d7acc048 | Wulf Coulmann | |||
<varlistentry>
|
||||
<term><varname>template_meta.tmpfile</varname></term>
|
||||
<listitem>
|
||||
<para>Datei-Prefix für temporäre Dateien.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.allgemeine-variablen.kunden-lieferanten">
|
||
<title>Stammdaten von Kunden und Lieferanten</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
<varlistentry>
|
||||
<term><varname>account_number</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Kontonummer</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>bank</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Name der Bank</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>bank_code</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Bankleitzahl</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>bic</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Bank-Identifikations-Code (Bank Identifier Code,
|
||||
BIC)</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>business</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Kunden-/Lieferantentyp</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>city</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Stadt</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>contact</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Kontakt</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>country</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Land</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
512bdfe4 | Wulf Coulmann | <varlistentry>
|
||
<term><varname>c_vendor_id</varname></term>
|
||||
<listitem>
|
||||
<para>Lieferantennummer beim Kunden (nur Kunden)</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>v_customer_id</varname></term>
|
||||
<listitem>
|
||||
<para>Kundennummer beim Lieferanten (nur Lieferanten)</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>cp_email</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Email des Ansprechpartners</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>cp_givenname</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Vorname des Ansprechpartners</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>cp_greeting</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Anrede des Ansprechpartners</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>cp_name</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Name des Ansprechpartners</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>cp_phone1</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Telefonnummer 1 des Ansprechpartners</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>cp_phone2</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Telefonnummer 2 des Ansprechpartners</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>cp_title</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Titel des Ansprechpartners</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>creditlimit</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Kreditlimit</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>customeremail</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Email des Kunden; nur für Kunden</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>customerfax</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Faxnummer des Kunden; nur für Kunden</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>customernotes</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Bemerkungen beim Kunden; nur für Kunden</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>customernumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Kundennummer; nur für Kunden</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>customerphone</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Telefonnummer des Kunden; nur für Kunden</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>discount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rabatt</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>email</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Emailadresse</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>fax</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Faxnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>homepage</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Homepage</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>iban</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Internationale Kontonummer (International Bank Account
|
||
Number, IBAN)</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>language</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Sprache</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>name</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Firmenname</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>payment_description</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Name der Zahlart</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>payment_terms</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zahlungskonditionen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>phone</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Telefonnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptocity</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Stadt (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptocontact</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Kontakt (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptocountry</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Land (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptodepartment1</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Abteilung 1 (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptodepartment2</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Abteilung 2 (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptoemail</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Email (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptofax</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Fax (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptoname</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Firmenname (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptophone</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Telefonnummer (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptostreet</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Straße und Hausnummer (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shiptozipcode</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Postleitzahl (Lieferadresse) <link
|
||
linkend="dokumentenvorlagen-und-variablen.anmerkung-shipto">*</link></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>street</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Straße und Hausnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>taxnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Steuernummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>ustid</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Umsatzsteuer-Identifikationsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>vendoremail</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Email des Lieferanten; nur für Lieferanten</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>vendorfax</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Faxnummer des Lieferanten; nur für Lieferanten</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>vendornotes</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Bemerkungen beim Lieferanten; nur für Lieferanten</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>vendornumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferantennummer; nur für Lieferanten</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>vendorphone</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Telefonnummer des Lieferanten; nur für
|
||
Lieferanten</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>zipcode</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Postleitzahl</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <note id="dokumentenvorlagen-und-variablen.anmerkung-shipto">
|
||
<para>Anmerkung: Sind die <varname>shipto*</varname>-Felder in den
|
||||
Stammdaten nicht eingetragen, so haben die Variablen
|
||||
<varname>shipto*</varname> den gleichen Wert wie die die
|
||||
entsprechenden Variablen der Lieferdaten. Das bedeutet, dass sich
|
||||
einige <varname>shipto*</varname>-Variablen so nicht in den
|
||||
Stammdaten wiederfinden sondern schlicht Kopien der
|
||||
Lieferdatenvariablen sind (z.B.
|
||||
<varname>shiptocontact</varname>).</para>
|
||||
</note>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.allgemein-bearbeiter">
|
||
<title>Informationen über den Bearbeiter</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>employee_address</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Adressfeld</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_businessnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Firmennummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_company</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Firmenname</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_co_ustid</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Usatzsteuer-Identifikationsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_duns</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>DUNS-Nummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_email</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Email</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_fax</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Fax</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_name</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>voller Name</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_signature</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Signatur</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_taxnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Steuernummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>employee_tel</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Telefonnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.allgemein-verkaeufer">
|
||
<title>Informationen über den Bearbeiter</title>
|
||||
<variablelist>
|
||||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>salesman_address</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Adressfeld</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_businessnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Firmennummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_company</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Firmenname</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_co_ustid</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Usatzsteuer-Identifikationsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_duns</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>DUNS-Nummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_email</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Email</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_fax</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Fax</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_name</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>voller Name</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_signature</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Signatur</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_taxnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
<para>Steuernummer</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>salesman_tel</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Telefonnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.allgemein-steuern">
|
||||
<title>Variablen für die einzelnen Steuern</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>tax</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Steuer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>taxbase</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>zu versteuernder Betrag</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>taxdescription</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Name der Steuer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>taxrate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Steuersatz</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
</sect2>
|
||||
<sect2 id="dokumentenvorlagen-und-variablen.invoice">
|
||||
<title>Variablen in Rechnungen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.invoice-allgemein">
|
||
<title>Allgemeine Variablen</title>
|
||||
<variablelist>
|
||||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>creditremaining</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Verbleibender Kredit</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>currency</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Währung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>cusordnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Bestellnummer beim Kunden</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>deliverydate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>duedate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Fälligkeitsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>globalprojectnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Projektnummer des ganzen Beleges</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>globalprojectdescription</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Projekbeschreibung des ganzen Beleges</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>intnotes</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Interne Bemerkungen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>invdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>invnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>invtotal</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>gesamter Rechnungsbetrag</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>notes</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Bemerkungen der Rechnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>orddate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Auftragsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>ordnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Auftragsnummer, wenn die Rechnung aus einem Auftrag
|
||
erstellt wurde</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>payment_description</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Name der Zahlart</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>payment_terms</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zahlungskonditionen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>quodate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Angebotsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>quonumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Angebotsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shippingpoint</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Versandort</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>shipvia</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Transportmittel</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>subtotal</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zwischensumme aller Posten ohne Steuern</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>total</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Restsumme der Rechnung (Summe abzüglich bereits
|
||
bezahlter Posten)</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>transaction_description</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Vorgangsbezeichnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>transdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Auftragsdatum wenn die Rechnung aus einem Auftrag
|
||
erstellt wurde</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect3>
|
||||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.invoice-posten">
|
||
<title>Variablen für jeden Posten auf der Rechnung</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
<variablelist>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>bin</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Stellage</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>description</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Artikelbeschreibung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>discount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rabatt als Betrag</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>discount_sub</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zwischensumme mit Rabatt</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>drawing</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zeichnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>ean</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>EAN-Code</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>image</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Grafik</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>linetotal</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zeilensumme (Anzahl * Einzelpreis)</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>longdescription</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Langtext</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>microfiche</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Mikrofilm</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>netprice</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Nettopreis</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>nodiscount_linetotal</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zeilensumme ohne Rabatt</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>nodiscount_sub</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zwischensumme ohne Rabatt</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>number</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Artikelnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>ordnumber_oe</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Auftragsnummer des Originalauftrags, wenn die Rechnung
|
||
aus einem Sammelauftrag erstellt wurde</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>p_discount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rabatt in Prozent</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>partnotes</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Die beim Artikel gespeicherten Bemerkungen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>partsgroup</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Warengruppe</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>price_factor</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Der Preisfaktor als Zahl, sofern einer eingestellt
|
||
ist</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>price_factor_name</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Der Name des Preisfaktors, sofern einer eingestellt
|
||
ist</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>projectnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Projektnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>projectdescription</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Projektbeschreibung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>qty</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Anzahl</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>reqdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>runningnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Position auf der Rechnung (1, 2, 3...)</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>sellprice</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Verkaufspreis</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>serialnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Seriennummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>tax_rate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Steuersatz</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>transdate_oe</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Auftragsdatum des Originalauftrags, wenn die Rechnung
|
||
aus einem Sammelauftrag erstellt wurde</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>unit</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Einheit</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>weight</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Gewicht</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
<para>Für jeden Posten gibt es ein Unterarray mit den Informationen
|
||||
über Lieferanten und Lieferantenartikelnummer. Diese müssen mit
|
||||
einer <function>foreach</function>-Schleife ausgegeben werden, da
|
||||
für jeden Artikel mehrere Lieferanteninformationen hinterlegt sein
|
||||
können. Die Variablen dafür lauten:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>make</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferant</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>model</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferantenartikelnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.invoice-zahlungen">
|
||||
<title>Variablen für die einzelnen Zahlungseingänge</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>payment</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Betrag</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>paymentaccount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Konto</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>paymentdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Datum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>paymentmemo</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Memo</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>paymentsource</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Beleg</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.benutzerdefinierte-variablen-vc">
|
||||
<title>Benutzerdefinierte Kunden- und Lieferantenvariablen</title>
|
||||
<para>Die vom Benutzer definierten Variablen für Kunden und
|
||||
Lieferanten stehen beim Ausdruck von Einkaufs- und Verkaufsbelegen
|
||||
ebenfalls zur Verfügung. Ihre Namen setzen sich aus dem Präfix
|
||||
<varname>vc_cvar_</varname> und dem vom Benutzer festgelegten
|
||||
Variablennamen zusammen.</para>
|
||||
<para>Beispiel: Der Benutzer hat eine Variable namens
|
||||
<varname>number_of_employees</varname> definiert, die die Anzahl der
|
||||
Mitarbeiter des Unternehmens enthält. Diese Variable steht dann
|
||||
unter dem Namen <varname>vc_cvar_number_of_employees</varname> zur
|
||||
Verfügung.</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
<sect2 id="dokumentenvorlagen-und-variablen.dunning">
|
||||
<title>Variablen in Mahnungen und Rechnungen über Mahngebühren</title>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.dunning-vorlagennamen">
|
||||
<title>Namen der Vorlagen</title>
|
||||
<para>Die Namen der Vorlagen werden im System-Menü vom Benutzer
|
||||
eingegeben. Wird für ein Mahnlevel die Option zur automatischen
|
||||
Erstellung einer Rechnung über die Mahngebühren und Zinsen
|
||||
aktiviert, so wird der Name der Vorlage für diese Rechnung aus dem
|
||||
Vorlagenname für diese Mahnstufe mit dem Zusatz
|
||||
<constant>_invoice</constant> gebildet. Weiterhin werden die Kürzel
|
||||
für die ausgewählte Sprache und den ausgewählten Drucker
|
||||
angehängt.</para>
|
||||
</sect3>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.dunning-allgemein">
|
||||
<title>Allgemeine Variablen in Mahnungen</title>
|
||||
<para>Die Variablen des Verkäufers stehen wie gewohnt als
|
||||
<varname>employee_...</varname> zur Verfügung. 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.</para>
|
||||
<para>Weitere Variablen beinhalten:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>dunning_date</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Datum der Mahnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dunning_duedate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Fälligkeitsdatum für diese Mahhnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dunning_id</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Mahnungsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>fee</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Kummulative Mahngebühren</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>interest_rate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zinssatz per anno in Prozent</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>total_amount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Gesamter noch zu zahlender Betrag als
|
||
<function>fee</function> + <function>total_interest</function>
|
||||
+ <function>total_open_amount</function></para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>total_interest</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zinsen per anno über alle Rechnungen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>total_open_amount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Summe über alle offene Beträge der Rechnungen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.dunning-details">
|
||||
<title>Variablen für jede gemahnte Rechnung in einer Mahnung</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>dn_amount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungssumme (brutto)</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_duedate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Originales Fälligkeitsdatum der Rechnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_dunning_date</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Datum der Mahnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_dunning_duedate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Fälligkeitsdatum der Mahnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_fee</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Kummulative Mahngebühr</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_interest</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zinsen per anno für diese Rechnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_invnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_linetotal</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Noch zu zahlender Betrag (ergibt sich aus
|
||
<varname>dn_open_amount</varname> + <varname>dn_fee</varname>
|
||||
+ <varname>dn_interest</varname>)</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_netamount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungssumme (netto)</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_open_amount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Offener Rechnungsbetrag</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_ordnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Bestellnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_transdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dn_curr</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Währung, in der die Rechnung erstellt wurde. (Die
|
||
Rechnungsbeträge sind aber immer in der Hauptwährung)</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
</variablelist>
|
||||
90baed86 | Moritz Bunkus | </sect3>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.dunning-invoice">
|
||
<title>Variablen in automatisch erzeugten Rechnungen über
|
||||
Mahngebühren</title>
|
||||
<para>Die Variablen des Verkäufers stehen wie gewohnt als
|
||||
<varname>employee_...</varname> zur Verfügung. 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.</para>
|
||||
<para>Weitere Variablen beinhalten:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<variablelist>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>duedate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Fälligkeitsdatum der Rechnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>dunning_id</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Mahnungsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>fee</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Mahngebühren</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>interest</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Zinsen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>invamount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungssumme (ergibt sich aus <varname>fee</varname> +
|
||
<varname>interest</varname>)</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>invdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>invnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect3>
|
||||
90baed86 | Moritz Bunkus | </sect2>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect2 id="dokumentenvorlagen-und-variablen.andere-vorlagen">
|
||
<title>Variablen in anderen Vorlagen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>Einführung</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Die Variablen in anderen Vorlagen sind ähnlich wie in der
|
||
Rechnung. Allerdings heißen die Variablen, die mit
|
||||
<varname>inv</varname> beginnen, jetzt anders. Bei den Angeboten
|
||||
fangen sie mit <varname>quo</varname> für "quotation" an:
|
||||
<varname>quodate</varname> für Angebotsdatum etc. Bei Bestellungen
|
||||
wiederum fangen sie mit <varname>ord</varname> für "order" an:
|
||||
<varname>ordnumber</varname> für Bestellnummer etc.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Manche Variablen sind in anderen Vorlagen hingegen gar nicht
|
||
vorhanden wie z.B. die für bereits verbuchte Zahlungseingänge. Dies
|
||||
sind Variablen, die vom Geschäftsablauf her in der entsprechenden
|
||||
Vorlage keine Bedeutung haben oder noch nicht belegt sein
|
||||
können.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Im Folgenden werden nur wichtige Unterschiede zu den Variablen
|
||
in Rechnungen aufgeführt.</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-quotations">
|
||
<title>Angebote und Preisanfragen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
<varlistentry>
|
||||
<term><varname>quonumber</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Angebots- bzw. Anfragenummer</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>reqdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Gültigkeitsdatum (bei Angeboten) bzw. Lieferdatum (bei
|
||
Preisanfragen)</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>transdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Angebots- bzw. Anfragedatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-orders">
|
||||
<title>Auftragsbestätigungen und Lieferantenaufträge</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>ordnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Auftragsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>reqdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>transdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Auftragsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-delivery-orders">
|
||||
<title>Lieferscheine (Verkauf und Einkauf)</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>cusordnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Bestellnummer des Kunden (im Verkauf) bzw. Bestellnummer
|
||
des Lieferanten (im Einkauf)</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>donumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferscheinnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>transdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lieferscheindatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
</variablelist>
|
||||
90baed86 | Moritz Bunkus | <para>Für jede Position eines Lieferscheines gibt es ein Unterarray
|
||
mit den Informationen darüber, von welchem Lager und Lagerplatz aus
|
||||
die Waren verschickt wurden (Verkaufslieferscheine) bzw. auf welchen
|
||||
Lagerplatz sie eingelagert wurden. Diese müssen mittels einer
|
||||
<function>foreach</function>-Schleife ausgegeben werden. Diese
|
||||
Variablen sind:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<variablelist>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>si_bin</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lagerplatz</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>si_chargenumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Chargennummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>si_bestbefore</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Mindesthaltbarkeit</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>si_number</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Artikelnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>si_qty</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Anzahl bzw. Menge</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>si_runningnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Positionsnummer (1, 2, 3 etc)</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>si_unit</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Einheit</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>si_warehouse</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Lager</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
90baed86 | Moritz Bunkus | </variablelist>
|
||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.andere-vorlagen-statement">
|
||
<title>Variablen für Sammelrechnung</title>
|
||||
<variablelist>
|
||||
7ee506b3 | Moritz Bunkus | <varlistentry>
|
||
90baed86 | Moritz Bunkus | <term><varname>c0total</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Gesamtbetrag aller Rechnungen mit Fälligkeit < 30
|
||
Tage</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>c30total</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Gesamtbetrag aller Rechnungen mit Fälligkeit >= 30
|
||
und < 60 Tage</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>c60total</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Gesamtbetrag aller Rechnungen mit Fälligkeit >= 60
|
||
und < 90 Tage</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>c90total</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Gesamtbetrag aller Rechnungen mit Fälligkeit >= 90
|
||
Tage</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>total</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Gesamtbetrag aller Rechnungen</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
</variablelist>
|
||||
90baed86 | Moritz Bunkus | <para>Variablen für jede Rechnungsposition in Sammelrechnung:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
<variablelist>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>invnumber</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungsnummer</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>invdate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Rechnungsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>duedate</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Fälligkeitsdatum</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>amount</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Summe der Rechnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>open</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Noch offener Betrag der Rechnung</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>c0</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Noch offener Rechnungsbetrag mit Fälligkeit < 30
|
||
Tage</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
<varlistentry>
|
||||
90baed86 | Moritz Bunkus | <term><varname>c30</varname></term>
|
||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Noch offener Rechnungsbetrag mit Fälligkeit >= 30 und
|
||
< 60 Tage</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>c60</varname></term>
|
||||
<listitem>
|
||||
<para>Noch offener Rechnungsbetrag mit Fälligkeit >= 60 und
|
||||
< 90 Tage</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><varname>c90</varname></term>
|
||||
<listitem>
|
||||
<para>Noch offener Rechnungsbetrag mit Fälligkeit >= 90
|
||||
Tage</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect3>
|
||||
</sect2>
|
||||
90baed86 | Moritz Bunkus | <sect2 id="dokumentenvorlagen-und-variablen.bloecke">
|
||
<title>Blöcke, bedingte Anweisungen und Schleifen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.bloecke.einfuehrung">
|
||
<title>Einfürhung</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Der Parser kennt neben den Variablen einige weitere
|
||
Konstrukte, die gesondert behandelt werden. Diese sind wie
|
||||
Variablennamen in spezieller Weise markiert:
|
||||
<command><%anweisung%> ... <%end%></command></para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Anmerkung zum <command><%end%></command>: Der besseren
|
||
Verständlichkeit halber kann man nach dem <command>end</command>
|
||||
noch beliebig weitere Wörter schreiben, um so zu markieren, welche
|
||||
Anweisung (z.B. <command>if</command> oder
|
||||
<command>foreach</command>) damit abgeschlossen wird.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Beispiel: Lautet der Beginn eines Blockes z.B.
|
||
<command><%if type == "sales_quotation"%></command>, so könnte
|
||||
er mit <command><%end%></command> genauso abgeschlossen werden
|
||||
wie mit <command><%end if%></command> oder auch
|
||||
<command><%end type == "sales_quotation"%></command>.</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
90baed86 | Moritz Bunkus | <sect3 id="dokumentenvorlagen-und-variablen.bloecke.if">
|
||
<title>Der if-Block</title>
|
||||
<programlisting><%if variablenname%>
|
||||
...
|
||||
<%end%></programlisting>
|
||||
<para>Eine normale "if-then"-Bedingung. Die Zeilen zwischen dem "if"
|
||||
und dem "end" werden nur ausgegeben, wenn die Variable
|
||||
<varname>variablenname</varname> gesetzt und ungleich 0 ist.</para>
|
||||
c0abdaa6 | Moritz Bunkus | <para>Handelt es sich bei der benannten Variable um ein Array, also um einen Variablennamen, über den man mit
|
||
<command><%foreach variablenname%></command> iteriert, so wird mit diesem Konstrukt darauf getestet, ob das Array Elemente
|
||||
enthält. Somit würde im folgenden Beispiel nur dann eine Liste von Zahlungseingängen samt ihrer Überschrift "Zahlungseingänge"
|
||||
ausgegeben, wenn tatsächlich welche getätigt wurden:</para>
|
||||
<programlisting><%if payment%>
|
||||
Zahlungseingänge:
|
||||
<%foreach payment%>
|
||||
Am <%paymentdate%>: <%payment%> €
|
||||
<%end foreach%>
|
||||
<%end if%></programlisting>
|
||||
90baed86 | Moritz Bunkus | <para>Die Bedingung kann auch negiert werden, indem das Wort
|
||
<function>not</function> nach dem <filename>if</filename> verwendet
|
||||
wird. Beispiel:</para>
|
||||
<programlisting><%if not cp_greeting%>
|
||||
...
|
||||
<%end%></programlisting>
|
||||
<para>Zusätzlich zu dem einfachen Test, ob eine Variable gesetzt ist
|
||||
oder nicht, bietet dieser Block auch die Möglichkeit, den Inhalt
|
||||
einer Variablen mit einer festen Zeichenkette oder einer anderen
|
||||
Variablen zu vergleichen. Ob der Vergleich mit einer Zeichenkette
|
||||
oder einer anderen Variablen vorgenommen wird, hängt davon ab, ob
|
||||
die rechte Seite des Vergleichsoperators in Anführungszeichen
|
||||
gesetzt wird (Vergleich mit Zeichenkette) oder nicht (Vergleich mit
|
||||
anderer Variablen). Zwei Beispiele, die beide Vergleiche
|
||||
zeigen:</para>
|
||||
<programlisting><%if var1 == "Wert"%></programlisting>
|
||||
<para>Testet die Variable <varname>var1</varname> auf
|
||||
übereinstimmung mit der Zeichenkette <constant>Wert</constant>.
|
||||
Mittels <function>!=</function> anstelle von <function>==</function>
|
||||
würde auf Ungleichheit getestet.</para>
|
||||
55036afc | Moritz Bunkus | <programlisting><%if var1 == var2%></programlisting>
|
||
90baed86 | Moritz Bunkus | |||
<para>Testet die Variable <varname>var1</varname> auf
|
||||
übereinstimmung mit der Variablen <varname>var2</varname>. Mittel
|
||||
<function>!=</function> anstelle von <function>==</function> würde
|
||||
auf Ungleichheit getestet.</para>
|
||||
<para>Erfahrere Benutzer können neben der Tests auf (Un-)Gleichheit
|
||||
auch Tests auf übereinstimmung mit regulären Ausdrücken ohne
|
||||
Berücksichtung der Groß- und Kleinschreibung durchführen. Dazu dient
|
||||
dieselbe Syntax wie oben nur mit <function>=~</function> und
|
||||
<function>!~</function> als Vergleichsoperatoren.</para>
|
||||
<para>Beispiel für einen Test, ob die Variable
|
||||
<varname>intnotes</varname> (interne Bemerkungen) das Wort
|
||||
<constant>schwierig</constant> enthält:</para>
|
||||
<programlisting><%if intnotes =~ "schwierig"%></programlisting>
|
||||
</sect3>
|
||||
<sect3 id="dokumentenvorlagen-und-variablen.bloecke.foreach">
|
||||
<title>Der foreach-Block</title>
|
||||
<programlisting><%foreach variablenname%>
|
||||
...
|
||||
<%end%></programlisting>
|
||||
<para>Fügt die Zeilen zwischen den beiden Anweisungen so oft ein,
|
||||
wie das Perl-Array der Variablen <varname>variablenname</varname>
|
||||
Elemente enthät. Dieses Konstrukt wird zur Ausgabe der einzelnen
|
||||
Posten einer Rechnung / eines Angebots sowie zur Ausgabe der Steuern
|
||||
benutzt. In jedem Durchlauf werden die <link
|
||||
linkend="dokumentenvorlagen-und-variablen.invoice-posten">zeilenbezogenen
|
||||
Variablen</link> jeweils auf den Wert für die aktuelle Position
|
||||
gesetzt.</para>
|
||||
<para>Die Syntax sieht normalerweise wie folgt aus:</para>
|
||||
<programlisting><%foreach number%>
|
||||
Position: <%runningnumber%>
|
||||
Anzahl: <%qty%>
|
||||
Artikelnummer: <%number%>
|
||||
Beschreibung: <%description%>
|
||||
...
|
||||
<%end%></programlisting>
|
||||
<para>Besonderheit in OpenDocument-Vorlagen: Tritt ein
|
||||
<function><%foreach%></function>-Block innerhalb einer
|
||||
Tabellenzelle auf, so wird die komplette Tabellenzeile so oft
|
||||
wiederholt wie notwendig. Tritt er außerhalb auf, so wird nur der
|
||||
Inhalt zwischen <function><%foreach%></function> und
|
||||
<function><%end%></function> wiederholt, nicht aber die
|
||||
komplette Zeile, in der er steht.</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
<sect2 id="dokumentenvorlagen-und-variablen.markup">
|
||||
<title>Markup-Code zur Textformatierung innerhalb von
|
||||
Formularen</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>Wenn der Benutzer innhalb von Formularen in kivitendo Text
|
||
90baed86 | Moritz Bunkus | anders formatiert haben möchte, so ist dies begrenzt möglich.
|
||
5fa26f9a | Moritz Bunkus | kivitendo unterstützt die Textformatierung mit HTML-ähnlichen Tags.
|
||
90baed86 | Moritz Bunkus | Der Benutzer kann z.B. bei der Artikelbeschreibung auf einer Rechnung
|
||
Teile des Texts zwischen Start- und Endtags setzen. Dieser Teil wird
|
||||
dann automatisch in Anweisungen für das ausgewählte Vorlagenformat
|
||||
(HTML oder PDF über LaTeX) umgesetzt.</para>
|
||||
<para>Die unterstützen Formatierungen sind:</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><b>Text</b></term>
|
||||
<listitem>
|
||||
<para>Text wird in Fettdruck gesetzt.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><i>Text</i></term>
|
||||
<listitem>
|
||||
<para>Text wird kursiv gesetzt.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><u>Text</u></term>
|
||||
<listitem>
|
||||
<para>Text wird unterstrichen.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><s>Text</s></term>
|
||||
<listitem>
|
||||
<para>Text wird durchgestrichen. Diese Formatierung ist nicht
|
||||
bei der Ausgabe als PDF über LaTeX verfügbar.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term><bullet></term>
|
||||
<listitem>
|
||||
<para>Erzeugt einen ausgefüllten Kreis für Aufzählungen (siehe
|
||||
unten).</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
<para>Der Befehl <command><bullet></command> funktioniert
|
||||
momentan auch nur in Latex-Vorlagen.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1 id="excel-templates">
|
||||
<title>Excel-Vorlagen</title>
|
||||
<sect2 id="excel-templates.summary">
|
||||
<title>Zusammenfassung</title>
|
||||
<para>Dieses Dokument beschreibt den Mechanismus, mit dem
|
||||
Exceltemplates abgearbeitet werden, und die Einschränkungen, die damit
|
||||
einhergehen.</para>
|
||||
</sect2>
|
||||
<sect2 id="excel-templates.usage">
|
||||
<title>Bedienung</title>
|
||||
<para>Der Excel Mechanismus muss in der Konfigurationsdatei aktiviert
|
||||
werden. Die Konfigurationsoption heißt <varname>excel_templates =
|
||||
1</varname> im Abschnitt <varname>[print_templates]</varname>.</para>
|
||||
<para>Eine Excelvorlage kann dann unter dem Namen einer beliebigen
|
||||
anderen Vorlage mit der Endung <filename>.xls</filename> gespeichert
|
||||
werden. In den normalen Verkaufsmasken taucht nun
|
||||
<constant>Excel</constant> als auswählbares Format auf und kann von da
|
||||
an wie LaTeX- oder OpenOffice-Vorlagen benutzt werden.</para>
|
||||
<para>Der Sonderfall der Angebote aus der Kundenmaske ist ebenfalls
|
||||
eine Angebotsvorlage und wird unter dem internen Namen der Angebote
|
||||
<filename>sales_quotation.xls</filename> gespeichert.</para>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect2 id="excel-templates.syntax">
|
||
<title>Variablensyntax</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Einfache Syntax:
|
||
<command><<varname>></command></para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Dabei sind <constant><<</constant> und
|
||
<constant>>></constant> die Delimiter. Da Excel auf festen
|
||||
Breiten besteht, kann der Tag künstlich verlängert werden, indem
|
||||
weitere <constant><</constant> oder <constant>></constant>
|
||||
eingefügt werden. Der Tag muss nicht symmetrisch sein.
|
||||
Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <programlisting><<<<<varname>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Um die Limitierung der festen Breite zu reduzieren, können
|
||
weitere Variablen in einem Block interpoliert werden. Whitespace wird
|
||||
dazwishen dann erhalten. Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <programlisting><<<<<varname1 varname2 varname3>>>>>>>>>>>>>>>>>>>>>>>>>></programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Die Variablen werden interpoliert, und linksbündig mit
|
||
Leerzeichen auf die gewünschte Länge aufgefüllt. Ist der String zu
|
||||
lang, werden überzählige Zeichen abgeschnitten.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Es ist ausserdem möglich, Daten rechtsbündig darzustellen, wenn
|
||
der Block mit einem Leerzeichen anfängt. Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <programlisting><<<<<< varname>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>></programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Dies würde rechtsbündig triggern. Wenn bei rechtsbündiger
|
||
Ausrichtung Text abgeschnitten werden muss, wird er vom linken Ende
|
||||
entfernt.</para>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect2 id="excel-templates.limitations">
|
||
<title>Einschränkungen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Das Excelformat bis 2002 ist ein binäres Format, und kann nicht
|
||
mit vertretbarem Aufwand editiert werden. Der Templatemechanismus
|
||||
beschränkt sich daher darauf, Textstellen exakt durch einen anderen
|
||||
Text zu ersetzen.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Aus dem gleichen Grund sind die Kontrolllstrukturen
|
||
<command><%if%></command> und
|
||||
<command><%foreach%></command> nicht vorhanden. Der Delimiter
|
||||
<constant><% %></constant> kommt in den Headerinformationen
|
||||
evtl. vor. Deshalb wurde auf den sichereren Delimiter
|
||||
<constant><<</constant> und <constant>>></constant>
|
||||
gewechselt.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <chapter>
|
||
<title>Entwicklerdokumentation</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect1 id="devel.globals" xreflabel="Globale Variablen">
|
||
<title>Globale Variablen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect2>
|
||
<title>Wie sehen globale Variablen in Perl aus?</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Globale Variablen liegen in einem speziellen namespace namens
|
||
"main", der von überall erreichbar ist. Darüber hinaus sind bareword
|
||||
globs global und die meisten speziellen Variablen sind...
|
||||
speziell.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Daraus ergeben sich folgende Formen:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
<varlistentry>
|
||||
<term><literal>$main::form</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>expliziter Namespace "main"</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>$::form</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>impliziter Namespace "main"</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>open FILE, "file.txt"</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>FILE</varname> ist global</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>$_</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>speziell</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Im Gegensatz zu <productname>PHP</productname> gibt es kein
|
||
Schlüsselwort wie "<function>global</function>", mit dem man
|
||||
importieren kann. <function>my</function>, <function>our</function>
|
||||
und <function>local</function> machen was anderes.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <variablelist>
|
||
<varlistentry>
|
||||
<term><literal>my $form</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>lexikalische Variable, gültig bis zum Ende des
|
||||
Scopes</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>our $form</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>$form</varname> referenziert ab hier
|
||||
<varname>$PACKAGE::form</varname>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <varlistentry>
|
||
<term><literal>local $form</literal></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Alle Änderungen an <varname>$form</varname> werden am Ende
|
||||
des scopes zurückgesetzt</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect2>
|
||
<title>Warum sind globale Variablen ein Problem?</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Das erste Problem ist <productname>FCGI</productname>.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para><productname>SQL-Ledger</productname> hat fast alles im globalen
|
||
namespace abgelegt, und erwartet, dass es da auch wiederzufinden ist.
|
||||
5a925d70 | Jan Büren | Unter <productname>FCGI</productname> müssen diese Sachen aber wieder
|
||
90baed86 | Moritz Bunkus | aufgeräumt werden, damit sie nicht in den nächsten Request kommen.
|
||
Einige Sachen wiederum sollen nicht gelöscht werden, wie zum Beispiel
|
||||
5a925d70 | Jan Büren | Datenbankverbindungen, weil die sehr lange zum Initialisieren
|
||
90baed86 | Moritz Bunkus | brauchen.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Das zweite Problem ist <function>strict</function>. Unter
|
||
<function>strict</function> werden alle Variablen die nicht explizit
|
||||
mit <function>Package</function>, <function>my</function> oder
|
||||
<function>our</function> angegeben werden als Tippfehler angemarkert,
|
||||
3adb0cb7 | Moritz Bunkus | dies hat, seit der Einführung, u.a. schon so manche langwierige
|
||
Bug-Suche verkürzt. Da globale Variablen aber implizit mit Package
|
||||
angegeben werden, werden die nicht geprüft, und somit kann sich
|
||||
schnell ein Tippfehler einschleichen.</para>
|
||||
90baed86 | Moritz Bunkus | </sect2>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect2>
|
||
<title>Kanonische globale Variablen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Um dieses Problem im Griff zu halten gibt es einige wenige
|
||
3adb0cb7 | Moritz Bunkus | globale Variablen, die kanonisch sind, d.h. sie haben bestimmte
|
||
vorgegebenen Eigenschaften, und alles andere sollte anderweitig
|
||||
umhergereicht werden.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Diese Variablen sind im Moment die folgenden neun:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para><varname>$::form</varname></para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>%::myconfig</varname></para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para><varname>$::locale</varname></para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>$::lxdebug</varname></para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>$::auth</varname></para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>$::lx_office_conf</varname></para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>$::instance_conf</varname></para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>$::dispatcher</varname></para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para><varname>$::request</varname></para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Damit diese nicht erneut als Müllhalde missbraucht werden, im
|
||
Folgenden eine kurze Erläuterung der bestimmten vorgegebenen
|
||||
Eigenschaften (Konventionen):</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::form</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>Ist ein Objekt der Klasse
|
||||
"<classname>Form</classname>"</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird nach jedem Request gelöscht</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Muss auch in Tests und Konsolenscripts vorhanden
|
||||
sein.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Enthält am Anfang eines Requests die Requestparameter vom
|
||||
User</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Kann zwar intern über Requestgrenzen ein Datenbankhandle
|
||||
cachen, das wird aber momentan absichtlich zerstört</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para><varname>$::form</varname> wurde unter <productname>SQL
|
||
Ledger</productname> als Gottobjekt für alles misbraucht. Sämtliche
|
||||
alten Funktionen unter SL/ mutieren <varname>$::form</varname>, das
|
||||
5a925d70 | Jan Büren | heißt, alles was einem lieb ist (alle Variablen die einem ans Herz
|
||
3adb0cb7 | Moritz Bunkus | gewachsen sind), sollte man vor einem Aufruf (!) von zum Beispiel
|
||
<function>IS->retrieve_customer()</function> in Sicherheit
|
||||
bringen.</para>
|
||||
dda4cde1 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Z.B. das vom Benutzer eingestellte Zahlenformat, bevor man
|
||
Berechnung in einem bestimmten Format durchführt (SL/Form.pm Zeile
|
||||
3552, Stand version 2.7beta), um dies hinterher wieder auf den
|
||||
richtigen Wert zu setzen:</para>
|
||||
dda4cde1 | Moritz Bunkus | |||
<programlisting> my $saved_numberformat = $::myconfig{numberformat};
|
||||
$::myconfig{numberformat} = $numberformat;
|
||||
# (...) div Berechnungen
|
||||
$::myconfig{numberformat} = $saved_numberformat;</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Das Objekt der Klasse Form hat leider im Moment noch viele
|
||
zentrale Funktionen die vom internen Zustand abhängen, deshalb bitte
|
||||
nie einfach zerstören oder überschreiben (zumindestens nicht kurz
|
||||
vor einem Release oder in Absprache über bspw. die devel-Liste ;-).
|
||||
Es geht ziemlich sicher etwas kaputt.</para>
|
||||
<para><varname>$::form</varname> ist gleichzeitig der Standard Scope
|
||||
in den <productname>Template::Toolkit</productname> Templates
|
||||
außerhalb der Controller: der Ausdruck <function>[% var
|
||||
%]</function> greift auf <varname>$::form->{var}</varname> zu.
|
||||
Unter Controllern ist der Standard Scope anders, da lautet der
|
||||
Zugriff <function>[% FORM.var %]</function>. In Druckvorlagen sind
|
||||
normale Variablen ebenfall im <varname>$::form</varname> Scope, d.h.
|
||||
<function><%var%></function> zeigt auf
|
||||
<varname>$::form->{var}</varname>. Nochmal von der anderen Seite
|
||||
erläutert, innerhalb von (Web-)Templates sieht man häufiger solche
|
||||
Konstrukte:</para>
|
||||
dda4cde1 | Moritz Bunkus | |||
<programlisting>[%- IF business %]
|
||||
# (... Zeig die Auswahlliste Kunden-/Lieferantentyp an)
|
||||
[%- END %]</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Entweder wird hier dann $::form->{business} ausgewertet
|
||
oder aber der Funktion
|
||||
<function>$form->parse_html_template</function> wird explizit
|
||||
noch ein zusätzlicher Hash übergeben, der dann auch in den
|
||||
(Web-)Templates zu Verfügung steht, bspw. so:</para>
|
||||
dda4cde1 | Moritz Bunkus | |||
<programlisting>$form->parse_html_template("is/form_header", \%TMPL_VAR);</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Innerhalb von Schleifen wird
|
||
<varname>$::form->{TEMPLATE_ARRAYS}{var}[$index]</varname>
|
||||
bevorzugt, wenn vorhanden. Ein Beispiel findet sich in SL/DO.pm,
|
||||
welches über alle Positionen eines Lieferscheins in Schleife
|
||||
läuft:</para>
|
||||
dda4cde1 | Moritz Bunkus | |||
<programlisting>for $i (1 .. $form->{rowcount}) {
|
||||
# ...
|
||||
push @{ $form->{TEMPLATE_ARRAYS}{runningnumber} }, $position;
|
||||
push @{ $form->{TEMPLATE_ARRAYS}{number} }, $form->{"partnumber_$i"};
|
||||
push @{ $form->{TEMPLATE_ARRAYS}{description} }, $form->{"description_$i"};
|
||||
# ...
|
||||
}</programlisting>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>%::myconfig</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>Das einzige Hash unter den globalen Variablen</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird spätestens benötigt wenn auf die Datenbank
|
||||
zugegriffen wird</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird bei jedem Request neu erstellt.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Enthält die Userdaten des aktuellen Logins</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Sollte nicht ohne Filterung irgendwo gedumpt werden oder
|
||||
extern serialisiert werden, weil da auch der Datenbankzugriff
|
||||
5a925d70 | Jan Büren | für diesen user drinsteht.</para>
|
||
90baed86 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Enthält unter anderem Listenbegrenzung vclimit,
|
||||
Datumsformat dateformat und Nummernformat numberformat</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Enthält Datenbankzugriffinformationen</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para><varname>%::myconfig</varname> ist im Moment der Ersatz für
|
||
ein Userobjekt. Die meisten Funktionen, die etwas anhand des
|
||||
aktuellen Users entscheiden müssen, befragen
|
||||
<varname>%::myconfig</varname>. Innerhalb der Anwendungen sind dies
|
||||
überwiegend die Daten, die sich unter <guimenu>Programm</guimenu>
|
||||
-> <guimenuitem>Einstellungen</guimenuitem> befinden, bzw. die
|
||||
Informationen über den Benutzer die über die
|
||||
854c9a62 | Moritz Bunkus | Administrator-Schnittstelle eingegeben wurden.</para>
|
||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::locale</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>Objekt der Klasse "Locale"</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird pro Request erstellt</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Muss auch für Tests und Scripte immer verfügbar
|
||||
sein.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Cached intern über Requestgrenzen hinweg benutzte
|
||||
Locales</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Lokalisierung für den aktuellen User. Alle Übersetzungen,
|
||
Zahlen- und Datumsformatierungen laufen über dieses Objekt.</para>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::lxdebug</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>Objekt der Klasse "LXDebug"</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird global gecached</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Muss immer verfügbar sein, in nahezu allen
|
||||
Funktionen</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para><varname>$::lxdebug</varname> stellt Debuggingfunktionen
|
||
bereit, wie "<function>enter_sub</function>" und
|
||||
"<function>leave_sub</function>", mit denen in den alten Modulen ein
|
||||
brauchbares Tracing gebaut ist, "<function>log_time</function>", mit
|
||||
der man die Wallclockzeit seit Requeststart loggen kann, sowie
|
||||
"<function>message</function>" und "<function>dump</function>" mit
|
||||
5fa26f9a | Moritz Bunkus | denen man flott Informationen ins Log (tmp/kivitendo-debug.log)
|
||
3adb0cb7 | Moritz Bunkus | packen kann.</para>
|
||
dda4cde1 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Beispielsweise so:</para>
|
||
dda4cde1 | Moritz Bunkus | |||
<programlisting>$main::lxdebug->message(0, 'Meine Konfig:' . Dumper (%::myconfig));
|
||||
$main::lxdebug->message(0, 'Wer bin ich? Kunde oder Lieferant:' . $form->{vc});</programlisting>
|
||||
90baed86 | Moritz Bunkus | </sect3>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::auth</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>Objekt der Klasse "SL::Auth"</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird global gecached</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Hat eine permanente DB Verbindung zur Authdatenbank</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird nach jedem Request resettet.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para><varname>$::auth</varname> stellt Funktionen bereit um die
|
||
Rechte des aktuellen Users abzufragen. Obwohl diese Informationen
|
||||
vom aktuellen User abhängen wird das Objekt aus
|
||||
Geschwindigkeitsgründen nur einmal angelegt und dann nach jedem
|
||||
Request kurz resettet.</para>
|
||||
854c9a62 | Moritz Bunkus | |||
<para>Dieses Objekt kapselt auch den gerade aktiven Mandanten. Dessen Einstellungen können über
|
||||
<literal>$::auth->client</literal> abgefragt werden; Rückgabewert ist ein Hash mit den Werten aus der Tabelle
|
||||
<literal>auth.clients</literal>.</para>
|
||||
7ee506b3 | Moritz Bunkus | </sect3>
|
||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::lx_office_conf</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>Objekt der Klasse
|
||||
"<classname>SL::LxOfficeConf</classname>"</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Global gecached</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Repräsentation der
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf[.default]</filename>-Dateien</para>
|
||
90baed86 | Moritz Bunkus | </listitem>
|
||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | |||
5a925d70 | Jan Büren | <para>Globale Konfiguration. Configdateien werden zum Start gelesen
|
||
3adb0cb7 | Moritz Bunkus | und danach nicht mehr angefasst. Es ist derzeit nicht geplant, dass
|
||
das Programm die Konfiguration ändern kann oder sollte.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Beispielsweise ist über den Konfigurationseintrag [debug] die
|
||
Debug- und Trace-Log-Datei wie folgt konfiguriert und
|
||||
verfügbar:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <programlisting>[debug]
|
||
5fa26f9a | Moritz Bunkus | file = /tmp/kivitendo-debug.log</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>ist der Key <varname>file</varname> im Programm als
|
||
<varname>$::lx_office_conf->{debug}{file}</varname>
|
||||
erreichbar.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <warning>
|
||
<para>Zugriff auf die Konfiguration erfolgt im Moment über
|
||||
Hashkeys, sind also nicht gegen Tippfehler abgesichert.</para>
|
||||
</warning>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::instance_conf</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
7ee506b3 | Moritz Bunkus | <listitem>
|
||
90baed86 | Moritz Bunkus | <para>Objekt der Klasse
|
||
"<classname>SL::InstanceConfiguration</classname>"</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>wird pro Request neu erstellt</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
90baed86 | Moritz Bunkus | </itemizedlist>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Funktioniert wie <varname>$::lx_office_conf</varname>,
|
||
speichert aber Daten die von der Instanz abhängig sind. Eine Instanz
|
||||
3adb0cb7 | Moritz Bunkus | ist hier eine Mandantendatenbank. Beispielsweise überprüft
|
||
dda4cde1 | Moritz Bunkus | <programlisting>$::instance_conf->get_inventory_system eq 'perpetual'</programlisting>
|
||
5a925d70 | Jan Büren | ob die berüchtigte Bestandsmethode zur Anwendung kommt.</para>
|
||
90baed86 | Moritz Bunkus | </sect3>
|
||
<sect3>
|
||||
<title>$::dispatcher</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
7ee506b3 | Moritz Bunkus | <listitem>
|
||
90baed86 | Moritz Bunkus | <para>Objekt der Klasse
|
||
"<varname>SL::Dispatcher</varname>"</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>wird pro Serverprozess erstellt.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>enthält Informationen über die technische Verbindung zum
|
||
Server</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
90baed86 | Moritz Bunkus | </itemizedlist>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Der dritte Punkt ist auch der einzige Grund warum das Objekt
|
||
global gespeichert wird. Wird vermutlich irgendwann in einem anderen
|
||||
Objekt untergebracht.</para>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::request</title>
|
||||
<itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | <listitem>
|
||
90baed86 | Moritz Bunkus | <para>Hashref (evtl später Objekt)</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird pro Request neu initialisiert.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Keine Unterstruktur garantiert.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para><varname>$::request</varname> ist ein generischer Platz um
|
||
Daten "für den aktuellen Request" abzulegen. Sollte nicht für action
|
||||
at a distance benutzt werden, sondern um lokales memoizing zu
|
||||
ermöglichen, das garantiert am Ende des Requests zerstört
|
||||
wird.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Vieles von dem, was im moment in <varname>$::form</varname>
|
||
liegt, sollte eigentlich hier liegen. Die groben
|
||||
Differentialkriterien sind:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
3adb0cb7 | Moritz Bunkus | <para>Kommt es vom User, und soll unverändert wieder an den
|
||
User? Dann <varname>$::form</varname>, steht da eh schon</para>
|
||||
90baed86 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
3adb0cb7 | Moritz Bunkus | <para>Sind es Daten aus der Datenbank, die nur bis zum Ende des
|
||
Requests gebraucht werden? Dann
|
||||
90baed86 | Moritz Bunkus | <varname>$::request</varname></para>
|
||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
3adb0cb7 | Moritz Bunkus | <para>Muss ich von anderen Teilen des Programms lesend drauf
|
||
zugreifen? Dann <varname>$::request</varname>, aber Zugriff über
|
||||
90baed86 | Moritz Bunkus | Wrappermethode</para>
|
||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
90baed86 | Moritz Bunkus | <sect2>
|
||
<title>Ehemalige globale Variablen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <para>Die folgenden Variablen waren einmal im Programm, und wurden
|
||
entfernt.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::cgi</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>war nötig, weil cookie Methoden nicht als
|
||||
Klassenfunktionen funktionieren</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Aufruf als Klasse erzeugt Dummyobjekt was im
|
||||
Klassennamespace gehalten wird und über Requestgrenzen
|
||||
leaked</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>liegt jetzt unter
|
||||
<varname>$::request->{cgi}</varname></para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>$::all_units</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>war nötig, weil einige Funktionen in Schleifen zum Teil
|
||||
ein paar hundert mal pro Request eine Liste der Einheiten
|
||||
brauchen, und de als Parameter durch einen Riesenstack von
|
||||
Funktionen geschleift werden müssten.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Liegt jetzt unter
|
||||
<varname>$::request->{cache}{all_units}</varname></para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wird nur in
|
||||
<function>AM->retrieve_all_units()</function> gesetzt oder
|
||||
gelesen.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <sect3>
|
||
<title>%::called_subs</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>wurde benutzt um callsub deep recursions
|
||||
abzufangen.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>Wurde entfernt, weil callsub nur einen Bruchteil der
|
||||
möglichen Rekursioenen darstellt, und da nie welche
|
||||
auftreten.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <listitem>
|
||
<para>komplette recursion protection wurde entfernt.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
</sect1>
|
||||
<sect1 id="devel.fcgi">
|
||||
<title>Entwicklung unter FastCGI</title>
|
||||
<sect2 id="devel.fcgi.general">
|
||||
<title>Allgemeines</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>Wenn Änderungen in der Konfiguration von kivitendo gemacht
|
||
7ee506b3 | Moritz Bunkus | werden, muss der Webserver neu gestartet werden.</para>
|
||
<para>Bei der Entwicklung für FastCGI ist auf ein paar Fallstricke zu
|
||||
achten. Dadurch, dass das Programm in einer Endlosschleife läuft,
|
||||
müssen folgende Aspekte beachtet werden.</para>
|
||||
</sect2>
|
||||
<sect2 id="devel.fcgi.exiting">
|
||||
<title>Programmende und Ausnahmen</title>
|
||||
<para>Betrifft die Funktionen <function>warn</function>,
|
||||
<function>die</function>, <function>exit</function>,
|
||||
<function>carp</function> und <function>confess</function>.</para>
|
||||
<para>Fehler, die dass Programm normalerweise sofort beenden (fatale
|
||||
Fehler), werden mit dem FastCGI Dispatcher abgefangen, um das Programm
|
||||
am Laufen zu halten. Man kann mit <function>die</function>,
|
||||
<function>confess</function> oder <function>carp</function> Fehler
|
||||
5fa26f9a | Moritz Bunkus | ausgeben, die dann vom Dispatcher angezeigt werden. Die kivitendo
|
||
7ee506b3 | Moritz Bunkus | eigene <function>$::form-</function>error()> tut im Prinzip das
|
||
Gleiche, mit ein paar Extraoptionen. <function>warn</function> und
|
||||
<function>exit</function> hingegen werden nicht abgefangen.
|
||||
<function>warn</function> wird direkt nach STDERR, also in Server Log
|
||||
eine Nachricht schreiben (sofern in der Konfiguration nicht die
|
||||
5fa26f9a | Moritz Bunkus | Warnungen in das kivitendo Log umgeleitet wurden), und
|
||
7ee506b3 | Moritz Bunkus | <function>exit</function> wird die Ausführung beenden.</para>
|
||
<para>Prinzipiell ist es kein Beinbruch, wenn sich der Prozess
|
||||
beendet, fcgi wird ihn sofort neu starten. Allerdings sollte das die
|
||||
Ausnahme sein. Quintessenz: Bitte kein <function>exit</function>
|
||||
benutzen, alle anderen Exceptionmechanismen sind ok.</para>
|
||||
</sect2>
|
||||
<sect2 id="devel.fcgi.globals">
|
||||
<title>Globale Variablen</title>
|
||||
<para>Um zu vermeiden, dass Informationen von einem Request in einen
|
||||
anderen gelangen, müssen alle globalen Variablen vor einem Request
|
||||
sauber initialisiert werden. Das ist besonders wichtig im
|
||||
<varname>$::cgi</varname> und <varname>$::auth</varname> Objekt, weil
|
||||
diese nicht gelöscht werden pro Instanz, sondern persistent gehalten
|
||||
werden.</para>
|
||||
<para>In <classname>SL::Dispatcher</classname> gibt es einen sauber
|
||||
abgetrennten Block, der alle kanonischen globalen Variablen listet und
|
||||
erklärt. Bitte keine anderen einführen ohne das sauber zu
|
||||
dokumentieren.</para>
|
||||
<para>Datenbankverbindungen wird noch ein Guide verfasst werden, wie
|
||||
man sicher geht, dass man die richtige erwischt.</para>
|
||||
</sect2>
|
||||
<sect2 id="devel.fcgi.performance">
|
||||
<title>Performance und Statistiken</title>
|
||||
<para>Die kritischen Pfade des Programms sind die Belegmasken, und
|
||||
unter diesen ganz besonders die Verkaufsrechnungsmaske. Ein Aufruf der
|
||||
5fa26f9a | Moritz Bunkus | Rechnungsmaske in kivitendo 2.4.3 stable dauert auf einem Core2duo mit
|
||
7ee506b3 | Moritz Bunkus | 4GB Arbeitsspeicher und Ubuntu 9.10 eine halbe Sekunde. In der 2.6.0
|
||
sind es je nach Menge der definierten Variablen 1-2s. Ab der
|
||||
Moose/Rose::DB Version sind es 5-6s.</para>
|
||||
<para>Mit FastCGI ist die neuste Version auf 0,26 Sekunden selbst in
|
||||
den kritischen Pfaden, unter 0,15 sonst.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1 id="db-upgrade-files" xreflabel="Datenbank-Upgradedateien">
|
||||
3adb0cb7 | Moritz Bunkus | <title>SQL-Upgradedateien</title>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="db-upgrade-files.introduction"
|
||
xreflabel="Einführung in die Datenbank-Upgradedateien">
|
||||
<title>Einführung</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
0e43d3cf | Moritz Bunkus | <para>Datenbankupgrades werden über einzelne Upgrade-Scripte gesteuert, die sich im Verzeichnis <filename>sql/Pg-upgrade2</filename>
|
||
befinden. In diesem Verzeichnis muss pro Datenbankupgrade eine Datei existieren, die neben den eigentlich auszuführenden SQL- oder
|
||||
Perl-Befehlen einige Kontrollinformationen enthält.</para>
|
||||
<para>Kontrollinformationen definieren Abhängigkeiten und Prioritäten, sodass Datenbankscripte zwar in einer sicheren Reihenfolge
|
||||
ausgeführt werden (z.B. darf ein <literal>ALTER TABLE</literal> erst ausgeführt werden, wenn die Tabelle mit <literal>CREATE
|
||||
TABLE</literal> angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man keine Versionsnummern braucht.</para>
|
||||
<para>kivitendo merkt sich dabei, welches der Upgradescripte in <filename>sql/Pg-upgrade2</filename> bereits durchgeführt wurde und
|
||||
führt diese nicht erneut aus. Dazu dient die Tabelle "<literal>schema_info</literal>", die bei der Anmeldung automatisch angelegt
|
||||
wird.</para>
|
||||
3adb0cb7 | Moritz Bunkus | </sect2>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="db-upgrade-files.format"
|
||
xreflabel="Format der Upgradedateien">
|
||||
<title>Format der Kontrollinformationen</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die Kontrollinformationen sollten sich am Anfang der jeweiligen
|
||
Upgradedatei befinden. Jede Zeile, die Kontrollinformationen enthält,
|
||||
hat dabei das folgende Format:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Für SQL-Upgradedateien:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>-- @key: value</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Für Perl-Upgradedateien:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting># @key: value</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Leerzeichen vor "<varname>value</varname>" werden
|
||
entfernt.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die folgenden Schlüsselworte werden verarbeitet:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <variablelist>
|
||
<varlistentry>
|
||||
<term><varname>tag</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Wird zwingend benötigt. Dies ist der "Name" des Upgrades.
|
||||
Dieser "tag" kann von anderen Kontrolldateien in ihren
|
||||
Abhängigkeiten verwendet werden (Schlüsselwort
|
||||
"<varname>depends</varname>"). Der "tag" ist auch der Name, der
|
||||
in der Datenbank eingetragen wird.</para>
|
||||
<para>Normalerweise sollte die Kontrolldatei genau so heißen wie
|
||||
der "tag", nur mit der Endung ".sql" bzw. "pl".</para>
|
||||
<para>Ein Tag darf nur aus alphanumerischen Zeichen sowie den
|
||||
Zeichen _ - ( ) bestehen. Insbesondere sind Leerzeichen nicht
|
||||
erlaubt und sollten stattdessen mit Unterstrichen ersetzt
|
||||
werden.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>charset</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
f1a40f51 | Moritz Bunkus | <para>Empfohlen. Gibt den Zeichensatz an, in dem das Script geschrieben wurde, z.B. "<literal>UTF-8</literal>". Aus
|
||
Kompatibilitätsgründen mit alten Upgrade-Scripten wird bei Abwesenheit des Tags für SQL-Upgradedateien der Zeichensatz
|
||||
"<literal>ISO-8859-15</literal>" angenommen. Perl-Upgradescripte hingegen müssen immer in UTF-8 encodiert sein und sollten
|
||||
demnach auch ein "<literal>use utf8;</literal>" enthalten.</para>
|
||||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>description</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Benötigt. Eine Beschreibung, was in diesem Update
|
||||
passiert. Diese wird dem Benutzer beim eigentlichen
|
||||
Datenbankupdate angezeigt. Während der Tag in englisch gehalten
|
||||
sein sollte, sollte die Beschreibung auf Deutsch
|
||||
erfolgen.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>depends</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Optional. Eine mit Leerzeichen getrennte Liste von "tags",
|
||||
5fa26f9a | Moritz Bunkus | von denen dieses Upgradescript abhängt. kivitendo stellt sicher,
|
||
3adb0cb7 | Moritz Bunkus | dass die in dieser Liste aufgeführten Scripte bereits
|
||
durchgeführt wurden, bevor dieses Script ausgeführt wird.</para>
|
||||
<para>Abhängigkeiten werden rekursiv betrachtet. Wenn also ein
|
||||
Script "b" existiert, das von Änderungen in "a" abhängt, und
|
||||
eine neue Kontrolldatei für "c" erstellt wird, die von
|
||||
Änderungen in "a" und "b" abhängt, so genügt es, in "c" nur den
|
||||
Tag "b" als Abhängigkeit zu definieren.</para>
|
||||
<para>Es ist nicht erlaubt, sich selbst referenzierende
|
||||
Abhängigkeiten zu definieren (z.B. "a" -> "b", "b" -> "c"
|
||||
und "c" -> "a").</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>priority</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Optional. Ein Zahlenwert, der die Reihenfolge bestimmt, in
|
||||
der Scripte ausgeführt werden, die die gleichen
|
||||
Abhängigkeitstiefen besitzen. Fehlt dieser Parameter, so wird
|
||||
der Wert 1000 benutzt.</para>
|
||||
<para>Dies ist reine Kosmetik. Für echte Reihenfolgen muss
|
||||
5fa26f9a | Moritz Bunkus | "depends" benutzt werden. kivitendo sortiert die auszuführenden
|
||
3adb0cb7 | Moritz Bunkus | Scripte zuerst nach der Abhängigkeitstiefe (wenn "z" von "y"
|
||
abhängt und "y" von "x", so hat "z" eine Abhängigkeitstiefe von
|
||||
2, "y" von 1 und "x" von 0. "x" würde hier zuerst ausgeführt,
|
||||
dann "y", dann "z"), dann nach der Priorität und bei gleicher
|
||||
Priorität alphabetisch nach dem "tag".</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>ignore</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Optional. Falls der Wert auf 1 (true) steht, wird das
|
||||
Skript bei der Anmeldung ignoriert und entsprechend nicht
|
||||
ausgeführt.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | |||
f1a40f51 | Moritz Bunkus | <sect2 id="db-upgrade-files.format-perl-files" xreflabel="Format von Perl-Upgradedateien">
|
||
<title>Format von in Perl geschriebenen Datenbankupgradescripten</title>
|
||||
<para>In Perl geschriebene Datenbankscripte werden nicht einfach so ausgeführt sondern müssen sich an gewisse Konventionen
|
||||
halten. Dafür bekommen sie aber auch einige Komfortfunktionen bereitgestellt.</para>
|
||||
<para>Ein Upgradescript stellt dabei eine vollständige Objektklasse dar, die vom Elternobjekt
|
||||
"<literal>SL::DBUpgrade2::Base</literal>" erben und eine Funktion namens "<literal>run</literal>" zur Verfügung stellen muss. Das
|
||||
Script wird ausgeführt, indem eine Instanz dieser Klasse erzeugt und darauf die erwähnte "<literal>run</literal>" aufgerufen
|
||||
wird.</para>
|
||||
<para>Zu beachten ist, dass sich der Paketname der Datei aus dem Wert für "<literal>@tag</literal>" ableitet. Dabei werden alle
|
||||
Zeichen, die in Paketnamen ungültig wären (gerade Bindestriche), durch Unterstriche ersetzt. Insgesamt sieht der Paketname wie folgt
|
||||
aus: "<literal>SL::DBUpgrade2::tag</literal>".</para>
|
||||
<para>Welche Komfortfunktionen zur Verfügung stehen, erfahren Sie in der Perl-Dokumentation zum oben genannten Modul; aufzurufen mit
|
||||
"<command>perldoc SL/DBUpgrade2/Base.pm</command>".</para>
|
||||
<para>Ein Mindestgerüst eines gültigen Perl-Upgradescriptes sieht wie folgt aus:</para>
|
||||
<programlisting># @tag: beispiel-upgrade-file42
|
||||
# @description: Ein schönes Beispielscript
|
||||
# @depends: release_3_0_0
|
||||
package SL::DBUpgrade2::beispiel_upgrade_file42;
|
||||
use strict;
|
||||
use utf8;
|
||||
use parent qw(SL::DBUpgrade2::Base);
|
||||
sub run {
|
||||
my ($self) = @_;
|
||||
# hier Aktionen ausführen
|
||||
return 1;
|
||||
}
|
||||
1;
|
||||
</programlisting>
|
||||
</sect2>
|
||||
3adb0cb7 | Moritz Bunkus | <sect2 id="db-upgrade-files.dbupgrade-tool"
|
||
xreflabel="Hilfsscript dbupgrade2_tool.pl">
|
||||
<title>Hilfsscript dbupgrade2_tool.pl</title>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Um die Arbeit mit den Abhängigkeiten etwas zu erleichtern,
|
||
existiert ein Hilfsscript namens
|
||||
"<filename>scripts/dbupgrade2_tool.pl</filename>". Es muss aus dem
|
||||
5fa26f9a | Moritz Bunkus | kivitendo-ERP-Basisverzeichnis heraus aufgerufen werden. Dieses Tool
|
||
3adb0cb7 | Moritz Bunkus | liest alle Datenbankupgradescripte aus dem Verzeichnis
|
||
<filename>sql/Pg-upgrade2</filename> aus. Es benutzt dafür die
|
||||
5fa26f9a | Moritz Bunkus | gleichen Methoden wie kivitendo selber, sodass alle Fehlersituationen
|
||
3adb0cb7 | Moritz Bunkus | von der Kommandozeile überprüft werden können.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Wird dem Script kein weiterer Parameter übergeben, so wird nur
|
||
eine Überprüfung der Felder und Abhängigkeiten vorgenommen. Man kann
|
||||
sich aber auch Informationen auf verschiedene Art ausgeben
|
||||
lassen:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para>Listenform: "<command>./scripts/dbupgrade2_tool.pl
|
||||
--list</command>"</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Gibt eine Liste aller Scripte aus. Die Liste ist in der
|
||
5fa26f9a | Moritz Bunkus | Reihenfolge sortiert, in der kivitendo die Scripte ausführen
|
||
3adb0cb7 | Moritz Bunkus | würde. Es werden neben der Listenposition der Tag, die
|
||
Abhängigkeitstiefe und die Priorität ausgegeben.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Baumform: "<command>./scripts/dbupgrade2_tool.pl
|
||||
--tree</command>"</para>
|
||||
<para>Listet alle Tags in Baumform basierend auf den
|
||||
Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte, von
|
||||
denen keine anderen abhängen. Die Unterknoten sind Scripte, die
|
||||
beim übergeordneten Script als Abhängigkeit eingetragen
|
||||
sind.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem id="db-upgrade-files.dbupgrade-tool.reverse-tree">
|
||
<para>Umgekehrte Baumform: "<command>./scripts/dbupgrade2_tool.pl
|
||||
--rtree</command>"</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Listet alle Tags in Baumform basierend auf den
|
||
Abhängigkeiten auf. Die "Wurzelknoten" sind dabei die Scripte mit
|
||||
der geringsten Abhängigkeitstiefe. Die Unterknoten sind Scripte,
|
||||
die das übergeordnete Script als Abhängigkeit eingetragen
|
||||
haben.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Baumform mit Postscriptausgabe:
|
||||
"<command>./scripts/dbupgrade2_tool.pl
|
||||
--graphviz</command>"</para>
|
||||
<para>Benötigt das Tool "<command>graphviz</command>", um mit
|
||||
seiner Hilfe die <link
|
||||
linkend="db-upgrade-files.dbupgrade-tool.reverse-tree">umgekehrte
|
||||
Baumform</link> in eine Postscriptdatei namens
|
||||
"<filename>db_dependencies.ps</filename>" auszugeben. Dies ist
|
||||
vermutlich die übersichtlichste Form, weil hierbei jeder Knoten
|
||||
nur einmal ausgegeben wird. Bei den Textmodusbaumformen hingegen
|
||||
können Knoten und all ihre Abhängigkeiten mehrfach ausgegeben
|
||||
werden.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Scripte, von denen kein anderes Script abhängt:
|
||||
"<command>./scripts/dbupgrade2_tool.pl --nodeps</command>"</para>
|
||||
<para>Listet die Tags aller Scripte auf, von denen keine anderen
|
||||
Scripte abhängen.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | </sect1>
|
||
<sect1 id="translations-languages" xreflabel="Translations and languages">
|
||||
<title>Translations and languages</title>
|
||||
<sect2 id="translations-languages.introduction"
|
||||
xreflabel="Introduction to translations and languages">
|
||||
<title>Introduction</title>
|
||||
<note>
|
||||
<para>Dieser Abschnitt ist in Englisch geschrieben, um
|
||||
internationalen Übersetzern die Arbeit zu erleichtern.</para>
|
||||
</note>
|
||||
5fa26f9a | Moritz Bunkus | <para>This section describes how localization packages in kivitendo
|
||
7ee506b3 | Moritz Bunkus | are built. Currently the only language fully supported is German, and
|
||
since most of the internal messages are held in English the English
|
||||
version is usable too.</para>
|
||||
<para>A stub version of French is included but not functunal at this
|
||||
point.</para>
|
||||
</sect2>
|
||||
dbda14c2 | Moritz Bunkus | <sect2 id="translations-languages.character-set"
|
||
xreflabel="Character set">
|
||||
<title>Character set</title>
|
||||
<para>All files included in a language pack must use UTF-8 as their encoding.</para>
|
||||
</sect2>
|
||||
7ee506b3 | Moritz Bunkus | <sect2 id="translations-languages.file-structure"
|
||
xreflabel="File structure">
|
||||
<title>File structure</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>The structure of locales in kivitendo is:</para>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <programlisting>kivitendo/locale/<langcode>/</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>where <langcode> stands for an abbreviation of the
|
||||
language package. The builtin packages use two letter <ulink
|
||||
url="http://en.wikipedia.org/wiki/ISO_639-1">ISO 639-1</ulink> codes,
|
||||
but the actual name is not relevant for the program and can easily be
|
||||
extended to <ulink
|
||||
url="http://en.wikipedia.org/wiki/IETF_language_tag">IETF language
|
||||
tags</ulink> (i.e. "en_GB"). In fact the original language packages
|
||||
from SQL Ledger are named in this way.</para>
|
||||
<para>In such a language directory the following files are
|
||||
recognized:</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>LANGUAGE</term>
|
||||
<listitem>
|
||||
<para>This file is mandatory.</para>
|
||||
<para>The <filename>LANGUAGE</filename> file contains the self
|
||||
descripted name of the language. It should contain a native
|
||||
representation first, and in parenthesis an english translation
|
||||
after that. Example:</para>
|
||||
<programlisting>Deutsch (German)</programlisting>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>all</term>
|
||||
<listitem>
|
||||
<para>This file is mandatory.</para>
|
||||
<para>The central translation file. It is essentially an inline
|
||||
Perl script autogenerated by <command>locales.pl</command>. To
|
||||
generate it, generate the directory and the two files mentioned
|
||||
above, and execute the following command:</para>
|
||||
<programlisting>scripts/locales.pl <langcode></programlisting>
|
||||
<para>Otherwise you can simply copy one of the other languages.
|
||||
You will be told how many are missing like this:</para>
|
||||
<programlisting>$ scripts/locales.pl en
|
||||
English - 0.6% - 2015/2028 missing</programlisting>
|
||||
<para>A file named "<filename>missing</filename>" will be
|
||||
generated and can be edited. You can also edit the
|
||||
"<filename>all</filename>" file directly. Edit everything you
|
||||
like to fit the target language and execute
|
||||
<command>locales.pl</command> again. See how the missing words
|
||||
get fewer.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>Num2text</term>
|
||||
<listitem>
|
||||
<para>Legacy code from SQL Ledger. It provides a means for
|
||||
numbers to be converted into natural language, like
|
||||
<literal>1523 => one thousand five hundred twenty
|
||||
three</literal>. If you want to provide it, it must be inlinable
|
||||
Perl code which provides a <function>num2text</function> sub. If
|
||||
an <function>init</function> sub exists it will be executed
|
||||
first.</para>
|
||||
<para>Only used in the check and receipt printing module.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>special_chars</term>
|
||||
<listitem>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo comes with a lot of interfaces to different
|
||
7ee506b3 | Moritz Bunkus | formats, some of which are rather picky with their accepted
|
||
charset. The <filename>special_chars</filename> file contains a
|
||||
listing of chars not suited for different file format and
|
||||
provides substitutions. It is written in "Simple Ini" style,
|
||||
containing a block for every file format.</para>
|
||||
<para>First entry should be the order of substitution for
|
||||
entries as a whitespace separated list. All entries are
|
||||
interpolated, so <literal>\n</literal>, <literal>\x20</literal>
|
||||
and <literal>\\</literal> all work.</para>
|
||||
<para>After that every entry is a special char that should be
|
||||
translated when writing text into such a file.</para>
|
||||
<para>Example:</para>
|
||||
<programlisting>[Template/XML]
|
||||
order=& < > \n
|
||||
&=&amp;
|
||||
<=&lt;
|
||||
>=&gt;
|
||||
\n=<br></programlisting>
|
||||
<para>Note the importance of the order in this example.
|
||||
Substituting < and > befor & would lead to $gt; become
|
||||
&amp;gt;</para>
|
||||
<para>For a list of valid formats, see the German
|
||||
<filename>special_chars</filename> entry. As of this writing the
|
||||
following are recognized:</para>
|
||||
<programlisting>HTML
|
||||
URL@HTML
|
||||
Template/HTML
|
||||
Template/XML
|
||||
Template/LaTeX
|
||||
Template/OpenDocument
|
||||
filenames</programlisting>
|
||||
<para>The last of which is very machine dependant. Remember that
|
||||
a lot of characters are forbidden by some filesystems, for
|
||||
exmaple MS Windows doesn't like ':' in its files where Linux
|
||||
doesn't mind that. If you want the files created with your
|
||||
language pack to be portable, find all chars that could cause
|
||||
trouble.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>missing</term>
|
||||
<listitem>
|
||||
<para>This file is not a part of the language package
|
||||
itself.</para>
|
||||
<para>This is a file generated by
|
||||
<command>scripts/locales.pl</command> while processing your
|
||||
locales. It's only to have the missing entries singled out and
|
||||
does not belong to a language package.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>lost</term>
|
||||
<listitem>
|
||||
<para>This file is not a part of the language package
|
||||
itself.</para>
|
||||
<para>Another file generated by
|
||||
<command>scripts/locales.pl</command>. If for any reason a
|
||||
translation does not appear anymore and can be deleted, it gets
|
||||
moved here. The last 50 or so entries deleted are saved here in
|
||||
case you made a typo, so that you don't have to translate
|
||||
everything again. If a tranlsation is missing, the lost file is
|
||||
checked first. If you maintain a language package, you might
|
||||
want to keep this safe somewhere.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect2>
|
||||
90baed86 | Moritz Bunkus | </sect1>
|
||
7ee506b3 | Moritz Bunkus | |||
d1564e8a | Moritz Bunkus | <sect1 id="devel.testsuite">
|
||
<title>Die kivitendo-Test-Suite</title>
|
||||
<sect2 id="devel.testsuite.intro">
|
||||
<title>Einführung</title>
|
||||
<para>kivitendo enthält eine Suite für automatisierte Tests. Sie basiert auf dem Standard-Perl-Modul <literal>Test::More</literal>.</para>
|
||||
<para>Die grundlegenden Fakten sind:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>Alle Tests liegen im Unterverzeichnis <filename>t/</filename>.</para></listitem>
|
||||
d6d11ff9 | Bernd Bleßmann | <listitem><para>Ein Script (bzw. ein Test) in <filename>t/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
|
||
d1564e8a | Moritz Bunkus | |||
<listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
|
||||
d6d11ff9 | Bernd Bleßmann | <listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>t/</filename>, deren
|
||
d1564e8a | Moritz Bunkus | Dateiname auf <literal>.t</literal> endet.</para></listitem>
|
||
</itemizedlist>
|
||||
</sect2>
|
||||
<sect2 id="devel.testsuite.prerequisites">
|
||||
<title>Voraussetzungen</title>
|
||||
<para>Für die Ausführung werden neben den für kivitendo eh schon benötigten Module noch weitere Perl-Module benötigt. Diese sind:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para><literal>Test::Deep</literal> (Debian-Paketname: <literal>libtest-deep-perl</literal>; Fedora Core:
|
||||
6066c769 | Moritz Bunkus | <literal>perl-Test-Deep</literal>; openSUSE: <literal>perl-Test-Deep</literal>)</para></listitem>
|
||
42dfa9a7 | Moritz Bunkus | <listitem><para><literal>Test::Exception</literal> (Debian-Paketname: <literal>libtest-exception-perl</literal>; Fedora Core:
|
||
<literal>perl-Test-Exception</literal>; openSUSE: <literal>perl-Test-Exception</literal>)</para></listitem>
|
||||
<listitem><para><literal>Test::Output</literal> (Debian-Paketname: <literal>libtest-output-perl</literal>; Fedora Core:
|
||||
<literal>perl-Test-Output</literal>; openSUSE: <literal>perl-Test-Output</literal>)</para></listitem>
|
||||
d575e646 | Moritz Bunkus | <listitem><para><literal>Test::Harness</literal> 3.0.0 oder höher. Dieses Modul ist ab Perl 5.10.1 Bestandteil der
|
||
Perl-Distribution und kann für frühere Versionen aus dem <ulink url="http://www.cpan.org">CPAN</ulink> bezogen
|
||||
werden.</para></listitem>
|
||||
44ab47a7 | Moritz Bunkus | <listitem><para><literal>LWP::Simple</literal> aus dem Paket <literal>libwww-perl</literal> (Debian-Panetname:
|
||
<literal>libwww-perl</literal>; Fedora Core: <literal>perl-libwww-perl</literal>; openSUSE:
|
||||
<literal>perl-libwww-perl</literal>)</para></listitem>
|
||||
<listitem><para><literal>URI::Find</literal> (Debian-Panetname: <literal>liburi-find-perl</literal>; Fedora Core:
|
||||
<literal>perl-URI-Find</literal>; openSUSE: <literal>perl-URI-Find</literal>)</para></listitem>
|
||||
d1564e8a | Moritz Bunkus | </itemizedlist>
|
||
d5d805a7 | Moritz Bunkus | |||
<para>Weitere Voraussetzung ist, dass die Testsuite ihre eigene Datenbank anlegen kann, um Produktivdaten nicht zu gefährden. Dazu
|
||||
müssen in der Konfigurationsdatei im Abschnit <literal>testing/database</literal> Datenbankverbindungsparameter angegeben
|
||||
werden. Der hier angegebene Benutzer muss weiterhin das Recht haben, Datenbanken anzulegen und zu löschen.</para>
|
||||
d1564e8a | Moritz Bunkus | </sect2>
|
||
<sect2 id="devel.testsuite.execution">
|
||||
<title>
|
||||
Existierende Tests ausführen
|
||||
</title>
|
||||
<para>Es gibt mehrere Möglichkeiten zum Ausführen der Tests: entweder, man lässt alle Tests auf einmal ausführen, oder man führt
|
||||
d5d805a7 | Moritz Bunkus | gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.pl</filename>.</para>
|
||
d1564e8a | Moritz Bunkus | |||
d5d805a7 | Moritz Bunkus | <para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.pl</filename> ohne weitere Parameter aus
|
||
d1564e8a | Moritz Bunkus | dem kivitendo-Basisverzeichnis heraus ausführen.</para>
|
||
d5d805a7 | Moritz Bunkus | <para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.pl</filename>. Beispielsweise:</para>
|
||
d1564e8a | Moritz Bunkus | |||
d5d805a7 | Moritz Bunkus | <programlisting>t/test.pl t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
|
||
d1564e8a | Moritz Bunkus | </sect2>
|
||
<sect2 id="devel.testsuite.meaning_of_scripts">
|
||||
<title>
|
||||
Bedeutung der verschiedenen Test-Scripte
|
||||
</title>
|
||||
<para>Die Test-Suite umfasst Tests sowohl für Funktionen als auch für Programmierstil. Einige besonders zu erwähnende, weil auch
|
||||
während der Entwicklung nützliche Tests sind:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para><filename>t/001compile.t</filename> -- compiliert alle Quelldateien und bricht bei Fehlern sofort ab</para></listitem>
|
||||
<listitem><para><filename>t/002goodperl.t</filename> -- überprüft alle Perl-Dateien auf Anwesenheit von '<literal>use strict</literal>'-Anweisungen</para></listitem>
|
||||
<listitem><para><filename>t/003safesys.t</filename> -- überprüft Aufrufe von <function>system()</function> und <function>exec()</function> auf Gültigkeit</para></listitem>
|
||||
<listitem><para><filename>t/005no_tabs.t</filename> -- überprüft, ob Dateien Tab-Zeichen enthalten</para></listitem>
|
||||
<listitem><para><filename>t/006spelling.t</filename> -- sucht nach häufigen Rechtschreibfehlern</para></listitem>
|
||||
<listitem><para><filename>t/011pod.t</filename> -- überprüft die Syntax von Dokumentation im POD-Format auf Gültigkeit</para></listitem>
|
||||
</itemizedlist>
|
||||
<para>Weitere Test-Scripte überprüfen primär die Funktionsweise einzelner Funktionen und Module.</para>
|
||||
</sect2>
|
||||
<sect2 id="devel.testsuite.create_new">
|
||||
<title>
|
||||
Neue Test-Scripte erstellen
|
||||
</title>
|
||||
<para>Es wird sehr gern gesehen, wenn neue Funktionalität auch gleich mit einem Test-Script abgesichert wird. Auch bestehende
|
||||
Funktion darf und soll ausdrücklich nachträglich mit Test-Scripten abgesichert werden.</para>
|
||||
<sect3 id="devel.testsuite.ideas_for_non_function_tests">
|
||||
<title>
|
||||
Ideen für neue Test-Scripte, die keine konkreten Funktionen testen
|
||||
</title>
|
||||
d6d11ff9 | Bernd Bleßmann | <para> Ideen, die abgesehen von Funktionen noch nicht umgesetzt wurden:</para>
|
||
d1564e8a | Moritz Bunkus | |||
<itemizedlist>
|
||||
<listitem><para>Überprüfung auf fehlende symbolische Links</para></listitem>
|
||||
<listitem><para>Suche nach Nicht-ASCII-Zeichen in Perl-Code-Dateien (mit gewissen Einschränkungen wie das Erlauben von deutschen Umlauten)</para></listitem>
|
||||
<listitem><para>Test auf DOS-Zeilenenden (\r\n anstelle von nur \n)</para></listitem>
|
||||
<listitem><para>Überprüfung auf Leerzeichen am Ende von Zeilen</para></listitem>
|
||||
<listitem><para>Test, ob alle zu übersetzenden Strings in <filename>locale/de/all</filename> vorhanden sind</para></listitem>
|
||||
<listitem><para>Test, ob alle Webseiten-Templates in <filename>templates/webpages</filename> mit vom Perl-Modul <literal>Template</literal> compiliert werden können</para></listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
<sect3 id="devel.testsuite.directory_and_test_names">
|
||||
<title>
|
||||
Konvention für Verzeichnis- und Dateinamen
|
||||
</title>
|
||||
<para>Es gibt momentan eine wenige Richtlinien, wie Test-Scripte zu benennen sind. Bitte die folgenden Punkte als Richtlinie betrachten und ihnen soweit es geht folgen:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>Die Dateiendung muss <filename>.t</filename> lauten.</para></listitem>
|
||||
<listitem><para>Namen sind englisch, komplett klein geschrieben und einzelne Wörter mit Unterstrichten getrennt (beispielsweise
|
||||
<filename>bad_function_params.t</filename>).</para></listitem>
|
||||
d6d11ff9 | Bernd Bleßmann | <listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sein, mit dem sich die Scripte darin befassen
|
||
d1564e8a | Moritz Bunkus | (beispielsweise <filename>background_jobs</filename> für Tests rund um Hintergrund-Jobs).</para></listitem>
|
||
<listitem><para>Test-Scripte sollten einen überschaubaren Bereich von Funktionalität testen, der logisch zusammenhängend ist
|
||||
(z.B. nur Tests für eine einzelne Funktion in einem Modul). Lieber mehrere Test-Scripte schreiben.</para></listitem>
|
||||
</itemizedlist>
|
||||
</sect3>
|
||||
<sect3 id="devel.testsuite.minimal_example">
|
||||
<title>
|
||||
Minimales Skelett für eigene Scripte
|
||||
</title>
|
||||
<para>Der folgenden Programmcode enthält das kleinstmögliche Testscript und kann als Ausgangspunkt für eigene Tests verwendet werden:</para>
|
||||
<programlisting>use Test::More tests => 0;
|
||||
use lib 't';
|
||||
use Support::TestSetup;
|
||||
Support::TestSetup::login();</programlisting>
|
||||
<para>Wird eine vollständig initialisierte kivitendo-Umgebung benötigt (Stichwort: alle globalen Variablen wie
|
||||
<varname>$::auth</varname>, <varname>$::form</varname> oder <varname>$::lxdebug</varname>), so muss in der Konfigurationsdatei
|
||||
<filename>config/kivitendo.conf</filename> im Abschnitt <literal>testing.login</literal> ein gültiger Login-Name eingetragen
|
||||
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>
|
||||
weggelassen werden, was die Ausführungszeit des Scripts leicht verringert.</para>
|
||||
</sect3>
|
||||
</sect2>
|
||||
</sect1>
|
||||
3adb0cb7 | Moritz Bunkus | <sect1 id="devel.style-guide">
|
||
90baed86 | Moritz Bunkus | <title>Stil-Richtlinien</title>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die folgenden Regeln haben das Ziel, den Code möglichst gut les-
|
||
und wartbar zu machen. Dazu gehört zum Einen, dass der Code einheitlich
|
||||
eingerückt ist, aber auch, dass Mehrdeutigkeit so weit es geht vermieden
|
||||
wird (Stichworte "Klammern" oder "Hash-Keys").</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Diese Regeln sind keine Schikane sondern erleichtern allen das
|
||
Leben!</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Jeder, der einen Patch schickt, sollte seinen Code vorher
|
||
überprüfen. Einige der Regeln lassen sich automatisch überprüfen, andere
|
||||
nicht.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <orderedlist>
|
||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Es werden keine echten Tabs sondern Leerzeichen
|
||||
verwendet.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Die Einrückung beträgt zwei Leerzeichen. Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>foreach my $row (@data) {
|
||
7ee506b3 | Moritz Bunkus | if ($flag) {
|
||
# do something with $row
|
||||
}
|
||||
if ($use_modules) {
|
||||
$row->{modules} = MODULE->retrieve(
|
||||
id => $row->{id},
|
||||
date => $use_now ? localtime() : $row->{time},
|
||||
);
|
||||
}
|
||||
$report->add($row);
|
||||
}</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Öffnende geschweifte Klammern befinden sich auf der gleichen
|
||||
Zeile wie der letzte Befehl. Beispiele:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>sub debug {
|
||
7ee506b3 | Moritz Bunkus | ...
|
||
}</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | <para>oder</para>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>if ($form->{item_rows} > 0) {
|
||
7ee506b3 | Moritz Bunkus | ...
|
||
}</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Schließende geschweifte Klammern sind so weit eingerückt wie
|
||||
der Befehl / die öffnende schließende Klammer, die den Block
|
||||
gestartet hat, und nicht auf der Ebene des Inhalts. Die gleichen
|
||||
Beispiele wie bei 3. gelten.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Die Wörter "<function>else</function>",
|
||||
"<function>elsif</function>", "<function>while</function>" befinden
|
||||
sich auf der gleichen Zeile wie schließende geschweifte Klammern.
|
||||
Beispiele:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>if ($form->{sum} > 1000) {
|
||
7ee506b3 | Moritz Bunkus | ...
|
||
} elsif ($form->{sum} > 0) {
|
||||
...
|
||||
} else {
|
||||
...
|
||||
}
|
||||
do {
|
||||
...
|
||||
} until ($a > 0);</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Parameter von Funktionsaufrufen müssen mit runden Klammern
|
||||
versehen werden. Davon nicht betroffen sind interne Perl-Funktionen,
|
||||
und grep-ähnliche Operatoren. Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>$main::lxdebug->message("Could not find file.");
|
||
7ee506b3 | Moritz Bunkus | %options = map { $_ => 1 } grep { !/^#/ } @config_file;</programlisting>
|
||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Verschiedene Klammern, Ihre Ausdrücke und Leerzeichen:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Generell gilt: Hashkeys und Arrayindices sollten nicht durch
|
||
Leerzeichen abgesetzt werden. Logische Klammerungen ebensowenig,
|
||||
Blöcke schon. Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>if (($form->{debug} == 1) && ($form->{sum} - 100 < 0)) {
|
||
7ee506b3 | Moritz Bunkus | ...
|
||
}
|
||||
$array[$i + 1] = 4;
|
||||
3adb0cb7 | Moritz Bunkus | $form->{sum} += $form->{"row_$i"};
|
||
7ee506b3 | Moritz Bunkus | $form->{ $form->{index} } += 1;
|
||
3adb0cb7 | Moritz Bunkus | map { $form->{sum} += $form->{"row_$_"} } 1..$rowcount;</programlisting>
|
||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Mehrzeilige Befehle</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <orderedlist>
|
||
<listitem>
|
||||
<para>Werden die Parameter eines Funktionsaufrufes auf mehrere
|
||||
Zeilen aufgeteilt, so sollten diese bis zu der Spalte eingerückt
|
||||
werden, in der die ersten Funktionsparameter in der ersten Zeile
|
||||
stehen. Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>$sth = $dbh->prepare("SELECT * FROM some_table WHERE col = ?",
|
||
90baed86 | Moritz Bunkus | $form->{some_col_value});</programlisting>
|
||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Ein Spezialfall ist der ternäre Oprator "?:", der am
|
||||
besten in einer übersichtlichen Tabellenstruktur organisiert
|
||||
wird. Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>my $rowcount = $form->{"row_$i"} ? $i
|
||
7ee506b3 | Moritz Bunkus | : $form->{oldcount} ? $form->{oldcount} + 1
|
||
: $form->{rowcount} - $form->{rowbase};</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
</orderedlist>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Kommentare</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <orderedlist>
|
||
<listitem>
|
||||
<para>Kommentare, die alleine in einer Zeile stehen, sollten
|
||||
soweit wie der Code eingerückt sein.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Seitliche hängende Kommentare sollten einheitlich
|
||||
formatiert werden.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Sämtliche Kommentare und Sonstiges im Quellcode ist bitte
|
||||
auf Englisch zu verfassen. So wie ich keine Lust habe,
|
||||
5fa26f9a | Moritz Bunkus | französischen Quelltext zu lesen, sollte auch der kivitendo
|
||
3adb0cb7 | Moritz Bunkus | Quelltext für nicht-Deutschsprachige lesbar sein.
|
||
Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>my $found = 0;
|
||
7ee506b3 | Moritz Bunkus | while (1) {
|
||
last if $found;
|
||||
# complicated check
|
||||
$found = 1 if //
|
||||
}
|
||||
90baed86 | Moritz Bunkus | $i = 0 # initialize $i
|
||
$n = $i; # save $i
|
||||
7ee506b3 | Moritz Bunkus | $i *= $const; # do something crazy
|
||
90baed86 | Moritz Bunkus | $i = $n; # recover $i</programlisting>
|
||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
</orderedlist>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Hashkeys sollten nur in Anführungszeichen stehen, wenn die
|
||||
Interpolation gewünscht ist. Beispiel:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>$form->{sum} = 0;
|
||
$form->{"row_$i"} = $form->{"row_$i"} - 5;
|
||||
7ee506b3 | Moritz Bunkus | $some_hash{42} = 54;</programlisting>
|
||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Die maximale Zeilenlänge ist nicht beschränkt. Zeilenlängen
|
||||
unterhalb von 79 Zeichen helfen unter bestimmten Bedingungen, aber
|
||||
wenn die Lesbarkeit unter kurzen Zeilen leidet (wie zum Biespiel in
|
||||
grossen Tabellen), dann ist Lesbarkeit vorzuziehen.</para>
|
||||
<para>Als Beispiel sei die Funktion
|
||||
<function>print_options</function> aus
|
||||
<filename>bin/mozilla/io.pl</filename> angeführt.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Trailing Whitespace, d.h. Leerzeichen am Ende von Zeilen sind
|
||||
unerwünscht. Sie führen zu unnötigen Whitespaceänderungen, die diffs
|
||||
verfälschen.</para>
|
||||
<para>Emacs und vim haben beide recht einfache Methoden zur
|
||||
Entfernung von trailing whitespace. Emacs kennt das Kommande
|
||||
<command>nuke-trailing-whitespace</command>, vim macht das gleiche
|
||||
manuell über <literal>:%s/\s\+$//e</literal> Mit <literal>:au
|
||||
BufWritePre * :%s/\s\+$//e</literal> wird das an Speichern
|
||||
gebunden.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Es wird kein <command>perltidy</command> verwendet.</para>
|
||||
<para>In der Vergangenheit wurde versucht,
|
||||
<command>perltidy</command> zu verwenden, um einen einheitlichen
|
||||
Stil zu erlangen. Es hat sich aber gezeigt, dass
|
||||
<command>perltidy</command>s sehr eigenwilliges Verhalten, was
|
||||
Zeilenumbrüche angeht, oftmals gut formatierten Code zerstört. Für
|
||||
den Interessierten sind hier die
|
||||
<command>perltidy</command>-Optionen, die grob den beschriebenen
|
||||
Richtlinien entsprechen:</para>
|
||||
<programlisting>-syn -i=2 -nt -pt=2 -sbt=2 -ci=2 -ibc -hsc -noll -nsts -nsfs -asc -dsm
|
||||
7ee506b3 | Moritz Bunkus | -aws -bbc -bbs -bbb -mbl=1 -nsob -ce -nbl -nsbl -cti=0 -bbt=0 -bar -l=79
|
||
-lp -vt=1 -vtc=1</programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | </listitem>
|
||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para><varname>STDERR</varname> ist tabu. Unkonditionale
|
||||
Debugmeldungen auch.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo bietet mit dem Modul <classname>LXDebug</classname>
|
||
3adb0cb7 | Moritz Bunkus | einen brauchbaren Trace-/Debug-Mechanismus. Es gibt also keinen
|
||
Grund, nach <varname>STDERR</varname> zu schreiben.</para>
|
||||
<para>Die <classname>LXDebug</classname>-Methode
|
||||
"<function>message</function>" nimmt als ersten Paramter außerdem
|
||||
eine Flagmaske, für die die Meldung angezeigt wird, wobei "0" immer
|
||||
angezeigt wird. Solche Meldungen sollten nicht eingecheckt werden
|
||||
und werden in den meisten Fällen auch vom Repository
|
||||
zurückgewiesen.</para>
|
||||
</listitem>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Alle neuen Module müssen use strict verwenden.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para><varname>$form</varname>, <varname>$auth</varname>,
|
||
<varname>$locale</varname>, <varname>$lxdebug</varname> und
|
||||
<varname>%myconfig</varname> werden derzeit aus dem main package
|
||||
importiert (siehe <xref linkend="devel.globals" />. Alle anderen
|
||||
Konstrukte sollten lexikalisch lokal gehalten werden.</para>
|
||||
</listitem>
|
||||
90baed86 | Moritz Bunkus | </orderedlist>
|
||
7ee506b3 | Moritz Bunkus | </sect1>
|
||
27f054b7 | Moritz Bunkus | |||
<sect1 id="devel.build-doc" xreflabel="Dokumentation erstellen">
|
||||
3adb0cb7 | Moritz Bunkus | <title>Dokumentation erstellen</title>
|
||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="devel.build-doc.introduction">
|
||
<title>Einführung</title>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Diese Dokumentation ist in <productname>DocBook</productname>
|
||
XML geschrieben. Zum Bearbeiten reicht grundsätzlich ein Text-Editor.
|
||||
Mehr Komfort bekommt man, wenn man einen dedizierten XML-fähigen
|
||||
Editor nutzt, der spezielle Unterstützung für
|
||||
<productname>DocBook</productname> mitbringt. Wir empfehlen dafür den
|
||||
<ulink url="http://www.xmlmind.com/xmleditor/">XMLmind XML
|
||||
Editor</ulink>, der bei nicht kommerzieller Nutzung kostenlos
|
||||
ist.</para>
|
||||
</sect2>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="devel.build-doc.required-software">
|
||
<title>Benötigte Software</title>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Bei <productname>DocBook</productname> ist Prinzip, dass
|
||
ausschließlich die XML-Quelldatei bearbeitet wird. Aus dieser werden
|
||||
dann mit entsprechenden Stylesheets andere Formate wie PDF oder HTML
|
||||
5fa26f9a | Moritz Bunkus | erzeugt. Bei kivitendo übernimmt diese Aufgabe das Shell-Script
|
||
3adb0cb7 | Moritz Bunkus | <command>scripts/build_doc.sh</command>.</para>
|
||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Das Script benötigt zur Konvertierung verschiedene
|
||
5fa26f9a | Moritz Bunkus | Softwarekomponenten, die im normalen kivitendo-Betrieb nicht benötigt
|
||
3adb0cb7 | Moritz Bunkus | werden:</para>
|
||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <itemizedlist>
|
||
<listitem>
|
||||
<para><ulink
|
||||
url="http://www.oracle.com/technetwork/java/index.html">Java</ulink>
|
||||
in einer halbwegs aktuellen Version</para>
|
||||
</listitem>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Das Java-Build-System <ulink
|
||||
url="http://ant.apache.org/">Apache Ant</ulink></para>
|
||||
</listitem>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
<para>Das Dokumentations-System Dobudish für
|
||||
<productname>DocBook</productname> 4.5, eine Zusammenstellung
|
||||
diverser Stylesheets und Grafiken zur Konvertierung von
|
||||
<productname>DocBook</productname> XML in andere Formate. Das
|
||||
Paket, das benötigt wird, ist zum Zeitpunkt der
|
||||
Dokumentationserstellung
|
||||
<filename>dobudish-nojre-1.1.4.zip</filename>, aus auf <ulink
|
||||
url="http://code.google.com/p/dobudish/downloads/list">code.google.com</ulink>
|
||||
bereitsteht.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Apache Ant sowie ein dazu passendes Java Runtime Environment
|
||
sind auf allen gängigen Plattformen verfügbar. Beispiel für
|
||||
Debian/Ubuntu:</para>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>apt-get install ant openjdk-7-jre</programlisting>
|
||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Nach dem Download von Dobudish muss Dobudish im Unterverzeichnis
|
||
<filename>doc/build</filename> entpackt werden. Beispiel unter der
|
||||
Annahme, das <productname>Dobudish</productname> in
|
||||
<filename>$HOME/Downloads</filename> heruntergeladen wurde:</para>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>cd doc/build
|
||
27f054b7 | Moritz Bunkus | unzip $HOME/Downloads/dobudish-nojre-1.1.4.zip</programlisting>
|
||
3adb0cb7 | Moritz Bunkus | </sect2>
|
||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="devel.build-doc.build">
|
||
<title>PDFs und HTML-Seiten erstellen</title>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die eigentliche Konvertierung erfolgt nach Installation der
|
||
benötigten Software mit einem einfachen Aufruf direkt aus dem
|
||||
5fa26f9a | Moritz Bunkus | kivitendo-Installationsverzeichnis heraus:</para>
|
||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <programlisting>./scripts/build_doc.sh</programlisting>
|
||
</sect2>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <sect2 id="devel.build-doc.repository">
|
||
<title>Einchecken in das Git-Repository</title>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Sowohl die XML-Datei als auch die erzeugten PDF- und
|
||
HTML-Dateien sind Bestandteil des Git-Repositories. Daraus folgt, dass
|
||||
nach Änderungen am XML die PDF- und HTML-Dokumente ebenfalls gebaut
|
||||
und alles zusammen in einem Commit eingecheckt werden sollten.</para>
|
||||
27f054b7 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <para>Die "<filename>dobudish</filename>"-Verzeichnisse bzw.
|
||
symbolischen Links gehören hingegen nicht in das Repository.</para>
|
||||
</sect2>
|
||||
27f054b7 | Moritz Bunkus | </sect1>
|
||
7ee506b3 | Moritz Bunkus | </chapter>
|
||
</book>
|