AIFA AKADEMI · Kurumsal Wiki
4.310 makale
Ana sayfa Kurumsal Wiki › Kalite ve teknik borç › Items › TD-02

`Max(...)+1` ile numara üretimi (yarış koşulu)

TECH_DEBTERPGOLD_COREACTIVEVERY_HIGHSOURCE_IMPLEMENTED
Kanonik kaynak: markdown · bu sayfa üretilmiş görünümdür

Etki: VB · Öncelik: P1 · Doğrulama: VERIFIED

Kaynak: KB-docs quality/technical-debt.md (tam kod taraması, 2026-09-10). Alanlar: Risk · Evidence · Impact · Recommendation · Priority — KB-docs metninde gömülü; aşağıda korunmuştur.

  • Nerede: ERPPRO/Class/Ext/Cari.IslemEx.vb:256-260 (GetNewFisNo: Select Max(FisNo) From Cari.Islemler + 1), :261-267 (GetNewSiraNo: Cari.GetNewSiraNo(...) + 1); ERPPRO/Class/Dao/Stok.Model.vb:248, Stok.Pirlanta.vb:469, Class/Ext/Siparis.ModelEx.vb:52, Siparis.ParcaEx.vb:56 (GetLastKodu: Select Max(Kodu) … Where Left(Kodu, n)=…); ERPPRO/Class/Dao/Dov.Fatura.vb:373 (GetInvoiceNumber: Select Max(FatNo) … Where fATSeri=…). Çağrı: Cari.Islem.Save Cari.Islem.vb:507.
  • Etki: VB — iki istemci aynı anda kaydederse aynı fiş/kod/fatura numarası üretilir; fiş numarası evrensel tek sayaç (ERPGOLD-mimari-referans.md §10 soru 6, AS-DOCUMENTED) olduğundan çok kullanıcılı/web senaryosunda kesin çakışma.
  • Kanıt: Kilit/UPDLOCK/SEQUENCE yok; okuma ve yazma ayrı bağlantılarda (TD-01).
  • Öneri: SQL SEQUENCE veya Sistem.FaturaSiraNo benzeri sayaç tablosunda UPDATE … OUTPUT ile atomik artırma; fatura serisi bazında ayrı sayaç; benzersiz indeks ile ikinci koruma.
  • Öncelik: P1.