Skip to Content

Odoo 19 dokumentnumre av prefiks, år og teller – modulen document_number_prefix_year og fallgruven ved samtidig opprettelse

3. november 2026 | Odoo 19 Community | Egenutvikling
3. november 2026 etter
Odoo 19 dokumentnumre av prefiks, år og teller – modulen document_number_prefix_year og fallgruven ved samtidig opprettelse

Odoo 19-modulen document_number_prefix_year: dokumentnumre av prefiks, år og teller

«AN26000001» sier mer enn «S00001»: Det er et tilbud, det stammer fra 2026, og det er det første. Mange virksomheter, særlig de som går over fra et eldre system til Odoo, vil beholde dokumentnumrene sine akkurat slik. Odoo selv nummererer tilbud, ordrer og følgesedler med egne serier (S00001, WH/OUT/00001, P00001) og fakturaer med journalprefikset og året (INV/2026/00001).

Vi har skrevet modulen Document Numbering by Prefix and Year (document_number_prefix_year) for Odoo 19 til dette. Den ligger som fri programvare under LGPL-3-lisensen på GitHub:

github.com/Alex0176/odoo-document-number-prefix-year

En ærlig innledende vurdering: Vi bruker ikke modulen hos Biricon IT Services. Vi publiserer den fordi den er ferdig, dokumentert og utstyrt med tester, og kan spare andre for arbeid. Den som tar den i bruk, bør lese avsnittene om begrensninger og Tester .

Nummerskjemaet

Hvert nummer består av tre deler: et prefiks per dokumenttype, året og en teller med fast antall sifre. Prefikset, årsformatet (26 eller 2026) og antall sifre stiller du inn per firma under Innstillinger → Dokumentnummerering.

Oppbygging av dokumentnummeret AN26000001 av prefiks, år og teller, med tabell over dokumenttypene

Det som dekkes, er tilbud, kundeordrer, kundefakturaer og kreditnotaer, følgesedler, varemottak og innkjøpsordrer. Prefiksene i illustrasjonen er bare eksempler: AN, AU, RE, GU, LI, WE, BE. Den som lar et prefiks stå tomt, beholder Odoos standardnummerering for denne dokumenttypen. Modulen gjør altså ingenting før du stiller den inn.

Hvordan numrene oppfører seg

  • Nytt hvert år. Telleren begynner på nytt ved 1 ved årsskiftet.
  • Videre etter importerte numre. Modulen søker etter det høyeste eksisterende nummeret med samme prefiks og år, uansett hvor langt det er. Ligger AN26119 fra det gamle systemet i databasen, blir neste tilbud AN26000120. Det er grunnen til at modulen egner seg for overganger: Gamle dokumenter importeres med sine originale numre, og nye dokumenter knytter seg sømløst til.
  • Nytt ordrenummer ved bekreftelse. Et bekreftet tilbud får på ønske et nummer fra ordreserien. Tilbudsnummeret beholdes i feltet Tilbudsnummer på ordren og er synlig i skjema, liste og søk.
  • Fakturaer ved bokføring. Kundefakturaer og kreditnotaer får nummeret først ved bokføring, ikke ved opprettelse. Slettede kladder etterlater derfor ikke noe hull. Året kommer fra fakturadatoen: En faktura fra 30.12.2025 som bokføres 2.1.2026, heter RE25….
  • Alt annet forblir. Leverandørfakturaer, betalinger, posteringer og produksjonsordrer beholder Odoos standardserier. Eksisterende navn skrives aldri om, heller ikke hvis du slår modulen av igjen.

Den kinkige delen: to brukere samtidig

En egen nummertildeling ser enkel ut: finn det høyeste nummeret, legg til én. Det er den ikke, så snart to brukere oppretter et tilbud i samme øyeblikk. Begge leser «høyeste nummer = 0», begge tildeler AN26000001. For sine egne serier har Odoo databasesekvenser til dette. Ved et selvbygd nummer mangler det, og for tilbud og innkjøpsordrer finnes det i Odoo dessuten ingen unikhetskontroll på navnet: To dokumenter med samme nummer lagres rett og slett.

Den nærliggende beskyttelsen er en lås. Modulen tar per firma, prefiks og år en lås i databasen (PostgreSQL Advisory Lock) som holder til slutten av transaksjonen. Den andre brukeren venter til den første er ferdig. Men det er ikke nok, og vi fant det ut gjennom en test på en kopi av produksjonsdatabasen:

Tidsforløp for to brukere: uten andre leseoperasjon tildeler begge samme nummer, med andre leseoperasjon får den andre neste nummer

Odoo arbeider med isolasjonsnivået REPEATABLE READ. Databasetilstanden en transaksjon ser, fryses ved den første spørringen. Bruker B har denne tilstanden allerede før A er ferdig. Venter B deretter på låsen og får den, leser han med sin gamle tilstand «høyeste nummer = 0» og tildeler nummeret en gang til. Låsen har regulert rekkefølgen, men ikke oppdatert kunnskapen.

Løsningen er en andre leseoperasjon via en egen, kortlevd databasetilgang som ser alle allerede bekreftede rader. Den største av de to verdiene vinner. Den første leseoperasjonen er fortsatt nødvendig, for bare den kjenner numre som den samme transaksjonen allerede har tildelt, men ennå ikke bekreftet, for eksempel ved import av flere dokumenter i ett slag.

Vi har testet dette med to transaksjoner der den andre beviselig hentet sin tilstand før den førstes commit og deretter ventet på låsen. Uten den andre leseoperasjonen fikk begge ordrene samme nummer, med den fikk de numrene 1 og 2.

Viktig for vurderingen: Denne testen er en manuell kontroll. Den er ikke en del av de automatiske testene, fordi det krever to ekte databaseforbindelser, som Odoos testmiljø (én enkelt transaksjon per test) ikke tilbyr.

Teknisk gjennomføring

DokumentTilkoblingspunkt
Tilbudsale.order.create, når navnet er tomt, / eller New
Kundeordresale.order.action_confirm, før standardbekreftelsen
Faktura, kreditnotaaccount.move._set_next_sequence, kalles ved bokføring
Følgeseddel, varemottakstock.picking.create etter operasjonstype
Innkjøpsordrepurchase.order.create
  • Teller. Det høyeste nummeret finnes med et regulært uttrykk (^<Stamm>([0-9]{1,15})$, stammen maskeres) per firma, inkludert navn uten firma.
  • Fakturaer. _set_next_sequence skriver navnet og kaller _compute_split_sequence, slik at Odoos sekvenslogikk (prefiks, nummer, årsgjenkjenning for neste faktura i journalen) forblir konsistent.
  • Innstillinger. Firmafeltene document_number_* speiles i res.config.settings. Innstillingene avviser prefikser med mellomrom eller et siffer på slutten.
  • Oversettelse. Tysk oversettelse er inkludert.

Installasjon og oppsett

  1. Legg mappen document_number_prefix_year i addons-banen.
  2. Oppdater applisten, installer modulen. Forutsetningene er Salg, Innkjøp, Lager og Regnskap.
  3. Under Innstillinger → Dokumentnummerering legger du inn prefikser, årsformat og antall sifre.
  4. Prøv først på en kopi. Nummeret på et dokument kan senere ikke rulles tilbake automatisk, og for fakturaer er nummeret knyttet til oppbevarings- og kontrollplikt.

begrensninger

Seks begrensninger ved modulen: handlekurver, årsformat, én serie per firma, prefiksregler, få tester, bare de nevnte dokumentene

  • Tilbud nummereres ved opprettelse. Slettede eller kansellerte tilbud etterlater hull. Det samme gjelder for hver kundeordre som en annen modul oppretter: handlekurver i nettbutikken (website_sale) er ordrer i status Tilbud og bruker opp ett nummer hver. Bare fakturaer og kreditnotaer er uten hull, fordi de nummereres ved bokføring.
  • Ikke endre årsformatet under drift. Med stammen AN26 leser modulen en eksisterende AN2026000001 som telleren 26000001. Fastsett formatet før det første dokumentet.
  • Teller høyst 15 sifre. Lengre sifferrekker etter stammen ignoreres ved søket etter det høyeste nummeret.
  • Ingen separate serier per journal eller lager. Telleren gjelder per firma, prefiks og år. Flere salgsjournaler deler fakturatelleren.
  • Prefikser må ikke inneholde mellomrom og ikke ende på et siffer, ellers lar prefiks, år og teller seg ikke lenger skille.
  • Bare de nevnte dokumenttypene behandles.

Tester

Modulen leveres med ti automatiske tester. De kontrollerer:

  • Tilbud og bekreftelse: tilbuds- og ordrenummer, bevaring av tilbudsnummeret
  • Videre telling etter et importert nummer (AN26119 → AN26000120)
  • ingen etterfølgende omnummerering av eksisterende dokumenter
  • Faktura, kreditnota og årsskifte etter fakturadato
  • Innkjøpsordre og følgesedler
  • tomt prefiks: Odoos standardnummer beholdes
  • firesifret år
  • Prefiks med spesialtegn
  • flere numre i én transaksjon
  • svært lange sifferrekker ignoreres

Kall:

odoo-bin -d <Testdatenbank> -i document_number_prefix_year --test-enable --test-tags=/document_number_prefix_year --stop-after-init

Testene kjører med vanlige transaksjoner. Oppførselen ved samtidig opprettelse fra to brukere hører ikke med, den ble kontrollert for hånd på en databasekopi som beskrevet ovenfor. Den som tar modulen i bruk i et system med mange samtidige brukere, bør gjenta denne testen på sin egen database.

Juridisk merknad om fakturanummeret

Fakturaer må etter § 11 UStG ha et fortløpende nummer som tildeles én gang for å identifisere fakturaen. Modulen nummerer fakturaer ved bokføring og med egen teller per prefiks og år, noe som passer til dette. Om din konkrete innstilling (flere journaler, kreditnotaer med eget prefiks, årsskifte) oppfyller kravene fra din skatterådgiver, må du avklare med vedkommende. Dette innlegget er ikke juridisk rådgivning.

Ofte stilte spørsmål

Hvorfor ikke bare tilpasse Odoo-seriene?

For fakturaer går det via journalprefikset. For tilbud, ordrer, følgesedler og bestillinger finnes det imidlertid ikke noe felles skjema av prefiks, år og teller med årsskifte, og telleren kjenner ikke importerte gamle numre. Det er der modulen kommer inn.

Overskrives eksisterende nummerering?

Nei. Modulen tildeler bare nye numre. Allerede lagrede navn forblir uendret, også ved avskruing.

Hvordan slår jeg den av igjen?

Tøm prefikset for dokumenttypen. Da nummererer Odoo den selv igjen. Heller ikke avinstallering endrer tildelte numre.

Bruker dere den selv?

Nei. Hos oss kjører Odoos standardnumre. Vi har testet modulen med de automatiske testene og den beskrevne manuelle testen, men ikke i en løpende drift med mange brukere.

Fungerer den med Odoo 17 eller 18?

Vi har bare testet den med Odoo 19.0 Community. For andre versjoner kan den passe eller ikke, vi har ikke testet den.

Under hvilken lisens står den?

Under LGPL-3. Feil og forbedringer er velkomne som issue i GitHub-repositoriet .

Støtte fra Biricon IT Services

Vi drifter Odoo-installasjoner for små og mellomstore bedrifter: fra innføring via tilpasninger og migreringer til løpende drift. Hvis du ved overgangen vil beholde dokumentnumrene dine, la nummertildelingen kontrolleres under belastning eller trygt få en modul som denne satt i produksjon, hjelper vi gjerne. Flere egenutviklinger: Foretaksregister og adressekontroll for østerrikske kunder, Produktsett i tilbudet som seksjon og Web RBL, sperrelisten for angrepstrafikk.

Ta kontakt nå

Status: 3. november 2026. Modulversjon 19.0.1.0.0. Alle numre i eksemplene og illustrasjonene er fritt valgt.