Skip to Content

Odoo 19 dokumendinumbrid prefiksist, aastast ja loendurist – moodul document_number_prefix_year ja samaaegse loomise varjatud oht

3. november 2026 | Odoo 19 Community | Omaarendus
3. november 2026 by
Odoo 19 dokumendinumbrid prefiksist, aastast ja loendurist – moodul document_number_prefix_year ja samaaegse loomise varjatud oht

Odoo 19 moodul document_number_prefix_year: dokumendinumbrid prefiksist, aastast ja loendurist

„AN26000001“ ütleb rohkem kui „S00001“: see on hinnapakkumine, see pärineb 2026. aastast ja on järjekorras esimene. Paljud ettevõtted, eriti need, kes lähevad vanemalt süsteemilt üle Odoole, soovivad säilitada just sellise dokumendinumbrite kuju. Odoo ise nummerdab hinnapakkumisi, müügitellimusi ja saatelehti oma numbrijadadega (S00001, WH/OUT/00001, P00001) ning arveid andmiku prefiksi ja aastaga (INV/2026/00001).

Selleks lõime Odoo 19 jaoks mooduli Document Numbering by Prefix and Year (document_number_prefix_year). See on vaba tarkvarana LGPL-3 litsentsi alusel GitHubis saadaval:

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

Alustuseks aus selgitus: me ei kasuta seda moodulit Biricon IT Servicesis. Avaldame selle, sest see on valmis, dokumenteeritud ja testidega varustatud ning võib teiste tööd lihtsustada. Mooduli kasutajad peaksid jaotised piirangute ja testide kohta läbi lugema.

Nummerdusskeem

Iga number koosneb kolmest osast: dokumendiliigi prefiksist, aastast ja kindla pikkusega loendurist. Prefiksi, aastavormingu (26 või 2026) ja numbrikohtade arvu saate määrata iga ettevõtte jaoks menüüs Seaded → Dokumentide nummerdamine.

Dokumendinumbri AN26000001 ülesehitus prefiksist, aastast ja loendurist koos dokumendiliikide tabeliga

Moodul hõlmab hinnapakkumisi, müügitellimusi, müügiarveid ja kreeditarveid, saatelehti, kauba vastuvõtte ning ostutellimusi. Joonisel olevad prefiksid on üksnes näited: AN, AU, RE, GU, LI, WE, BE. Kui jätate prefiksi tühjaks, säilib selle dokumendiliigi puhul Odoo tavapärane nummerdus. Seega ei tee moodul midagi enne, kui olete selle seadistanud.

Kuidas numbrid toimivad

  • Igal aastal algusest peale. Aastavahetusel algab loendur taas ühest.
  • Jätkamine imporditud numbritest. Moodul otsib sama prefiksi ja aastaga suurima olemasoleva numbri, olenemata selle pikkusest. Kui andmebaasis on vanast süsteemist pärit AN26119, saab järgmine hinnapakkumine numbriks AN26000120. Seetõttu sobib moodul süsteemi vahetamiseks: vanad dokumendid imporditakse algsete numbritega ja uute dokumentide nummerdus jätkub sujuvalt.
  • Uus tellimusenumber kinnitamisel. Kinnitatud hinnapakkumine saab soovi korral numbri müügitellimuste numbrijadast. Hinnapakkumise number säilib tellimuse väljal Hinnapakkumise number ning on nähtav vormis, loendis ja otsingus.
  • Arved nummerdatakse konteerimisel. Müügiarved ja kreeditarved saavad numbri alles konteerimisel, mitte loomisel. Seega ei jäta kustutatud mustandid numbrijadasse lünki. Aasta võetakse arve kuupäevast: 30.12.2025 kuupäevaga arve, mis konteeritakse 2.1.2026, saab numbriks RE25….
  • Kõik muu jääb samaks. Ostuarved, maksed, raamatupidamiskanded ja tootmistellimused säilitavad Odoo tavapärased numbrijadad. Olemasolevaid nimesid ei kirjutata kunagi ümber, ka siis, kui mooduli uuesti välja lülitate.

Keeruline osa: kaks kasutajat korraga

Oma nummerduslahendus tundub lihtne: leia suurim number ja liida sellele üks. Ent asi muutub keeruliseks, kui kaks kasutajat loovad hinnapakkumise täpselt samal ajal. Mõlemad loevad „suurim number = 0“ ja mõlemad määravad numbri AN26000001. Odoo kasutab oma numbrijadade jaoks andmebaasi jadageneraatoreid. Isetehtud nummerdusel see puudub ning lisaks ei kontrolli Odoo hinnapakkumiste ja ostutellimuste nimede kordumatust: kaks sama numbriga dokumenti lihtsalt salvestatakse.

Ilmne kaitsemeede on lukustus. Moodul rakendab iga ettevõtte, prefiksi ja aasta jaoks andmebaasiluku (PostgreSQL Advisory Lock), mis püsib transaktsiooni lõpuni. Teine kasutaja ootab, kuni esimene on lõpetanud. Sellest aga ei piisa, nagu selgus tootmisandmebaasi koopial tehtud katsest:

Kahe kasutaja toimingute ajajoon: ilma teise lugemiseta määravad mõlemad sama numbri, teise lugemise korral saab teine kasutaja järgmise numbri

Odoo kasutab isolatsioonitaset REPEATABLE READ. Transaktsioonile nähtav andmebaasi seis fikseeritakse selle esimese päringu ajal. Kasutaja B on selle seisu juba saanud enne, kui A lõpetab. Kui B seejärel lukku ootab ja selle saab, loeb ta endiselt vanast seisust „suurim number = 0“ ning määrab sama numbri teist korda. Lukk korraldas toimingute järjekorra, kuid ei värskendanud nähtavaid andmeid.

Lahendus on teine lugemine eraldi lühiajalise andmebaasiühenduse kaudu, mis näeb kõiki juba kinnitatud ridu. Kasutusele võetakse kahest väärtusest suurem. Esimene lugemine on endiselt vajalik, sest ainult see näeb numbreid, mille sama transaktsioon on juba määranud, kuid veel kinnitamata jätnud, näiteks mitme dokumendi korraga importimisel.

Kontrollisime seda kahe transaktsiooniga, millest teine oli tõendatult saanud oma andmebaasiseisu enne esimese kinnitamist ning jäi seejärel lukku ootama. Ilma teise lugemiseta said mõlemad tellimused sama numbri, teise lugemisega aga numbrid 1 ja 2.

Oluline täpsustus: see katse tehti käsitsi. See ei kuulu automaattestide hulka, sest selleks on vaja kahte tegelikku andmebaasiühendust, mida Odoo testikeskkond ei paku: seal kasutatakse iga testi kohta üht transaktsiooni.

Tehniline teostus

DokumentLiidestuskoht
Hinnapakkuminesale.order.create, kui nimi on tühi, / või New
Müügitellimussale.order.action_confirm, enne tavapärast kinnitamist
Arve, kreeditarveaccount.move._set_next_sequence, kutsutakse välja konteerimisel
Saateleht, kauba vastuvõttstock.picking.create vastavalt toiminguliigile
Ostutellimuspurchase.order.create
  • Loendur. Suurim number leitakse iga ettevõtte kohta regulaaravaldisega (^<Stamm>([0-9]{1,15})$, tüve erimärgid paotatakse), kaasates ka nimed, millel ettevõte puudub.
  • Arved. _set_next_sequence salvestab nime ja kutsub välja meetodi _compute_split_sequence, et Odoo numbrijadade loogika (prefiks, number ja aasta tuvastamine andmiku järgmise arve jaoks) jääks kooskõlaliseks.
  • Seaded. Ettevõtte väljad document_number_* peegeldatakse mudelisse res.config.settings. Seadetes ei lubata prefikseid, mis sisaldavad tühikuid või lõpevad numbriga.
  • Tõlge. Saksakeelne tõlge on kaasas.

Paigaldamine ja seadistamine

  1. Paigutage kaust document_number_prefix_year lisamoodulite otsinguteele.
  2. Värskendage rakenduste loendit ja paigaldage moodul. Eelduseks on Müük, Ost, Ladu ja Raamatupidamine.
  3. Sisestage menüüs Seaded → Dokumentide nummerdamine prefiksid, aastavorming ja numbrikohtade arv.
  4. Katsetage esmalt koopial. Dokumendi numbrit ei saa hiljem automaatselt endiseks taastada ning arvete puhul on numbriga seotud säilitamis- ja kontrollikohustus.

piirangute

Mooduli kuus piirangut: ostukorvid, aastavorming, üks numbriseeria ettevõtte kohta, prefiksireeglid, vähe teste, ainult nimetatud dokumendid

  • Hinnapakkumised nummerdatakse loomisel. Kustutatud või tühistatud hinnapakkumised jätavad numbrijadasse lünki. Sama kehtib iga müügitellimuse kohta, mille loob mõni teine moodul: veebipoe ostukorvid (website_sale) on olekus Hinnapakkumine tellimused ja kasutavad igaüks ühe numbri. Lünkadeta on ainult arved ja kreeditarved, sest need nummerdatakse konteerimisel.
  • Ärge muutke aastavormingut kasutamise ajal. Tüve AN26 korral loeb moodul olemasoleva numbri AN2026000001 loenduri väärtuseks 26000001. Määrake vorming enne esimese dokumendi loomist.
  • Loendur võib olla kuni 15-kohaline. Suurima numbri otsimisel eiratakse tüvele järgnevaid pikemaid numbrijadasid.
  • Andmikele ega ladudele pole eraldi numbriseeriaid. Loendur on ühine sama ettevõtte, prefiksi ja aasta piires. Mitu müügiandmikku kasutavad ühist arveloendurit.
  • Prefiksid ei tohi sisaldada tühikuid ega lõppeda numbriga, sest muidu ei saa prefiksit, aastat ja loendurit enam eristada.
  • Moodul hõlmab ainult nimetatud dokumendiliike.

testide kohta

Mooduliga on kaasas kümme automaattesti. Need kontrollivad järgmist:

  • hinnapakkumine ja kinnitamine: hinnapakkumise ja tellimuse number ning hinnapakkumise numbri säilimine
  • nummerduse jätkamine imporditud numbrist (AN26119 → AN26000120)
  • olemasolevate dokumentide numbreid ei muudeta tagantjärele
  • arve, kreeditarve ja aastavahetus arve kuupäeva järgi
  • ostutellimus ja saatelehed
  • tühi prefiks: Odoo tavapärane number säilib
  • neljakohaline aastaarv
  • erimärkidega prefiks
  • mitu numbrit ühes transaktsioonis
  • väga pikki numbrijadasid eiratakse

Käivitamine:

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

Testid kasutavad tavalisi transaktsioone. Need ei hõlma olukorda, kus kaks kasutajat loovad dokumente korraga; seda kontrolliti eespool kirjeldatud viisil käsitsi andmebaasi koopial. Kui kasutate moodulit süsteemis, kus töötab korraga palju kasutajaid, peaksite seda katset oma andmebaasil kordama.

Õiguslik märkus arvenumbri kohta

Arvetel peab UStG § 11 kohaselt olema järjestikune number, mis antakse arve tuvastamiseks ühekordselt. Moodul nummerdab arved kandmisel ja oma loenduriga prefiksi ja aasta kohta, mis sellega kokku sobib. Kas teie konkreetne seadistus (mitu päevikut, oma prefiksiga kreeditarved, aastavahetus) vastab teie maksunõustaja nõuetele, peate temaga selgitama. See artikkel ei ole õigusnõustamine.

Korduma kippuvad küsimused

Miks mitte lihtsalt Odoo numbrijadasid kohandada?

Arvete puhul saab seda teha andmiku prefiksi kaudu. Hinnapakkumistel, müügitellimustel, saatelehtedel ja ostutellimustel puudub aga ühine prefiksist, aastast ja loendurist koosnev skeem, mis alustaks aastavahetusel otsast peale, ning loendur ei arvesta imporditud vanu numbreid. Just seda moodul lahendabki.

Kas olemasolev nummerdus kirjutatakse üle?

Ei. Moodul määrab ainult uusi numbreid. Juba salvestatud nimed jäävad muutmata ka mooduli väljalülitamisel.

Kuidas moodul uuesti välja lülitada?

Tühjendage vastava dokumendiliigi prefiks. Seejärel nummerdab Odoo neid dokumente jälle ise. Ka mooduli eemaldamine ei muuda juba määratud numbreid.

Kas kasutate moodulit ka ise?

Ei. Meie kasutame Odoo tavapärast nummerdust. Oleme moodulit kontrollinud automaattestide ja kirjeldatud käsitsi tehtud katsega, kuid mitte paljude kasutajatega igapäevatöös.

Kas see töötab Odoo 17 või 18 versiooniga?

Oleme seda testinud ainult Odoo 19.0 Communityga. Teiste versioonidega võib see sobida või mitte; me ei ole seda kontrollinud.

Millise litsentsi alusel seda levitatakse?

LGPL-3 alusel. Veateated ja parandusettepanekud on oodatud pöördumistena GitHubi hoidlas .

Biricon IT Services aitab

Haldame väikeste ja keskmise suurusega ettevõtete Odoo paigaldusi alates juurutamisest, kohandamisest ja andmete üleviimisest kuni igapäevase käigushoidmiseni. Kui soovite süsteemi vahetamisel säilitada oma dokumendinumbrid, lasta nummerdust koormuse all kontrollida või sellist moodulit turvaliselt oma tootmiskeskkonnas kasutusele võtta, aitame hea meelega. Veel meie omaarendusi: Austria klientide äriregistri- ja aadressikontroll, Tootekomplektid hinnapakkumises eraldi jaotisena ja Web RBL, ründeliikluse blokeerimisloend.

Võtke kohe ühendust

Seisuga 3. november 2026. Mooduli versioon 19.0.1.0.0. Kõik näidetes ja joonistel kasutatud numbrid on vabalt valitud.