İçereği Atla

Önek, yıl ve sayaçtan oluşan Odoo 19 belge numaraları – document_number_prefix_year modülü ve eşzamanlı oluşturmadaki tuzak

3 Kasım 2026 | Odoo 19 Community | Kendi geliştirmemiz
3 Kasım 2026 yazan
Önek, yıl ve sayaçtan oluşan Odoo 19 belge numaraları – document_number_prefix_year modülü ve eşzamanlı oluşturmadaki tuzak

Odoo 19 modülü document_number_prefix_year: Önek, yıl ve sayaçtan oluşan belge numaraları

“AN26000001”, “S00001”den daha fazla şey söyler: Bu bir tekliftir, 2026’dandır ve ilkidir. Birçok şirket, özellikle eski bir sistemden Odoo’ya geçenler, belge numaralarını tam olarak böyle korumak ister. Odoo’nun kendisi teklifleri, siparişleri ve irsaliyeleri kendi dizileriyle (S00001, WH/OUT/00001, P00001), faturaları ise yevmiye defteri öneki ve yılla (INV/2026/00001) numaralandırır.

Bunun için Document Numbering by Prefix and Year modülünü (document_number_prefix_year) Odoo 19 için yazdık. LGPL-3 lisansı altında özgür yazılım olarak GitHub’da bulunur:

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

Önceden dürüst bir değerlendirme: Modülü Biricon IT Services’te kullanmıyoruz. Tamamlanmış, belgelenmiş ve testlerle donatılmış olduğu ve başkalarına iş yükü kazandırabileceği için yayımlıyoruz. Kullanacak olanlar Sınırlar ve Testler bölümünü okumalıdır.

Numaralandırma şeması

Her numara üç bölümden oluşur: belge türüne göre bir önek, yıl ve sabit basamak sayılı bir sayaç. Öneki, yıl biçimini (26 veya 2026) ve basamak sayısını şirket başına Ayarlar → Belge numaralandırma altında ayarlarsınız.

AN26000001 belge numarasının önek, yıl ve sayaçtan oluşan yapısı, belge türleri tablosuyla birlikte

Teklifler, müşteri siparişleri, müşteri faturaları ve alacak dekontları, irsaliyeler, mal girişleri ve satın alma siparişleri ele alınır. Görseldeki önekler yalnızca örnektir: AN, AU, RE, GU, LI, WE, BE. Bir öneki boş bırakan, o belge türü için Odoo’nun standart numaralandırmasını korur. Yani modül, siz ayarlayana kadar hiçbir şey yapmaz.

Numaraların davranışı

  • Her yıl yeniden. Sayaç, yıl değişiminde yeniden 1’den başlar.
  • İçe aktarılan numaralardan sonra devam. Modül, uzunluğu fark etmeksizin aynı önek ve yıla ait mevcut en yüksek numarayı arar. Eski sistemden AN26119 veritabanında duruyorsa, bir sonraki teklif AN26000120 olur. Modülün sistem geçişleri için uygun olmasının nedeni budur: Eski belgeler özgün numaralarıyla içe aktarılır ve yeni belgeler kesintisiz devam eder.
  • Onayda yeni sipariş numarası. Onaylanan bir teklif, isteğe bağlı olarak sipariş dizisinden bir numara alır. Teklif numarası siparişteki Teklif numarası alanında korunur ve formda, listede ve aramada görünür.
  • Faturalar kayıt sırasında. Müşteri faturaları ve alacak dekontları numaralarını oluşturulurken değil, kaydedilirken alır. Silinen taslaklar bu nedenle boşluk bırakmaz. Yıl, Fatura tarihinden gelir: 30.12.2025 tarihli olup 2.1.2026’da kaydedilen bir fatura RE25… olarak adlandırılır.
  • Geri kalan her şey aynı kalır. Tedarikçi faturaları, ödemeler, yevmiye kayıtları ve üretim emirleri Odoo’nun standart dizilerini korur. Mevcut adlar, modülü yeniden kapatsanız bile asla yeniden yazılmaz.

Hassas kısım: Aynı anda iki kullanıcı

Kendi numara atama sisteminiz basit görünür: en yüksek numarayı bul, bir ekle. İki kullanıcı aynı anda bir teklif oluşturduğunda ise öyle değildir. İkisi de “en yüksek numara = 0” okur, ikisi de AN26000001 numarasını verir. Odoo kendi dizileri için veritabanı sequence’lerine sahiptir. Kendi yaptığınız bir numarada bu yoktur; ayrıca Odoo’da teklifler ve satın alma siparişleri için ad üzerinde benzersizlik kontrolü yoktur: Aynı numaralı iki belge sorunsuzca kaydedilir.

Akla gelen koruma bir kilittir. Modül, şirket, önek ve yıl başına, işlemin sonuna kadar süren bir veritabanı kilidi (PostgreSQL Advisory Lock) alır. İkinci kullanıcı, birincisi bitene kadar bekler. Ancak bu yeterli değildir ve bunu, üretim veritabanının bir kopyası üzerinde yaptığımız bir denemeyle bulduk:

İki kullanıcının zaman akışı: ikinci okuma olmadan ikisi de aynı numarayı verir, ikinci okumayla ikinci kullanıcı bir sonraki numarayı alır

Odoo, REPEATABLE READ yalıtım düzeyiyle çalışır. Bir işlemin gördüğü veritabanı durumu, ilk sorgusunda dondurulur. B kullanıcısı bu duruma, A bitmeden önce zaten sahiptir. B daha sonra kilidi bekler ve kilidi aldığında, eski durumuyla “en yüksek numara = 0” okur ve numarayı ikinci kez verir. Kilit sırayı düzenlemiştir, ancak bilgiyi güncellememiştir.

Çözüm, tüm onaylanmış satırları gören kendi, kısa ömürlü bir veritabanı bağlantısı üzerinden ikinci bir okumadır. İki değerden büyük olan kazanır. İlk okuma yine de gereklidir, çünkü yalnızca o, aynı işlemin zaten verdiği ancak henüz onaylamadığı numaraları bilir, örneğin birden fazla belgenin tek seferde içe aktarılması sırasında.

Bunu iki işlemle denedik; ikincisi, birincinin commit’inden kesin olarak önce durumunu çekti ve ardından kilidi bekledi. İkinci okuma olmadan iki sipariş de aynı numarayı aldı, ikinci okumayla ise 1 ve 2 numaralarını aldılar.

Değerlendirme için önemli: Bu deneme elle yapılan bir kontroldür. Otomatik testlerin parçası değildir, çünkü bunun için Odoo’nun test ortamının (test başına tek bir işlem) sağlamadığı iki gerçek veritabanı bağlantısı gerekir.

Teknik uygulama

BelgeBağlanma noktası
Teklifsale.order.create, ad boş, / veya New olduğunda
Müşteri siparişisale.order.action_confirm, standart onaydan önce
Fatura, alacak dekontuaccount.move._set_next_sequence, kaydedilirken çağrılır
İrsaliye, mal girişistock.picking.create, işlem türüne göre
Satın alma siparişipurchase.order.create
  • Sayaç. En yüksek numarayı, şirket başına (şirketsiz adlar dahil) düzenli bir ifade bulur (^<Stamm>([0-9]{1,15})$, kök maskelenir).
  • Faturalar. _set_next_sequence adı yazar ve _compute_split_sequence çağırır; böylece Odoo’nun dizi mantığı (önek, numara, yevmiye defterinin sonraki faturası için yıl tespiti) tutarlı kalır.
  • Ayarlar. document_number_* şirket alanları res.config.settings içine yansıtılır. Ayarlar, boşluk içeren veya sonunda rakam bulunan önekleri reddeder.
  • Çeviri. Almanca çeviri dahildir.

Kurulum ve yapılandırma

  1. document_number_prefix_year klasörünü addons yoluna koyun.
  2. Uygulama listesini güncelleyin, modülü kurun. Ön koşullar Satış, Satın alma, Envanter ve Muhasebe’dir.
  3. Ayarlar → Belge numaralandırma altında önekleri, yıl biçimini ve basamak sayısını girin.
  4. Önce bir kopyada deneyin. Bir belgenin numarası sonradan otomatik olarak geri alınamaz ve faturalarda numaraya saklama ve denetim yükümlülüğü bağlıdır.

Sınırlar

Modülün altı sınırı: sepetler, yıl biçimi, şirket başına tek seri, önek kuralları, az test, yalnızca belirtilen belgeler

  • Teklifler oluşturulurken numaralandırılır. Silinen veya iptal edilen teklifler boşluk bırakır. Aynısı başka bir modülün oluşturduğu her müşteri siparişi için de geçerlidir: Web mağazasının sepetleri (website_sale) Teklif durumundaki siparişlerdir ve her biri bir numara tüketir. Yalnızca faturalar ve alacak dekontları boşluksuzdur, çünkü kaydedilirken numaralandırılırlar.
  • Yıl biçimini işletme sürerken değiştirmeyin. AN26 köküyle modül, mevcut bir AN2026000001 numarasını 26000001 sayacı olarak okur. Biçimi ilk belgeden önce belirleyin.
  • Sayaç en fazla 15 basamak. Kökten sonra gelen daha uzun rakam dizileri, en yüksek numara aranırken yok sayılır.
  • Yevmiye defteri veya depo başına ayrı seri yok. Sayaç şirket, önek ve yıl başınadır. Birden fazla satış yevmiye defteri fatura sayacını paylaşır.
  • Önekler boşluk içeremez ve rakamla bitemez; aksi hâlde önek, yıl ve sayaç artık ayrılamaz.
  • Yalnızca belirtilen belge türleri ele alınır.

Testler

Modül on otomatik test ile birlikte gelir. Şunları kontrol ederler:

  • Teklif ve onay: teklif ve sipariş numarası, teklif numarasının korunması
  • İçe aktarılan bir numaradan sonra saymaya devam (AN26119 → AN26000120)
  • mevcut belgelerin sonradan yeniden numaralandırılmaması
  • Fatura, alacak dekontu ve fatura tarihine göre yıl değişimi
  • Satın alma siparişi ve irsaliyeler
  • boş önek: Odoo’nun standart numarası kalır
  • dört haneli yıl
  • özel karakterli önek
  • tek işlemde birden fazla numara
  • çok uzun rakam dizileri yok sayılır

Çağrı:

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

Testler sıradan işlemlerle çalışır. İki kullanıcının aynı anda oluşturması durumundaki davranış bunların arasında değildir, yukarıda anlatıldığı gibi bir veritabanı kopyasında elle denenmiştir. Modülü çok sayıda eşzamanlı kullanıcının bulunduğu bir sistemde kullanacak olanlar, bu denemeyi kendi veritabanlarında tekrarlamalıdır.

Fatura numarasıyla ilgili hukuki not

Faturalar, UStG § 11 uyarınca, faturanın belirlenmesi için bir kez verilen ardışık bir numara taşımalıdır. Modül, faturaları kaydedilirken ve önek ile yıl başına kendi sayacıyla numaralandırır; bu da uyumludur. Somut ayarınızın (birden fazla yevmiye defteri, kendi önekli alacak dekontları, yıl değişimi) mali müşavirinizin gerekliliklerini karşılayıp karşılamadığını onunla netleştirmelisiniz. Bu yazı hukuki danışmanlık değildir.

Sık sorulan sorular

Neden Odoo dizilerini basitçe uyarlamıyoruz?

Faturalar için bu, yevmiye defteri önekiyle mümkündür. Ancak teklifler, siparişler, irsaliyeler ve satın alma siparişleri için yıl değişimli ortak bir önek, yıl ve sayaç şeması yoktur ve sayaç içe aktarılan eski numaraları tanımaz. Modül tam burada devreye girer.

Mevcut numaralandırmanın üzerine yazılır mı?

Hayır. Modül yalnızca yeni numaralar verir. Önceden kaydedilmiş adlar, kapatma sırasında bile değişmeden kalır.

Modülü nasıl tekrar kapatırım?

Belge türünün önekini boşaltın. O zaman Odoo onu yine kendisi numaralandırır. Kaldırmak da verilmiş numaraları değiştirmez.

Siz bunu kendiniz kullanıyor musunuz?

Hayır. Bizde Odoo’nun standart numaraları çalışıyor. Modülü otomatik testler ve anlatılan elle deneme ile denedik, ancak çok sayıda kullanıcının bulunduğu canlı bir işletmede değil.

Odoo 17 veya 18 ile çalışır mı?

Yalnızca Odoo 19.0 Community ile test ettik. Diğer sürümler için uyabilir ya da uymayabilir, denemedik.

Hangi lisans altındadır?

LGPL-3 altında. Hatalar ve iyileştirmeler şu adreste bir issue olarak memnuniyetle karşılanır: GitHub deposu .

Biricon IT Services'ten destek

Küçük ve orta ölçekli işletmeler için Odoo kurulumlarına bakıyoruz: kurulumdan özelleştirmelere ve geçişlere, süregelen işletime kadar. Geçişte belge numaralarınızı korumak, numara atamasını yük altında test ettirmek veya bunun gibi bir modülü üretim ortamınıza güvenle almak istiyorsanız, memnuniyetle yardımcı oluruz. Diğer kendi geliştirmelerimiz: Avusturyalı müşteriler için ticaret sicili ve adres doğrulama, Tekliflerde bölüm olarak ürün setleri ve Web RBL, saldırı trafiği için engelleme listesi.

Hemen iletişime geçin

Durum: 3 Kasım 2026. Modül sürümü 19.0.1.0.0. Örneklerdeki ve görsellerdeki tüm numaralar serbestçe seçilmiştir.