„AN26000001“ seet méi wéi „S00001“: Et ass en Offert, et staamt aus 2026, an et ass deen éischten. Vill Betriber, virun allem déi, déi vun engem eelere System op Odoo ëmsteigen, wëllen hir Belegnummeren genee sou behalen. Odoo selwer nummeréiert Offerten, Optréi a Liwwerscheiner mat eegene Folgen (S00001, WH/OUT/00001, P00001) a Rechnungen mam Journalpräfix an dem Joer (INV/2026/00001).
Mir hu dofir de Modul Document Numbering by Prefix and Year (document_number_prefix_year) fir Odoo 19 geschriwwen. Hie steet als fräi Software ënner der LGPL-3-Lizenz op GitHub:
github.com/Alex0176/odoo-document-number-prefix-year
Vireg eng éierlech Astufung: Mir setzen de Modul bei Biricon IT Services net an. Mir verëffentlechen en, well en fäerdeg, dokumentéiert a mat Tester versinn ass an anere Leit Aarbecht spueren kann. Wien en asetzt, sollt d'Abschnitter zu Grenzen a Tester liesen.
D'Nummereschema
All Nummer besteet aus dräi Deeler: engem Präfix pro Belegaart, dem Joer an engem Zieler mat fixer Stellenzuel. De Präfix, d'Joresformat (26 oder 2026) an d'Stellenzuel stellt Dir pro Firma ënner Astellungen → Belegnummeréierung an.
Behandelt ginn Offerten, Clientenoptréi, Clientenrechnungen a Gutschrëften, Liwwerscheiner, Wareneingäng an Akafsbestellungen. D'Präfixer an der Ofbildung sinn nëmme Beispiller: AN, AU, RE, GU, LI, WE, BE. Wien e Präfix eidel léisst, behält fir dës Belegaart d'Standardnummeréierung vun Odoo. De Modul mécht also näischt, bis Dir en astellt.
Wéi d'Nummere sech verhalen
- All Joer nei. Den Zieler fänkt mam Joreswiessel erëm bei 1 un.
- Weider no importéierte Nummeren. De Modul sicht déi héchst existent Nummer vum selwechte Präfix a Joer, egal wéi laang se ass. Läit aus dem Altsystem
AN26119an der Datebank, dann ass deen nächsten OffertAN26000120. Dat ass de Grond, firwat de Modul fir Ëmstécker daugt: Altbelegger ginn mat hiren Originalnummere importéiert, an nei Belegger knäppe nahtlos un. - Nei Optragsnummer bei der Bestätegung. E bestätegten Offert kritt op Wonsch eng Nummer aus der Optragsfolge. D'Offertnummer bleift am Feld Offertnummer um Optrag erhalen a ass a Formulaire, Lëscht a Sich sichtbar.
- Rechnunge beim Buchen. Clientenrechnungen a Gutschrëfte kréien hir Nummer eréischt beim Buchen, net beim Uleeën. Geläscht Entwërf loossen dofir keng Lück. D'Joer staamt vum Rechnungsdatum: Eng Rechnung vum 30.12.2025, déi um 2.1.2026 gebucht gëtt, heescht
RE25…. - Alles anescht bleift. Rechnunge vu Lieferanten, Zuelungen, Buchungssätz a Fabrikatiounsoptréi behalen d'Standardfolge vun Odoo. Existent Nimm ginn ni ëmgeschriwwen, och net, wann Dir de Modul erëm ausschalt.
Den heikelen Deel: Zwee Benotzer zur selwechter Zäit
Eng eege Nummerenzouweisung gesäit einfach aus: héchst Nummer sichen, eent derbäizielen. Si ass et net, soubal zwee Benotzer am selwechte Moment en Offert uleeën. Béid liesen „héchst Nummer = 0“, béid weisen AN26000001 zou. Odoo huet dofir bei senge eege Folge Datebank-Sequenzen. Bei enger selwer gebauter Nummer feelt dat, an fir Offerten an Akafsbestellunge gëtt et an Odoo zousätzlech keng Eendeitegkeetspréifung um Numm: Zwee Belegger mat där selwechter Nummer ginn einfach gespäichert.
Deen noleien Schutz ass eng Spär. De Modul hëlt pro Firma, Präfix a Joer eng Spär vun der Datebank (PostgreSQL Advisory Lock), déi bis zum Enn vun der Transaktioun hält. Deen zweete Benotzer waart, bis deen éischten fäerdeg ass. Dat duergeet awer net, a mir hunn et duerch e Versuch un enger Kopie vun der Produktivdatebank fonnt:
Odoo schafft mat der Isolatiounsstuf REPEATABLE READ. Den Datebankstand, deen eng Transaktioun gesäit, gëtt bei hirer éischter Ufro agefruer. Benotzer B huet dëse Stand schonn, éier A fäerdeg ass. Waart B duerno op d'Spär a kritt si, liest en mat sengem aale Stand „héchst Nummer = 0“ a weist d'Nummer en zweete Kéier zou. D'Spär huet d'Reiefolleg gereegelt, awer net d'Wëssen aktualiséiert.
D'Léisung ass en zweete Lieszougrëff iwwer en eegenen, kuerzliewegen Datebankzougang, deen all scho bestätegt Zeilen gesäit. De gréissere vun den zwee Wäerter gewënnt. Deen éischte Lieszougrëff bleift néideg, well nëmmen hie Nummere kennt, déi déiselwecht Transaktioun scho zougewisen, awer nach net bestätegt huet, zum Beispill beim Import vu méi Belegger an engem Rutsch.
Mir hu dat mat zwou Transaktioune gepréift, bei deenen déi zweet nowäislech virum Commit vun der éischter hire Stand gezunn huet an dann op d'Spär gewaart huet. Ouni den zweete Lieszougrëff hu béid Optréi déiselwecht Nummer kritt, mat him d'Nummere 1 an 2.
Wichteg fir d'Astufung: Dëse Versuch ass eng Handpréifung. Hie gehéiert net zu den automatesche Tester, well dofir zwou richteg Datebankverbindunge néideg sinn, déi Odoos Testëmfeld (eng eenzeg Transaktioun pro Test) net zur Verfügung stellt.
Technesch Ëmsetzung
| Beleg | Andockpunkt |
|---|---|
| Offert | sale.order.create, wann den Numm eidel, / oder New ass |
| Clientenoptrag | sale.order.action_confirm, virun der Standardbestätegung |
| Rechnung, Gutschrëft | account.move._set_next_sequence, gëtt beim Buchen opgeruff |
| Liwwerschäin, Wareneingang | stock.picking.create no Virgangsaart |
| Akafsbestellung | purchase.order.create |
- Zieler. Déi héchst Nummer fënnt e reegelméissegen Ausdrock (
^<Stamm>([0-9]{1,15})$, de Stamm gëtt maskéiert) pro Firma, Nimm ouni Firma abegraff. - Rechnungen.
_set_next_sequenceschreift den Numm a rifft_compute_split_sequenceop, domat d'Sequenzlogik vun Odoo (Präfix, Nummer, Joreserkennung fir déi nächst Rechnung vum Journal) stëmmeg bleift. - Astellungen. D'Firmefelder
document_number_*ginn ares.config.settingsgespigelt. D'Astellunge leenen Präfixer mat Leerzeechen oder enger Zuel um Enn of. - Iwwersetzung. Eng däitsch Iwwersetzung ass abegraff.
Installatioun an Astellung
- Dossier
document_number_prefix_yearan den Addons-Pfad leeën. - Apps-Lëscht aktualiséieren, Modul installéieren. Viraussetzung sinn Verkaf, Akaf, Lager a Comptabilitéit.
- Ënner Astellungen → Belegnummeréierung Präfixer, Joresformat a Stellenzuel aginn.
- Fir d'éischt op enger Kopie ausprobéieren. D'Nummer vun engem Beleg léisst sech spéider net automatesch zréckdréinen, a bei Rechnunge hänkt un der Nummer d'Opbewahrungs- a Préifflicht.
Grenzen
- Offerte ginn beim Uleeë nummeréiert. Geläscht oder stornéiert Offerte loossen Lücken. Dat selwecht gëllt fir all Clientenoptrag, deen en anere Modul uleet: Warenkuerf vum Webshop (
website_sale) sinn Optréi am Status Offert a verbrauche jee eng Nummer. Lückenlos sinn nëmmen Rechnungen a Gutschrëften, well si beim Buchen nummeréiert ginn. - Joresformat net am lafende Betrib änneren. Mam Stamm
AN26liest de Modul eng existentAN2026000001als Zieler26000001. Leet d'Format virum éischte Beleg fest. - Zieler héchstens 15 Stellen. Méi laang Zifferfolge nom Stamm ginn bei der Sich no der héchster Nummer ignoréiert.
- Keng getrennte Serien pro Journal oder Lager. Den Zieler gëllt pro Firma, Präfix a Joer. Méi Verkafsjournaler deelen sech den Rechnungszieler.
- Präfixer däerfen keen Espace enthalen an net op eng Zuel ophalen, soss loossen sech Präfix, Joer an Zieler net méi trennen.
- Nëmmen déi genannte Belegaarten ginn behandelt.
Tester
De Modul bréngt zéng automatesch Tester mat. Si préifen:
- Offert a Bestätegung: Offert- an Optragsnummer, Erhalen vun der Offertnummer
- Weiderzielen no enger importéierter Nummer (
AN26119→AN26000120) - keng nodréiglech Ëmnummeréierung vun existente Belegger
- Rechnung, Gutschrëft a Joreswiessel no Rechnungsdatum
- Akafsbestellung a Liwwerscheiner
- eidele Präfix: Standardnummer vun Odoo bleift
- véierstellegt Joer
- Präfix mat Spezialzeechen
- méi Nummeren an enger Transaktioun
- ganz laang Zifferfolge ginn ignoréiert
Opruff:
odoo-bin -d <Testdatenbank> -i document_number_prefix_year --test-enable --test-tags=/document_number_prefix_year --stop-after-init
D'Tester lafen mat gewéinleche Transaktiounen. D'Verhale beim gläichzäitege Uleeë vun zwee Benotzer gehéiert net derzou, et gouf wéi uewen beschriwwen vun Hand un enger Datebankkopie gepréift. Wien de Modul an engem System mat villen gläichzäitege Benotzer asetzt, sollt dëse Versuch op der eegener Datebank widderhuelen.
Rechtlechen Hiweis zur Rechnungsnummer
Rechnunge mussen no § 11 UStG eng fortlafend Nummer droen, déi zur Identifikatioun vun der Rechnung eemolig zougewise gëtt. De Modul nummeréiert Rechnungen beim Buchen a mat engem eegenen Zieler pro Präfix a Joer, wat derzou passt. Ob Är konkret Astellung (méi Journaler, Gutschrëfte mat eegene Präfix, Joreswiessel) d'Ufuerderunge vun Ärer Steierberodung erfëllt, musst Dir mat dëser klären. Dëse Bäitrag ass keng Rechtsberodung.
Heefeg Froen
Firwat net einfach d'Odoo-Folge upassen?
Fir Rechnunge geet dat iwwert de Journalpräfix. Bei Offerten, Optréi, Liwwerscheiner a Bestellunge gëtt et awer kee gemeinsamt Schema aus Präfix, Joer an Zieler mat Joreswiessel, an den Zieler kennt keng importéiert Altnummeren. Do setzt de Modul un.
Gëtt bestoend Nummeréierung iwwerschriwwen?
Nee. De Modul weist nëmmen nei Nummeren zou. Scho gespäichert Nimm bleiwen onverännert, och beim Ofschalten.
Wéi schalt ech et erëm of?
Läscht de Präfix vun der Belegaart. Dann nummeréiert Odoo si erëm selwer. Och d'Desinstalléieren ännert keng zougewise Nummeren.
Setzt Dir et selwer an?
Nee. Bei eis lafen d'Standardnummere vun Odoo. Mir hunn de Modul mat den automatesche Tester an dem beschriwwenen Handversuch gepréift, awer net an engem lafende Betrib mat villen Benotzer.
Leeft et mat Odoo 17 oder 18?
Mir hunn et nëmmen mat Odoo 19.0 Community getest. Fir aner Versioune ka et passen oder net, mir hunn et net gepréift.
Ënner wéi enger Lizenz steet et?
Ënner der LGPL-3. Feeler a Verbesserunge si als Issue am GitHub-Repository wëllkomm.
Ënnerstëtzung duerch Biricon IT Services
Mir betreie Odoo-Installatioune fir kleng a mëttelgrouss Betriber: vun der Aféierung iwwer Upassungen a Migratiounen bis zum lafenden Betrib. Wann Dir beim Ëmstieg Är Belegnummeren erhale wëllt, d'Nummerenzouweisung ënner Laascht préife loosse wëllt oder e Modul wéi dëse sécher an Är Produktivinstanz bréngen wëllt, hëllefe mir gär. Weider Eegenentwécklungen: Firmenbuch an Adresspréifung fir éisträichesch Clienten, Produkt-Sets am Offert als Abschnitt a Web RBL, d'Spärlëscht fir Attackeverkéier.
Stand: 3. November 2026. Modulversioun 19.0.1.0.0. All Nummeren an de Beispiller an Abbildunge si fräi gewielt.