„AN26000001“ segir meira en „S00001“: Þetta er tilboð, það er frá 2026 og það er hið fyrsta. Mörg fyrirtæki, einkum þau sem skipta úr eldra kerfi yfir í Odoo, vilja halda skjalanúmerum sínum einmitt svona. Odoo númerar sjálft tilboð, pantanir og afhendingarseðla með eigin röðum (S00001, WH/OUT/00001, P00001) og reikninga með dagbókarforskeyti og ári (INV/2026/00001).
Við skrifuðum til þess eininguna Document Numbering by Prefix and Year (document_number_prefix_year) fyrir Odoo 19. Hún er aðgengileg sem frjáls hugbúnaður undir LGPL-3-leyfinu á GitHub:
github.com/Alex0176/odoo-document-number-prefix-year
Heiðarlegt mat fyrirfram: Við notum eininguna ekki hjá Biricon IT Services. Við birtum hana vegna þess að hún er fullgerð, skjalfest og með prófunum og getur sparað öðrum vinnu. Sá sem notar hana ætti að lesa kaflana um takmarkanir og Prófanir .
Númeraskemað
Hvert númer samanstendur af þremur hlutum: forskeyti fyrir hverja skjalategund, ári og teljara með fastan fjölda stafa. Forskeytið, ársniðið (26 eða 2026) og fjölda stafa stillirðu fyrir hvert fyrirtæki undir Stillingar → Skjalanúmering.
Meðhöndluð eru tilboð, sölupantanir, sölureikningar og kreditreikningar, afhendingarseðlar, vörumóttökur og innkaupapantanir. Forskeytin á myndinni eru aðeins dæmi: AN, AU, RE, GU, LI, WE, BE. Sá sem lætur forskeyti vera autt heldur staðalnúmeringu Odoo fyrir þá skjalategund. Einingin gerir því ekkert fyrr en þú stillir hana.
Hvernig númerin hegða sér
- Nýtt á hverju ári. Teljarinn byrjar aftur á 1 við áramót.
- Áfram eftir innfluttum númerum. Einingin leitar að hæsta fyrirliggjandi númeri sama forskeytis og árs, sama hve langt það er. Sé
AN26119úr eldra kerfi í gagnagrunninum verður næsta tilboðAN26000120. Það er ástæðan fyrir því að einingin hentar við kerfisskipti: Eldri skjöl eru flutt inn með upprunalegum númerum og ný skjöl taka við hnökralaust. - Nýtt pöntunarnúmer við staðfestingu. Staðfest tilboð fær sé þess óskað númer úr pöntunarröðinni. Tilboðsnúmerið helst í reitnum Tilboðsnúmer á pöntuninni og er sýnilegt í eyðublaði, lista og leit.
- Reikningar við bókun. Sölureikningar og kreditreikningar fá númer sitt fyrst við bókun, ekki við stofnun. Eydd drög skilja því ekki eftir eyðu. Árið kemur úr reikningsdagsetningunni: Reikningur frá 30.12.2025 sem er bókaður 2.1.2026 heitir
RE25…. - Allt annað helst. Innkaupareikningar, greiðslur, bókhaldsfærslur og framleiðslupantanir halda staðalröðum Odoo. Fyrirliggjandi nöfnum er aldrei breytt, ekki einu sinni þótt þú slökkvir aftur á einingunni.
Viðkvæmi hlutinn: Tveir notendur samtímis
Eigin númeraúthlutun virðist einföld: finna hæsta númerið, leggja einn við. Hún er það ekki um leið og tveir notendur stofna tilboð á sama augnabliki. Báðir lesa „hæsta númer = 0“, báðir úthluta AN26000001. Odoo hefur til þess gagnagrunnsraðir fyrir sínar eigin raðir. Hjá heimasmíðuðu númeri vantar það, og fyrir tilboð og innkaupapantanir er í Odoo auk þess engin einkvæmniathugun á nafninu: Tvö skjöl með sama númer eru einfaldlega vistuð.
Augljós vörn er læsing. Einingin tekur fyrir hvert fyrirtæki, forskeyti og ár læsingu gagnagrunnsins (PostgreSQL Advisory Lock) sem helst til loka færslunnar. Seinni notandinn bíður þar til sá fyrri er búinn. Það nægir þó ekki og við fundum það með tilraun á afriti af framleiðslugagnagrunninum:
Odoo vinnur með einangrunarstigið REPEATABLE READ. Staða gagnagrunnsins sem færsla sér er fryst við fyrstu fyrirspurn hennar. Notandi B hefur þegar þessa stöðu áður en A er búinn. Bíði B síðan eftir læsingunni og fái hana les hann með gömlu stöðunni „hæsta númer = 0“ og úthlutar númerinu í annað sinn. Læsingin raðaði atburðunum en uppfærði ekki þekkinguna.
Lausnin er seinni lesaðgangur um sérstaka, skammlífa gagnagrunnstengingu sem sér allar þegar staðfestar línur. Stærra gildið af þeim tveimur sigrar. Fyrri lesaðgangurinn er áfram nauðsynlegur því að aðeins hann þekkir númer sem sama færslan hefur þegar úthlutað en ekki enn staðfest, til dæmis við innflutning margra skjala í einu.
Við prófuðum þetta með tveimur færslum þar sem sú seinni tók sannanlega stöðu sína fyrir commit þeirrar fyrri og beið síðan eftir læsingunni. Án seinni lesaðgangsins fengu báðar pantanir sama númer, með honum númerin 1 og 2.
Mikilvægt til að meta þetta: Þessi tilraun er handvirk athugun. Hún er ekki hluti af sjálfvirku prófununum því að til þess þarf tvær raunverulegar gagnagrunnstengingar sem prófunarumhverfi Odoo (ein færsla á hverja prófun) býður ekki upp á.
Tæknileg útfærsla
| Skjal | Tengipunktur |
|---|---|
| Tilboð | sale.order.create, þegar nafnið er autt, / eða New |
| Sölupöntun | sale.order.action_confirm, á undan staðalstaðfestingunni |
| Reikningur, kreditreikningur | account.move._set_next_sequence, kallað á við bókun |
| Afhendingarseðill, vörumóttaka | stock.picking.create eftir aðgerðartegund |
| Innkaupapöntun | purchase.order.create |
- Teljari. Hæsta númerið finnur regluleg segð (
^<Stofn>([0-9]{1,15})$, stofninn er varinn) fyrir hvert fyrirtæki, nöfn án fyrirtækis meðtalin. - Reikningar.
_set_next_sequenceskrifar nafnið og kallar á_compute_split_sequencesvo að raðrökfræði Odoo (forskeyti, númer, árgreining fyrir næsta reikning dagbókarinnar) haldist samkvæm. - Stillingar. Fyrirtækisreitirnir
document_number_*eru speglaðir íres.config.settings. Stillingarnar hafna forskeytum með bili eða tölustaf í lokin. - Þýðing. Þýsk þýðing fylgir með.
Uppsetning og stilling
- Setja möppuna
document_number_prefix_yearí addons-slóðina. - Uppfæra forritalistann, setja eininguna upp. Forsendur eru Sala, Innkaup, Lager og Bókhald.
- Undir Stillingar → Skjalanúmering færa inn forskeyti, ársnið og fjölda stafa.
- Prófaðu fyrst á afriti. Númer skjals er ekki hægt að afturkalla sjálfkrafa síðar, og hjá reikningum hangir varðveisluskylda og skoðunarskylda á númerinu.
takmarkanir
- Tilboð eru númeruð við stofnun. Eydd eða afturkölluð tilboð skilja eftir eyður. Hið sama gildir um hverja sölupöntun sem önnur eining stofnar: Körfur vefverslunarinnar (
website_sale) eru pantanir í stöðunni Tilboð og nota hver sitt númer. Aðeins reikningar og kreditreikningar eru án eyða því að þeir eru númeraðir við bókun. - Ekki breyta ársniðinu í rekstri. Með stofninum
AN26les einingin fyrirliggjandiAN2026000001sem teljara26000001. Ákveddu sniðið áður en fyrsta skjalið er stofnað. - Teljari í mesta lagi 15 stafir. Lengri talnaraðir á eftir stofninum eru hunsaðar við leitina að hæsta númerinu.
- Engar aðskildar raðir fyrir hverja dagbók eða lager. Teljarinn gildir fyrir hvert fyrirtæki, forskeyti og ár. Margar söludagbækur deila reikningsteljaranum.
- Forskeyti mega ekki innihalda bil og ekki enda á tölustaf, annars er ekki lengur hægt að aðgreina forskeyti, ár og teljara.
- Aðeins nefndar skjalategundir eru meðhöndlaðar.
Prófanir
Einingin fylgir með tíu sjálfvirkum prófunum. Þær athuga:
- Tilboð og staðfesting: tilboðs- og pöntunarnúmer, tilboðsnúmerið varðveitt
- Framhald eftir innfluttu númeri (
AN26119→AN26000120) - engin eftirfarandi endurnúmering fyrirliggjandi skjala
- Reikningur, kreditreikningur og áramót eftir reikningsdagsetningu
- Innkaupapöntun og afhendingarseðlar
- autt forskeyti: staðalnúmer Odoo helst
- fjögurra stafa ár
- Forskeyti með sértáknum
- mörg númer í einni færslu
- mjög langar talnaraðir eru hunsaðar
Skipun:
odoo-bin -d <Testdatenbank> -i document_number_prefix_year --test-enable --test-tags=/document_number_prefix_year --stop-after-init
Prófanirnar keyra með venjulegum færslum. Hegðun við samtímis stofnun tveggja notenda er ekki hluti af þeim, hún var athuguð í höndunum á gagnagrunnsafriti eins og lýst er hér að ofan. Sá sem notar eininguna í kerfi með mörgum samtímis notendum ætti að endurtaka þessa tilraun á eigin gagnagrunni.
Lagalegur fyrirvari um reikningsnúmer
Reikningar skulu samkvæmt § 11 UStG bera samfellt númer sem er einkvæmt úthlutað til að auðkenna reikninginn. Einingin númerar reikninga við bókun og með eigin teljara fyrir hvert forskeyti og ár, sem fellur að því. Hvort tiltekin stilling þín (margar dagbækur, kreditreikningar með eigin forskeyti, áramót) uppfyllir kröfur skattaráðgjafa þíns verðurðu að ganga úr skugga um með honum. Þessi færsla er ekki lögfræðileg ráðgjöf.
Algengar spurningar
Hvers vegna ekki einfaldlega að aðlaga raðir Odoo?
Fyrir reikninga er það hægt í gegnum dagbókarforskeytið. Hjá tilboðum, pöntunum, afhendingarseðlum og innkaupapöntunum er hins vegar ekkert sameiginlegt skema úr forskeyti, ári og teljara með áramótum, og teljarinn þekkir ekki innflutt eldri númer. Þar kemur einingin til sögunnar.
Er fyrirliggjandi númering yfirskrifuð?
Nei. Einingin úthlutar aðeins nýjum númerum. Nöfn sem þegar eru vistuð haldast óbreytt, einnig þegar slökkt er á einingunni.
Hvernig slekk ég á henni aftur?
Tæmdu forskeyti skjalategundarinnar. Þá númerar Odoo hana aftur sjálft. Að fjarlægja eininguna breytir heldur ekki úthlutuðum númerum.
Notið þið hana sjálf?
Nei. Hjá okkur keyra staðalnúmer Odoo. Við prófuðum eininguna með sjálfvirku prófununum og handvirku tilrauninni sem lýst er, en ekki í rekstri með mörgum notendum.
Keyrir hún með Odoo 17 eða 18?
Við höfum aðeins prófað hana með Odoo 19.0 Community. Fyrir aðrar útgáfur getur hún passað eða ekki, við höfum ekki athugað það.
Undir hvaða leyfi er hún?
Undir LGPL-3. Villur og úrbætur eru vel þegnar sem issue í GitHub-geymslunni .
Aðstoð frá Biricon IT Services
Við sjáum um Odoo-uppsetningar fyrir lítil og meðalstór fyrirtæki: frá innleiðingu til sérsniðna og flutninga og áfram til daglegs reksturs. Ef þú vilt halda skjalanúmerum þínum við kerfisskipti, láta prófa númeraúthlutunina undir álagi eða koma einingu eins og þessari örugglega í framleiðsluumhverfið þitt, hjálpum við með ánægju. Fleiri eigin þróunarverkefni: Fyrirtækjaskrá og vistfangaathugun fyrir austurríska viðskiptavini, Vörusett í tilboði sem hluti og Web RBL, svartlistinn fyrir árásarumferð.
Staða: 3. nóvember 2026. Einingarútgáfa 19.0.1.0.0. Öll númer í dæmunum og á myndunum eru frjálst valin.