kivitendo/doc/dokumentation.xml @ b74b299f
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">
|
||
<title>kivitendo: 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>
|
||
<listitem>
|
||||
5fa26f9a | Moritz Bunkus | <para>im alten Lx-Office-Wiki unter Dokumentation (<ulink
|
||
url="http://wiki.lx-office.org/index.php?title=Installation_Lx-Office_ERP">http://wiki.lx-office.org/index.php?title=Installation_Lx-Office_ERP</ulink>)</para>
|
||||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</itemizedlist>
|
||||
</chapter>
|
||||
6023717e | Moritz Bunkus | <chapter id="config">
|
||
7ee506b3 | Moritz Bunkus | <title>Installation und Grundkonfiguration</title>
|
||
<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>
|
||||
<listitem>
|
||||
cc3ea92a | Moritz Bunkus | <para>Ubuntu 10.04 LTS Lucid Lynx bis 12.10 Oneiric Ocelot</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>Debian 5.0 Lenny und 6.0 Squeeze</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
90baed86 | Moritz Bunkus | <para>openSUSE 11.2 und 11.3</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
<listitem>
|
||||
<para>SuSE Linux Enterprice Server 11</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
5fa26f9a | Moritz Bunkus | <para>Fedora 13 bis 16</para>
|
||
7ee506b3 | Moritz Bunkus | </listitem>
|
||
</itemizedlist>
|
||||
</sect2>
|
||||
<sect2 id="Pakete" xreflabel="Pakete">
|
||||
<title>Pakete</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>Zum Betrieb von kivitendo werden zwingend ein Webserver (meist
|
||
7ee506b3 | Moritz Bunkus | Apache) und ein Datenbankserver (PostgreSQL, mindestens v8.2)
|
||
benötigt.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Zusätzlich benötigt kivitendo die folgenden Perl-Pakete, die
|
||
7ee506b3 | Moritz Bunkus | nicht Bestandteil einer Standard-Perl-Installation sind:</para>
|
||
<itemizedlist>
|
||||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>parent</literal></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 | |||
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 | |||
cc3ea92a | Moritz Bunkus | <listitem><para><literal>Rose::DB::Object</literal></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>
|
||
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>
|
||||
<para>Die zu installierenden Pakete können in den verschiedenen
|
||||
Distributionen unterschiedlich heißen.</para>
|
||||
<para>Für Debian oder Ubuntu benötigen Sie diese Pakete:</para>
|
||||
90baed86 | Moritz Bunkus | <programlisting>apt-get install apache2 postgresql libparent-perl libarchive-zip-perl \
|
||
libdatetime-perl libdbi-perl libdbd-pg-perl libpg-perl \
|
||||
a7121495 | Moritz Bunkus | libemail-address-perl libemail-mime-perl liblist-moreutils-perl libpdf-api2-perl \
|
||
90baed86 | Moritz Bunkus | librose-object-perl librose-db-perl librose-db-object-perl \
|
||
libtemplate-perl libtext-csv-xs-perl libtext-iconv-perl liburi-perl \
|
||||
libxml-writer-perl libyaml-perl libconfig-std-perl \
|
||||
a7121495 | Moritz Bunkus | libparams-validate-perl libjson-perl libclass-accessor-perl \
|
||
libnet-sslglue-perl libnet-smtp-ssl-perl</programlisting>
|
||||
7ee506b3 | Moritz Bunkus | |||
<para>Für Fedora Core benötigen Sie diese Pakete:</para>
|
||||
90baed86 | Moritz Bunkus | <programlisting>yum install httpd postgresql-server perl-parent perl-DateTime \
|
||
a7121495 | Moritz Bunkus | perl-DBI perl-DBD-Pg perl-Email-Address perl-Email-MIME perl-List-MoreUtils \
|
||
90baed86 | Moritz Bunkus | perl-PDF-API2 perl-Rose-Object perl-Rose-DB perl-Rose-DB-Object \
|
||
perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv perl-URI \
|
||||
a7121495 | Moritz Bunkus | perl-XML-Writer perl-YAML perl-Net-SSLGlue perl-Net-SMTP-SSL</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
<para>Für OpenSuSE benötigen Sie diese Pakete:</para>
|
||||
90baed86 | Moritz Bunkus | <programlisting>zypper install apache2 postgresql-server perl-Archive-Zip \
|
||
a7121495 | Moritz Bunkus | perl-DateTime perl-DBI perl-DBD-Pg perl-Email-MIME perl-MailTools perl-List-MoreUtils \
|
||
90baed86 | Moritz Bunkus | perl-PDF-API2 perl-Template-Toolkit perl-Text-CSV_XS perl-Text-Iconv \
|
||
a7121495 | Moritz Bunkus | perl-URI perl-XML-Writer perl-YAML perl-Net-SSLGlue perl-Net-SMTP-SSL</programlisting>
|
||
7ee506b3 | Moritz Bunkus | |||
5fa26f9a | Moritz Bunkus | <para>kivitendo enthält ein Script, mit dem überprüft werden kann, ob
|
||
7ee506b3 | Moritz Bunkus | alle benötigten Perl-Module installiert sind. Der Aufruf lautet wie
|
||
folgt:</para>
|
||||
<programlisting>./scripts/installation_check.pl</programlisting>
|
||||
</sect2>
|
||||
</sect1>
|
||||
<sect1 id="Manuelle-Installation-des-Programmpaketes"
|
||||
xreflabel="Manuelle Installation des Programmpaketes">
|
||||
<title>Manuelle Installation des Programmpaketes</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>Die kivitendo ERP Installationsdatei (kivitendo-erp-2.6.3.tgz) wird
|
||
7ee506b3 | Moritz Bunkus | im Dokumentenverzeichnis des Webservers (z.B.
|
||
<filename>/var/www/html/</filename>,
|
||||
<filename>/srv/www/htdocs</filename> oder
|
||||
<filename>/var/www/</filename>) entpackt:</para>
|
||||
5fa26f9a | Moritz Bunkus | <programlisting>cd /var/www
|
||
tar xvzf kivitendo-erp-2.6.3.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
|
||||
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
|
||
password =
|
||||
[system]
|
||||
dbcharset = UTF-8</programlisting>
|
||||
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>
|
||||
<para>Nutzt man den <link
|
||||
linkend="config.task-server">Taskserver</link> für <link
|
||||
linkend="features.periodic-invoices">wiederkehrende Rechnungen</link>,
|
||||
muss unter <varname>[task_server]</varname> ein Login eines Benutzers
|
||||
5fa26f9a | Moritz Bunkus | angegeben werden, mit dem sich der Taskserver an kivitendo bei der
|
||
3adb0cb7 | Moritz Bunkus | Datenbank anmeldet, die dem Benutzer zugewiesen ist.</para>
|
||
<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">
|
||||
<title>Zeichensätze/die Verwendung von UTF-8</title>
|
||||
b68213ba | root | <para>Bei aktuellen Serverinstallationen braucht man hier meist nicht
|
||
eingreifen</para>
|
||||
<para>Dieses kann überprüft werden: ist das Encoding der Datenbank
|
||||
“template1” “UTF8”, so braucht man nichts weiteres diesbezueglich
|
||||
unternehmen. Zum Testen:
|
||||
<programlisting>su postgres
|
||||
echo '\l' | psql
|
||||
exit </programlisting>
|
||||
3adb0cb7 | Moritz Bunkus | Andernfalls ist es notwendig, einen neuen Datenbankcluster mit
|
||
UTF-8-Encoding anzulegen und diesen zu verwenden. Unter Debian und
|
||||
Ubuntu kann dies z.B. für PostgreSQL 8.2 mit dem folgenden Befehl
|
||||
getan werden:</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
90baed86 | Moritz Bunkus | <programlisting>pg_createcluster --locale=de_DE.UTF-8 --encoding=UTF-8 8.2 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>
|
||||
<para>Wurde PostgreSQL nicht mit UTF-8 als Encoding initialisiert und
|
||||
ist ein Neuanlegen eines weiteren Clusters nicht möglich, so kann
|
||||
5fa26f9a | Moritz Bunkus | kivitendo mit ISO-8859-15 als Encoding betrieben werden.</para>
|
||
7ee506b3 | Moritz Bunkus | |||
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>
|
||||
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
|
||
5fa26f9a | Moritz Bunkus | Alias /kivitendo-erp/ /var/www/kiviteno-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 | |||
3adb0cb7 | Moritz Bunkus | <para>Mit CPAN lässt sie sich die Vorgängerversion wie folgt
|
||
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>
|
||||
<para>Seit mod_fcgid-Version 2.6.3 gelten sehr kleine Grenzen für
|
||||
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>
|
||
<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 bisher nur für die Erzeugung der wiederkehrenden Rechnungen
|
||||
benutzt, wird aber in Zukunft deutlich mehr Aufgaben übertragen
|
||||
bekommen.</para>
|
||||
<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>
|
||
3adb0cb7 | Moritz Bunkus | <varlistentry>
|
||
<term><varname>login</varname></term>
|
||||
7ee506b3 | Moritz Bunkus | |||
3adb0cb7 | Moritz Bunkus | <listitem>
|
||
5fa26f9a | Moritz Bunkus | <para>gültiger kivitendo-Benutzername, der benutzt wird, um die
|
||
3adb0cb7 | Moritz Bunkus | zu verwendende Datenbankverbindung auszulesen. Der Benutzer muss
|
||
in der Administration angelegt werden. Diese Option muss
|
||||
angegeben werden.</para>
|
||||
</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>
|
||||
<title>SystemV-basierende Systeme (z.B. Debian, OpenSuSE, Fedora
|
||||
Core)</title>
|
||||
<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>
|
||||
<para>OpenSuSE und Fedora Core:</para>
|
||||
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
|
||
dc8fb58c | Moritz Bunkus | werden: <command>/etc/init.d/kivitendo-task-server
|
||
90baed86 | Moritz Bunkus | start</command></para>
|
||
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
|
||
dc8fb58c | Moritz Bunkus | werden: <command>service kivitendo-task-server
|
||
90baed86 | Moritz Bunkus | start</command></para>
|
||
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>
|
||||
<para>Beim Task-Server wird der Login-Name des Benutzers, unter dem der
|
||||
Task-Server laufen soll, in die Konfigurationsdatei geschrieben. Hat
|
||||
man mehrere Mandanten muß man auch mehrere Konfigurationsdateien
|
||||
anlegen.</para>
|
||||
<para>Die Konfigurationsdatei ist eine Kopie der Datei kivitendo.conf,
|
||||
wo in der Kategorie [task_server] der gewünschte "login" steht.</para>
|
||||
<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
|
||||
5fa26f9a | Moritz Bunkus | url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</ulink></para>
|
||
7ee506b3 | Moritz Bunkus | </sect2>
|
||
</sect1>
|
||||
<sect1 id="Benutzer--und-Gruppenverwaltung">
|
||||
<title>Benutzer- und Gruppenverwaltung</title>
|
||||
<para>Nach der Installation müssen Benutzer, Gruppen und Datenbanken
|
||||
angelegt werden. Dieses geschieht im Administrationsmenü, das Sie unter
|
||||
folgender URL finden:</para>
|
||||
<para><ulink
|
||||
5fa26f9a | Moritz Bunkus | url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</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>
|
||||
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>
|
||||
<para>Die Basisdaten der Benutzer, die in der Administration
|
||||
eingegeben werden können, werden in einer zweiten Datenbank
|
||||
gespeichert, der bereits erwähnten Authentifizierungsdatenbank. Diese
|
||||
ist also den Produktivdaten enthaltenden Datenbanken vorgeschaltet.
|
||||
5fa26f9a | Moritz Bunkus | Pro kivitendo-Installation gibt es nur eine
|
||
7ee506b3 | Moritz Bunkus | Authentifizierungsdatenbank, aber beliebig viele Datenbanken mit
|
||
Firmendaten.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo kann seinen Benutzern Zugriff auf bestimmte
|
||
7ee506b3 | Moritz Bunkus | Funktionsbereiche erlauben oder verbieten. Wird der Zugriff nicht
|
||
gestattet, so werden der entsprechenden Menüpunkte auch nicht
|
||||
angezeigt. Diese Rechte werden ebenfalls in der
|
||||
Authentifizierungsdatenbank gespeichert.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Um Rechte verteilen zu können, verwendet kivitendo ein
|
||
7ee506b3 | Moritz Bunkus | Gruppen-Prinzip. Einer Gruppe kann der Zugriff auf bestimmte Bereiche
|
||
erlaubt werden. Ein Benutzer wiederum kann Mitglied in einer oder
|
||||
mehrerer Gruppen sein. Der Benutzer hat Zugriff auf alle diejenigen
|
||||
Funktionen, die mindestens einer Gruppe erlaubt sind, in der der
|
||||
Benutzer Mitglied ist.</para>
|
||||
<para>Die allgemeine Reihenfolge, in der Datenbanken, Gruppen und
|
||||
Benutzer angelegt werden sollten, lautet:</para>
|
||||
<orderedlist numeration="arabic">
|
||||
<listitem>
|
||||
<para>Datenbank anlegen</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Gruppen anlegen</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Benutzer anlegen</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>Benutzer den Gruppen zuordnen</para>
|
||||
</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 | |||
5fa26f9a | Moritz Bunkus | <para>Wenn Sie für die kivitendo-Installation nicht Unicode (UTF-8) sondern den europäischen Schriftsatz ISO-8859-15 benutzen
|
||
wollen, so müssen Sie vor dem Anlegen der Datenbank in der Datei <filename>config/kivitendo.conf</filename> die Variable
|
||||
<literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf den Wert ‘<literal>ISO-8859-15</literal>’ setzen.</para>
|
||||
7ee506b3 | Moritz Bunkus | |||
<para>Bitte beachten Sie, dass alle Datenbanken den selben Zeichensatz
|
||||
5fa26f9a | Moritz Bunkus | verwenden müssen, da diese Einstellungen momentan global in kivitendo
|
||
7ee506b3 | Moritz Bunkus | vorgenommen wird und nicht nach Datenbank unterschieden werden kann.
|
||
Auch die Authentifizierungsdatenbank muss mit diesem Zeichensatz
|
||||
angelegt worden sein.</para>
|
||||
</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>
|
||||
<para>Benutzergruppen sind unabhängig von Datenbanken, da sie in der
|
||||
Authentifizierungsdatenbank gespeichert werden. Sie gelten für alle
|
||||
Datenbanken, die in dieser Installation verwaltet werden.</para>
|
||||
</sect2>
|
||||
<sect2 id="Benutzer-anlegen">
|
||||
<title>Benutzer anlegen</title>
|
||||
<para>Beim Anlegen von Benutzern werden für viele Parameter
|
||||
Standardeinstellungen vorgenommen, die den Gepflogenheiten des
|
||||
deutschen Raumes entsprechen.</para>
|
||||
<para>Zwingend anzugeben sind der Loginname sowie die komplette
|
||||
Datenbankkonfiguration. 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>
|
||||
<para>In der Datenbankkonfiguration müssen die Zugriffsdaten einer der
|
||||
eben angelegten Datenbanken eingetragen werden.</para>
|
||||
</sect2>
|
||||
<sect2 id="Gruppenmitgliedschaften-verwalten">
|
||||
<title>Gruppenmitgliedschaften verwalten</title>
|
||||
<para>Nach dem Anlegen von Benutzern und Gruppen müssen Benutzer den
|
||||
Gruppen zugewiesen werden. Dazu gibt es zwei Möglichkeiten:</para>
|
||||
<orderedlist numeration="arabic">
|
||||
<listitem>
|
||||
<para>In der Gruppenverwaltung wählt man eine Gruppe aus. Im
|
||||
folgenden Dialog kann man dann einzeln die Benutzer der Gruppe
|
||||
hinzufügen.</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>In der Gruppenverwaltung wählt man das Tool zur Verwaltung
|
||||
der Gruppenmitgliedschaft. Hier wird eine Matrix angezeigt, die
|
||||
alle im System angelegten Gruppen und Benutzer enthält. Durch
|
||||
Setzen der Häkchen wird der Benutzer in der ausgewählten Zeile der
|
||||
Gruppe in der ausgewählten Spalte hinzugefügt.</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</sect2>
|
||||
<sect2 id="Migration-alter-Installationen">
|
||||
<title>Migration alter Installationen</title>
|
||||
5fa26f9a | Moritz Bunkus | <para>Wenn kivitendo 2.6.3 über eine ältere Version installiert wird,
|
||
7ee506b3 | Moritz Bunkus | in der die Benutzerdaten noch im Dateisystem im Verzeichnis
|
||
5fa26f9a | Moritz Bunkus | <literal>users</literal> verwaltet wurden, so bietet kivitendo die
|
||
7ee506b3 | Moritz Bunkus | Möglichkeit, diese Benutzerdaten automatisch in die
|
||
Authentifizierungsdatenbank zu übernehmen. Dies geschieht, wenn man
|
||||
sich nach dem Update der Installation das erste Mal im
|
||||
5fa26f9a | Moritz Bunkus | Administrationsbereich anmeldet. Findet kivitendo die Datei
|
||
7ee506b3 | Moritz Bunkus | <literal>users/members</literal>, so wird der Migrationsprozess
|
||
gestartet.</para>
|
||||
<para>Der Migrationsprozess ist nahezu vollautomatisch. Alle
|
||||
Benutzerdaten können übernommen werden. Nach den Benutzerdaten bietet
|
||||
5fa26f9a | Moritz Bunkus | kivitendo noch die Möglichkeit an, dass automatisch eine
|
||
7ee506b3 | Moritz Bunkus | Benutzergruppe angelegt wird. Dieser Gruppe wird Zugriff auf alle
|
||
5fa26f9a | Moritz Bunkus | Funktionen von kivitendo gewährt. Alle migrierten Benutzern werden
|
||
Mitglied in dieser Gruppe. Damit wird das Verhalten von kivitendo bis
|
||||
7ee506b3 | Moritz Bunkus | Version 2.4.3 inklusive wiederhergestellt, und die Benutzer können
|
||
sich sofort wieder anmelden und mit dem System arbeiten.</para>
|
||||
</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
|
||||
<literal>libnet-sslglue-perl</literal>, Fedora Core: <literal>perl-Net-SSLGlue</literal>, openSuSE:
|
||||
<literal>perl-Net-SSLGlue</literal></para></listitem>
|
||||
<listitem><para>SSL-Verschlüsselung: Modul <literal>Net::SMTP::SSL</literal> (Debian-Paketname
|
||||
<literal>libnet-smtp-ssl-perl</literal>, Fedora Core: <literal>perl-Net-SMTP-SSL</literal>, openSuSE:
|
||||
<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 | |||
5fa26f9a | Moritz Bunkus | <para>Das Drucksystem von kivitendo benutzt von Haus aus LaTeX Vorlagen.
|
||
7ee506b3 | Moritz Bunkus | Um drucken zu können, braucht der Server ein geeignetes LaTeX System. Am
|
||
einfachsten ist dazu eine <literal>texlive</literal> Installation. Unter
|
||||
Debianoiden Betriebssystemen sind das die Pakete:</para>
|
||||
<para><literal>texlive-latex-base texlive-latex-extra
|
||||
texlive-fonts-recommended</literal></para>
|
||||
<para>Diese hinteren beiden enthalten Bibliotheken und Schriftarten die
|
||||
von den Standardvorlagen verwendet werden.</para>
|
||||
<para>TODO: rpm Pakete.</para>
|
||||
<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>
|
||||
<para>! Package inputenc Error: Unicode char \u8:æ¡ not set up for
|
||||
use with LaTeX. Dieser Fehler tritt auf, wenn sie versuchen mit
|
||||
einer Standardinstallation exotische utf8 Zeichen zu drucken.
|
||||
TeXLive unterstützt von Haus nur romanische Schriften und muss mit
|
||||
diversen Tricks dazu gebracht werden andere Zeichen zu akzeptieren.
|
||||
Adere TeX Systeme wie XeTeX schaffen hier Abhilfe.</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>
|
||||
</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>Weiterhin muss in der Datei
|
||||
5fa26f9a | Moritz Bunkus | <filename>config/kivitendo.conf</filename> die Variable
|
||
7ee506b3 | Moritz Bunkus | <literal>dbcharset</literal> im Abschnitt <literal>system</literal> auf
|
||
die Zeichenkodierung gesetzt werden, die auch bei der Speicherung der
|
||||
Daten in der Datenbank verwendet wird. Diese ist in den meisten Fällen
|
||||
"UTF-8".</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>
|
||||
<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
|
||||
5fa26f9a | Moritz Bunkus | url="http://localhost/kivitendo-erp/admin.pl">http://localhost/kivitendo-erp/admin.pl</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>
|
||||
<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 | |||
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>
|
||||
<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
|
||||
Administrator-Schnittstelle (admin.pl) 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>
|
||||
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>
|
||||
<sect2 id="devel.fcgi.known-issues">
|
||||
<title>Bekannte Probleme</title>
|
||||
<sect3 id="devel.fcgi.known-issues.encoding">
|
||||
<title>Encoding Awareness</title>
|
||||
<para>UTF-8 kodierte Installationen sind sehr anfällig gegen
|
||||
fehlerhfate Encodings unter FCGI. latin9 Installationen behandeln
|
||||
falsch kodierte Zeichen eher unwissend, und geben sie einfach
|
||||
weiter. UTF-8 verweigert bei fehlerhaften Programmpfaden kurzerhand
|
||||
das Ausliefern. Es wird noch daran gearbeitet, alle Fehler da zu
|
||||
beseitigen.</para>
|
||||
</sect3>
|
||||
</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 | |||
3adb0cb7 | Moritz Bunkus | <para>Der alte Mechanismus für SQL-Upgradescripte, der auf einer
|
||
Versionsnummer beruht und dann in sql/Pg-upgrade nach einem Script für
|
||||
diese Versionsnummer sucht, schränkt sehr ein, z.B. was die parallele
|
||||
Entwicklung im stable- und unstable-Baum betrifft.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>Dieser Mechanismus wurde für kivitendo 2.4.1 deutlich erweitert.
|
||
3adb0cb7 | Moritz Bunkus | Es werden weiterhin alle Scripte aus sql/Pg-upgrade ausgeführt.
|
||
Zusätzlich gibt es aber ein zweites Verzeichnis, sql/Pg-upgrade2. 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>Neu sind die Kontrollinformationen, die Abhängigkeiten und
|
||||
Prioritäten definieren können werden, sodass Datenbankscripte zwar in
|
||||
einer sicheren Reihenfolge ausgeführt werden (z.B. darf ein "ALTER
|
||||
TABLE" erst ausgeführt werden, wenn die Tabelle mit "CREATE TABLE"
|
||||
angelegt wurde), diese Reihenfolge aber so flexibel ist, dass man
|
||||
keine Versionsnummern mehr braucht.</para>
|
||||
5fa26f9a | Moritz Bunkus | <para>kivitendo merkt sich dabei, welches der Upgradescripte in
|
||
3adb0cb7 | Moritz Bunkus | sql/Pg-upgrade2 bereits durchgeführt wurde und führt diese nicht
|
||
erneut aus. Dazu dient die Tabelle "schema_info", die bei der
|
||||
Anmeldung automatisch angelegt wird.</para>
|
||||
</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>
|
||
<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 der Zeichensatz
|
||||
"<literal>ISO-8859-15</literal>" angenommen.</para>
|
||||
</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 | |||
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>
|
||||
<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>charset</term>
|
||||
<listitem>
|
||||
<para>This file should be present.</para>
|
||||
<para>The <filename>charset</filename> file describes which
|
||||
charset a language package is written in and applies to all
|
||||
other language files in the package. It is possible to write
|
||||
some language packages without an explicit charset, but it is
|
||||
still strongly recommended. You'll never know in what
|
||||
environment your language package will be used, and neither
|
||||
UTF-8 nor Latin1 are guaranteed.</para>
|
||||
<para>The whole content of this file is a string that can be
|
||||
recognized as a valid charset encoding. Example:</para>
|
||||
<programlisting>UTF-8</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>
|
||||
<listitem><para>Ein Script (bzw. ein Test) in <filename>f/</filename> enthält einen oder mehrere Testfälle.</para></listitem>
|
||||
<listitem><para>Alle Dateinamen von Tests enden auf <literal>.t</literal>. Es sind selbstständig ausführbare Perl-Scripte.</para></listitem>
|
||||
<listitem><para>Die Test-Suite besteht aus der Gesamtheit aller Tests, sprich aller Scripte in <filename>f/</filename>, deren
|
||||
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:
|
||||
<literal>perl-Test-Deep</literal>; openSuSE: <literal>perl-Test-Deep</literal>)</para></listitem>
|
||||
</itemizedlist>
|
||||
</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
|
||||
gezielt einzelne Scripte aus. Für beide Fälle gibt es das Helferscript <filename>t/test.sh</filename>.</para>
|
||||
<para>Will man die komplette Test-Suite ausführen, so muss man einfach nur <filename>t/test.sh</filename> ohne weitere Parameter aus
|
||||
dem kivitendo-Basisverzeichnis heraus ausführen.</para>
|
||||
<para>Um einzelne Test-Scripte auszuführen, übergibt man deren Namen an <filename>t/test.sh</filename>. Beispielsweise:</para>
|
||||
<programlisting>t/test.sh t/form/format_amount.t t/background_job/known_jobs.t</programlisting>
|
||||
</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>
|
||||
<para> Ideen, die abgesehen von Funktions noch nicht umgesetzt wurden:</para>
|
||||
<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>
|
||||
<listitem><para>Unterverzeichnisse sollten grob nach dem Themenbereich benannt sind, mit dem sich die Scripte darin befassen
|
||||
(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>
|