GEARZ.de

All howtos are without any warranty.
Alle Howtos sind ohne jegliche Gewähr oder Garantie.



Rechnung mit LaTeX (longtable, fp, Positionen, Summe)

Wer Rechnungen mittels einer eigenen Vorlage und nicht mit dem rechnung-Paket erstellen will, der stolpert über das Problem der globalen Definition von Makros. Das Berechnen einzelner Positionen innerhalb einer longtable und das Berechnen der resultierenden Summe ist folgendermaßen möglich:

Benötigt werden folgende Pakete
Der eigentliche Code besteht aus einem Counter und ein paar Makros:
\newcounter{poscounter}
\setcounter{poscounter}{0}
\newcommand{\posSumme}{0.00}

\newcommand{\calcSum}[2]{
	\FPadd{\ressum}{#1}{#2}
	\global\edef\posSumme{\ressum}
}

\newcommand{\calcMult}[2]{
	\FPmul{\resmult}{#1}{#2}
	\FPround{\resmult}{\resmult}{2}
	\global\edef\posMult{\resmult}
}

\newcommand{\pos}[4]{
	\refstepcounter{poscounter}
	\theposcounter & #1 & #2 & #3 \calcMult{#3}{#4}\calcSum{\posSumme}{\posMult} & #4 & \posMult \\
}
	

Mittels dieser Makros können innerhalb der Tabelle einzelne Positionen definiert werden, aus denen dann anhand des angegebenen Einzelpreises und der Anzahl der Wert der Position errechnet wird. Aus allen Werten der Positionen wird eine Summe gebildet, die am Ende der Tabelle erscheint. Alle Werte werden anhand der Dezimalzeichen ausgerichtet.

Es gibt keine Prüfung auf fehlerhafte Eingaben und die Ausgabe einer Zwischensumme für den Seitenumbruch ist auf diesem Wege nicht möglich. Lösungsansätze dazu siehe hier.

Die Grundform der Tabelle sieht dann folgendermaßen aus:
\footnotesize
\begin{longtable}{rlp{.5\textwidth}D{.}{,}{2}D{.}{,}{2}D{.}{,}{2}} % tablehead (fold)
\toprule
Pos. & Datum & Beschreibung & Anzahl & Einzelpreis & Gesamtpreis \
\midrule
\endhead
\midrule
\multicolumn{6}{c}{\emph{Fortsetzung auf der nächsten Seite}} \
\midrule
\endfoot
\bottomrule
\endlastfoot
% tablehead (end)

\pos{20.11.08} {Lorem ipsum dolor sit amet} {1.00} {42.00}
\pos{21.11.08} {Lorem.} {11.00} {15.50}
\pos{22.11.08} {Foo lorem bar.} {2.00} {68.90}

\midrule
\multicolumn{5}{r}{\textbf{Summe}} & \FPround{\posSumme}{\posSumme}{2} \posSumme \

\end{longtable}
\normalsize