Rechnungsprüfung im Einkauf: Dreifach-Abgleich in Odoo
Kurz gesagt
Der Dreifach-Abgleich hält in Odoo 20.0 Bestellung, Wareneingang und Lieferantenrechnung gegeneinander. Welche Mengen in den Rechnungsentwurf kommen, steuert die Kontrollrichtlinie am Produkt: Auf bestellte Mengen schon mit der Bestätigung, Auf erhaltene Mengen erst nach Erfassung der erhaltenen Menge, die bei Gütern mit installierter App Lager aus dem Wareneingang stammt und im Community-Zweig 20.0 sonst von Hand in der Bestellzeile steht. Die Option 3-Wege-Abstimmung verlangt ein installiertes Zusatzmodul; im Community-Zweig 20.0 setzt ihr Schalter das Häkchen zurück und zeigt den Enterprise-Dialog. Ist sie installiert, ergänzt sie am Entwurf das Feld Should Be Paid, das Mengen- und Preisabweichungen auf Exception setzt, die Buchung aber nicht sperrt.
Das Wichtigste
- Die Kontrollrichtlinie am Produkt steuert die Rechnungsmenge: Dienstleistungen voreingestellt Auf bestellte Mengen, Güter Auf erhaltene Mengen.
- Der Abrechnungsstatus steht im Reiter Weitere Informationen der Bestellung. Die Tabelle der Dokumentation zu 20.0 nennt bei Auf erhaltene Mengen Vollständig abgerechnet, sobald bei ganz oder teilweise erhaltener Ware ein Rechnungsentwurf angelegt ist; welche Mengen der Entwurf abdecken muss, sagt sie an dieser Stelle nicht.
- Der Community-Zweig 20.0 rechnet den Status feiner (purchase/models/purchase_order.py, _get_invoiced): Vollständig abgerechnet erst, wenn keine Rechnungsposition mehr offen ist und mindestens eine Rechnung erfasst wurde; die Dokumentation zu 20.0 stellt den Status gröber dar.
- Die Dokumentation zu Odoo 20.0 nennt für den Abgleich keinen Toleranzwert; Teil- und Nachlieferungen sind möglich.
- Laut Dokumentation darf die Bestellung beim Befehl Rechnungen erstellen noch nicht abgerechnet sein; sonst erscheint das Fenster Invalid Operation.
- Die Option 3-Wege-Abstimmung beschreibt die Dokumentation für Rechnungen, die erst nach dem Wareneingang entstehen (Kontrollrichtlinie Auf erhaltene Mengen); sie verlangt ein installiertes Zusatzmodul, und im Community-Zweig 20.0 gehört der Schalter zu einem Modul, das dieser Zweig nicht enthält.
Rechnungsprüfung im Einkauf heißt in Odoo, drei Belege gegeneinander zu halten: die Bestellung, die erhaltene Menge (bei Gütern mit App Lager der Wareneingang) und die Rechnung des Lieferanten. Verglichen werden Mengen, Preise und der Bezug zwischen den Belegen. Wie streng Odoo dabei ist, hängt an zwei Einstellungen, die an ganz verschiedenen Stellen sitzen.
Wie Odoo die drei Dokumente führt
Die Bestellung steht unter Einkauf ‣ Aufträge ‣ Bestellungen, der Wareneingang als Vorgang der App Lager unter Lager ‣ Vorgänge ‣ Eingänge, und die Rechnung des Lieferanten erfassen Sie unter Buchhaltung oder Rechnungsstellung ‣ Lieferanten ‣ Eingangsrechnungen (Bills). Wie die ersten beiden Schritte zusammenhängen, beschreiben Einkauf in Odoo: Von der Anfrage zur Bestellung und Wareneingang und Lieferung in Odoo.
Den Rechnungsentwurf steuert eine Angabe am Produkt. Im Reiter Einkauf, Abschnitt Lieferantenrechnungen, steht die Kontrollrichtlinie (Control Policy) mit zwei Werten. Auf bestellte Mengen legt den Entwurf mit Produkten und Mengen der Bestellung an, sobald die Bestellung bestätigt ist. Auf erhaltene Mengen legt ihn erst an, wenn eine erhaltene Menge erfasst ist, und übernimmt nur diese Menge; bei Gütern mit installierter App Lager stammt sie aus dem Wareneingang, im Community-Zweig 20.0 führen Dienstleistungen und Positionen in einer Installation ohne die App Lager sie von Hand (Feld Erhaltene Menge). Die Voreinstellung folgt der Produktart: Dienstleistungen stehen auf Auf bestellte Mengen, Güter auf Auf erhaltene Mengen.
An der Bestellung zeigt der Reiter Weitere Informationen den Abrechnungsstatus. Die Tabelle der Dokumentation zu 20.0 richtet seinen Wert danach aus, ob Ware erhalten und ob ein Rechnungsentwurf angelegt ist:
| Abrechnungsstatus (Dokumentation 20.0) | Kontrollrichtlinie Auf erhaltene Mengen | Kontrollrichtlinie Auf bestellte Mengen |
|---|---|---|
| Nichts abzurechnen | Bestellung bestätigt, noch keine Ware erhalten | nicht anwendbar |
| Wartende Rechnungen | Ware ganz oder teilweise erhalten, noch kein Rechnungsentwurf angelegt | Bestellung bestätigt |
| Vollständig abgerechnet | Ware ganz oder teilweise erhalten, Rechnungsentwurf angelegt | Rechnungsentwurf angelegt |
Die Tabelle der Dokumentation ist eine Vereinfachung: Sie nennt für Vollständig abgerechnet bei Auf erhaltene Mengen nur ganz oder teilweise erhaltene Ware und einen angelegten Rechnungsentwurf und sagt an dieser Stelle nicht, welche Mengen der Entwurf abdecken muss. Eine zweite Zuordnung stammt aus dem Code des Community-Zweigs 20.0 und geht von der offenen abzurechnenden Menge aus (purchase/models/purchase_order.py, _get_invoiced): Eine Rechnung über einen Teil der bestellten oder erhaltenen Mengen lässt den Status auf Wartende Rechnungen, auch wenn der Entwurf schon existiert.
| Abrechnungsstatus (Community-Zweig 20.0) | Kontrollrichtlinie Auf erhaltene Mengen | Kontrollrichtlinie Auf bestellte Mengen |
|---|---|---|
| Nichts abzurechnen | Bestellung bestätigt, noch keine Ware erhalten und keine Rechnung erfasst | nicht anwendbar |
| Wartende Rechnungen | abzurechnende Menge offen: erhaltene minus abgerechnete Menge, auch bei vorhandenem Entwurf | abzurechnende Menge offen: bestellte minus abgerechnete Menge, auch bei vorhandenem Entwurf |
| Vollständig abgerechnet | erhaltene Mengen vollständig abgerechnet und mindestens eine Rechnung erfasst | bestellte Mengen vollständig abgerechnet und mindestens eine Rechnung erfasst |
Im Community-Zweig 20.0 zählen dabei auch Rechnungsentwürfe mit; _prepare_qty_invoiced in purchase/models/purchase_order_line.py zählt Rechnungszeilen mit, deren Beleg nicht im Zustand cancel steht. Diese feinere Zuordnung stammt aus dem Code des Community-Zweigs; die Dokumentation zu 20.0 stellt den Status gröber dar.
Der Unterschied zeigt sich im Alltag. Steht ein Lagerprodukt auf Auf erhaltene Mengen, springt der Status erst mit dem Wareneingang von Nichts abzurechnen auf Wartende Rechnungen. Eine Position ohne Wareneingang, etwa eine Beratungsstunde oder Fracht, bleibt voreingestellt auf Auf bestellte Mengen; der Entwurf folgt dort der Bestellung. Eine erhaltene Menge gibt es trotzdem: Im Community-Zweig 20.0 führen Dienstleistungspositionen sie von Hand, und sie zählt mit, sobald die Position auf Auf erhaltene Mengen steht.
Die Abgleichlogik und ihre Toleranzen
Für diesen Abgleich nennt die Dokumentation zu Odoo 20.0 keinen Zahlenwert als Toleranz, den eine Abweichung nicht überschreiten darf. Toleranz heißt hier deshalb: was Odoo überhaupt vergleicht, wann eine Abweichung zulässig bleibt und woran Sie sie erkennen. Die folgende Tabelle fasst die Prüfschritte der Dokumentation zusammen.
| Prüfschritt | Was Odoo vergleicht | Wo Sie es sehen | Behandlung einer Abweichung |
|---|---|---|---|
| Erhaltene Menge gegen Bestellung | erfasste erhaltene Menge gegen bestellte Menge | Bestellzeile, Spalte Erhalten (Detailansicht: Erhaltene Menge) | Teil- und Nachlieferungen sind möglich; bei Gütern mit App Lager kommt die Menge aus dem Wareneingang, im Community-Zweig 20.0 sonst aus der von Hand geführten Menge der Bestellzeile; ohne Rechnungsentwurf steht der Status auf Wartende Rechnungen, im Community-Zweig 20.0 auch bei vorhandenem Entwurf, solange eine abzurechnende Menge offen ist |
| Rechnung gegen erhaltene Menge | Menge der Rechnungsposition gegen die erhaltene Menge | Rechnungsentwurf, Spalte Menge; Bestellzeile, Spalte Abgerechnet | bei Auf erhaltene Mengen trägt der Entwurf nur die erhaltene Menge, im Community-Zweig 20.0 bei Dienstleistungen und in einer Installation ohne App Lager die von Hand erfasste; eine höhere Rechnungsmenge bleibt möglich und gilt mit der Option 3-Wege-Abstimmung als Exception |
| Rechnung gegen Bestellung (Preis) | Einzelpreis der Rechnung gegen den Einzelpreis der Bestellzeile | Rechnungsentwurf, Spalte Einzelpreis; Bestellzeile, Spalte Einzelpreis | jeder abweichende Preis bleibt möglich; Sie ändern ihn im Entwurf von Hand, mit der Option 3-Wege-Abstimmung gilt er dann als Exception |
| Rechnung gegen Bestellung (Zuordnung) | Bezug der Rechnungspositionen zur Bestellung | Rechnungsentwurf, Feld Rechnungsreferenz und Feld Auto-Complete (Automatisch vervollständigen) | kein Automatismus; Positionen ohne bestellte Ware, etwa Fracht, erfassen Sie als freie Zeile; das Feld Auto-Complete füllt den Entwurf aus einer früheren Rechnung oder Bestellung, dafür muss laut Dokumentation das Feld Lieferant schon gefüllt sein |
| doppelte Abrechnung | Zustand der Bestellung beim Aufruf von Rechnungen erstellen | Bestellliste und Reiter Weitere Informationen | laut Dokumentation darf die Bestellung noch nicht abgerechnet sein; sonst erscheint das Fenster Invalid Operation |
| Zahlungsfreigabe (nur mit installiertem Zusatzmodul 3-Wege-Abstimmung) | abgerechnete gegen erhaltene Menge am Rechnungsentwurf | Feld Should Be Paid im Reiter Weitere Informationen des Entwurfs | Yes, No oder Exception (die dokumentierten Werte): Yes bei neuem Entwurf, No nach der Zahlung, Exception bei geänderter Menge oder geändertem Preis; der Entwurf entsteht laut Dokumentation erst, wenn ein Teil der Ware erhalten ist; der sichtbare Schalter allein belegt nicht, dass das Zusatzmodul vorhanden ist |
Die Zeilen zwei und drei zeigen, wo die optionale Prüfung ansetzt. Ohne die Option 3-Wege-Abstimmung ist die Rechnungsmenge nur eine Angabe im Entwurf; ob sie zum Eingang passt, hängt an Ihrer Aufmerksamkeit. Mit der Option setzt Odoo den Status am Entwurf selbst und markiert jede Abweichung. Die Dokumentation beschreibt die Option für Rechnungen, die erst nach erfasster erhaltener Menge entstehen, also für die Kontrollrichtlinie Auf erhaltene Mengen. Änderungen an Menge, Preis und Positionen bleiben in beiden Fällen möglich; Odoo bemerkt sie, blockiert sie aber nicht, weil ein sachlicher Grund vorliegen kann. Den Status des Feldes können Sie laut Dokumentation auch von Hand setzen.
Die Option 3-Wege-Abstimmung (3-way matching) steht in den Einkaufseinstellungen im Abschnitt Rechnungsstellung; die geöffnete Dokumentationsseite Control policies nennt für sie keine Edition. Kontrollrichtlinie, Rechnungsentwurf und Abrechnungsstatus gehören zur App Einkauf beziehungsweise Rechnungsstellung, die der Editionsvergleich in beiden Editionen führt; eine eigene Zeile für die Option hat der Vergleich nicht. Der öffentliche Community-Zweig 20.0 zeigt dagegen, dass die Option nicht zum Grundumfang gehört: Der Einstellungseintrag bindet den Schalter an den Modulschalter module_account_3way_match mit dem Widget upgrade_boolean (purchase/views/res_config_settings_views.xml), im Verzeichnis addons/ dieses Zweigs liegt kein Modul account_3way_match (Gegenprobe: addons/purchase/__manifest__.py ist dort vorhanden), und das Widget schaltet in einer Datenbank ohne Enterprise-Kennung (odoo.info.isEnterprise) nichts ein, sondern setzt das Häkchen zurück und zeigt den Dialog Upgrade auf Odoo Enterprise (web/static/src/webclient/settings_form_view/fields/upgrade_boolean_field.js). Ein sichtbarer Schalter belegt also nicht, dass die Funktion verfügbar ist. Prüfen Sie deshalb in Ihrer eigenen Installation nach dem Einschalten, ob die Option gesetzt bleibt und am Rechnungsentwurf das Feld Should Be Paid erscheint. Fehlt sie, stützt sich die Mengenprüfung auf die Kontrollrichtlinie und den Abrechnungsstatus.
Ein Rechenbeispiel
Beispielrechnung mit erfundenen Zahlen. Ein Betrieb bestellt 100 Stück eines Bauteils zu 12,00 Euro netto, zusammen 1.200,00 Euro. Der Lieferant liefert zunächst 60 Stück, 40 Stück stehen aus. Die Rechnung weist die vollen 100 Stück aus.
| Kontrollrichtlinie | Rechnungsentwurf aus der Bestellung | Was nicht zusammenpasst |
|---|---|---|
| Auf erhaltene Mengen | 60 × 12,00 Euro = 720,00 Euro netto | 40 Stück, also 480,00 Euro der Rechnung, haben keine erfasste Eingangsmenge |
| Auf bestellte Mengen | 100 × 12,00 Euro = 1.200,00 Euro netto, schon mit der Bestätigung | der Wareneingang ändert den Entwurf nicht; die Prüfung liegt bei Ihnen |
Bei Auf erhaltene Mengen haben Sie zwei saubere Wege: Sie buchen die 720,00 Euro und die Nachlieferung später, oder Sie übernehmen die vollen 1.200,00 Euro und verfolgen die 40 Stück als noch nicht eingegangene Menge. Bei Auf bestellte Mengen steht der Abrechnungsstatus der Bestellung auf Vollständig abgerechnet, obwohl 40 Stück unterwegs sind.
Weicht zusätzlich der Einzelpreis ab, rechnet sich die Differenz so: 12,30 statt 12,00 Euro ergeben über 100 Stück 0,30 × 100 = 30,00 Euro. Solche Abweichungen tragen Sie im Entwurf von Hand ein; mit eingeschalteter Option 3-Wege-Abstimmung (installiertes Zusatzmodul) wechselt das Feld Should Be Paid dabei auf Exception.
Typische Fehler
- Der Entwurf ist unvollständig. Bei Auf erhaltene Mengen enthält er nur die erfasste erhaltene Menge, bei Gütern mit App Lager also das, was schon eingegangen ist (siehe Wareneingang und Lieferung in Odoo). Fehlt eine Position, wurde die Ware noch nicht gebucht.
- Die Rechnung liegt über dem Eingang, und niemand merkt es. Ohne die Option 3-Wege-Abstimmung gleicht Odoo die Rechnungsmenge im Entwurf nicht gegen den Eingang ab; prüfen Sie die Zeilen gegen die erfassten Eingänge, bevor Sie buchen.
- Rechnungen erstellen meldet Invalid Operation. Die Bestellung gilt laut Dokumentation bereits als abgerechnet. Den Stand zeigt das Feld Abrechnungsstatus im Reiter Weitere Informationen.
- Vollständig abgerechnet, obwohl Ware fehlt. Die Tabelle der Dokumentation zu 20.0 nennt bei Auf erhaltene Mengen Vollständig abgerechnet schon bei ganz oder teilweise erhaltener Ware und einem angelegten Rechnungsentwurf; im Community-Zweig 20.0 entscheidet die abgerechnete Menge, nicht der vollständige Wareneingang. Teil- und Nachlieferungen sind möglich.
- Dienstleistungen ohne Wareneingang. Für sie steht die Kontrollrichtlinie voreingestellt auf Auf bestellte Mengen, der Entwurf trägt also die bestellten Mengen; die von Hand geführte erhaltene Menge (Community-Zweig 20.0) zählt erst, wenn Sie die Position auf Auf erhaltene Mengen stellen. Prüfen Sie solche Positionen gegen die Bestellung.
So gehen Sie vor
- Prüfen Sie je Produkt den Reiter Einkauf und dort den Abschnitt Lieferantenrechnungen: Sollen Rechnungen erst nach der Ware entstehen, stellen Sie Auf erhaltene Mengen.
- Prüfen Sie unter Einkauf ‣ Konfiguration ‣ Einstellungen (sichtbar für Administrator und Einkaufsleitung) im Abschnitt Rechnungsstellung, ob Ihre Installation die Option 3-Wege-Abstimmung wirklich anbietet: Die Dokumentation nennt keine Edition, und im Community-Zweig 20.0 gehört der Schalter zu einem Zusatzmodul, das dieser Zweig nicht enthält, sodass er sich beim Anklicken selbst zurücksetzt. Bleibt die Option gesetzt, ist sie verfügbar; schalten Sie sie ein, wenn Sie die Zahlungsfreigabe automatisch führen wollen.
- Legen Sie Ihren Prüfpunkt fest: bestellte Menge, erhaltene Menge und abgerechnete Menge stehen an der Bestellzeile und in deren Detailansicht.
- Erzeugen Sie den Entwurf aus der Bestellliste über Rechnungen erstellen und halten Sie ihn Zeile für Zeile gegen die Rechnung des Lieferanten.
- Ändern Sie Mengen und Preise nur mit Begründung und prüfen Sie danach den Status im Reiter Weitere Informationen des Entwurfs.
- Kontrollieren Sie vor dem Buchen den Abrechnungsstatus der Bestellung: Wartende Rechnungen bedeutet, dass noch eine abzurechnende Menge offen ist — bei Auf bestellte Mengen schon mit der bestätigten Bestellung, bei Auf erhaltene Mengen nach Erfassung der erhaltenen Menge.
Prüfen Sie den Ablauf einmal mit einer Testbestellung, bevor Sie die Kontrollrichtlinie breit umstellen: Die Richtlinie gilt je Produkt, und jede Änderung wirkt auf alle künftigen Rechnungsentwürfe.