Detlef Sax schrieb:
> seit Jahren benutze ich rechnung.sty
[...]
> Nur eine Rabattfunktion fehlt mir jetzt.
[...]
> Ein - (Minus) vor einem Betrag in einem Artikeleintrag f�hrt zu einem
> Fehler.
Ich bin jetzt nicht so der Rechnungswesensfreak, aber meines
Wissens ist ein Rabatt etwas anderes als eine Rechnungsposition
bzw ein Artikel und wird anders gebucht und in der Rechnung
anders aufgelistet.
Ich weiss nicht, ob es "buchungstechnisch" bei einer Rechnung
korrekt ist, einen Rabatt einfach als "Artikel mit negativem Vorzeichen
beim Einzelpreis" aufzulisten, aber mir w�re dabei nicht wohl.
Nichts desto trotz l��t sich rechnung.sty so patchen, dass als
Gr��enwerte bei den Einzelpreisen von Artikel bzw Positionen
auch negative Zahlen verrechnet werden.
Beispieldokument - f�r copy'n-paste ggf die Nachricht bitte im
"Originalformat" anzeigen lassen :
\documentclass[a4paper]{article}
\usepackage{textcomp}
\usepackage{rechnung}[2001/04/01]
\makeatletter
%----Patch f�r rechnung.sty
% [2001/04/01 v3.10 BMG Rechnungs Style, enhanced by Ulrich Sibiller]
% , heruntergeladen von:
%
http://www.forwiss.uni-passau.de/~berberic/TeX/Rechnung/
%
% , damit Artikelpreise zwecks Gutschrift (bspw Rabatt) auch negative
% Werte haben k�nnen, was aber eigemtlich keine gute Idee ist, da
% Rabatte und Gutschriften anders verbucht und deshalb in einer
% Rechnung anders aufgelistet werden als Artikel.
%
% Es ist schon sp�t abends und ich gebe keinerlei Gew�hr auf
% korrektes Funktionieren des Patches.
% Benutzung auf eigene Gefahr.
% Ich �bernehme keinerlei Haftung.
% Ich war beim Programmieren in mehrerlei Hinsicht _nicht(!!!!!)_
% sorgf�ltig. Bspw hatte ich nicht mehr den Nerv, rechnung.sty
% wirklich tiefgr�ndig zu studieren. Bspw hatte ich nicht mehr
% den Nerv, �ber Arithmetik-Algorithmen nachzudenken...
%
% Es sollten vielleicht noch ein paar versierte Leute meinen
% Patch-Code revidieren/korrigieren/debuggen/rezensieren/
% verifizieren/sonstwie kritisch be�ugen/...
%
\renewcommand*\@readNum[1]{\@RCHtmp=0 \@UDreadA{+}{+}#1\relax}
\newcommand*\@UDreadA[3]{%
\if#3\relax\expandafter\@firstoftwo
\else\expandafter\@secondoftwo\fi
{\multiply\@RCHtmp100 }{%
\if#3.\expandafter\@secondoftwo\else\expandafter\@firstofone\fi
{\if#3,\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi
{\if#2-\expandafter\@secondoftwo\else\expandafter\@firstofone\fi
{\if#3-\expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
{\@UDreadA{-}{-}}%
}{\multiply\@RCHtmp10 \advance\@RCHtmp#1#3\relax\@UDreadA{#1}{-}}%
}%
}{\@tempcnta0 \@UDreadB{#1}}%
}%
}
\newcommand*\@UDreadB[2]{%
\expandafter\if#2\relax\relax\expandafter\@firstoftwo
\else\expandafter\@secondoftwo\fi
{\ifnum \@tempcnta > 2 \@RCHtmp0 \PackageError{rechnung}{mehr als
zwei Nachkommastellen gefunden}%
\else\ifnum \@tempcnta = 2 \else
\ifnum \@tempcnta = 1 \multiply\@RCHtmp10 \else
\multiply\@RCHtmp100
\PackageError{rechnung}{keine Nachkommastellen gefunden}%
\fi
\fi\fi}{%
\advance\@tempcnta1 \multiply\@RCHtmp10
\advance\@RCHtmp#1#2\relax\@UDreadB{#1}%
}%
}%
\renewcommand*\@ArtikelX[5][X]{%
\initRechnung
\advance\@RCHcnt1 \@readNum{#5}\@RCHtmptmp=\@RCHtmp \@readNum{#2}%
\multiply\@RCHtmp\@RCHtmptmp \advance\@RCHtmp\ifnum\@RCHtmp<0-\fi99
\divide\@RCHtmp100 %Aufrunden auf 2 Nachkommastellen.
\@lineBaseX[#1]{\the\@RCHcnt}{#2}{#3}{#4}{#5}%
}
\newcommand*\@RCHWrMinus[1]{-#1-}%
\renewcommand*\@RCHwrite[1]{%
\ifnum#1<0 \expandafter\@RCHWrMinus\fi\@tempcnta\the#1
\@tempcntb\@tempcnta \divide\@tempcnta100 \the\@tempcnta,%
\multiply\@tempcnta100 \advance\@tempcntb-\@tempcnta
\@tempcnta\@tempcntb \divide\@tempcnta10 \the\@tempcnta
\multiply\@tempcnta10 \advance\@tempcntb-\@tempcnta
\the\@tempcntb
}
%------ Ende des Patch ------------------------------------------------
\makeatother
\begin{document}
\Euro %W\"ahrung Euro
\begin{Rechnung}[B]
\Versandkosten{5,95} \Steuersatz{19}{7} \PositionEin \TrennerEin
\Artikel{112}{halbe Br\"otchen}{0,49}
\Artikel[e]{112}{Br\"otchenbelag}{1,50}
\Artikel{112}{Gutschrift Schmiergeld f\"ur Br\"otchen}{-0,42}
\end{Rechnung}
\end{document}
In der durch das Beispieldokument ausgegebenen Rechnung steht bei den
Einzelpreisen keine W�hrung dabei. Das ist auch ohne meinen Patch so.
Ulrich