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