Bei Positionsbeträgen ab 1.000,00 erhält man die im Titel genannte Fehlermeldung des fp-Pakets. Als deren Folge funktioniert die USt-Berechnung nicht mehr korrekt. Hat jemand eine Lösung? 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[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}% \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{Arbeitsstunden}{10}{100.00} \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} |
Da scheint irgendetwas bei Open in Online-Editor
\def\Zwischensumme{0}% \DTLforeach*{rechnung}{\gp=GP}{\FPeval\Zwischensumme{\Zwischensumme+\gp}}% Code: 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[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}} % \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{Arbeitsstunden}{10}{100.00} \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} beantwortet 02 Jun '15, 16:11 esdd Da ich ungern einen neuen Thread wegen desselben Themas beginnen möchte, schließe ich nun noch eine Folgefrage an. Wie kommt es, dass im nachfolgenden Beispiel die Zahlenausrichtung nach der Zweiten Position nicht mehr mit den nachfolgenden Zahlen aus der Spalte GP funktioniert und dies scheinbar nur deshalb, weil zusätzlich noch das hyperref Paket geladen wurde?
(04 Jun '15, 02:01)
TeX-Newb
1
@TeX-Newb Ich habe Deine "Antwort" in einen Kommentar umgewandelt. Das ist hier etwas anders als in Foren: als Antworten werden hier nur Beiträge betrachtet, die die eigentliche Frage beantworten. Alles andere sind Kommentare zu Fragen oder Antworten. In dem Fall fehlte nur einfach ein
(04 Jun '15, 15:57)
esdd
@esdd ich bin nun im Laufe der Arbeit mit Deiner tollen Lösung noch auf folgendes/n Problem bzw. Erweiterungswunsch gestoßen: Könnte man den Posten Befehl noch um ein optionales viertes Argument ergänzen, um damit in gewissen Fällen manuell die Summe der jeweiligen Zeile setzen zu können, beispielsweise in Fällen, in denen keine Anzahl bzw. kein EP angegeben werden sollen? Ich habe schon etwas mit ifthenelse-Konstrukten herumexperimentiert, bin bislang leider erfolglos geblieben. Ich hoffe, dass meine Frage als Kommentar i.O. ist; wollte kein neues Tonic deswegen aufmachen. Vielen Dank!
(15 Aug '15, 20:26)
TeX-Newb
@TeX-Newb: Das ist eigentlich eine neue Frage und sollte auch als solche gestellt werden, was ich hiermit getan habe.
(15 Aug '15, 21:03)
saputello
|
datatool benutzt in Zahlen ein Komma, um tausender Gruppen abzutrennen. D.h. deine Zwischensumme ist Open in Online-Editor
\DTLsetnumberchars{}{.} oder deine Zwischensumme erstmal in ein für fp verdauliches Format konvertieren: Open in Online-Editor
\DTLsumforkeys{rechnung}{GP}{\Zwischensumme}% \DTLconverttodecimal\Zwischensumme\fpZwischensumme \FPeval\MWSt{round(\mwst*\fpZwischensumme/100)(2)}% \FPeval\Summe{round(\fpZwischensumme+\MWSt)(2)}% Grundsätzlich habe ich aber Zweifel, ob du die Sache richtig angehst. Drei Argumenten (oder vier wenn man das optionale bei der anderen Antwort hinzunimmt) finde ich schon viel. Und was machst du, wenn du Beträge mit anderem Mehrwertsteuersatz aufführen musst? Oder die Einheit bei der Anzahl? Außerdem würde ich empfehlen, das fp-Modul von expl3 zu verwenden. Es ist besser dokumentiert und wird auch gewartet. beantwortet 16 Aug '15, 18:56 Ulrike Fischer |