Introduktion
I Odoo beskriver modeller, hvordan forretningsdata organiseres og gemmes i databasen. Al information — fra salgsordrer til fakturaer og bogførte posteringer — repræsenteres gennem modeller, som definerer felter, relationer og lagringsregler.
For både tekniske og funktionelle roller er forståelsen af modeller afgørende. Modeller er Odoos datagrundlag: de fastsætter hvilke felter der findes, hvordan poster hænger sammen, og hvor forretningslogikken skal placeres.
Denne guide zoomer ind på en af de vigtigste regnskabsmodeller i Odoo: account.move.line. Uanset om du skal lave tilpassede rapporter, koble eksterne systemer på eller styre afstemningsprocesser, vil du møde denne model ofte.
Hvad er modellen account.move.line
Modellen account.move.line repræsenterer de enkelte posteringer i en bogføring — hver linje er enten en debet eller en kredit. Når en bogføring (move) er fuldt sammensat, skal summen af debet være lig med summen af kredit.
account.move.line er en del af regnskabspakken og er underordnet account.move, som er den overordnede postering (fx faktura, leverandørfaktura, bankpost eller manuel journal). Én move indeholder altid mindst én move.line.
Selve definitionen findes i account-modulet, men mange andre moduler udvider modellen via Odoo-arv. Salg tilfører fx fakturalinjer, Indkøb tilføjer leverandørlinjer, og analytisk bogføring tilføjer fordelingsfelter — hvert modul bygger videre uden at kopiere kernefunktionen.
Væsentlige felter i modellen
Nedenfor gennemgår vi de vigtigste felter i account.move.line. Kendskab til disse gør det langt nemmere at arbejde med bogføringer, afstemning og rapportering i Odoo.
1. name
Type: Char. Linjens beskrivelse eller etiket. Vigtigt for visninger og udskrifter. På fakturalinjer kommer teksten ofte fra produktnavn eller en tilpasset beskrivelse.
2. move_id
Type: Many2one (account.move). Koblingen til den overordnede bogføring. Hver linje tilhører præcis én move — det er modellens primære relation.
3. account_id
Type: Many2one (account.account). Den konto, linjen bogføres på. Obligatorisk; skal være en ikke-visnings- eller åben konto. Bruges i kontoplanrapportering og gruppering.
4. debit
Type: Float. Debetbeløb. Standard 0.0. På en linje sættes kun enten debit eller credit. Debet øger aktiv- og omkostningskonti.
5. credit
Type: Float. Kreditbeløb. Standard 0.0. Kredit øger passiv-, egenkapital- og indtægtskonti. Summen af debet skal matche summen af kredit i en move.
6. balance
Type: Float. Beregnet felt: debit minus credit. Viser linjens nettovirkning. Positiv ved debet, negativ ved kredit. Bruges i rapporter og ved afstemning.
7. partner_id
Type: Many2one (res.partner). Den kunde eller leverandør, linjen relaterer til. Vigtigt for hæftende poster, aldersopgørelser og afstemning.
8. date
Type: Date. Linjens regnskabsdato. Som regel arvet fra parent-moven. Påvirker periodestyring, lukning og rapportering.
9. date_maturity
Type: Date. Forfaldsdato. Relevant for debitor-/kreditorstyring, bruges i aldersfordelinger og betalingsplaner.
10. currency_id
Type: Many2one (res.currency). Linjens valuta. Muliggør poster i anden valuta end selskabets basevaluta ved multivalutaopstillinger.
11. amount_currency
Type: Float. Beløbet i linjens valuta. Sammen med currency_id håndteres valutatransaktioner og omregning til selskabsvaluta.
12. quantity
Type: Float. Valgfri mængde. Anvendes ved produktbaserede linjer (fakturaer, leverandørfakturaer) til mængdebaseret rapportering og beregning af enhedspriser.
13. product_id
Type: Many2one (product.product). Produktet knyttet til linjen. Fyldes når linjen stammer fra salg, indkøb eller fakturalinje.
14. product_uom_id
Type: Many2one (uom.uom). Enheden for mængden. Bruges sammen med product_id til korrekt visning og konvertering af mængder.
15. price_unit
Type: Float. Enhedspris. Bruges med quantity til at regne beløb ud på faktura- og leverandørlinjer.
16. tax_ids
Type: Many2many (account.tax). Skatter knyttet til linjen. Ved postering oprettes ofte separate skatterlinjer. Bruges til moms- og skatteberegninger.
17. tax_line_id
Type: Many2one (account.tax). På skattelinjer peger dette felt tilbage til den skat, der har skabt linjen. Skelner skattelinjer fra normale kontolinjer.
18. analytic_account_id
Type: Many2one (account.analytic.account). Analytisk konto til sporbarhed af omkostninger/indtægter. Aktiv når analytisk bogføring er slået til.
19. analytic_distribution
Type: Json eller Text. Fordeling på flere analytiske konti. Brugt i nyere Odoo-udgaver som erstatning for enkelt analytic_account_id ved fordelingsplaner.
20. ref
Type: Char. Ekstern reference eller memo, ofte arvet fra parent-moven. Synlig i rapporter og brugt til afstemningsmatchning.
21. narration
Type: Text. Internt notat, typisk relateret fra parent. Udskrives normalt ikke på kunde-dokumenter som standard.
22. journal_id
Type: Many2one (account.journal). Journalen for parent-moven. Praktisk til filtrering og journalrapportering.
23. company_id
Type: Many2one (res.company). Selskabet i multi-selskabsopsætning. Påvirker synlighed og konsolidering.
24. reconciled
Type: Boolean. Angiver om linjen er fuldt afstemt. Bruges til at filtrere uafstemte poster i afstemningsvisninger.
25. full_reconcile_id
Type: Many2one (account.full.reconcile). Samler linjer, der er afstemt sammen. Gør det muligt at følge hele afstemningsgruppen.
26. payment_id
Type: Many2one (account.payment). For betalingslinjer peger dette felt til betalingsposten. Bruges ved afstemning af fakturaer mod betalinger.
27. statement_id
Type: Many2one (account.bank.statement). Ved bankafstemning knyttes linjen til en bankudtogspostering.
28. statement_line_id
Type: Many2one (account.bank.statement.line). Link til den konkrete bankudtogslinje ved matchning af transaktioner.
29. display_type
Type: Selection. Kan være 'line_section' eller 'line_note' for overskrifter og noter i en bogføring. Disse linjer har hverken debit eller credit og er kun til visuel struktur.
30. create_date
Type: Datetime. Tidspunkt for oprettelse. Styrt automatisk af Odoo og nyttig ved revision.
31. write_date
Type: Datetime. Sidste ændringstidspunkt. Også automatisk; hjælper med at spore ændringer over tid.
Sådan bruges modellen i forretningsprocesser
1. Kunde‑fakturering
Når en salgsfaktura bekræftes, opretter Odoo de nødvendige move.lines: indtægtslinjer på indtægtskonti, debitorlinjer på kundekonti og separate skattelinjer for moms. partner_id kobler linjerne til kunden til aldersfordeling og afstemning.
2. Leverandørfakturaer
Leverandørregninger danner linjer for udgifter, indgående moms og kreditorer. Strukturen svarer til salgsfakturaer men benytter de relevante konto-typer for indkøb og omkostninger.
3. Bankafstemning
Bankudtogslinjer matches op imod move.lines via statement_line_id. Ved afstemning samles linjerne ofte gennem full_reconcile_id, og reconciled sættes til True for færdighandlede poster.
4. Manuelle journalposteringer
Brugere kan oprette manuelle journaler med flere linjer — hver linje har konto, debit eller credit og evt. partner. Odoo sørger for, at debet og kredit balancerer før bogføring.
5. Analytisk og omkostningsrapportering
Med analytisk bogføring medtages enten analytic_account_id eller analytic_distribution på linjer, så rapporter kan vise omkostninger og indtægter pr. projekt, afdeling eller anden dimension.
Sådan udvider udviklere modellen
Udviklere bygger videre på account.move.line med forskellige teknikker; Odoo’s arvsmodel er det centrale værktøj.
Modelarv
Angiv _inherit = 'account.move.line' i din moduldefinition for at udvide modellen. Du kan tilføje felter, overskrive metoder eller indføre valideringer. Arv holder ændringerne i et separat modul, hvilket letter opgraderinger.
Tilføjelse af felter
Opret nye felter i den arvede model med de rette typer: Char, Many2one, Boolean, Integer, Text, Selection osv. Overvej selskabsafhængige felter i multi‑company-opsætninger og vær varsom med afhængigheder for beregnede felter.
Python‑udvidelser
Override metoder som create, write eller unlink for at indsætte logik. Brug altid super() for at bevare standardadfærd. Pas på ikke at bryde reglen om balancerede poster — Odoos API er designet til eksterne integrationer via disse hooks.
Odoo Studio
Med Odoo Studio kan du hurtigt lægge ekstra felter på account.move.line uden at kode. Det er fint til simple tilpasninger, men komplekse regler og afstemningslogik er ofte bedst løst i et egentligt modul.
Bedste praksis
- Gode tommelfingerregler: opret og ændr aldrig move.lines direkte udenom parent‑moven. Brug move‑API’et (fx line_ids) så Odoo kan køre alle valideringer og holde konsistens.
- Filtrer rapporter og forespørgsler på
move_id.state = 'posted'for at udelukke kladder og annullerede posteringer. - Sørg for at account_id har korrekt kontotype (debitor, kreditor, mv.) så aldersopgørelser og afstemning fungerer korrekt.
- Ved integration via API: opret først move‑posteringen, tilføj derefter linjerne, og sørg for at debet og kredit balancerer inden postering.
- Til pas‑på‑felter i kundemoduler: brug altid
x_eller modulets præfiks i felt‑navne for at undgå navnekonflikter ved fremtidige Odoo‑opgraderinger.
Almindelige fejl
- Sæt ikke både debit og credit på samme linje. En linje bør kun repræsentere enten en debet eller en kredit.
- Undgå ubalancerede moves. Summen af debet og kredit skal stemme — Odoo validerer dette ved bogføring.
- Rediger ikke bogførte linjer direkte. Ændringer i poster, der allerede er bogført, skal ske via modposteringer eller korrektioner, ikke ved at ændre den originale postering.
- Husk partner_id på debitor‑/kreditorkonti; uden partner bryder afstemning og aldersrapporter.
- Når du overskriver kernemetoder, kald altid super(). Udeladelse kan ødelægge afstemning, låsninger eller påvirke andre modulers funktionalitet.
Konklusion
account.move.line er kernen i Odoo Regnskab — den gemmer hver eneste debet og kredit i fakturaer, regninger og journaler. At kende felterne og hvordan andre moduler bygger videre på modellen gør det langt nemmere at konfigurere, udvide og integrere Odoo korrekt.
Uanset om du er funktionel konsulent, der skal modellere regnskabsprocesser, eller udvikler, der bygger rapporter og integrationer, vil et solidt greb om account.move.line spare tid og forebygge fejl.
Brug for hjælp til din Odoo-implementering?
Dasolo hjælper virksomheder med implementering, tilpasning og optimering af Odoo. Vi specialiserer os i API‑integrationer og udvikling og har indgående erfaring med Odoos datamodel og centrale modeller som account.move.line.
Har du brug for hjælp til implementering, tilpassede moduler eller integrationer i Odoo, står vi klar til at assistere. Book en demo for at tage en snak om dit projekt.