Eine weitere Möglichkeit wäre die Nutzung des [`datatool`][1] Paketes:
\documentclass[parskip=full-,enlargefirstpage=true]{scrlttr2}
\usepackage[T1]{fontenc}
\usepackage{selinput}
\SelectInputMappings{adieresis={ä},germandbls={ß}}
\usepackage[ngerman]{babel}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{numprint}
\nprounddigits{2}
\usepackage[right]{eurosym}
\usepackage{datatool}
\DTLnewdb{rechnung}
\newcommand\Posten[3]{%
\DTLnewrow{rechnung}
\DTLnewdbentry{rechnung}{Bezeichnung}{#1}
\DTLnewdbentry{rechnung}{Anzahl}{#2}
\DTLnewdbentry{rechnung}{EP}{#3}
{\dtlexpandnewvalue
\FPeval\fpresult{round(#2*#3)(2)}
\DTLnewdbentry{rechnung}{GP}{\fpresult}
}
}
\newcommand\mwst{}
\newenvironment{rechnung}[1]{%
\renewcommand\mwst{#1}%
\DTLcleardb{rechnung}%
}{%
%\DTLsumforkeys{rechnung}{GP}{\Zwischensumme}% liefert Fehler bei Zwischensummen ab 1000
% Alternative
\def\Zwischensumme{0}%
\DTLforeach*{rechnung}{\gp=GP}{\FPeval\Zwischensumme{\Zwischensumme+\gp}}
\DTLforeach*{rechnung}{\gp=GP}{\FPeval\Zwischensumme{\Zwischensumme+\gp}}%
%
\FPeval\MWSt{round(\mwst*\Zwischensumme/100)(2)}%
\FPeval\Summe{round(\Zwischensumme+\MWSt)(2)}%
\xdef\Summe{\Summe}%
\par\centering
\begin{tabularx}{\textwidth}{Xrrr}
\toprule
Bezeichnung&Anzahl&Einzelpreis&Gesamtpreis
\DTLforeach*{rechnung}{\bez=Bezeichnung,\anz=Anzahl,\ep=EP,\gp=GP}{%
\DTLiffirstrow{\\\midrule}{\\}%
\bez&\npnoround\numprint{\anz}\nprounddigits{2}&\numprint{\ep}&\numprint{\gp}%
}\\
\midrule
\if\mwst0\else
Zwischensumme&&&\numprint{\Zwischensumme}\\
Mehrwertsteuer (\mwst\,\%)&&&\numprint{\MWSt}\\
\midrule
\fi
Summe&&&\numprint{\Summe}\\
\bottomrule
\end{tabularx}
\par
}
\setkomavar{fromname}{Max Mustermann}
\setkomavar{fromaddress}{Musterstraße 1\\12345 Musterstadt}
\newkomavar{bank}
\setkomavar{bank}{Meine Bank\\BLZ 123 456 78\\Kontonummer 123 456 789 00}
\renewcommand\raggedsignature{\raggedright}
\begin{document}
\begin{letter}{Firma Freundlich\\Rechnungstraße 12\\45678 Ortsname}
\setkomavar{invoice}{xxyyzz-2013}
\opening{Sehr geehrte Damen und Herren,}
hiermit berechnen wir
\begin{rechnung}{19}
\Posten{Material}{2}{24.95}
\Posten{weiteres Material}{8}{18}
\Posten{Arbeitsstunden}{0.75}{30.50}
\end{rechnung}
Bitte überweisen Sie den Rechnungsbetrag von \EUR{\numprint{\Summe}} unter Angabe von Rechnungsnummer und -datum auf das folgende Konto:
\usekomavar{bank}
\closing{Mit freundlichen Grüßen}
\end{letter}
\end{document}
![alt text][2]
[1]: http://www.ctan.org/pkg/datatool
[2]: http://texwelt.de/wissen/upfiles/rechnung.png