“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.
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ş
AN26119nömrəsi verilənlər bazasında varsa, növbəti qiymət təklifinin nömrəsiAN26000120olur. 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:
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əd | Qoşulma nöqtəsi |
|---|---|
| Qiymət təklifi | ad boş, / və ya New olduqda sale.order.create |
| Satış sifarişi | sale.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əbulu | stock.picking.create, əməliyyat növünə görə |
| Satınalma sifarişi | purchase.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_sequenceadı yazır və_compute_split_sequencemetodunu ç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ərires.config.settingsdaxilində ə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
document_number_prefix_yearqovluğunu əlavələrin axtarış yoluna yerləşdirin.- 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.
- 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.
- Ə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
- 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ə
AN26olduqda modul mövcudAN2026000001nömrəsinin sayğacını26000001kimi 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ı.
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.