Skip to Content

Odoo 19: čísla dokladov z prefixu, roka a počítadla – modul document_number_prefix_year a pasca pri súčasnom vytváraní

3. novembra 2026 | Odoo 19 Community | Vlastný vývoj
3. novembra 2026 pomocou
Odoo 19: čísla dokladov z prefixu, roka a počítadla – modul document_number_prefix_year a pasca pri súčasnom vytváraní

Modul Odoo 19 document_number_prefix_year: čísla dokladov z prefixu, roka a počítadla

„AN26000001“ hovorí viac než „S00001“: je to ponuka, pochádza z roku 2026 a je prvá. Mnohé podniky, najmä tie, ktoré prechádzajú zo staršieho systému na Odoo, chcú svoje čísla dokladov zachovať presne takto. Odoo samo čísluje ponuky, objednávky a dodacie listy vlastnými radmi (S00001, WH/OUT/00001, P00001) a faktúry prefixom denníka a rokom (INV/2026/00001).

Napísali sme na to modul Document Numbering by Prefix and Year (document_number_prefix_year) pre Odoo 19. Je dostupný ako slobodný softvér pod licenciou LGPL-3 na GitHube:

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

Najprv úprimné zaradenie: Modul v Biricon IT Services nepoužívame. Zverejňujeme ho, pretože je hotový, zdokumentovaný a vybavený testami a môže ušetriť prácu iným. Kto ho nasadí, mal by si prečítať časti o obmedzeniach a Testy .

Schéma číslovania

Každé číslo pozostáva z troch častí: prefixu pre každý druh dokladu, roka a počítadla s pevným počtom miest. Prefix, formát roka (26 alebo 2026) a počet miest nastavíte pre každú firmu v časti Nastavenia → Číslovanie dokladov.

Štruktúra čísla dokladu AN26000001 z prefixu, roka a počítadla, s tabuľkou druhov dokladov

Spracúvajú sa ponuky, zákaznícke objednávky, zákaznícke faktúry a dobropisy, dodacie listy, príjemky tovaru a nákupné objednávky. Prefixy na obrázku sú len príklady: AN, AU, RE, GU, LI, WE, BE. Kto prefix nechá prázdny, zachová pre tento druh dokladu štandardné číslovanie Odoo. Modul teda nerobí nič, kým ho nenastavíte.

Ako sa čísla správajú

  • Každý rok nanovo. Počítadlo začína pri zmene roka opäť od 1.
  • Pokračovanie po importovaných číslach. Modul vyhľadá najvyššie existujúce číslo rovnakého prefixu a roka, bez ohľadu na to, ako je dlhé. Ak je v databáze zo starého systému AN26119, ďalšia ponuka bude AN26000120. To je dôvod, prečo sa modul hodí pri prechodoch: staré doklady sa importujú s pôvodnými číslami a nové doklady nadväzujú bez prerušenia.
  • Nové číslo objednávky pri potvrdení. Potvrdená ponuka na požiadanie dostane číslo z radu objednávok. Číslo ponuky zostane zachované v poli Číslo ponuky pri objednávke a je viditeľné vo formulári, zozname a vyhľadávaní.
  • Faktúry pri zaúčtovaní. Zákaznícke faktúry a dobropisy dostanú číslo až pri zaúčtovaní, nie pri vytvorení. Zmazané návrhy preto nezanechávajú medzeru. Rok pochádza z dátumu faktúry: faktúra z 30. 12. 2025, ktorá sa zaúčtuje 2. 1. 2026, sa volá RE25….
  • Všetko ostatné zostáva. Dodávateľské faktúry, platby, účtovné zápisy a výrobné príkazy zachovávajú štandardné rady Odoo. Existujúce názvy sa nikdy neprepisujú, ani keď modul opäť vypnete.

Citlivá časť: dvaja používatelia naraz

Vlastné prideľovanie čísel vyzerá jednoducho: nájsť najvyššie číslo, pripočítať jednotku. Takým už nie je, keď dvaja používatelia vytvoria ponuku v tom istom okamihu. Obaja prečítajú „najvyššie číslo = 0“, obaja pridelia AN26000001. Odoo má na to pri svojich vlastných radoch databázové sekvencie. Pri samostatne vytvorenom čísle to chýba a pre ponuky a nákupné objednávky navyše v Odoo neexistuje kontrola jedinečnosti názvu: dva doklady s rovnakým číslom sa jednoducho uložia.

Samozrejmou ochranou je zámok. Modul si pre každú firmu, prefix a rok vezme zámok databázy (PostgreSQL Advisory Lock), ktorý platí do konca transakcie. Druhý používateľ čaká, kým prvý neskončí. To však nestačí a zistili sme to pokusom na kópii produkčnej databázy:

Časový priebeh dvoch používateľov: bez druhého čítania pridelia obaja rovnaké číslo, s druhým čítaním dostane druhý nasledujúce číslo

Odoo pracuje s úrovňou izolácie REPEATABLE READ. Stav databázy, ktorý transakcia vidí, sa zmrazí pri jej prvom dopyte. Používateľ B tento stav má už skôr, než A skončí. Ak B potom čaká na zámok a získa ho, prečíta so svojím starým stavom „najvyššie číslo = 0“ a pridelí číslo druhýkrát. Zámok upravil poradie, ale nezaktualizoval vedomosti.

Riešením je druhé čítanie cez vlastný, krátkodobý prístup k databáze, ktorý vidí všetky už potvrdené riadky. Vyhráva väčšia z oboch hodnôt. Prvé čítanie zostáva potrebné, pretože len ono pozná čísla, ktoré tá istá transakcia už pridelila, ale ešte nepotvrdila, napríklad pri importe viacerých dokladov naraz.

Overili sme to dvoma transakciami, pri ktorých druhá preukázateľne získala svoj stav pred commitom prvej a potom čakala na zámok. Bez druhého čítania dostali obe objednávky rovnaké číslo, s ním čísla 1 a 2.

Dôležité pre zaradenie: Tento pokus je ručná kontrola. Nie je súčasťou automatických testov, pretože si vyžaduje dve skutočné spojenia s databázou, ktoré testovacie prostredie Odoo (jedna transakcia na test) neposkytuje.

Technická realizácia

DokladMiesto zapojenia
Ponukasale.order.create, ak je názov prázdny, / alebo New
Zákaznícka objednávkasale.order.action_confirm, pred štandardným potvrdením
Faktúra, dobropisaccount.move._set_next_sequence, volá sa pri zaúčtovaní
Dodací list, príjemka tovarustock.picking.create podľa typu operácie
Nákupná objednávkapurchase.order.create
  • Počítadlo. Najvyššie číslo nájde regulárny výraz (^<Stamm>([0-9]{1,15})$, základ sa maskuje) pre každú firmu, vrátane názvov bez firmy.
  • Faktúry. _set_next_sequence zapíše názov a zavolá _compute_split_sequence, aby logika sekvencií Odoo (prefix, číslo, rozpoznanie roka pre nasledujúcu faktúru denníka) zostala konzistentná.
  • Nastavenia. Polia firmy document_number_* sa zrkadlia v res.config.settings. Nastavenia odmietnu prefixy s medzerou alebo číslicou na konci.
  • Preklad. Nemecký preklad je súčasťou.

Inštalácia a nastavenie

  1. Priečinok document_number_prefix_year vložiť do cesty addonov.
  2. Aktualizovať zoznam aplikácií, nainštalovať modul. Predpokladom sú Predaj, Nákup, Sklad a Účtovníctvo.
  3. V časti Nastavenia → Číslovanie dokladov zadať prefixy, formát roka a počet miest.
  4. Najprv vyskúšať na kópii. Číslo dokladu sa neskôr nedá automaticky vrátiť späť a pri faktúrach sa na číslo viaže povinnosť archivácie a kontroly.

obmedzeniach

Šesť obmedzení modulu: nákupné košíky, formát roka, jeden rad pre firmu, pravidlá prefixov, málo testov, iba uvedené doklady

  • Ponuky sa číslujú pri vytvorení. Zmazané alebo stornované ponuky zanechávajú medzery. To isté platí pre každú zákaznícku objednávku, ktorú vytvorí iný modul: nákupné košíky webshopu (website_sale) sú objednávky v stave Ponuka a spotrebujú po jednom čísle. Bez medzier sú len faktúry a dobropisy, pretože sa číslujú pri zaúčtovaní.
  • Formát roka nemeniť za prevádzky. So základom AN26 modul prečíta existujúce AN2026000001 ako počítadlo 26000001. Formát určite pred prvým dokladom.
  • Počítadlo najviac 15 miest. Dlhšie postupnosti číslic za základom sa pri hľadaní najvyššieho čísla ignorujú.
  • Žiadne oddelené rady pre denník alebo sklad. Počítadlo platí pre firmu, prefix a rok. Viaceré predajné denníky zdieľajú počítadlo faktúr.
  • Prefixy nesmú obsahovať medzeru ani končiť číslicou, inak sa prefix, rok a počítadlo už nedajú oddeliť.
  • Spracúvajú sa iba uvedené druhy dokladov.

Testy

Modul obsahuje desať automatických testov. Overujú:

  • Ponuka a potvrdenie: číslo ponuky a objednávky, zachovanie čísla ponuky
  • Pokračovanie v počítaní po importovanom čísle (AN26119 → AN26000120)
  • žiadne dodatočné prečíslovanie existujúcich dokladov
  • Faktúra, dobropis a zmena roka podľa dátumu faktúry
  • Nákupná objednávka a dodacie listy
  • prázdny prefix: štandardné číslo Odoo zostáva
  • štvorciferný rok
  • Prefix so špeciálnymi znakmi
  • viacero čísel v jednej transakcii
  • veľmi dlhé postupnosti číslic sa ignorujú

Spustenie:

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

Testy bežia s bežnými transakciami. Správanie pri súčasnom vytváraní dvoma používateľmi do nich nepatrí, bolo overené ručne na kópii databázy, ako je opísané vyššie. Kto modul nasadí v systéme s mnohými súčasnými používateľmi, mal by tento pokus zopakovať na vlastnej databáze.

Právne upozornenie k číslu faktúry

Faktúry musia podľa § 11 UStG niesť súvislé číslo, ktoré sa na identifikáciu faktúry prideľuje jedinečne. Modul čísluje faktúry pri zaúčtovaní a s vlastným počítadlom pre každý prefix a rok, čo s tým súhlasí. Či vaše konkrétne nastavenie (viacero denníkov, dobropisy s vlastným prefixom, zmena roka) spĺňa požiadavky vášho daňového poradcu, musíte vyjasniť s ním. Tento článok nie je právnym poradenstvom.

Časté otázky

Prečo jednoducho neprispôsobiť rady Odoo?

Pri faktúrach to ide cez prefix denníka. Pri ponukách, objednávkach, dodacích listoch a objednávkach však neexistuje spoločná schéma z prefixu, roka a počítadla so zmenou roka a počítadlo nepozná importované staré čísla. Tu modul nastupuje.

Prepisuje sa existujúce číslovanie?

Nie. Modul prideľuje iba nové čísla. Už uložené názvy zostávajú nezmenené, aj pri vypnutí.

Ako ho opäť vypnem?

Vyprázdnite prefix druhu dokladu. Potom ho Odoo opäť čísluje samo. Ani odinštalovanie nemení pridelené čísla.

Nasadzujete ho sami?

Nie. U nás bežia štandardné čísla Odoo. Modul sme overili automatickými testami a opísaným ručným pokusom, ale nie v bežnej prevádzke s mnohými používateľmi.

Funguje s Odoo 17 alebo 18?

Testovali sme ho iba s Odoo 19.0 Community. Pre iné verzie môže sedieť alebo nie, nepreverovali sme to.

Pod akou licenciou je?

Pod LGPL-3. Chyby a vylepšenia sú vítané ako issue v repozitári GitHub .

Podpora od Biricon IT Services

Spravujeme inštalácie Odoo pre malé a stredné podniky: od zavedenia cez úpravy a migrácie až po bežnú prevádzku. Ak chcete pri prechode zachovať svoje čísla dokladov, nechať preveriť prideľovanie čísel pod záťažou alebo bezpečne dostať modul ako tento do svojej produkčnej inštancie, radi pomôžeme. Ďalšie vlastné vývoje: Obchodný register a overenie adries pre rakúskych zákazníkov, Produktové sety v ponuke ako sekcia a Web RBL, zoznam blokovania pre útočnú prevádzku.

Kontaktujte nás

Stav k 3. novembru 2026. Verzia modulu 19.0.1.0.0. Všetky čísla v príkladoch a na obrázkoch sú zvolené voľne.