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, 15:00

saputello's gravatar image

saputello
18.4k22352
Akzeptiert: 89%

wikifiziert 15 Aug '15, 15: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, 15:02

saputello's gravatar image

saputello
18.4k22352

bearbeitet 15 Aug '15, 15:05

Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×11
×3

Frage gestellt: 15 Aug '15, 15:00

Frage wurde angeschaut: 1,611 Mal

Zuletzt aktualisiert: 15 Aug '15, 15:32