Kod ve veritabanı analizinde bulunan, henüz gözlemlenmemiş 140 hata noktası (Gözlemlendi: HAYIR).
Künye (front-matter) · EKB-POTANSIYEL · reality [SUPPORT_OBSERVED, SOURCE_IMPLEMENTED, GENERATED_PROPOSAL]
| id | EKB-POTANSIYEL |
| title | Potansiyel Hatalar |
| entity_type | ERROR_KB |
| module | MOD-KALITE |
| audience | [SUPPORT, DEVELOPER, QA] |
| confidentiality | AIFASOFT_INTERNAL |
| product_scope | ERPGOLD_CORE |
| customer_scope | ALL |
| reality | [SUPPORT_OBSERVED, SOURCE_IMPLEMENTED, GENERATED_PROPOSAL] |
| lifecycle | ACTIVE |
| confidence | MEDIUM |
| version_from | VERSION_UNKNOWN |
| version_to | - |
| created_at | 2026-09-13 |
| last_verified | 2026-09-13 |
| source_hashes | [] |
| sources | [DOCUMENT:ERPGOLD_ERROR_MASTER.xlsx, DOCUMENT:ERPGOLD_HATA_KOK_NEDEN_BILGI_BANKASI.md, SRC-TKT-ERP, SOURCE_CODE:ERPPRO, DB_CATALOG:INST-ERPGOLDV2] |
| aliases | [Potansiyel Hatalar] |
| tags | [error-kb] |
| wiki_version | v1.5 |
| source_package | ERPGOLD_HATA_BILGI_BANKASI_v1 / Wiki_23_Hata_Bilgi_Bankasi |
| severity | S1–S4 (kayıt bazında) |
| runtime_status | NOT_REPRODUCED — statik analiz; Gözlemlendi: HAYIR |
Potansiyel hatalar (140). Kod ve veritabanı analizinde bulunan, henüz gözlemlenmemiş hata noktaları (transaction eksikliği, eksik nesne/kolon, guard yokluğu, konfigürasyon). Etiket: POTANSİYEL · her kayıtta Gözlemlendi: HAYIR. Müşteriye "bilinen hata" olarak sunulmaz; önce yeniden üretilir.
Özet
| Kayıt | 140 |
| Gözlemlendi: EVET / HAYIR | 0 / 140 |
| Severity | S1 14 · S2 54 · S3 59 · S4 13 |
| Çözümü bilinen | 0 |
| Durum | AÇIK 140 |
Modül dağılımı
| Modül | Kayıt | S1 | S2 | S3 | S4 |
|---|---|---|---|---|---|
| MOD-VERİTABANI | 70 | 5 | 16 | 40 | 9 |
| MOD-KOD-KALİTESİ | 49 | 9 | 28 | 12 | 0 |
| MOD-EFATURA | 8 | 0 | 8 | 0 | 0 |
| MOD-CARI | 5 | 0 | 0 | 3 | 2 |
| MOD-SISTEM | 4 | 0 | 2 | 0 | 2 |
| MOD-RAPOR | 3 | 0 | 0 | 3 | 0 |
| MOD-SIPARIS | 1 | 0 | 0 | 1 | 0 |
Hata kategorisi dağılımı
| Kategori | Kayıt |
|---|---|
| E02 — SQL Server Hatası | 59 |
| E01 — Uygulama / Kod Exception | 21 |
| E06 — Algoritma Hatası | 14 |
| E07 — Finansal Hesaplama Hatası | 12 |
| E11 — Kullanıcı / Yetki Hatası | 6 |
| E09 — Konfigürasyon Hatası | 6 |
| E05 — Transaction Hatası | 5 |
| E04 — Trigger / Dependency Hatası | 4 |
| E08 — Yuvarlama / Hassasiyet Hatası | 3 |
| E17 — Eski Veri / Legacy Problemi | 2 |
| E15 — Duplicate / Çift İşlem | 2 |
| E19 — Raporlama Hatası | 2 |
| E03 — Veri Bütünlüğü Hatası | 2 |
| E14 — UI / İş Akışı Hatası | 1 |
| E13 — Performans / Timeout / Deadlock | 1 |
Kayıtlar
POTANSİYEL ERR-POT-001 — TD-01 — Çok adımlı işlemlerde transaction yok S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E05 — Transaction Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — fatura başlığı yazılıp `FaturaYaz` çalışmayabilir; işlem yazılıp `RsAktar` yapılmayabilir; karşı hesap kaydı düşerse bakiye hareketi tek taraflı kalır; kopyalama yarım kalır. |
| Kod dosyası | `ERPPRO/Class/Dao/Cari.Fatura.vb:229-230,313-317`; `ERPPRO/Class/Dao/Islem/Cari.Islem.vb:695-696,989`; `ERPPRO/Controls/Islem Ekranı/Ekran/iFormBase.vb:218-241,242-264`; `ERPPRO/Class/Module/Devir.vb:76-87,128`; `ERPPRO/Class/Ext/Siparis.ReceteEx.vb:61-68`; `Siparis.SiparisEx.vb:47-54`; `ERPPRO/Clas |
| Kök neden | Çok adımlı işlemlerde transaction yok — VB — fatura başlığı yazılıp `FaturaYaz` çalışmayabilir; işlem yazılıp `RsAktar` yapılmayabilir; karşı hesap kaydı düşerse bakiye hareketi tek taraflı kalır; kopyalama yarım kalır. |
| Neden zinciri | Teknik olay: VB — fatura başlığı yazılıp `FaturaYaz` çalışmayabilir; işlem yazılıp `RsAktar` yapılmayabilir; karşı hesap kaydı düşerse bakiye hareketi tek taraflı ↓ Kök neden: Çok adımlı işlemlerde transaction yok ↓ Kanıt: `grep -rn "SqlTransaction|TransactionScope|BeginTransaction|BEGIN TRAN"` → yalnız `ERPPRO/ERPGOLDV2DataSet.Designer.vb:1 |
| Etkilenen veri | `ERPPRO/Class/Dao/Cari.Fatura.vb:229-230,313-317`; `ERPPRO/Class/Dao/Islem/Cari.Islem.vb:695-696,989`; `ERPPRO/Controls/Islem Ekranı/Ekran/iFormBase.vb:218-241,242-264`; `ERPPRO/Class/Module/Devir.vb:76-87,128`; `ERPPRO/Class/Ext/Siparis.ReceteEx.vb:61-68`; `Siparis.SiparisEx.vb:47-54`; `ERPPRO/Clas |
| Olasılık / etki / güven | YÜKSEK / S1 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `Save` zincirlerini tek `SqlConnection` + `SqlTransaction` (veya `TransactionScope`) altında toplayan bir "birim iş" sarmalayıcısı; SP'leri (`FaturaYaz`, `RsAktar`) aynı transaction'da çağırmak; `SendTo` başarısızsa ilk kaydı geri almak. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Dao/Cari.Fatura.vb:229-230,313-317`; `ERPPRO/Class/Dao/Islem/Cari.Islem.vb:695-696,989`; `ERPPRO/Controls/Islem Ekranı/Ekran/iFormBase.vb:218-241, |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-01 · öncelik P1 · kanıt: `grep -rn "SqlTransaction|TransactionScope|BeginTransaction|BEGIN TRAN"` → yalnız `ERPPRO/ERPGOLDV2DataSet.Designer.vb:1588-1992` (üretilmiş, çağıranı yok); scan `transaction=True` yalnız `TableAdapte |
| Wiki bağlantıları | TD-01 |
POTANSİYEL ERR-POT-002 — TD-02 — `Max(...)+1` ile numara üretimi (yarış koşulu) S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E17 — Eski Veri / Legacy Problemi |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | 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. |
| Kod dosyası | `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`: |
| Kök neden | `Max(...)+1` ile numara üretimi (yarış koşulu) — 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. |
| Neden zinciri | Teknik olay: VB — iki istemci aynı anda kaydederse aynı fiş/kod/fatura numarası üretilir; fiş numarası evrensel tek sayaç (`ERPGOLD-mimari-referans.md §10 soru 6`, ↓ Kök neden: `Max(...)+1` ile numara üretimi (yarış koşulu) ↓ Kanıt: Kilit/`UPDLOCK`/`SEQUENCE` yok; okuma ve yazma ayrı bağlantılarda (TD-01). |
| Etkilenen veri | `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`: |
| Olasılık / etki / güven | YÜKSEK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): 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. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Ext/Cari.IslemEx.vb:256-260` (`GetNewFisNo`: `Select Max(FisNo) From Cari.Islemler` + 1), `:261-267` (`GetNewSiraNo`: `Cari.GetNewSiraNo(...)` + 1 |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-02 · öncelik P1 · kanıt: Kilit/`UPDLOCK`/`SEQUENCE` yok; okuma ve yazma ayrı bağlantılarda (TD-01). |
| İlişkili kayıtlar | ERR-POT-008, ERR-SIL-001, ERR-SIL-002, ERR-SIL-003, ERR-SIL-028, ERR-SIL-056, ERR-SIL-059 |
| Wiki bağlantıları | TD-02 · TD-01 |
POTANSİYEL ERR-POT-003 — TD-03 — `Cari.AcceptTransaction` tetikleyicisinde cursor sızıntısı S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E05 — Transaction Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB, PF — cursor `GLOBAL` kapsamda ise bağlantı havuzuna dönen bağlantıda "A cursor with the name 'IslemCursor' already exists" ile sonraki tüm işlemler başarısız olur (AS-DOCUMENTED `§9-4`; kod yolu VERIFIED). |
| Kod dosyası | DB `Cari.AcceptTransaction` (TR, 29.862 karakter) — `DECLARE IslemCursor CURSOR` satır 72, `OPEN` 79; `RAISERROR … ROLLBACK … RETURN` satır 94-97 (şube pasif) ve 102-105 (e-döviz faturası gönderilmiş) — arada `CLOSE/DEALLOCATE` yok; normal kapanış 566-567 (`kb_src/db/modules_all.json`). |
| Kök neden | `Cari.AcceptTransaction` tetikleyicisinde cursor sızıntısı — VB, PF — cursor `GLOBAL` kapsamda ise bağlantı havuzuna dönen bağlantıda "A cursor with the name 'IslemCursor' already exists" ile sonraki tüm işlemler başarısız olur (AS-DOCUMENTED `§9-4`; kod yolu VERIFIED). |
| Neden zinciri | Teknik olay: VB, PF — cursor `GLOBAL` kapsamda ise bağlantı havuzuna dönen bağlantıda "A cursor with the name 'IslemCursor' already exists" ile sonraki tüm işlemle ↓ Kök neden: `Cari.AcceptTransaction` tetikleyicisinde cursor sızıntısı ↓ Kanıt: Yukarıdaki satırlar; demo kopyasında tetikleyici **DISABLED** (`erpgoldv2-kod-katmani-bulgulari.md §2`) — üretimde açık |
| Etkilenen veri | DB `Cari.AcceptTransaction` (TR, 29.862 karakter) — `DECLARE IslemCursor CURSOR` satır 72, `OPEN` 79; `RAISERROR … ROLLBACK … RETURN` satır 94-97 (şube pasif) ve 102-105 (e-döviz faturası gönderilmiş) — arada `CLOSE/DEALLOCATE` yok; normal kapanış 566-567 (`kb_src/db/modules_all.json`). |
| Olasılık / etki / güven | YÜKSEK / S1 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Her hata dalında `CLOSE/DEALLOCATE` veya `DECLARE … CURSOR LOCAL`; uzun vadede cursor'suz küme temelli kural motoru. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: DB `Cari.AcceptTransaction` (TR, 29.862 karakter) — `DECLARE IslemCursor CURSOR` satır 72, `OPEN` 79; `RAISERROR … ROLLBACK … RETURN` satır 94-97 (şube pasif) v |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-03 · öncelik P1 · kanıt: Yukarıdaki satırlar; demo kopyasında tetikleyici **DISABLED** (`erpgoldv2-kod-katmani-bulgulari.md §2`) — üretimde açık olup olmadığı `[GAP]`. |
| İlişkili kayıtlar | ERR-OBS-086, ERR-POT-004, ERR-POT-030, ERR-POT-116, ERR-POT-134, ERR-POT-135, ERR-SIL-033, ERR-SIL-046 |
| Wiki bağlantıları | TD-03 |
POTANSİYEL ERR-POT-004 — TD-04 — Tetikleyicide `ROLLBACK` sonrası `RETURN` yok S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E04 — Trigger / Dependency Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — `ROLLBACK` sonrası kod akışı devam eder; sonraki `INSERT/UPDATE`'ler transaction dışında (autocommit) çalışabilir. |
| Kod dosyası | DB `Cari.AcceptTransaction` satır 119-122 (eksik evrak), 182-184 (şube/kasa/hesap seçilmedi), 229-231 (takoza ait işlem var), 243-245 (takoz stokta yok). |
| Kök neden | Tetikleyicide `ROLLBACK` sonrası `RETURN` yok — VB — `ROLLBACK` sonrası kod akışı devam eder; sonraki `INSERT/UPDATE`'ler transaction dışında (autocommit) çalışabilir. |
| Neden zinciri | Teknik olay: VB — `ROLLBACK` sonrası kod akışı devam eder; sonraki `INSERT/UPDATE`'ler transaction dışında (autocommit) çalışabilir. ↓ Kök neden: Tetikleyicide `ROLLBACK` sonrası `RETURN` yok ↓ Kanıt: `kb_src/db/modules_all.json` içindeki tanım; `ROLLBACK` 13, `RETURN` 5. |
| Etkilenen veri | DB `Cari.AcceptTransaction` satır 119-122 (eksik evrak), 182-184 (şube/kasa/hesap seçilmedi), 229-231 (takoza ait işlem var), 243-245 (takoz stokta yok). |
| Olasılık / etki / güven | YÜKSEK / S1 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Her `ROLLBACK`'ten sonra `RETURN`; `THROW` kullanımı. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: DB `Cari.AcceptTransaction` satır 119-122 (eksik evrak), 182-184 (şube/kasa/hesap seçilmedi), 229-231 (takoza ait işlem var), 243-245 (takoz stokta yok). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-04 · öncelik P1 · kanıt: `kb_src/db/modules_all.json` içindeki tanım; `ROLLBACK` 13, `RETURN` 5. |
| İlişkili kayıtlar | ERR-POT-003, ERR-POT-134, ERR-SIL-033 |
| Wiki bağlantıları | TD-04 |
POTANSİYEL ERR-POT-005 — TD-05 — Koda gömülü bağlantı dizeleri, `sa` hesabı ve parolalar S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-053 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E11 — Kullanıcı / Yetki Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-053 RDP (uzak masaüstü) bağlantı / giriş / parola sorunu |
| Teknik belirti | GV — derlenmiş EXE'den parola okunabilir; uygulama üretimde `sa` ile bağlanıyorsa TD-09/TD-10'daki her açık tam yetkiyle sonuçlanır. |
| Kod dosyası | `ERPPRO/Class/Module/InternalDb.vb:11` (`ConnStr` varsayılanı: sunucu, `sa`, düz metin parola); `ERPPRO/ERPGOLDV2DataSet.Designer.vb:1730` (sunucu IP'si + `sa`); `ERPPRO/app.config:10-12` (Integrated Security, sunucu adı); `ERPPRO/Class/Module/Program.vb:201-210` (EO.WebBrowser lisansı ve `AifaDev.C |
| Kök neden | Koda gömülü bağlantı dizeleri, `sa` hesabı ve parolalar — GV — derlenmiş EXE'den parola okunabilir; uygulama üretimde `sa` ile bağlanıyorsa TD-09/TD-10'daki her açık tam yetkiyle sonuçlanır. |
| Neden zinciri | Teknik olay: GV — derlenmiş EXE'den parola okunabilir; uygulama üretimde `sa` ile bağlanıyorsa TD-09/TD-10'daki her açık tam yetkiyle sonuçlanır. ↓ Kök neden: Koda gömülü bağlantı dizeleri, `sa` hesabı ve parolalar ↓ Kanıt: satırlar yukarıda; `Program.ConnectDatabase` (`Program.vb:78-87`) çalışma zamanında değeri değiştirse de sabit binaride |
| Etkilenen veri | `ERPPRO/Class/Module/InternalDb.vb:11` (`ConnStr` varsayılanı: sunucu, `sa`, düz metin parola); `ERPPRO/ERPGOLDV2DataSet.Designer.vb:1730` (sunucu IP'si + `sa`); `ERPPRO/app.config:10-12` (Integrated Security, sunucu adı); `ERPPRO/Class/Module/Program.vb:201-210` (EO.WebBrowser lisansı ve `AifaDev.C |
| Olasılık / etki / güven | YÜKSEK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Sabit değerleri kaldırmak; Windows kimlik doğrulaması veya en az yetkili SQL hesabı; lisans anahtarlarını yapılandırma/gizli depo üzerinden yüklemek; mevcut parolaları döndürmek. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Module/InternalDb.vb:11` (`ConnStr` varsayılanı: sunucu, `sa`, düz metin parola); `ERPPRO/ERPGOLDV2DataSet.Designer.vb:1730` (sunucu IP'si + `sa`) |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-05 · öncelik P1 · kanıt: satırlar yukarıda; `Program.ConnectDatabase` (`Program.vb:78-87`) çalışma zamanında değeri değiştirse de sabit binaride kalır. |
| İlişkili kayıtlar | ERR-POT-013, ERR-POT-014 |
| Wiki bağlantıları | TD-09 · TD-10 · TD-05 |
POTANSİYEL ERR-POT-006 — TD-06 — Yapılandırma dosyası şifrelemesi zayıf S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E11 — Kullanıcı / Yetki Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | GV — `Config.cfg` içindeki bağlantı dizesi (SQL parolası dahil) uygulama binarisine sahip herkes tarafından çözülebilir. |
| Kod dosyası | `ERPPRO/Configuration/ConfigurationForm.vb:301` (okuma), `:325` (yazma), `:331-365` (`AES_Encrypt/AES_Decrypt`: Rijndael **ECB**, MD5 anahtar türetme, **koda gömülü sabit parola**). |
| Kök neden | Yapılandırma dosyası şifrelemesi zayıf — GV — `Config.cfg` içindeki bağlantı dizesi (SQL parolası dahil) uygulama binarisine sahip herkes tarafından çözülebilir. |
| Neden zinciri | Teknik olay: GV — `Config.cfg` içindeki bağlantı dizesi (SQL parolası dahil) uygulama binarisine sahip herkes tarafından çözülebilir. ↓ Kök neden: Yapılandırma dosyası şifrelemesi zayıf ↓ Kanıt: satırlar yukarıda. |
| Etkilenen veri | `ERPPRO/Configuration/ConfigurationForm.vb:301` (okuma), `:325` (yazma), `:331-365` (`AES_Encrypt/AES_Decrypt`: Rijndael **ECB**, MD5 anahtar türetme, **koda gömülü sabit parola**). |
| Olasılık / etki / güven | YÜKSEK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): DPAPI (`ProtectedData`, kullanıcı/makine kapsamı) veya Windows kimlik doğrulaması; ECB yerine kimlik doğrulamalı mod. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Configuration/ConfigurationForm.vb:301` (okuma), `:325` (yazma), `:331-365` (`AES_Encrypt/AES_Decrypt`: Rijndael **ECB**, MD5 anahtar türetme, **koda gö |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-06 · öncelik P1 · kanıt: satırlar yukarıda. |
| Wiki bağlantıları | TD-06 |
POTANSİYEL ERR-POT-007 — TD-07 — Parolalar geri döndürülebilir şifreli S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E11 — Kullanıcı / Yetki Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | GV — DB erişimi olan herkes tüm parolaları çözebilir; parolalar süreç belleğinde düz metin. |
| Kod dosyası | `ERPPRO/Class/Module/Crypto.vb:6-48` (sabit parola, Rijndael CBC — değer kopyalanmadı); `ERPPRO/Class/Dao/Sistem.Users.vb:43,144,188` (kullanıcı parolası `Crypto.Decrypt` ile yükleniyor, `Encrypt` ile yazılıyor); `Cari.Kart.vb:36,281,437` (kart şifresi); `Genel.Dosya.vb:134,200`; `Cari.View.Hesaplis |
| Kök neden | Parolalar geri döndürülebilir şifreli — GV — DB erişimi olan herkes tüm parolaları çözebilir; parolalar süreç belleğinde düz metin. |
| Neden zinciri | Teknik olay: GV — DB erişimi olan herkes tüm parolaları çözebilir; parolalar süreç belleğinde düz metin. ↓ Kök neden: Parolalar geri döndürülebilir şifreli ↓ Kanıt: satırlar yukarıda (mimari referans §9-20 ile uyumlu). |
| Etkilenen veri | `ERPPRO/Class/Module/Crypto.vb:6-48` (sabit parola, Rijndael CBC — değer kopyalanmadı); `ERPPRO/Class/Dao/Sistem.Users.vb:43,144,188` (kullanıcı parolası `Crypto.Decrypt` ile yükleniyor, `Encrypt` ile yazılıyor); `Cari.Kart.vb:36,281,437` (kart şifresi); `Genel.Dosya.vb:134,200`; `Cari.View.Hesaplis |
| Olasılık / etki / güven | YÜKSEK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): PBKDF2/bcrypt/Argon2 ile tek yönlü hash + tuz; kart PIN/şifresi için ayrı doğrulama servisi; önbelleğe parola kolonu yüklememek. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Module/Crypto.vb:6-48` (sabit parola, Rijndael CBC — değer kopyalanmadı); `ERPPRO/Class/Dao/Sistem.Users.vb:43,144,188` (kullanıcı parolası `Crypt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-07 · öncelik P1 · kanıt: satırlar yukarıda (mimari referans §9-20 ile uyumlu). |
| Wiki bağlantıları | TD-07 |
POTANSİYEL ERR-POT-008 — TD-08 — İşlem ekranında sabit yönetici parolası S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E11 — Kullanıcı / Yetki Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | GV — kaynak/binari üzerinden parola öğrenen herkes fişleri iptal edebilir; değiştirilemez, denetlenemez. |
| Kod dosyası | `ERPPRO/Controls/Islem Ekranı/Base Control/iScreen.vb:722` — `PasswordBox.ShowDialog(Me, "", "")`; doğrulanınca `:723` `Update Cari.Islemler Set IsDeleted='True' Where FisNo=… and KasaId=…` (fiş toplu iptali). Karşılaştırma için `:428` aynı dialog `.Password` alanını kullanır (dinamik). |
| Kök neden | İşlem ekranında sabit yönetici parolası — GV — kaynak/binari üzerinden parola öğrenen herkes fişleri iptal edebilir; değiştirilemez, denetlenemez. |
| Neden zinciri | Teknik olay: GV — kaynak/binari üzerinden parola öğrenen herkes fişleri iptal edebilir; değiştirilemez, denetlenemez. ↓ Kök neden: İşlem ekranında sabit yönetici parolası ↓ Kanıt: satırlar yukarıda (değer kopyalanmadı). |
| Etkilenen veri | `ERPPRO/Controls/Islem Ekranı/Base Control/iScreen.vb:722` — `PasswordBox.ShowDialog(Me, "", "")`; doğrulanınca `:723` `Update Cari.Islemler Set IsDeleted='True' Where FisNo=… and KasaId=…` (fiş toplu iptali). Karşılaştırma için `:428` aynı dialog `.Password` alanını kullanır (dinamik). |
| Olasılık / etki / güven | YÜKSEK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Yetki grubu bazlı izin (`Usergroup`), parola yerine kullanıcı yeniden kimlik doğrulaması; işlem günlüğü. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Controls/Islem Ekranı/Base Control/iScreen.vb:722` — `PasswordBox.ShowDialog(Me, "", "")`; doğrulanınca `:723` `Update Cari.Islemler Set IsDeleted='True |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-08 · öncelik P1 · kanıt: satırlar yukarıda (değer kopyalanmadı). |
| İlişkili kayıtlar | ERR-POT-002, ERR-SIL-001, ERR-SIL-002, ERR-SIL-003, ERR-SIL-028, ERR-SIL-056, ERR-SIL-059 |
| Wiki bağlantıları | TD-08 |
POTANSİYEL ERR-POT-009 — TD-09 — SQL metni birleştirme, string kullanıcı girdileri S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-013 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E11 — Kullanıcı / Yetki Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-013 Kullanıcı tanımlama / düzenleme / isim değişikliği / kullanıcı açma |
| Teknik belirti | GV, VB — `'` içeren girdi sorguyu bozar; bilinçli girdi `sa` yetkisiyle (TD-05) veri değiştirebilir. |
| Kod dosyası | 1010/1468 ifade, 311 sınıf (scan). String girdi örnekleri: `ERPPRO/Form/Doviz/FrmDovFaturaEkranı.vb:239-243` (`InputBox` → `RefNo`), `Controls/Islem Ekranı/Ekran/Fatura Helper/FindTaxInfo.vb:25`, `FrmFaturaBas.vb:140` (`SearchText`), `Controls/Editor/CmbListLayout.vb:110,116` (`Ad`), `Class/Dao/Pers |
| Kök neden | SQL metni birleştirme, string kullanıcı girdileri — GV, VB — `'` içeren girdi sorguyu bozar; bilinçli girdi `sa` yetkisiyle (TD-05) veri değiştirebilir. |
| Neden zinciri | Teknik olay: GV, VB — `'` içeren girdi sorguyu bozar; bilinçli girdi `sa` yetkisiyle (TD-05) veri değiştirebilir. ↓ Kök neden: SQL metni birleştirme, string kullanıcı girdileri ↓ Kanıt: database-access §8.1; mimari referans §9-21 "~435 yer" → scan ile 1010 ifade / 568 tırnak-içi birleştirme satırı (sayım |
| Etkilenen veri | 1010/1468 ifade, 311 sınıf (scan). String girdi örnekleri: `ERPPRO/Form/Doviz/FrmDovFaturaEkranı.vb:239-243` (`InputBox` → `RefNo`), `Controls/Islem Ekranı/Ekran/Fatura Helper/FindTaxInfo.vb:25`, `FrmFaturaBas.vb:140` (`SearchText`), `Controls/Editor/CmbListLayout.vb:110,116` (`Ad`), `Class/Dao/Pers |
| Olasılık / etki / güven | YÜKSEK / S1 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Tüm sorgular `SqlParameter`; tablo/alan adı gerektiren genel yardımcılar (`FindRecord`) için beyaz liste; grid filtreleri için `SqlParameter` üreten filtre çevirici. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: 1010/1468 ifade, 311 sınıf (scan). String girdi örnekleri: `ERPPRO/Form/Doviz/FrmDovFaturaEkranı.vb:239-243` (`InputBox` → `RefNo`), `Controls/Islem Ekranı/Ekra |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-09 · öncelik P1 · kanıt: database-access §8.1; mimari referans §9-21 "~435 yer" → scan ile 1010 ifade / 568 tırnak-içi birleştirme satırı (sayım tabanı farkı). |
| İlişkili kayıtlar | ERR-SIL-057, ERR-SIL-059 |
| Wiki bağlantıları | TD-05 · TD-09 |
POTANSİYEL ERR-POT-010 — TD-10 — Serbest SQL editörü ve bağlantı dizesi S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E11 — Kullanıcı / Yetki Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | GV — uygulama içinden `sa` ile rastgele SQL; menü yetkisine bağlı `[GAP: hangi kullanıcı grubuna açık olduğu Usergroup verisinden doğrulanmadı]`. |
| Kod dosyası | `ERPPRO/Form/Tanımlamalar/Sistem/FrmSqlEditor.vb:77-85` (`RadioGroup1` → `InternalDb.ConnStr` veya `TxtConnectionString.Text`), `:86-…` (`TestConnection`, sorgu çalıştırma). |
| Kök neden | Serbest SQL editörü ve bağlantı dizesi — GV — uygulama içinden `sa` ile rastgele SQL; menü yetkisine bağlı `[GAP: hangi kullanıcı grubuna açık olduğu Usergroup verisinden doğrulanmadı]`. |
| Neden zinciri | Teknik olay: GV — uygulama içinden `sa` ile rastgele SQL; menü yetkisine bağlı `[GAP: hangi kullanıcı grubuna açık olduğu Usergroup verisinden doğrulanmadı]`. ↓ Kök neden: Serbest SQL editörü ve bağlantı dizesi ↓ Kanıt: satırlar yukarıda. |
| Etkilenen veri | `ERPPRO/Form/Tanımlamalar/Sistem/FrmSqlEditor.vb:77-85` (`RadioGroup1` → `InternalDb.ConnStr` veya `TxtConnectionString.Text`), `:86-…` (`TestConnection`, sorgu çalıştırma). |
| Olasılık / etki / güven | YÜKSEK / S1 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Üretim derlemesinden çıkarmak veya salt-okunur, yetki ve günlük kaydı ile sınırlamak. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Form/Tanımlamalar/Sistem/FrmSqlEditor.vb:77-85` (`RadioGroup1` → `InternalDb.ConnStr` veya `TxtConnectionString.Text`), `:86-…` (`TestConnection`, sorgu |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-10 · öncelik P1 · kanıt: satırlar yukarıda. |
| Wiki bağlantıları | TD-10 |
POTANSİYEL ERR-POT-011 — TD-11 — Veritabanındaki kaynak kodun çalışma zamanında derlenmesi S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | GV, BK — tabloya yazabilen herkes uygulama sürecinde kod çalıştırır; derlenen sınıflar statik analiz/test dışı; ayrı bir ORM dünyası (TD-17). |
| Kod dosyası | `ERPPRO/Class/Dao/Dynamic/Class/Compiler.vb:57-74` (`VBCodeProvider.CompileAssemblyFromSource`), `Class/Base/DynamicForm.vb:300-318` (`AifaDev.DynamicForms.Code` kolonu), `Class/Base/Table.vb:145-160` (`Exec('…')` ile tablo oluşturma betiği), giriş `Form/Genel/FrmMainForm.vb:98-101`. |
| Kök neden | Veritabanındaki kaynak kodun çalışma zamanında derlenmesi — GV, BK — tabloya yazabilen herkes uygulama sürecinde kod çalıştırır; derlenen sınıflar statik analiz/test dışı; ayrı bir ORM dünyası (TD-17). |
| Neden zinciri | Teknik olay: GV, BK — tabloya yazabilen herkes uygulama sürecinde kod çalıştırır; derlenen sınıflar statik analiz/test dışı; ayrı bir ORM dünyası (TD-17). ↓ Kök neden: Veritabanındaki kaynak kodun çalışma zamanında derlenmesi ↓ Kanıt: satırlar yukarıda; tüketici yalnız `DynamicWizard`. |
| Etkilenen veri | `ERPPRO/Class/Dao/Dynamic/Class/Compiler.vb:57-74` (`VBCodeProvider.CompileAssemblyFromSource`), `Class/Base/DynamicForm.vb:300-318` (`AifaDev.DynamicForms.Code` kolonu), `Class/Base/Table.vb:145-160` (`Exec('…')` ile tablo oluşturma betiği), giriş `Form/Genel/FrmMainForm.vb:98-101`. |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Özelliği yetkili/ayrı araca taşımak; üretimde kapalı tutmak; kaynak kod yerine bildirimsel form tanımı. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Dao/Dynamic/Class/Compiler.vb:57-74` (`VBCodeProvider.CompileAssemblyFromSource`), `Class/Base/DynamicForm.vb:300-318` (`AifaDev.DynamicForms.Code |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-11 · öncelik P2 · kanıt: satırlar yukarıda; tüketici yalnız `DynamicWizard`. |
| Wiki bağlantıları | TD-17 · TD-11 |
POTANSİYEL ERR-POT-012 — TD-12 — Boş `Catch` S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB, BK — `Save` `False` döner ama sebep kaybolur; kur/önbellek yüklenemezse sessizce boş/eski değer kullanılır. |
| Kod dosyası | 679 metot, 273 dosya; `ERPPRO/Class/Dao` 361. En yoğun: `Designer/DosPrint/DosPrint.vb` (14), `Form/Siparis/NetEntegrator.vb` (12), `Class/Dao/Dynamic/Class/Base/Data.vb` (8), `Class/Module/Database.vb` (8), `Class/Ext/Cari.Provizyon.vb` (7). Kritik örnekler: `Class/Dao/Islem/Cari.Islem.vb:697` (INS |
| Kök neden | Boş `Catch` — VB, BK — `Save` `False` döner ama sebep kaybolur; kur/önbellek yüklenemezse sessizce boş/eski değer kullanılır. |
| Neden zinciri | Teknik olay: VB, BK — `Save` `False` döner ama sebep kaybolur; kur/önbellek yüklenemezse sessizce boş/eski değer kullanılır. ↓ Kök neden: Boş `Catch` ↓ Kanıt: hotspots §5. Mimari referans §9-6 "348" → scan 679 (Designer/CodeDesigner dahil). |
| Etkilenen veri | 679 metot, 273 dosya; `ERPPRO/Class/Dao` 361. En yoğun: `Designer/DosPrint/DosPrint.vb` (14), `Form/Siparis/NetEntegrator.vb` (12), `Class/Dao/Dynamic/Class/Base/Data.vb` (8), `Class/Module/Database.vb` (8), `Class/Ext/Cari.Provizyon.vb` (7). Kritik örnekler: `Class/Dao/Islem/Cari.Islem.vb:697` (INS |
| Olasılık / etki / güven | YÜKSEK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Merkezi günlükleme (`Exception` + SQL metni + kullanıcı/şube), boş `Catch` yasağı (analizör kuralı), `Save` sonucuna hata nesnesi eklemek. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-12 · öncelik P1 · kanıt: hotspots §5. Mimari referans §9-6 "348" → scan 679 (Designer/CodeDesigner dahil). |
| Wiki bağlantıları | TD-12 |
POTANSİYEL ERR-POT-013 — TD-13 — `InternalDb` yaşam döngüsü kusurları S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E09 — Konfigürasyon Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | PF, VB — 866 `Using db As New InternalDb` bloğundan yalnız 231'i açıkça kapatıyor; kalanlar GC'ye kalıyor (havuz baskısı, uzun süreli açık bağlantı); aynı örnekte iki `DataTable()` çağrısı satırları çoğaltır (INFERRED sonuç, VERIFIED yapı). |
| Kod dosyası | `ERPPRO/Class/Module/InternalDb.vb:131-141` (`Dispose(disposing)` gövdesi boş — `SqlConnection` kapatılmıyor), `:53-65,69-81` (`Finally` boş), `:100-123` (`Da.Fill(Ds)` aynı `DataSet`'e ekler, temizlenmez), `:85-96` (`ExecuteReader` `CloseConnection` davranışı yok). |
| Kök neden | `InternalDb` yaşam döngüsü kusurları — PF, VB — 866 `Using db As New InternalDb` bloğundan yalnız 231'i açıkça kapatıyor; kalanlar GC'ye kalıyor (havuz baskısı, uzun süreli açık bağlantı); aynı örnekte iki `DataTable()` çağrısı satırları çoğaltır (INFERRED sonuç, VERIFIED yapı). |
| Neden zinciri | Teknik olay: PF, VB — 866 `Using db As New InternalDb` bloğundan yalnız 231'i açıkça kapatıyor; kalanlar GC'ye kalıyor (havuz baskısı, uzun süreli açık bağlantı); ↓ Kök neden: `InternalDb` yaşam döngüsü kusurları ↓ Kanıt: satırlar + grep sayıları (database-access §3). |
| Etkilenen veri | `ERPPRO/Class/Module/InternalDb.vb:131-141` (`Dispose(disposing)` gövdesi boş — `SqlConnection` kapatılmıyor), `:53-65,69-81` (`Finally` boş), `:100-123` (`Da.Fill(Ds)` aynı `DataSet`'e ekler, temizlenmez), `:85-96` (`ExecuteReader` `CloseConnection` davranışı yok). |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `Dispose` içinde `SqlConnection.Close/Dispose`; her çağrıda `Ds.Clear()` veya yeni `DataTable`; okuyucu için `CommandBehavior.CloseConnection`. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Module/InternalDb.vb:131-141` (`Dispose(disposing)` gövdesi boş — `SqlConnection` kapatılmıyor), `:53-65,69-81` (`Finally` boş), `:100-123` (`Da.F |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-13 · öncelik P2 · kanıt: satırlar + grep sayıları (database-access §3). |
| İlişkili kayıtlar | ERR-POT-005, ERR-POT-014 |
| Wiki bağlantıları | TD-13 |
POTANSİYEL ERR-POT-014 — TD-14 — Veri katmanı UI açıyor S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E09 — Konfigürasyon Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | BK — DAO sunucu/servis/test ortamında çalışamaz; kullanıcı kararı (Yes/No) iş mantığının içinde. |
| Kod dosyası | `ERPPRO/Class/Module/InternalDb.vb:44,61,77,93,106,120` (`MessageBox/MsgBox`); `Class/Dao` 45 satır/19 dosya, `Class/Ext` 19 satır/4 dosya; `Class/Dao/Islem/Cari.Islem.vb:533-535,1025,1049` (`FrmSilmeOnayAl.ShowDialog`), `:1057` (`MessageBox.YesNo` ile karşı işlem iptal kararı); `Class/Dao/Cari.Hesa |
| Kök neden | Veri katmanı UI açıyor — BK — DAO sunucu/servis/test ortamında çalışamaz; kullanıcı kararı (Yes/No) iş mantığının içinde. |
| Neden zinciri | Teknik olay: BK — DAO sunucu/servis/test ortamında çalışamaz; kullanıcı kararı (Yes/No) iş mantığının içinde. ↓ Kök neden: Veri katmanı UI açıyor ↓ Kanıt: hotspots §11. |
| Etkilenen veri | `ERPPRO/Class/Module/InternalDb.vb:44,61,77,93,106,120` (`MessageBox/MsgBox`); `Class/Dao` 45 satır/19 dosya, `Class/Ext` 19 satır/4 dosya; `Class/Dao/Islem/Cari.Islem.vb:533-535,1025,1049` (`FrmSilmeOnayAl.ShowDialog`), `:1057` (`MessageBox.YesNo` ile karşı işlem iptal kararı); `Class/Dao/Cari.Hesa |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Sonuç nesnesi (`Result` + hata/uyarı listesi) döndürmek; onay soruları çağıran ekrana taşınmalı; `InternalDb` yalnız istisna fırlatmalı. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Module/InternalDb.vb:44,61,77,93,106,120` (`MessageBox/MsgBox`); `Class/Dao` 45 satır/19 dosya, `Class/Ext` 19 satır/4 dosya; `Class/Dao/Islem/Car |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-14 · öncelik P2 · kanıt: hotspots §11. |
| İlişkili kayıtlar | ERR-POT-005, ERR-POT-013 |
| Wiki bağlantıları | TD-14 |
POTANSİYEL ERR-POT-015 — TD-15 — Global durum bağımlılığı S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | BK — birim test ve çoklu oturum imkânsız; şube/kasa bağlamı örtük. |
| Kod dosyası | 1175 başvuru, 312 sınıf (`Program` 763, `DSX` 322, `LoginInformation` 87); DAO'da 110/162 sınıf. Örnek: `Class/Dao/Base.vb:6-16` (`ActiveSirketId/SubeId` → `Program.*`), `Class/Dao/Islem/Cari.Islem.vb:506-531` (`LoginInformation.Sube`, `Program.GetKur`, `Program.SubeId`), `Class/Module/Database.vb:1 |
| Kök neden | Global durum bağımlılığı — BK — birim test ve çoklu oturum imkânsız; şube/kasa bağlamı örtük. |
| Neden zinciri | Teknik olay: BK — birim test ve çoklu oturum imkânsız; şube/kasa bağlamı örtük. ↓ Kök neden: Global durum bağımlılığı ↓ Kanıt: hotspots §8. |
| Etkilenen veri | 1175 başvuru, 312 sınıf (`Program` 763, `DSX` 322, `LoginInformation` 87); DAO'da 110/162 sınıf. Örnek: `Class/Dao/Base.vb:6-16` (`ActiveSirketId/SubeId` → `Program.*`), `Class/Dao/Islem/Cari.Islem.vb:506-531` (`LoginInformation.Sube`, `Program.GetKur`, `Program.SubeId`), `Class/Module/Database.vb:1 |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Oturum bağlamı nesnesi (`ISessionContext`) enjeksiyonu; önbelleğin servis arkasına alınması. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: 1175 başvuru, 312 sınıf (`Program` 763, `DSX` 322, `LoginInformation` 87); DAO'da 110/162 sınıf. Örnek: `Class/Dao/Base.vb:6-16` (`ActiveSirketId/SubeId` → `Pro |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-15 · öncelik P2 · kanıt: hotspots §8. |
| Wiki bağlantıları | TD-15 |
POTANSİYEL ERR-POT-016 — TD-16 — Kopyala-yapıştır S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E15 — Duplicate / Çift İşlem |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | BK — bir kural değişikliği 100+ dosyaya dokunur; ekran çiftleri ayrışır (`iFDoviz`/`iFNakit` farkı, mimari referans §9-17). |
| Kod dosyası | `Save()` 91/105 birebir (`Class/Dao/Agent.Agent.vb:104`, `Cari.Transferler.vb:164-166` …); `SetPropertyValue/GetPropertyValue` 121 dosya (`Cari.Fatura.vb:376-392` …); üçlü `Delete` 87 dosya (`Cari.Hesap.vb:749/770/792`); `Insert/Update` 110+110 el yazımı alan bloğu (`Personel.Personel.vb:391-820`); |
| Kök neden | Kopyala-yapıştır — BK — bir kural değişikliği 100+ dosyaya dokunur; ekran çiftleri ayrışır (`iFDoviz`/`iFNakit` farkı, mimari referans §9-17). |
| Neden zinciri | Teknik olay: BK — bir kural değişikliği 100+ dosyaya dokunur; ekran çiftleri ayrışır (`iFDoviz`/`iFNakit` farkı, mimari referans §9-17). ↓ Kök neden: Kopyala-yapıştır ↓ Kanıt: hotspots §6. |
| Etkilenen veri | `Save()` 91/105 birebir (`Class/Dao/Agent.Agent.vb:104`, `Cari.Transferler.vb:164-166` …); `SetPropertyValue/GetPropertyValue` 121 dosya (`Cari.Fatura.vb:376-392` …); üçlü `Delete` 87 dosya (`Cari.Hesap.vb:749/770/792`); `Insert/Update` 110+110 el yazımı alan bloğu (`Personel.Personel.vb:391-820`); |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Genel `Repository(Of T)` + attribute/kaynak üreteci; ekran temel sınıflarında ortak `FormSave`; çakışma dosyasını silmek. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-16 · öncelik P2 · kanıt: hotspots §6. |
| Wiki bağlantıları | TD-16 |
POTANSİYEL ERR-POT-017 — TD-17 — Üç veri erişim yolu ve artık referanslar S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | BK — dört farklı kalıp; yeni geliştirici hangisini kullanacağını bilemez. |
| Kod dosyası | `InternalDb` (293 sınıf), `DataLayout/DBBaseClass.vb` (tek türev `Repository.vb:21-23`), `Class/Dao/_SQLBase/SQLBase.vb` (tek türev `Class/Dao/Islem/Cari.IDetay.vb:4-6`), `Class/Dao/Dynamic/*`; `ERPPRO/ERPPRO.vbproj:180` (`DevExpress.Xpo.v14.1`, kullanan kod yok), `app.config:11` (`XpoProvider`), `E |
| Kök neden | Üç veri erişim yolu ve artık referanslar — BK — dört farklı kalıp; yeni geliştirici hangisini kullanacağını bilemez. |
| Neden zinciri | Teknik olay: BK — dört farklı kalıp; yeni geliştirici hangisini kullanacağını bilemez. ↓ Kök neden: Üç veri erişim yolu ve artık referanslar ↓ Kanıt: database-access §1, §4, §6. |
| Etkilenen veri | `InternalDb` (293 sınıf), `DataLayout/DBBaseClass.vb` (tek türev `Repository.vb:21-23`), `Class/Dao/_SQLBase/SQLBase.vb` (tek türev `Class/Dao/Islem/Cari.IDetay.vb:4-6`), `Class/Dao/Dynamic/*`; `ERPPRO/ERPPRO.vbproj:180` (`DevExpress.Xpo.v14.1`, kullanan kod yok), `app.config:11` (`XpoProvider`), `E |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Tek yol seçmek; XPO referansı, `localhost_Connection`, typed dataset'i kaldırmak. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-17 · öncelik P3 · kanıt: database-access §1, §4, §6. |
| Wiki bağlantıları | TD-17 |
POTANSİYEL ERR-POT-018 — TD-18 — `DBBase.IsValidate` semantiği ters, yalnız 4 tipte doğrulama S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E09 — Konfigürasyon Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — dinleyicisi olmayan/ikinci dinleyici eklenen tiplerde doğrulama yanlış anlamda çalışır; olay `Shared` olduğu için `Program` statik kurucusu çalışmadan hiçbir doğrulama yapılmaz. |
| Kod dosyası | `ERPPRO/Class/Dao/Base.vb:116-121` (`Validate(Obj, ByRef Cancel)`, `IsValid=True` ile çağrılır, aynen döner); tek dinleyici `Class/Module/Program.vb:4,20-30` (`Validated` anlamında yazar; `Parcakarti/Takimkarti/Paket/Modelkarti`). Çağıranlar: `Class/Dao/Siparis.Parcakarti.vb:220`, `Form/Siparis/FrmM |
| Kök neden | `DBBase.IsValidate` semantiği ters, yalnız 4 tipte doğrulama — VB — dinleyicisi olmayan/ikinci dinleyici eklenen tiplerde doğrulama yanlış anlamda çalışır; olay `Shared` olduğu için `Program` statik kurucusu çalışmadan hiçbir doğrulama yapılmaz. |
| Neden zinciri | Teknik olay: VB — dinleyicisi olmayan/ikinci dinleyici eklenen tiplerde doğrulama yanlış anlamda çalışır; olay `Shared` olduğu için `Program` statik kurucusu çalış ↓ Kök neden: `DBBase.IsValidate` semantiği ters, yalnız 4 tipte doğrulama ↓ Kanıt: satırlar yukarıda. Mimari referans §9-10 "fiilen devre dışı" → kodda: **4 tip için çalışıyor, diğerlerinde doğrulama yok |
| Etkilenen veri | `ERPPRO/Class/Dao/Base.vb:116-121` (`Validate(Obj, ByRef Cancel)`, `IsValid=True` ile çağrılır, aynen döner); tek dinleyici `Class/Module/Program.vb:4,20-30` (`Validated` anlamında yazar; `Parcakarti/Takimkarti/Paket/Modelkarti`). Çağıranlar: `Class/Dao/Siparis.Parcakarti.vb:220`, `Form/Siparis/FrmM |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `Validate` sanal metodu (`Overridable Function Validate() As ValidationResult`); olay tabanlı doğrulamayı kaldırmak. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Dao/Base.vb:116-121` (`Validate(Obj, ByRef Cancel)`, `IsValid=True` ile çağrılır, aynen döner); tek dinleyici `Class/Module/Program.vb:4,20-30` (` |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-18 · öncelik P2 · kanıt: satırlar yukarıda. Mimari referans §9-10 "fiilen devre dışı" → kodda: **4 tip için çalışıyor, diğerlerinde doğrulama yok, parametre adı ters** (ayrıntı, `CONTRADICTS` değil). |
| İlişkili kayıtlar | ERR-POT-019 |
| Wiki bağlantıları | TD-18 |
POTANSİYEL ERR-POT-019 — TD-19 — `DBBase.ActiveKasaId` sonsuz özyineleme S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-063 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-063 Kasa bakiyesi / kasa stoğu tutmuyor |
| Teknik belirti | BK — çağrılırsa `StackOverflowException` (süreç çöker). Çağıran yok (grep 0) → latent. |
| Kod dosyası | `ERPPRO/Class/Dao/Base.vb:18-22` (`Get … Return ActiveKasaId`). |
| Kök neden | `DBBase.ActiveKasaId` sonsuz özyineleme — BK — çağrılırsa `StackOverflowException` (süreç çöker). Çağıran yok (grep 0) → latent. |
| Neden zinciri | Teknik olay: BK — çağrılırsa `StackOverflowException` (süreç çöker). Çağıran yok (grep 0) → latent. ↓ Kök neden: `DBBase.ActiveKasaId` sonsuz özyineleme ↓ Kanıt: satır yukarıda. |
| Etkilenen veri | `ERPPRO/Class/Dao/Base.vb:18-22` (`Get … Return ActiveKasaId`). |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `Return Program.KasaId` veya özelliği silmek. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-19 · öncelik P3 · kanıt: satır yukarıda. |
| İlişkili kayıtlar | ERR-POT-018 |
| Wiki bağlantıları | TD-19 |
POTANSİYEL ERR-POT-020 — TD-20 — `SQLBase._Query` `Shared` S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — ikinci bir `SQLBase` türevi eklendiğinde yanlış tabloya MERGE. Bugün tek türev (`Cari.IFatura`) → gizli. |
| Kod dosyası | `ERPPRO/Class/Dao/_SQLBase/SQLBase.vb:31` (`Private Shared _Query`), `:38-64` (ilk hesaplanan MERGE metni tüm türevlerde kullanılır). |
| Kök neden | `SQLBase._Query` `Shared` — VB — ikinci bir `SQLBase` türevi eklendiğinde yanlış tabloya MERGE. Bugün tek türev (`Cari.IFatura`) → gizli. |
| Neden zinciri | Teknik olay: VB — ikinci bir `SQLBase` türevi eklendiğinde yanlış tabloya MERGE. Bugün tek türev (`Cari.IFatura`) → gizli. ↓ Kök neden: `SQLBase._Query` `Shared` ↓ Kanıt: satırlar yukarıda; `grep "Inherits AIO.SQL.SQLBase"` = 1. |
| Etkilenen veri | `ERPPRO/Class/Dao/_SQLBase/SQLBase.vb:31` (`Private Shared _Query`), `:38-64` (ilk hesaplanan MERGE metni tüm türevlerde kullanılır). |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Tip başına önbellek (`Dictionary(Of Type, String)`) veya örnek alanı. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-20 · öncelik P3 · kanıt: satırlar yukarıda; `grep "Inherits AIO.SQL.SQLBase"` = 1. |
| Wiki bağlantıları | TD-20 |
POTANSİYEL ERR-POT-021 — TD-21 — `Program.GetKur` her zaman alış; birim yoksa `1` S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-023 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-023 Birim (para birimi) tanımlama / listede görünmüyor / çarpan / çift birim |
| Teknik belirti | VB — satış yönünde alış kuru → marj kaybı (kabul edilmiş hata, AS-DOCUMENTED §10 soru 4); listede olmayan birim için `1` dönmesi sessiz yanlış tutar. Mimari referans §9-6 "kur bulunamazsa 0 akıyor" → `Program.GetKur` için **`1`** döner (`CONTRADICTS`; 0 senaryosu `Set_Alis` ile boş kur satırında olabilir, `Sistem.KurListesi.vb:106`). |
| Kod dosyası | `ERPPRO/Class/Module/Program.vb:260-268` (`Return K.Alis` / `Else Return 1`). Kullanım: `Class/Dao/Islem/Cari.Islem.vb:506-531`, `Controls/Islem Ekranı/Ekran/FrmEFaturaBas.vb:298`, `Form/Doviz/FrmDovFaturaEkranı.vb:201-202`, `GiseEkrani.vb:19`, `ParakendeSatis.vb` — toplam 19 sınıf (scan `globals`). |
| Kök neden | `Program.GetKur` her zaman alış; birim yoksa `1` — VB — satış yönünde alış kuru → marj kaybı (kabul edilmiş hata, AS-DOCUMENTED §10 soru 4); listede olmayan birim için `1` dönmesi sessiz yanlış tutar. Mimari referans §9-6 "kur bulunamazsa 0 akıyor" → `Program.GetKur` için **`1`** döner (`CONTRADICTS`; 0 senaryosu `Set_Alis` ile boş kur satırında olabilir, `Sistem.KurListesi.vb:106`). |
| Neden zinciri | Teknik olay: VB — satış yönünde alış kuru → marj kaybı (kabul edilmiş hata, AS-DOCUMENTED §10 soru 4); listede olmayan birim için `1` dönmesi sessiz yanlış tutar. ↓ Kök neden: `Program.GetKur` her zaman alış; birim yoksa `1` ↓ Kanıt: satırlar yukarıda. |
| Etkilenen veri | `ERPPRO/Class/Module/Program.vb:260-268` (`Return K.Alis` / `Else Return 1`). Kullanım: `Class/Dao/Islem/Cari.Islem.vb:506-531`, `Controls/Islem Ekranı/Ekran/FrmEFaturaBas.vb:298`, `Form/Doviz/FrmDovFaturaEkranı.vb:201-202`, `GiseEkrani.vb:19`, `ParakendeSatis.vb` — toplam 19 sınıf (scan `globals`). |
| Olasılık / etki / güven | YÜKSEK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `GetKur(Birim, Yon As Alis|Satis)`; bulunamazsa istisna/uyarı, `1` yerine `Nothing`. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-21 · öncelik P1 · kanıt: satırlar yukarıda. |
| İlişkili kayıtlar | ERR-POT-037 |
| Wiki bağlantıları | TD-21 |
POTANSİYEL ERR-POT-022 — TD-22 — Kur fallback sessiz (DB) S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — eski kurla işlem; kullanıcı uyarılmaz. |
| Kod dosyası | DB `Sistem.GetKurListesi` (IF) satır 5-9: `IsNull(K.Alis, L.Alis)` … `Left Join Sistem.GetLastKur L` — o güne kur girilmemişse son kur döner, işaret yok. Tüketici `ERPPRO/Class/Dao/Sistem.KurListesi.vb:100`. |
| Kök neden | Kur fallback sessiz (DB) — VB — eski kurla işlem; kullanıcı uyarılmaz. |
| Neden zinciri | Teknik olay: VB — eski kurla işlem; kullanıcı uyarılmaz. ↓ Kök neden: Kur fallback sessiz (DB) ↓ Kanıt: `kb_src/db/modules_all.json`. |
| Etkilenen veri | DB `Sistem.GetKurListesi` (IF) satır 5-9: `IsNull(K.Alis, L.Alis)` … `Left Join Sistem.GetLastKur L` — o güne kur girilmemişse son kur döner, işaret yok. Tüketici `ERPPRO/Class/Dao/Sistem.KurListesi.vb:100`. |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Fallback'te `Tarih`/`IsFallback` kolonu döndürüp ekranda uyarmak; günlük kur girişi zorunluluğu. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-22 · öncelik P2 · kanıt: `kb_src/db/modules_all.json`. |
| Wiki bağlantıları | TD-22 |
POTANSİYEL ERR-POT-023 — TD-23 — `Stok.GetMadenMaliyeti` `TOP 50` ve güncel kur S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-034 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-034 Stok tutmuyor / stok düzeltme / eksi stok / stok girişi |
| Teknik belirti | VB — talep miktarı son 50 hareketi aşarsa maliyet eksik; maliyet hareket tarihindeki değil bugünkü kurla çevriliyor. |
| Kod dosyası | DB `Stok.GetMadenMaliyeti` (FN) satır 16-17 (`Select top 50 … From Stok.StokHaraketleri`), satır 38 (`FN.Bol(@ToplamMaliyet, (Select top 1 Alis From Sistem.Kurlar … Order By Tarih Desc))`). |
| Kök neden | `Stok.GetMadenMaliyeti` `TOP 50` ve güncel kur — VB — talep miktarı son 50 hareketi aşarsa maliyet eksik; maliyet hareket tarihindeki değil bugünkü kurla çevriliyor. |
| Neden zinciri | Teknik olay: VB — talep miktarı son 50 hareketi aşarsa maliyet eksik; maliyet hareket tarihindeki değil bugünkü kurla çevriliyor. ↓ Kök neden: `Stok.GetMadenMaliyeti` `TOP 50` ve güncel kur ↓ Kanıt: `kb_src/db/modules_all.json` (mimari referans §9-8/9 ile uyumlu). |
| Etkilenen veri | DB `Stok.GetMadenMaliyeti` (FN) satır 16-17 (`Select top 50 … From Stok.StokHaraketleri`), satır 38 (`FN.Bol(@ToplamMaliyet, (Select top 1 Alis From Sistem.Kurlar … Order By Tarih Desc))`). |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Küme temelli (cursor'suz) LIFO/FIFO hesaplama, sınır yok; hareket tarihindeki kur. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-23 · öncelik P2 · kanıt: `kb_src/db/modules_all.json` (mimari referans §9-8/9 ile uyumlu). |
| İlişkili kayıtlar | ERR-OBS-005, ERR-OBS-070, ERR-OBS-076, ERR-POT-033, ERR-POT-138, ERR-SIL-026, ERR-SIL-036, ERR-SIL-041, ERR-SIL-045, ERR-SIL-046 |
| Wiki bağlantıları | TD-23 |
POTANSİYEL ERR-POT-024 — TD-24 — `DSX` önbelleği tutarlılığı S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB, BK — yeni kayıtlar (hesap, maden, kasa) ekranlara ancak tam yenilemede düşer (INFERRED, `[GAP]` bkz. database-access §7); yükleme hatası sessiz. |
| Kod dosyası | `ERPPRO/Class/Module/Database.vb:78+562, 134+564, 219+566, 243+568, 292+570, 176+580, 152+584` (her yükleyici olayını kendisi yükseltir, `RetriveOfAllData` tekrar yükseltir → dinleyiciler iki kez çalışır); `:105,443,466,487,508,530,550` (yükleyiciler boş catch içinde); `ListOfHesap.Add` yalnız `Data |
| Kök neden | `DSX` önbelleği tutarlılığı — VB, BK — yeni kayıtlar (hesap, maden, kasa) ekranlara ancak tam yenilemede düşer (INFERRED, `[GAP]` bkz. database-access §7); yükleme hatası sessiz. |
| Neden zinciri | Teknik olay: VB, BK — yeni kayıtlar (hesap, maden, kasa) ekranlara ancak tam yenilemede düşer (INFERRED, `[GAP]` bkz. database-access §7); yükleme hatası sessiz. ↓ Kök neden: `DSX` önbelleği tutarlılığı ↓ Kanıt: database-access §7. |
| Etkilenen veri | `ERPPRO/Class/Module/Database.vb:78+562, 134+564, 219+566, 243+568, 292+570, 176+580, 152+584` (her yükleyici olayını kendisi yükseltir, `RetriveOfAllData` tekrar yükseltir → dinleyiciler iki kez çalışır); `:105,443,466,487,508,530,550` (yükleyiciler boş catch içinde); `ListOfHesap.Add` yalnız `Data |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `RecordInserted/Updated/Deleted` olaylarına bağlı artımlı önbellek; olayı tek yerden yükseltmek; yükleme hatasını göstermek. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-24 · öncelik P2 · kanıt: database-access §7. |
| Wiki bağlantıları | TD-24 |
POTANSİYEL ERR-POT-025 — TD-25 — `KurListesi` timer thread güvenliği S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — nadir yarış/`InvalidOperationException` (koleksiyon değiştirildi) riski (INFERRED). |
| Kod dosyası | `ERPPRO/Class/Dao/Sistem.KurListesi.vb:62,74` (`System.Threading.Timer`, 15 sn), `:95-123` (`RetriveFromDb` listeye `Add` ederken UI `Program.GetKur` ile `Find` yapar; kilit yok; `:111` okuyucu kapandıktan sonra bağlantı gereksiz yeniden açılıyor); aynı kalıp `Sistem.DovizPanosu.vb:46`. |
| Kök neden | `KurListesi` timer thread güvenliği — VB — nadir yarış/`InvalidOperationException` (koleksiyon değiştirildi) riski (INFERRED). |
| Neden zinciri | Teknik olay: VB — nadir yarış/`InvalidOperationException` (koleksiyon değiştirildi) riski (INFERRED). ↓ Kök neden: `KurListesi` timer thread güvenliği ↓ Kanıt: satırlar yukarıda. |
| Etkilenen veri | `ERPPRO/Class/Dao/Sistem.KurListesi.vb:62,74` (`System.Threading.Timer`, 15 sn), `:95-123` (`RetriveFromDb` listeye `Add` ederken UI `Program.GetKur` ile `Find` yapar; kilit yok; `:111` okuyucu kapandıktan sonra bağlantı gereksiz yeniden açılıyor); aynı kalıp `Sistem.DovizPanosu.vb:46`. |
| Olasılık / etki / güven | DÜŞÜK / S3 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Değişmez liste değişimi (`Interlocked.Exchange`) veya `SynchronizationContext` ile UI thread'e postalama. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-25 · öncelik P3 · kanıt: satırlar yukarıda. |
| Wiki bağlantıları | TD-25 |
POTANSİYEL ERR-POT-026 — TD-26 — Magic number karşılaştırmaları S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | BK — kod tablosu ile enum eşleşmesi kodda dağınık; anlam kaybı. |
| Kod dosyası | `ERPPRO/Controls/Islem Ekranı/Ekran/FrmTransfer.vb:57,69,80` (`SetStatus(…, 3|1|2)`), `Class/Dao/Cari.Transferler.vb:152`, `Form/Provizyon/FrmProvizyonKabul.vb:52` (`Status=1`), `Controls/Grid/ProvizyonGrid.vb:261-277`, `Form/Genel/FrmBilancoSifirla.vb:93` (`IslemKodu = 999`), `Class/Ext/Cari.ListIt |
| Kök neden | Magic number karşılaştırmaları — BK — kod tablosu ile enum eşleşmesi kodda dağınık; anlam kaybı. |
| Neden zinciri | Teknik olay: BK — kod tablosu ile enum eşleşmesi kodda dağınık; anlam kaybı. ↓ Kök neden: Magic number karşılaştırmaları ↓ Kanıt: hotspots §12. |
| Etkilenen veri | `ERPPRO/Controls/Islem Ekranı/Ekran/FrmTransfer.vb:57,69,80` (`SetStatus(…, 3|1|2)`), `Class/Dao/Cari.Transferler.vb:152`, `Form/Provizyon/FrmProvizyonKabul.vb:52` (`Status=1`), `Controls/Grid/ProvizyonGrid.vb:261-277`, `Form/Genel/FrmBilancoSifirla.vb:93` (`IslemKodu = 999`), `Class/Ext/Cari.ListIt |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `tTransferStatus`, `tProvizyonStatus` enum'ları; SQL metinlerinde parametre olarak enum değeri. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-26 · öncelik P3 · kanıt: hotspots §12. |
| Wiki bağlantıları | TD-26 |
POTANSİYEL ERR-POT-027 — TD-27 — Combo indeksi doğrudan `IslemTuru` olarak kaydediliyor S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E19 — Raporlama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — `IslemKodu=BORC` kayıtlarında `IslemTuru` ALACAK/BORC yerine GIRIS/CIKIS; raporlar ve `GetKarsiIslemTuru` (`Database.vb:658-674`) bu değere göre yön çevirir. |
| Kod dosyası | `ERPPRO/Controls/Islem Ekranı/Ekran/iFBorc.vb:6,56` (`IslemTuru = CmbIslemTuru.SelectedIndex`), `iFBorc.Designer.vb:233` (`Items = {"ALACAK","BORC"}`) — enum `Class/Ext/Cari.IslemEx.vb:48-55` (`GIRIS=0, CIKIS=1, ALACAK=2, BORC=3, ALIS=4, SATIS=5`) → 0/1 = GIRIS/CIKIS yazılır. Doğru offset uygulayanl |
| Kök neden | Combo indeksi doğrudan `IslemTuru` olarak kaydediliyor — VB — `IslemKodu=BORC` kayıtlarında `IslemTuru` ALACAK/BORC yerine GIRIS/CIKIS; raporlar ve `GetKarsiIslemTuru` (`Database.vb:658-674`) bu değere göre yön çevirir. |
| Neden zinciri | Teknik olay: VB — `IslemKodu=BORC` kayıtlarında `IslemTuru` ALACAK/BORC yerine GIRIS/CIKIS; raporlar ve `GetKarsiIslemTuru` (`Database.vb:658-674`) bu değere göre ↓ Kök neden: Combo indeksi doğrudan `IslemTuru` olarak kaydediliyor ↓ Kanıt: satırlar yukarıda (iFBorc VERIFIED; `iFVirman`/`iFDoviz` AS-DOCUMENTED §9-16, `[GAP: bu iki ekran satır bazında yeniden |
| Etkilenen veri | `ERPPRO/Controls/Islem Ekranı/Ekran/iFBorc.vb:6,56` (`IslemTuru = CmbIslemTuru.SelectedIndex`), `iFBorc.Designer.vb:233` (`Items = {"ALACAK","BORC"}`) — enum `Class/Ext/Cari.IslemEx.vb:48-55` (`GIRIS=0, CIKIS=1, ALACAK=2, BORC=3, ALIS=4, SATIS=5`) → 0/1 = GIRIS/CIKIS yazılır. Doğru offset uygulayanl |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Combo'ya enum değerini `ValueMember` olarak bağlamak; tek dönüştürücü. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Controls/Islem Ekranı/Ekran/iFBorc.vb:6,56` (`IslemTuru = CmbIslemTuru.SelectedIndex`), `iFBorc.Designer.vb:233` (`Items = {"ALACAK","BORC"}`) — enum `C |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-27 · öncelik P2 · kanıt: satırlar yukarıda (iFBorc VERIFIED; `iFVirman`/`iFDoviz` AS-DOCUMENTED §9-16, `[GAP: bu iki ekran satır bazında yeniden doğrulanmadı]`). |
| Wiki bağlantıları | TD-27 |
POTANSİYEL ERR-POT-028 — TD-28 — Sabit kodlanmış MASAK eşikleri S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB (mevzuat) — güncel eşiklerle uyumsuz (AS-DOCUMENTED §9-24: 185.000 TL / 5.000 USD, `masak-mevzuat-notlari.md`); her değişiklikte derleme. |
| Kod dosyası | `ERPPRO/Controls/Islem Ekranı/Ekran/ParakendeSatis.vb:279-280` (`> 7000` TL isimsiz hesap), `:349-350`, `:407` (`> 3000` USD uyarı). |
| Kök neden | Sabit kodlanmış MASAK eşikleri — VB (mevzuat) — güncel eşiklerle uyumsuz (AS-DOCUMENTED §9-24: 185.000 TL / 5.000 USD, `masak-mevzuat-notlari.md`); her değişiklikte derleme. |
| Neden zinciri | Teknik olay: VB (mevzuat) — güncel eşiklerle uyumsuz (AS-DOCUMENTED §9-24: 185.000 TL / 5.000 USD, `masak-mevzuat-notlari.md`); her değişiklikte derleme. ↓ Kök neden: Sabit kodlanmış MASAK eşikleri ↓ Kanıt: satırlar yukarıda. |
| Etkilenen veri | `ERPPRO/Controls/Islem Ekranı/Ekran/ParakendeSatis.vb:279-280` (`> 7000` TL isimsiz hesap), `:349-350`, `:407` (`> 3000` USD uyarı). |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Eşikleri `Sistem.GlobalSettings`/parametre tablosuna almak, yürürlük tarihiyle. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Controls/Islem Ekranı/Ekran/ParakendeSatis.vb:279-280` (`> 7000` TL isimsiz hesap), `:349-350`, `:407` (`> 3000` USD uyarı). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-28 · öncelik P2 · kanıt: satırlar yukarıda. |
| Wiki bağlantıları | TD-28 |
POTANSİYEL ERR-POT-029 — TD-29 — `Devir.DevirYap`: `TRUNCATE` + yeniden `INSERT`, transaction yok S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-036 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E05 — Transaction Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-036 Yıl sonu devir işlemi ve devir sonrası fark |
| Teknik belirti | VB — `TRUNCATE` sonrası `INSERT` hata verirse hareket tabloları boş kalır; tek güvence önce alınan yedek. |
| Kod dosyası | `ERPPRO/Class/Module/Devir.vb:39-40` (`BACKUP/RESTORE` metinleri string birleştirme), `:76-87` (`Truncate Table Cari.Islemler, Cari.BakiyeIslem, Cari.History, Stok.StokHaraketleri, Cari.IslemDetaylari` + `INSERT … Select * from #ErpBalance/#ERPStok`), `:90-147` (adımlar ayrı `ExecuteNonQuery/Execute |
| Kök neden | `Devir.DevirYap`: `TRUNCATE` + yeniden `INSERT`, transaction yok — VB — `TRUNCATE` sonrası `INSERT` hata verirse hareket tabloları boş kalır; tek güvence önce alınan yedek. |
| Neden zinciri | Teknik olay: VB — `TRUNCATE` sonrası `INSERT` hata verirse hareket tabloları boş kalır; tek güvence önce alınan yedek. ↓ Kök neden: `Devir.DevirYap`: `TRUNCATE` + yeniden `INSERT`, transaction yok ↓ Kanıt: satırlar yukarıda. |
| Etkilenen veri | `ERPPRO/Class/Module/Devir.vb:39-40` (`BACKUP/RESTORE` metinleri string birleştirme), `:76-87` (`Truncate Table Cari.Islemler, Cari.BakiyeIslem, Cari.History, Stok.StokHaraketleri, Cari.IslemDetaylari` + `INSERT … Select * from #ErpBalance/#ERPStok`), `:90-147` (adımlar ayrı `ExecuteNonQuery/Execute |
| Olasılık / etki / güven | YÜKSEK / S1 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Devir betiğini `BEGIN TRAN … COMMIT` + `TRY/CATCH` içine almak; `TRUNCATE` yerine yeni dönem DB'si oluşturma; `sp_configure` değişikliğini kaldırmak. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Module/Devir.vb:39-40` (`BACKUP/RESTORE` metinleri string birleştirme), `:76-87` (`Truncate Table Cari.Islemler, Cari.BakiyeIslem, Cari.History, S |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-29 · öncelik P1 · kanıt: satırlar yukarıda. |
| Wiki bağlantıları | TD-29 |
POTANSİYEL ERR-POT-030 — TD-30 — `Repair.BalanceRepair` S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E09 — Konfigürasyon Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — çalıştırılırsa devir bakiyeleri/transfer hareketleri kaybolur ve fatura tipli (11/12) işlemlere bakiye yazar (AS-DOCUMENTED `ERPGOLD-mimari-referans.md §9-1`, `erpgoldv2-balancerepair-riski.md`). |
| Kod dosyası | DB `Repair.BalanceRepair` (P, 18.773 karakter; 2 `TRUNCATE`, cursor), `Repair.StokRepair`. Uygulamadan çağıran yok (`grep "BalanceRepair|StokRepair"` ERPPRO = 0). |
| Kök neden | `Repair.BalanceRepair` — VB — çalıştırılırsa devir bakiyeleri/transfer hareketleri kaybolur ve fatura tipli (11/12) işlemlere bakiye yazar (AS-DOCUMENTED `ERPGOLD-mimari-referans.md §9-1`, `erpgoldv2-balancerepair-riski.md`). |
| Neden zinciri | Teknik olay: VB — çalıştırılırsa devir bakiyeleri/transfer hareketleri kaybolur ve fatura tipli (11/12) işlemlere bakiye yazar (AS-DOCUMENTED `ERPGOLD-mimari-refer ↓ Kök neden: `Repair.BalanceRepair` ↓ Kanıt: varlık ve `TRUNCATE` sayısı `kb_src/db/modules_all.json` ile VERIFIED; etki analizi dokümandan. |
| Etkilenen veri | DB `Repair.BalanceRepair` (P, 18.773 karakter; 2 `TRUNCATE`, cursor), `Repair.StokRepair`. Uygulamadan çağıran yok (`grep "BalanceRepair|StokRepair"` ERPPRO = 0). |
| Olasılık / etki / güven | YÜKSEK / S1 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Prosedürü devre dışı bırakmak/yeniden adlandırmak; "önce raporla sonra uygula" tipi, kapsamı daraltılmış onarım. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: DB `Repair.BalanceRepair` (P, 18.773 karakter; 2 `TRUNCATE`, cursor), `Repair.StokRepair`. Uygulamadan çağıran yok (`grep "BalanceRepair|StokRepair"` ERPPRO = 0 |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-30 · öncelik P1 · kanıt: varlık ve `TRUNCATE` sayısı `kb_src/db/modules_all.json` ile VERIFIED; etki analizi dokümandan. |
| İlişkili kayıtlar | ERR-OBS-067, ERR-OBS-086, ERR-POT-003, ERR-POT-116, ERR-POT-129, ERR-POT-134, ERR-POT-135, ERR-SIL-046, ERR-SIL-067, ERR-SIL-068 |
| Wiki bağlantıları | TD-30 |
POTANSİYEL ERR-POT-031 — TD-31 — `Cari.IslemINS` precision'sız `decimal` parametreler S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E08 — Yuvarlama / Hassasiyet Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — kullanılırsa milyem/fiyat/kur tam sayıya yuvarlanır (AS-DOCUMENTED `erpgoldv2-kod-katmani-bulgulari.md §3`; parametre tanımı VERIFIED). |
| Kod dosyası | DB `Cari.IslemINS` (P): 24 parametre çıplak `decimal` (`@Miktar, @AuMilyem, @Fiyat, @HasKur …` → `decimal(18,0)`), 12 parametre `nvarchar(max)`. Uygulamadan çağıran yok (grep 0). |
| Kök neden | `Cari.IslemINS` precision'sız `decimal` parametreler — VB — kullanılırsa milyem/fiyat/kur tam sayıya yuvarlanır (AS-DOCUMENTED `erpgoldv2-kod-katmani-bulgulari.md §3`; parametre tanımı VERIFIED). |
| Neden zinciri | Teknik olay: VB — kullanılırsa milyem/fiyat/kur tam sayıya yuvarlanır (AS-DOCUMENTED `erpgoldv2-kod-katmani-bulgulari.md §3`; parametre tanımı VERIFIED). ↓ Kök neden: `Cari.IslemINS` precision'sız `decimal` parametreler ↓ Kanıt: `kb_src/db/modules_all.json`. |
| Etkilenen veri | DB `Cari.IslemINS` (P): 24 parametre çıplak `decimal` (`@Miktar, @AuMilyem, @Fiyat, @HasKur …` → `decimal(18,0)`), 12 parametre `nvarchar(max)`. Uygulamadan çağıran yok (grep 0). |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kaldırmak ya da tablo tipleriyle birebir `decimal(18,n)`. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-31 · öncelik P2 · kanıt: `kb_src/db/modules_all.json`. |
| Wiki bağlantıları | TD-31 |
POTANSİYEL ERR-POT-032 — TD-32 — `Cari.Islemler` tetikleyicileri demo kopyasında kapalı S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — iş kurallarının (şube pasif, evrak eksik, takoz stok) uygulama mı DB mi tarafından uygulandığı belirsiz; üretimde açıksa TD-03/TD-04 aktif. |
| Kod dosyası | DB `Cari.AcceptTransaction`, `UpdateTransaction`, `InsertTransaction`, `DeleteTransaction` — dördü DISABLED (AS-DOCUMENTED `erpgoldv2-kod-katmani-bulgulari.md §2`). Uygulama tarafında karşılığı: `Class/Dao/Islem/Cari.Islem.vb:506-531` (`Save` ön kontrolleri) ve `RaiseEvent InsertTransaction()` (`:70 |
| Kök neden | `Cari.Islemler` tetikleyicileri demo kopyasında kapalı — VB — iş kurallarının (şube pasif, evrak eksik, takoz stok) uygulama mı DB mi tarafından uygulandığı belirsiz; üretimde açıksa TD-03/TD-04 aktif. |
| Neden zinciri | Teknik olay: VB — iş kurallarının (şube pasif, evrak eksik, takoz stok) uygulama mı DB mi tarafından uygulandığı belirsiz; üretimde açıksa TD-03/TD-04 aktif. ↓ Kök neden: `Cari.Islemler` tetikleyicileri demo kopyasında kapalı ↓ Kanıt: doküman; kod tarafında transaction-içi kural yok (TD-01). |
| Etkilenen veri | DB `Cari.AcceptTransaction`, `UpdateTransaction`, `InsertTransaction`, `DeleteTransaction` — dördü DISABLED (AS-DOCUMENTED `erpgoldv2-kod-katmani-bulgulari.md §2`). Uygulama tarafında karşılığı: `Class/Dao/Islem/Cari.Islem.vb:506-531` (`Save` ön kontrolleri) ve `RaiseEvent InsertTransaction()` (`:70 |
| Olasılık / etki / güven | YÜKSEK / S1 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Üretim DB'sinde tetikleyici durumu teyit `[GAP]`; kural motoru tek yerde. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-32 · öncelik P1 · kanıt: doküman; kod tarafında transaction-içi kural yok (TD-01). |
| Wiki bağlantıları | TD-03 · TD-04 · TD-32 · TD-01 |
POTANSİYEL ERR-POT-033 — TD-33 — Uyumluluk seviyesi 100 S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | PF — skaler UDF inlining, yeni kardinalite tahmini yok. |
| Kod dosyası | DB `ERPGOLDV2` (AS-DOCUMENTED `erpgoldv2-ilk-bulgular.md:4, §8`; mimari referans §9-30). `FN.Bol` skaler UDF 121 modülde; uygulama SQL'inde `Fn.Bol(` 10 satır (grep). |
| Kök neden | Uyumluluk seviyesi 100 — PF — skaler UDF inlining, yeni kardinalite tahmini yok. |
| Neden zinciri | Teknik olay: PF — skaler UDF inlining, yeni kardinalite tahmini yok. ↓ Kök neden: Uyumluluk seviyesi 100 ↓ Kanıt: doküman; kodda `FN.Bol` kullanımı VERIFIED (`Class/Ext/Siparis.ParcaEx.vb:85`, `Stok.GetMadenMaliyeti` satır 30,38). |
| Etkilenen veri | DB `ERPGOLDV2` (AS-DOCUMENTED `erpgoldv2-ilk-bulgular.md:4, §8`; mimari referans §9-30). `FN.Bol` skaler UDF 121 modülde; uygulama SQL'inde `Fn.Bol(` 10 satır (grep). |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Test ortamında seviye 150+ ile regresyon; `FN.Bol` yerine `NULLIF` bölme. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-33 · öncelik P3 · kanıt: doküman; kodda `FN.Bol` kullanımı VERIFIED (`Class/Ext/Siparis.ParcaEx.vb:85`, `Stok.GetMadenMaliyeti` satır 30,38). |
| İlişkili kayıtlar | ERR-OBS-070, ERR-POT-023, ERR-POT-138, ERR-SIL-026, ERR-SIL-036, ERR-SIL-041, ERR-SIL-064 |
| Wiki bağlantıları | TD-33 |
POTANSİYEL ERR-POT-034 — TD-34 — 45 kullanılmayan tablo S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E19 — Raporlama Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | BK — şema yanıltıcı; rapor yazanlar yanlış tabloya (`dbo.BakiyeIslem` vs `Cari.BakiyeIslem`) bağlanabilir. |
| Kod dosyası | `kb_src/notes/gaps.json` `GAP-DB-01` (satır 0 + hiçbir SQL nesnesinin kullanmadığı 45 tablo: `Agent.Controller/FeedBack`, `AifaDev.GridLayouts/Layouts/ShortKeys`, `dbo.BakiyeIslem` (kopya), `DynamicForms.*` (deneme), `Sistem.Tracker` …). Kod tarafı: `Agent.Controller` için DAO ve önbellek yükleyici |
| İlgili SQL nesneleri | dbo.BakiyeIslem, Cari.BakiyeIslem |
| Kök neden | 45 kullanılmayan tablo — BK — şema yanıltıcı; rapor yazanlar yanlış tabloya (`dbo.BakiyeIslem` vs `Cari.BakiyeIslem`) bağlanabilir. |
| Neden zinciri | Teknik olay: BK — şema yanıltıcı; rapor yazanlar yanlış tabloya (`dbo.BakiyeIslem` vs `Cari.BakiyeIslem`) bağlanabilir. ↓ Kök neden: 45 kullanılmayan tablo ↓ Kanıt: AS-DOCUMENTED (gaps.json); kod referansları VERIFIED. |
| Etkilenen veri | `kb_src/notes/gaps.json` `GAP-DB-01` (satır 0 + hiçbir SQL nesnesinin kullanmadığı 45 tablo: `Agent.Controller/FeedBack`, `AifaDev.GridLayouts/Layouts/ShortKeys`, `dbo.BakiyeIslem` (kopya), `DynamicForms.*` (deneme), `Sistem.Tracker` …). Kod tarafı: `Agent.Controller` için DAO ve önbellek yükleyici |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Geliştirme ekibiyle "atıl" işareti, `DEPRECATED_` şemasına taşıma, sonra kaldırma. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-34 · öncelik P3 · kanıt: AS-DOCUMENTED (gaps.json); kod referansları VERIFIED. |
| Wiki bağlantıları | TD-34 |
POTANSİYEL ERR-POT-035 — TD-35 — ExLimit PIN üretimi zayıf S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | GV — GUID hex karakterleri (0-9, A-F) → 16×16 = 256 olası PIN, ASCII kodları tahmin edilebilir (mimari referans §9-22 ile uyumlu). |
| Kod dosyası | `ERPPRO/Class/Dao/Islem/FrmExLimit.vb:50-53` (`Left(GetNewGUID, 2)` → her karakterin `Asc` değeri birleştirilir); `:48-49` "captcha" `Say1 + (Say1 - 1)` toplama sorusu. |
| Kök neden | ExLimit PIN üretimi zayıf — GV — GUID hex karakterleri (0-9, A-F) → 16×16 = 256 olası PIN, ASCII kodları tahmin edilebilir (mimari referans §9-22 ile uyumlu). |
| Neden zinciri | Teknik olay: GV — GUID hex karakterleri (0-9, A-F) → 16×16 = 256 olası PIN, ASCII kodları tahmin edilebilir (mimari referans §9-22 ile uyumlu). ↓ Kök neden: ExLimit PIN üretimi zayıf ↓ Kanıt: satırlar yukarıda. |
| Etkilenen veri | `ERPPRO/Class/Dao/Islem/FrmExLimit.vb:50-53` (`Left(GetNewGUID, 2)` → her karakterin `Asc` değeri birleştirilir); `:48-49` "captcha" `Say1 + (Say1 - 1)` toplama sorusu. |
| Olasılık / etki / güven | ORTA / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `RNGCryptoServiceProvider` ile 6 haneli PIN, deneme sınırı, süre. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Kod incelemesi ile doğrula: `ERPPRO/Class/Dao/Islem/FrmExLimit.vb:50-53` (`Left(GetNewGUID, 2)` → her karakterin `Asc` değeri birleştirilir); `:48-49` "captcha" `Say1 + (Say1 - 1)` toplama |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-35 · öncelik P2 · kanıt: satırlar yukarıda. |
| Wiki bağlantıları | TD-35 |
POTANSİYEL ERR-POT-036 — TD-36 — `Sistem.Clients` hard delete S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — soft-delete kuralının (`IsDeleted`) dışına çıkan tek DAO silmesi; makine adı string birleştirme. |
| Kod dosyası | `ERPPRO/Class/Dao/Sistem.Clients.vb:232` (`Delete From Sistem.Clients Where ClientName='" & ComputerName & "'`). |
| Kök neden | `Sistem.Clients` hard delete — VB — soft-delete kuralının (`IsDeleted`) dışına çıkan tek DAO silmesi; makine adı string birleştirme. |
| Neden zinciri | Teknik olay: VB — soft-delete kuralının (`IsDeleted`) dışına çıkan tek DAO silmesi; makine adı string birleştirme. ↓ Kök neden: `Sistem.Clients` hard delete ↓ Kanıt: satır yukarıda; diğer 87 dosyada `Update … Set IsDeleted='True'`. |
| Etkilenen veri | `ERPPRO/Class/Dao/Sistem.Clients.vb:232` (`Delete From Sistem.Clients Where ClientName='" & ComputerName & "'`). |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Parametreli sorgu; oturum tablosu için ayrı yaşam döngüsü (süre dolumu). |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-36 · öncelik P3 · kanıt: satır yukarıda; diğer 87 dosyada `Update … Set IsDeleted='True'`. |
| Wiki bağlantıları | TD-36 |
POTANSİYEL ERR-POT-037 — TD-37 — `Program.AfterSave` ondalık değeri `ToString` ile SQL'e gömüyor S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E08 — Yuvarlama / Hassasiyet Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | VB — kültür ondalık ayırıcı `,` ise SQL hatası/yanlış değer; `Utils.Culture` (`Class/Module/Utils.vb:126-139`) `.` zorluyor, ancak yalnız o özellik çağrılan thread'de (INFERRED). |
| Kod dosyası | `ERPPRO/Class/Module/Program.vb:11-14` (`Set Miktar=Adet * " & .OrtMiktar.ToString & "`), iki ayrı `UPDATE`, transaction yok. |
| Kök neden | `Program.AfterSave` ondalık değeri `ToString` ile SQL'e gömüyor — VB — kültür ondalık ayırıcı `,` ise SQL hatası/yanlış değer; `Utils.Culture` (`Class/Module/Utils.vb:126-139`) `.` zorluyor, ancak yalnız o özellik çağrılan thread'de (INFERRED). |
| Neden zinciri | Teknik olay: VB — kültür ondalık ayırıcı `,` ise SQL hatası/yanlış değer; `Utils.Culture` (`Class/Module/Utils.vb:126-139`) `.` zorluyor, ancak yalnız o özellik ça ↓ Kök neden: `Program.AfterSave` ondalık değeri `ToString` ile SQL'e gömüyor ↓ Kanıt: satırlar yukarıda. |
| Etkilenen veri | `ERPPRO/Class/Module/Program.vb:11-14` (`Set Miktar=Adet * " & .OrtMiktar.ToString & "`), iki ayrı `UPDATE`, transaction yok. |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `SqlParameter` (decimal) kullanmak. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-37 · öncelik P3 · kanıt: satırlar yukarıda. |
| İlişkili kayıtlar | ERR-POT-021 |
| Wiki bağlantıları | TD-37 |
POTANSİYEL ERR-POT-038 — TD-38 — Ölü kod ve artıklar S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Teknik belirti | BK — okuma yükü, yanlış yol seçimi. |
| Kod dosyası | `ERPPRO/Class/Module/Utils.vb:198-…` (`cVBEvalProvider` — çağıran yok); `ERPPRO/ERPGOLDV2DataSet.Designer.vb:1800-1992` (`TableAdapterManager.UpdateAll` — çağıran yok); `CodeDesigner/CodeDesigner/UiDesigner/RibbonDesigner/Ribbon.sync-conflict-20180412-175728-MJL5L7R.vb` (vbproj dışında); `ERPPRO/app |
| Kök neden | Ölü kod ve artıklar — BK — okuma yükü, yanlış yol seçimi. |
| Neden zinciri | Teknik olay: BK — okuma yükü, yanlış yol seçimi. ↓ Kök neden: Ölü kod ve artıklar ↓ Kanıt: grep sonuçları (0 çağıran). |
| Etkilenen veri | `ERPPRO/Class/Module/Utils.vb:198-…` (`cVBEvalProvider` — çağıran yok); `ERPPRO/ERPGOLDV2DataSet.Designer.vb:1800-1992` (`TableAdapterManager.UpdateAll` — çağıran yok); `CodeDesigner/CodeDesigner/UiDesigner/RibbonDesigner/Ribbon.sync-conflict-20180412-175728-MJL5L7R.vb` (vbproj dışında); `ERPPRO/app |
| Olasılık / etki / güven | DÜŞÜK / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Silmek; derleme uyarısı "kullanılmayan üye" analizörü. |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-38 · öncelik P3 · kanıt: grep sonuçları (0 çağıran). |
| Wiki bağlantıları | TD-38 |
POTANSİYEL ERR-POT-039 — TD-39 — `Cari.Islemler.VaryantId` adı yanıltıcı — karşı işlem Id'si tutuyor S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Kök neden | `Cari.Islemler.VaryantId` adı yanıltıcı — karşı işlem Id'si tutuyor |
| Neden zinciri | Teknik olay: ↓ Kök neden: `Cari.Islemler.VaryantId` adı yanıltıcı — karşı işlem Id'si tutuyor ↓ Kanıt: |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-39 · öncelik P2 · kanıt: |
| Wiki bağlantıları | TD-39 |
POTANSİYEL ERR-POT-040 — TD-40 — `TxtTarih` kontrolü `Vade` kolonuna yazıyor (iFMaden, iFNakit, Banka Op. Skoru) S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Kök neden | `TxtTarih` kontrolü `Vade` kolonuna yazıyor (iFMaden, iFNakit, Banka Op. Skoru) |
| Neden zinciri | Teknik olay: ↓ Kök neden: `TxtTarih` kontrolü `Vade` kolonuna yazıyor (iFMaden, iFNakit, Banka Op. Skoru) ↓ Kanıt: |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-40 · öncelik P2 · kanıt: |
| Wiki bağlantıları | TD-40 |
POTANSİYEL ERR-POT-041 — TD-41 — `MüşteriŞemasıAIslemFiyatlari` tetikleyicisi: tek satır `Inserted`, sabit kimlikler, korumasız bölme S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Kök neden | `MüşteriŞemasıAIslemFiyatlari` tetikleyicisi: tek satır `Inserted`, sabit kimlikler, korumasız bölme |
| Neden zinciri | Teknik olay: ↓ Kök neden: `MüşteriŞemasıAIslemFiyatlari` tetikleyicisi: tek satır `Inserted`, sabit kimlikler, korumasız bölme ↓ Kanıt: |
| Etkilenen veri | Cari.BakiyeIslem / Stok.StokHaraketleri (türetilmiş bakiye ve stok kayıtları), Sistem.Kurlar |
| Olasılık / etki / güven | YÜKSEK / S2 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-41 · öncelik P1 · kanıt: |
| Wiki bağlantıları | TD-41 |
POTANSİYEL ERR-POT-042 — TD-42 — Devir yalnız 5 tabloyu boşaltıyor; `IslemId` taşıyan diğer tablolar birikiyor S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-036 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E17 — Eski Veri / Legacy Problemi |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-036 Yıl sonu devir işlemi ve devir sonrası fark |
| Kök neden | Devir yalnız 5 tabloyu boşaltıyor; `IslemId` taşıyan diğer tablolar birikiyor |
| Neden zinciri | Teknik olay: ↓ Kök neden: Devir yalnız 5 tabloyu boşaltıyor; `IslemId` taşıyan diğer tablolar birikiyor ↓ Kanıt: |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-42 · öncelik P2 · kanıt: |
| Wiki bağlantıları | TD-42 |
POTANSİYEL ERR-POT-043 — TD-43 — Müşteri adı taşıyan şemalar çekirdek DB'de: `MüşteriŞemasıA`, `MüşteriŞemasıB`, `MüşteriŞemasıC`, `MüşteriŞemasıD` S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Kök neden | Müşteri adı taşıyan şemalar çekirdek DB'de: `MüşteriŞemasıA`, `MüşteriŞemasıB`, `MüşteriŞemasıC`, `MüşteriŞemasıD` |
| Neden zinciri | Teknik olay: ↓ Kök neden: Müşteri adı taşıyan şemalar çekirdek DB'de: `MüşteriŞemasıA`, `MüşteriŞemasıB`, `MüşteriŞemasıC`, `MüşteriŞemasıD` ↓ Kanıt: |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-43 · öncelik P2 · kanıt: |
| Wiki bağlantıları | TD-43 |
POTANSİYEL ERR-POT-044 — TD-44 — Kod tabloları kod enum'unun gerisinde: `IslemTipi` 12–15, `IslemKodu` 14 S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E09 — Konfigürasyon Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Kök neden | Kod tabloları kod enum'unun gerisinde: `IslemTipi` 12–15, `IslemKodu` 14 |
| Neden zinciri | Teknik olay: ↓ Kök neden: Kod tabloları kod enum'unun gerisinde: `IslemTipi` 12–15, `IslemKodu` 14 ↓ Kanıt: |
| Etkilenen veri | Kurulum/bağlantı ayarları (veri etkilenmez) |
| Olasılık / etki / güven | ORTA / S2 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-44 · öncelik P2 · kanıt: |
| Wiki bağlantıları | TD-44 |
POTANSİYEL ERR-POT-045 — TD-45 — 10 ekran canlı DB'de olmayan 8 tabloya yazıyor S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E14 — UI / İş Akışı Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Kök neden | 10 ekran canlı DB'de olmayan 8 tabloya yazıyor |
| Neden zinciri | Teknik olay: ↓ Kök neden: 10 ekran canlı DB'de olmayan 8 tabloya yazıyor ↓ Kanıt: |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-45 · öncelik P2 · kanıt: |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-046 — TD-46 — ANA MENÜ'de arkasında kod olmayan 25 düğme S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E06 — Algoritma Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Kök neden | ANA MENÜ'de arkasında kod olmayan 25 düğme |
| Neden zinciri | Teknik olay: ↓ Kök neden: ANA MENÜ'de arkasında kod olmayan 25 düğme ↓ Kanıt: |
| Olasılık / etki / güven | DÜŞÜK / S3 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-46 · öncelik P3 · kanıt: |
| Wiki bağlantıları | TD-46 |
POTANSİYEL ERR-POT-047 — TD-47 — Rapor fonksiyonları üç şemaya dağılmış: `Report`, `Reports`, `ReportsV2` S3 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-004 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E09 — Konfigürasyon Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-004 Rapor tasarımı / yeni rapor / sütun ekleme / bakiye ekstresi düzenleme (talep) |
| Kök neden | Rapor fonksiyonları üç şemaya dağılmış: `Report`, `Reports`, `ReportsV2` |
| Neden zinciri | Teknik olay: ↓ Kök neden: Rapor fonksiyonları üç şemaya dağılmış: `Report`, `Reports`, `ReportsV2` ↓ Kanıt: |
| Olasılık / etki / güven | DÜŞÜK / S3 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-47 · öncelik P3 · kanıt: |
| Wiki bağlantıları | TD-47 |
POTANSİYEL ERR-POT-048 — TD-48 — `AcceptTransaction` kurulumlar arasında ayrışmış (29.862 ↔ 31.152 krk) S1 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · PF-008 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E05 — Transaction Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Problem ailesi | PF-008 ERP kurulumu (yeni kurulum, sıfır kurulum, kurulum sonrası destek) |
| Kök neden | `AcceptTransaction` kurulumlar arasında ayrışmış (29.862 ↔ 31.152 krk) |
| Neden zinciri | Teknik olay: ↓ Kök neden: `AcceptTransaction` kurulumlar arasında ayrışmış (29.862 ↔ 31.152 krk) ↓ Kanıt: |
| Etkilenen veri | Cari.Islemler + karşı hesap/fatura/RsAktar kayıtları (yarım işlem) |
| Olasılık / etki / güven | YÜKSEK / S1 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-48 · öncelik P1 · kanıt: |
| Wiki bağlantıları | TD-48 |
POTANSİYEL ERR-POT-049 — TD-49 — İş kuralı 55 ekranda DAO dışına gömülü (doğrudan INSERT/UPDATE) S2 · MOD-KOD-KALİTESİ · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-KOD-KALİTESİ |
| Alt modül | Teknik borç |
| Kök neden | İş kuralı 55 ekranda DAO dışına gömülü (doğrudan INSERT/UPDATE) |
| Neden zinciri | Teknik olay: ↓ Kök neden: İş kuralı 55 ekranda DAO dışına gömülü (doğrudan INSERT/UPDATE) ↓ Kanıt: |
| Etkilenen veri | Cari.BakiyeIslem / Stok.StokHaraketleri (türetilmiş bakiye ve stok kayıtları), Sistem.Kurlar |
| Olasılık / etki / güven | ORTA / S2 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | [Ekip tarafından doldurulacak] |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | Statik kod analizi (KB-docs technical-debt) |
| Test senaryosu | Health Check INV-01/04/07/10/15 ile türetilmiş kayıt ve toplam eşitliği doğrula; belirtiyi test verisiyle yeniden üret |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | WIKI TD-49 · öncelik P2 · kanıt: |
| Wiki bağlantıları | TD-49 |
POTANSİYEL ERR-POT-050 — InvalidCastException (CDate) — CreateBTransDoviz.BtnCreateXML_Click S3 · MOD-RAPOR · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S3 — ORTA |
| Modül | MOD-RAPOR |
| Alt modül | Kod |
| Kullanıcı belirtisi | Teknik hata kutusu; XML üretilmez. |
| Teknik belirti | Kullanıcı TxtDonem.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Exception türü | InvalidCastException (CDate) |
| Kod dosyası | ERPPRO/BTRANS/Class/CreateBTransDoviz.vb |
| Class | CreateBTransDoviz |
| Method | BtnCreateXML_Click |
| Satır / bölge | 12 |
| Tetikleme koşulu | Kullanıcı TxtDonem.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Kök neden | Try/Catch var; Catch ex → MsgBox(ex.Message) (teknik İngilizce mesaj 'Conversion from string ... to type Date is not valid'). Ön doğrulama (IsDate/DateTime.TryParse) yok. Form Load'da geçerli varsayılanlar atanıyor. |
| Neden zinciri | Teknik olay: InvalidCastException (CDate) ↓ Yakın neden: Kullanıcı TxtDonem.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.202 ↓ Kök neden: Try/Catch var; Catch ex → MsgBox(ex.Message) (teknik İngilizce mesaj 'Conversion from string ... to type Date is not valid'). Ön doğrulama (IsDate/DateTime.TryP ↓ Kullanıcı etkisi: Teknik hata kutusu; XML üretilmez. |
| Olasılık / etki / güven | ORTA / S3 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): DateTime.TryParseExact('MM.yyyy' / 'dd.MM.yyyy') ile doğrulayıp Türkçe uyarı vermek; DateEdit kullanmak. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Kullanıcı TxtDonem.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · CreateBTransDoviz.vb:12 `Dim ... As Date = CDate(TxtDonem.Text)` / :31 `Catch ex As Exception MsgBox(ex.Message)` |
| İlişkili kayıtlar | ERR-POT-051, ERR-POT-052 |
POTANSİYEL ERR-POT-051 — InvalidCastException (CDate) — CreateBTransDoviz.BtnCreateXML_Click S3 · MOD-RAPOR · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S3 — ORTA |
| Modül | MOD-RAPOR |
| Alt modül | Kod |
| Kullanıcı belirtisi | Teknik hata kutusu; XML üretilmez. |
| Teknik belirti | Kullanıcı TxtBasTarih.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Exception türü | InvalidCastException (CDate) |
| Kod dosyası | ERPPRO/BTRANS/Class/CreateBTransDoviz.vb |
| Class | CreateBTransDoviz |
| Method | BtnCreateXML_Click |
| Satır / bölge | 13 |
| Tetikleme koşulu | Kullanıcı TxtBasTarih.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Kök neden | Try/Catch var; Catch ex → MsgBox(ex.Message) (teknik İngilizce mesaj 'Conversion from string ... to type Date is not valid'). Ön doğrulama (IsDate/DateTime.TryParse) yok. Form Load'da geçerli varsayılanlar atanıyor. |
| Neden zinciri | Teknik olay: InvalidCastException (CDate) ↓ Yakın neden: Kullanıcı TxtBasTarih.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13. ↓ Kök neden: Try/Catch var; Catch ex → MsgBox(ex.Message) (teknik İngilizce mesaj 'Conversion from string ... to type Date is not valid'). Ön doğrulama (IsDate/DateTime.TryP ↓ Kullanıcı etkisi: Teknik hata kutusu; XML üretilmez. |
| Olasılık / etki / güven | ORTA / S3 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): DateTime.TryParseExact('MM.yyyy' / 'dd.MM.yyyy') ile doğrulayıp Türkçe uyarı vermek; DateEdit kullanmak. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Kullanıcı TxtBasTarih.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · CreateBTransDoviz.vb:13 `Dim ... As Date = CDate(TxtBasTarih.Text)` / :31 `Catch ex As Exception MsgBox(ex.Message)` |
| İlişkili kayıtlar | ERR-POT-050, ERR-POT-052 |
POTANSİYEL ERR-POT-052 — InvalidCastException (CDate) — CreateBTransDoviz.BtnCreateXML_Click S3 · MOD-RAPOR · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S3 — ORTA |
| Modül | MOD-RAPOR |
| Alt modül | Kod |
| Kullanıcı belirtisi | Teknik hata kutusu; XML üretilmez. |
| Teknik belirti | Kullanıcı TxtSonTarih.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Exception türü | InvalidCastException (CDate) |
| Kod dosyası | ERPPRO/BTRANS/Class/CreateBTransDoviz.vb |
| Class | CreateBTransDoviz |
| Method | BtnCreateXML_Click |
| Satır / bölge | 14 |
| Tetikleme koşulu | Kullanıcı TxtSonTarih.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Kök neden | Try/Catch var; Catch ex → MsgBox(ex.Message) (teknik İngilizce mesaj 'Conversion from string ... to type Date is not valid'). Ön doğrulama (IsDate/DateTime.TryParse) yok. Form Load'da geçerli varsayılanlar atanıyor. |
| Neden zinciri | Teknik olay: InvalidCastException (CDate) ↓ Yakın neden: Kullanıcı TxtSonTarih.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13. ↓ Kök neden: Try/Catch var; Catch ex → MsgBox(ex.Message) (teknik İngilizce mesaj 'Conversion from string ... to type Date is not valid'). Ön doğrulama (IsDate/DateTime.TryP ↓ Kullanıcı etkisi: Teknik hata kutusu; XML üretilmez. |
| Olasılık / etki / güven | ORTA / S3 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): DateTime.TryParseExact('MM.yyyy' / 'dd.MM.yyyy') ile doğrulayıp Türkçe uyarı vermek; DateEdit kullanmak. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Kullanıcı TxtSonTarih.Text alanına tarih olarak çözümlenemeyen bir metin girip 'XML Oluştur' butonuna basarsa (örn. '13.2026', boş, harf). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · CreateBTransDoviz.vb:14 `Dim ... As Date = CDate(TxtSonTarih.Text)` / :31 `Catch ex As Exception MsgBox(ex.Message)` |
| İlişkili kayıtlar | ERR-POT-050, ERR-POT-051 |
POTANSİYEL ERR-POT-053 — UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) — Dosya.ShowFile S3 · MOD-CARI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S3 — ORTA |
| Modül | MOD-CARI |
| Alt modül | Kod |
| Kullanıcı belirtisi | Teminat/dosya görüntülemede yakalanmamış istisna (ThreadException → hata formu veya sessiz kapanma). |
| Teknik belirti | Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' olur; dosya 'C:\Users\ad.pdf' olarak C:\Users altında oluşturulmaya çalışılır → yetki/dizin hatası. |
| Exception türü | UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) |
| Kod dosyası | ERPPRO/Class/Ext/Genel.DosyaEx.vb |
| Class | Dosya |
| Method | ShowFile |
| Satır / bölge | 81 |
| Tetikleme koşulu | Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' olur; dosya 'C:\Users\ad.pdf' olarak C:\Users altında oluşturulmaya çalışılır → yetki/dizin hatası. |
| Kök neden | FileStream oluşturma Try/Catch dışında (sadece Process.Start Try içinde). DocumentData Is Nothing kontrolü var ama yol kontrolü yok. |
| Neden zinciri | Teknik olay: UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) ↓ Yakın neden: Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. ↓ Kök neden: FileStream oluşturma Try/Catch dışında (sadece Process.Start Try içinde). DocumentData Is Nothing kontrolü var ama yol kontrolü yok. ↓ Kullanıcı etkisi: Teminat/dosya görüntülemede yakalanmamış istisna (ThreadException → hata formu veya sessiz kapanma). |
| Olasılık / etki / güven | ORTA / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Path.ChangeExtension(Path.GetTempFileName(), DocumentType) veya Path.Combine(Path.GetTempPath(), Guid + uzantı) kullanmak; FileStream'i Try/Catch'e almak. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' o |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=HAYIR · ERPPRO/Class/Ext/Genel.DosyaEx.vb:81 `My.Computer.FileSystem.GetTempFileName.Split(".")(0) & DocumentType` ardından `New System.IO.FileStream(TempFileName_, FileMode.Create)` (Try dışında) |
POTANSİYEL ERR-POT-054 — UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) — FrmCariKartEkle.TeminatlarButtonClick S3 · MOD-CARI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S3 — ORTA |
| Modül | MOD-CARI |
| Alt modül | Kod |
| Kullanıcı belirtisi | Teminat/dosya görüntülemede yakalanmamış istisna (ThreadException → hata formu veya sessiz kapanma). |
| Teknik belirti | Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' olur; dosya 'C:\Users\ad.pdf' olarak C:\Users altında oluşturulmaya çalışılır → yetki/dizin hatası. |
| Exception türü | UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) |
| Kod dosyası | ERPPRO/Form/Tanımlamalar/Cari/FrmCariKartEkle.vb |
| Class | FrmCariKartEkle |
| Method | TeminatlarButtonClick |
| Satır / bölge | 234 |
| Tetikleme koşulu | Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' olur; dosya 'C:\Users\ad.pdf' olarak C:\Users altında oluşturulmaya çalışılır → yetki/dizin hatası. |
| Kök neden | FileStream oluşturma Try/Catch dışında (sadece Process.Start Try içinde). DocumentData Is Nothing kontrolü var ama yol kontrolü yok. |
| Neden zinciri | Teknik olay: UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) ↓ Yakın neden: Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. ↓ Kök neden: FileStream oluşturma Try/Catch dışında (sadece Process.Start Try içinde). DocumentData Is Nothing kontrolü var ama yol kontrolü yok. ↓ Kullanıcı etkisi: Teminat/dosya görüntülemede yakalanmamış istisna (ThreadException → hata formu veya sessiz kapanma). |
| Olasılık / etki / güven | ORTA / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Path.ChangeExtension(Path.GetTempFileName(), DocumentType) veya Path.Combine(Path.GetTempPath(), Guid + uzantı) kullanmak; FileStream'i Try/Catch'e almak. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' o |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=HAYIR · ERPPRO/Form/Tanımlamalar/Cari/FrmCariKartEkle.vb:234 `My.Computer.FileSystem.GetTempFileName.Split(".")(0) & DocumentType` ardından `New System.IO.FileStream(TempFileName_, FileMode.Create)` (Try dışında) |
POTANSİYEL ERR-POT-055 — UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) — FrmTeminatEkle.ShowFile S3 · MOD-CARI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S3 — ORTA |
| Modül | MOD-CARI |
| Alt modül | Kod |
| Kullanıcı belirtisi | Teminat/dosya görüntülemede yakalanmamış istisna (ThreadException → hata formu veya sessiz kapanma). |
| Teknik belirti | Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' olur; dosya 'C:\Users\ad.pdf' olarak C:\Users altında oluşturulmaya çalışılır → yetki/dizin hatası. |
| Exception türü | UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) |
| Kod dosyası | ERPPRO/Form/Tanımlamalar/Cari/FrmTeminatEkle.vb |
| Class | FrmTeminatEkle |
| Method | ShowFile |
| Satır / bölge | 58 |
| Tetikleme koşulu | Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' olur; dosya 'C:\Users\ad.pdf' olarak C:\Users altında oluşturulmaya çalışılır → yetki/dizin hatası. |
| Kök neden | FileStream oluşturma Try/Catch dışında (sadece Process.Start Try içinde). DocumentData Is Nothing kontrolü var ama yol kontrolü yok. |
| Neden zinciri | Teknik olay: UnauthorizedAccessException / DirectoryNotFoundException (IndexOutOfRange yanlış pozitif, farklı gerçek risk) ↓ Yakın neden: Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. ↓ Kök neden: FileStream oluşturma Try/Catch dışında (sadece Process.Start Try içinde). DocumentData Is Nothing kontrolü var ama yol kontrolü yok. ↓ Kullanıcı etkisi: Teminat/dosya görüntülemede yakalanmamış istisna (ThreadException → hata formu veya sessiz kapanma). |
| Olasılık / etki / güven | ORTA / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Path.ChangeExtension(Path.GetTempFileName(), DocumentType) veya Path.Combine(Path.GetTempPath(), Guid + uzantı) kullanmak; FileStream'i Try/Catch'e almak. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Split('.')(0) hiçbir zaman IndexOutOfRange atmaz. Gerçek risk: Windows kullanıcı adı veya Temp yolu '.' içeriyorsa (örn. C:\Users\ad.soyad\AppData\Local\Temp\tmpA1.tmp) Split('.')(0) = 'C:\Users\ad' o |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=HAYIR · ERPPRO/Form/Tanımlamalar/Cari/FrmTeminatEkle.vb:58 `My.Computer.FileSystem.GetTempFileName.Split(".")(0) & DocumentType` ardından `New System.IO.FileStream(TempFileName_, FileMode.Create)` (Try dışında) |
POTANSİYEL ERR-POT-056 — InvalidCastException (CInt(DBNull)) — DynamicData.Insert S4 · MOD-SISTEM · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-SISTEM |
| Alt modül | Kod |
| Kullanıcı belirtisi | Teknik hata kutusu. |
| Teknik belirti | SCOPE_IDENTITY() NULL dönerse |
| Exception türü | InvalidCastException (CInt(DBNull)) |
| Kod dosyası | CodeDesigner/CodeDesigner/DynamicData/DynamicData.vb |
| Class | DynamicData |
| Method | Insert |
| Satır / bölge | 105 |
| Tetikleme koşulu | SCOPE_IDENTITY() NULL dönerse |
| Kök neden | Try/Catch → MsgBox(ex.Message) + Return False. |
| Neden zinciri | Teknik olay: InvalidCastException (CInt(DBNull)) ↓ Yakın neden: SCOPE_IDENTITY() NULL dönerse ↓ Kök neden: Try/Catch → MsgBox(ex.Message) + Return False. ↓ Kullanıcı etkisi: Teknik hata kutusu. |
| Olasılık / etki / güven | ÇOK DÜŞÜK / S4 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): DBNull kontrolü. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: SCOPE_IDENTITY() NULL dönerse |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=EVET · DynamicData.vb:105, 115-117 |
POTANSİYEL ERR-POT-057 — SqlException / InvalidCastException (yeniden fırlatılır) — ERPFatura.Save S2 · MOD-EFATURA · Gözlemlendi: HAYIR · PF-007 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-EFATURA |
| Alt modül | ThreadException-AutoErrorHandle |
| Problem ailesi | PF-007 Fatura kesilemiyor / fatura basma / fatura problemi (genel) |
| Kullanıcı belirtisi | E-fatura kaydında yakalanmamış hata (AutoErrorHandle'a bağlı olarak hata formu veya sessiz). |
| Teknik belirti | MERGE sorgusu SqlException atarsa (kısıt, tip, bağlantı) veya `output inserted.*` ilk kolonu int değilse; Catch → `Throw New Exception(ex.Message, ex)`. |
| Exception türü | SqlException / InvalidCastException (yeniden fırlatılır) |
| Kod dosyası | DijitalFatura/Common/ERPFatura.vb |
| Class | ERPFatura |
| Method | Save |
| Satır / bölge | 634 |
| Tetikleme koşulu | MERGE sorgusu SqlException atarsa (kısıt, tip, bağlantı) veya `output inserted.*` ilk kolonu int değilse; Catch → `Throw New Exception(ex.Message, ex)`. |
| Kök neden | İstisna sarılıp yeniden fırlatılır. Çağıran FrmEFaturaBas.FormSave (`If ERP_Fatura.Save = True`, satır 313) ve Extention.vb:62 Try/Catch içinde DEĞİL → Application.ThreadException. |
| Neden zinciri | Teknik olay: SqlException / InvalidCastException (yeniden fırlatılır) ↓ Yakın neden: MERGE sorgusu SqlException atarsa (kısıt, tip, bağlantı) veya `output inserted.*` ilk kolonu int değilse; Catch → `Throw ↓ Kök neden: İstisna sarılıp yeniden fırlatılır. Çağıran FrmEFaturaBas.FormSave (`If ERP_Fatura.Save = True`, satır 313) ve Extention.vb:62 Try/Catch içinde DEĞİL → Applicat ↓ Kullanıcı etkisi: E-fatura kaydında yakalanmamış hata (AutoErrorHandle'a bağlı olarak hata formu veya sessiz). |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | DÜŞÜK / S2 / 75 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Çağıranlarda Try/Catch + kullanıcı mesajı; Save içinde SqlException'ı özel mesaja çevirmek. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: MERGE sorgusu SqlException atarsa (kısıt, tip, bağlantı) veya `output inserted.*` ilk kolonu int değilse; Catch → `Throw New Exception(ex.Message, ex)`. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · ERPFatura.vb:632-640; FrmEFaturaBas.vb:313 |
| İlişkili kayıtlar | ERR-POT-061, ERR-SIL-018, ERR-SIL-019, ERR-SIL-020 |
POTANSİYEL ERR-POT-058 — NullReferenceException (Dt Nothing) — Lisans.FirstDate S2 · MOD-SISTEM · Gözlemlendi: HAYIR · PF-002 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-SISTEM |
| Alt modül | InternalDb-DataTable-Nothing |
| Problem ailesi | PF-002 Lisans girişi / yıllık lisans yenileme (rutin) |
| Kullanıcı belirtisi | Lisans kontrolünde çökme/hata formu (bağlantı sorununda). |
| Teknik belirti | Rows(0): GROUP BY'sız aggregate sorgu her zaman 1 satır döndürür → IndexOutOfRange olmaz. Ancak SQL/bağlantı hatasında InternalDb.DataTable Nothing döner → `Dt.Rows` NRE. |
| Exception türü | NullReferenceException (Dt Nothing) |
| Kod dosyası | ERPPRO/Class/Lisans/Lisans.vb |
| Class | Lisans |
| Method | FirstDate |
| Satır / bölge | 54 |
| Tetikleme koşulu | Rows(0): GROUP BY'sız aggregate sorgu her zaman 1 satır döndürür → IndexOutOfRange olmaz. Ancak SQL/bağlantı hatasında InternalDb.DataTable Nothing döner → `Dt.Rows` NRE. |
| Kök neden | Nothing kontrolü yok. Çağrı zinciri: Utils.CallLisansControl ← Program.Init (Try/Catch → ShowDebugOutput) ve FrmMainForm.FormInit (IsLicensed, Try yok). |
| Neden zinciri | Teknik olay: NullReferenceException (Dt Nothing) ↓ Yakın neden: Rows(0): GROUP BY'sız aggregate sorgu her zaman 1 satır döndürür → IndexOutOfRange olmaz. Ancak SQL/bağlantı hatasında I ↓ Kök neden: Nothing kontrolü yok. Çağrı zinciri: Utils.CallLisansControl ← Program.Init (Try/Catch → ShowDebugOutput) ve FrmMainForm.FormInit (IsLicensed, Try yok). ↓ Kullanıcı etkisi: Lisans kontrolünde çökme/hata formu (bağlantı sorununda). |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | DÜŞÜK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `If Dt IsNot Nothing AndAlso Dt.Rows.Count > 0`. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Rows(0): GROUP BY'sız aggregate sorgu her zaman 1 satır döndürür → IndexOutOfRange olmaz. Ancak SQL/bağlantı hatasında InternalDb.DataTable Nothing döner → `Dt.Rows` NRE. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=HAYIR · Lisans.vb:53-55; InternalDb.vb:113-124 DataTable → Nothing |
| İlişkili kayıtlar | ERR-POT-059 |
POTANSİYEL ERR-POT-059 — NullReferenceException (Dt Nothing) — Lisans.FirstDate S2 · MOD-SISTEM · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-SISTEM |
| Alt modül | InternalDb-DataTable-Nothing |
| Kullanıcı belirtisi | Aynı. |
| Teknik belirti | Aynı. |
| Exception türü | NullReferenceException (Dt Nothing) |
| Kod dosyası | ERPPRO/Class/Lisans/Lisans.vb |
| Class | Lisans |
| Method | FirstDate |
| Satır / bölge | 55 |
| Tetikleme koşulu | Aynı. |
| Kök neden | Aynı. |
| Neden zinciri | Teknik olay: NullReferenceException (Dt Nothing) ↓ Yakın neden: Aynı. ↓ Kök neden: Aynı. ↓ Kullanıcı etkisi: Aynı. |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | DÜŞÜK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Aynı. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Aynı. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=HAYIR · Lisans.vb:55 |
| İlişkili kayıtlar | ERR-POT-058 |
POTANSİYEL ERR-POT-060 — ArgumentException ('Cannot set Column to be null') — Rows(0) yanlış pozitif — Parameters.CreateDataTable S4 · MOD-SISTEM · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-SISTEM |
| Alt modül | Kod |
| Kullanıcı belirtisi | Agent/koşul editörü açılırken yakalanmamış hata. |
| Teknik belirti | Rows(0) satır 71 `Tb.Rows.Add()` ile garanti. Gerçek risk: p.Value Is Nothing olan parametre (AddObject(New Cari.Islem) ile String özellikleri Nothing gelir) DataRow'a Nothing yazılınca ArgumentException. |
| Exception türü | ArgumentException ('Cannot set Column to be null') — Rows(0) yanlış pozitif |
| Kod dosyası | ERPPRO/Designer/Parameters/Parameter.vb |
| Class | Parameters |
| Method | CreateDataTable |
| Satır / bölge | 73 |
| Tetikleme koşulu | Rows(0) satır 71 `Tb.Rows.Add()` ile garanti. Gerçek risk: p.Value Is Nothing olan parametre (AddObject(New Cari.Islem) ile String özellikleri Nothing gelir) DataRow'a Nothing yazılınca ArgumentException. |
| Kök neden | Satır 65-69 Nothing için String kolonu açar ama satır 73'te DBNull'a çevirmez. Çağıran FrmControllerEkle.vb:39 Try dışında. |
| Neden zinciri | Teknik olay: ArgumentException ('Cannot set Column to be null') — Rows(0) yanlış pozitif ↓ Yakın neden: Rows(0) satır 71 `Tb.Rows.Add()` ile garanti. Gerçek risk: p.Value Is Nothing olan parametre (AddObject(New Cari.Islem) ↓ Kök neden: Satır 65-69 Nothing için String kolonu açar ama satır 73'te DBNull'a çevirmez. Çağıran FrmControllerEkle.vb:39 Try dışında. ↓ Kullanıcı etkisi: Agent/koşul editörü açılırken yakalanmamış hata. |
| Olasılık / etki / güven | ORTA / S4 / 70 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `Tb.Rows(0).Item(p.Name) = If(p.Value, DBNull.Value)`. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Rows(0) satır 71 `Tb.Rows.Add()` ile garanti. Gerçek risk: p.Value Is Nothing olan parametre (AddObject(New Cari.Islem) ile String özellikleri Nothing gelir) DataRow'a Nothing yazılınca ArgumentExcept |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=HAYIR · Parameter.vb:64-74; FrmControllerEkle.vb:36-39 |
POTANSİYEL ERR-POT-061 — DivideByZeroException (Decimal bölme) — ERPFatura.ValidateOverUsdLimit S2 · MOD-EFATURA · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-EFATURA |
| Alt modül | ThreadException-AutoErrorHandle |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | E-döviz belgesi gönderirken 'Attempted to divide by zero' yakalanmamış hata (AutoErrorHandle=1: hata formu; 0: sessiz, belge gönderilmez). |
| Teknik belirti | DolarKuru (Decimal) = 0 ise. Kaynaklar: FrmEFaturaBas.vb:295-299 → USD belgede DovizTLKuru (Fiyat 0 ise 0); diğerlerinde `IIf(Transaction.UsdKur=0, Program.GetKur("USD"), UsdKur)` → GetKur, günün USD kuru 0 girilmişse K.Alis=0 döndürür (Program.vb:260-268); DB'den yüklemede DolarKuru NULL/0 kayıt. |
| Exception türü | DivideByZeroException (Decimal bölme) |
| Kod dosyası | DijitalFatura/Common/ERPFatura.vb |
| Class | ERPFatura |
| Method | ValidateOverUsdLimit |
| Satır / bölge | 958 |
| Tetikleme koşulu | DolarKuru (Decimal) = 0 ise. Kaynaklar: FrmEFaturaBas.vb:295-299 → USD belgede DovizTLKuru (Fiyat 0 ise 0); diğerlerinde `IIf(Transaction.UsdKur=0, Program.GetKur("USD"), UsdKur)` → GetKur, günün USD kuru 0 girilmişse K.Alis=0 döndürür (Program.vb:260-268); DB'den yüklemede DolarKuru NULL/0 kayıt. |
| Kök neden | Sıfır kontrolü yok. SendToEntegrator (satır 779) çağrıları FrmEFaturaBas.vb:338 ve FrmEFaturaListesi.vb:39'da Try/Catch DIŞINDA → Application.ThreadException. |
| Neden zinciri | Teknik olay: DivideByZeroException (Decimal bölme) ↓ Yakın neden: DolarKuru (Decimal) = 0 ise. Kaynaklar: FrmEFaturaBas.vb:295-299 → USD belgede DovizTLKuru (Fiyat 0 ise 0); diğerlerinde ↓ Kök neden: Sıfır kontrolü yok. SendToEntegrator (satır 779) çağrıları FrmEFaturaBas.vb:338 ve FrmEFaturaListesi.vb:39'da Try/Catch DIŞINDA → Application.ThreadException. ↓ Kullanıcı etkisi: E-döviz belgesi gönderirken 'Attempted to divide by zero' yakalanmamış hata (AutoErrorHandle=1: hata formu; 0: sessiz, b |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `If DolarKuru = 0 Then ErrorText = "USD kuru tanımsız" : Return False`; FormSave'de DolarKuru=0 doğrulaması. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: DolarKuru (Decimal) = 0 ise. Kaynaklar: FrmEFaturaBas.vb:295-299 → USD belgede DovizTLKuru (Fiyat 0 ise 0); diğerlerinde `IIf(Transaction.UsdKur=0, Program.GetKur("USD"), UsdKur)` → GetKur, günün USD |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=HAYIR · ERPFatura.vb:958 `Dim dolarKarsiligi = DovizMiktar * DovizTLKuru / DolarKuru` (DolarKuru As Decimal, :249) |
| İlişkili kayıtlar | ERR-POT-057, ERR-SIL-018, ERR-SIL-019, ERR-SIL-020 |
POTANSİYEL ERR-POT-062 — OverflowException (Infinity → Decimal) — Ice.Get_eDoviz_Belge S2 · MOD-EFATURA · Gözlemlendi: HAYIR · PF-007 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-EFATURA |
| Alt modül | Kod |
| Problem ailesi | PF-007 Fatura kesilemiyor / fatura basma / fatura problemi (genel) |
| Kullanıcı belirtisi | 'Entegrator faturayı Kabul Etmedi. Hata oluştu!Value was either too large or too small for a Decimal.' mesajı; belge gönderilmez, log e-postası atılır. |
| Teknik belirti | EDocument.Dolar_TL_Kuru (Double) = 0 → Double bölme Infinity → CDec(Infinity) OverflowException ('Value was either too large or too small for a Decimal'). |
| Exception türü | OverflowException (Infinity → Decimal) |
| Kod dosyası | DijitalFatura/Entegrators/Ice.vb |
| Class | Ice |
| Method | Get_eDoviz_Belge |
| Satır / bölge | 368 |
| Tetikleme koşulu | EDocument.Dolar_TL_Kuru (Double) = 0 → Double bölme Infinity → CDec(Infinity) OverflowException ('Value was either too large or too small for a Decimal'). |
| Kök neden | Sıfır kontrolü yok; SendInvoice (Ice.vb:116-194) Try/Catch ile yakalar → DeleteSettings(Auth) + EDovizResponseResult(Message='Hata oluştu!...'). |
| Neden zinciri | Teknik olay: OverflowException (Infinity → Decimal) ↓ Yakın neden: EDocument.Dolar_TL_Kuru (Double) = 0 → Double bölme Infinity → CDec(Infinity) OverflowException ('Value was either too l ↓ Kök neden: Sıfır kontrolü yok; SendInvoice (Ice.vb:116-194) Try/Catch ile yakalar → DeleteSettings(Auth) + EDovizResponseResult(Message='Hata oluştu!...'). ↓ Kullanıcı etkisi: 'Entegrator faturayı Kabul Etmedi. Hata oluştu!Value was either too large or too small for a Decimal.' mesajı; belge gön |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Gönderim öncesi Dolar_TL_Kuru/Doviz_TL_Kuru/DovizMiktar > 0 doğrulaması ve anlaşılır Türkçe mesaj. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: EDocument.Dolar_TL_Kuru (Double) = 0 → Double bölme Infinity → CDec(Infinity) OverflowException ('Value was either too large or too small for a Decimal'). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · Ice.vb:368 `CDec(EDocument.Doviz_TL_Kuru / EDocument.Dolar_TL_Kuru)` |
| İlişkili kayıtlar | ERR-POT-063, ERR-POT-064 |
POTANSİYEL ERR-POT-063 — OverflowException (Infinity → Decimal) — Ice.Get_eDoviz_Belge S2 · MOD-EFATURA · Gözlemlendi: HAYIR · PF-018 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-EFATURA |
| Alt modül | Kod |
| Problem ailesi | PF-018 e-Belge entegratör güncellemesi / entegratör reddi (Uyumsoft, ICE, Mysoft, QR/dijital fatura) |
| Kullanıcı belirtisi | Entegratör hata mesajı. |
| Teknik belirti | EDocument.DovizMiktar (Double) = 0 → Decimal/Double → Infinity → `Dim Fiyat As Decimal` atamasında OverflowException. Cari.Islem.Save Miktar=0'ı reddettiği için (Cari.Islem.vb:513) düşük olasılık. |
| Exception türü | OverflowException (Infinity → Decimal) |
| Kod dosyası | DijitalFatura/Entegrators/Ice.vb |
| Class | Ice |
| Method | Get_eDoviz_Belge |
| Satır / bölge | 376 |
| Tetikleme koşulu | EDocument.DovizMiktar (Double) = 0 → Decimal/Double → Infinity → `Dim Fiyat As Decimal` atamasında OverflowException. Cari.Islem.Save Miktar=0'ı reddettiği için (Cari.Islem.vb:513) düşük olasılık. |
| Kök neden | SendInvoice Try/Catch. |
| Neden zinciri | Teknik olay: OverflowException (Infinity → Decimal) ↓ Yakın neden: EDocument.DovizMiktar (Double) = 0 → Decimal/Double → Infinity → `Dim Fiyat As Decimal` atamasında OverflowException. Ca ↓ Kök neden: SendInvoice Try/Catch. ↓ Kullanıcı etkisi: Entegratör hata mesajı. |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | DÜŞÜK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Miktar>0 doğrulaması. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: EDocument.DovizMiktar (Double) = 0 → Decimal/Double → Infinity → `Dim Fiyat As Decimal` atamasında OverflowException. Cari.Islem.Save Miktar=0'ı reddettiği için (Cari.Islem.vb:513) düşük olasılık. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · Ice.vb:374-377 |
| İlişkili kayıtlar | ERR-POT-062, ERR-POT-064 |
POTANSİYEL ERR-POT-064 — DivideByZeroException (Decimal) — Ice.Get_eDoviz_Belge S2 · MOD-EFATURA · Gözlemlendi: HAYIR · PF-018 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-EFATURA |
| Alt modül | Kod |
| Problem ailesi | PF-018 e-Belge entegratör güncellemesi / entegratör reddi (Uyumsoft, ICE, Mysoft, QR/dijital fatura) |
| Kullanıcı belirtisi | Entegratör hata mesajı ('Attempted to divide by zero'). |
| Teknik belirti | tlKarsilikKuru (Decimal) = 0: Kıymetli maden SATIM'da tlKarsilikKuru = Fiyat = (Tutar - Vergi)/Miktar → Tutar 0 veya Vergi=Tutar ise 0. |
| Exception türü | DivideByZeroException (Decimal) |
| Kod dosyası | DijitalFatura/Entegrators/Ice.vb |
| Class | Ice |
| Method | Get_eDoviz_Belge |
| Satır / bölge | 449 |
| Tetikleme koşulu | tlKarsilikKuru (Decimal) = 0: Kıymetli maden SATIM'da tlKarsilikKuru = Fiyat = (Tutar - Vergi)/Miktar → Tutar 0 veya Vergi=Tutar ise 0. |
| Kök neden | SendInvoice Try/Catch. |
| Neden zinciri | Teknik olay: DivideByZeroException (Decimal) ↓ Yakın neden: tlKarsilikKuru (Decimal) = 0: Kıymetli maden SATIM'da tlKarsilikKuru = Fiyat = (Tutar - Vergi)/Miktar → Tutar 0 veya Ver ↓ Kök neden: SendInvoice Try/Catch. ↓ Kullanıcı etkisi: Entegratör hata mesajı ('Attempted to divide by zero'). |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | DÜŞÜK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kur sıfır kontrolü. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: tlKarsilikKuru (Decimal) = 0: Kıymetli maden SATIM'da tlKarsilikKuru = Fiyat = (Tutar - Vergi)/Miktar → Tutar 0 veya Vergi=Tutar ise 0. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · Ice.vb:449 `.TL_Karsilik_Kuru = 1 / tlKarsilikKuru` (Decimal, Reference.vb:12817) |
| İlişkili kayıtlar | ERR-POT-062, ERR-POT-063 |
POTANSİYEL ERR-POT-065 — OverflowException (Infinity → Decimal) — MySoft.Get_eDoviz_Belge S2 · MOD-EFATURA · Gözlemlendi: HAYIR · PF-018 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-EFATURA |
| Alt modül | Kod |
| Problem ailesi | PF-018 e-Belge entegratör güncellemesi / entegratör reddi (Uyumsoft, ICE, Mysoft, QR/dijital fatura) |
| Kullanıcı belirtisi | Entegratör hata mesajı. |
| Teknik belirti | Dolar_TL_Kuru = 0 → Double bölme Infinity → `CalculationRate As Decimal` atamasında OverflowException. |
| Exception türü | OverflowException (Infinity → Decimal) |
| Kod dosyası | DijitalFatura/Entegrators/MySoft.vb |
| Class | MySoft |
| Method | Get_eDoviz_Belge |
| Satır / bölge | 557 |
| Tetikleme koşulu | Dolar_TL_Kuru = 0 → Double bölme Infinity → `CalculationRate As Decimal` atamasında OverflowException. |
| Kök neden | SendInvoice (MySoft.vb:108-174) Try/Catch. |
| Neden zinciri | Teknik olay: OverflowException (Infinity → Decimal) ↓ Yakın neden: Dolar_TL_Kuru = 0 → Double bölme Infinity → `CalculationRate As Decimal` atamasında OverflowException. ↓ Kök neden: SendInvoice (MySoft.vb:108-174) Try/Catch. ↓ Kullanıcı etkisi: Entegratör hata mesajı. |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kur > 0 doğrulaması. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Dolar_TL_Kuru = 0 → Double bölme Infinity → `CalculationRate As Decimal` atamasında OverflowException. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · MySoft.vb:554 `Dim CalculationRate As Decimal = 0` / :557 |
| İlişkili kayıtlar | ERR-SIL-022, ERR-SIL-023 |
POTANSİYEL ERR-POT-066 — FormatException (Convert.ToDecimal("∞")) — Uyumsoft.Get_eDoviz_Belge S2 · MOD-EFATURA · Gözlemlendi: HAYIR · PF-018 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-EFATURA |
| Alt modül | Kod |
| Problem ailesi | PF-018 e-Belge entegratör güncellemesi / entegratör reddi (Uyumsoft, ICE, Mysoft, QR/dijital fatura) |
| Kullanıcı belirtisi | Entegratör hata mesajı ('Input string was not in a correct format'). |
| Teknik belirti | Dolar_TL_Kuru = 0 → Infinity.ToString("N5") = '∞' → Convert.ToDecimal FormatException. |
| Exception türü | FormatException (Convert.ToDecimal("∞")) |
| Kod dosyası | DijitalFatura/Entegrators/Uyumsoft.vb |
| Class | Uyumsoft |
| Method | Get_eDoviz_Belge |
| Satır / bölge | 844 |
| Tetikleme koşulu | Dolar_TL_Kuru = 0 → Infinity.ToString("N5") = '∞' → Convert.ToDecimal FormatException. |
| Kök neden | SendInvoice (Uyumsoft.vb:141-194) Try/Catch. |
| Neden zinciri | Teknik olay: FormatException (Convert.ToDecimal("∞")) ↓ Yakın neden: Dolar_TL_Kuru = 0 → Infinity.ToString("N5") = '∞' → Convert.ToDecimal FormatException. ↓ Kök neden: SendInvoice (Uyumsoft.vb:141-194) Try/Catch. ↓ Kullanıcı etkisi: Entegratör hata mesajı ('Input string was not in a correct format'). |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | ORTA / S2 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kur > 0 doğrulaması. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Dolar_TL_Kuru = 0 → Infinity.ToString("N5") = '∞' → Convert.ToDecimal FormatException. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · Uyumsoft.vb:844 |
| İlişkili kayıtlar | ERR-POT-067 |
POTANSİYEL ERR-POT-067 — FormatException (Convert.ToDecimal("∞")) — Uyumsoft.Get_eDoviz_Belge S2 · MOD-EFATURA · Gözlemlendi: HAYIR · PF-018 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S2 — YÜKSEK |
| Modül | MOD-EFATURA |
| Alt modül | Kod |
| Problem ailesi | PF-018 e-Belge entegratör güncellemesi / entegratör reddi (Uyumsoft, ICE, Mysoft, QR/dijital fatura) |
| Kullanıcı belirtisi | Entegratör hata mesajı. |
| Teknik belirti | SATIM'da Doviz_TL_Kuru = 0 → 1/0 → '∞' → FormatException. |
| Exception türü | FormatException (Convert.ToDecimal("∞")) |
| Kod dosyası | DijitalFatura/Entegrators/Uyumsoft.vb |
| Class | Uyumsoft |
| Method | Get_eDoviz_Belge |
| Satır / bölge | 863 |
| Tetikleme koşulu | SATIM'da Doviz_TL_Kuru = 0 → 1/0 → '∞' → FormatException. |
| Kök neden | SendInvoice Try/Catch. |
| Neden zinciri | Teknik olay: FormatException (Convert.ToDecimal("∞")) ↓ Yakın neden: SATIM'da Doviz_TL_Kuru = 0 → 1/0 → '∞' → FormatException. ↓ Kök neden: SendInvoice Try/Catch. ↓ Kullanıcı etkisi: Entegratör hata mesajı. |
| Etkilenen veri | Belirtilen SQL nesnesi / ekran verisi |
| Olasılık / etki / güven | DÜŞÜK / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kur > 0 doğrulaması. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: SATIM'da Doviz_TL_Kuru = 0 → 1/0 → '∞' → FormatException. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · Uyumsoft.vb:863 |
| İlişkili kayıtlar | ERR-POT-066 |
POTANSİYEL ERR-POT-068 — SqlException (tarih boş) — CDate yanlış pozitif — FrmSeriIslem.ListRefresh S4 · MOD-CARI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-CARI |
| Alt modül | Kod |
| Kullanıcı belirtisi | Tarih temizlenip listelenirse SQL hata kutusu, liste boş. |
| Teknik belirti | TxtBTarih/TxtSTarih DateEdit temizlenirse EditValue Nothing → CDate(Nothing) = #01.01.0001# (istisna yok) → SQL'e '0001-01-01' gider; parametre DATETIME ise SqlException (InternalDb MsgBox). |
| Exception türü | SqlException (tarih boş) — CDate yanlış pozitif |
| Kod dosyası | ERPPRO/Controls/Islem Ekranı/Ekran/SeriIslemEkrani/FrmSeriIslem.vb |
| Class | FrmSeriIslem |
| Method | ListRefresh |
| Satır / bölge | 157 |
| Tetikleme koşulu | TxtBTarih/TxtSTarih DateEdit temizlenirse EditValue Nothing → CDate(Nothing) = #01.01.0001# (istisna yok) → SQL'e '0001-01-01' gider; parametre DATETIME ise SqlException (InternalDb MsgBox). |
| Kök neden | Metot Try/Catch (boş) içinde; InternalDb.DataTable hatayı MsgBox ile gösterir. Tarih boş kontrolü yok. |
| Neden zinciri | Teknik olay: SqlException (tarih boş) — CDate yanlış pozitif ↓ Yakın neden: TxtBTarih/TxtSTarih DateEdit temizlenirse EditValue Nothing → CDate(Nothing) = #01.01.0001# (istisna yok) → SQL'e '0001- ↓ Kök neden: Metot Try/Catch (boş) içinde; InternalDb.DataTable hatayı MsgBox ile gösterir. Tarih boş kontrolü yok. ↓ Kullanıcı etkisi: Tarih temizlenip listelenirse SQL hata kutusu, liste boş. |
| Olasılık / etki / güven | DÜŞÜK / S4 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): TxtBTarih.EditValue Is Nothing ise varsayılan tarih atamak. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: TxtBTarih/TxtSTarih DateEdit temizlenirse EditValue Nothing → CDate(Nothing) = #01.01.0001# (istisna yok) → SQL'e '0001-01-01' gider; parametre DATETIME ise SqlException (InternalDb MsgBox). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · FrmSeriIslem.vb:157, 165-166 |
POTANSİYEL ERR-POT-069 — SqlException (tarih boş) — CDate yanlış pozitif — iScreen.ListRefresh S4 · MOD-CARI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-CARI |
| Alt modül | Kod |
| Kullanıcı belirtisi | Aynı. |
| Teknik belirti | Aynı desen (BarEditItem DateEdit). |
| Exception türü | SqlException (tarih boş) — CDate yanlış pozitif |
| Kod dosyası | ERPPRO/Controls/Islem Ekranı/Base Control/iScreen.vb |
| Class | iScreen |
| Method | ListRefresh |
| Satır / bölge | 977 |
| Tetikleme koşulu | Aynı desen (BarEditItem DateEdit). |
| Kök neden | Try/Catch (boş, iScreen.vb:960/993); InternalDb MsgBox. |
| Neden zinciri | Teknik olay: SqlException (tarih boş) — CDate yanlış pozitif ↓ Yakın neden: Aynı desen (BarEditItem DateEdit). ↓ Kök neden: Try/Catch (boş, iScreen.vb:960/993); InternalDb MsgBox. ↓ Kullanıcı etkisi: Aynı. |
| Olasılık / etki / güven | DÜŞÜK / S4 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Aynı. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: Aynı desen (BarEditItem DateEdit). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=KISMEN · iScreen.vb:977 |
| İlişkili kayıtlar | ERR-SIL-030 |
POTANSİYEL ERR-POT-070 — InvalidCastException (CInt(DBNull)/CInt("")) — FrmSiparisGirisi.SaveData S3 · MOD-SIPARIS · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E01 — Uygulama / Kod Exception |
| Severity | S3 — ORTA |
| Modül | MOD-SIPARIS |
| Alt modül | Kod |
| Kullanıcı belirtisi | Sipariş kaydında yakalanmamış hata (teorik). |
| Teknik belirti | CmbHesap (GridLookupEdit).EditValue DBNull veya boş string ise; Nothing → CInt(Nothing)=0 sorunsuz. Veri kaynağı Integer Id olduğundan düşük olasılık. |
| Exception türü | InvalidCastException (CInt(DBNull)/CInt("")) |
| Kod dosyası | ERPPRO/Form/Siparis/FrmSiparisGirisi.vb |
| Class | FrmSiparisGirisi |
| Method | SaveData |
| Satır / bölge | 70 |
| Tetikleme koşulu | CmbHesap (GridLookupEdit).EditValue DBNull veya boş string ise; Nothing → CInt(Nothing)=0 sorunsuz. Veri kaynağı Integer Id olduğundan düşük olasılık. |
| Kök neden | Kontrol yok; SaveData Try/Catch dışında. |
| Neden zinciri | Teknik olay: InvalidCastException (CInt(DBNull)/CInt("")) ↓ Yakın neden: CmbHesap (GridLookupEdit).EditValue DBNull veya boş string ise; Nothing → CInt(Nothing)=0 sorunsuz. Veri kaynağı Integer ↓ Kök neden: Kontrol yok; SaveData Try/Catch dışında. ↓ Kullanıcı etkisi: Sipariş kaydında yakalanmamış hata (teorik). |
| Olasılık / etki / güven | ÇOK DÜŞÜK / S3 / 50 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): `Val("" & CmbHesap.EditValue)` kullanmak. |
| Önleme | Guard (Nothing/DBNull/sıfır) kontrolü + hata loglama |
| Tespit yöntemi | Statik kod analizi + guard/data-flow doğrulaması |
| Test senaryosu | Koşul: CmbHesap (GridLookupEdit).EditValue DBNull veya boş string ise; Nothing → CInt(Nothing)=0 sorunsuz. Veri kaynağı Integer Id olduğundan düşük olasılık. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | Kod taraması (scan_exc.py) + doğrulama · Guard=HAYIR · FrmSiparisGirisi.vb:70 |
POTANSİYEL ERR-POT-071 — SQLR-001 Invalid object name: Cari.Odemeler S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Cari.Odemeler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.Odemeler' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmOdemeListesi (ANA MENÜ FrmMainForm.vb:63 ve işlem ekranı iScreen.vb:1237), FrmOdemeYap, FrmOdemeGirisi |
| Kod dosyası | ERPPRO/Class/Dao/Cari.Odeme.vb:205; ERPPRO/Class/Dao/Cari.Odeme.vb:252; ERPPRO/Class/Dao/Cari.Odeme.vb:295; ERPPRO/Class/Dao/Cari.Odeme.vb:309; ERPPRO/Class/Dao/Cari.Odeme.vb:32; ERPPRO/Class/Dao/Cari.Odeme.vb:324 |
| SQL Object | Cari.Odemeler |
| Tablo | Cari.Odemeler |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.Odemeler' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Cari.Odemeler] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.Odemeler' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kat ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Cari.Odemeler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını göst |
| Etkilenen veri | Cari.Odemeler |
| Olasılık / etki / güven | Yüksek — menüden ve işlem ekranından açılabiliyor / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Cari.Odemeler') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-001 · DB1=HAYIR DB2=HAYIR (TD-45: iki DB'de de yok) BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Cari.Odemeler] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlişkili kayıtlar | ERR-POT-121 |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-072 — SQLR-002 Invalid object name: Genel.IptalOnay S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Genel.IptalOnay'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Genel.IptalOnay' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmIptalOnayListesi (ANA MENÜ FrmMainForm.vb) |
| Kod dosyası | ERPPRO/Class/Dao/IptalOnay.vb:130; ERPPRO/Class/Dao/IptalOnay.vb:172; ERPPRO/Class/Dao/IptalOnay.vb:209; ERPPRO/Class/Dao/IptalOnay.vb:223; ERPPRO/Class/Dao/IptalOnay.vb:238; ERPPRO/Class/Dao/IptalOnay.vb:32 |
| SQL Object | Genel.IptalOnay |
| Tablo | Genel.IptalOnay |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Genel.IptalOnay' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Genel.IptalOnay] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Genel.IptalOnay' nesnesine Select/Insert/Update gönderiyor; nesne DB1 k ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Genel.IptalOnay'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gö |
| Etkilenen veri | Genel.IptalOnay |
| Olasılık / etki / güven | Orta — menüden açılabiliyor / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Genel.IptalOnay') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-002 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Genel.IptalOnay] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-073 — SQLR-003 Invalid object name: Siparis.FiyatListesi S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Siparis.FiyatListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.FiyatListesi' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmModelFiyatEkle (Siparis.FiyatListesiEx), FrmSipModelEkle (FrmSiparisGirisi), FrmCariHesapEkle |
| Kod dosyası | ERPPRO/Class/Dao/Siparis.FiyatListesi.vb:125; ERPPRO/Class/Dao/Siparis.FiyatListesi.vb:150; ERPPRO/Class/Dao/Siparis.FiyatListesi.vb:177; ERPPRO/Class/Dao/Siparis.FiyatListesi.vb:204; ERPPRO/Class/Dao/Siparis.FiyatListesi.vb:218; ERPPRO/Class/Dao/Siparis.FiyatListesi.vb:233; ERPPRO/Class/Dao/Siparis.FiyatListesi.vb:31; ERPPRO/Class/Dao/Siparis.FiyatListesi.vb:54 |
| SQL Object | Siparis.FiyatListesi |
| Tablo | Siparis.FiyatListesi |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.FiyatListesi' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Siparis.FiyatListesi] (8 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.FiyatListesi' nesnesine Select/Insert/Update gönderiyor; nesne ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Siparis.FiyatListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajı |
| Etkilenen veri | Siparis.FiyatListesi |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.FiyatListesi') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-003 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Siparis.FiyatListesi] (8 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-074 — SQLR-004 Invalid object name: Uretim.Eritme S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.Eritme'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Eritme' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | EditEritme (Uretim.Eritmeex) — Üretim eritme ekranı |
| Kod dosyası | ERPPRO/Class/Dao/Uretim.Eritme.vb:216; ERPPRO/Class/Dao/Uretim.Eritme.vb:269; ERPPRO/Class/Dao/Uretim.Eritme.vb:31; ERPPRO/Class/Dao/Uretim.Eritme.vb:321; ERPPRO/Class/Dao/Uretim.Eritme.vb:335; ERPPRO/Class/Dao/Uretim.Eritme.vb:350 |
| SQL Object | Uretim.Eritme |
| Tablo | Uretim.Eritme |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Eritme' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.Eritme] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Eritme' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kat ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.Eritme'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını göst |
| Etkilenen veri | Uretim.Eritme |
| Olasılık / etki / güven | Düşük-Orta (üretim modülü) / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.Eritme') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-004 · DB1=HAYIR DB2=HAYIR (TD-45: iki DB'de de yok) BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.Eritme] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-075 — SQLR-005 Invalid object name: Uretim.Formul S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.Formul'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Formul' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | EditFormulEkle (Uretim.FormulEx), EditEritme |
| Kod dosyası | ERPPRO/Class/Dao/Uretim.Formul.vb:109; ERPPRO/Class/Dao/Uretim.Formul.vb:148; ERPPRO/Class/Dao/Uretim.Formul.vb:188; ERPPRO/Class/Dao/Uretim.Formul.vb:202; ERPPRO/Class/Dao/Uretim.Formul.vb:217; ERPPRO/Class/Dao/Uretim.Formul.vb:32; ERPPRO/Uretim/EditEritme.vb:53 |
| SQL Object | Uretim.Formul |
| Tablo | Uretim.Formul |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Formul' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.Formul] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Formul' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kat ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.Formul'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını göst |
| Etkilenen veri | Uretim.Formul |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.Formul') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-005 · DB1=HAYIR DB2=HAYIR (TD-45: iki DB'de de yok) BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.Formul] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-076 — SQLR-006 Invalid object name: Uretim.FormulDetay S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.FormulDetay'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.FormulDetay' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | EditFormulEkle |
| Kod dosyası | ERPPRO/Class/Dao/Uretim.FormulDetay.vb:117; ERPPRO/Class/Dao/Uretim.FormulDetay.vb:146; ERPPRO/Class/Dao/Uretim.FormulDetay.vb:160; ERPPRO/Class/Dao/Uretim.FormulDetay.vb:175; ERPPRO/Class/Dao/Uretim.FormulDetay.vb:32; ERPPRO/Class/Dao/Uretim.FormulDetay.vb:88; ERPPRO/Uretim/EditFormulEkle.vb:103 |
| SQL Object | Uretim.FormulDetay |
| Tablo | Uretim.FormulDetay |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.FormulDetay' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.FormulDetay] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.FormulDetay' nesnesine Select/Insert/Update gönderiyor; nesne DB ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.FormulDetay'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını |
| Etkilenen veri | Uretim.FormulDetay |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.FormulDetay') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-006 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.FormulDetay] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-077 — SQLR-007 Invalid object name: Uretim.ModelPartiBilgileri S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.ModelPartiBilgileri'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.ModelPartiBilgileri' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | EditModelPartiBilgileri, FrmPartiEkle |
| Kod dosyası | ERPPRO/Class/Dao/Uretim.ModelPartiBilgileri.vb:122; ERPPRO/Class/Dao/Uretim.ModelPartiBilgileri.vb:155; ERPPRO/Class/Dao/Uretim.ModelPartiBilgileri.vb:188; ERPPRO/Class/Dao/Uretim.ModelPartiBilgileri.vb:202; ERPPRO/Class/Dao/Uretim.ModelPartiBilgileri.vb:217; ERPPRO/Class/Dao/Uretim.ModelPartiBilgileri.vb:30; ERPPRO/Uretim/FrmPartiEkle.vb:17 |
| SQL Object | Uretim.ModelPartiBilgileri |
| Tablo | Uretim.ModelPartiBilgileri |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.ModelPartiBilgileri' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.ModelPartiBilgileri] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.ModelPartiBilgileri' nesnesine Select/Insert/Update gönderiyor; ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.ModelPartiBilgileri'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL |
| Etkilenen veri | Uretim.ModelPartiBilgileri |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.ModelPartiBilgileri') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-007 · DB1=HAYIR DB2=HAYIR (TD-45: iki DB'de de yok) BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.ModelPartiBilgileri] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-078 — SQLR-008 Invalid object name: Uretim.Partiler S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.Partiler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Partiler' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmUretimIslemleri (ANA MENÜ), FrmPartiEkle |
| Kod dosyası | ERPPRO/Class/Dao/Uretim.Partiler.vb:156; ERPPRO/Class/Dao/Uretim.Partiler.vb:187; ERPPRO/Class/Dao/Uretim.Partiler.vb:218; ERPPRO/Class/Dao/Uretim.Partiler.vb:232; ERPPRO/Class/Dao/Uretim.Partiler.vb:247; ERPPRO/Class/Dao/Uretim.Partiler.vb:30 |
| SQL Object | Uretim.Partiler |
| Tablo | Uretim.Partiler |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Partiler' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.Partiler] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.Partiler' nesnesine Select/Insert/Update gönderiyor; nesne DB1 k ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.Partiler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gö |
| Etkilenen veri | Uretim.Partiler |
| Olasılık / etki / güven | Orta / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.Partiler') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-008 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.Partiler] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-079 — SQLR-009 Invalid object name: Siparis.GetFiyatListesi S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Siparis.GetFiyatListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetFiyatListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmModelFiyatEkle / Siparis.FiyatListesiEx.vb:31 |
| Kod dosyası | ERPPRO/Class/Ext/Siparis.FiyatListesiEx.vb:31 |
| SQL Object | Siparis.GetFiyatListesi |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetFiyatListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Siparis.GetFiyatListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetFiyatListesi' nesnesine Select gönderiyor; nesne DB1 kataloğ ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Siparis.GetFiyatListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mes |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.GetFiyatListesi') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-009 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Siparis.GetFiyatListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-080 — SQLR-010 Invalid object name: Uretim.GetEritmeListesi S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.GetEritmeListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetEritmeListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Uretim.Eritmeex.vb:17 liste |
| Kod dosyası | ERPPRO/Class/Ext/Uretim.Eritmeex.vb:17 |
| SQL Object | Uretim.GetEritmeListesi |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetEritmeListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.GetEritmeListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetEritmeListesi' nesnesine Select gönderiyor; nesne DB1 kataloğ ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.GetEritmeListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mes |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetEritmeListesi') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-010 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.GetEritmeListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-081 — SQLR-011 Invalid object name: Uretim.GetFormuls S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.GetFormuls'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetFormuls' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Uretim.FormulEx.vb:31 |
| Kod dosyası | ERPPRO/Class/Ext/Uretim.FormulEx.vb:31 |
| SQL Object | Uretim.GetFormuls |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetFormuls' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.GetFormuls] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetFormuls' nesnesine Select gönderiyor; nesne DB1 kataloğunda y ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.GetFormuls'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetFormuls') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-011 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.GetFormuls] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-082 — SQLR-012 Invalid object name: Uretim.GetModelPartiBilgiListesi S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.GetModelPartiBilgiListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetModelPartiBilgiListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Uretim.ModelPartiBilgileri.vb:15 (Ext) |
| Kod dosyası | ERPPRO/Class/Ext/Uretim.ModelPartiBilgileri.vb:15 |
| SQL Object | Uretim.GetModelPartiBilgiListesi |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetModelPartiBilgiListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.GetModelPartiBilgiListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetModelPartiBilgiListesi' nesnesine Select gönderiyor; nesne DB ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.GetModelPartiBilgiListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ha |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetModelPartiBilgiListesi') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-012 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.GetModelPartiBilgiListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-083 — SQLR-013 Invalid object name: Uretim.GetPartiler S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.GetPartiler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetPartiler' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | UretimPartilerEx.vb:15 → FrmUretimIslemleri |
| Kod dosyası | ERPPRO/Class/Ext/UretimPartilerEx.vb:15 |
| SQL Object | Uretim.GetPartiler |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetPartiler' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.GetPartiler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetPartiler' nesnesine Select gönderiyor; nesne DB1 kataloğunda ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.GetPartiler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetPartiler') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-013 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.GetPartiler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-084 — SQLR-014 Invalid object name: Cari.GETOdemeKasaOzeti S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-063 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-063 Kasa bakiyesi / kasa stoğu tutmuyor |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Cari.GETOdemeKasaOzeti'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GETOdemeKasaOzeti' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmOdemeKasa.vb:8 (ödeme kasası özeti) |
| Kod dosyası | ERPPRO/Controls/Islem Ekranı/Ekran/FrmOdemeKasa.vb:8 |
| SQL Object | Cari.GETOdemeKasaOzeti |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GETOdemeKasaOzeti' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Cari.GETOdemeKasaOzeti] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GETOdemeKasaOzeti' nesnesine Select gönderiyor; nesne DB1 kataloğu ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Cari.GETOdemeKasaOzeti'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesa |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Cari.GETOdemeKasaOzeti') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-014 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Cari.GETOdemeKasaOzeti] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-085 — SQLR-015 Invalid object name: Cari.GETOdemeListesi S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Cari.GETOdemeListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GETOdemeListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmOdemeListesi.vb:9,11 (ANA MENÜ FrmMainForm.vb:63; iScreen.vb:1237) |
| Kod dosyası | ERPPRO/Controls/Islem Ekranı/Ekran/FrmOdemeListesi.vb:11; ERPPRO/Controls/Islem Ekranı/Ekran/FrmOdemeListesi.vb:9 |
| SQL Object | Cari.GETOdemeListesi |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GETOdemeListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Cari.GETOdemeListesi] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GETOdemeListesi' nesnesine Select gönderiyor; nesne DB1 kataloğund ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Cari.GETOdemeListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajı |
| Etkilenen veri | İlgili ekranın okuduğu/yazdığı SQL nesnesi |
| Olasılık / etki / güven | Yüksek / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Cari.GETOdemeListesi') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-015 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Cari.GETOdemeListesi] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-086 — SQLR-016 Invalid object name: Organizasyon.Gorevler S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Organizasyon.Gorevler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.Gorevler' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmGorevEkle (ANA MENÜ), SchedulerView |
| Kod dosyası | ERPPRO/Class/Dao/Organizasyon.Gorev.vb:224; ERPPRO/Class/Dao/Organizasyon.Gorev.vb:297; ERPPRO/Class/Dao/Organizasyon.Gorev.vb:32; ERPPRO/Class/Dao/Organizasyon.Gorev.vb:377; ERPPRO/Class/Dao/Organizasyon.Gorev.vb:391; ERPPRO/Class/Dao/Organizasyon.Gorev.vb:406; ERPPRO/Organizasyon/FrmGorevEkle.vb:138; ERPPRO/Organizasyon/FrmGorevEkle.vb:39 |
| SQL Object | Organizasyon.Gorevler |
| Tablo | Organizasyon.Gorevler |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.Gorevler' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Organizasyon.Gorevler] (8 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.Gorevler' nesnesine Select/Insert/Update gönderiyor; nesne ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Organizasyon.Gorevler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesaj |
| Etkilenen veri | Organizasyon.Gorevler |
| Olasılık / etki / güven | Orta / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Organizasyon.Gorevler') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-016 · DB1=HAYIR DB2=HAYIR (TD-45: iki DB'de de yok) BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Organizasyon.Gorevler] (8 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlişkili kayıtlar | ERR-POT-087 |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-087 — SQLR-017 Invalid object name: Organizasyon.GorevDagitim S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Organizasyon.GorevDagitim'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GorevDagitim' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmGorevEkle.vb:44, SchedulerView.vb:155 |
| Kod dosyası | ERPPRO/Class/Dao/Organizasyon.Gorev.vb:363; ERPPRO/Class/Dao/Organizasyon.Gorev.vb:365; ERPPRO/Organizasyon/FrmGorevEkle.vb:44; ERPPRO/Organizasyon/Task/SchedulerView.vb:155; ERPPRO/Organizasyon/Task/SchedulerView.vb:160; ERPPRO/Organizasyon/Task/SchedulerView.vb:165 |
| SQL Object | Organizasyon.GorevDagitim |
| Tablo | Organizasyon.GorevDagitim |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GorevDagitim' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Organizasyon.GorevDagitim] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GorevDagitim' nesnesine Select gönderiyor; nesne DB1 katal ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Organizasyon.GorevDagitim'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL m |
| Etkilenen veri | Organizasyon.GorevDagitim |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Organizasyon.GorevDagitim') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-017 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Organizasyon.GorevDagitim] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlişkili kayıtlar | ERR-POT-086 |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-088 — SQLR-018 Invalid object name: Sistem.iException S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Sistem.iException'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Sistem.iException' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Yalnız DAO (Sistem.iException.vb) — çağıran ekran bulunamadı |
| Kod dosyası | ERPPRO/Class/Dao/Sistem.iException.vb:30; ERPPRO/Class/Dao/Sistem.iException.vb:98 |
| SQL Object | Sistem.iException |
| Tablo | Sistem.iException |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Sistem.iException' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Sistem.iException] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Sistem.iException' nesnesine Select/Insert/Update gönderiyor; nesne DB1 ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Sistem.iException'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını |
| Etkilenen veri | Sistem.iException |
| Olasılık / etki / güven | Çok düşük (çağıran ekran bulunamadı — ölü kod) / S4 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Sistem.iException') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-018 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Sistem.iException] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-089 — SQLR-019 Invalid object name: Siparis.PaketHesaplari S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-060 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-060 Cari hesap / kart tanımlama, hesap türü, adres-unvan değişikliği |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Siparis.PaketHesaplari'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.PaketHesaplari' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmAddAccount, FrmPaketEkle (Siparis.PaketEx) |
| Kod dosyası | ERPPRO/Form/Siparis/FrmAddAccount.vb:30; ERPPRO/Form/Siparis/FrmAddAccount.vb:34; ERPPRO/Form/Siparis/FrmPaketEkle.vb:67 |
| SQL Object | Siparis.PaketHesaplari |
| Tablo | Siparis.PaketHesaplari |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.PaketHesaplari' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Siparis.PaketHesaplari] (3 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.PaketHesaplari' nesnesine Select/Insert/Update gönderiyor; nesn ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Siparis.PaketHesaplari'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesa |
| Etkilenen veri | Siparis.PaketHesaplari |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.PaketHesaplari') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-019 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Siparis.PaketHesaplari] (3 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-090 — SQLR-020 Invalid object name: Siparis.ModelAyarBlackList S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Siparis.ModelAyarBlackList'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.ModelAyarBlackList' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmModelKartıEkle.vb:27, FrmSipModelEkle.vb:75 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmModelKartıEkle.vb:27; ERPPRO/Form/Siparis/FrmSipModelEkle.vb:75 |
| SQL Object | Siparis.ModelAyarBlackList |
| Tablo | Siparis.ModelAyarBlackList |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.ModelAyarBlackList' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Siparis.ModelAyarBlackList] (2 referans); Sistem.ERPSCHEMA satırı: VAR (5 satır); TD-45. NOT: ana şema (ERPSCHEMA) bu tabloyu 5 satırla tanımlıyor → DBUpdate çalıştırılınca oluşturulabilir. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.ModelAyarBlackList' nesnesine Select gönderiyor; nesne DB1 kata ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Siparis.ModelAyarBlackList'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL |
| Etkilenen veri | Siparis.ModelAyarBlackList |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.ModelAyarBlackList') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-020 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Siparis.ModelAyarBlackList] (2 referans); Sistem.ERPSCHEMA satırı: VAR (5 satır); TD-45. NOT: ana şema (ERPSCHEMA) bu tabloyu 5 satırla tanımlıyor → DBUpdate çalış |
| İlişkili kayıtlar | ERR-POT-091 |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-091 — SQLR-021 Invalid object name: Siparis.modelayarBlacklist S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Siparis.modelayarBlacklist'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.modelayarBlacklist' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmModelKartıEkle.vb:168,176 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmModelKartıEkle.vb:168; ERPPRO/Form/Siparis/FrmModelKartıEkle.vb:176 |
| SQL Object | Siparis.modelayarBlacklist |
| Tablo | Siparis.modelayarBlacklist |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.modelayarBlacklist' nesnesine Select/Insert/Update gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Siparis.modelayarBlacklist] (2 referans); Sistem.ERPSCHEMA satırı: VAR (5 satır); TD-45. NOT: ana şema (ERPSCHEMA) bu tabloyu 5 satırla tanımlıyor → DBUpdate çalıştırılınca oluşturulabilir. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.modelayarBlacklist' nesnesine Select/Insert/Update gönderiyor; ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Siparis.modelayarBlacklist'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL |
| Etkilenen veri | Siparis.modelayarBlacklist |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.modelayarBlacklist') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-021 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Siparis.modelayarBlacklist] (2 referans); Sistem.ERPSCHEMA satırı: VAR (5 satır); TD-45. NOT: ana şema (ERPSCHEMA) bu tabloyu 5 satırla tanımlıyor → DBUpdate çalış |
| İlişkili kayıtlar | ERR-POT-090 |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-092 — SQLR-022 Invalid object name: Siparis.GetPaketHesapListesi S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-060 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-060 Cari hesap / kart tanımlama, hesap türü, adres-unvan değişikliği |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Siparis.GetPaketHesapListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetPaketHesapListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmPaketEkle.vb:53 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmPaketEkle.vb:53 |
| SQL Object | Siparis.GetPaketHesapListesi |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetPaketHesapListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Siparis.GetPaketHesapListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetPaketHesapListesi' nesnesine Select gönderiyor; nesne DB1 ka ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Siparis.GetPaketHesapListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQ |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.GetPaketHesapListesi') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-022 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Siparis.GetPaketHesapListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-093 — SQLR-023 Invalid object name: Siparis.GetUyumluPaketler S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Siparis.GetUyumluPaketler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetUyumluPaketler' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmSipModelEkle.vb:115 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmSipModelEkle.vb:115 |
| SQL Object | Siparis.GetUyumluPaketler |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetUyumluPaketler' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Siparis.GetUyumluPaketler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetUyumluPaketler' nesnesine Select gönderiyor; nesne DB1 katal ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Siparis.GetUyumluPaketler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL m |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.GetUyumluPaketler') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-023 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Siparis.GetUyumluPaketler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlişkili kayıtlar | ERR-POT-094 |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-094 — SQLR-024 Invalid object name: Siparis.GetLastPrice S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Siparis.GetLastPrice'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetLastPrice' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmSipModelEkle.vb:355 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmSipModelEkle.vb:355 |
| SQL Object | Siparis.GetLastPrice |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetLastPrice' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Siparis.GetLastPrice] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Siparis.GetLastPrice' nesnesine Select gönderiyor; nesne DB1 kataloğund ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Siparis.GetLastPrice'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajı |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.GetLastPrice') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-024 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Siparis.GetLastPrice] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlişkili kayıtlar | ERR-POT-093 |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-095 — SQLR-025 Invalid object name: Uretim.GetFormulDetay S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.GetFormulDetay'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetFormulDetay' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | EditEritme.vb:45, EditFormulEkle.vb:43 |
| Kod dosyası | ERPPRO/Uretim/EditEritme.vb:45; ERPPRO/Uretim/EditFormulEkle.vb:43 |
| SQL Object | Uretim.GetFormulDetay |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetFormulDetay' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.GetFormulDetay] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetFormulDetay' nesnesine Select gönderiyor; nesne DB1 kataloğun ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.GetFormulDetay'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesaj |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetFormulDetay') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-025 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.GetFormulDetay] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-096 — SQLR-026 Invalid object name: Uretim.GetPartiModelListesi S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Uretim.GetPartiModelListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetPartiModelListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmPartiEkle.vb:113 |
| Kod dosyası | ERPPRO/Uretim/FrmPartiEkle.vb:113 |
| SQL Object | Uretim.GetPartiModelListesi |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetPartiModelListesi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Uretim.GetPartiModelListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Uretim.GetPartiModelListesi' nesnesine Select gönderiyor; nesne DB1 kat ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Uretim.GetPartiModelListesi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetPartiModelListesi') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-026 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Uretim.GetPartiModelListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-097 — SQLR-027 Invalid object name: Cari.GetRiskRaporu S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-004 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-004 Rapor tasarımı / yeni rapor / sütun ekleme / bakiye ekstresi düzenleme (talep) |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Cari.GetRiskRaporu'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GetRiskRaporu' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmRiskRaporu (ANA MENÜ FrmMainForm.vb:365) |
| Kod dosyası | ERPPRO/Form/Tanımlamalar/Cari/FrmRiskRaporu.vb:14 |
| SQL Object | Cari.GetRiskRaporu |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GetRiskRaporu' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Cari.GetRiskRaporu] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Cari.GetRiskRaporu' nesnesine Select gönderiyor; nesne DB1 kataloğunda ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Cari.GetRiskRaporu'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını |
| Etkilenen veri | İlgili ekranın okuduğu/yazdığı SQL nesnesi |
| Olasılık / etki / güven | Orta — menüden açılabiliyor / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Cari.GetRiskRaporu') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-027 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Cari.GetRiskRaporu] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-098 — SQLR-028 Invalid object name: Stok.GetTakozIsciligi S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-034 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-034 Stok tutmuyor / stok düzeltme / eksi stok / stok girişi |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Stok.GetTakozIsciligi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Stok.GetTakozIsciligi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Database.vb:625 GetTakozIsciligi ← OldFis/Printing.vb (takoz fişi yazdırma) |
| Kod dosyası | ERPPRO/Class/Module/Database.vb:625 |
| SQL Object | Stok.GetTakozIsciligi |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Stok.GetTakozIsciligi' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Stok.GetTakozIsciligi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Stok.GetTakozIsciligi' nesnesine Select gönderiyor; nesne DB1 kataloğun ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Stok.GetTakozIsciligi'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesaj |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Stok.GetTakozIsciligi') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-028 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Stok.GetTakozIsciligi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-099 — SQLR-029 Invalid object name: Organizasyon.GelenGorevler S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Organizasyon.GelenGorevler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GelenGorevler' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmGorevEkle.vb:105-106, SchedulerView.vb:48 |
| Kod dosyası | ERPPRO/Organizasyon/FrmGorevEkle.vb:105; ERPPRO/Organizasyon/FrmGorevEkle.vb:106; ERPPRO/Organizasyon/Task/SchedulerView.vb:48 |
| SQL Object | Organizasyon.GelenGorevler |
| Tablo | Organizasyon.GelenGorevler |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GelenGorevler' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Organizasyon.GelenGorevler] (3 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GelenGorevler' nesnesine Select gönderiyor; nesne DB1 kata ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Organizasyon.GelenGorevler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL |
| Etkilenen veri | Organizasyon.GelenGorevler |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Organizasyon.GelenGorevler') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-029 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Organizasyon.GelenGorevler] (3 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-100 — SQLR-030 Invalid object name: Organizasyon.GidenGorevler S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | MsgBox: "Invalid object name 'Organizasyon.GidenGorevler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL mesajını gösterir; DAO kalıbında boş Catch → sessiz False). |
| Teknik belirti | İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GidenGorevler' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | SchedulerView.vb:50 |
| Kod dosyası | ERPPRO/Organizasyon/Task/SchedulerView.vb:50 |
| SQL Object | Organizasyon.GidenGorevler |
| Tablo | Organizasyon.GidenGorevler |
| Tetikleme koşulu | İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GidenGorevler' nesnesine Select gönderiyor; nesne DB1 kataloğunda yok. |
| Kök neden | basedb/out/code_refs2.json code_only[Organizasyon.GidenGorevler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: İlgili ekran açıldığında/kayıt yapıldığında kod 'Organizasyon.GidenGorevler' nesnesine Select gönderiyor; nesne DB1 kata ↓ Kullanıcı etkisi: MsgBox: "Invalid object name 'Organizasyon.GidenGorevler'." — ekran boş kalır ya da kayıt yapılamaz (InternalDb ham SQL |
| Etkilenen veri | Organizasyon.GidenGorevler |
| Olasılık / etki / güven | Düşük / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Ekran/DAO'nun canlı olup olmadığı iş birimiyle netleştirilmeli; ya nesne şemaya (DBUpdate/ERPSCHEMA) eklenmeli ya da ekran menüden kaldırılmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Organizasyon.GidenGorevler') AS ObjId; -- NULL ise nesne yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-030 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · basedb/out/code_refs2.json code_only[Organizasyon.GidenGorevler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| Wiki bağlantıları | TD-45 |
POTANSİYEL ERR-POT-101 — SQLR-031 Invalid object name: Genel.Dosyalar (VIEW) S1 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-010 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-010 Programa giriş yapılamıyor / program açılmıyor (giriş hatası) |
| Kullanıcı belirtisi | İşlem kaydında "Invalid object name 'DOCUMENTS.Genel.Dosyalar'" ya da "Database 'DOCUMENTS' does not exist"; her işlem girişi geri alınır. Doküman ekranlarında aynı hata. |
| Teknik belirti | Genel.Dosyalar bir VIEW: 'Select * from DOCUMENTS.Genel.Dosyalar'. DOCUMENTS veritabanı sunucuda yoksa (DB1 sys.databases: master,tempdb,model,msdb,ERPGOLDV2 — DOCUMENTS YOK) view'ı okuyan her sorgu 208/916 ile düşer. AcceptTransaction her Cari.Islemler INSERT/UPDATE'inde Cari.GetGerekliEvraklar(@SubeId,@HesapId,'True') → Genel.Dosyalar'ı okur. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Cari.AcceptTransaction (Cari.Islemler INSERT/UPDATE tetikleyicisi) → Cari.GetGerekliEvraklar; Genel.EvrakListesi; Sistem.Reset; DAO Genel.Dosya.vb (AddDokuman, evrak ekranları) |
| Kod dosyası | dbclean/analysis_db.json crossdb[1449824277]; ERPPRO/Class/Dao/Genel.Dosya.vb:113,186,252; ERPPRO/Class/Ext/Genel.DosyaEx.vb:23,52 |
| İlgili SQL nesneleri | Genel.Dosyalar, Cari.Islemler, Cari.GetGerekliEvraklar |
| SQL Object | Genel.Dosyalar (VIEW) |
| Tablo | DOCUMENTS.Genel.Dosyalar |
| Tetikleme koşulu | Genel.Dosyalar bir VIEW: 'Select * from DOCUMENTS.Genel.Dosyalar'. DOCUMENTS veritabanı sunucuda yoksa (DB1 sys.databases: master,tempdb,model,msdb,ERPGOLDV2 — DOCUMENTS YOK) view'ı okuyan her sorgu 208/916 ile düşer. AcceptTransaction her Cari.Islemler INSERT/UPDATE'inde Cari.GetGerekliEvraklar(@SubeId,@HesapId,'True') → Genel.Dosyalar'ı okur. |
| Kök neden | modules.json Genel.Dosyalar: 'CREATE View Genel.Dosyalar as Select * from DOCUMENTS.Genel.Dosyalar'; deps.json: Cari.GetGerekliEvraklar→Genel.Dosyalar; AcceptTransaction satır ~112: 'SELECT COUNT(*) FROM Cari.GetGerekliEvraklar(@SubeId,@HesapId,'True')'; misc.json database listesi. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: Genel.Dosyalar bir VIEW: 'Select * from DOCUMENTS.Genel.Dosyalar'. DOCUMENTS veritabanı sunucuda yoksa (DB1 sys.database ↓ Kullanıcı etkisi: İşlem kaydında "Invalid object name 'DOCUMENTS.Genel.Dosyalar'" ya da "Database 'DOCUMENTS' does not exist"; her işlem g |
| Etkilenen veri | DOCUMENTS.Genel.Dosyalar |
| Olasılık / etki / güven | DB1'de çok yüksek (DOCUMENTS DB yok, tetikleyici etkin); DB2'de düşük (Genel.Dosyalar gerçek tablo) / S1 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): BASE'de Genel.Dosyalar'ın tablo mu view mi olacağı kararı; cross-DB bağımlılığın kaldırılması. AcceptTransaction'daki evrak kontrolünün DOCUMENTS'e bağımlı olmaması. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT name FROM sys.databases WHERE name='DOCUMENTS'; SELECT OBJECT_DEFINITION(OBJECT_ID('Genel.Dosyalar')); SELECT TOP 1 * FROM Genel.Dosyalar; -- hata verirse kırık |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-031 · DB1=EVET (view) / DOCUMENTS DB: HAYIR DB2=EVET (tablo, KUY_ONLY) BASE=EVET (BASE-CORE) · Guard=HAYIR · modules.json Genel.Dosyalar: 'CREATE View Genel.Dosyalar as Select * from DOCUMENTS.Genel.Dosyalar'; deps.json: Cari.GetGerekliEvraklar→Genel.Dosyalar; AcceptTransaction satır ~112: 'SELECT COUNT( |
| İlişkili kayıtlar | ERR-POT-138, ERR-POT-139, ERR-SIL-031 |
POTANSİYEL ERR-POT-102 — SQLR-032 Invalid object name: LiveUpdate.Version / LiveUpdate.SetVersion / LiveUpdate.Lock / LiveUpdate.UnLock S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | Sürüm kontrolü sırasında 'Invalid object name LiveUpdate.VersionHistory_' — yalnız kilit senaryosunda. |
| Teknik belirti | Prosedürler 'LiveUpdate.VersionHistory_' (kilitli ad) tablosuna başvuruyor; tablo DB1'de yok. Ancak her dal OBJECT_ID('LiveUpdate.VersionHistory') IS NOT NULL kontrolü ile korunuyor (deferred name resolution). Yalnız Lock çağrılmış ve VersionHistory→VersionHistory_ yeniden adlandırılmışken tetiklenir. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | ConfigurationForm.vb:270 (LiveUpdate sürüm kontrolü) |
| Kod dosyası | ERPPRO/Configuration/ConfigurationForm.vb:270 |
| İlgili SQL nesneleri | LiveUpdate.Version, LiveUpdate.SetVersion, LiveUpdate.Lock, LiveUpdate.UnLock, LiveUpdate.VersionHistory |
| SQL Object | LiveUpdate.Version / LiveUpdate.SetVersion / LiveUpdate.Lock / LiveUpdate.UnLock |
| Tablo | LiveUpdate.VersionHistory_ |
| Tetikleme koşulu | Prosedürler 'LiveUpdate.VersionHistory_' (kilitli ad) tablosuna başvuruyor; tablo DB1'de yok. Ancak her dal OBJECT_ID('LiveUpdate.VersionHistory') IS NOT NULL kontrolü ile korunuyor (deferred name resolution). Yalnız Lock çağrılmış ve VersionHistory→VersionHistory_ yeniden adlandırılmışken tetiklenir. |
| Kök neden | analysis_db.json unresolved[148911602,484912799]='LiveUpdate.VersionHistory_'; analysis.json unresolved_in_base. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: Prosedürler 'LiveUpdate.VersionHistory_' (kilitli ad) tablosuna başvuruyor; tablo DB1'de yok. Ancak her dal OBJECT_ID('L ↓ Kullanıcı etkisi: Sürüm kontrolü sırasında 'Invalid object name LiveUpdate.VersionHistory_' — yalnız kilit senaryosunda. |
| Etkilenen veri | LiveUpdate.VersionHistory_ |
| Olasılık / etki / güven | Düşük / S4 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Lock/UnLock'un sp_rename ile tablo adı değiştirme yaklaşımı yerine bir kilit kolonu; unresolved referansın BASE build'inde bilinçli bırakılması. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('LiveUpdate.VersionHistory'), OBJECT_ID('LiveUpdate.VersionHistory_'); |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-032 · DB1=EVET (proc) / VersionHistory_: HAYIR DB2=BİLİNMİYOR BASE=EVET (Version BASE-CORE; Lock/UnLock/SetVersion UNKNOWN) · Guard=EVET (OBJECT_ID kontrolü) · analysis_db.json unresolved[148911602,484912799]='LiveUpdate.VersionHistory_'; analysis.json unresolved_in_base. |
| İlişkili kayıtlar | ERR-SIL-031 |
POTANSİYEL ERR-POT-103 — SQLR-033 Invalid object name: Sistem.FromERP S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-060 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-060 Cari hesap / kart tanımlama, hesap türü, adres-unvan değişikliği |
| Kullanıcı belirtisi | Hesap aktarımı ekranında 'Invalid object name …dbo.Firmalar' ya da 'Column name or number of supplied values does not match table definition'. |
| Teknik belirti | Proc, kullanıcı combosundan gelen @Database adıyla '<db>.dbo.Firmalar' / 'dbo.Birimler_' tablolarına dinamik SQL (exec(@HesapQuery)) üretir. Kaynak DB/tablo yoksa 208. Ayrıca 'Insert Into Cari.Hesaplar Select …' KOLON LİSTESİZ 41 değer üretiyor; Cari.Hesaplar DB1'de 57 kolon ve ilk kolon Id IDENTITY → 213 'Column name or number of supplied values does not match table definition' (ya da 544). |
| SQL hata no | 208 (ya da 213 kolon sayısı) |
| SQL hata mesajı | Invalid object name |
| Ekran | FrmHesapAktar (ANA MENÜ) → 'Sistem.FromERP <Sirket>,<Sube>,<MasterKart>' |
| Kod dosyası | ERPPRO/Form/Tanımlamalar/Sistem/FrmHesapAktar.vb:22 |
| İlgili SQL nesneleri | Sistem.FromERP, dbo.BakiyeIslem, Cari.Hesaplar |
| SQL Object | Sistem.FromERP |
| Tablo | <@Database>.dbo.Firmalar, <@Database>.dbo.Birimler_, <@Database>.dbo.BakiyeIslem; hedef Cari.Hesaplar |
| Tetikleme koşulu | Proc, kullanıcı combosundan gelen @Database adıyla '<db>.dbo.Firmalar' / 'dbo.Birimler_' tablolarına dinamik SQL (exec(@HesapQuery)) üretir. Kaynak DB/tablo yoksa 208. Ayrıca 'Insert Into Cari.Hesaplar Select …' KOLON LİSTESİZ 41 değer üretiyor; Cari.Hesaplar DB1'de 57 kolon ve ilk kolon Id IDENTITY → 213 'Column name or number of supplied values does not match table definition' (ya da 544). |
| Kök neden | modules.json Sistem.FromERP: '@HesapQuery = Insert Into Cari.Hesaplar Select Id as OldFirmaId,… from ' + @DataBase + '.dbo.Firmalar'; columns.json Cari.Hesaplar 57 kolon, Id identity; analysis.json unresolved_in_base['Sistem.FromERP']. |
| Neden zinciri | Teknik olay: SQL 208 (ya da 213 kolon sayısı) Invalid object name ↓ Yakın neden: Proc, kullanıcı combosundan gelen @Database adıyla '<db>.dbo.Firmalar' / 'dbo.Birimler_' tablolarına dinamik SQL (exec(@ ↓ Kullanıcı etkisi: Hesap aktarımı ekranında 'Invalid object name …dbo.Firmalar' ya da 'Column name or number of supplied values does not ma |
| Etkilenen veri | <@Database>.dbo.Firmalar, <@Database>.dbo.Birimler_, <@Database>.dbo.BakiyeIslem; hedef Cari.Hesaplar |
| Olasılık / etki / güven | Yüksek (ekran her çalıştırıldığında 213 kaçınılmaz) / S2 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Eski ERP'den aktarım prosedürü BASE kapsamından çıkarılmalı ya da kolon listesiyle yeniden yazılmalı; @Database için QUOTENAME/whitelist. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM sys.columns WHERE object_id=OBJECT_ID('Cari.Hesaplar'); -- 57; proc metnindeki select listesi 41 değer |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-033 · DB1=EVET (proc) DB2=BİLİNMİYOR BASE=EVET (BASE-CORE, unresolved: dbo.firmalar, dbo.birimler_) · Guard=HAYIR · modules.json Sistem.FromERP: '@HesapQuery = Insert Into Cari.Hesaplar Select Id as OldFirmaId,… from ' + @DataBase + '.dbo.Firmalar'; columns.json Cari.Hesaplar 57 kolon, Id identity; analysis.json un |
| İlişkili kayıtlar | ERR-POT-133, ERR-POT-139 |
POTANSİYEL ERR-POT-104 — SQLR-034 Invalid object name: dbo.sp_DevirIslemiYap S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-036 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-036 Yıl sonu devir işlemi ve devir sonrası fark |
| Kullanıcı belirtisi | Çalıştırılırsa 'Invalid object name Cari.IslemlerDetalari' vb.; devir yarım kalır (TRUNCATE sonrası). |
| Teknik belirti | Proc ERPGLOBAL veritabanına (cross-DB) ve çözümlenemeyen 4 nesneye (Cari.bilancolar, Cari.islemlerdetalari [yazım hatası], Sistem.bakiyeislem, dbo.company) başvuruyor; IDENTITY_INSERT Cari.Islemler ON ve tetikleyici disable/enable dinamik SQL içeriyor. |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Koddan çağıran yok (grep 0); yalnız DB içi/manuel |
| İlgili SQL nesneleri | dbo.sp_DevirIslemiYap, Cari.Islemler |
| SQL Object | dbo.sp_DevirIslemiYap |
| Tablo | ERPGLOBAL.dbo.Company; Cari.Bilancolar; Cari.IslemlerDetalari; Sistem.BakiyeIslem |
| Tetikleme koşulu | Proc ERPGLOBAL veritabanına (cross-DB) ve çözümlenemeyen 4 nesneye (Cari.bilancolar, Cari.islemlerdetalari [yazım hatası], Sistem.bakiyeislem, dbo.company) başvuruyor; IDENTITY_INSERT Cari.Islemler ON ve tetikleyici disable/enable dinamik SQL içeriyor. |
| Kök neden | analysis.json rows['dbo.sp_DevirIslemiYap'].unresolved=['Cari.bilancolar','Cari.islemlerdetalari','Sistem.bakiyeislem','dbo.company']; analysis_db.json crossdb[1583396760]='ERPGLOBAL.Dbo.Company'; modül metninde 'SET IDENTITY_INSERT Cari.Islemler ON'. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: Proc ERPGLOBAL veritabanına (cross-DB) ve çözümlenemeyen 4 nesneye (Cari.bilancolar, Cari.islemlerdetalari [yazım hatası ↓ Kullanıcı etkisi: Çalıştırılırsa 'Invalid object name Cari.IslemlerDetalari' vb.; devir yarım kalır (TRUNCATE sonrası). |
| Etkilenen veri | ERPGLOBAL.dbo.Company; Cari.Bilancolar; Cari.IslemlerDetalari; Sistem.BakiyeIslem |
| Olasılık / etki / güven | Düşük (çağıran yok) / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): BASE dışı bırakılmalı; devir mantığı tek yerde (Devir.vb vs sp_DevirIslemiYap vs Sistem.Devir çakışıyor). (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT referenced_schema_name, referenced_entity_name FROM sys.sql_expression_dependencies WHERE referencing_id=OBJECT_ID('dbo.sp_DevirIslemiYap') AND referenced_id IS NULL; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-034 · DB1=EVET (proc) DB2=BİLİNMİYOR BASE=HAYIR (UNKNOWN/EXCLUDE) · Guard=KISMEN (ERPGLOBAL için IF NOT EXISTS CREATE DATABASE) · analysis.json rows['dbo.sp_DevirIslemiYap'].unresolved=['Cari.bilancolar','Cari.islemlerdetalari','Sistem.bakiyeislem','dbo.company']; analysis_db.json crossdb[1583396760]='ERPGLOBAL.Dbo.Company'; mod |
POTANSİYEL ERR-POT-105 — SQLR-035 Invalid object name: Sistem.MT4OrdersSync / Sistem.MT4TicketsSync / Sistem.Reset S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | Çalıştırılırsa 'Invalid object name Sistem.MT4Orders'. |
| Teknik belirti | Prosedürler Sistem.MT4Orders / Sistem.MT4tickets tablolarına başvuruyor; DB1'de yok (Sistem.ERPSCHEMA kataloğunda 'Sistem.GetMT4Orders' 17 satır, 'Sistem.MT4EXPO' 3 satır var → ana şemada MT4 nesneleri mevcut, V2'de kurulmamış). |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Koddan çağıran yok |
| İlgili SQL nesneleri | Sistem.MT4OrdersSync, Sistem.MT4TicketsSync, Sistem.Reset, Sistem.ERPSCHEMA |
| SQL Object | Sistem.MT4OrdersSync / Sistem.MT4TicketsSync / Sistem.Reset |
| Tablo | Sistem.MT4Orders, Sistem.MT4Tickets |
| Tetikleme koşulu | Prosedürler Sistem.MT4Orders / Sistem.MT4tickets tablolarına başvuruyor; DB1'de yok (Sistem.ERPSCHEMA kataloğunda 'Sistem.GetMT4Orders' 17 satır, 'Sistem.MT4EXPO' 3 satır var → ana şemada MT4 nesneleri mevcut, V2'de kurulmamış). |
| Kök neden | analysis_db.json unresolved[1145823194]=['Sistem.MT4Orders'], [1161823251]=['Sistem.MT4tickets'], [1193823365]=['Sistem.MT4Tickets']; dbsql.json Sistem.ERPSCHEMA: Sistem.GetMT4Orders×17, Sistem.MT4EXPO×3. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: Prosedürler Sistem.MT4Orders / Sistem.MT4tickets tablolarına başvuruyor; DB1'de yok (Sistem.ERPSCHEMA kataloğunda 'Siste ↓ Kullanıcı etkisi: Çalıştırılırsa 'Invalid object name Sistem.MT4Orders'. |
| Etkilenen veri | Sistem.MT4Orders, Sistem.MT4Tickets |
| Olasılık / etki / güven | Düşük (çağıran yok; MT4 modülü DB1'de kullanılmıyor) / S4 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): MT4/FX nesne kümesi BASE dışında ayrı bir eklenti paketi olarak ele alınmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Sistem.MT4Orders'), OBJECT_ID('Sistem.MT4Tickets'); |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-035 · DB1=EVET (proc) / tablolar HAYIR DB2=BİLİNMİYOR BASE=HAYIR (UNKNOWN) · Guard=HAYIR · analysis_db.json unresolved[1145823194]=['Sistem.MT4Orders'], [1161823251]=['Sistem.MT4tickets'], [1193823365]=['Sistem.MT4Tickets']; dbsql.json Sistem.ERPSCHEMA: Sistem.GetMT4Orders×17, Sistem.MT4EXP |
POTANSİYEL ERR-POT-106 — SQLR-036 Invalid object name: AifaDev.Reports #16, #19, #29, #30 (DB içinde saklanan rapor SQL'i) S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-004 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Problem ailesi | PF-004 Rapor tasarımı / yeni rapor / sütun ekleme / bakiye ekstresi düzenleme (talep) |
| Kullanıcı belirtisi | Rapor çalıştırılınca "Invalid object name 'MüşteriŞemasıD.GetEnvanter'" vb. |
| Teknik belirti | Kullanıcı bu raporları çalıştırdığında saklanan SQL DB1'de olmayan fonksiyon/view'ları çağırıyor (MüşteriŞemasıD özel nesneleri ya da yeniden adlandırılmış rapor). |
| SQL hata no | 208 |
| SQL hata mesajı | Invalid object name |
| Ekran | Rapor Yöneticisi (Designer/ReportManager) — 'Bakiye Kontrol Raporu', 'Envanter Raporu', 'SilinmisIslemRaporu', 'Bakiye Extresi (Detay)' |
| Kod dosyası | dbclean/dbsql.json src=AifaDev.Reports id=16,19,29,30 |
| İlgili SQL nesneleri | AifaDev.Reports |
| SQL Object | AifaDev.Reports #16, #19, #29, #30 (DB içinde saklanan rapor SQL'i) |
| Tablo | MüşteriŞemasıD.GetCariBakiyeHaraketleri; MüşteriŞemasıD.GetEnvanter; Reports.IptalIslemRaporu; Cari.HesapExtresiDetails |
| Tetikleme koşulu | Kullanıcı bu raporları çalıştırdığında saklanan SQL DB1'de olmayan fonksiyon/view'ları çağırıyor (MüşteriŞemasıD özel nesneleri ya da yeniden adlandırılmış rapor). |
| Kök neden | dbsql.json AifaDev.Reports#16 'Select * From MüşteriŞemasıD.GetCariBakiyeHaraketleri(@HesapId,@Tarih,@BirimId)', #19 'MüşteriŞemasıD.GetEnvanter(@Tarih)', #29 'Reports.IptalIslemRaporu(...)', #30 'Cari.HesapExtresiDetails'; objects.json'da bu adlar yok. |
| Neden zinciri | Teknik olay: SQL 208 Invalid object name ↓ Yakın neden: Kullanıcı bu raporları çalıştırdığında saklanan SQL DB1'de olmayan fonksiyon/view'ları çağırıyor (MüşteriŞemasıD özel ne ↓ Kullanıcı etkisi: Rapor çalıştırılınca "Invalid object name 'MüşteriŞemasıD.GetEnvanter'" vb. |
| Etkilenen veri | MüşteriŞemasıD.GetCariBakiyeHaraketleri; MüşteriŞemasıD.GetEnvanter; Reports.IptalIslemRaporu; Cari.HesapExtresiDetails |
| Olasılık / etki / güven | Orta (rapor listesinde görünür) / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): AifaDev.Reports satırları katalogla doğrulanıp kırık raporlar pasife alınmalı; BASE seed'ine yalnız çözümlenen raporlar. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT Id,ReportName FROM AifaDev.Reports WHERE Query LIKE '%GetEnvanter%' OR Query LIKE '%GetCariBakiyeHaraketleri%' OR Query LIKE '%IptalIslemRaporu%' OR Query LIKE '%HesapExtresiDetails%'; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-036 · DB1=HAYIR DB2=BİLİNMİYOR BASE=HAYIR · Guard=HAYIR · dbsql.json AifaDev.Reports#16 'Select * From MüşteriŞemasıD.GetCariBakiyeHaraketleri(@HesapId,@Tarih,@BirimId)', #19 'MüşteriŞemasıD.GetEnvanter(@Tarih)', #29 'Reports.IptalIslemRaporu(...)', #30 'Car |
POTANSİYEL ERR-POT-107 — SQLR-037 Could not find stored procedure: Reports.GetPozisyonDetay S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-004 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Could not find stored procedure |
| Problem ailesi | PF-004 Rapor tasarımı / yeni rapor / sütun ekleme / bakiye ekstresi düzenleme (talep) |
| Kullanıcı belirtisi | "An insufficient number of arguments were supplied for the procedure or function Reports.GetPozisyonDetay." — Pozisyon Durum raporu boş. |
| Teknik belirti | Fonksiyon (@SubeId,@BasTarih,@SonTarih) 3 parametre bekliyor; kod ve PopupGrid 2 argümanla çağırıyor: Reports.GetPozisyonDetay('tarih1','tarih2'). |
| SQL hata no | 313 (An insufficient number of arguments were supplied) |
| SQL hata mesajı | Could not find stored procedure |
| Ekran | FrmPozisyonDurumRaporu (ANA MENÜ FrmMainForm.vb:162); Design.PopupGrid #5 |
| Kod dosyası | ERPPRO/Form/RefreshGrid/FrmPozisyonDurum.vb:15; dbclean/dbsql.json Design.PopupGrid id=5 |
| İlgili SQL nesneleri | Reports.GetPozisyonDetay |
| SQL Object | Reports.GetPozisyonDetay |
| Tetikleme koşulu | Fonksiyon (@SubeId,@BasTarih,@SonTarih) 3 parametre bekliyor; kod ve PopupGrid 2 argümanla çağırıyor: Reports.GetPozisyonDetay('tarih1','tarih2'). |
| Kök neden | parameters.json Reports.GetPozisyonDetay: @SubeId,@BasTarih,@SonTarih; FrmPozisyonDurum.vb:15 'Reports.GetPozisyonDetay(''" & DateEdit1… & "'',''" & DateEdit2 …'; PopupGrid#5 'Reports.GetPozisyonDetay(getdate(),Getdate())'. |
| Neden zinciri | Teknik olay: SQL 313 (An insufficient number of arguments were supplied) Could not find stored procedure ↓ Yakın neden: Fonksiyon (@SubeId,@BasTarih,@SonTarih) 3 parametre bekliyor; kod ve PopupGrid 2 argümanla çağırıyor: Reports.GetPozisyo ↓ Kullanıcı etkisi: "An insufficient number of arguments were supplied for the procedure or function Reports.GetPozisyonDetay." — Pozisyon D |
| Olasılık / etki / güven | Yüksek (ekran açıldığında her seferinde) / S3 / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Fonksiyon imzası ile çağrılar eşitlenmeli (DB2'deki imza doğrulanmalı — sürüm kayması işareti). (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT p.name FROM sys.parameters p WHERE p.object_id=OBJECT_ID('Reports.GetPozisyonDetay'); -- 3 satır beklenir |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-037 · DB1=EVET DB2=BİLİNMİYOR (DB2'de imza farklı olabilir) BASE=EVET (BASE-CORE) · Guard=HAYIR · parameters.json Reports.GetPozisyonDetay: @SubeId,@BasTarih,@SonTarih; FrmPozisyonDurum.vb:15 'Reports.GetPozisyonDetay(''" & DateEdit1… & "'',''" & DateEdit2 …'; PopupGrid#5 'Reports.GetPozisyonDetay |
POTANSİYEL ERR-POT-108 — SQLR-038 Could not find stored procedure: Reports.ResmiPozisyon S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-040 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Could not find stored procedure |
| Problem ailesi | PF-040 Pozisyon yanlış / aynı birim iki kez / pozisyon güncellenmiyor |
| Kullanıcı belirtisi | "An insufficient number of arguments were supplied for the procedure or function Reports.ResmiPozisyon." |
| Teknik belirti | Fonksiyon @Tarih parametresi bekliyor; 29 rapor tanımı 'Reports.ResmiPozisyon ()' parametresiz çağırıyor (yalnız #67 doğru). |
| SQL hata no | 313 |
| SQL hata mesajı | Could not find stored procedure |
| Ekran | Rapor Yöneticisi — 'Resmi Pozisyon Raporu' (AifaDev.Reports #38–#66, 29 kopya satır) |
| Kod dosyası | dbclean/dbsql.json src=AifaDev.Reports id=38..66 |
| İlgili SQL nesneleri | Reports.ResmiPozisyon, AifaDev.Reports |
| SQL Object | Reports.ResmiPozisyon |
| Tetikleme koşulu | Fonksiyon @Tarih parametresi bekliyor; 29 rapor tanımı 'Reports.ResmiPozisyon ()' parametresiz çağırıyor (yalnız #67 doğru). |
| Kök neden | dbsql.json AifaDev.Reports #38–#66 'Select * from Reports.ResmiPozisyon ()'; parameters.json Reports.ResmiPozisyon: @Tarih. |
| Neden zinciri | Teknik olay: SQL 313 Could not find stored procedure ↓ Yakın neden: Fonksiyon @Tarih parametresi bekliyor; 29 rapor tanımı 'Reports.ResmiPozisyon ()' parametresiz çağırıyor (yalnız #67 doğ ↓ Kullanıcı etkisi: "An insufficient number of arguments were supplied for the procedure or function Reports.ResmiPozisyon." |
| Olasılık / etki / güven | Yüksek (rapor seçilirse) / S3 / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Tekrarlı 29 rapor satırının temizlenmesi; seed'e yalnız #67. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT Id FROM AifaDev.Reports WHERE Query LIKE '%ResmiPozisyon ()%'; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-038 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET (BASE-CORE) · Guard=HAYIR · dbsql.json AifaDev.Reports #38–#66 'Select * from Reports.ResmiPozisyon ()'; parameters.json Reports.ResmiPozisyon: @Tarih. |
POTANSİYEL ERR-POT-109 — SQLR-039 Invalid object name: AifaDev.ExQueryBuilder (TRIGGER on AifaDev.RepositoryItems) S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid object name |
| Kullanıcı belirtisi | Dinamik form alanı eklerken "Cannot find the object 'Query.XXX' because it does not exist or you do not have permissions." |
| Teknik belirti | Tetikleyici yeni bir Owner için view oluşturmak istediğinde her iki dalda da 'Alter View Query.<Owner>' üretiyor ('if OBJECT_ID(@ViewName) is null → Alter View' — CREATE yok). View henüz yoksa ALTER VIEW hata verir → tetikleyici hatası RepositoryItems INSERT'ini geri alır. Ayrıca schema Query yoksa exec('Add Schema Query') → 102 syntax error. |
| SQL hata no | 4902 (Cannot find the object … ALTER VIEW) |
| SQL hata mesajı | Invalid object name |
| Ekran | DataLayout/Repository.vb:21,45 (DynamicForms / depo alan tanımı ekranı) |
| Kod dosyası | ERPPRO/DataLayout/Repository.vb:21,45 |
| İlgili SQL nesneleri | AifaDev.ExQueryBuilder, AifaDev.RepositoryItems |
| SQL Object | AifaDev.ExQueryBuilder (TRIGGER on AifaDev.RepositoryItems) |
| Tablo | Query.<Owner> (dinamik view) |
| Tetikleme koşulu | Tetikleyici yeni bir Owner için view oluşturmak istediğinde her iki dalda da 'Alter View Query.<Owner>' üretiyor ('if OBJECT_ID(@ViewName) is null → Alter View' — CREATE yok). View henüz yoksa ALTER VIEW hata verir → tetikleyici hatası RepositoryItems INSERT'ini geri alır. Ayrıca schema Query yoksa exec('Add Schema Query') → 102 syntax error. |
| Kök neden | modules.json AifaDev.ExQueryBuilder: "if OBJECT_ID (@ViewName) is null BEGIN SET @Query = 'Alter View ' … END ELSE BEGIN SET @Query = 'Alter View ' …"; "exec ('Add Schema Query')". |
| Neden zinciri | Teknik olay: SQL 4902 (Cannot find the object … ALTER VIEW) Invalid object name ↓ Yakın neden: Tetikleyici yeni bir Owner için view oluşturmak istediğinde her iki dalda da 'Alter View Query.<Owner>' üretiyor ('if OB ↓ Kullanıcı etkisi: Dinamik form alanı eklerken "Cannot find the object 'Query.XXX' because it does not exist or you do not have permissions |
| Etkilenen veri | Query.<Owner> (dinamik view) |
| Olasılık / etki / güven | Yüksek — ilk kez tanımlanan her Owner için / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): OBJECT_ID kontrolünde CREATE/ALTER ayrımı; 'Add Schema' → 'CREATE SCHEMA'. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT DISTINCT [Owner] FROM AifaDev.RepositoryItems WHERE IsDeleted=0 AND OBJECT_ID('Query.'+[Owner]) IS NULL; -- view'ı olmayan owner'lar |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-039 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET (BASE-DEPENDENCY) · Guard=HAYIR · modules.json AifaDev.ExQueryBuilder: "if OBJECT_ID (@ViewName) is null BEGIN SET @Query = 'Alter View ' … END ELSE BEGIN SET @Query = 'Alter View ' …"; "exec ('Add Schema Query')". |
POTANSİYEL ERR-POT-110 — SQLR-040 Invalid column name: Cari.Transferler S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | "Invalid column name 'Aciklama'." — kayıt/liste başarısız. |
| Teknik belirti | Kod Cari.Transferler üzerinde 'Aciklama' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| SQL hata no | 207 |
| SQL hata mesajı | Invalid column name |
| Ekran | FrmTransferEkle → FrmTransfer (ANA MENÜ FrmMainForm; GiseEkrani) — kasa/şube transferi kaydı |
| Kod dosyası | ERPPRO/Class/Dao/Cari.Transferler.vb:172 (Insert), :222 (Update) |
| İlgili SQL nesneleri | Cari.Transferler |
| SQL Object | Cari.Transferler |
| Tablo | Cari.Transferler |
| Kolon | Aciklama |
| Tetikleme koşulu | Kod Cari.Transferler üzerinde 'Aciklama' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Kök neden | sql_frags (ERPPRO/Class/Dao/Cari.Transferler.vb:172 (Insert), :222 (Update)); columns.json Cari.Transferler kolon listesinde 'Aciklama' yok. DB2'de Cari.Transferler 32.531 satır — kolon orada olabilir (BİLİNMİYOR). |
| Neden zinciri | Teknik olay: SQL 207 Invalid column name ↓ Yakın neden: Kod Cari.Transferler üzerinde 'Aciklama' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. ↓ Kullanıcı etkisi: "Invalid column name 'Aciklama'." — kayıt/liste başarısız. |
| Etkilenen veri | Cari.Transferler |
| Olasılık / etki / güven | Yüksek (her transfer kaydında) / S2 / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Cari.Transferler','Aciklama'); -- NULL ise kolon yok |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-040 · DB1=HAYIR (kolon) DB2=BİLİNMİYOR BASE=HAYIR (basedb/out/columns.json'da yok) · Guard=HAYIR · sql_frags (ERPPRO/Class/Dao/Cari.Transferler.vb:172 (Insert), :222 (Update)); columns.json Cari.Transferler kolon listesinde 'Aciklama' yok. DB2'de Cari.Transferler 32.531 satır — kolon orada olabilir |
POTANSİYEL ERR-POT-111 — SQLR-041 Invalid column name: Siparis.Paket S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | "Invalid column name 'IsPublic'." — kayıt/liste başarısız. |
| Teknik belirti | Kod Siparis.Paket üzerinde 'IsPublic' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| SQL hata no | 207 |
| SQL hata mesajı | Invalid column name |
| Ekran | FrmPaketEkle (Siparis.PaketEx) |
| Kod dosyası | ERPPRO/Class/Dao/Siparis.Paket.vb:93 (Insert), :126 (Update) |
| İlgili SQL nesneleri | Siparis.Paket |
| SQL Object | Siparis.Paket |
| Tablo | Siparis.Paket |
| Kolon | IsPublic |
| Tetikleme koşulu | Kod Siparis.Paket üzerinde 'IsPublic' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Kök neden | sql_frags (ERPPRO/Class/Dao/Siparis.Paket.vb:93 (Insert), :126 (Update)); columns.json Siparis.Paket kolon listesinde 'IsPublic' yok. |
| Neden zinciri | Teknik olay: SQL 207 Invalid column name ↓ Yakın neden: Kod Siparis.Paket üzerinde 'IsPublic' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. ↓ Kullanıcı etkisi: "Invalid column name 'IsPublic'." — kayıt/liste başarısız. |
| Etkilenen veri | Siparis.Paket |
| Olasılık / etki / güven | Orta / S3 / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Siparis.Paket','IsPublic'); -- NULL ise kolon yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-041 · DB1=HAYIR (kolon) DB2=BİLİNMİYOR BASE=HAYIR (basedb/out/columns.json'da yok) · Guard=HAYIR · sql_frags (ERPPRO/Class/Dao/Siparis.Paket.vb:93 (Insert), :126 (Update)); columns.json Siparis.Paket kolon listesinde 'IsPublic' yok. |
POTANSİYEL ERR-POT-112 — SQLR-042 Invalid column name: Siparis.TakimKartlari S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | "Invalid column name 'Grup'." — kayıt/liste başarısız. |
| Teknik belirti | Kod Siparis.TakimKartlari üzerinde 'Grup' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| SQL hata no | 207 |
| SQL hata mesajı | Invalid column name |
| Ekran | Takım kartı ekleme (FrmTakimKarti — çağıran bulunamadı) |
| Kod dosyası | ERPPRO/Class/Dao/Siparis.TakimKarti.vb:112 (Insert), :163 (Update) |
| İlgili SQL nesneleri | Siparis.TakimKartlari |
| SQL Object | Siparis.TakimKartlari |
| Tablo | Siparis.TakimKartlari |
| Kolon | Grup |
| Tetikleme koşulu | Kod Siparis.TakimKartlari üzerinde 'Grup' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Kök neden | sql_frags (ERPPRO/Class/Dao/Siparis.TakimKarti.vb:112 (Insert), :163 (Update)); columns.json Siparis.TakimKartlari kolon listesinde 'Grup' yok. Sistem.ERPSCHEMA'da 'Siparis.TakimKartlari' için 1 satır var → ana şemada V2'de olmayan bir kolon (muhtemelen Grup) = 'Alter … Add' adayı. |
| Neden zinciri | Teknik olay: SQL 207 Invalid column name ↓ Yakın neden: Kod Siparis.TakimKartlari üzerinde 'Grup' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. ↓ Kullanıcı etkisi: "Invalid column name 'Grup'." — kayıt/liste başarısız. |
| Etkilenen veri | Siparis.TakimKartlari |
| Olasılık / etki / güven | Düşük / S3 / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Siparis.TakimKartlari','Grup'); -- NULL ise kolon yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-042 · DB1=HAYIR (kolon) DB2=BİLİNMİYOR BASE=HAYIR (basedb/out/columns.json'da yok) · Guard=HAYIR · sql_frags (ERPPRO/Class/Dao/Siparis.TakimKarti.vb:112 (Insert), :163 (Update)); columns.json Siparis.TakimKartlari kolon listesinde 'Grup' yok. Sistem.ERPSCHEMA'da 'Siparis.TakimKartlari' için 1 satır |
POTANSİYEL ERR-POT-113 — SQLR-043 Invalid column name: Sistem.CariIslemTipi S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | "Invalid column name 'IsDeleted'." — kayıt/liste başarısız. |
| Teknik belirti | Kod Sistem.CariIslemTipi üzerinde 'IsDeleted' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| SQL hata no | 207 |
| SQL hata mesajı | Invalid column name |
| Ekran | Filtreli ctor; TOList() ayrı ve doğru ('Select * from Sistem.CariIslemTipi') |
| Kod dosyası | ERPPRO/Class/Dao/Sistem.CariIslemTipi.vb:11 (Sub New(Filter): Select * … Where IsDeleted='False') |
| İlgili SQL nesneleri | Sistem.CariIslemTipi |
| SQL Object | Sistem.CariIslemTipi |
| Tablo | Sistem.CariIslemTipi |
| Kolon | IsDeleted |
| Tetikleme koşulu | Kod Sistem.CariIslemTipi üzerinde 'IsDeleted' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Kök neden | sql_frags (ERPPRO/Class/Dao/Sistem.CariIslemTipi.vb:11 (Sub New(Filter): Select * … Where IsDeleted='False')); columns.json Sistem.CariIslemTipi kolon listesinde 'IsDeleted' yok. Tablo kolonları: Id, IslemTipi, Kod. |
| Neden zinciri | Teknik olay: SQL 207 Invalid column name ↓ Yakın neden: Kod Sistem.CariIslemTipi üzerinde 'IsDeleted' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. ↓ Kullanıcı etkisi: "Invalid column name 'IsDeleted'." — kayıt/liste başarısız. |
| Etkilenen veri | Sistem.CariIslemTipi |
| Olasılık / etki / güven | Düşük / S4 / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Sistem.CariIslemTipi','IsDeleted'); -- NULL ise kolon yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-043 · DB1=HAYIR (kolon) DB2=BİLİNMİYOR BASE=HAYIR (basedb/out/columns.json'da yok) · Guard=HAYIR · sql_frags (ERPPRO/Class/Dao/Sistem.CariIslemTipi.vb:11 (Sub New(Filter): Select * … Where IsDeleted='False')); columns.json Sistem.CariIslemTipi kolon listesinde 'IsDeleted' yok. Tablo kolonları: Id, |
POTANSİYEL ERR-POT-114 — SQLR-044 Invalid column name: Cari.Provizyon S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | "Invalid column name 'IsDeleted'." — kayıt/liste başarısız. |
| Teknik belirti | Kod Cari.Provizyon üzerinde 'IsDeleted' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| SQL hata no | 207 |
| SQL hata mesajı | Invalid column name |
| Ekran | Provizyon listesi/silme (Ext) |
| Kod dosyası | ERPPRO/Class/Ext/Cari.Provizyon.vb:57 (TOList), :151, :171 (Delete) |
| İlgili SQL nesneleri | Cari.Provizyon |
| SQL Object | Cari.Provizyon |
| Tablo | Cari.Provizyon |
| Kolon | IsDeleted |
| Tetikleme koşulu | Kod Cari.Provizyon üzerinde 'IsDeleted' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Kök neden | sql_frags (ERPPRO/Class/Ext/Cari.Provizyon.vb:57 (TOList), :151, :171 (Delete)); columns.json Cari.Provizyon kolon listesinde 'IsDeleted' yok. Tabloda IsDeleted yok (Status/StatusId var). |
| Neden zinciri | Teknik olay: SQL 207 Invalid column name ↓ Yakın neden: Kod Cari.Provizyon üzerinde 'IsDeleted' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. ↓ Kullanıcı etkisi: "Invalid column name 'IsDeleted'." — kayıt/liste başarısız. |
| Etkilenen veri | Cari.Provizyon |
| Olasılık / etki / güven | Orta / S3 / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Cari.Provizyon','IsDeleted'); -- NULL ise kolon yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-044 · DB1=HAYIR (kolon) DB2=BİLİNMİYOR BASE=HAYIR (basedb/out/columns.json'da yok) · Guard=HAYIR · sql_frags (ERPPRO/Class/Ext/Cari.Provizyon.vb:57 (TOList), :151, :171 (Delete)); columns.json Cari.Provizyon kolon listesinde 'IsDeleted' yok. Tabloda IsDeleted yok (Status/StatusId var). |
POTANSİYEL ERR-POT-115 — SQLR-045 Invalid column name: Sistem.Users S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | "Invalid column name 'SubeId'." — kayıt/liste başarısız. |
| Teknik belirti | Kod Sistem.Users üzerinde 'SubeId' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| SQL hata no | 207 |
| SQL hata mesajı | Invalid column name |
| Ekran | FrmChangeAccount (çağıran bulunamadı — ölü ekran adayı) |
| Kod dosyası | ERPPRO/Form/Genel/FrmChangeAccount.vb:9 |
| İlgili SQL nesneleri | Sistem.Users |
| SQL Object | Sistem.Users |
| Tablo | Sistem.Users |
| Kolon | SubeId |
| Tetikleme koşulu | Kod Sistem.Users üzerinde 'SubeId' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Kök neden | sql_frags (ERPPRO/Form/Genel/FrmChangeAccount.vb:9); columns.json Sistem.Users kolon listesinde 'SubeId' yok. Şube bilgisi Sistem.UserDetails.SubeId'de. |
| Neden zinciri | Teknik olay: SQL 207 Invalid column name ↓ Yakın neden: Kod Sistem.Users üzerinde 'SubeId' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. ↓ Kullanıcı etkisi: "Invalid column name 'SubeId'." — kayıt/liste başarısız. |
| Etkilenen veri | Sistem.Users |
| Olasılık / etki / güven | Düşük / S4 / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Sistem.Users','SubeId'); -- NULL ise kolon yok |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-045 · DB1=HAYIR (kolon) DB2=BİLİNMİYOR BASE=HAYIR (basedb/out/columns.json'da yok) · Guard=HAYIR · sql_frags (ERPPRO/Form/Genel/FrmChangeAccount.vb:9); columns.json Sistem.Users kolon listesinde 'SubeId' yok. Şube bilgisi Sistem.UserDetails.SubeId'de. |
POTANSİYEL ERR-POT-116 — SQLR-046 Invalid column name: Cari.IslemDetaylari / Cari.Islemler (kurulum farkı) S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-009 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-009 ETTN atama / boş ETTN / ETTN güncellemesi |
| Kullanıcı belirtisi | DB2'de perakende/işlem listesinde "Invalid column name 'ETTN'"; e-belge akışı kuyumcuda tanımsız. |
| Teknik belirti | DB2 (KUYUMCU) kurulumunda Cari.IslemDetaylari 12 kolon (ETTN yok), DB1'de 49 kolon; Cari.Islemler.IsArbitiraj yalnız DB1'de. Aynı exe DB2'ye bağlanınca bu kolonları kullanan sorgular 207 verir; DB1 tetikleyicileri (D.ETTN) DB2'ye taşınırsa tetikleyici derlenmez/çalışmaz. |
| SQL hata no | 207 |
| SQL hata mesajı | Invalid column name |
| Ekran | Parakende.vb:13,57 (perakende ekranı: 'Select …,UsdKur,ETTN From Cari.Islemler I Left Join Cari.IslemDetaylari D'); ERPFatura.Save (MERGE 41 kolon); Cari.AcceptTransaction & Cari.UpdateTransaction (D.ETTN) |
| Kod dosyası | ERPPRO/Controls/Islem Ekranı/Parakende/Parakende.vb:13,57; ERPPRO/Class/Dao/Islem/ERPFatura.vb:330; DijitalFatura/Common/ERPFatura.vb:451 |
| İlgili SQL nesneleri | Cari.IslemDetaylari, Cari.Islemler |
| SQL Object | Cari.IslemDetaylari / Cari.Islemler (kurulum farkı) |
| Tablo | Cari.IslemDetaylari; Cari.Islemler |
| Kolon | ETTN (+36 döviz mevzuatı kolonu); IsArbitiraj |
| Tetikleme koşulu | DB2 (KUYUMCU) kurulumunda Cari.IslemDetaylari 12 kolon (ETTN yok), DB1'de 49 kolon; Cari.Islemler.IsArbitiraj yalnız DB1'de. Aynı exe DB2'ye bağlanınca bu kolonları kullanan sorgular 207 verir; DB1 tetikleyicileri (D.ETTN) DB2'ye taşınırsa tetikleyici derlenmez/çalışmaz. |
| Kök neden | kitap/b8_kuyumcu.md 'Cari.IslemDetaylari: döviz 49 / kuyumcu 12 kolon; ETTN kuyumcuda yoktur; IsArbitiraj yalnız döviz'; Parakende.vb:13 sorgu metni; AcceptTransaction cursor listesi 'D.ETTN'. |
| Neden zinciri | Teknik olay: SQL 207 Invalid column name ↓ Yakın neden: DB2 (KUYUMCU) kurulumunda Cari.IslemDetaylari 12 kolon (ETTN yok), DB1'de 49 kolon; Cari.Islemler.IsArbitiraj yalnız DB1 ↓ Kullanıcı etkisi: DB2'de perakende/işlem listesinde "Invalid column name 'ETTN'"; e-belge akışı kuyumcuda tanımsız. |
| Etkilenen veri | Cari.IslemDetaylari; Cari.Islemler |
| Olasılık / etki / güven | DB2'de yüksek (perakende ekranı açılırsa) / S2 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kurulum profiline göre kolon seti (BASE + DÖVİZ eklentisi) ayrımı; kodda ETTN/IsArbitiraj kullanan sorguların profil bayrağıyla korunması. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Cari.IslemDetaylari','ETTN') AS ETTN, COL_LENGTH('Cari.Islemler','IsArbitiraj') AS IsArbitiraj; |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-046 · DB1=EVET DB2=HAYIR (kitap/b8_kuyumcu §: ETTN kuyumcuda yok; 12 kolon) BASE=EVET (V2 kolon seti) · Guard=HAYIR · kitap/b8_kuyumcu.md 'Cari.IslemDetaylari: döviz 49 / kuyumcu 12 kolon; ETTN kuyumcuda yoktur; IsArbitiraj yalnız döviz'; Parakende.vb:13 sorgu metni; AcceptTransaction cursor listesi 'D.ETTN'. |
| İlişkili kayıtlar | ERR-OBS-086, ERR-POT-003, ERR-POT-030, ERR-POT-134, ERR-POT-135, ERR-SIL-046 |
POTANSİYEL ERR-POT-117 — SQLR-047 Invalid column name: Sistem.ERPSCHEMA 'Alter … Add' satırları S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-008 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-008 ERP kurulumu (yeni kurulum, sıfır kurulum, kurulum sonrası destek) |
| Kullanıcı belirtisi | DBUpdate uygulanmamış kurulumda ilgili ekranlarda 'Invalid column name …'. |
| Teknik belirti | ERPSCHEMA = ftp schema.csv (ana şema, 2022-12-16) − sys.columns farkı. Nesnesi V2'de VAR olan 13 nesnenin toplam 24 satırı 'Alter … Add' kolonu demektir: ana şemada olup DB1'de olmayan kolonlar. Bu kolonları kullanan kod (ör. Siparis.TakimKartlari.Grup) DB1'de 207 verir; DBUpdate çalıştırılmamış kurulumlarda aynı risk. |
| SQL hata no | 207 (kurulum bazlı) |
| SQL hata mesajı | Invalid column name |
| Ekran | DBUpdate ekranı (Class/SCHEMA/DBUpdate.vb) bu satırları 'Alter Table … Add' olarak uygular |
| Kod dosyası | ERPPRO/Class/SCHEMA/DBUpdate.vb:13-22; dbclean/dbsql.json src=Sistem.ERPSCHEMA (238 satır, 30 nesne) |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA, Cari.Hesaplar, Cari.Islemler, Cari.IslemListesi, Cari.HesapListesi, Cari.GetHesapListesi, Siparis.TakimKartlari, Muhasebe.BTRANSDoviz, Muhasebe.MerkezBankasiRaporu, Query.Hesaplar, Pozisyon.GetAllPozisyon, Siparis.GetParcaKartlari, Siparis.GetTakimDetay, Cari.GetFiyatListesi |
| SQL Object | Sistem.ERPSCHEMA 'Alter … Add' satırları |
| Tablo | Cari.Hesaplar (1), Cari.Islemler (1), Cari.IslemListesi (6), Cari.HesapListesi (1), Cari.GetHesapListesi (1), Siparis.TakimKartlari (1), Muhasebe.BTRANSDoviz (1), Muhasebe.MerkezBankasiRaporu (5), Query.Hesaplar (3), Pozisyon.GetAllPozisyon (1), Siparis.GetParcaKartlari (1), Siparis.GetTakimDetay (1), Cari.GetFiyatListesi (1) |
| Kolon | (kolon adları dbsql.json'a alınmamış — ColumnName kolonu boş) |
| Tetikleme koşulu | ERPSCHEMA = ftp schema.csv (ana şema, 2022-12-16) − sys.columns farkı. Nesnesi V2'de VAR olan 13 nesnenin toplam 24 satırı 'Alter … Add' kolonu demektir: ana şemada olup DB1'de olmayan kolonlar. Bu kolonları kullanan kod (ör. Siparis.TakimKartlari.Grup) DB1'de 207 verir; DBUpdate çalıştırılmamış kurulumlarda aynı risk. |
| Kök neden | dbsql.json Sistem.ERPSCHEMA satır sayıları (Cari.Hesaplar 1, Cari.Islemler 1, Cari.IslemListesi 6, Siparis.TakimKartlari 1 …); DBUpdate.vb Method computed: object_id(TableName) null→'Create' else 'Alter'. |
| Neden zinciri | Teknik olay: SQL 207 (kurulum bazlı) Invalid column name ↓ Yakın neden: ERPSCHEMA = ftp schema.csv (ana şema, 2022-12-16) − sys.columns farkı. Nesnesi V2'de VAR olan 13 nesnenin toplam 24 satı ↓ Kullanıcı etkisi: DBUpdate uygulanmamış kurulumda ilgili ekranlarda 'Invalid column name …'. |
| Etkilenen veri | Cari.Hesaplar (1), Cari.Islemler (1), Cari.IslemListesi (6), Cari.HesapListesi (1), Cari.GetHesapListesi (1), Siparis.TakimKartlari (1), Muhasebe.BTRANSDoviz (1), Muhasebe.MerkezBankasiRaporu (5), Query.Hesaplar (3), Pozisyon.GetAllPozisyon (1), Siparis.GetParcaKartlari (1), Siparis.GetTakimDetay (1), Cari.GetFiyatListesi (1) |
| Olasılık / etki / güven | Orta / S3 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): ERPSCHEMA ColumnName/DataType içeriği okunup (bu turda alınmadı — GAP) BASE kolon seti ile eşleştirilmeli. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT TableName, ColumnName, DataType, Method FROM Sistem.ERPSCHEMA WHERE OBJECT_ID(TableName) IS NOT NULL ORDER BY TableName; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-047 · DB1=HAYIR (kolonlar) DB2=BİLİNMİYOR BASE=HAYIR · Guard=KISMEN (DBUpdate çalıştırılırsa kolonlar eklenir) · dbsql.json Sistem.ERPSCHEMA satır sayıları (Cari.Hesaplar 1, Cari.Islemler 1, Cari.IslemListesi 6, Siparis.TakimKartlari 1 …); DBUpdate.vb Method computed: object_id(TableName) null→'Create' else 'Alt |
POTANSİYEL ERR-POT-118 — SQLR-048 Invalid column name: (kod) ERPFatura.Save → Cari.IslemDetaylari S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-007 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Invalid column name |
| Problem ailesi | PF-007 Fatura kesilemiyor / fatura basma / fatura problemi (genel) |
| Kullanıcı belirtisi | Fatura/belge detayı kaydedilmez; kullanıcıya hata gösterilmez (ekran 'kaydedilemedi' ya da hiçbir şey). |
| Teknik belirti | SQL metni "Insert Into Cari.IslemDetaylari(MERGE Cari.IslemDetaylari WITH (SERIALIZABLE) AS T USING (VALUES(…)) … output inserted.IslemId" — 'Insert Into …(' öneki artık; MERGE parantez içinde → derlenmez. Catch boş → Save() sessizce False. |
| SQL hata no | 102 (Incorrect syntax near 'MERGE') |
| SQL hata mesajı | Invalid column name |
| Ekran | OldFis/Printing.Fatura.vb:182 (detay.Save), FrmSeriFaturaBas.vb:98, FrmDovFaturaEkranı.vb:203 — fatura/işlem detayı kaydı |
| Kod dosyası | ERPPRO/Class/Dao/Islem/ERPFatura.vb:330 |
| İlgili SQL nesneleri | Cari.IslemDetaylari |
| SQL Object | (kod) ERPFatura.Save → Cari.IslemDetaylari |
| Tablo | Cari.IslemDetaylari |
| Tetikleme koşulu | SQL metni "Insert Into Cari.IslemDetaylari(MERGE Cari.IslemDetaylari WITH (SERIALIZABLE) AS T USING (VALUES(…)) … output inserted.IslemId" — 'Insert Into …(' öneki artık; MERGE parantez içinde → derlenmez. Catch boş → Save() sessizce False. |
| Kök neden | QA-SQL-QUERY-MAP.md satır 354; ERPFatura.vb:330 metni; :486 'Catch ex As Exception' boş. |
| Neden zinciri | Teknik olay: SQL 102 (Incorrect syntax near 'MERGE') Invalid column name ↓ Yakın neden: SQL metni "Insert Into Cari.IslemDetaylari(MERGE Cari.IslemDetaylari WITH (SERIALIZABLE) AS T USING (VALUES(…)) … output ↓ Kullanıcı etkisi: Fatura/belge detayı kaydedilmez; kullanıcıya hata gösterilmez (ekran 'kaydedilemedi' ya da hiçbir şey). |
| Etkilenen veri | Cari.IslemDetaylari |
| Olasılık / etki / güven | Yüksek (bu yol her çağrıldığında) / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Bu DAO'nun canlı yol olup olmadığı (Cari.IFatura/SQLBase MERGE üretimi ana yol) netleştirilip artık önek kaldırılmalı; boş Catch loglanmalı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Test senaryosu | Belirtiyi yeniden üret: Fatura/belge detayı kaydedilmez; kullanıcıya hata gösterilmez (ekran 'kaydedilemedi' ya da hiçbir şey). |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-048 · DB1=EVET (tablo) DB2=EVET (12 kolonlu; MERGE kolonlarının çoğu yok → ek 207) BASE=EVET · Guard=HAYIR · QA-SQL-QUERY-MAP.md satır 354; ERPFatura.vb:330 metni; :486 'Catch ex As Exception' boş. |
POTANSİYEL ERR-POT-119 — SQLR-050 Divide by zero: Bilanco.GetIKar; Bilanco.GetIBilanco S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Divide by zero |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | Bilanço kâr raporunda 'Divide by zero error encountered.' |
| Teknik belirti | 9 ayrı 'Sum(… )/Kur1.Alis' ifadesi; Kur1 = Sistem.GetKurListesi(@Tarih) BirimId=1 satırı. HAS kuru o gün 0 girilmişse 8134; kur hiç yoksa (fallback yoksa) NULL → sonuç NULL (sessiz). |
| SQL hata no | 8134 |
| SQL hata mesajı | Divide by zero |
| Ekran | Koddan/raporlardan çağıran bulunamadı (deps: yok) |
| İlgili SQL nesneleri | Bilanco.GetIKar, Bilanco.GetIBilanco, Cari.BakiyeIslem, Stok.StokHaraketleri, Sistem.Kurlar, Sistem.GetKurListesi |
| SQL Object | Bilanco.GetIKar; Bilanco.GetIBilanco |
| Tablo | Cari.BakiyeIslem; Stok.StokHaraketleri |
| Kolon | Kur1.Alis (Sistem.GetKurListesi BirimId=1 = HAS kuru) |
| Tetikleme koşulu | 9 ayrı 'Sum(… )/Kur1.Alis' ifadesi; Kur1 = Sistem.GetKurListesi(@Tarih) BirimId=1 satırı. HAS kuru o gün 0 girilmişse 8134; kur hiç yoksa (fallback yoksa) NULL → sonuç NULL (sessiz). |
| Kök neden | div.py çıktısı: Bilanco.GetIKar 5×, Bilanco.GetIBilanco 4× '/Kur1.Alis' NULLIF yok. |
| Neden zinciri | Teknik olay: SQL 8134 Divide by zero ↓ Yakın neden: 9 ayrı 'Sum(… )/Kur1.Alis' ifadesi; Kur1 = Sistem.GetKurListesi(@Tarih) BirimId=1 satırı. HAS kuru o gün 0 girilmişse 81 ↓ Kullanıcı etkisi: Bilanço kâr raporunda 'Divide by zero error encountered.' |
| Etkilenen veri | Cari.BakiyeIslem; Stok.StokHaraketleri |
| Olasılık / etki / güven | Düşük (çağıran yok; HAS kuru 0 olağan dışı) / S3 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): NULLIF(Kur1.Alis,0) ve kur yokluğu için açık uyarı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT Tarih FROM Sistem.Kurlar WHERE BirimId=1 AND ISNULL(Alis,0)=0; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-050 · DB1=EVET DB2=BİLİNMİYOR BASE=HAYIR (UNKNOWN) · Guard=HAYIR · div.py çıktısı: Bilanco.GetIKar 5×, Bilanco.GetIBilanco 4× '/Kur1.Alis' NULLIF yok. |
POTANSİYEL ERR-POT-120 — SQLR-051 Divide by zero: MüşteriŞemasıA.IslemFiyatlar tetikleyicisi (DB2 Cari.Islemler 5. tetikleyici) S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-070 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E07 — Finansal Hesaplama Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Divide by zero |
| Problem ailesi | PF-070 Rapor hata veriyor / yanlış-boş geliyor (divide by zero, invalid column, süzgeç) |
| Kullanıcı belirtisi | DB2'de işlem kaydında 'Divide by zero error encountered' → işlem kaydedilemez. |
| Teknik belirti | 'I.Maliyet/I.UsdKur' ve 'I.Maliyet/I.HasKur' korumasız; kur 0 gelirse tetikleyici hata verir ve kullanıcının işlemi geri alınır. Ayrıca 'Select @x=… From Inserted' tek satır varsayımı (çok satırlı INSERT'te veri kaybı — sessiz) ve sabit kimlikler (Kodu='995', BirimId IN (84,85,86)). |
| SQL hata no | 8134 |
| SQL hata mesajı | Divide by zero |
| Ekran | DB2'de her Cari.Islemler INSERT/UPDATE |
| İlgili SQL nesneleri | Cari.Islemler |
| SQL Object | MüşteriŞemasıA.IslemFiyatlar tetikleyicisi (DB2 Cari.Islemler 5. tetikleyici) |
| Tablo | Cari.Islemler → MüşteriŞemasıA.IslemFiyatlar |
| Kolon | UsdKur, HasKur |
| Tetikleme koşulu | 'I.Maliyet/I.UsdKur' ve 'I.Maliyet/I.HasKur' korumasız; kur 0 gelirse tetikleyici hata verir ve kullanıcının işlemi geri alınır. Ayrıca 'Select @x=… From Inserted' tek satır varsayımı (çok satırlı INSERT'te veri kaybı — sessiz) ve sabit kimlikler (Kodu='995', BirimId IN (84,85,86)). |
| Kök neden | TD-41; kitap/b8_kuyumcu.md 'Sıfıra bölme riski: I.Maliyet/I.UsdKur, I.Maliyet/I.HasKur korumasız'. Tetikleyici metni bu turda elde yok (DB2 modülleri GAP-BASE-DB2-MODULES). |
| Neden zinciri | Teknik olay: SQL 8134 Divide by zero ↓ Yakın neden: 'I.Maliyet/I.UsdKur' ve 'I.Maliyet/I.HasKur' korumasız; kur 0 gelirse tetikleyici hata verir ve kullanıcının işlemi geri ↓ Kullanıcı etkisi: DB2'de işlem kaydında 'Divide by zero error encountered' → işlem kaydedilemez. |
| Etkilenen veri | Cari.Islemler → MüşteriŞemasıA.IslemFiyatlar |
| Olasılık / etki / güven | Orta (DB2) / S2 / 70 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Müşteri özel tetikleyicinin eklenti noktasına alınması; NULLIF; set-tabanlı yazım. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE IsDeleted=0 AND (ISNULL(UsdKur,0)=0 OR ISNULL(HasKur,0)=0) AND Tarih>=DATEADD(month,-3,GETDATE()); |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-051 · DB1=HAYIR DB2=EVET (3.738 krk; TD-41) BASE=HAYIR (müşteri özel) · Guard=HAYIR · TD-41; kitap/b8_kuyumcu.md 'Sıfıra bölme riski: I.Maliyet/I.UsdKur, I.Maliyet/I.HasKur korumasız'. Tetikleyici metni bu turda elde yok (DB2 modülleri GAP-BASE-DB2-MODULES). |
| Wiki bağlantıları | TD-41 |
POTANSİYEL ERR-POT-121 — SQLR-054 Conversion failed: (kod) Cari.Odeme.vb:136 → Cari.Islemler S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Conversion failed |
| Kullanıcı belirtisi | Ödeme listesinde 'Conversion failed when converting the nvarchar value 'xyz' to data type int.' |
| Teknik belirti | 'Where … StokId=… And Convert(int,Tag)=…' — Tag serbest metin (nvarchar(MAX)); filtre sırası garanti değil, sayısal olmayan Tag satırı taranırsa 245 'Conversion failed when converting the nvarchar value … to data type int'. |
| SQL hata no | 245 |
| SQL hata mesajı | Conversion failed |
| Ekran | Ödeme ekranı (FrmOdemeListesi/FrmOdemeYap) — 'Convert(int,Tag) = <Id>' |
| Kod dosyası | ERPPRO/Class/Dao/Cari.Odeme.vb:136 |
| İlgili SQL nesneleri | Cari.Islemler |
| SQL Object | (kod) Cari.Odeme.vb:136 → Cari.Islemler |
| Tablo | Cari.Islemler |
| Kolon | Tag (nvarchar(max)) |
| Tetikleme koşulu | 'Where … StokId=… And Convert(int,Tag)=…' — Tag serbest metin (nvarchar(MAX)); filtre sırası garanti değil, sayısal olmayan Tag satırı taranırsa 245 'Conversion failed when converting the nvarchar value … to data type int'. |
| Kök neden | Cari.Odeme.vb:136 'select Sum(Miktar) … And Convert(int,Tag) =''" & Id & "''' (Cari.Odemeler ekranı zaten 208 ile düşer). |
| Neden zinciri | Teknik olay: SQL 245 Conversion failed ↓ Yakın neden: 'Where … StokId=… And Convert(int,Tag)=…' — Tag serbest metin (nvarchar(MAX)); filtre sırası garanti değil, sayısal olma ↓ Kullanıcı etkisi: Ödeme listesinde 'Conversion failed when converting the nvarchar value 'xyz' to data type int.' |
| Etkilenen veri | Cari.Islemler |
| Olasılık / etki / güven | Orta (Tag başka amaçla dolduysa) / S3 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): TRY_CONVERT ya da Tag yerine tipli bir referans kolonu. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE Tag IS NOT NULL AND TRY_CONVERT(int,Tag) IS NULL; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-054 · DB1=EVET (kolon) DB2=BİLİNMİYOR BASE=EVET · Guard=HAYIR · Cari.Odeme.vb:136 'select Sum(Miktar) … And Convert(int,Tag) =''" & Id & "''' (Cari.Odemeler ekranı zaten 208 ile düşer). |
| İlişkili kayıtlar | ERR-POT-071 |
POTANSİYEL ERR-POT-122 — SQLR-055 Conversion failed: Query.GENELSTOKLAR (VIEW); AifaDev.ExQueryBuilder üretimi Query.* view'ları S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-004 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Conversion failed |
| Problem ailesi | PF-004 Rapor tasarımı / yeni rapor / sütun ekleme / bakiye ekstresi düzenleme (talep) |
| Kullanıcı belirtisi | Dinamik form listesi/raporunda 'Conversion failed …' ya da 'Error converting data type nvarchar to numeric'. |
| Teknik belirti | Pivot edilen serbest metin Value kolonu 'Convert(int, F.Kimden)', 'Convert(Decimal(18,5), F.[x])', 'Convert(Date, F.[x],104)' ile tiplendiriliyor; kullanıcı sayısal olmayan değer girdiyse view okunurken 245/8114/241. |
| SQL hata no | 245 / 8114 |
| SQL hata mesajı | Conversion failed |
| Ekran | DynamicForms / Query.* view'larını kullanan raporlar |
| İlgili SQL nesneleri | Query.GENELSTOKLAR, AifaDev.ExQueryBuilder, AifaDev.RepositoryData, AifaDev.RepositoryItems |
| SQL Object | Query.GENELSTOKLAR (VIEW); AifaDev.ExQueryBuilder üretimi Query.* view'ları |
| Tablo | AifaDev.RepositoryData |
| Kolon | Value (nvarchar) → Convert(int/decimal/date,…) |
| Tetikleme koşulu | Pivot edilen serbest metin Value kolonu 'Convert(int, F.Kimden)', 'Convert(Decimal(18,5), F.[x])', 'Convert(Date, F.[x],104)' ile tiplendiriliyor; kullanıcı sayısal olmayan değer girdiyse view okunurken 245/8114/241. |
| Kök neden | modules.json Query.GENELSTOKLAR 'Convert(int, F.Kimden)'; ExQueryBuilder DataType→Convert eşlemesi. |
| Neden zinciri | Teknik olay: SQL 245 / 8114 Conversion failed ↓ Yakın neden: Pivot edilen serbest metin Value kolonu 'Convert(int, F.Kimden)', 'Convert(Decimal(18,5), F.[x])', 'Convert(Date, F.[x], ↓ Kullanıcı etkisi: Dinamik form listesi/raporunda 'Conversion failed …' ya da 'Error converting data type nvarchar to numeric'. |
| Etkilenen veri | AifaDev.RepositoryData |
| Olasılık / etki / güven | Orta / S4 / 75 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): TRY_CONVERT; giriş doğrulaması. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT D.* FROM AifaDev.RepositoryData D JOIN AifaDev.RepositoryItems I ON I.Id=D.ItemId WHERE I.DataType IN (2,4,5) AND TRY_CONVERT(decimal(18,5),D.Value) IS NULL AND D.Value IS NOT NULL; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-055 · DB1=EVET DB2=BİLİNMİYOR BASE=HAYIR (Query.* UNKNOWN) · Guard=KISMEN (Date için Year()>1900 kontrolü var ama Convert önce çalışır) · modules.json Query.GENELSTOKLAR 'Convert(int, F.Kimden)'; ExQueryBuilder DataType→Convert eşlemesi. |
POTANSİYEL ERR-POT-123 — SQLR-056 Conversion failed: (kod) tırnaklı birleştirme ile tipsiz literal karşılaştırması S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Conversion failed |
| Kullanıcı belirtisi | 'Error converting data type varchar to numeric' / 'Conversion failed when converting date and/or time' / 'Incorrect syntax near ='. |
| Teknik belirti | int/decimal/date kolonlar tırnaklı string literal ile karşılaştırılıyor → örtük dönüşüm. Değişken boş ('') → int için 0 (sessiz yanlış eşleşme), decimal/date için 8114/241; ondalık ayıracı virgül olan kültürde (1,5) 8114 'Error converting data type varchar to numeric'; Nothing → 'Id=' syntax error 102. |
| SQL hata no | 245 / 8114 / 241 |
| SQL hata mesajı | Conversion failed |
| Ekran | 553 SQL cümlesi: "Where Id='" & x & "'" kalıbı (SQLBase.vb:138-161 jenerik; Dao/*.vb) |
| Kod dosyası | ERPPRO/Class/Dao/_SQLBase/SQLBase.vb:138,140,161; dyn_out.json concat_quoted (553) |
| İlgili SQL nesneleri | Cari.Islemler, Cari.Hesaplar |
| SQL Object | (kod) tırnaklı birleştirme ile tipsiz literal karşılaştırması |
| Tablo | Cari.Islemler, Cari.Hesaplar, Stok.*, Siparis.* … |
| Kolon | Id, HesapId, StokId, Tarih, Miktar… |
| Tetikleme koşulu | int/decimal/date kolonlar tırnaklı string literal ile karşılaştırılıyor → örtük dönüşüm. Değişken boş ('') → int için 0 (sessiz yanlış eşleşme), decimal/date için 8114/241; ondalık ayıracı virgül olan kültürde (1,5) 8114 'Error converting data type varchar to numeric'; Nothing → 'Id=' syntax error 102. |
| Kök neden | dyn.py istatistiği: 1294 cümle; 914 '&' ile birleştirme; 553 tırnaklı ('" & x & "'); 252 parametreli; 133 sabit. TD-37 (ondalık ToString). |
| Neden zinciri | Teknik olay: SQL 245 / 8114 / 241 Conversion failed ↓ Yakın neden: int/decimal/date kolonlar tırnaklı string literal ile karşılaştırılıyor → örtük dönüşüm. Değişken boş ('') → int için 0 ↓ Kullanıcı etkisi: 'Error converting data type varchar to numeric' / 'Conversion failed when converting date and/or time' / 'Incorrect synt |
| Etkilenen veri | Cari.Islemler, Cari.Hesaplar, Stok.*, Siparis.* … |
| Olasılık / etki / güven | Orta / S3 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Parametreli sorgu (SqlParameter) — TD-09/TD-37 ile birlikte. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-056 · DB1=EVET DB2=EVET BASE=— · Guard=HAYIR · dyn.py istatistiği: 1294 cümle; 914 '&' ile birleştirme; 553 tırnaklı ('" & x & "'); 252 parametreli; 133 sabit. TD-37 (ondalık ToString). |
| Wiki bağlantıları | TD-37 · TD-09 |
POTANSİYEL ERR-POT-124 — SQLR-057 Arithmetic overflow: Cari.AcceptTransaction; Cari.History (Fiyat decimal(18,5) ← Islemler.Fiyat decimal(18,8)); Stok.StokHaraketleri.NetBakiye decimal(37,10) S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E08 — Yuvarlama / Hassasiyet Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Arithmetic overflow |
| Kullanıcı belirtisi | Overflow: 'Arithmetic overflow error converting numeric to data type numeric' (nadir). Yuvarlama: History'de Fiyat 5 hane. |
| Teknik belirti | decimal(18,5)*decimal(18,5) çarpımı (37,10) → decimal(18,2)'ye dönüşümde |değer| ≥ 10^16 olursa 8115. Pratikte Tutar×Kur bu eşiğe ulaşmaz; Islemler.Fiyat(18,8)→History.Fiyat(18,5) yalnız yuvarlama (sessiz hassasiyet kaybı). Cari.IslemINS çıplak decimal parametreleri (18,0) → yuvarlama (TD-31, çağıran yok). |
| SQL hata no | 8115 |
| SQL hata mesajı | Arithmetic overflow |
| Ekran | İşlem kaydı tetikleyicisi |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Cari.History, Stok.StokHaraketleri, Cari.Islemler, Cari.BakiyeIslem, Cari.IslemINS |
| SQL Object | Cari.AcceptTransaction; Cari.History (Fiyat decimal(18,5) ← Islemler.Fiyat decimal(18,8)); Stok.StokHaraketleri.NetBakiye decimal(37,10) |
| Tablo | Cari.Islemler; Cari.History; Cari.BakiyeIslem; Stok.StokHaraketleri |
| Kolon | Tutar(18,5)*Kur(18,5)→Convert(Decimal(18,2)); Fiyat |
| Tetikleme koşulu | decimal(18,5)*decimal(18,5) çarpımı (37,10) → decimal(18,2)'ye dönüşümde |değer| ≥ 10^16 olursa 8115. Pratikte Tutar×Kur bu eşiğe ulaşmaz; Islemler.Fiyat(18,8)→History.Fiyat(18,5) yalnız yuvarlama (sessiz hassasiyet kaybı). Cari.IslemINS çıplak decimal parametreleri (18,0) → yuvarlama (TD-31, çağıran yok). |
| Kök neden | columns.json: Islemler.Fiyat decimal(18,8) vs History.Fiyat decimal(18,5); AcceptTransaction 'Convert(Decimal(18,2), @StokIsc * @StokIscKur)'. |
| Neden zinciri | Teknik olay: SQL 8115 Arithmetic overflow ↓ Yakın neden: decimal(18,5)*decimal(18,5) çarpımı (37,10) → decimal(18,2)'ye dönüşümde |değer| ≥ 10^16 olursa 8115. Pratikte Tutar×Kur ↓ Kullanıcı etkisi: Overflow: 'Arithmetic overflow error converting numeric to data type numeric' (nadir). Yuvarlama: History'de Fiyat 5 han |
| Etkilenen veri | Cari.Islemler; Cari.History; Cari.BakiyeIslem; Stok.StokHaraketleri |
| Olasılık / etki / güven | Çok düşük (overflow) / Kesin (History.Fiyat yuvarlama) / S4 / 70 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): History ve Islemler kolon tiplerinin eşitlenmesi; ara hesaplarda decimal(28,10). (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT MAX(ABS(Tutar*ISNULL(HasKur,0))) FROM Cari.Islemler; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-057 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET · Guard=HAYIR · columns.json: Islemler.Fiyat decimal(18,8) vs History.Fiyat decimal(18,5); AcceptTransaction 'Convert(Decimal(18,2), @StokIsc * @StokIscKur)'. |
POTANSİYEL ERR-POT-125 — SQLR-059 String or binary data would be truncated: (kod DAO Insert/Update) kısa nvarchar kolonlar S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | String or binary data would be truncated |
| Kullanıcı belirtisi | 'String or binary data would be truncated.' ya da kayıt sessizce yapılmaz. |
| Teknik belirti | AddWithValue ile UI'dan gelen metin kolon uzunluğunu aşınca 8152 (SQL2019+ 2628, kolon adı verir). Kod tarafında MaxLength kontrolü DAO'da yok (IsValidate yalnız 4 tipte — TD-18). 300 kısa (≤50) kolon INSERT listelerinde; 'Aciklama' adlı 50 karakterlik 7 kolon en riskli. |
| SQL hata no | 8152 / 2628 |
| SQL hata mesajı | String or binary data would be truncated |
| Ekran | Kasa/Şirket/Birim/Mizan tanım ekranları; Döviz fatura; Banka altın operasyonu; Sipariş model/reçete/parça; Cari hesap kartı (Email 50) |
| Kod dosyası | ERPPRO/Class/Dao/Sistem.Kasa.vb:115; Sistem.Sirket.vb:100; Sistem.Birim.vb:155; Sistem.Mizan.vb:118; Sistem.TakozScala.vb:150; Dov.Fatura.vb:200; Finans.BankaAltinOperasyonu.vb:158; Stok.Model.vb:325; Cari.Hesap.vb:329 |
| İlgili SQL nesneleri | Sistem.Kasalar, Sistem.Sirketler, Sistem.Birimler, Sistem.Mizan, Sistem.TakozScala, Cari.Faturalar, Personel.Personeller, Dov.Fatura, Finans.BankaAltinOperasyonlari, Siparis.Paket, Stok.Model, Stok.Emtia, Cari.Hesaplar |
| SQL Object | (kod DAO Insert/Update) kısa nvarchar kolonlar |
| Tablo | Sistem.Kasalar.Kodu nvarchar(10); Sistem.Sirketler.Kodu(10)/Aciklama(50); Sistem.Birimler.Kodu(15); Sistem.Mizan.Kodu(15); Sistem.TakozScala.Kodu nvarchar(1); Cari.Faturalar.FaturaSeri(10); Personel.Personeller.KimlikNo(10); Dov.Fatura.Aciklama(50); Finans.BankaAltinOperasyonlari.Aciklama(50); Siparis.Paket/Receteler/ParcaKartlari/Stok.Model/Stok.Emtia.Aciklama(50); Cari.Hesaplar Email/Telefon1/Telefon2/Gsm/VergiDairesi(50) |
| Kolon | (yukarıda) |
| Tetikleme koşulu | AddWithValue ile UI'dan gelen metin kolon uzunluğunu aşınca 8152 (SQL2019+ 2628, kolon adı verir). Kod tarafında MaxLength kontrolü DAO'da yok (IsValidate yalnız 4 tipte — TD-18). 300 kısa (≤50) kolon INSERT listelerinde; 'Aciklama' adlı 50 karakterlik 7 kolon en riskli. |
| Kök neden | Truncation taraması (300 kolon ≤50 karakter, kod INSERT listelerinde); columns.json uz değerleri (nvarchar byte/2). |
| Neden zinciri | Teknik olay: SQL 8152 / 2628 String or binary data would be truncated ↓ Yakın neden: AddWithValue ile UI'dan gelen metin kolon uzunluğunu aşınca 8152 (SQL2019+ 2628, kolon adı verir). Kod tarafında MaxLeng ↓ Kullanıcı etkisi: 'String or binary data would be truncated.' ya da kayıt sessizce yapılmaz. |
| Etkilenen veri | Sistem.Kasalar.Kodu nvarchar(10); Sistem.Sirketler.Kodu(10)/Aciklama(50); Sistem.Birimler.Kodu(15); Sistem.Mizan.Kodu(15); Sistem.TakozScala.Kodu nvarchar(1); Cari.Faturalar.FaturaSeri(10); Personel.Personeller.KimlikNo(10); Dov.Fatura.Aciklama(50); Finans.BankaAltinOperasyonlari.Aciklama(50); Siparis.Paket/Receteler/ParcaKartlari/Stok.Model/Stok.Emtia.Aciklama(50); Cari.Hesaplar Email/Telefon1/Telefon2/Gsm/VergiDairesi(50) |
| Olasılık / etki / güven | Orta / S3 / 75 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): UI MaxLength = kolon uzunluğu eşlemesi; Aciklama kolonlarının uzunluk standardı (TD standardizasyon). (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT s.name,t.name,c.name,c.max_length/2 AS chars FROM sys.columns c JOIN sys.tables t ON t.object_id=c.object_id JOIN sys.schemas s ON s.schema_id=t.schema_id WHERE c.system_type_id=231 AND c.max_length BETWEEN 1 AND 100 AND c.name IN ('Aciklama','Kodu','Email') ORDER BY chars; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-059 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET · Guard=HAYIR (UI MaxLength bilinmiyor) · Truncation taraması (300 kolon ≤50 karakter, kod INSERT listelerinde); columns.json uz değerleri (nvarchar byte/2). |
POTANSİYEL ERR-POT-126 — SQLR-061 Cannot insert NULL: Cari.Islemler.FiyatTipi (tfiyattipi NOT NULL, default yok); Cari.History.FiyatTipi; Cari.BakiyeIslem.HesapType (NOT NULL) S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-060 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E03 — Veri Bütünlüğü Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Cannot insert NULL |
| Problem ailesi | PF-060 Cari hesap / kart tanımlama, hesap türü, adres-unvan değişikliği |
| Kullanıcı belirtisi | "Cannot insert the value NULL into column 'FiyatTipi'/'HesapType'" — işlem kaydedilemez. |
| Teknik belirti | Cari.Islemler'de NOT NULL & default'suz tek kolon FiyatTipi. Kod INSERT'i @FiyatTipi gönderiyor; ancak nesne özelliği Nothing ise AddWithValue null → 515. Modül INSERT'leri (FromERP, FaturaYaz, RSAktar, FisKaydet) FiyatTipi'ni açıkça veriyor. BakiyeIslem.HesapType NOT NULL: AcceptTransaction @HesapType ← Inserted.HesapType (nullable int) → NULL gelirse 515 ve işlem geri alınır. |
| SQL hata no | 515 |
| SQL hata mesajı | Cannot insert NULL |
| Ekran | Cari.Islem.vb:568 Insert (FiyatTipi parametrede var); Sistem.FromERP; POS.FisKaydet; MT4/FX sync; sp_DevirIslemiYap |
| Kod dosyası | ERPPRO/Class/Dao/Islem/Cari.Islem.vb:568 |
| İlgili SQL nesneleri | Cari.Islemler, Cari.History, Cari.BakiyeIslem |
| SQL Object | Cari.Islemler.FiyatTipi (tfiyattipi NOT NULL, default yok); Cari.History.FiyatTipi; Cari.BakiyeIslem.HesapType (NOT NULL) |
| Tablo | Cari.Islemler; Cari.History; Cari.BakiyeIslem |
| Kolon | FiyatTipi; HesapType |
| Tetikleme koşulu | Cari.Islemler'de NOT NULL & default'suz tek kolon FiyatTipi. Kod INSERT'i @FiyatTipi gönderiyor; ancak nesne özelliği Nothing ise AddWithValue null → 515. Modül INSERT'leri (FromERP, FaturaYaz, RSAktar, FisKaydet) FiyatTipi'ni açıkça veriyor. BakiyeIslem.HesapType NOT NULL: AcceptTransaction @HesapType ← Inserted.HesapType (nullable int) → NULL gelirse 515 ve işlem geri alınır. |
| Kök neden | columns.json Islemler NOT NULL no-default: [FiyatTipi tfiyattipi]; BakiyeIslem.HesapType null=False; frags.py NOT NULL taraması (kod INSERT'lerinde yalnız ERPFatura MERGE (IslemId) ve Sistem.Clients (dinamik kolon listesi) eksik). |
| Neden zinciri | Teknik olay: SQL 515 Cannot insert NULL ↓ Yakın neden: Cari.Islemler'de NOT NULL & default'suz tek kolon FiyatTipi. Kod INSERT'i @FiyatTipi gönderiyor; ancak nesne özelliği No ↓ Kullanıcı etkisi: "Cannot insert the value NULL into column 'FiyatTipi'/'HesapType'" — işlem kaydedilemez. |
| Etkilenen veri | Cari.Islemler; Cari.History; Cari.BakiyeIslem |
| Olasılık / etki / güven | Düşük-Orta / S3 / 75 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kolonlara DEFAULT; DAO'da null koruması. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE HesapType IS NULL; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-061 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET · Guard=KISMEN · columns.json Islemler NOT NULL no-default: [FiyatTipi tfiyattipi]; BakiyeIslem.HesapType null=False; frags.py NOT NULL taraması (kod INSERT'lerinde yalnız ERPFatura MERGE (IslemId) ve Sistem.Clients ( |
| İlişkili kayıtlar | ERR-POT-134 |
POTANSİYEL ERR-POT-127 — SQLR-062 Cannot insert NULL: (kod) Sistem.Clients dinamik INSERT S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E03 — Veri Bütünlüğü Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Cannot insert NULL |
| Kullanıcı belirtisi | İstemci kaydı yapılamaz (Cannot insert the value NULL into column 'ClientName'). |
| Teknik belirti | Kolon listesi dolu özelliklerden derleniyor; ClientName boşsa listeye girmez → 515. |
| SQL hata no | 515 |
| SQL hata mesajı | Cannot insert NULL |
| Ekran | Sistem.Clients.vb:161 — kolon listesi çalışma zamanında üretiliyor (InsertQuery/ValuesQuery) |
| Kod dosyası | ERPPRO/Class/Dao/Sistem.Clients.vb:161 |
| İlgili SQL nesneleri | Sistem.Clients |
| SQL Object | (kod) Sistem.Clients dinamik INSERT |
| Tablo | Sistem.Clients |
| Kolon | ClientName (NOT NULL) |
| Tetikleme koşulu | Kolon listesi dolu özelliklerden derleniyor; ClientName boşsa listeye girmez → 515. |
| Kök neden | frags.py: Sistem.Clients INSERT listesinde clientname yok (dinamik). |
| Neden zinciri | Teknik olay: SQL 515 Cannot insert NULL ↓ Yakın neden: Kolon listesi dolu özelliklerden derleniyor; ClientName boşsa listeye girmez → 515. ↓ Kullanıcı etkisi: İstemci kaydı yapılamaz (Cannot insert the value NULL into column 'ClientName'). |
| Etkilenen veri | Sistem.Clients |
| Olasılık / etki / güven | Düşük / S4 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Zorunlu alan kontrolü. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-062 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET · Guard=HAYIR · frags.py: Sistem.Clients INSERT listesinde clientname yok (dinamik). |
POTANSİYEL ERR-POT-128 — SQLR-064 Duplicate key: Cari.AcceptTransaction → MERGE INTO Sistem.Activity S1 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E15 — Duplicate / Çift İşlem |
| Severity | S1 — KRİTİK |
| Modül | MOD-VERİTABANI |
| Alt modül | Duplicate key |
| Kullanıcı belirtisi | İşlem kaydında 'The MERGE statement attempted to UPDATE or DELETE the same row more than once…' — o şubede hiç işlem yapılamaz. |
| Teknik belirti | MERGE … ON Target.ActivitySubeId=Source.ActivitySubeId; HOLDLOCK yok, tabloda PK/unique yok. İki eşzamanlı işlem aynı şube için NOT MATCHED dalına girip iki satır ekleyebilir; sonraki her MERGE 8672 'The MERGE statement attempted to UPDATE or DELETE the same row more than once' → o şubede TÜM işlem kayıtları başarısız olur. |
| SQL hata no | 8672 (MERGE aynı satırı birden fazla kez güncelliyor) |
| SQL hata mesajı | Duplicate key |
| Ekran | Her Cari.Islemler INSERT/UPDATE |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Sistem.Activity |
| SQL Object | Cari.AcceptTransaction → MERGE INTO Sistem.Activity |
| Tablo | Sistem.Activity (PK yok, 4 satır) |
| Kolon | ActivitySubeId |
| Tetikleme koşulu | MERGE … ON Target.ActivitySubeId=Source.ActivitySubeId; HOLDLOCK yok, tabloda PK/unique yok. İki eşzamanlı işlem aynı şube için NOT MATCHED dalına girip iki satır ekleyebilir; sonraki her MERGE 8672 'The MERGE statement attempted to UPDATE or DELETE the same row more than once' → o şubede TÜM işlem kayıtları başarısız olur. |
| Kök neden | AcceptTransaction: 'MERGE INTO Sistem.Activity AS Target USING (SELECT @subeId …) ON Target.ActivitySubeId=Source.ActivitySubeId …'; tables.json/indexes.json: Sistem.Activity indeks yok (PK'sız 36 tablo listesinde). |
| Neden zinciri | Teknik olay: SQL 8672 (MERGE aynı satırı birden fazla kez güncelliyor) Duplicate key ↓ Yakın neden: MERGE … ON Target.ActivitySubeId=Source.ActivitySubeId; HOLDLOCK yok, tabloda PK/unique yok. İki eşzamanlı işlem aynı şu ↓ Kullanıcı etkisi: İşlem kaydında 'The MERGE statement attempted to UPDATE or DELETE the same row more than once…' — o şubede hiç işlem yap |
| Etkilenen veri | Sistem.Activity (PK yok, 4 satır) |
| Olasılık / etki / güven | Düşük-Orta (yarış koşulu bir kez oluşunca kalıcı) / S1 (kalıcı tam blokaj) / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Sistem.Activity'ye PK/unique(ActivitySubeId) ve MERGE'e HOLDLOCK; ya da UPDATE/INSERT ayrımı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT ActivitySubeId,COUNT(*) FROM Sistem.Activity GROUP BY ActivitySubeId HAVING COUNT(*)>1; |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-064 · DB1=EVET DB2=BİLİNMİYOR (DB2 tetikleyicisi farklı sürüm) BASE=EVET · Guard=HAYIR · AcceptTransaction: 'MERGE INTO Sistem.Activity AS Target USING (SELECT @subeId …) ON Target.ActivitySubeId=Source.ActivitySubeId …'; tables.json/indexes.json: Sistem.Activity indeks yok (PK'sız 36 |
POTANSİYEL ERR-POT-129 — SQLR-067 Subquery returned more than 1 value: Cari.AcceptTransaction; Uretim.TrBakiyeHesapla; Repair.BalanceRepair S1 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-VERİTABANI |
| Alt modül | Subquery returned more than 1 value |
| Kullanıcı belirtisi | "Subquery returned more than 1 value…" — hiçbir işlem kaydedilemez. |
| Teknik belirti | 'Declare @HasBirimId int = (Select Id From Sistem.Birimler Where IsDeleted='False' And Kodu = (Select HasSymbol From Sistem.Settings))' — Settings'e ikinci satır girilirse ya da aynı Kodu ile iki aktif birim varsa 512; tetikleyici içinde → işlem geri alınır. TOP 1/agg yok. |
| SQL hata no | 512 |
| SQL hata mesajı | Subquery returned more than 1 value |
| Ekran | Her Cari.Islemler ve Uretim.UretimIslemleri INSERT/UPDATE |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Uretim.TrBakiyeHesapla, Repair.BalanceRepair, Sistem.Settings, Sistem.Birimler |
| SQL Object | Cari.AcceptTransaction; Uretim.TrBakiyeHesapla; Repair.BalanceRepair |
| Tablo | Sistem.Settings (PK yok, 1 satır); Sistem.Birimler (Kodu benzersiz değil) |
| Kolon | HasSymbol/GumSymbol/PltSymbol/PldSymbol; Birimler.Kodu |
| Tetikleme koşulu | 'Declare @HasBirimId int = (Select Id From Sistem.Birimler Where IsDeleted='False' And Kodu = (Select HasSymbol From Sistem.Settings))' — Settings'e ikinci satır girilirse ya da aynı Kodu ile iki aktif birim varsa 512; tetikleyici içinde → işlem geri alınır. TOP 1/agg yok. |
| Kök neden | subq.py: AcceptTransaction/TrBakiyeHesapla/BalanceRepair 8'er skaler alt sorgu; tables.json Sistem.Settings rows=1, indeks yok; Birimler yalnız PK_Birimler(Id). |
| Neden zinciri | Teknik olay: SQL 512 Subquery returned more than 1 value ↓ Yakın neden: 'Declare @HasBirimId int = (Select Id From Sistem.Birimler Where IsDeleted='False' And Kodu = (Select HasSymbol From Sis ↓ Kullanıcı etkisi: "Subquery returned more than 1 value…" — hiçbir işlem kaydedilemez. |
| Etkilenen veri | Sistem.Settings (PK yok, 1 satır); Sistem.Birimler (Kodu benzersiz değil) |
| Olasılık / etki / güven | Düşük-Orta (Birimler.Kodu mükerrer girişi engellenmiyor) / S1 (tüm işlem girişi durur) / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Settings'e tek satır kısıtı; Birimler(Kodu) filtered unique; TOP 1. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Sistem.Settings; SELECT Kodu,COUNT(*) FROM Sistem.Birimler WHERE IsDeleted=0 GROUP BY Kodu HAVING COUNT(*)>1; |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-067 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET · Guard=HAYIR · subq.py: AcceptTransaction/TrBakiyeHesapla/BalanceRepair 8'er skaler alt sorgu; tables.json Sistem.Settings rows=1, indeks yok; Birimler yalnız PK_Birimler(Id). |
| İlişkili kayıtlar | ERR-OBS-067, ERR-POT-030, ERR-SIL-067 |
POTANSİYEL ERR-POT-130 — SQLR-068 Subquery returned more than 1 value: Cari.HesapInsert; Cari.HesapUpdate (Cari.Hesaplar tetikleyicileri) S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-013 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Subquery returned more than 1 value |
| Problem ailesi | PF-013 Kullanıcı tanımlama / düzenleme / isim değişikliği / kullanıcı açma |
| Kullanıcı belirtisi | Toplu hesap aktarımında 'Subquery returned more than 1 value'; bazı kullanıcı gruplarında (4,6) hesap düzenlemede 'Yetkiniz yoktur!'; 'Aynı Vergi No ya sahip başka bir hesap mevcuttur!'. |
| Teknik belirti | 'SubeId = (select SubeId from inserted)', 'Id <> (select Id from deleted)', 'SET @UserID=(select UserId from inserted)' — birden fazla satır etkilendiğinde 512. Ek: HesapUpdate 'GroupId not in (4,6)' değilse her Hesaplar UPDATE'inde RAISERROR 'Yetkiniz yoktur!' + ROLLBACK (IF NOT Update(LastDate)). HesapInsert 'HAVING COUNT(*)>1' aynı VergiNo/TCNo'ya sahip ≥2 aktif hesap varsa (grup şirketleri) yeni hesap eklenemez. |
| SQL hata no | 512 |
| SQL hata mesajı | Subquery returned more than 1 value |
| Ekran | Çok satırlı INSERT/UPDATE: Sistem.FromERP (toplu hesap aktarımı), dbo.sp_DevirIslemiYap, toplu UPDATE'ler |
| İlgili SQL nesneleri | Cari.HesapInsert, Cari.HesapUpdate, Cari.Hesaplar |
| SQL Object | Cari.HesapInsert; Cari.HesapUpdate (Cari.Hesaplar tetikleyicileri) |
| Tablo | Cari.Hesaplar |
| Kolon | SubeId, Id, UserId |
| Tetikleme koşulu | 'SubeId = (select SubeId from inserted)', 'Id <> (select Id from deleted)', 'SET @UserID=(select UserId from inserted)' — birden fazla satır etkilendiğinde 512. Ek: HesapUpdate 'GroupId not in (4,6)' değilse her Hesaplar UPDATE'inde RAISERROR 'Yetkiniz yoktur!' + ROLLBACK (IF NOT Update(LastDate)). HesapInsert 'HAVING COUNT(*)>1' aynı VergiNo/TCNo'ya sahip ≥2 aktif hesap varsa (grup şirketleri) yeni hesap eklenemez. |
| Kök neden | modules.json Cari.HesapInsert / Cari.HesapUpdate metinleri. |
| Neden zinciri | Teknik olay: SQL 512 Subquery returned more than 1 value ↓ Yakın neden: 'SubeId = (select SubeId from inserted)', 'Id <> (select Id from deleted)', 'SET @UserID=(select UserId from inserted)' ↓ Kullanıcı etkisi: Toplu hesap aktarımında 'Subquery returned more than 1 value'; bazı kullanıcı gruplarında (4,6) hesap düzenlemede 'Yetki |
| Etkilenen veri | Cari.Hesaplar |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Set-tabanlı tetikleyici (inserted JOIN); yetki kuralının uygulama katmanına taşınması. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT VergiNo,SubeId,COUNT(*) FROM Cari.Hesaplar WHERE IsDeleted=0 AND VergiNo IS NOT NULL GROUP BY VergiNo,SubeId HAVING COUNT(*)>1; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-068 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET (BASE-DEPENDENCY) · Guard=HAYIR · modules.json Cari.HesapInsert / Cari.HesapUpdate metinleri. |
POTANSİYEL ERR-POT-131 — SQLR-069 Subquery returned more than 1 value: Sistem.GetIslemKodu; FN.GetKur; Cari.IslemDetayiEkle; POS.Sabit S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Subquery returned more than 1 value |
| Kullanıcı belirtisi | Nadir 'Subquery returned more than 1 value' (RSReferans); kur değeri beklenenden farklı (sessiz). |
| Teknik belirti | GetIslemKodu: 'Where I.Id=@tpIslemId' PK ile tek satır → güvenli (Left Join tu on tu.Id=@tpTurId PK). FN.GetKur: 'Select top 1 Alis … Where BirimId=@BirimId' ORDER BY yok → mükerrer kurda rastgele (sessiz). IslemDetayiEkle: '(Select TargetID from Cari.RSReferans Where SenderID=@IslemId)' PK yok → 512 mümkün. |
| SQL hata no | 512 / (sessiz TOP 1) |
| SQL hata mesajı | Subquery returned more than 1 value |
| Ekran | İşlem listeleri (GetIslemKodu her satırda); AcceptTransaction pırlanta maliyeti (FN.GetKur); FrmSeriFaturaBas (IslemDetayiEkle) |
| İlgili SQL nesneleri | Sistem.GetIslemKodu, FN.GetKur, Cari.IslemDetayiEkle, POS.Sabit, Sistem.CariIslemKodu, Sistem.GetKurListesi, Cari.RSReferans, POS.Sabitler |
| SQL Object | Sistem.GetIslemKodu; FN.GetKur; Cari.IslemDetayiEkle; POS.Sabit |
| Tablo | Sistem.CariIslemKodu/Turu/Tipi (PK Id); Sistem.GetKurListesi; Cari.RSReferans (PK yok); POS.Sabitler |
| Tetikleme koşulu | GetIslemKodu: 'Where I.Id=@tpIslemId' PK ile tek satır → güvenli (Left Join tu on tu.Id=@tpTurId PK). FN.GetKur: 'Select top 1 Alis … Where BirimId=@BirimId' ORDER BY yok → mükerrer kurda rastgele (sessiz). IslemDetayiEkle: '(Select TargetID from Cari.RSReferans Where SenderID=@IslemId)' PK yok → 512 mümkün. |
| Kök neden | modules.json FN.GetKur, Sistem.GetIslemKodu, Cari.IslemDetayiEkle; indexes.json PK listesi. |
| Neden zinciri | Teknik olay: SQL 512 / (sessiz TOP 1) Subquery returned more than 1 value ↓ Yakın neden: GetIslemKodu: 'Where I.Id=@tpIslemId' PK ile tek satır → güvenli (Left Join tu on tu.Id=@tpTurId PK). FN.GetKur: 'Select ↓ Kullanıcı etkisi: Nadir 'Subquery returned more than 1 value' (RSReferans); kur değeri beklenenden farklı (sessiz). |
| Etkilenen veri | Sistem.CariIslemKodu/Turu/Tipi (PK Id); Sistem.GetKurListesi; Cari.RSReferans (PK yok); POS.Sabitler |
| Olasılık / etki / güven | Düşük / S3 / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): GetKur'a ORDER BY Id DESC; RSReferans'a PK. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT SenderID,COUNT(*) FROM Cari.RSReferans GROUP BY SenderID HAVING COUNT(*)>1; |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-069 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET (GetIslemKodu, GetKur); IslemDetayiEkle LEGACY · Guard=KISMEN · modules.json FN.GetKur, Sistem.GetIslemKodu, Cari.IslemDetayiEkle; indexes.json PK listesi. |
POTANSİYEL ERR-POT-132 — SQLR-071 Dynamic SQL / injection: (kod) string-birleştirmeli SQL S1 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-VERİTABANI |
| Alt modül | Dynamic SQL / injection |
| Kullanıcı belirtisi | 'Unclosed quotation mark after the character string' / 'Incorrect syntax near …'; arama sonuç vermez. |
| Teknik belirti | Kullanıcı metninde tek tırnak (') → 102 'Incorrect syntax' ya da 105 'Unclosed quotation mark'; bilinçli girdi → SQL injection (sa hesabı ile bağlanıldığı için (TD-05) sunucu düzeyinde etki). Aciklama alanı genelde parametreli (@Aciklama) — tırnak riski daha çok arama/filtre metinlerinde. |
| SQL hata no | 102 (tek tırnak) / injection |
| SQL hata mesajı | Dynamic SQL / injection |
| Ekran | 1.294 SQL cümlesinin 914'ü (%70,6) '&' ile birleştiriliyor; 553'ü tırnaklı literal ('" & x & "'); 252 parametreli; 133 sabit. Serbest metin girenler: FrmFaturaBas.vb:168→:140 Cari.FindTaxInfo('"&TxtFilter.Text&"'); FindTaxInfo.vb:25; FrmOdemeListesi.vb:9,11 (ComboBoxEdit1.Text); FrmZiynetIscilikleri.vb:9 (DbCombo1.Text); iScreen.vb:1136 (UserName); Sistem.Clients.vb:28 (Computer/UserName); Stok.Model/Pirlanta/Siparis.Recete Kodu kontrolleri; iScreen.vb:975 '& Filter & OrderString'; SQLBase.vb:138-161 jenerik. |
| Kod dosyası | dyn_out.json (concat_quoted 553; txt 168); dyn_sites 35; ERPPRO/Class/Dao/_SQLBase/SQLBase.vb:138,140,161 |
| SQL Object | (kod) string-birleştirmeli SQL |
| Tablo | — |
| Kolon | — |
| Tetikleme koşulu | Kullanıcı metninde tek tırnak (') → 102 'Incorrect syntax' ya da 105 'Unclosed quotation mark'; bilinçli girdi → SQL injection (sa hesabı ile bağlanıldığı için (TD-05) sunucu düzeyinde etki). Aciklama alanı genelde parametreli (@Aciklama) — tırnak riski daha çok arama/filtre metinlerinde. |
| Kök neden | dyn.py istatistiği (sql_frags kaynak satırları okunarak); TD-09, TD-10, TD-37. |
| Neden zinciri | Teknik olay: SQL 102 (tek tırnak) / injection Dynamic SQL / injection ↓ Yakın neden: Kullanıcı metninde tek tırnak (') → 102 'Incorrect syntax' ya da 105 'Unclosed quotation mark'; bilinçli girdi → SQL inj ↓ Kullanıcı etkisi: 'Unclosed quotation mark after the character string' / 'Incorrect syntax near …'; arama sonuç vermez. |
| Etkilenen veri | — |
| Olasılık / etki / güven | Yüksek (tırnaklı isim: O'NEIL, D'ARC…) / S1 (güvenlik) / S3 (hata) / 95 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Parametreli sorguya geçiş (TD-09); en azından serbest metin girişlerinde Replace("'","''"). (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Test senaryosu | Belirtiyi yeniden üret: 'Unclosed quotation mark after the character string' / 'Incorrect syntax near …'; arama sonuç vermez. |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-071 · DB1=EVET DB2=EVET BASE=— · Guard=HAYIR · dyn.py istatistiği (sql_frags kaynak satırları okunarak); TD-09, TD-10, TD-37. |
| Wiki bağlantıları | TD-09 · TD-10 · TD-37 |
POTANSİYEL ERR-POT-133 — SQLR-072 Dynamic SQL / injection: Agent.RunAgent; AifaDev.ExQueryBuilder; Cari.GetHesapExtresi; Sistem.FromERP; Sistem.SirketOlustur; dbo.sp_DevirIslemiYap (6 modül) S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-071 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Dynamic SQL / injection |
| Problem ailesi | PF-071 Bakiye ekstresi / bilanço / rapor zaman aşımı (timeout) |
| Kullanıcı belirtisi | Hesap ekstresi: 'Incorrect syntax near ]' ya da zaman aşımı; SirketOlustur yanlışlıkla çalıştırılırsa tüm veriler silinir. |
| Teknik belirti | Tablo içeriği doğrudan SQL metnine ekleniyor: Agent.Agent.ConditionQuery (serbest SQL, sp_executesql); FieldName/Owner köşeli parantezle ama ']' kaçışsız; BakiyeKodlari.Kodu pivot kolon adı ('[' + Kodu + ']' — Kodu ']' içerirse 102); FromERP @Database QUOTENAME'siz; SirketOlustur sys.tables üzerinden 'truncate table' + DBCC SHRINKDATABASE (tüm veriyi siler!). GetHesapExtresi CROSS APPLY running-sum: BakiyeIslem (1,46M) üzerinde O(n²) → timeout. |
| SQL hata no | 102 / injection |
| SQL hata mesajı | Dynamic SQL / injection |
| Ekran | RunAgent: koddan çağıran yok; ExQueryBuilder: DynamicForms; GetHesapExtresi: koddan çağıran yok; FromERP: FrmHesapAktar; SirketOlustur/sp_DevirIslemiYap: manuel |
| Kod dosyası | dbclean/analysis_db.json dyn_mods |
| İlgili SQL nesneleri | Agent.RunAgent, AifaDev.ExQueryBuilder, Cari.GetHesapExtresi, Sistem.FromERP, Sistem.SirketOlustur, dbo.sp_DevirIslemiYap, Agent.Agent, AifaDev.RepositoryItems, Cari.BakiyeKodlari |
| SQL Object | Agent.RunAgent; AifaDev.ExQueryBuilder; Cari.GetHesapExtresi; Sistem.FromERP; Sistem.SirketOlustur; dbo.sp_DevirIslemiYap (6 modül) |
| Tablo | Agent.Agent.ConditionQuery; AifaDev.RepositoryItems.FieldName/Owner; Cari.BakiyeKodlari.Kodu; @Database; sys.tables |
| Tetikleme koşulu | Tablo içeriği doğrudan SQL metnine ekleniyor: Agent.Agent.ConditionQuery (serbest SQL, sp_executesql); FieldName/Owner köşeli parantezle ama ']' kaçışsız; BakiyeKodlari.Kodu pivot kolon adı ('[' + Kodu + ']' — Kodu ']' içerirse 102); FromERP @Database QUOTENAME'siz; SirketOlustur sys.tables üzerinden 'truncate table' + DBCC SHRINKDATABASE (tüm veriyi siler!). GetHesapExtresi CROSS APPLY running-sum: BakiyeIslem (1,46M) üzerinde O(n²) → timeout. |
| Kök neden | analysis_db.json dyn_mods (6 nesne); modules.json metinleri (GetHesapExtresi pivot, FromERP exec(@HesapQuery)). |
| Neden zinciri | Teknik olay: SQL 102 / injection Dynamic SQL / injection ↓ Yakın neden: Tablo içeriği doğrudan SQL metnine ekleniyor: Agent.Agent.ConditionQuery (serbest SQL, sp_executesql); FieldName/Owner k ↓ Kullanıcı etkisi: Hesap ekstresi: 'Incorrect syntax near ]' ya da zaman aşımı; SirketOlustur yanlışlıkla çalıştırılırsa tüm veriler silini |
| Etkilenen veri | Agent.Agent.ConditionQuery; AifaDev.RepositoryItems.FieldName/Owner; Cari.BakiyeKodlari.Kodu; @Database; sys.tables |
| Olasılık / etki / güven | Düşük (çoğunun çağıranı yok) / SirketOlustur: yıkıcı / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): QUOTENAME; SirketOlustur ve sp_DevirIslemiYap'ın BASE'den çıkarılıp yönetici betiğine alınması. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT Kodu FROM Cari.BakiyeKodlari WHERE Kodu LIKE '%[]]%' OR Kodu LIKE '%[[]%'; |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-072 · DB1=EVET DB2=BİLİNMİYOR BASE=FromERP BASE-CORE; ExQueryBuilder BASE-DEPENDENCY; diğerleri UNKNOWN · Guard=HAYIR · analysis_db.json dyn_mods (6 nesne); modules.json metinleri (GetHesapExtresi pivot, FromERP exec(@HesapQuery)). |
| İlişkili kayıtlar | ERR-POT-103, ERR-POT-139 |
POTANSİYEL ERR-POT-134 — SQLR-073 Transaction count mismatch: Cari.AcceptTransaction S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E05 — Transaction Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Transaction count mismatch |
| Kullanıcı belirtisi | 'BU HESABIN ZORUNLU EVRAKLARI EKSIKTIR…' + 'The transaction ended in the trigger. The batch has been aborted.'; nadiren 'A cursor with the name IslemCursor already exists' (16915) sonraki denemede (TD-03 cursor sızıntısı). |
| Teknik belirti | 13 ROLLBACK, 5 RETURN. Eksik evrak (satır ~119), Şube/Kasa/Hesap=0 (~182), takoz kontrolleri (~229,~243) dallarında ROLLBACK sonrası RETURN yok → cursor döngüsü devam eder; @@TRANCOUNT=0 iken MERGE Sistem.Activity, 'Update Stok.Takoz Set IsDeleted' vb. AUTOCOMMIT ile kalıcı olur. Kullanıcı RAISERROR mesajını + 3609'u görür; ADO.NET SqlException ilk mesajı verir. Çok satırlı INSERT'te ilk satırda ROLLBACK, sonraki satırlar için 'CLOSE/FETCH' cursor hataları (16917/16924) olası. |
| SQL hata no | 3609 (The transaction ended in the trigger. The batch has been aborted.) / 266 |
| SQL hata mesajı | Transaction count mismatch |
| Ekran | Her işlem kaydı (Cari.Islem.Save → INSERT; iptal → UPDATE) |
| Kod dosyası | ERPPRO/Class/Dao/Islem/Cari.Islem.vb:568,859 |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Cari.Islemler, Sistem.Activity, Stok.Takoz |
| SQL Object | Cari.AcceptTransaction |
| Tablo | Cari.Islemler |
| Tetikleme koşulu | 13 ROLLBACK, 5 RETURN. Eksik evrak (satır ~119), Şube/Kasa/Hesap=0 (~182), takoz kontrolleri (~229,~243) dallarında ROLLBACK sonrası RETURN yok → cursor döngüsü devam eder; @@TRANCOUNT=0 iken MERGE Sistem.Activity, 'Update Stok.Takoz Set IsDeleted' vb. AUTOCOMMIT ile kalıcı olur. Kullanıcı RAISERROR mesajını + 3609'u görür; ADO.NET SqlException ilk mesajı verir. Çok satırlı INSERT'te ilk satırda ROLLBACK, sonraki satırlar için 'CLOSE/FETCH' cursor hataları (16917/16924) olası. |
| Kök neden | modules.json AcceptTransaction: ROLLBACK 13 / RETURN 5 (TD-04); DECLARE IslemCursor … CLOSE/DEALLOCATE yalnız normal akışta (TD-03). |
| Neden zinciri | Teknik olay: SQL 3609 (The transaction ended in the trigger. The batch has been aborted.) / 266 Transaction count mismatch ↓ Yakın neden: 13 ROLLBACK, 5 RETURN. Eksik evrak (satır ~119), Şube/Kasa/Hesap=0 (~182), takoz kontrolleri (~229,~243) dallarında ROLL ↓ Kullanıcı etkisi: 'BU HESABIN ZORUNLU EVRAKLARI EKSIKTIR…' + 'The transaction ended in the trigger. The batch has been aborted.'; nadiren |
| Etkilenen veri | Cari.Islemler |
| Olasılık / etki / güven | Orta (her iş kuralı ihlalinde) / S2 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Her ROLLBACK'ten sonra RETURN; THROW; cursor'un TRY/CATCH ile deallocate edilmesi. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT LEN(OBJECT_DEFINITION(OBJECT_ID('Cari.AcceptTransaction'))); -- 29.862 (DB1) vs 31.152 (DB2) |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-073 · DB1=EVET DB2=EVET (31.152 krk farklı sürüm — TD-48) BASE=EVET · Guard=KISMEN (@IsError bayrağı yalnız bakiye yazımını atlar) · modules.json AcceptTransaction: ROLLBACK 13 / RETURN 5 (TD-04); DECLARE IslemCursor … CLOSE/DEALLOCATE yalnız normal akışta (TD-03). |
| İlişkili kayıtlar | ERR-OBS-086, ERR-POT-003, ERR-POT-004, ERR-POT-030, ERR-POT-116, ERR-POT-126, ERR-POT-135, ERR-SIL-033, ERR-SIL-046 |
| Wiki bağlantıları | TD-04 · TD-03 · TD-48 |
POTANSİYEL ERR-POT-135 — SQLR-074 Deadlock / timeout: Cari.AcceptTransaction + InsertTransaction + UpdateTransaction (Cari.Islemler); Cari.GetHesapExtresi; Stok.GetOrtMilyem (cursor'lı skaler fonksiyon) S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E13 — Performans / Timeout / Deadlock |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Deadlock / timeout |
| Kullanıcı belirtisi | 'Transaction (Process ID …) was deadlocked … has been chosen as the deadlock victim' ya da 'Timeout expired'; işlem kaydedildi mi belirsiz (InternalDb Nothing döner). |
| Teknik belirti | Tek INSERT için: 4 AFTER trigger, satır başına cursor, 2× Cari.GetGerekliEvraklar (3 tablo + cross-DB view), Stok.GetTakozAdet (StokHaraketleri tarama: IslemId indeksi yok — IX_StokId(SubeId,StokTipi,StokId) kısmi), DELETE BakiyeIslem/StokHaraketleri, 5–8 INSERT, History INSERT (73 kolon). Cari.Islemler'de 26 non-clustered indeks (IX_MuhIslemler/02/03/IX_MuhasebeIslemler01 aynı anahtar: IsDeleted,IslemKodu ×4) → yazma maliyeti. Raporlar (GetKurListesi TOP 10000 + fallback join) ile eş zamanlı kilit → 1205; 30 sn üstü → Timeout. |
| SQL hata no | 1205 / -2 (Timeout expired) |
| SQL hata mesajı | Deadlock / timeout |
| Ekran | İşlem kaydı; işlem listesi; hesap ekstresi; maden stok listesi (GetOrtMilyem satır başına cursor) |
| Kod dosyası | ERPPRO/Class/Module/InternalDb.vb:11 (ConnStr 'TimeOut=30' = bağlantı zaman aşımı; CommandTimeout varsayılan 30 sn) |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Cari.Islemler, Cari.GetHesapExtresi, Stok.GetOrtMilyem, Cari.BakiyeIslem, Stok.StokHaraketleri, Cari.History, Cari.GetGerekliEvraklar, Stok.GetTakozAdet |
| SQL Object | Cari.AcceptTransaction + InsertTransaction + UpdateTransaction (Cari.Islemler); Cari.GetHesapExtresi; Stok.GetOrtMilyem (cursor'lı skaler fonksiyon) |
| Tablo | Cari.Islemler (1,58M satır, 26 indeks); Cari.BakiyeIslem (1,46M, 12 indeks, PK yok); Stok.StokHaraketleri (1,62M, 9 indeks); Cari.History (1,64M) |
| Tetikleme koşulu | Tek INSERT için: 4 AFTER trigger, satır başına cursor, 2× Cari.GetGerekliEvraklar (3 tablo + cross-DB view), Stok.GetTakozAdet (StokHaraketleri tarama: IslemId indeksi yok — IX_StokId(SubeId,StokTipi,StokId) kısmi), DELETE BakiyeIslem/StokHaraketleri, 5–8 INSERT, History INSERT (73 kolon). Cari.Islemler'de 26 non-clustered indeks (IX_MuhIslemler/02/03/IX_MuhasebeIslemler01 aynı anahtar: IsDeleted,IslemKodu ×4) → yazma maliyeti. Raporlar (GetKurListesi TOP 10000 + fallback join) ile eş zamanlı kilit → 1205; 30 sn üstü → Timeout. |
| Kök neden | indexes.json (Cari.Islemler 26 indeks; StokHaraketleri 9, çiftler); tables.json satır sayıları; trg.json 4 tetikleyici Cari.Islemler; AcceptTransaction cursor. |
| Neden zinciri | Teknik olay: SQL 1205 / -2 (Timeout expired) Deadlock / timeout ↓ Yakın neden: Tek INSERT için: 4 AFTER trigger, satır başına cursor, 2× Cari.GetGerekliEvraklar (3 tablo + cross-DB view), Stok.GetTak ↓ Kullanıcı etkisi: 'Transaction (Process ID …) was deadlocked … has been chosen as the deadlock victim' ya da 'Timeout expired'; işlem kayd |
| Etkilenen veri | Cari.Islemler (1,58M satır, 26 indeks); Cari.BakiyeIslem (1,46M, 12 indeks, PK yok); Stok.StokHaraketleri (1,62M, 9 indeks); Cari.History (1,64M) |
| Olasılık / etki / güven | Orta (yoğun saatlerde) / S2 / 70 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Mükerrer indekslerin (IsDeleted,IslemKodu ×4; StokHaraketleri IX_1/IX_Pozisyon01, IX_2/IX_3, IX_4/IX_5 çiftleri) sadeleştirilmesi; StokHaraketleri(IslemId) indeksi; tetikleyicinin set-tabanlı yazımı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT i.name,i.type_desc,STRING_AGG(c.name,',') WITHIN GROUP (ORDER BY ic.key_ordinal) FROM sys.indexes i JOIN sys.index_columns ic ON ic.object_id=i.object_id AND ic.index_id=i.index_id JOIN sys.columns c ON c.object_id=ic.object_id AND c.column_id=ic.column_id WHERE i.object_id=OBJECT_ID('Cari.Islemler') AND ic.is_included_column=0 GROUP BY i.name,i.type_desc; |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-074 · DB1=EVET DB2=EVET (Cari.Islemler 677k, BakiyeIslem 976k, History 736k) BASE=EVET · Guard=HAYIR · indexes.json (Cari.Islemler 26 indeks; StokHaraketleri 9, çiftler); tables.json satır sayıları; trg.json 4 tetikleyici Cari.Islemler; AcceptTransaction cursor. |
| İlişkili kayıtlar | ERR-OBS-086, ERR-POT-003, ERR-POT-030, ERR-POT-116, ERR-POT-134, ERR-SIL-046 |
POTANSİYEL ERR-POT-136 — SQLR-075 Recursive trigger: Cari.AcceptTransaction → Cari.Hesaplar UPDATE → Cari.HesapUpdate; Cari.Transferler UPDATE → TransferUpdateSTatus → Stok.StokHaraketleri; Sistem.Subeler INSERT → CreateKasa → Sistem.Kasalar (tetikleyici yok); Uretim.UretimIslemleri → TrBakiyeHesapla S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-067 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E04 — Trigger / Dependency Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Recursive trigger |
| Problem ailesi | PF-067 Hesap işlemlerini başka hesaba aktarma / cari-program sıfırlama / hesap temizleme |
| Kullanıcı belirtisi | İşlem girerken beklenmedik 'Aynı Vergi No ya sahip başka bir hesap mevcuttur!!' hatası. |
| Teknik belirti | AcceptTransaction 'Update Cari.Hesaplar Set LastDate=Getdate()' → HesapUpdate tetiklenir (nesting 2): VergiNo mükerrerlik kontrolü çalışır (IF NOT Update(LastDate) yetki kontrolünü atlar). Aynı VergiNo'ya sahip ≥2 başka aktif hesap varsa (grup şirketleri, '' yerine gerçek numara) RAISERROR+ROLLBACK → İŞLEM KAYDI başarısız ('Aynı Vergi No ya sahip başka bir hesap mevcuttur!!'). Gerçek özyineleme (aynı tabloya) yok; RECURSIVE_TRIGGERS DB seçeneği bilinmiyor. |
| SQL hata no | 217 (nesting 32) — düşük; iç içe tetikleme |
| SQL hata mesajı | Recursive trigger |
| Ekran | Her işlem kaydı |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Cari.Hesaplar, Cari.HesapUpdate, Cari.Transferler, Stok.StokHaraketleri, Sistem.Subeler, Sistem.Kasalar, Uretim.UretimIslemleri |
| SQL Object | Cari.AcceptTransaction → Cari.Hesaplar UPDATE → Cari.HesapUpdate; Cari.Transferler UPDATE → TransferUpdateSTatus → Stok.StokHaraketleri; Sistem.Subeler INSERT → CreateKasa → Sistem.Kasalar (tetikleyici yok); Uretim.UretimIslemleri → TrBakiyeHesapla |
| Tablo | Cari.Hesaplar; Stok.StokHaraketleri; Sistem.Kasalar |
| Tetikleme koşulu | AcceptTransaction 'Update Cari.Hesaplar Set LastDate=Getdate()' → HesapUpdate tetiklenir (nesting 2): VergiNo mükerrerlik kontrolü çalışır (IF NOT Update(LastDate) yetki kontrolünü atlar). Aynı VergiNo'ya sahip ≥2 başka aktif hesap varsa (grup şirketleri, '' yerine gerçek numara) RAISERROR+ROLLBACK → İŞLEM KAYDI başarısız ('Aynı Vergi No ya sahip başka bir hesap mevcuttur!!'). Gerçek özyineleme (aynı tabloya) yok; RECURSIVE_TRIGGERS DB seçeneği bilinmiyor. |
| Kök neden | AcceptTransaction 'Update Cari.Hesaplar Set LastDate=Getdate() Where Id=@HesapId'; HesapUpdate metni; trg.json trigger→tablo eşlemesi. |
| Neden zinciri | Teknik olay: SQL 217 (nesting 32) — düşük; iç içe tetikleme Recursive trigger ↓ Yakın neden: AcceptTransaction 'Update Cari.Hesaplar Set LastDate=Getdate()' → HesapUpdate tetiklenir (nesting 2): VergiNo mükerrerli ↓ Kullanıcı etkisi: İşlem girerken beklenmedik 'Aynı Vergi No ya sahip başka bir hesap mevcuttur!!' hatası. |
| Etkilenen veri | Cari.Hesaplar; Stok.StokHaraketleri; Sistem.Kasalar |
| Olasılık / etki / güven | Düşük-Orta / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): HesapUpdate'in yalnız VergiNo/TCNo değiştiğinde (IF UPDATE(VergiNo)) çalışması. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT is_recursive_triggers_on FROM sys.databases WHERE name=DB_NAME(); SELECT VergiNo,SubeId,COUNT(*) FROM Cari.Hesaplar WHERE IsDeleted=0 AND ISNULL(VergiNo,'')<>'' GROUP BY VergiNo,SubeId HAVING COUNT(*)>2; |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-075 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET · Guard=KISMEN · AcceptTransaction 'Update Cari.Hesaplar Set LastDate=Getdate() Where Id=@HesapId'; HesapUpdate metni; trg.json trigger→tablo eşlemesi. |
| İlişkili kayıtlar | ERR-SIL-048 |
POTANSİYEL ERR-POT-137 — SQLR-076 Disabled trigger: 12 tetikleyici (trg.json) S1 · MOD-VERİTABANI · Gözlemlendi: HAYIR · PF-034 · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E04 — Trigger / Dependency Hatası |
| Severity | S1 — KRİTİK |
| Modül | MOD-VERİTABANI |
| Alt modül | Disabled trigger |
| Problem ailesi | PF-034 Stok tutmuyor / stok düzeltme / eksi stok / stok girişi |
| Kullanıcı belirtisi | Kapalıysa: işlem kaydedilir ama bakiye/stok değişmez, History boş. |
| Teknik belirti | DB1 kataloğunda 12 tetikleyicinin tamamı is_disabled=False. TD-32 'demo kopyasında 4 Islemler tetikleyicisi DISABLED' iddiası bu katalogla ÇELİŞİYOR → iddia doğrulanamadı. Risk: tetikleyiciler kapalı bir kurulumda bakiye/stok/History üretilmez (sessiz), açıkken bu dosyadaki tüm tetikleyici riskleri geçerli. |
| SQL hata mesajı | Disabled trigger |
| Ekran | — |
| Kod dosyası | dbclean/trg.json |
| İlgili SQL nesneleri | Cari.Transferler, Sistem.SilOnay, Sistem.Subeler, Siparis.Siparisler, Uretim.UretimIslemleri, AifaDev.RepositoryItems, Cari.Islemler, Cari.Hesaplar |
| SQL Object | 12 tetikleyici (trg.json) |
| Tablo | Cari.Islemler(4), Cari.Hesaplar(2), Cari.Transferler, Sistem.SilOnay, Sistem.Subeler, Siparis.Siparisler, Uretim.UretimIslemleri, AifaDev.RepositoryItems |
| Tetikleme koşulu | DB1 kataloğunda 12 tetikleyicinin tamamı is_disabled=False. TD-32 'demo kopyasında 4 Islemler tetikleyicisi DISABLED' iddiası bu katalogla ÇELİŞİYOR → iddia doğrulanamadı. Risk: tetikleyiciler kapalı bir kurulumda bakiye/stok/History üretilmez (sessiz), açıkken bu dosyadaki tüm tetikleyici riskleri geçerli. |
| Kök neden | trg.json 12 satır is_disabled=False; TD-32 metni (AS-DOCUMENTED). |
| Neden zinciri | Teknik olay: SQL Disabled trigger ↓ Yakın neden: DB1 kataloğunda 12 tetikleyicinin tamamı is_disabled=False. TD-32 'demo kopyasında 4 Islemler tetikleyicisi DISABLED' id ↓ Kullanıcı etkisi: Kapalıysa: işlem kaydedilir ama bakiye/stok değişmez, History boş. |
| Etkilenen veri | Cari.Islemler(4), Cari.Hesaplar(2), Cari.Transferler, Sistem.SilOnay, Sistem.Subeler, Siparis.Siparisler, Uretim.UretimIslemleri, AifaDev.RepositoryItems |
| Olasılık / etki / güven | Bilinmiyor / S1 (kapalıysa bakiye üretilmez) / 85 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): Kurulum doğrulama kontrol listesine sys.triggers is_disabled sorgusu. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_SCHEMA_NAME(parent_id)+'.'+OBJECT_NAME(parent_id) AS Tablo, name, is_disabled FROM sys.triggers ORDER BY 1; |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-076 · DB1=EVET (hepsi etkin) DB2=EVET (5 tetikleyici, farklı sürüm) BASE=EVET (BASE-DEPENDENCY 12) · Guard=— · trg.json 12 satır is_disabled=False; TD-32 metni (AS-DOCUMENTED). |
| Wiki bağlantıları | TD-32 |
POTANSİYEL ERR-POT-138 — SQLR-077 Broken dependency: Cari.AcceptTransaction'ın çağırdığı fonksiyonlar: FN.GetKur, FN.Bol, Stok.GetTakozAdet, Cari.GetGerekliEvraklar(→Genel.Dosyalar→DOCUMENTS); Cari.GetKurListesi zinciri; hesaplanan kolon UDF'leri (Sistem.Pariteler.Parite → Sistem.GetIdToBirim; dbo.SyncTickets → FN.Bol [ERPSCHEMA]) S2 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E04 — Trigger / Dependency Hatası |
| Severity | S2 — YÜKSEK |
| Modül | MOD-VERİTABANI |
| Alt modül | Broken dependency |
| Kullanıcı belirtisi | Temizlik sonrası işlem kaydında 'Invalid object name FN.GetKur' vb.; 'Cannot DROP FUNCTION … because it is being referenced by object Pariteler'. |
| Teknik belirti | Tetikleyici içinde çağrılan UDF/view zincirinden biri drop/rename edilirse (BASE temizliğinde 'EXCLUDE' adayları) tetikleyici her INSERT'te 208 ile düşer. Sistem.Pariteler.Parite hesaplanan kolonu Sistem.GetIdToBirim'e bağlı: fonksiyon kaldırılamaz (3729) ve fonksiyon Sistem.Birimler'i okur (CTR-BASE-COMPUTED-UDF: UDF'li hesaplanan kolon tablo taramalarında satır başına çağrı, paralel plan yok). deps.json'da is_ambiguous/is_caller_dependent satırları temizlik sırasında yanlış 'kullanılmıyor' kararına yol açabilir. |
| SQL hata no | 208 / 4413 |
| SQL hata mesajı | Broken dependency |
| Ekran | İşlem kaydı; parite tanımı |
| İlgili SQL nesneleri | Cari.AcceptTransaction, FN.GetKur, FN.Bol, Stok.GetTakozAdet, Genel.Dosyalar, Sistem.Pariteler, Sistem.GetIdToBirim, Cari.Islemler, Sistem.Birimler, Cari.GetGerekliEvraklar |
| SQL Object | Cari.AcceptTransaction'ın çağırdığı fonksiyonlar: FN.GetKur, FN.Bol, Stok.GetTakozAdet, Cari.GetGerekliEvraklar(→Genel.Dosyalar→DOCUMENTS); Cari.GetKurListesi zinciri; hesaplanan kolon UDF'leri (Sistem.Pariteler.Parite → Sistem.GetIdToBirim; dbo.SyncTickets → FN.Bol [ERPSCHEMA]) |
| Tablo | Sistem.Pariteler; Cari.Islemler |
| Kolon | Parite (computed, UDF) |
| Tetikleme koşulu | Tetikleyici içinde çağrılan UDF/view zincirinden biri drop/rename edilirse (BASE temizliğinde 'EXCLUDE' adayları) tetikleyici her INSERT'te 208 ile düşer. Sistem.Pariteler.Parite hesaplanan kolonu Sistem.GetIdToBirim'e bağlı: fonksiyon kaldırılamaz (3729) ve fonksiyon Sistem.Birimler'i okur (CTR-BASE-COMPUTED-UDF: UDF'li hesaplanan kolon tablo taramalarında satır başına çağrı, paralel plan yok). deps.json'da is_ambiguous/is_caller_dependent satırları temizlik sırasında yanlış 'kullanılmıyor' kararına yol açabilir. |
| Kök neden | deps.json (2026 satır); computed.json Sistem.Pariteler.Parite 'Sistem.GetIdToBirim]([AnaBirimId])'; ERPSCHEMA dbo.SyncTickets computed 'FN.Bol'. |
| Neden zinciri | Teknik olay: SQL 208 / 4413 Broken dependency ↓ Yakın neden: Tetikleyici içinde çağrılan UDF/view zincirinden biri drop/rename edilirse (BASE temizliğinde 'EXCLUDE' adayları) tetikl ↓ Kullanıcı etkisi: Temizlik sonrası işlem kaydında 'Invalid object name FN.GetKur' vb.; 'Cannot DROP FUNCTION … because it is being referen |
| Etkilenen veri | Sistem.Pariteler; Cari.Islemler |
| Olasılık / etki / güven | Düşük (temizlik yapılırsa orta) / S2 / 80 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): build_order.json zincirinin BASE build'inde korunması; drop öncesi sys.sql_expression_dependencies kontrolü. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT referenced_schema_name+'.'+referenced_entity_name FROM sys.sql_expression_dependencies WHERE referencing_id=OBJECT_ID('Cari.AcceptTransaction') AND referenced_id IS NULL; |
| Test senaryosu | Doğrulama SQL'i çalıştır (salt okunur); beklenen: 0 kayıt |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-077 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET · Guard=HAYIR · deps.json (2026 satır); computed.json Sistem.Pariteler.Parite 'Sistem.GetIdToBirim]([AnaBirimId])'; ERPSCHEMA dbo.SyncTickets computed 'FN.Bol'. |
| İlişkili kayıtlar | ERR-OBS-070, ERR-POT-023, ERR-POT-033, ERR-POT-101, ERR-POT-139, ERR-SIL-026, ERR-SIL-031, ERR-SIL-036, ERR-SIL-041, ERR-SIL-064 |
POTANSİYEL ERR-POT-139 — SQLR-078 Collation conflict: Pozisyon.Write (COLLATE Turkish_CI_AS); Genel.Dosyalar (cross-DB DOCUMENTS); Sistem.FromERP (<@Database>.dbo.*); ERPGLOBAL.dbo.Company S3 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S3 — ORTA |
| Modül | MOD-VERİTABANI |
| Alt modül | Collation conflict |
| Kullanıcı belirtisi | 'Cannot resolve the collation conflict between … in the equal to operation.' |
| Teknik belirti | Tek açık COLLATE kullanan modül Pozisyon.Write. Cross-DB join'lerde (DOCUMENTS, eski ERP DB, ERPGLOBAL, tempdb #tablolar) karşı DB'nin harmanlaması farklıysa 468 'Cannot resolve the collation conflict'. DB1 harmanlaması bu turda alınmadı (GAP). |
| SQL hata no | 468 |
| SQL hata mesajı | Collation conflict |
| Ekran | Pozisyon yazımı; evrak kontrolü; hesap aktarımı |
| İlgili SQL nesneleri | Pozisyon.Write, Genel.Dosyalar, Sistem.FromERP |
| SQL Object | Pozisyon.Write (COLLATE Turkish_CI_AS); Genel.Dosyalar (cross-DB DOCUMENTS); Sistem.FromERP (<@Database>.dbo.*); ERPGLOBAL.dbo.Company |
| Tetikleme koşulu | Tek açık COLLATE kullanan modül Pozisyon.Write. Cross-DB join'lerde (DOCUMENTS, eski ERP DB, ERPGLOBAL, tempdb #tablolar) karşı DB'nin harmanlaması farklıysa 468 'Cannot resolve the collation conflict'. DB1 harmanlaması bu turda alınmadı (GAP). |
| Kök neden | modules.json COLLATE taraması: yalnız Pozisyon.Write. |
| Neden zinciri | Teknik olay: SQL 468 Collation conflict ↓ Yakın neden: Tek açık COLLATE kullanan modül Pozisyon.Write. Cross-DB join'lerde (DOCUMENTS, eski ERP DB, ERPGLOBAL, tempdb #tablolar ↓ Kullanıcı etkisi: 'Cannot resolve the collation conflict between … in the equal to operation.' |
| Olasılık / etki / güven | Düşük / S3 / 60 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): BASE kurulumunda DB harmanlamasının sabitlenmesi (Turkish_CI_AS) ve tempdb/cross-DB için COLLATE DATABASE_DEFAULT. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT DATABASEPROPERTYEX(DB_NAME(),'Collation'), SERVERPROPERTY('Collation'); |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-078 · DB1=EVET DB2=BİLİNMİYOR BASE=Pozisyon.Write UNKNOWN · Guard=KISMEN (Pozisyon.Write) · modules.json COLLATE taraması: yalnız Pozisyon.Write. |
| İlişkili kayıtlar | ERR-POT-101, ERR-POT-103, ERR-POT-133, ERR-POT-138, ERR-SIL-031 |
POTANSİYEL ERR-POT-140 — SQLR-079 Collation conflict: nvarchar(1) kolonlar; text/image legacy tipler; bit'e 'True'/'False' string S4 · MOD-VERİTABANI · Gözlemlendi: HAYIR · AÇIK
| Hata sınıfı | POTANSİYEL POTANSİYEL HATA |
| Gözlemlendi | HAYIR · Observed=HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz bulgusu; çalışma zamanında yeniden üretilmedi (Gözlemlendi: HAYIR) |
| Hata kategorisi | E02 — SQL Server Hatası |
| Severity | S4 — DÜŞÜK |
| Modül | MOD-VERİTABANI |
| Alt modül | Collation conflict |
| Kullanıcı belirtisi | Tanım ekranında 'String or binary data would be truncated'; tasarımcıda text tipi hataları. |
| Teknik belirti | nvarchar(1) kod kolonlarına 2+ karakter → 8152. text/image tipleri: sys.sql_modules/STRING fonksiyonları ile kullanılamaz (LEN/REPLACE → 8116 'Argument data type text is invalid'), uyumluluk seviyesi 100 (TD-33) ile korunuyor ama ileri sürümde kaldırılacak. Where IsDeleted='False' (string→bit) geçerli; performans etkisi yok. Yon nvarchar(1): '+'/'-'. |
| SQL hata no | (veri tipi) 8152/245 |
| SQL hata mesajı | Collation conflict |
| Ekran | Sistem tanımları; tasarımcı (CodeDesigner) |
| İlgili SQL nesneleri | Sistem.CariIslemTipi, Sistem.CariIslemTuru, Sistem.TakozScala, Cari.Islemler, AifaDev.Forms, Design.Forms |
| SQL Object | nvarchar(1) kolonlar; text/image legacy tipler; bit'e 'True'/'False' string |
| Tablo | Sistem.CariIslemTipi.Kod, Sistem.CariIslemTuru.Kod/Yon, Sistem.TakozScala.Kodu (nvarchar(1)); Cari.Islemler.Yon/History.Yon varchar(1); AifaDev.Forms FormCode/ClassCode/DesignerCode (text); Design.Forms.FormLayout (text); 19 image kolonu |
| Tetikleme koşulu | nvarchar(1) kod kolonlarına 2+ karakter → 8152. text/image tipleri: sys.sql_modules/STRING fonksiyonları ile kullanılamaz (LEN/REPLACE → 8116 'Argument data type text is invalid'), uyumluluk seviyesi 100 (TD-33) ile korunuyor ama ileri sürümde kaldırılacak. Where IsDeleted='False' (string→bit) geçerli; performans etkisi yok. Yon nvarchar(1): '+'/'-'. |
| Kök neden | columns.json taraması: nvarchar(1) 4, varchar(1) 2, text 4, image 19. |
| Neden zinciri | Teknik olay: SQL (veri tipi) 8152/245 Collation conflict ↓ Yakın neden: nvarchar(1) kod kolonlarına 2+ karakter → 8152. text/image tipleri: sys.sql_modules/STRING fonksiyonları ile kullanılama ↓ Kullanıcı etkisi: Tanım ekranında 'String or binary data would be truncated'; tasarımcıda text tipi hataları. |
| Etkilenen veri | Sistem.CariIslemTipi.Kod, Sistem.CariIslemTuru.Kod/Yon, Sistem.TakozScala.Kodu (nvarchar(1)); Cari.Islemler.Yon/History.Yon varchar(1); AifaDev.Forms FormCode/ClassCode/DesignerCode (text); Design.Forms.FormLayout (text); 19 image kolonu |
| Olasılık / etki / güven | Düşük / S4 / 90 |
| Bilinen ticket | HAYIR |
| Ticket sayısı | 0 |
| Bilinen çözüm | [Ekip tarafından doldurulacak] |
| Geçici çözüm | [Ekip tarafından doldurulacak] |
| Kalıcı çözüm | Öneri (uygulanmadı): text/image → nvarchar(max)/varbinary(max); nvarchar(1) kodların standardı. (Uygulanmadı) |
| Önleme | [Ekip tarafından doldurulacak] |
| Tespit yöntemi | SQL modül/katalog analizi |
| Validation SQL (salt okunur) | SELECT OBJECT_NAME(object_id),name FROM sys.columns WHERE system_type_id IN (35,34,99); |
| Test senaryosu | [Ekip tarafından doldurulacak] |
| Durum | AÇIK |
| Sorumlu | [Ekip tarafından atanacak] |
| Kaynak | SQL risk analizi SQLR-079 · DB1=EVET DB2=BİLİNMİYOR BASE=EVET · Guard=— · columns.json taraması: nvarchar(1) 4, varchar(1) 2, text 4, image 19. |
