Məzmuna keçin

Odoo 19-da prefiks, il və sayğac əsasında sənəd nömrələri – document_number_prefix_year modulu və eyni vaxtda yaratmanın gizli riski

3 noyabr 2026 | Odoo 19 Community | Öz hazırladığımız modul
3 noyabr 2026 tərəfindən
Odoo 19-da prefiks, il və sayğac əsasında sənəd nömrələri – document_number_prefix_year modulu və eyni vaxtda yaratmanın gizli riski

Odoo 19 üçün document_number_prefix_year modulu: prefiks, il və sayğacdan ibarət sənəd nömrələri

“AN26000001” nömrəsi “S00001” nömrəsindən daha çox məlumat verir: bu, qiymət təklifidir, 2026-cı ilə aiddir və ilk təklifdir. Bir çox müəssisə, xüsusən də köhnə sistemdən Odoo-ya keçənlər, sənəd nömrələrini məhz bu formada saxlamaq istəyir. Odoo özü qiymət təkliflərini, sifarişləri və təhvil sənədlərini öz ardıcıllıqları ilə (S00001, WH/OUT/00001, P00001), hesab-fakturaları isə jurnal prefiksi və il ilə (INV/2026/00001) nömrələyir.

Bunun üçün Odoo 19-a uyğun Document Numbering by Prefix and Year (document_number_prefix_year) modulunu hazırladıq. Modul GitHub-da LGPL-3 lisenziyası ilə azad proqram təminatı kimi yayımlanır:

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

Əvvəlcə vəziyyəti açıq deyək: biz Biricon IT Services-də bu moduldan istifadə etmirik. Onu hazır, sənədləşdirilmiş və testlərlə təmin edilmiş olduğu, başqalarının işini asanlaşdıra biləcəyi üçün yayımlayırıq. İstifadə edənlər Məhdudiyyətlər və Testlər bölmələrini oxumalıdırlar.

Nömrələmə sxemi

Hər nömrə üç hissədən ibarətdir: sənəd növünə uyğun prefiks, il və sabit sayda rəqəmdən ibarət sayğac. Prefiksi, il formatını (26 və ya 2026) və rəqəmlərin sayını hər şirkət üçün Parametrlər → Sənədlərin nömrələnməsi bölməsində təyin edirsiniz.

Prefiks, il və sayğacdan ibarət AN26000001 sənəd nömrəsinin quruluşu və sənəd növləri cədvəli

Modul qiymət təkliflərini, müştəri sifarişlərini, müştəri hesab-fakturalarını və kredit-notlarını, təhvil sənədlərini, mal qəbullarını və satınalma sifarişlərini əhatə edir. Şəkildəki prefikslər yalnız nümunədir: AN, AU, RE, GU, LI, WE, BE. Prefiksi boş saxlasanız, həmin sənəd növü üçün Odoo-nun standart nömrələnməsi qüvvədə qalır. Yəni siz sazlamayana qədər modul heç nə etmir.

Nömrələmə necə işləyir

  • Hər il yenidən. Yeni il başlayanda sayğac yenidən 1-dən başlayır.
  • İdxal edilmiş nömrələrdən davam edir. Modul eyni prefiksə və ilə aid mövcud nömrələr arasında uzunluğundan asılı olmayaraq ən böyüyünü tapır. Köhnə sistemdən gətirilmiş AN26119 nömrəsi verilənlər bazasında varsa, növbəti qiymət təklifinin nömrəsi AN26000120 olur. Modulun sistem keçidləri üçün uyğun olmasının səbəbi budur: köhnə sənədlər ilkin nömrələri ilə idxal edilir, yeni sənədlərdə isə nömrələmə ardıcıl davam edir.
  • Təsdiq zamanı yeni sifariş nömrəsi. İstəyə görə təsdiqlənmiş qiymət təklifinə sifariş ardıcıllığından nömrə verilir. Qiymət təklifinin nömrəsi sifarişdəki Qiymət təklifinin nömrəsi sahəsində saxlanılır və formada, siyahıda və axtarışda görünür.
  • Hesab-fakturalar uçota alınarkən nömrələnir. Müştəri hesab-fakturalarına və kredit-notlarına nömrə yaradılarkən deyil, yalnız uçota alınarkən verilir. Buna görə silinmiş qaralamalar nömrə ardıcıllığında boşluq yaratmır. İl Hesab-faktura tarixi sahəsindən götürülür: 30.12.2025 tarixli, 2.1.2026 tarixində uçota alınan hesab-fakturanın nömrəsi RE25… olur.
  • Qalan hər şey olduğu kimi qalır. Təchizatçı hesab-fakturaları, ödənişlər, mühasibat yazılışları və istehsal sifarişləri Odoo-nun standart ardıcıllıqlarını saxlayır. Mövcud adlar heç vaxt yenidən yazılmır, hətta modulu sonradan söndürsəniz belə.

Həssas məqam: eyni anda iki istifadəçi

Öz nömrələmə mexanizmini qurmaq asan görünür: ən böyük nömrəni tap və üzərinə bir əlavə et. Lakin iki istifadəçi eyni anda qiymət təklifi yaradanda məsələ çətinləşir. Hər ikisi “ən böyük nömrə = 0” oxuyur və hər ikisi AN26000001 nömrəsini verir. Odoo öz ardıcıllıqları üçün verilənlər bazasının ardıcıllıq mexanizmindən istifadə edir. Xüsusi hazırlanmış nömrələmədə bu mexanizm yoxdur, üstəlik Odoo-da qiymət təklifləri və satınalma sifarişləri üçün adın unikallığı yoxlanılmır: eyni nömrəli iki sənəd sadəcə yadda saxlanılır.

İlk ağla gələn qoruma üsulu kiliddir. Modul hər şirkət, prefiks və il üçün tranzaksiya bitənədək qüvvədə qalan verilənlər bazası kilidi (PostgreSQL Advisory Lock) əldə edir. İkinci istifadəçi birincinin işi bitənədək gözləyir. Lakin bu kifayət etmir və biz bunu istehsal verilənlər bazasının surətində apardığımız sınaqda aşkar etdik:

İki istifadəçinin əməliyyatlarının zaman ardıcıllığı: ikinci oxuma olmadan hər ikisi eyni nömrəni verir, ikinci oxuma ilə isə ikinci istifadəçi növbəti nömrəni alır

Odoo REPEATABLE READ izolyasiya səviyyəsi ilə işləyir. Tranzaksiyanın gördüyü verilənlər bazası vəziyyəti ilk sorğu zamanı sabitlənir. B istifadəçisi bu vəziyyəti A istifadəçisi işini bitirməzdən əvvəl artıq əldə etmiş olur. B bundan sonra kilidi gözləyib əldə etdikdə, köhnə vəziyyətə əsasən “ən böyük nömrə = 0” oxuyur və həmin nömrəni ikinci dəfə verir. Kilid əməliyyatların ardıcıllığını tənzimləyib, amma görünən məlumatları yeniləməyib.

Həll yolu verilənlər bazasına ayrıca, qısamüddətli bağlantı vasitəsilə ikinci dəfə oxumaqdır; bu bağlantı artıq təsdiqlənmiş bütün sətirləri görür. İki dəyərdən daha böyüyü götürülür. İlk oxuma da zəruridir, çünki yalnız o, eyni tranzaksiyada artıq verilmiş, lakin hələ təsdiqlənməmiş nömrələri görür; məsələn, bir dəfəyə bir neçə sənəd idxal edilərkən.

Bunu iki tranzaksiya ilə yoxladıq: ikincinin verilənlər bazası vəziyyətini birincinin təsdiqindən əvvəl əldə etdiyi, sonra isə kilidi gözlədiyi dəqiq müəyyən edildi. İkinci oxuma olmadan hər iki sifariş eyni nömrəni aldı, ikinci oxuma ilə isə onlara 1 və 2 nömrələri verildi.

Nəzərə alınmalı vacib məqam: bu sınaq əl ilə aparılıb. O, avtomatlaşdırılmış testlərə daxil deyil, çünki bunun üçün verilənlər bazasına iki real bağlantı lazımdır və Odoo-nun test mühiti (hər test üçün yalnız bir tranzaksiya) bunu təmin etmir.

Texniki həll

SənədQoşulma nöqtəsi
Qiymət təklifiad boş, / və ya New olduqda sale.order.create
Satış sifarişisale.order.action_confirm, standart təsdiqdən əvvəl
Faktura, kredit notasıaccount.move._set_next_sequence, mühasibat uçotuna keçirilərkən çağırılır
Çatdırılma qaiməsi, mal qəbulustock.picking.create, əməliyyat növünə görə
Satınalma sifarişipurchase.order.create
  • Sayğac. Ən böyük nömrə hər şirkət üzrə müntəzəm ifadə ilə tapılır (^<Stamm>([0-9]{1,15})$, kök hissədəki xüsusi simvollar ekranlaşdırılır); şirkətə bağlı olmayan adlar da nəzərə alınır.
  • Fakturalar. _set_next_sequence adı yazır və _compute_split_sequence metodunu çağırır ki, Odoo-nun ardıcıllıq məntiqi (prefiks, nömrə, jurnalın növbəti fakturası üçün ilin müəyyən edilməsi) düzgün işləsin.
  • Parametrlər. Şirkətin document_number_* sahələri res.config.settings daxilində əks etdirilir. Parametrlərdə boşluq olan və ya rəqəmlə bitən prefikslər qəbul edilmir.
  • Tərcümə. Alman dilinə tərcümə daxildir.

Quraşdırma və sazlama

  1. document_number_prefix_year qovluğunu əlavələrin axtarış yoluna yerləşdirin.
  2. Tətbiqlər siyahısını yeniləyin və modulu quraşdırın. Satış, Satınalma, Anbar və Mühasibatlıq modulları tələb olunur.
  3. Parametrlər → Sənədlərin nömrələnməsi bölməsində prefiksləri, il formatını və rəqəm sayını daxil edin.
  4. Əvvəlcə surət üzərində sınaqdan keçirin. Sənədin nömrəsini sonradan avtomatik olaraq əvvəlki vəziyyətinə qaytarmaq mümkün deyil. Fakturalarda isə nömrə sənədlərin saxlanması və yoxlanılması öhdəlikləri ilə bağlıdır.

Məhdudiyyətlər

Modulun altı məhdudiyyəti: alış-veriş səbətləri, il formatı, hər şirkət üçün bir seriya, prefiks qaydaları, az sayda test, yalnız sadalanan sənədlər

  • Qiymət təklifləri yaradılarkən nömrələnir. Silinmiş və ya ləğv edilmiş qiymət təklifləri nömrələmədə boşluqlar yaradır. Eyni hal başqa modulun yaratdığı hər satış sifarişinə də aiddir: onlayn mağazanın alış-veriş səbətləri (website_sale) Qiymət təklifi statusunda olan sifarişlərdir və hər biri bir nömrə tutur. Yalnız fakturalar və kredit notaları boşluqsuz nömrələnir, çünki onlara nömrə mühasibat uçotuna keçirilərkən verilir.
  • İş prosesində il formatını dəyişməyin. Kök hissə AN26 olduqda modul mövcud AN2026000001 nömrəsinin sayğacını 26000001 kimi oxuyur. Formatı ilk sənədi yaratmazdan əvvəl müəyyənləşdirin.
  • Sayğac ən çox 15 rəqəmdən ibarət ola bilər. Ən böyük nömrə axtarılarkən kök hissədən sonrakı daha uzun rəqəm ardıcıllıqları nəzərə alınmır.
  • Hər jurnal və ya anbar üçün ayrıca seriya yoxdur. Sayğac şirkət, prefiks və il üzrə işləyir. Bir neçə satış jurnalı eyni faktura sayğacından istifadə edir.
  • Prefikslərdə boşluq olmamalı və onlar rəqəmlə bitməməlidir, əks halda prefiksi, ili və sayğacı bir-birindən ayırmaq mümkün olmur.
  • Yalnız sadalanan sənəd növləri əhatə olunur.

Testlər

Modula on avtomatlaşdırılmış test daxildir. Onlar aşağıdakıları yoxlayır:

  • qiymət təklifi və təsdiq: təklif və sifariş nömrələri, təklif nömrəsinin saxlanması
  • idxal edilmiş nömrədən sonra saymanın davam etməsi (AN26119 → AN26000120)
  • mövcud sənədlərin sonradan yenidən nömrələnməməsi
  • faktura, kredit notası və faktura tarixinə əsasən yeni ilə keçid
  • satınalma sifarişi və çatdırılma qaimələri
  • boş prefiks: Odoo-nun standart nömrəsi saxlanır
  • dördrəqəmli il
  • xüsusi simvolları olan prefiks
  • bir tranzaksiyada bir neçə nömrə
  • çox uzun rəqəm ardıcıllıqları nəzərə alınmır

İşə salma əmri:

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

Testlər adi tranzaksiyalarla aparılır. İki istifadəçinin eyni vaxtda sənəd yaratması zamanı davranış bu testlərə daxil deyil; bu hal yuxarıda təsvir edildiyi kimi verilənlər bazasının surətində əl ilə yoxlanılıb. Modulu eyni vaxtda çox sayda istifadəçinin işlədiyi sistemdə tətbiq edənlər bu sınağı öz verilənlər bazalarında təkrarlamalıdırlar.

Hesab-faktura nömrəsinə dair hüquqi qeyd

UStG-nin 11-ci maddəsinə əsasən, fakturalarda onları müəyyənləşdirmək üçün yalnız bir dəfə verilən ardıcıl nömrə olmalıdır. Modul fakturaları mühasibat uçotuna keçirilərkən nömrələyir və hər prefiks və il üçün ayrıca sayğacdan istifadə edir ki, bu da həmin qaydaya uyğundur. Konkret parametrlərinizin (bir neçə jurnal, ayrıca prefiksli kredit notaları, yeni ilə keçid) vergi məsləhətçinizin tələblərinə uyğun olub-olmadığını onunla dəqiqləşdirməlisiniz. Bu məqalə hüquqi məsləhət deyil.

Tez-tez verilən suallar

Niyə sadəcə Odoo-nun nömrələmə ardıcıllıqlarını uyğunlaşdırmayaq?

Fakturalar üçün bunu jurnal prefiksi vasitəsilə etmək olar. Lakin qiymət təklifləri, satış sifarişləri, çatdırılma qaimələri və satınalma sifarişləri üçün yeni ilə keçidi nəzərə alan, prefiks, il və sayğacdan ibarət vahid sxem yoxdur. Sayğac da idxal edilmiş köhnə nömrələri nəzərə almır. Modul məhz bu boşluğu doldurur.

Mövcud nömrələr dəyişdirilirmi?

Xeyr. Modul yalnız yeni nömrələr verir. Artıq saxlanmış adlar modul söndürüldükdə də dəyişməz qalır.

Modulu necə söndürə bilərəm?

Müvafiq sənəd növünün prefiksini silin. Bundan sonra nömrələməni yenə Odoo özü aparacaq. Modulun silinməsi də artıq verilmiş nömrələri dəyişmir.

Moduldan özünüz istifadə edirsinizmi?

Xeyr. Biz Odoo-nun standart nömrələrindən istifadə edirik. Modulu avtomatlaşdırılmış testlər və təsvir edilən əl sınağı ilə yoxlamışıq, lakin çox sayda istifadəçinin işlədiyi real iş mühitində sınamamışıq.

Odoo 17 və ya 18 ilə işləyirmi?

Modulu yalnız Odoo 19.0 Community ilə sınaqdan keçirmişik. Digər versiyalara uyğun gələ də bilər, gəlməyə də bilər; bunu yoxlamamışıq.

Hansı lisenziya ilə təqdim olunur?

LGPL-3 lisenziyası ilə. Xəta bildirişlərini və təkmilləşdirmə təkliflərini issue kimi bu repozitoriyada GitHub repozitoriyası bildirə bilərsiniz.

Biricon IT Services dəstəyi

Kiçik və orta müəssisələrin Odoo sistemlərinə tətbiqdən tutmuş uyğunlaşdırma və miqrasiyalara, eləcə də gündəlik istismara qədər dəstək göstəririk. Keçid zamanı sənəd nömrələrinizi qorumaq, yük altında nömrə verilməsini yoxlatmaq və ya bu cür modulu işlək sisteminizə etibarlı şəkildə tətbiq etmək istəyirsinizsə, məmnuniyyətlə kömək edərik. Öz hazırladığımız digər modullar: Avstriyalı müştərilər üçün şirkət reyestri və ünvan yoxlaması, Qiymət təklifində bölmə şəklində məhsul dəstləri və Web RBL, hücum trafikinin bloklanması siyahısı.

İndi əlaqə saxlayın

Son yenilənmə: 3 noyabr 2026. Modulun versiyası: 19.0.1.0.0. Nümunələrdə və şəkillərdəki bütün nömrələr şərtidir.