Das rechnung Paket V3.30

M G Berberich, Ulrich Sibiller, Tom Kazimiers

2010-03-05

Zusammenfassung Dieses Paket definiert rechnung und rechnung∗ Umgebungen um Rech-

nungen und Bestellungen zu erzeugen.

1 Rechtliches

Da das Paket ohne jegliche Kosten lizenziert wird, besteht keinerlei Gewährleistung. Ich hafte weder für unmittelbar noch mittelbar entstehende Schäden aus der Verwendung des Paketes. Ich stelle das Paket so zur Verfügung, „wie es ist“, ohne irgendeine Gewährleistung, weder ausdrücklich noch implizit, einschließlich, aber nicht begrenzt auf, die Tauglichkeit und Verwendbarkeit für einen bestimmten Zweck. Das volle Risiko bezüglich Qualität und Leistungsfähigkeit liegt bei Ihnen. Sollte das Programm fehlerhaft sein, übernehmen Sie die Kosten für notwendigen Service, Reparatur oder Korrektur.

Die Weitergabe dieses Pakets ist erlaubt solange es vollständig weitergegeben wird. Änderungen an Dateien dieses Pakets sind nur zulässig wenn die Datei vorher umbenannt wird, mein Copyright-Vermerke und der Haftungssausschluß erhalten bleiben und klar ersichtlich ist, daß es sich um eine veränderte Variante handelt.

2 Beschreibung

Rechnung (env.) Die Umgebung Rechnung bzw Bestellung erstellt eine Rechnung oder Bestellung. Bestellung (env.) Die beiden Makros sind identisch, es wird jedoch empfohlen, zur besseren Les-

barkeit das jeweils passende zu verwenden. Im weiteren Text wird nur Rechnung verwendet. Jede Position besteht aus einer Positionsnummer, die automatisch erstellt wird, der Anzahl, der Artikelbeschreibung und dem Einzelpreis des Artikels. Die Preise und die Gesamtsumme werden von Rechnung berechnet. Rechnung hat ein optionales Argument, daß den Typ der Rechnung/Bestellung angibt:

\begin{Rechnung} Eine „Rechnung“ ohne Mehrwertsteuer. Diese Variante eignet sich z. B. zur Erstelllung von Bestellungen.

\begin{Rechnung}[N] Eine Rechnung bei der alle Preise als Nettopreise angegeben sind und bei der die Mehrwertsteuer angegeben und zum Endpreis addiert wird. (zḂ. für gewerbliche Kunden)

\begin{Rechnung}[B] Eine Rechnung bei der alle Preise als Bruttopreise angegeben sind und die enthaltene Mehrwertsteuer ausgewiesen ist. (z. B. für Endverbraucher)

\begin{Rechnung}[K] Eine Rechnung bei der alle Preise als Nettopreise angegeben sind und die Mehrwertsteuer nach §19 UStG nicht ausweisbar ist. (z. B. für Selbstständige im Kleingewerbe)

\begin{Rechnung}[E] Eine Rechnung bei der alle Preise als Nettopreise angegeben sind und die Mehrwertsteuer nach Art. 6 Abs. 1 UStG vom Leistungsempfänger gezahlt wird (z. B. für Innergemeinschaftliche Lieferungen in der EU)

Rechnung∗ (env.) Die Umgebung Rechnung∗ bzw. Bestellung∗ ist zu Rechnung bzw. Bestellung iden-Bestellung∗ (env.) tisch, bis auf die, hier zusätzlich vorhandenen, Artikelnummern. Der Platz für die

Artikelbeschreibungen wird entsprechend kleiner.

\Artikel Mit \Artikel oder \Posten werden die einzelnen Positionen der Rechnung \Posten eingegeben. Es besteht kein Unterschied zwischen den beiden Makros.

\Artikel{�Anzahl�}{ �Artikel�}{ �Einzelpreis�} bzw. bei Rechnung∗ und Bestellung∗: \Artikel{�Anzahl�}{ �Artikelnummer�}{ �Artikel�}{ �Einzelpreis�} \Artikel hat ein optionales Argument, daß es erlaubt für diesen Artikel den ermäßigten Mehrwertsteuersatz auszuwählen. Diese Positionen werden hinter dem Preis mit einem ^{∗} gekennzeichnet und unter der Tabelle wird bei Netto- und Bruttorechnungen eine „Fußnote“ erzeugt. Zum Beispiel:

\Artikel[e]{5}{Der Herr der Ringe}{59,80}

fügt eine Position mit 5 Herr der Ringe zum ermäßigten Mehrwertsteuersatz ein. Mittels dem Makro \ArtikelPrefix{...} kann man jedem Element der Artikel einen Prefix geben. Damit lässt sich beispielsweise die Schriftgröße dieser Auflistung im Ganzen ändern:

\ArtikelPrefix{\small}

\Versandkosten Versandkosten lassen sich mit \Versandkosten{�Preis�} eingeben und bekommen keine Positionsnummer. Es sind auch ermäßigte Versandkosten über den optionalen Parameter [e] möglich, allerdings ist nicht bekannt, ob es sowas überhaupt irgendwo gibt.

\Waehrung Die Währungseinheit, die hinter die Beträge gesetzt wird, ist auf DM voreingestellt. Mit \Waehrung{...} kann eine beliebige andere Währung gesetzt werden, \Waehrung{F} setzt z. B. die Währung auf „F“. Für den Euro gibt es eine Abkürzung \Euro die identisch zu \Waehrung{\texteuro} ist und (falls das textcomp-Paket eingebunden ist) ein € erzeugt.

\Steuersatz Die Steuersätze lassen sich mit \Steuersatz{�Steuersatz 1�}{ �Steuersatz 2�} festlegen. Standardmäßig ist Steuersatz 1 auf 19 und Steuersatz 2 auf 7 eingestellt. Dies entspricht dem Mehrwertsteuersatz von 19% und dem ermäßigtem Mehrwertsteuersatz von 7%.

\Gesamtsumme Nach dem Ende einer Rechnung- bzw. BestellungUmgebung lassen sich die Ge- \Mehrwertsteuer samtsumme und die Mehrwertsteuer noch mit den Makros \Gesamtsumme und

\Mehrwertsteuer in den Text einfügen.

\PositionEin Hiermit läßt sich die Ausgabe der Positionsspalte aktivieren bzw. unterdrücken, \PositionAus da diese nicht immer benötigt wird. Voreingestellt ist \PositionEin Die Makros

können beliebig oft auftreten, es wird jedoch nur das letzte vor dem ersten Artikel beachtet. Sobald ein Artikel angegeben wurde, werden die Makros ignoriert.

\TrennerEin Eine Rechnung sieht oft besser aus, wenn sich keine Trennlinien zwischen den \TrennerAus einzelnen Posten befinden. Da dies aber Geschmackssache ist, kann man die Aus-

gabe von Trennlinien mit den Makros \TrennerEin bzw. \TrennerAus steuern.

Voreinstellung ist \TrennerEin. Die Makros können beliebig oft auftreten, es wird jedoch nur das letzte vor dem ersten Artikel beachtet. Sobald ein Artikel angegeben wurde, kann die Einstellung nicht mehr verändert werden.

\AnzahlEinheit Die Einheit aller nachfolgender Artikel/Posten lassen sich mit \AnzahlEinheit{�Einheit�} festlegen. Die Einheit wird von einem Leerzeichen getrennt hinter die Anzahl eingefügt. Standardmäßig ist die keine Einheit gewählt. Das Makro kann beliebig oft auftreten. Dabei beeinflusst die jeweile Definition immer nur die nachfolgenden Artikel/Posten. Dies kann verwendet werden, um unterschiedlichen Artikeln/Posten unterschiedliche Einheiten zu geben.

\TausenderTrennzeichenEin Große Zahlenwerte sind oft einfacher zu lesen, wenn Tausendergruppen sepa- \TausenderTrennzeichenAus riert dargestellt werden. In der deutschen Sprache geschicht dies üblicherweise

durch einen Punkt, in anderen Regionen kann dies aber auch ein Komma oder ein kleines Leerzeichen sein. Hier wird das Paket siunitx genutzt, mit einer Standardkofiguration mit Tauserderpunkt. Die Makros \TausenderTrennzeichenEin und \TausenderTrennzeichenAus erlauben es, diese Zahlendarstellung ein- bzw. auszuschalten. Voreinstellung ist \TausenderTrennzeichenEin. Mit dem Makro \TausenderTrennzeichen kann ein alternatives Trennzeichen gewählt werden, selbiges ist auch direkt mittels \sisetup möglich. Die Makros können beliebig oft auftreten, es wird jedoch nur das letzte vor dem ersten Artikel beachtet. Sobald ein Artikel angegeben wurde, kann die Einstellung nicht mehr verändert werden.

3 Beispiele

3.1 Bestellung ohne Artikelnummern

Dieses Beispiel demonstriert, daß eine Vielzahl von Textauszeichnungs- und Formatierungsmöglichkeiten innerhalb einer Rechnung-Umgebung verwendet werden kann.

 \begin{Rechnung}
 \Artikel{1}{Der Herr der Ringe
   \begin{enumerate}
     \item Die Gefährten
     \item Die zwei Türme
     \item Die Rückkehr des Königs
     \end{enumerate}
     John Ronald R. Tolkien\\
     \scriptsize Taschenbuch, Erschienen 1972}{59,80}
 \Artikel{4}{\textbf{Der kleine Hobbit}\\
   \textit{John Ronald R. Tolkien}, Taschenbuch, Erschienen 1995}{12,90}
 \Versandkosten{9,90}
 \end{Rechnung}
 \noindent Ein Verrechnungsscheck über \Gesamtsumme\ liegt bei.

Pos  Anzahl Beschreibung  Einzelpreis  Gesamtpreis

1 1 Der Herr der Ringe

1. Die Gefährten

2. Die zwei Türme

3. Die Rückkehr des Königs

John Ronald R. Tolkien

Taschenbuch, Erschienen 1972

59,80 € 59,80 €

2 4 Der kleine Hobbit John Ronald R. Tolkien, Taschenbuch, Erschienen 1995

12,90 € 51,60 €

1 Versandkosten  9,90 €  9,90 €

Summe 121,30 €

Ein Verrechnungsscheck über 121,30 € liegt bei.

3.2 Bestellung mit Artikelnummern

\begin{Rechnung*}
\Artikel{1}{3345765}{The \TeX-Book von Donald E. Knuth}{85,47}
\Artikel{1500}{879847}{Büroklammern}{0,03}
\Versandkosten{12,95}
\end{Rechnung*}

Pos  Anzahl  Art. Nr. Beschreibung  Einzelpreis  Gesamtpreis
1  1  3345765 The TEX-Book

von Donald E. Knuth

85,47 € 85,47 €

2  1500  879847 Büroklammern  0,03 €  45,00 €
1  Versandkosten  12,95 €  12,95 €

Summe 143,42 €

3.3 Rechnung mit Nettopreisen und Mehrwertsteuer

\begin{Rechnung}[N]
\Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{79,88}
\Artikel{20}{Erdnüße}{0,99}
\Versandkosten{10,00}
\end{Rechnung}
\noindent Im Betrag von \Gesamtsumme\ sind also
\Mehrwertsteuer\ Mehrwertsteuer enthalten.

Pos  Anzahl Beschreibung  Einzelpreis  Gesamtpreis

1 1 Donald E. Knuth: The TEX-Book

79,88 € 79,88 €^{∗}
2  20 Erdnüsse  0,85 €  17,00 €
1 Versandkosten  10,00 €  10,00 €

Nettosumme 106,88 € zzgl. 7 % MwSt. 5,59 € zzgl. 19 % MwSt. 5,13 €

Summe 117,60 €

∗ Artikel mit 7 % Mehrwertsteuer

Im Betrag von 117,60 € sind also 10,72 € Mehrwertsteuer enthalten.

3.4 Rechnung mit Nettopreisen und Mehrwertsteuer, ohne Trennlinien und Positionsnummern

\begin{Rechnung}[N]
\PositionAus
\TrennerAus
\Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{79,88}
\Artikel{20}{Erdnüße}{0,99}
\Versandkosten{10,00}
\end{Rechnung}
\noindent Im Betrag von \Gesamtsumme\ sind also
\Mehrwertsteuer\ Mehrwertsteuer enthalten.

Anzahl Beschreibung  Einzelpreis  Gesamtpreis
1 Donald E. Knuth: The TEX-Book  79,88 €  79,88 €^{∗}
20 Erdnüsse  0,85 €  17,00 €
1 Versandkosten  10,00 €  10,00 €

Nettosumme 106,88 € zzgl. 7 % MwSt. 5,59 € zzgl. 19 % MwSt. 5,13 €

Summe 117,60 €

∗ Artikel mit 7 % Mehrwertsteuer

Im Betrag von 117,60 € sind also 10,72 € Mehrwertsteuer enthalten.

3.5 Rechnung mit Bruttopreisen und ausgewiesener Mehrwertsteuer

Hier mal ein Beispiel mit EUR:

\Euro
\begin{Rechnung}[B]
\Artikel[e]{1}{Donald E. Knuth: The \TeX-Book}{42,73}
\Artikel{20}{Erdnüsse}{0,49}
\Versandkosten{5,80}
\end{Rechnung}

Pos  Anzahl Beschreibung  Einzelpreis  Gesamtpreis

1 1 Donald E. Knuth: The TEX-Book

42,73 € 42,73 €^{∗}
2  20 Erdnüsse  0,49 €  9,80 €
1 Versandkosten  5,80 €  5,80 €

Summe 58,33 € inkl. erm. MwSt. 7 % 2,80 € inkl. 19 % MwSt 2,49 €

∗ Artikel mit 7 % Mehrwertsteuer

4 L^{A}TEX-Code

4.1 Deklarationen

Einige Zähler für Position, Gesamtsumme, Mehrwertsteuer und zur Parameterübergabe und temporäre Daten

 1 \newcount\@RCHcnt \newcount\@RCHsum \newcount\@RCHtmp
 2 \newcount\@RCHmwst \newcount\@RCHmwsti \newcount\@RCHmwstii
 3 \newcount\@RCHtmptmp \newcount\@RCHabschln \newcount\@RCHabschlb
 4 \newcount\@RCHabschlmwst

Die Dimensionen der Spalten

 5 \newdimen\@RCHPosWidth
 6 \newdimen\@RCHAnzWidth
 7 \newdimen\@RCHArtnumWidth
 8 \newdimen\@RCHArtWidth
 9 \newdimen\@RCHEinzelWidth
10 \newdimen\@RCHGesamtWidth
11 \@RCHPosWidth=1.3em%
12 \@RCHAnzWidth=3.2em%
13 \@RCHArtnumWidth=5em%
14 \@RCHEinzelWidth=4.8em%
15 \@RCHGesamtWidth=6.1em%

Die Standardeinstellung zur Tausendergruppierung: Tausenderpunkt ab vier Ziffern. Dies kann in der eigenen Rechnung mittels \sisetup überschrieben werden.

16 \sisetup{
17 detect-all,
18 locale=DE,
19 group-separator={.},
20 group-digits=integer,
21 group-minimum-digits=4,
22 input-ignore={.}

23 }

\@RCHerm Ein Schalter der das Auftauchen von ermäßigtem MwSt-Satz anzeigt.

24 \newif\if@RCHerm

\@RCHabschl Ein Schalter der das Anzeigen der Abschlagsberechnung beeinflusst

25 \newif\if@RCHabschl

\@RCHpos Ein Schalter der das Anzeigen der Pos-Spalte beeinflusst

26 \newif\if@RCHpos

\@RCHamo Ein Schalter der das Anzeigen der Anzahl- und Einzelpreisspalte beeinflusst

27 \newif\if@RCHamo

\@RCHfirst Ein Schalter der anzeigt, daß der erste Artikel eingefügt wird

28 \newif\if@RCHfirst

\@RCHhor Ein Schalter der anzeigt, ob horizontale Trennlinien zwischen den Artikeln eingefügt werden

29 \newif\if@RCHhor

\@RCHartnum Ein Schalter der anzeigt, ob die Artikelnr ausgegeben wird.

30 \newif\if@RCHartnum

\@RCHinit Ein Schalter der anzeigt, ob schon initialisiert wurde.

31 \newif\if@RCHinit

\@RCHwdt Breite der Spalte für die Artikelbezeichnung

32 \newdimen\@RCHwdt

\@RCHstsi normalen Mehrwertsteuersatz

33 \newcommand*\@RCHstsi{19}

\@RCHstsii ermäßigter Mehrwertsteuersatz

34 \newcommand*\@RCHstsii{7}

\@RCHustsi Umsatzsteuer, wenn Mehrwertsteuer nach §19 UStG nicht ausweisbar

35 \newcommand*\@RCHustsi{0}

\@ArtikelPrefix aktueller Artikelprefix. Voreingestellt ist dieser leer.

36 \newcommand*\@ArtikelPrefix{}

\@AnzahlSuffix aktueller Artikelsuffix. Voreingestellt ist dieser leer.

37 \newcommand*\@AnzahlSuffix{}

\@waehrung aktuelle Währung. Voreingestellt ist Euro.

38 \newcommand*\@waehrung{\texteuro}

4.2 Benutzermacros

\Steuersatz Stellt neue Mehrwertsteuersätze (normal und ermäßigt) ein.

39 \newcommand*\Steuersatz[2]{\def\@RCHstsi{#1}\def\@RCHstsii{#2}}

\Waehrung Stellt eine beliebige Währung ein.

40 \newcommand*\Waehrung[1]{\def\@waehrung{#1}}

\PositionEin/Aus Schaltet Positionsnummern ein oder aus.

41 \newcommand*\PositionEin[0]{\if@RCHinit\else\global\@RCHpostrue\fi}
42 \newcommand*\PositionAus[0]{\if@RCHinit\else\global\@RCHposfalse\fi}

\TrennerEin/Aus Schaltet Positionsnummern ein oder aus.

43 \newcommand*\TrennerEin[0]{\if@RCHinit\else\global\@RCHhortrue\fi}
44 \newcommand*\TrennerAus[0]{\if@RCHinit\else\global\@RCHhorfalse\fi}

\AnzahlEin/Aus Schaltet Anzahlangaben und Einzelpreise ein oder aus.

45 \newcommand*\AnzahlEin[0]{\if@RCHinit\else\global\@RCHamotrue\fi}
46 \newcommand*\AnzahlAus[0]{\if@RCHinit\else\global\@RCHamofalse\fi}

\TausenderTrennzeichenEin/Aus Schaltet Tausendertrennung ein oder aus (z.B. mittels Punkt).

47 \newcommand*\TausenderTrennzeichenEin[0]{\sisetup{group-digits=integer}}
48 \newcommand*\TausenderTrennzeichenAus[0]{\sisetup{group-digits=none}}

\TausenderTrennzeichen Setzt das Tausendertrennung (z.B. auf einen Punkt).

               49 \newcommand*\TausenderTrennzeichen[1]{\sisetup{group-separator={#1}}}

\ArtikelPrefix Setzt einen belibigen Prefix für das Setzen der Artikelbeschreibung. Damit kann beispielsweise die Schriftgröße angepasst werden.

               50 \newcommand*\ArtikelPrefix[1]{\def\@ArtikelPrefix{#1}}

\AnzahlEinheit Setzt einen belibigen Suffix für die Anzahl der Artikel.

               51 \newcommand*\AnzahlEinheit[1]{\def\@AnzahlSuffix{\,#1}}

\Euro Stellt die Währung auf Euro um. (benötigt textcomp)

               52 \newcommand*\Euro{\def\@waehrung{\texteuro}}

\Dollar Stellt die Währung auf Dollar um. Das Währungssymbol wird links vom Betrag angezeigt.

               53 \newcommand*\Dollar{\def\@waehrung{\textdollar}\setLeftCurrency}

\DMark Stellt die Währung auf DM um. (benötigt textcomp)

               54 \newcommand*\DMark{\def\@waehrung{D\kern-0.05em M}}

\Gesamtsumme Gibt die Gesamtsumme der letzten Tabelle aus.

               55 \newcommand*\Gesamtsumme{\writeCurrency\@RCHsum}

\Mehrwertsteuer Gibt die Mehrwertsteuer der letzten Tabelle aus.

               56 \newcommand*\Mehrwertsteuer{\writeCurrency\@RCHmwst}

4.3 Textbaustein-Macros

\LangDecimalSeparator Der Dezimalwert-Seperator, voreingestellt auf das Komma (,).

               57 \newcommand*\LangDecimalSeparator{,}

\LangPos Der Posten-Spaltenkopf, voreingestellt auf Pos.

               58 \newcommand*\LangPos{Pos}

\LangCount Der Anzahl-Spaltenkopf, voreingestellt auf Anzahl.

               59 \newcommand*\LangCount{Anzahl}

\LangArticleId Der Artikel-Nummer-Spaltenkopf, voreingestellt auf Art. Nr..

               60 \newcommand*\LangArticleId{Art.\,Nr.}

\LangDescription Der Beschreibungs-Spaltenkopf, voreingestellt auf Beschreibung.

               61 \newcommand*\LangDescription{Beschreibung}

\LangSingleItemPrice Der Einzelpreis-Spaltenkopf, voreingestellt auf Einzelpreis.

               62 \newcommand*\LangSingleItemPrice{Einzelpreis}

\LangTotalPrice Der Gesamtpreis-Spaltenkopf, voreingestellt auf Gesamtpreis.

               63 \newcommand*\LangTotalPrice{Gesamtpreis}

\LangShippingFee Der Versandkosten-Posten, voreingestellt auf Versandkosten.

               64 \newcommand*\LangShippingFee{Versandkosten}

\LangTotal Der Postensumme, voreingestellt auf Summe.

65 \newcommand*\LangTotal{Summe}

\LangNet Der Text für die Nettosumme, voreingestellt auf Nettosumme.

66 \newcommand*\LangNet{Nettosumme}

\LangGrossTotal Der Text für die Bruttosumme, voreingestellt auf Bruttosumme.

67 \newcommand*\LangGrossTotal{Bruttosumme}

\LangInvoice Der Text für Rechnung, voreingestellt auf Rechnung.

68 \newcommand*\LangInvoice{Rechnung}

\LangTaxRate Der Text für den Steuersatz.

69 \newcommand*\LangTaxRate{Steuersatz}

\LangSalesTaxEU Der Text für Umsatzsteuer-Posten bei Inner-EU-Handel, voreingestellt auf “Umsatzsteuer (Innergemeinschaftliche Lieferung nach Art. 6 Abs. 1 UStG)”.

70 \newcommand*\LangSalesTaxEU{Umsatzsteuer (Innergemeinschaftliche
71 Lieferung nach Art. 6 Abs. 1 UStG)}

\LangSalesTaxNoVAT Der Text für Nichtausweisung der Umsatzsteuer, nach Paragraph 19, voreingestellt auf “Umsatzsteuer (MwSt. nicht ausweisbar nach Paragraph 19 UStG)”.

72 \newcommand*\LangSalesTaxNoVAT{Umsatzsteuer (MwSt. nicht ausweisbar
73  nach \S19 UStG)}

\LangSalesTaxReverseVAT Der Text für Nichtausweisung der Umsatzsteuer durch Reverse-Charge-Verfahren, nach Paragraph 3a Abs 2 UStG, voreingestellt auf “Umsatzsteuer wird gem. Paragraph 3a Abs. 2 UStG nicht erhoben. Die Steuerschuld geht auf den Empfänger über”.

74 \newcommand*\LangSalesTaxReverseVAT{\parbox[t]{10cm}{Umsatzsteuer
75 wird gem.\S3a Abs.  2 UStG nicht erhoben. Die Steuerschuld geht
76 auf den Empfänger über.}}

4.4 Zahlenmacros

\@RCHwrite Gibt einen Zähler gerundet auf zwei Nachkommastellen aus. (cntr/100,cntr%100)

77 \newcommand*\@RCHwrite[1]{
78 \@tempcnta=#1
79 \@tempcntb\@tempcnta
80 \divide\@tempcnta100 \expandafter\num\expandafter{\the\@tempcnta}\LangDecimalSeparator%
81 \multiply\@tempcnta100\advance\@tempcntb-\@tempcnta
82 \ifnum#1<0
83  \multiply\@tempcntb-1
84 \fi
85 \@tempcnta\@tempcntb\divide\@tempcnta10 \the\@tempcnta
86 \multiply\@tempcnta10\advance\@tempcntb-\@tempcnta
87 \the\@tempcntb

88 }

\writeCurrency Gibt einen Zähler als Währungsbetrag aus.

89 \newcommand*\writeCurrency[1]{\@RCHwrite{#1}\,\@waehrung}

\writebfCurrency Gibt eine Zähler als Währungsbetrag mit fetter Zahl aus.

 90 \newcommand*\writebfCurrency[1]{{\fontseries{b}
 91 \selectfont\writeCurrency{#1}}}

\setLeftCurrency Legt fest, dass das Währungssymbol links des Betrags steht.

 92 \newcommand*\setLeftCurrency{
 93 \renewcommand*\writeCurrency[1]{\@waehrung\@RCHwrite{##1}}

94 }

\@readNum Liest eine Zahl der Form [Zahl]*,[Zahl][Zahl] in \@RCHtmp ein

 95 \newcommand*\@readNum[1]{\@RCHtmp=0\@readA#1\relax}

\@readA Liest eine Zahl ein. Falls Nachkommastellen vorhanden sind, werden diese ebenfalls eingelesen. Nachkommastellen werden mit , oder . abgetrennt. Tritt eines dieser Zeichen auf, dann müssen auch Nachkommastellen kommen, sonst wird ein Fehler ausgegeben.

 96 \newcommand*\@readA[1]{%
 97 \expandafter\if#1\relax\@tempcnta0\@readC\relax
 98 \else\expandafter\if#1.\@tempcnta0
 99 \expandafter\expandafter\expandafter\expandafter
100 \expandafter\expandafter\expandafter\@readB
101 \else\expandafter\if#1,\@tempcnta0
102 \expandafter\expandafter\expandafter\expandafter
103 \expandafter\expandafter\expandafter\@readB
104 \else\multiply\@RCHtmp10\advance\@RCHtmp#1
105 \expandafter\expandafter\expandafter\expandafter
106 \expandafter\expandafter\expandafter\@readA
107 \fi\fi\fi

108 }

\@readB Liest zwei Nachkommastellen ein. Bei 0 oder mehr als 2 Stellen wird eine Fehlermeldung erzeugt.

109 \newcommand*\@readB[1]{%
110 \expandafter\if#1\relax\relax
111  \ifnum \@tempcnta > 2
112  \@RCHtmp0\PackageError{rechnung}{mehr als zwei
113  Nachkommastellen gefunden}
114  \else
115  \ifnum \@tempcnta = 2
116  \else
117  \ifnum \@tempcnta > 0
118 \advance\@tempcnta1
119  \multiply\@RCHtmp10
120 \@readB\relax
121  \else
122  \multiply\@RCHtmp100\PackageError{rechnung}{keine
123  Nachkommastellen gefunden}
124  \fi
125  \fi
126  \fi
127 \else
128  \advance\@tempcnta1
129  \multiply\@RCHtmp10

130  \advance\@RCHtmp#1\expandafter\@readB
131 \fi}

\@readC Liest zwei Nachkommastellen ein. Wenn weniger vorhanden sind, dann werden Nullen angenommen. Sind mehr als zwei Nachkommastellen vorhanden, erfolgt eine Fehlermeldung!

132 \newcommand*\@readC[1]{%
133 \expandafter
134 \if#1\relax\relax
135  \ifnum \@tempcnta > 2
136  \@RCHtmp0\PackageError{rechnung}{mehr als zwei
137  Nachkommastellen gefunden}
138  \fi
139  \ifnum \@tempcnta < 2
140 \advance\@tempcnta1
141  \multiply\@RCHtmp10
142 \@readC\relax
143  \fi
144 \else
145  \advance\@tempcnta1
146  \multiply\@RCHtmp10
147  \advance\@RCHtmp#1\expandafter\@readC
148 \fi}

4.5 Rechnungsabschlußmacros

\writefoot Gibt Fußnote mit reduziertem MwSt.Satz aus.

149 \newcommand*{\writefoot}[0]{
150 \if@RCHerm
151  \nointerlineskip
152  \vskip0.5ex
153  \hbox to \textwidth{
154  \hfill\footnotesize\strut
155  $^*$ Artikel mit \@RCHstsii\,\% Mehrwertsteuer}
156 \fi}

\@RCHsline Erzeugt eine Zeile für Summe, Mehrwertsteuer, …

157 \newcommand*\@RCHsline[2]{%
158 \goodbreak\nointerlineskip
159 \vbox{\hrule
160  \hbox to\textwidth{%
161  \strut\lsep #1\hfil
162  \sep
163  \hbox to \@RCHGesamtWidth{\hfil#2}%
164  \rsep}%
165  \hrule\vskip-0.4pt}}

\@RCHohne Beendet eine Tabelle ohne Angabe von Mehrwertsteuer

166 \newcommand*\@RCHohne{
167 \@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}}

\@RCHnetto Beendet eine Tabelle mit Nettopreisen und Mehrwertsteuer.

168 \newcommand*\@RCHnetto{
169 \@RCHsline{\LangNet}{\writeCurrency\@RCHsum}%

⌊\frac{Nettosumme · Steuersatz + 50}{100}⌋

170 \multiply\@RCHmwsti\@RCHstsi
171 \advance\@RCHmwsti50\divide\@RCHmwsti100
172 \multiply\@RCHmwstii\@RCHstsii
173 \advance\@RCHmwstii50\divide\@RCHmwstii100
174 \@RCHmwst\@RCHmwsti\advance\@RCHmwst\@RCHmwstii
175 \if@RCHerm
176  \@RCHsline{zzgl. \@RCHstsii\,\% MwSt.}{\writeCurrency\@RCHmwstii}%
177 \fi
178 \@RCHsline{zzgl. \@RCHstsi\,\% MwSt.}{\writeCurrency\@RCHmwsti}%
179 \advance\@RCHsum\@RCHmwst
180 \hrule
181 \vskip\doublerulesep\vskip0.4pt
182 \@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}%
183 \if@RCHabschl
184  \vskip\doublerulesep\vskip10pt
185  \advance\@RCHabschlb\@RCHabschln
186  \advance\@RCHabschlmwst\@RCHabschln
187  \multiply\@RCHabschlmwst\@RCHstsi
188  \advance\@RCHmwsti50
189  \divide\@RCHabschlmwst100
190  \advance\@RCHabschlb\@RCHabschlmwst
191  \advance\@RCHmwst-\@RCHabschlmwst
192  \@RCHsline{Abschlagszahlung }{\writeCurrency\@RCHabschln}%
193  \@RCHsline{zzgl. \@RCHstsi\,\% MwSt. }{\writeCurrency\@RCHabschlmwst}%
194  \vskip\doublerulesep\vskip0.4pt
195  \@RCHsline{bereits gezahlt }{\writebfCurrency\@RCHabschlb}%
196  \advance\@RCHsum-\@RCHabschlb
197  \vskip\doublerulesep\vskip10pt
198  \@RCHsline{noch zu zahlen }{\writebfCurrency\@RCHsum}%
199 \fi
200 \hrule
201 \writefoot

202 }

\@RCHkeineUST Beendet eine Tabelle mit den Nettopreisen und gibt an, dass die Mehrwertsteuer nach §19 UStG nicht ausweisbar ist.

203 \newcommand*\@RCHkeineUST{
204 \@RCHsline{\LangNet}{\writeCurrency\@RCHsum}%
205 \@RCHsline{\LangSalesTaxNoVAT}{\writeCurrency\@RCHustsi}
206 \hrule
207 \vskip\doublerulesep\vskip0.4pt
208 \@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}%
209  \if@RCHabschl
210  \vskip\doublerulesep\vskip10pt
211  \@RCHsline{Abschlagszahlung }{\writeCurrency\@RCHabschln}%
212  \@RCHsline{\LangSalesTaxNoVAT}{\writeCurrency\@RCHustsi}
213  \advance\@RCHsum-\@RCHabschln
214  \vskip\doublerulesep\vskip10pt
215  \@RCHsline{noch zu zahlen }{\writebfCurrency\@RCHsum}%
216  \fi

217 \writefoot

218 }

\@RCHeuUST Beendet eine Tabelle mit den Nettopreisen und gibt an, dass die Mehrwertsteuer nach Art. 6 Abs. 1 UStG vom Leistungsempfänger gezahlt wird.

219 \newcommand*\@RCHeuUST{
220 \@RCHsline{\LangNet}{\writeCurrency\@RCHsum}%
221 \@RCHsline{\LangSalesTaxEU}{\writeCurrency\@RCHustsi}
222 \hrule
223 \vskip\doublerulesep\vskip0.4pt
224 \@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}%
225 \writefoot

226 }

\@RCHkeineUSTInt Beendet eine Tabelle mit den Nettopreisen und gibt an, dass die Mehrwertsteuer nach §3a Abs. 2 UStG nicht ausweisbar ist und die Steuerschuld auf den Empfänger übergeht (Reverse-Charge-Verfrahren).

227 \newcommand*\@RCHkeineUSTInt{
228 \@RCHsline{\LangNet}{\writeCurrency\@RCHsum}%
229 \@RCHsline{\LangSalesTaxReverseVAT}{\writeCurrency\@RCHustsi}
230 \hrule
231 \vskip\doublerulesep\vskip0.4pt
232 \@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}%
233 \writefoot

234 }

\@RCHbrutto Beendet eine Tabelle mit Bruttopreisen und gibt die enthaltene Mehrwertsteuer an.

235 \newcommand*\@RCHbrutto{
236 \@RCHsline{\LangTotal}{\writebfCurrency\@RCHsum}

⌊\frac{2 · Bruttosumme · Steuersatz + 100 + Steuersatz}{2(100 + Steuersatz)}⌋

237 \multiply\@RCHmwsti\@RCHstsi\multiply\@RCHmwsti2%
238 \@tempcnta100\advance\@tempcnta\@RCHstsi
239 \advance\@RCHmwsti\@tempcnta
240 \multiply\@tempcnta2%
241 \divide\@RCHmwsti\@tempcnta

242

243 \multiply\@RCHmwstii\@RCHstsii\multiply\@RCHmwstii2%
244 \@tempcnta100\advance\@tempcnta\@RCHstsii
245 \advance\@RCHmwstii\@tempcnta
246 \multiply\@tempcnta2%
247 \divide\@RCHmwstii\@tempcnta

248

249 \@RCHmwst\@RCHmwsti\advance\@RCHmwst\@RCHmwstii
250 \if@RCHerm
251  \@RCHsline{inkl. erm. MwSt. \@RCHstsii\,\%}
252  {\writeCurrency\@RCHmwstii}%
253 \fi
254 \@RCHsline{inkl. \@RCHstsi\,\% MwSt}{\writeCurrency\@RCHmwsti}%
255 \writefoot

256 }

\sep Gibt eine vertikale Trennlinie innerhalb einer Zeile aus

257 \newcommand*{\sep}[0]{\hskip\tabcolsep\vrule\hskip\tabcolsep}
258 \newcommand*{\rsep}[0]{\hskip\tabcolsep\vrule}
259 \newcommand*{\lsep}[0]{\vrule\hskip\tabcolsep}

\@RCHlineX Erzeugt eine Position in einer Rechnung mit Artikelnummern Param: Position, Anzahl, Art.-Nr.,Artikel, Einzelpreis, Gesamtpreis

260 \newcommand*\@RCHlineX[6]{{
261 \goodbreak\nointerlineskip
262  \vbox{
263  \if@RCHhor
264 \hrule
265  \else
266  \if@RCHfirst
267  \hrule
268  \fi
269  \fi
270  \hbox to\textwidth{%
271 \lsep%
272  \if@RCHpos%
273  \hbox to\@RCHPosWidth{\hfil #1\strut}%
274  \sep
275  \fi% Pos-Spalte
276  \if@RCHamo%
277  \hbox to\@RCHAnzWidth{\hfil #2\strut}%
278  \sep
279  \fi% Anzahl-Spalte
280  \if@RCHartnum%
281  \hbox to\@RCHArtnumWidth{\hfil #3\strut}%
282  \sep%
283  \fi% Art-Num-Spalte
284  \vtop{\normalbaselines%
285  \noindent\rightskip=0pt plus1cm%
286  \hsize\@RCHwdt%
287  \linewidth\hsize#4\null\strut\par}%
288  \hfil\sep%Beschreibung
289  \if@RCHamo%
290  \hbox to\@RCHEinzelWidth{\hfil #5\strut}%
291  \sep%
292  \fi% Einzelpreis
293  \hbox to\@RCHGesamtWidth{\hfil #6\strut}\rsep% Gesamtpreis
294  }%hbox
295  }%vbox

296 }}

\@ArtikelX Berechnet für einen Artikel den Preis aus Anzahl und Einzelpreis, erhöht die Gesamtsumme und die entsprechende Mehrwertsteuersumme und gibt die Position aus. Param: [ermaessigt,] Anzahl, (X: Art.-Nr.,) Artikel, Einzelpreis

297 \newcommand*\@Artikel[4][X]{\@ArtikelX[#1]{#2}{}{#3}{#4}}
298 \newcommand*\@ArtikelX[5][X]{
299 \initRechnung
300 \advance\@RCHcnt1%
301 \@readNum{#5}

302 \@RCHtmptmp=\@RCHtmp%
303 \@readNum{#2}\multiply\@RCHtmp\@RCHtmptmp
304 \advance\@RCHtmp99\divide\@RCHtmp100%Aufrunden auf 2 Nachkommastellen.
305 \@lineBaseX[#1]{\the\@RCHcnt}{#2\@AnzahlSuffix}{#3}{#4}{\writeCurrency\@RCHtmptmp}

306 }

\@GutschriftX Fügt eine Gutschrift hinzu und gibt diese aus. Param: [ermaessigt,] Beschreibung, Betrag

307 \newcommand*\@Gutschrift[3][X]{\@GutschriftX[#1]{#2}{#3}}
308 \newcommand*\@GutschriftX[3][X]{
309 \initRechnung
310 \advance\@RCHcnt1%
311 \@readNum{#3}
312 \multiply\@RCHtmp-1
313 \@lineBaseX[#1]{\the\@RCHcnt}{\null}{\null}{#2}{\null}

314 }

\@VersandkostenX Erzeugt eine Zeile für die Versandkosten, die keinen Einzelpreis und und keine Positionsnummer bekommt (mit Artikelnummer).

315 \newcommand*\@Versandkosten[2][X]{\@VersandkostenX[#1]{#2}}
316 \newcommand*\@VersandkostenX[2][X]{
317 \initRechnung
318 \@readNum{#2}
319 \@lineBaseX[#1]{\null}{1}{\null}{\LangShippingFee}{#2\,\@waehrung}

320 }

\@AbschlagszahlungX Erzeugt eine Abschlagszahlung

321 \newcommand*\@Abschlagszahlung[2][X]{\@AbschlagszahlungX[#1]{#2}}
322 \newcommand*\@AbschlagszahlungX[2][X]{
323 \initRechnung
324 \@readNum{#2}
325 \global\@RCHabschltrue
326 \global\advance\@RCHabschln\@RCHtmp

327 }

\@lineBaseX Gemeinsamer Code für Artikel- und Versandkostenzeilen

328 \newcommand*\@lineBaseX[6][X]{
329 \global\advance\@RCHsum\@RCHtmp
330 \@RCHlineX{\@ArtikelPrefix#2}{\@ArtikelPrefix#3}{\@ArtikelPrefix#4}{\@ArtikelPrefix#5}{\@ArtikelPrefix#6}{\@ArtikelPrefix\writeCurrency\@RCHtmp
331  \expandafter\ifx#1X\else\rlap{$^*$}\fi}
332 \expandafter
333 \ifx#1X
334  \advance\@RCHmwsti\@RCHtmp
335 \else
336  \advance\@RCHmwstii\@RCHtmp\global\@RCHermtrue
337 \fi
338 \global\@RCHfirstfalse  %horizontale Linien nur beim ersten Artikel

339 }

\Rechnung* Beginnt eine Rechnung oder Bestellung ohne/mit Artikelnummer

340 \newenvironment*{Rechnung}[1][X]{\RechnungStart{#1}{}}{\RechnungEnde}
341 \newenvironment*{Rechnung*}[1][X]{\RechnungStart{#1}{X}}{\RechnungEnde}
342 \newenvironment*{Bestellung}[0]{\RechnungStart{X}{}}{\RechnungEnde}
343 \newenvironment*{Bestellung*}[0]{\RechnungStart{X}{X}}{\RechnungEnde}

\RechnungStart Kopf einer Rechnungstabelle

344 \newcommand*{\RechnungStart}[2]{
345 \@RCHinitfalse
346 \@RCHermfalse
347 \@RCHabschlfalse
348 \@RCHmwsti0
349 \@RCHmwstii0
350 \@RCHabschln0
351 \@RCHabschlb0
352 \@RCHabschlmwst0
353 \def\@RCHtype{#1}%

Berechne die Breite der Artikelspalte. = \textwidth − 8\tabcolsep − 5 ∗ 0.4pt − ∑ Spaltenbreite

354 \@RCHcnt0
355 \@RCHsum0
356 \@RCHwdt\textwidth
357 \advance\@RCHwdt-\@RCHAnzWidth    % Breite der Spalte Anz
358 \advance\@RCHwdt-\@RCHEinzelWidth% Breite der Spalte EPreis
359 \advance\@RCHwdt-\@RCHGesamtWidth % Breite der Spalte GPreis
360 \advance\@RCHwdt-2.0pt        % Breite der Spaltentrenner
361 \advance\@RCHwdt-8\tabcolsep  % Breite des Abstands zu
362  % den Spaltentrennern

363

364 \global\@RCHfirsttrue
365 \global\@RCHpostrue
366 \global\@RCHhortrue
367 \global\@RCHamotrue

Param 2: Mit Artikelnummern?

368 \ifx#2X
369 \global\@RCHartnumtrue
370 \let\Artikel\@ArtikelX
371 \let\Posten\@ArtikelX
372 \let\Versandkosten\@VersandkostenX
373 \let\Abschlagszahlung\@AbschlagszahlungX
374 \let\Gutschrift\@GutschriftX
375 \else
376 \global\@RCHartnumfalse
377 \let\Artikel\@Artikel
378 \let\Posten\@Artikel
379 \let\Versandkosten\@Versandkosten
380 \let\Abschlagszahlung\@Abschlagszahlung
381 \let\Gutschrift\@Gutschrift
382 \fi

383 }

\initRechnung Kurze Routine, um Kopfzeile auszugeben, nachdem diverse Initialisierungen vorgenommen wurden. Das ist noetig, da einige Einstellungen innerhalb der Umgebung veraendert werden duerfen.

384 \newcommand*{\initRechnung}[0]

385 {

386 \if@RCHinit
387 \else

388 % Breite wegen Anzeige der Positionsnummern korrigieren
389 %    \begin{macrocode}
390  \if@RCHpos
391  \advance\@RCHwdt-\@RCHPosWidth
392  \advance\@RCHwdt-0.4pt
393  \advance\@RCHwdt-2\tabcolsep
394  \fi

Breite wegen Anzeige von Anzahl und Einzelpreis korrigieren

395  \unless\if@RCHamo
396  \advance\@RCHwdt+\@RCHAnzWidth
397  \advance\@RCHwdt+\@RCHEinzelWidth
398  \advance\@RCHwdt+0.8pt
399  \advance\@RCHwdt+4\tabcolsep
400  \renewcommand*{\LangTotalPrice}{Preis}
401  \fi

Breite wegen Anzeige der Artikelnummern korrigieren

402  \if@RCHartnum
403  \advance\@RCHwdt-\@RCHArtnumWidth
404  \advance\@RCHwdt-0.4pt
405  \advance\@RCHwdt-2\tabcolsep
406  \fi

bißchen Platz über der Rechnung

407  \vskip\abovedisplayskip

Titelzeile ausgeben

408  \@RCHlineX{\scriptsize \LangPos}%
409  {\scriptsize \LangCount}%
410  {\scriptsize \LangArticleId}%
411  {\scriptsize \LangDescription\hfill}%
412  {\scriptsize \LangSingleItemPrice}%
413  {\scriptsize \LangTotalPrice}
414  \@RCHinittrue
415 \fi

416 }

\RechnungEnde Footer einer Rechnung

417 \newcommand*{\RechnungEnde}[0]

418 {

419 \hrule
420 \vskip\doublerulesep\vskip0.4pt
421  \expandafter\if\@RCHtype X \@RCHohne
422 \else\expandafter\if\@RCHtype N \@RCHnetto
423 \else\expandafter\if\@RCHtype B \@RCHbrutto
424 \else\expandafter\if\@RCHtype K \@RCHkeineUST
425 \else\expandafter\if\@RCHtype I \@RCHkeineUSTInt
426 \else\expandafter\if\@RCHtype E \@RCHeuUST
427 \else\PackageError{rechnung}{Unbekannter Rechnungstyp `\@RCHtype'}%
428 \fi\fi\fi\fi\fi\fi
429 \global\@RCHsum\@RCHsum\global\@RCHmwst\@RCHmwst

bißchen Platz unter der Rechnung

430 \vskip\belowdisplayskip

431 }