Preskoči na sadržaj

Odoo 19: brojevi dokumenata od 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 od prefiksa, godine i brojača – modul document_number_prefix_year i zamka pri istovremenom kreiranju

Modul document_number_prefix_year za Odoo 19: brojevi dokumenata od prefiksa, godine i brojača

„AN26000001“ govori više od „S00001“: riječ je o ponudi iz 2026. godine, i to prvoj. Mnoge kompanije, posebno one koje prelaze sa starijeg sistema na Odoo, žele zadržati upravo takve brojeve dokumenata. Odoo inače numerira ponude, naloge i otpremnice vlastitim nizovima (S00001, WH/OUT/00001, P00001), a račune prefiksom dnevnika i godinom (INV/2026/00001).

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

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

Na početku, iskreno o kontekstu: u kompaniji Biricon IT Services ovaj modul ne koristimo. Objavljujemo ga jer je dovršen, dokumentiran i opremljen testovima te drugima može uštedjeti trud. Svako ko ga želi koristiti trebao bi odjeljke Ograničenja i Testovi pročitati.

Shema numeracije

Svaki broj sastoji se od tri dijela: prefiksa za određenu vrstu dokumenta, godine i brojača s fiksnim brojem cifara. Prefiks, format godine (26 ili 2026) i broj cifara podešavate za svaku kompaniju u odjeljku Postavke → Numeracija dokumenata.

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

Obuhvaćene su ponude, prodajni nalozi, izlazni računi i knjižna odobrenja, otpremnice, prijemi robe i narudžbenice. Prefiksi na slici služe samo kao primjeri: AN, AU, RE, GU, LI, WE, BE. Ako prefiks ostavite prazan, za tu vrstu dokumenta zadržava se standardna numeracija sistema Odoo. Modul, dakle, ne radi ništa dok ga ne podesite.

Kako funkcionira numeracija

  • Svake godine ispočetka. Na početku nove godine brojač ponovo kreće od 1.
  • Nastavak nakon uvezenih brojeva. Modul traži najveći postojeći broj s istim prefiksom i godinom, bez obzira na njegovu dužinu. Ako se u bazi nalazi AN26119 iz starog sistema, sljedeća ponuda imat će broj AN26000120. Zato je modul pogodan za prelazak s drugog sistema: stari dokumenti uvoze se s izvornim brojevima, a numeracija novih dokumenata nastavlja se bez prekida.
  • Novi broj prodajnog naloga pri potvrdi. Potvrđena ponuda po želji dobiva broj iz niza za prodajne naloge. Broj ponude ostaje sačuvan u polju Broj ponude na prodajnom nalogu i vidljiv je u obrascu, listi i pretrazi.
  • Računi pri knjiženju. Izlazni računi i knjižna odobrenja dobivaju broj tek pri knjiženju, a ne pri kreiranju. Zato brisanje nacrta ne ostavlja praznine u numeraciji. Godina se preuzima iz polja Datum računa: račun s datumom 30.12.2025. koji se knjiži 2.1.2026. imat će broj RE25….
  • Sve ostalo ostaje isto. Ulazni računi, plaćanja, knjiženja i proizvodni nalozi zadržavaju standardne nizove sistema Odoo. Postojeći nazivi nikada se ne mijenjaju, čak ni ako ponovo isključite modul.

Osjetljivi dio: dva korisnika istovremeno

Vlastita dodjela brojeva djeluje jednostavno: pronađete najveći broj i dodate jedan. Međutim, to prestaje biti jednostavno čim dva korisnika istovremeno kreiraju ponudu. Oba pročitaju „najveći broj = 0“ i oba dodijele AN26000001. Odoo za vlastite nizove koristi sekvence baze podataka. Kod vlastite numeracije toga nema, a za ponude i narudžbenice u sistemu Odoo dodatno ne postoji provjera jedinstvenosti naziva: dva dokumenta s istim brojem jednostavno se sačuvaju.

Očigledna zaštita je zaključavanje. Modul za svaku kombinaciju kompanije, prefiksa i godine postavlja zaključavanje u bazi podataka (PostgreSQL Advisory Lock), koje traje do kraja transakcije. Drugi korisnik čeka dok prvi ne završi. Ali to nije dovoljno, što smo otkrili eksperimentom na kopiji produkcijske baze podataka:

Vremenski slijed rada dva korisnika: bez drugog čitanja oba dodjeljuju isti broj, a uz drugo čitanje drugi korisnik dobiva sljedeći broj

Odoo radi na nivou izolacije REPEATABLE READ. Stanje baze podataka koje transakcija vidi zamrzava se pri njenom prvom upitu. Korisnik B već ima to stanje prije nego što A završi. Ako B zatim čeka na zaključavanje i dobije ga, iz svog starog stanja čita „najveći broj = 0“ i drugi put dodjeljuje isti broj. Zaključavanje je uredilo redoslijed, ali nije ažuriralo podatke koje transakcija vidi.

Rješenje je drugo čitanje putem zasebne, kratkotrajne veze s bazom podataka, koja vidi sve već potvrđene redove. Uzima se veća od dvije vrijednosti. Prvo čitanje i dalje je potrebno jer samo ono vidi brojeve koje je ista transakcija već dodijelila, ali još nije potvrdila, naprimjer pri uvozu više dokumenata odjednom.

To smo provjerili s dvije transakcije, pri čemu je druga dokazano preuzela svoje stanje prije potvrde prve transakcije, a zatim čekala na zaključavanje. Bez drugog čitanja oba naloga dobila su isti broj, a s njim brojeve 1 i 2.

Važno za procjenu: ovaj eksperiment je ručna provjera. On nije dio automatskih testova jer su za njega potrebne dvije stvarne veze s bazom podataka, što Odoo testno okruženje ne omogućava jer koristi samo jednu transakciju po testu.

Tehnička implementacija

DokumentTačka integracije
Ponudasale.order.create, kada je naziv prazan, / ili New
Prodajni nalogsale.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č. Najveći broj pronalazi se regularnim izrazom (^<Stamm>([0-9]{1,15})$, pri čemu se posebni znakovi u osnovi izraza štite) za svaku kompaniju, uključujući i nazive bez pridružene kompanije.
  • Računi. _set_next_sequence upisuje naziv i poziva _compute_split_sequence kako bi logika sekvenci sistema Odoo ostala dosljedna: prefiks, broj i prepoznavanje godine za sljedeći račun u dnevniku.
  • Postavke. Polja kompanije document_number_* preslikavaju se u res.config.settings. U postavkama se odbijaju prefiksi koji sadrže razmake ili završavaju cifrom.
  • Prijevod. Uključen je prijevod na njemački.

Instalacija i podešavanje

  1. Smjestite direktorij document_number_prefix_year na putanju dodataka.
  2. Ažurirajte listu aplikacija i instalirajte modul. Potrebne su aplikacije Prodaja, Nabavka, Skladište i Računovodstvo.
  3. U odjeljku Postavke → Numeracija dokumenata unesite prefikse, format godine i broj cifara.
  4. Prvo isprobajte na kopiji. Broj dokumenta kasnije se ne može automatski vratiti na prethodni, a kod računa broj je povezan s obavezom čuvanja dokumentacije i omogućavanja kontrole.

Ograničenja

Šest ograničenja modula: korpe, format godine, jedan niz po kompaniji, pravila za prefikse, mali broj testova, samo navedeni dokumenti

  • Ponude se numeriraju pri kreiranju. Izbrisane ili otkazane ponude ostavljaju praznine u numeraciji. Isto vrijedi za svaki prodajni nalog koji kreira drugi modul: korpe internetske trgovine (website_sale) zapravo su nalozi sa statusom Ponuda i svaka troši po jedan broj. Samo računi i knjižna odobrenja imaju numeraciju bez praznina jer se numeriraju pri knjiženju.
  • Ne mijenjajte format godine tokom redovnog rada. Uz osnovu AN26 modul postojeći broj AN2026000001 čita kao vrijednost brojača 26000001. Odredite format prije kreiranja prvog dokumenta.
  • Brojač ima najviše 15 cifara. Duži nizovi cifara nakon osnove zanemaruju se pri traženju najvećeg broja.
  • Nema zasebnih serija po dnevniku ili skladištu. Brojač važi za svaku kombinaciju firme, prefiksa i godine. Više prodajnih dnevnika dijeli isti brojač računa.
  • Prefiksi ne smiju sadržavati razmake niti završavati cifrom, jer se u suprotnom prefiks, godina i brojač više ne mogu razdvojiti.
  • Obuhvaćene su samo navedene vrste dokumenata.

Testovi

Modul sadrži deset automatskih testova. Oni provjeravaju:

  • ponudu i potvrdu: broj ponude i prodajnog naloga, zadržavanje broja ponude
  • nastavak brojanja nakon uvezenog broja (AN26119 → AN26000120)
  • bez naknadnog mijenjanja brojeva postojećih dokumenata
  • račun, knjižno odobrenje i prelazak u novu godinu prema datumu računa
  • narudžbenica i otpremnice
  • prazan prefiks: zadržava se standardni broj koji dodjeljuje Odoo
  • četverocifrena godina
  • prefiks s posebnim znakovima
  • više brojeva u jednoj transakciji
  • veoma dugi nizovi cifara se zanemaruju

Pokretanje:

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

Testovi se izvršavaju u uobičajenim transakcijama. Ne obuhvataju ponašanje pri istovremenom kreiranju dokumenata koje pokreću dva korisnika; to je ručno provjereno na kopiji baze podataka, kako je gore opisano. Ako modul koristite u sistemu s mnogo istovremenih korisnika, ovaj postupak trebate ponoviti na vlastitoj bazi podataka.

Pravna napomena o broju računa

Prema § 11 UStG-a, računi moraju imati redni broj koji se dodjeljuje samo jednom radi identifikacije računa. Modul dodjeljuje brojeve računima pri knjiženju, uz zaseban brojač za svaki prefiks i godinu, što odgovara tom zahtjevu. Sa svojim poreznim savjetnikom morate provjeriti ispunjavaju li vaše konkretne postavke (više dnevnika, knjižna odobrenja s vlastitim prefiksom, prelazak u novu godinu) njegove zahtjeve. Ovaj članak ne predstavlja pravni savjet.

Česta pitanja

Zašto jednostavno ne prilagoditi sekvence u Odoou?

Za račune je to moguće putem prefiksa dnevnika. Međutim, za ponude, prodajne naloge, otpremnice i narudžbenice ne postoji zajednička šema od prefiksa, godine i brojača s prelaskom u novu godinu, a brojač ne prepoznaje uvezene stare brojeve. Tu pomaže ovaj modul.

Mijenja li se postojeća numeracija?

Ne. Modul dodjeljuje samo nove brojeve. Već sačuvani nazivi ostaju nepromijenjeni, čak i nakon isključivanja.

Kako da ga ponovo isključim?

Obrišite prefiks za tu vrstu dokumenta. Odoo će zatim ponovo sam dodjeljivati brojeve. Ni deinstalacija ne mijenja već dodijeljene brojeve.

Koristite li ga i sami?

Ne. Mi koristimo standardnu numeraciju u Odoou. Modul smo provjerili automatskim testovima i opisanim ručnim postupkom, ali ne i u stvarnom radu s mnogo korisnika.

Radi li s Odoo 17 ili 18?

Testirali smo ga samo s Odoo 19.0 Community. Možda radi i s drugim verzijama, ali to nismo provjerili.

Pod kojom je licencom dostupan?

Pod licencom LGPL-3. Prijave grešaka i prijedlozi poboljšanja dobrodošli su kao prijave problema u GitHub repozitoriju .

Podrška kompanije Biricon IT Services

Pružamo podršku za Odoo instalacije malim i srednjim preduzećima: od uvođenja, preko prilagodbi i migracija, do svakodnevnog rada. Rado ćemo vam pomoći ako pri prelasku želite sačuvati brojeve dokumenata, provjeriti dodjelu brojeva pod opterećenjem ili sigurno uvesti ovakav modul u svoje produkcijsko okruženje. Ostala vlastita rješenja: Registar preduzeća i provjera adresa za austrijske klijente, Kompleti proizvoda kao odjeljak u ponudi i Web RBL, lista za blokiranje napadačkog saobraćaja.

Kontaktirajte nas sada

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