Kann man die Lösung von @esdd auf die Frage FP error: Evaluation results in multiple values! auch so erweitern, dass man beispielsweise pauschale Posten einfügen kann, bei denen man den Gesamtpreis selbst festlegt?
Dieser Frage ist "Community Wiki" markiert.
gefragt 15 Aug '15, 21:00 saputello |
Ja, das geht. Ich gebe dabei den Gesamtpreis als optionales (und deshalb erstes) Argument an und setze quasi als Marker bei den Einträgen in die Datenbank als Anzahl die Zeichenfolge Open in Online-Editor
\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[4][]{% \DTLnewrow{rechnung}% \DTLnewdbentry{rechnung}{Bezeichnung}{#2}% \if\relax\detokenize{#1}\relax \DTLnewdbentry{rechnung}{Anzahl}{#3}% \DTLnewdbentry{rechnung}{EP}{#4}% {\dtlexpandnewvalue \FPeval\fpresult{round(#3*#4)(2)}% \DTLnewdbentry{rechnung}{GP}{\fpresult} } \else \DTLnewdbentry{rechnung}{Anzahl}{pauschal}% \DTLnewdbentry{rechnung}{EP}{#4}% \DTLnewdbentry{rechnung}{GP}{#1}% \fi } \newcommand\mwst{} \newenvironment{rechnung}[1]{% \renewcommand\mwst{#1}% \DTLcleardb{rechnung}% }{% % Alternative \def\Zwischensumme{0}% \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&\ifstr{\anz}{pauschal}{\anz}{\npnoround\numprint{\anz}\nprounddigits{2}}&\ifstr{\anz}{pauschal}{\ep}{\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{Arbeitsstunden}{10}{100.00} \Posten[50.00]{Gute Laune}{1}{50.00} \Posten[50.00]{Know How}{}{unbezahlbar} \Posten[-50.00]{Kaffeepausen}{}{} \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} Alternativ könnte man natürlich auch eine Markerspalte verwenden oder statt einer Fallunterscheidung in beantwortet 15 Aug '15, 21:02 saputello |