Einführung
In Odoo definieren Modelle, wie Daten strukturiert und in der Datenbank gespeichert werden. Jedes Stück Geschäftsdaten, mit dem Sie arbeiten, von Verkaufsaufträgen über Rechnungen bis hin zu Produkten, lebt in einem Modell.
Das Verständnis von Odoo-Modellen ist sowohl für Entwickler als auch für funktionale Berater unerlässlich. Modelle sind das Fundament der Odoo-Datenarchitektur. Sie definieren Odoo-Felder, Beziehungen und Geschäftslogik. Jedes Modell in Odoo folgt denselben Mustern.
Dieser Artikel konzentriert sich auf eines der wichtigsten Modelle in Odoo: product.template. Egal, ob Sie benutzerdefinierte Module erstellen, externe Systeme integrieren oder Produktkataloge konfigurieren, Sie werden mit diesem Modell arbeiten.
Was ist das Produkt.template-Modell
Das Produkt.template-Modell repräsentiert eine Gruppe ähnlicher Produkte, die sich nur in wenigen Eigenschaften wie Größe oder Farbe unterscheiden. Anstatt separate Produktdatensätze für jede Variation zu erstellen, werden Produkte in Vorlagen mit Varianten organisiert.
Dieses Modell in Odoo wird in den Bereichen Verkauf, Einkauf, Lager, E-Commerce und Fertigung verwendet. Wenn Sie ein Produkt im Katalog erstellen, erstellen Sie einen Produkt.template-Datensatz. Wenn Sie eine Kundenbestellung erstellen, wählen Sie aus Produktvarianten, die von der Vorlage erben.
Das Modell ist im Produktmodul definiert. Andere Module erweitern es durch die Odoo-Modellvererbung. Der Verkauf fügt Preisgestaltung und Rechnungsstellung hinzu. Der Einkauf fügt die Verwaltung von Lieferanten hinzu. Das Lager fügt die Bestandsverfolgung hinzu. Jedes Modul fügt hinzu, was es benötigt, ohne die Kernstruktur zu duplizieren.
Das Verständnis des Unterschieds zwischen product.template und product.product ist entscheidend. Die Vorlage enthält gemeinsame Daten. Die Variante (product.product) enthält variantspezifische Daten wie Barcode und SKU.
Wichtige Felder im Modell
Hier sind die wichtigsten Odoo-Felder im Produkt.template-Modell. Das Verständnis dieser Felder wird Ihnen helfen, effektiv mit Produkten zu arbeiten.
1. name
Typ: Char. Dieses Feld speichert den Namen des Produkts. Es wird in vielen Odoo-Ansichten angezeigt und ist der primäre Identifikator für die Produktvorlage.
2. create_date
Typ: Datetime. Speichert das Datum und die Uhrzeit, zu der der Datensatz erstellt wurde. Wird automatisch von Odoo verwaltet. Nützlich für Berichterstattung und Audits.
3. write_date
Typ: Datetime. Speichert das Datum und die Uhrzeit der letzten Änderung. Wird ebenfalls automatisch verwaltet. Hilft dabei, nachzuvollziehen, wann die Daten zuletzt aktualisiert wurden.
4. active
Typ: Boolean. Soft-Delete-Flag. Wenn False, wird der Datensatz archiviert und von den Standardansichten verborgen. Datensätze werden nicht physisch gelöscht.
5. Sequenz
Typ: Integer. Anzeigeordnung für die Sortierung. Wird in Produktlisten und Dropdowns verwendet. Niedrigere Werte erscheinen zuerst.
6. Typ
Typ: Auswahl. Produkttyp: Verbrauchsmaterial, Dienstleistung oder lagerfähiges Produkt. Verbrauchsmaterialien werden nicht im Lager verfolgt. Dienstleistungen haben keinen physischen Bestand. Lagerfähige Produkte werden im Inventar verfolgt.
7. categ_id
Typ: Many2one (product.category). Die Produktkategorie. Beeinflusst Berichterstattung, Standardrouten und Katalogorganisation. Kategorien können hierarchisch sein.
8. list_price
Typ: Float. Der Verkaufspreis. Wird als Standard verwendet, wenn Angebote erstellt werden. Kann durch Preisliste oder variantenspezifische Preisgestaltung überschrieben werden.
9. standard_price
Typ: Float. Der Kostenpreis. Wird für Margenberechnungen und Lagerbewertung verwendet. Beeinflusst Rentabilitätsberichte.
10. currency_id
Typ: Many2one (res.currency). Die Währung für list_price und standard_price. Wird normalerweise von der Firma geerbt.
11. uom_id
Typ: Many2one (uom.uom). Die Maßeinheit für den Verkauf. Definiert, wie Mengen ausgedrückt werden (z.B. Stück, Kg, Liter).
12. uom_po_id
Typ: Many2one (uom.uom). Die Maßeinheit für Einkäufe. Kann sich von uom_id in Umrechnungsszenarien unterscheiden.
13. default_code
Typ: Char. Interne Referenz oder Code. Nützlich für die Zuordnung zu externen Systemen und für benutzerdefinierte Nummerierungen. Oft als SKU verwendet.
14. barcode
Typ: Char. Barcode zum Scannen. Wird im POS, Lager und Inventar verwendet. Bei Varianten ist der Barcode typischerweise auf product.product.
15. description
Typ: Char. Interne Beschreibung. Nur für interne Benutzer sichtbar. Wird für interne Notizen über das Produkt verwendet.
16. description_sale
Typ: Text. Verkaufsbeschreibung. Wird auf Angeboten und Rechnungen angezeigt. Kann HTML zur Formatierung enthalten.
17. beschreibung_einkauf
Typ: Text. Einkaufsbeschreibung. Wird auf Bestellungen und Lieferantenrechnungen angezeigt. Hilft Käufern, mit Lieferanten zu kommunizieren.
18. verkauf_ok
Typ: Boolean. Gibt an, ob das Produkt verkauft werden kann. Wenn False, wird das Produkt in Verkaufs- und Angebotsformularen ausgeblendet.
19. einkauf_ok
Typ: Boolean. Gibt an, ob das Produkt gekauft werden kann. Wenn False, wird das Produkt in Bestellformularen ausgeblendet.
20. gewicht
Typ: Float. Produktgewicht. Wird für Versandberechnungen und Logistik verwendet. Einheit hängt von den UoM-Einstellungen des Unternehmens ab.
21. volumen
Typ: Float. Produktvolumen. Wird für Logistik und Lagerkapazitätsplanung verwendet.
22. produkt_varianten_ids
Typ: One2many (product.product). Die Liste der Produktvarianten. Jede Variante erbt vom Template.
23. produkt_variant_count
Typ: Ganzzahl. Anzahl der Varianten. Berechnet aus product_variant_ids. Wird für die Anzeige und Filterung verwendet.
24. image_1920
Typ: Binär. Produktbild. Odoo speichert mehrere Größen. Wird in Formularen, Berichten und auf der Website verwendet.
25. responsible_id
Typ: Many2one (res.users). Der verantwortliche Benutzer. Wird für das Produktmanagement und die Zuweisung von Aktivitäten verwendet.
26. company_id
Typ: Many2one (res.company). In Multi-Company-Setups zeigt dies an, zu welchem Odoo-Unternehmen das Produkt gehört.
27. tax_ids
Typ: Many2many (account.tax). Kundenspezifische Steuern für Verkäufe. Werden auf Rechnungen und Angeboten angewendet.
28. supplier_tax_id
Typ: Many2many (account.tax). Lieferantensteuern für Einkäufe. Anwendbar auf Lieferantenrechnungen.
29. attribute_line_ids
Typ: One2many. Produktattributzeilen für Varianten. Definiert, welche Attribute (z.B. Größe, Farbe) Varianten erstellen.
30. route_ids
Typ: Many2many (stock.route). Lagerwege. Bestimmt, wie das Produkt durch die Lieferkette bewegt wird (z.B. Kaufen, Auftragsfertigung).
31. property_stock_production
Typ: Many2one (stock.location). Produktionsstandort für hergestellte Produkte. Wird verwendet, wenn der Typ lagerfähig ist und die Route Fertigung umfasst.
32. property_stock_inventory
Typ: Many2one (stock.location). Standort für Bestandsanpassungen. Wird für Bestandszählungen und Korrekturen verwendet.
33. property_valuation
Typ: Auswahl. Methode zur Bestandsbewertung: Automatisiert oder Manuell. Beeinflusst, wie die Kosten berechnet werden.
34. property_cost_method
Typ: Auswahl. Kostenrechnungsmethode: Standard oder FIFO. Bestimmt, wie der Inventarwert berechnet wird.
35. property_account_income_id
Typ: Many2one (account.account). Einkommenskonto für Verkäufe. Wird bei der Rechnungsstellung verwendet.
36. property_account_expense_id
Typ: Many2one (account.account). Aufwandskonto für Einkäufe. Wird beim Empfang von Lieferantenrechnungen verwendet.
37. invoice_policy
Typ: Auswahl. Wann zu fakturieren ist: Bestellmengen oder Gelieferte Mengen. Beeinflusst, wann Einnahmen anerkannt werden.
38. expense_policy
Typ: Auswahl. Wann zu verbuchen ist: Bestellt oder Geliefert. Beeinflusst, wann Kosten anerkannt werden.
39. service_type
Typ: Auswahl. Für Dienstleistungsprodukte: Manuell, Stundenzettel oder Meilensteine. Bestimmt, wie Dienstleistungen verfolgt und fakturiert werden.
40. optional_product_ids
Typ: Many2many (product.template). Optionale Produkte für Upselling. Wird angezeigt, wenn dieses Produkt zu einem Angebot hinzugefügt wird.
Wie dieses Modell in Geschäftsabläufen verwendet wird
1. Vertrieb und Angebote
Wenn ein Verkäufer ein Angebot erstellt, wählt er Produkte aus dem Katalog aus. Das Modell product.template bietet das Basisprodukt. Varianten werden ausgewählt, wenn das Produkt Attribute hat (Größe, Farbe).
2. E-Commerce
Auf der Website sehen Kunden Produktvorlagen im Katalog. Wenn sie auf ein Produkt klicken, können sie zwischen Varianten wählen. Die Vorlage enthält die gemeinsame Beschreibung und Bilder.
3. Einkauf und Lieferanten
Bestellungen und Lieferantenrechnungen verknüpfen sich mit product.template. Das Feld purchase_ok steuert die Sichtbarkeit. Die supplier_tax_id und uom_po_id bestimmen das Einkaufsverhalten.
4. Lager und Fertigung
Bestandsbewegungen und Fertigungsaufträge beziehen sich auf Produktvarianten. Die Vorlage definiert Routen, Bewertung und Kostenmethode. Der Bestand wird pro Variante verfolgt.
5. Rechnungsstellung
Rechnungen und Rechnungen beziehen sich auf Produktlinien. Die Vorlage liefert Steuerregeln und Buchhaltungskonten. Die Rechnungsrichtlinie bestimmt, wann Einnahmen anerkannt werden.
Wie Entwickler dieses Modell erweitern
Entwickler erweitern product.template mit mehreren Mustern. Die Vererbung von Odoo-Modellen ist der Hauptmechanismus.
Modellvererbung
Verwenden Sie _inherit = 'product.template', um das Modell zu erweitern. Dies ist die Modellvererbung in Odoo in Aktion. Fügen Sie neue Odoo-Felder hinzu, überschreiben Sie Methoden oder fügen Sie Einschränkungen hinzu. Das vererbte Modell in Odoo hält Ihre Änderungen in einem separaten Modul für einfache Upgrades. Wenn Sie ein Modell in Odoo erben, erweitern Sie es, ohne das Original zu ändern.
Felder hinzufügen
Definieren Sie neue Odoo-Felder in Ihrem vererbten Modell. Verwenden Sie den richtigen Feldtyp: Char, Many2one, Boolean, Integer, Text, Auswahl. Berücksichtigen Sie unternehmensabhängige Felder für mehrere Unternehmen.
Python-Erweiterungen
Überschreiben Sie create, write oder unlink, um Logik hinzuzufügen. Verwenden Sie super(), um das Original aufzurufen. Seien Sie vorsichtig mit berechneten Feldern und deren Abhängigkeiten.
Odoo Studio
Odoo Studio ermöglicht es Ihnen, Felder ohne Code hinzuzufügen. Gut für schnelle Anpassungen. Für komplexe Logik oder Upgrades sind benutzerdefinierte Module wartungsfreundlicher.
Best Practices
- Verwenden Sie die Template-Variant-Beziehung korrekt. Legen Sie gemeinsame Daten auf dem Template und variantenspezifische Daten auf product.product ab.
- Setzen Sie categ_id für eine ordnungsgemäße Weiterleitung und Berichterstattung. Kategorien bestimmen das Standardverhalten.
- Verwenden Sie default_code für die Zuordnung zu externen Systemen. Halten Sie es, wenn möglich, einzigartig.
- Beim Erstellen von API-Integrationen verwenden Sie die XML-RPC- oder JSON-RPC-API. Das Modell product.template ist vollständig als API-Modell in Odoo verfügbar. Ordnen Sie externe IDs sorgfältig zu.
- Für benutzerdefinierte Felder verwenden Sie das
x_-Präfix oder ein Modulpräfix, um Konflikte mit zukünftigen Odoo-Versionen zu vermeiden.
Häufige Fehler
- Erstellen Sie doppelte Vorlagen, anstatt Varianten zu verwenden. Verwenden Sie attribute_line_ids für Produkte, die sich nur in Größe, Farbe usw. unterscheiden.
- Verwechseln Sie product.template und product.product. Wenn Sie variantenspezifische Daten (Barcode, SKU) benötigen, verwenden Sie product.product.
- Vergessen Sie nicht, sale_ok oder purchase_ok festzulegen. Produkte werden in Formularen ausgeblendet, wenn diese auf False gesetzt sind.
- Überschreiben Sie Kernmethoden, ohne super() aufzurufen. Dies kann andere Module oder zukünftige Upgrades beeinträchtigen.
- Fügen Sie erforderliche benutzerdefinierte Felder ohne Standardwerte hinzu. Bestehende Datensätze werden bei einem Upgrade die Validierung nicht bestehen.
Fazit
Das Modell product.template ist zentral für Odoo. Es speichert Produktdefinitionen und gemeinsame Attribute. Das Verständnis seiner Felder und wie Module es erweitern, wird Ihnen helfen, Odoo effektiv zu konfigurieren, anzupassen und zu integrieren.
Egal, ob Sie ein funktionaler Berater sind, der Produktkataloge abbildet, oder ein Entwickler, der benutzerdefinierte Module erstellt, ein solides Verständnis von product.template wird Zeit sparen und Fehler verhindern.
Beginnen Sie mit Dasolo
Dasolo hilft Unternehmen bei der Implementierung, Anpassung und Optimierung von Odoo. Wir sind auf API-Integrationen und Odoo-Entwicklung spezialisiert. Unser Team hat umfassende Erfahrung mit der Odoo-Datenarchitektur und Modellen wie product.template.
Wenn Sie Hilfe bei Ihrer Odoo-Implementierung, benutzerdefinierten Modulen oder Integrationen benötigen, sind wir hier, um zu helfen. Buchen Sie eine Demo um Ihr Projekt zu besprechen.