Preskoči na sadržaj

Odoo 19 brojevi dokumenata iz prefiksa, godine i brojača – modul document_number_prefix_year i zamka pri istovremenom kreiranju

3. novembar 2026 | Odoo 19 Community | Vlastiti razvoj
3. novembar 2026. by
Odoo 19 brojevi dokumenata iz prefiksa, godine i brojača – modul document_number_prefix_year i zamka pri istovremenom kreiranju

Odoo 19 modul document_number_prefix_year: brojevi dokumenata iz prefiksa, godine i brojača

„AN26000001“ govori više od „S00001“: to je ponuda, potiče iz 2026. i prva je. Mnoga preduzeća, posebno ona koja prelaze sa starijeg sistema na Odoo, žele zadržati svoje brojeve dokumenata upravo tako. Odoo sam numeriše ponude, narudžbe i otpremnice vlastitim nizovima (S00001, WH/OUT/00001, P00001), a račune prefiksom dnevnika i godinom (INV/2026/00001).

Za to smo napisali modul Document Numbering by Prefix and Year (document_number_prefix_year) za Odoo 19. Dostupan je kao slobodan softver pod licencom LGPL-3 na GitHubu:

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

Unaprijed iskrena napomena: Modul kod Biricon IT Services ne koristimo. Objavljujemo ga jer je gotov, dokumentovan i opremljen testovima te drugima može uštedjeti rad. Ko ga koristi, trebao bi pročitati odjeljke o ograničenjima i Testovi .

Shema numeracije

Svaki broj sastoji se od tri dijela: prefiksa po vrsti dokumenta, godine i brojača s fiksnim brojem mjesta. Prefiks, format godine (26 ili 2026) i broj mjesta podešavate po firmi pod Postavke → Numeracija dokumenata.

Struktura broja dokumenta AN26000001 iz prefiksa, godine i brojača, s tabelom vrsta dokumenata

Obrađuju se ponude, narudžbe kupaca, računi kupaca i knjižna odobrenja, otpremnice, prijemi robe i narudžbenice. Prefiksi na slici su samo primjeri: AN, AU, RE, GU, LI, WE, BE. Ko prefiks ostavi praznim, za tu vrstu dokumenta zadržava standardnu numeraciju Odoa. Modul dakle ne radi ništa dok ga ne podesite.

Kako se brojevi ponašaju

  • Svake godine iznova. Brojač počinje s promjenom godine ponovo od 1.
  • Nastavak nakon uvezenih brojeva. Modul traži najviši postojeći broj istog prefiksa i godine, bez obzira koliko je dug. Ako se iz starog sistema u bazi nalazi AN26119, sljedeća ponuda glasi AN26000120. To je razlog zašto je modul pogodan za prelaske: stari dokumenti uvoze se s originalnim brojevima, a novi dokumenti se bez prekida nadovezuju.
  • Novi broj narudžbe pri potvrdi. Potvrđena ponuda po želji dobiva broj iz niza narudžbi. Broj ponude ostaje sačuvan u polju Broj ponude na narudžbi i vidljiv je u obrascu, listi i pretrazi.
  • Računi pri knjiženju. Računi kupaca i knjižna odobrenja dobivaju svoj broj tek pri knjiženju, a ne pri kreiranju. Izbrisani nacrti stoga ne ostavljaju prazninu. Godina potiče iz datuma računa: Račun od 30.12.2025. koji se knjiži 2.1.2026. glasi RE25….
  • Sve ostalo ostaje. Računi dobavljača, plaćanja, knjiženja i proizvodni nalozi zadržavaju standardne nizove Odoa. Postojeći nazivi se nikada ne prepisuju, čak ni ako modul ponovo isključite.

Delikatan dio: Dva korisnika istovremeno

Vlastita dodjela brojeva izgleda jednostavno: pronaći najviši broj, dodati jedan. Nije tako čim dva korisnika u istom trenutku kreiraju ponudu. Oba čitaju „najviši broj = 0“, oba dodjeljuju AN26000001. Odoo za to kod vlastitih nizova ima sekvence baze podataka. Kod samostalno izgrađenog broja to nedostaje, a za ponude i narudžbenice u Odoou uz to ne postoji provjera jedinstvenosti naziva: dva dokumenta s istim brojem jednostavno se pohrane.

Očigledna zaštita je zaključavanje. Modul po firmi, prefiksu i godini uzima zaključavanje baze podataka (PostgreSQL Advisory Lock) koje traje do kraja transakcije. Drugi korisnik čeka dok prvi ne završi. To ipak nije dovoljno, a otkrili smo to pokusom na kopiji produktivne baze podataka:

Vremenski tok dva korisnika: bez drugog čitanja oba dodjeljuju isti broj, s drugim čitanjem drugi dobiva sljedeći broj

Odoo radi s nivoom izolacije REPEATABLE READ. Stanje baze podataka koje transakcija vidi zamrzava se pri njenom prvom upitu. Korisnik B to stanje već ima prije nego što A završi. Ako B nakon toga čeka na zaključavanje i dobije ga, čita sa svojim starim stanjem „najviši broj = 0“ i dodjeljuje broj po drugi put. Zaključavanje je uredilo redoslijed, ali nije ažuriralo znanje.

Rješenje je drugo čitanje putem vlastitog, kratkotrajnog pristupa bazi podataka, koje vidi sve već potvrđene redove. Pobjeđuje veća od dvije vrijednosti. Prvo čitanje ostaje potrebno, jer samo ono poznaje brojeve koje ista transakcija već dodijelila, ali još nije potvrdila, na primjer pri uvozu više dokumenata odjednom.

Provjerili smo to s dvije transakcije u kojima je druga dokazano povukla svoje stanje prije commita prve, a zatim čekala na zaključavanje. Bez drugog čitanja obje narudžbe dobile su isti broj, s njim brojeve 1 i 2.

Važno za razumijevanje: Ovaj pokus je ručna provjera. On nije dio automatskih testova, jer su za to potrebne dvije prave veze s bazom podataka koje Odoo testno okruženje (jedna jedina transakcija po testu) ne pruža.

Tehnička realizacija

DokumentTačka zahvata
Ponudasale.order.create, kada je naziv prazan, / ili New
Narudžba kupcasale.order.action_confirm, prije standardne potvrde
Račun, knjižno odobrenjeaccount.move._set_next_sequence, poziva se pri knjiženju
Otpremnica, prijem robestock.picking.create prema vrsti operacije
Narudžbenicapurchase.order.create
  • Brojač. Najviši broj pronalazi regularni izraz (^<Stamm>([0-9]{1,15})$, korijen se maskira) po firmi, uključujući nazive bez firme.
  • Računi. _set_next_sequence upisuje naziv i poziva _compute_split_sequence, kako bi logika sekvenci Odoa (prefiks, broj, prepoznavanje godine za sljedeći račun dnevnika) ostala usklađena.
  • Postavke. Polja firme document_number_* preslikavaju se u res.config.settings. Postavke odbijaju prefikse s razmakom ili cifrom na kraju.
  • Prevod. Njemački prevod je uključen.

Instalacija i podešavanje

  1. Direktorij document_number_prefix_year staviti u putanju addona.
  2. Osvježiti listu aplikacija, instalirati modul. Preduvjeti su Prodaja, Nabavka, Skladište i Računovodstvo.
  3. Pod Postavke → Numeracija dokumenata unijeti prefikse, format godine i broj mjesta.
  4. Prvo isprobati na kopiji. Broj dokumenta se kasnije ne može automatski vratiti unazad, a kod računa za broj su vezane obaveze čuvanja i provjere.

ograničenjima

Šest ograničenja modula: korpe za kupovinu, format godine, jedan niz po firmi, pravila prefiksa, malo testova, samo navedeni dokumenti

  • Ponude se numerišu pri kreiranju. Izbrisane ili stornirane ponude ostavljaju praznine. Isto važi za svaku narudžbu kupca koju kreira neki drugi modul: korpe za kupovinu web šopa (website_sale) su narudžbe u statusu Ponuda i troše po jedan broj. Bez praznina su samo računi i knjižna odobrenja, jer se numerišu pri knjiženju.
  • Format godine ne mijenjati u toku rada. S korijenom AN26 modul postojeći AN2026000001 čita kao brojač 26000001. Format odredite prije prvog dokumenta.
  • Brojač najviše 15 mjesta. Duži nizovi cifara iza korijena ignorišu se pri traženju najvišeg broja.
  • Nema odvojenih serija po dnevniku ili skladištu. Brojač važi po firmi, prefiksu i godini. Više prodajnih dnevnika dijeli brojač računa.
  • Prefiksi ne smiju sadržavati razmak niti završavati cifrom, inače se prefiks, godina i brojač više ne mogu razdvojiti.
  • Samo navedene vrste dokumenata se obrađuju.

Testovi

Modul sadrži deset automatskih testova. Oni provjeravaju:

  • Ponuda i potvrda: broj ponude i narudžbe, očuvanje broja ponude
  • Nastavak brojanja nakon uvezenog broja (AN26119 → AN26000120)
  • nikakvo naknadno preimenovanje postojećih dokumenata
  • Račun, knjižno odobrenje i promjena godine prema datumu računa
  • Narudžbenica i otpremnice
  • prazan prefiks: standardni broj Odoa ostaje
  • četverocifrena godina
  • prefiks s posebnim znakovima
  • više brojeva u jednoj transakciji
  • vrlo dugi nizovi cifara se ignorišu

Poziv:

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

Testovi se izvršavaju s običnim transakcijama. Ponašanje pri istovremenom kreiranju od strane dva korisnika ne spada u to, provjereno je ručno na kopiji baze podataka kako je gore opisano. Ko modul koristi u sistemu s mnogo istovremenih korisnika, trebao bi ovaj pokus ponoviti na vlastitoj bazi podataka.

Pravna napomena o broju računa

Računi moraju prema § 11 UStG nositi uzastopni broj koji se dodjeljuje jednom radi identifikacije računa. Modul numeriše račune pri knjiženju i s vlastitim brojačem po prefiksu i godini, što tome odgovara. Ispunjava li vaša konkretna postavka (više dnevnika, knjižna odobrenja s vlastitim prefiksom, promjena godine) zahtjeve vašeg poreznog savjetnika, morate razjasniti s njim. Ovaj članak nije pravni savjet.

Česta pitanja

Zašto jednostavno ne prilagoditi Odoo nizove?

Za račune to ide putem prefiksa dnevnika. Kod ponuda, narudžbi, otpremnica i narudžbenica ipak ne postoji zajednička shema iz prefiksa, godine i brojača s promjenom godine, a brojač ne poznaje uvezene stare brojeve. Tu modul počinje.

Prepisuje li se postojeća numeracija?

Ne. Modul dodjeljuje samo nove brojeve. Već pohranjeni nazivi ostaju nepromijenjeni, i pri isključivanju.

Kako ga ponovo isključiti?

Ispraznite prefiks vrste dokumenta. Tada Odoo ponovo sam numeriše. Ni deinstalacija ne mijenja dodijeljene brojeve.

Koristite li ga sami?

Ne. Kod nas rade standardni brojevi Odoa. Modul smo provjerili automatskim testovima i opisanim ručnim pokusom, ali ne u radu uživo s mnogo korisnika.

Radi li s Odoo 17 ili 18?

Testirali smo ga samo s Odoo 19.0 Community. Za druge verzije može odgovarati ili ne, nismo provjeravali.

Pod kojom licencom je?

Pod LGPL-3. Greške i poboljšanja dobrodošli su kao issue u GitHub repozitoriju .

Podrška Biricon IT Services

Brinemo o Odoo instalacijama za mala i srednja preduzeća: od uvođenja, preko prilagodbi i migracija, do tekućeg rada. Ako pri prelasku želite sačuvati svoje brojeve dokumenata, dati provjeriti dodjelu brojeva pod opterećenjem ili sigurno postaviti modul poput ovog u svoju produktivnu instancu, rado ćemo pomoći. Daljnji vlastiti razvojni projekti: Firmenbuch i provjera adresa za austrijske kupce, Setovi proizvoda u ponudi kao odjeljak i Web RBL, crna lista za napadački saobraćaj.

Obratite nam se sada

Stanje na dan: 3. novembra 2026. Verzija modula 19.0.1.0.0. Svi brojevi u primjerima i na slikama proizvoljno su odabrani.