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's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

wikifiziert 15 Aug '15, 21:32


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 pauschal. Diese werte ich dann bei der Erstellung der Tabelle wieder aus:

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}

Beispielrechnung mit pauschalen Posten

Alternativ könnte man natürlich auch eine Markerspalte verwenden oder statt einer Fallunterscheidung in \Posten weitere Befehle wie \PostenPauschal definieren.

Permanenter link

beantwortet 15 Aug '15, 21:02

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 15 Aug '15, 21:05

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×17
×3

gestellte Frage: 15 Aug '15, 21:00

Frage wurde gesehen: 8,712 Mal

zuletzt geändert: 15 Aug '15, 21:32