Introductie
In Odoo bepalen modellen hoe gegevens worden opgeslagen en georganiseerd in de database. Alle zakelijke informatie — van offerte tot factuur en boekingspost — leeft in een model en volgt daar vaste attributen en relaties.
Kennis van Odoo-modellen is onmisbaar voor zowel functionele consultants als ontwikkelaars. Modellen vormen de ruggengraat van de data-architectuur: ze definiëren velden, koppelingen tussen records en de bedrijfslogica die erop draait.
Dit artikel zoomt in op een kernmodel binnen de boekhouding van Odoo: account.move.line. Of je nu rapporten bouwt, koppelt met externe systemen of betaal- en afstemmingsprocessen configureert, je komt dit model vaak tegen.
Wat is het account.move.line-model
Het account.move.line-model staat voor afzonderlijke regelregels in een boekingsstuk. Elke regel is óf een debetpost óf een creditpost; samen moeten de regels van een boeking in evenwicht zijn zodat debet en credit gelijk lopen.
Binnen Odoo hoort dit model bij de Accounting-app en is het kindrecord van account.move — het boekingsstuk zelf (zoals facturen, leveranciersnota's, bankafschriften en journaalboekingen). Eén boeking bevat steeds één of meer regels.
De basisdefinitie zit in de account-module; andere modules breiden het model uit via Odoo-inheritance. Verkoop voegt factuurdetails toe, Inkoop voegt bestelregelinfo toe en Analytic voegt kostenallocaties toe. Zo blijft de kernstructuur intact terwijl extra functionaliteit modulair wordt toegevoegd.
Belangrijke velden in het model
Hieronder vind je de velden die je het vaakst nodig hebt bij het werken met boekingsregels. Wie deze begrijpt, kan vlotter rapporteren, afstemmen en integreren.
1. name
Type: Char. Beschrijft de regel — denk aan het label of de omschrijving die in weergaven en op rapporten verschijnt. Bij factuurregels komt dit vaak van de productnaam of een handmatige omschrijving.
2. move_id
Type: Many2one (account.move). Verwijst naar het bovenliggende boekingsstuk. Elke regel behoort standaard tot precies één move en dat is de belangrijkste relatie binnen het model.
3. account_id
Type: Many2one (account.account). Het grootboekrekening waarop de regel geboekt wordt. Verplicht veld; moet een normale (geen view of gesloten) rekening zijn en bepaalt hoe de balans- en resultatenrapporten gegroepeerd worden.
4. debit
Type: Float. Het debetbedrag; standaard 0.0. Per regel staat ofwel debit ofwel credit. Debet verhoogt doorgaans activa en kostenrekeningen.
5. credit
Type: Float. Het creditbedrag; standaard 0.0. Credit verhoogt passiva, eigen vermogen en opbrengsten. Binnen een book move moeten alle debetsommen gelijk zijn aan alle creditsommen.
6. balance
Type: Float. Berekend veld: debit minus credit. Geeft het netto-effect van de regel weer — positief voor debet, negatief voor credit — en wordt veel gebruikt in rapportages en bij afstemming.
7. partner_id
Type: Many2one (res.partner). De klant, leverancier of andere tegenpartij gekoppeld aan de regel. Belangrijk voor vorderingen/te betalen posten, aging-overzichten en reconciliatie.
8. date
Type: Date. De boekingsdatum van de regel, meestal overgenomen van het parent-move. Gebruikt bij periodeafsluitingen, rapportering en aging.
9. date_maturity
Type: Date. De vervaldatum voor betaling. Relevant voor debiteuren en crediteuren en belangrijk bij betalingsplanning en aging-analyses.
10. currency_id
Type: Many2one (res.currency). De valuta van de regel. Kan verschillen van de bedrijfsvaluta bij multivaluta-boekingen.
11. amount_currency
Type: Float. Bedrag uitgedrukt in de regelvaluta. In combinatie met currency_id maakt dit multilvaluta-administratie mogelijk.
12. quantity
Type: Float. Optionele hoeveelheid, nuttig voor productgebonden regels (facturen, leveranciersnota's). Handig voor rapporten op basis van aantallen en voor prijsberekeningen per eenheid.
13. product_id
Type: Many2one (product.product). Het product gekoppeld aan de regel, ingevuld bij regels die voortkomen uit verkoop- of inkooporders of factuurregels.
14. product_uom_id
Type: Many2one (uom.uom). De eenheid waarin de quantity is uitgedrukt. Belangrijk voor correcte weergave en conversies bij producten.
15. price_unit
Type: Float. De prijs per eenheid. Wordt samen met quantity gebruikt om het regelbedrag te berekenen op facturen en rekeningen.
16. tax_ids
Type: Many2many (account.tax). De belastingen die op de regel van toepassing zijn. Bij het posten maakt Odoo vaak extra regels aan voor de belastingbedragen.
17. tax_line_id
Type: Many2one (account.tax). Bij belastingregels verwijst dit naar de belasting die de regel heeft gegenereerd, zodat tax-lines onderscheiden kunnen worden van normale boekingsregels.
18. analytic_account_id
Type: Many2one (account.analytic.account). De analytische rekening voor kosten- en opbrengstallocatie. Wordt gebruikt zodra analytic accounting is ingeschakeld.
19. analytic_distribution
Type: Json of Text. Slaat verdelingen over meerdere analytische rekeningen op. In nieuwere Odoo-versies vervangt dit soms de enkelvoudige analytic_account_id bij gebruik van analytische plannen.
20. ref
Type: Char. Externe referentie of memo; vaak gerelateerd van de parent move. Handig voor rapporten en bij het zoeken naar specifieke transacties.
21. narration
Type: Text. Interne toelichting of notitie, meestal overgenomen van het parent move. Standaard niet zichtbaar op klantdocumenten.
22. journal_id
Type: Many2one (account.journal). Het journaal waartoe het parent move behoort. Wordt gebruikt voor filteren en rapportage per journaal.
23. company_id
Type: Many2one (res.company). De onderneming waartoe de regel hoort. In multi-company-omgevingen bepaalt dit zichtbaarheid en consolidatieregels.
24. reconciled
Type: Boolean. Geeft aan of de regel volledig is afgestemd. Handig om ongereconcilieerde posten te filteren in afstemmingsschermen.
25. full_reconcile_id
Type: Many2one (account.full.reconcile). Verbindt alle regels die samen zijn afgestemd, zodat je een groep aan elkaar gekoppelde regels kunt terugvolgen.
26. payment_id
Type: Many2one (account.payment). Voor betaalregels: link naar de betalingsregel. Wordt gebruikt bij het afstemmen van facturen met betalingen.
27. statement_id
Type: Many2one (account.bank.statement). Voor bankafschriftregels: link naar het afschrift. Belangrijk bij bankreconciliatie.
28. statement_line_id
Type: Many2one (account.bank.statement.line). Verwijst naar de specifieke bankafschriftregel waarmee de boekingsregel gematcht kan worden.
29. display_type
Type: Selection. Kan waarden bevatten zoals 'line_section' of 'line_note' voor sectiekoppen en opmerkingen in een boeking; deze regels hebben geen debet of credit en zijn puur visueel.
30. create_date
Type: Datetime. Tijdstip waarop het record werd aangemaakt; wordt automatisch door Odoo beheerd en is nuttig voor auditdoeleinden.
31. write_date
Type: Datetime. Laatste wijzigingsmoment; ook automatisch bijgehouden en helpt veranderingen in de tijd te volgen.
Hoe dit model in bedrijfsprocessen wordt gebruikt
1. Klantfacturatie
Bij het valideren van een verkoopfactuur genereert Odoo meerdere account.move.line-regels: opbrengstregels op inkomstenrekeningen, vorderingen op debiteurenrekeningen en aparte regels voor BTW. De partner is gekoppeld voor aging en reconciliatie.
2. Leveranciersfacturen
Leveranciersnota's creëren regels voor kosten, aftrekbare BTW en crediteuren. Structuur lijkt op die van klantfacturen, maar met andere rekeningtypen en omgekeerde debet/credit-posities.
3. Bankreconciliatie
Bankafschriftregels worden gekoppeld aan move-regels via statement_line_id. Bij afstemming verbindt Odoo regels vaak via full_reconcile_id en zet het reconciled-veld op True.
4. Handmatige journaalboekingen
Gebruikers kunnen zelf journaalposten aanmaken met meerdere regels. Elke regel heeft een rekening en debet of credit; Odoo controleert dat debet en credit in balans zijn voordat een boeking kan worden gepost.
5. Analytische en kostengerelateerde rapportage
Als analytische boekhouding actief is, bevatten regels analytic_account_id of analytic_distribution, zodat je rapporten kunt opdelen per project, afdeling of andere dimensie voor betere kostentoewijzing.
Hoe ontwikkelaars dit model uitbreiden
Ontwikkelaars breiden account.move.line uit met verschillende technieken, waarbij Odoo-modelinheritance het meest gangbaar is.
Modelinherintance
Door _inherit = 'account.move.line' te gebruiken breid je het bestaande model uit. Je kunt nieuwe velden toevoegen, methodes overschrijven of extra validaties inbouwen. Zo blijven wijzigingen modulair en upgrademakkelijk.
Velden toevoegen
Definieer extra Odoo-velden in je geërfde model: Char, Many2one, Boolean, Integer, Text, Selection, enz. Houd rekening met bedrijfsspecifieke velden in multi-company omgevingen en wees voorzichtig met computed-velden en hun dependencies.
Python-extensies
Overschrijf create, write of unlink om custom-logica toe te voegen, maar roep altijd super() aan om de standaardflow te bewaren. Pas op dat je de balansregel (debet = credit) of reconciliatie-processen niet breekt.
Odoo Studio
Odoo Studio is handig om zonder code extra velden toe te voegen aan account.move.line — snel voor labels of tags. Voor complexe regels of afstemmingslogica blijven maatwerkmodules echter betrouwbaarder op lange termijn.
Aanbevolen werkwijzen
- Maak of wijzig nooit losse move lines rechtstreeks zonder via het parent move te werken. Gebruik de API van de move (bijv. line_ids) zodat Odoo consistentiechecks uitvoert en alle hooks afloopt.
- Bij rapporten: filter op move_id.state = 'posted' om concepten en geannuleerde boekingen uit je cijfers te houden.
- Gebruik het juiste account_id-type (debiteuren, crediteuren, opbrengst, kost) zodat aging en reconciliatie correct functioneren.
- Bij integraties via API: maak eerst de move aan en voeg daarna de regels toe. Controleer vooraf dat debet en credit in balans zijn voor je post.
- Voor custom-velden: geef ze een x_ of moduleprefix om conflicten met toekomstige Odoo-releases te vermijden.
Veelvoorkomende fouten
- Beide debit en credit op één regel zetten. Elke regel moet óf een debit óf een credit bevatten, nooit beide.
- Ongebalanceerde boekingen aanmaken. Debetsommen moeten gelijk zijn aan creditsommen; Odoo valideren dit bij het posten.
- Geposte regels rechtstreeks aanpassen in plaats van correct te corrigeren via stornering of tegenboekingen. Geraposteerde stukken pas je aan met nieuwe boekingen.
- Partner_id vergeten zetten op debiteuren-/crediteurenregels. Dit breekt aging-overzichten en maakt reconciliatie moeilijker.
- Kernmethodes overschrijven zonder super() te roepen. Dat kan reconciliatie, locking of andere modules laten falen.
Conclusie
Het account.move.line-model is het hart van Odoo Accounting: alle debet- en creditregels van journaalposten, facturen en nota's worden er bewaard. Wie de velden en uitbreidingsmogelijkheden begrijpt, kan Odoo beter configureren, aanpassen en koppelen.
Of je nu processen in kaart brengt als consultant of integraties bouwt als ontwikkelaar: een degelijke kennis van account.move.line bespaart tijd en voorkomt financiële fouten.
Hulp nodig bij je Odoo-implementatie?
Dasolo begeleidt bedrijven bij implementatie, maatwerk en optimalisatie van Odoo. We hebben veel ervaring met API-koppelingen en met de Odoo-datalaag, waaronder modellen zoals account.move.line.
Heb je hulp nodig bij je Odoo-implementatie, maatwerkmodules of integraties? Wij staan voor je klaar. Plan een demo om je project te bespreken.