80 SQL Server hata riski: Invalid object name, Conversion failed, mükerrer anahtar, timeout, tetikleyici zinciri; nesne, ekran, guard, öneri.
Künye (front-matter) · EKB-SQL · reality [SUPPORT_OBSERVED, SOURCE_IMPLEMENTED, GENERATED_PROPOSAL]
| id | EKB-SQL |
| title | SQL Server 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 | [SQL Server 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) |
| sql_objects | 119 nesne |
| runtime_status | MOSTLY_NOT_REPRODUCED (Observed alanına bakınız) |
SQL Server hata riskleri (SQLR-001…SQLR-080). Kod ile veritabanı kataloğu arasındaki uyumsuzluklardan (eksik nesne, eksik kolon, tip dönüşümü, mükerrer anahtar, timeout, tetikleyici zinciri) doğabilecek SQL hataları. Observed=HAYIR olan kayıtlar canlı ortamda görülmemiş, statik analizde bulunmuştur.
Özet
| SQL hata sınıfı | Kayıt | Observed=EVET | Guard var |
|---|---|---|---|
| Invalid object name | 37 | 0 | 0 |
| Invalid column name | 9 | 0 | 0 |
| Divide by zero | 5 | 0 | 2 |
| Conversion failed | 4 | 0 | 0 |
| Subquery returned more than 1 value | 4 | 0 | 0 |
| Could not find stored procedure | 2 | 0 | 0 |
| String or binary data would be truncated | 2 | 0 | 0 |
| Cannot insert NULL | 2 | 0 | 0 |
| Duplicate key | 2 | 0 | 0 |
| Identity | 2 | 0 | 0 |
| Dynamic SQL / injection | 2 | 0 | 0 |
| Collation conflict | 2 | 0 | 0 |
| Arithmetic overflow | 1 | 0 | 0 |
| Transaction count mismatch | 1 | 0 | 0 |
| Deadlock / timeout | 1 | 0 | 0 |
| Recursive trigger | 1 | 0 | 0 |
| Disabled trigger | 1 | 0 | 0 |
| Broken dependency | 1 | 0 | 0 |
| Legacy | 1 | 0 | 0 |
Kayıtlar
SQL SQLR-001 — Invalid object name: Cari.Odemeler S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.Odemeler |
| Tablo | Cari.Odemeler |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek — menüden ve işlem ekranından açılabiliyor / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / HAYIR (TD-45: iki DB'de de yok) / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Cari.Odemeler') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Cari.Odemeler] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-002 — Invalid object name: Genel.IptalOnay S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Genel.IptalOnay |
| Tablo | Genel.IptalOnay |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta — menüden açılabiliyor / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Genel.IptalOnay') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Genel.IptalOnay] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-003 — Invalid object name: Siparis.FiyatListesi S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.FiyatListesi |
| Tablo | Siparis.FiyatListesi |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.FiyatListesi') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Siparis.FiyatListesi] (8 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-004 — Invalid object name: Uretim.Eritme S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.Eritme |
| Tablo | Uretim.Eritme |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta (üretim modülü) / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / HAYIR (TD-45: iki DB'de de yok) / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.Eritme') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.Eritme] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-005 — Invalid object name: Uretim.Formul S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.Formul |
| Tablo | Uretim.Formul |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / HAYIR (TD-45: iki DB'de de yok) / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.Formul') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.Formul] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-006 — Invalid object name: Uretim.FormulDetay S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.FormulDetay |
| Tablo | Uretim.FormulDetay |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.FormulDetay') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.FormulDetay] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-007 — Invalid object name: Uretim.ModelPartiBilgileri S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.ModelPartiBilgileri |
| Tablo | Uretim.ModelPartiBilgileri |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / HAYIR (TD-45: iki DB'de de yok) / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.ModelPartiBilgileri') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.ModelPartiBilgileri] (7 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-008 — Invalid object name: Uretim.Partiler S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.Partiler |
| Tablo | Uretim.Partiler |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.Partiler') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.Partiler] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-009 — Invalid object name: Siparis.GetFiyatListesi S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.GetFiyatListesi |
| Ekran | FrmModelFiyatEkle / Siparis.FiyatListesiEx.vb:31 |
| Kod dosyası | ERPPRO/Class/Ext/Siparis.FiyatListesiEx.vb:31 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.GetFiyatListesi') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Siparis.GetFiyatListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-010 — Invalid object name: Uretim.GetEritmeListesi S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.GetEritmeListesi |
| Ekran | Uretim.Eritmeex.vb:17 liste |
| Kod dosyası | ERPPRO/Class/Ext/Uretim.Eritmeex.vb:17 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetEritmeListesi') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.GetEritmeListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-011 — Invalid object name: Uretim.GetFormuls S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.GetFormuls |
| Ekran | Uretim.FormulEx.vb:31 |
| Kod dosyası | ERPPRO/Class/Ext/Uretim.FormulEx.vb:31 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetFormuls') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.GetFormuls] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-012 — Invalid object name: Uretim.GetModelPartiBilgiListesi S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.GetModelPartiBilgiListesi |
| Ekran | Uretim.ModelPartiBilgileri.vb:15 (Ext) |
| Kod dosyası | ERPPRO/Class/Ext/Uretim.ModelPartiBilgileri.vb:15 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetModelPartiBilgiListesi') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.GetModelPartiBilgiListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-013 — Invalid object name: Uretim.GetPartiler S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.GetPartiler |
| Ekran | UretimPartilerEx.vb:15 → FrmUretimIslemleri |
| Kod dosyası | ERPPRO/Class/Ext/UretimPartilerEx.vb:15 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetPartiler') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.GetPartiler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-014 — Invalid object name: Cari.GETOdemeKasaOzeti S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.GETOdemeKasaOzeti |
| Ekran | FrmOdemeKasa.vb:8 (ödeme kasası özeti) |
| Kod dosyası | ERPPRO/Controls/Islem Ekranı/Ekran/FrmOdemeKasa.vb:8 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Cari.GETOdemeKasaOzeti') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Cari.GETOdemeKasaOzeti] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-015 — Invalid object name: Cari.GETOdemeListesi S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.GETOdemeListesi |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Cari.GETOdemeListesi') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Cari.GETOdemeListesi] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-016 — Invalid object name: Organizasyon.Gorevler S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Organizasyon.Gorevler |
| Tablo | Organizasyon.Gorevler |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / HAYIR (TD-45: iki DB'de de yok) / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Organizasyon.Gorevler') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Organizasyon.Gorevler] (8 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-017 — Invalid object name: Organizasyon.GorevDagitim S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Organizasyon.GorevDagitim |
| Tablo | Organizasyon.GorevDagitim |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Organizasyon.GorevDagitim') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Organizasyon.GorevDagitim] (6 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-018 — Invalid object name: Sistem.iException S4 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Sistem.iException |
| Tablo | Sistem.iException |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Çok düşük (çağıran ekran bulunamadı — ölü kod) / S4 / 60 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Sistem.iException') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Sistem.iException] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-019 — Invalid object name: Siparis.PaketHesaplari S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.PaketHesaplari |
| Tablo | Siparis.PaketHesaplari |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.PaketHesaplari') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Siparis.PaketHesaplari] (3 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-020 — Invalid object name: Siparis.ModelAyarBlackList S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.ModelAyarBlackList |
| Tablo | Siparis.ModelAyarBlackList |
| Ekran | FrmModelKartıEkle.vb:27, FrmSipModelEkle.vb:75 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmModelKartıEkle.vb:27; ERPPRO/Form/Siparis/FrmSipModelEkle.vb:75 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.ModelAyarBlackList') AS ObjId; -- NULL ise nesne yok |
| Kanıt | 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. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-021 — Invalid object name: Siparis.modelayarBlacklist S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.modelayarBlacklist |
| Tablo | Siparis.modelayarBlacklist |
| Ekran | FrmModelKartıEkle.vb:168,176 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmModelKartıEkle.vb:168; ERPPRO/Form/Siparis/FrmModelKartıEkle.vb:176 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.modelayarBlacklist') AS ObjId; -- NULL ise nesne yok |
| Kanıt | 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. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-022 — Invalid object name: Siparis.GetPaketHesapListesi S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.GetPaketHesapListesi |
| Ekran | FrmPaketEkle.vb:53 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmPaketEkle.vb:53 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.GetPaketHesapListesi') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Siparis.GetPaketHesapListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-023 — Invalid object name: Siparis.GetUyumluPaketler S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.GetUyumluPaketler |
| Ekran | FrmSipModelEkle.vb:115 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmSipModelEkle.vb:115 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.GetUyumluPaketler') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Siparis.GetUyumluPaketler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-024 — Invalid object name: Siparis.GetLastPrice S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.GetLastPrice |
| Ekran | FrmSipModelEkle.vb:355 |
| Kod dosyası | ERPPRO/Form/Siparis/FrmSipModelEkle.vb:355 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Siparis.GetLastPrice') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Siparis.GetLastPrice] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-025 — Invalid object name: Uretim.GetFormulDetay S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.GetFormulDetay |
| Ekran | EditEritme.vb:45, EditFormulEkle.vb:43 |
| Kod dosyası | ERPPRO/Uretim/EditEritme.vb:45; ERPPRO/Uretim/EditFormulEkle.vb:43 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetFormulDetay') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.GetFormulDetay] (2 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-026 — Invalid object name: Uretim.GetPartiModelListesi S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Uretim.GetPartiModelListesi |
| Ekran | FrmPartiEkle.vb:113 |
| Kod dosyası | ERPPRO/Uretim/FrmPartiEkle.vb:113 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Uretim.GetPartiModelListesi') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Uretim.GetPartiModelListesi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-027 — Invalid object name: Cari.GetRiskRaporu S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.GetRiskRaporu |
| Ekran | FrmRiskRaporu (ANA MENÜ FrmMainForm.vb:365) |
| Kod dosyası | ERPPRO/Form/Tanımlamalar/Cari/FrmRiskRaporu.vb:14 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta — menüden açılabiliyor / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Cari.GetRiskRaporu') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Cari.GetRiskRaporu] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-028 — Invalid object name: Stok.GetTakozIsciligi S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Stok.GetTakozIsciligi |
| Ekran | Database.vb:625 GetTakozIsciligi ← OldFis/Printing.vb (takoz fişi yazdırma) |
| Kod dosyası | ERPPRO/Class/Module/Database.vb:625 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Stok.GetTakozIsciligi') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Stok.GetTakozIsciligi] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-029 — Invalid object name: Organizasyon.GelenGorevler S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Organizasyon.GelenGorevler |
| Tablo | Organizasyon.GelenGorevler |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Organizasyon.GelenGorevler') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Organizasyon.GelenGorevler] (3 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-030 — Invalid object name: Organizasyon.GidenGorevler S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Organizasyon.GidenGorevler |
| Tablo | Organizasyon.GidenGorevler |
| Ekran | SchedulerView.vb:50 |
| Kod dosyası | ERPPRO/Organizasyon/Task/SchedulerView.vb:50 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| 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). |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Organizasyon.GidenGorevler') AS ObjId; -- NULL ise nesne yok |
| Kanıt | basedb/out/code_refs2.json code_only[Organizasyon.GidenGorevler] (1 referans); Sistem.ERPSCHEMA satırı: YOK; TD-45. |
| İlgili SQL nesneleri | Sistem.ERPSCHEMA |
| Wiki bağlantıları | TD-45 |
SQL SQLR-031 — Invalid object name: Genel.Dosyalar (VIEW) S1 · Observed=HAYIR (DB1'de canlı test yok) · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR (DB1'de canlı test yok) · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Genel.Dosyalar (VIEW) |
| Tablo | DOCUMENTS.Genel.Dosyalar |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| 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 |
| Var mı? V2 / KUYUMCU / BASE | EVET (view) / DOCUMENTS DB: HAYIR / EVET (tablo, KUY_ONLY) / EVET (BASE-CORE) |
| 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. |
| Öneri | 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ı) |
| 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 |
| Kanıt | 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. |
| İlgili SQL nesneleri | Genel.Dosyalar, Cari.GetGerekliEvraklar |
SQL SQLR-032 — Invalid object name: LiveUpdate.Version / LiveUpdate.SetVersion / LiveUpdate.Lock / LiveUpdate.UnLock S4 · Observed=HAYIR · Guard=EVET (OBJECT_ID kontrolü)
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | LiveUpdate.Version / LiveUpdate.SetVersion / LiveUpdate.Lock / LiveUpdate.UnLock |
| Tablo | LiveUpdate.VersionHistory_ |
| Ekran | ConfigurationForm.vb:270 (LiveUpdate sürüm kontrolü) |
| Kod dosyası | ERPPRO/Configuration/ConfigurationForm.vb:270 |
| 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. |
| Guard var mı? | EVET (OBJECT_ID kontrolü) |
| Olasılık / etki / güven | Düşük / S4 / 80 |
| Var mı? V2 / KUYUMCU / BASE | EVET (proc) / VersionHistory_: HAYIR / BİLİNMİYOR / EVET (Version BASE-CORE; Lock/UnLock/SetVersion UNKNOWN) |
| Kullanıcı belirtisi | Sürüm kontrolü sırasında 'Invalid object name LiveUpdate.VersionHistory_' — yalnız kilit senaryosunda. |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('LiveUpdate.VersionHistory'), OBJECT_ID('LiveUpdate.VersionHistory_'); |
| Kanıt | analysis_db.json unresolved[148911602,484912799]='LiveUpdate.VersionHistory_'; analysis.json unresolved_in_base. |
| İlgili SQL nesneleri | LiveUpdate.Version, LiveUpdate.SetVersion, LiveUpdate.Lock, LiveUpdate.UnLock, LiveUpdate.VersionHistory |
SQL SQLR-033 — Invalid object name: Sistem.FromERP S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 (ya da 213 kolon sayısı) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Sistem.FromERP |
| Tablo | <@Database>.dbo.Firmalar, <@Database>.dbo.Birimler_, <@Database>.dbo.BakiyeIslem; hedef Cari.Hesaplar |
| Ekran | FrmHesapAktar (ANA MENÜ) → 'Sistem.FromERP <Sirket>,<Sube>,<MasterKart>' |
| Kod dosyası | ERPPRO/Form/Tanımlamalar/Sistem/FrmHesapAktar.vb:22 |
| 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). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek (ekran her çalıştırıldığında 213 kaçınılmaz) / S2 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET (proc) / BİLİNMİYOR / EVET (BASE-CORE, unresolved: dbo.firmalar, dbo.birimler_) |
| 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'. |
| Öneri | 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ı) |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM sys.columns WHERE object_id=OBJECT_ID('Cari.Hesaplar'); -- 57; proc metnindeki select listesi 41 değer |
| Kanıt | 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']. |
| İlgili SQL nesneleri | Sistem.FromERP, dbo.BakiyeIslem, Cari.Hesaplar |
SQL SQLR-034 — Invalid object name: dbo.sp_DevirIslemiYap S3 · Observed=HAYIR · Guard=KISMEN (ERPGLOBAL için IF NOT EXISTS CREATE DATABASE)
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | dbo.sp_DevirIslemiYap |
| Tablo | ERPGLOBAL.dbo.Company; Cari.Bilancolar; Cari.IslemlerDetalari; Sistem.BakiyeIslem |
| Ekran | Koddan çağıran yok (grep 0); yalnız DB içi/manuel |
| 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. |
| Guard var mı? | KISMEN (ERPGLOBAL için IF NOT EXISTS CREATE DATABASE) |
| Olasılık / etki / güven | Düşük (çağıran yok) / S3 / 80 |
| Var mı? V2 / KUYUMCU / BASE | EVET (proc) / BİLİNMİYOR / HAYIR (UNKNOWN/EXCLUDE) |
| Kullanıcı belirtisi | Çalıştırılırsa 'Invalid object name Cari.IslemlerDetalari' vb.; devir yarım kalır (TRUNCATE sonrası). |
| Öneri | BASE dışı bırakılmalı; devir mantığı tek yerde (Devir.vb vs sp_DevirIslemiYap vs Sistem.Devir çakışıyor). (Uygulanmadı) |
| 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; |
| Kanıt | 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'. |
| İlgili SQL nesneleri | dbo.sp_DevirIslemiYap, Cari.Islemler |
SQL SQLR-035 — Invalid object name: Sistem.MT4OrdersSync / Sistem.MT4TicketsSync / Sistem.Reset S4 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Sistem.MT4OrdersSync / Sistem.MT4TicketsSync / Sistem.Reset |
| Tablo | Sistem.MT4Orders, Sistem.MT4Tickets |
| Ekran | Koddan çağıran yok |
| 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ış). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük (çağıran yok; MT4 modülü DB1'de kullanılmıyor) / S4 / 80 |
| Var mı? V2 / KUYUMCU / BASE | EVET (proc) / tablolar HAYIR / BİLİNMİYOR / HAYIR (UNKNOWN) |
| Kullanıcı belirtisi | Çalıştırılırsa 'Invalid object name Sistem.MT4Orders'. |
| Öneri | MT4/FX nesne kümesi BASE dışında ayrı bir eklenti paketi olarak ele alınmalı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Sistem.MT4Orders'), OBJECT_ID('Sistem.MT4Tickets'); |
| Kanıt | analysis_db.json unresolved[1145823194]=['Sistem.MT4Orders'], [1161823251]=['Sistem.MT4tickets'], [1193823365]=['Sistem.MT4Tickets']; dbsql.json Sistem.ERPSCHEMA: Sistem.GetMT4Orders×17, Sistem.MT4EXPO×3. |
| İlgili SQL nesneleri | Sistem.MT4OrdersSync, Sistem.MT4TicketsSync, Sistem.Reset, Sistem.ERPSCHEMA |
SQL SQLR-036 — Invalid object name: AifaDev.Reports #16, #19, #29, #30 (DB içinde saklanan rapor SQL'i) S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 208 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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 |
| 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 |
| 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). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta (rapor listesinde görünür) / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / BİLİNMİYOR / HAYIR |
| Kullanıcı belirtisi | Rapor çalıştırılınca "Invalid object name 'MüşteriŞemasıD.GetEnvanter'" vb. |
| Öneri | AifaDev.Reports satırları katalogla doğrulanıp kırık raporlar pasife alınmalı; BASE seed'ine yalnız çözümlenen raporlar. (Uygulanmadı) |
| 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%'; |
| Kanıt | 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. |
| İlgili SQL nesneleri | AifaDev.Reports |
SQL SQLR-037 — Could not find stored procedure: Reports.GetPozisyonDetay S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Could not find stored procedure · SQL Error 313 (An insufficient number of arguments were supplied) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Reports.GetPozisyonDetay |
| 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 |
| Tetikleme koşulu | Fonksiyon (@SubeId,@BasTarih,@SonTarih) 3 parametre bekliyor; kod ve PopupGrid 2 argümanla çağırıyor: Reports.GetPozisyonDetay('tarih1','tarih2'). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek (ekran açıldığında her seferinde) / S3 / 95 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR (DB2'de imza farklı olabilir) / EVET (BASE-CORE) |
| Kullanıcı belirtisi | "An insufficient number of arguments were supplied for the procedure or function Reports.GetPozisyonDetay." — Pozisyon Durum raporu boş. |
| Öneri | Fonksiyon imzası ile çağrılar eşitlenmeli (DB2'deki imza doğrulanmalı — sürüm kayması işareti). (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT p.name FROM sys.parameters p WHERE p.object_id=OBJECT_ID('Reports.GetPozisyonDetay'); -- 3 satır beklenir |
| Kanıt | parameters.json Reports.GetPozisyonDetay: @SubeId,@BasTarih,@SonTarih; FrmPozisyonDurum.vb:15 'Reports.GetPozisyonDetay(''" & DateEdit1… & "'',''" & DateEdit2 …'; PopupGrid#5 'Reports.GetPozisyonDetay(getdate(),Getdate())'. |
| İlgili SQL nesneleri | Reports.GetPozisyonDetay, Design.PopupGrid |
SQL SQLR-038 — Could not find stored procedure: Reports.ResmiPozisyon S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Could not find stored procedure · SQL Error 313 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Reports.ResmiPozisyon |
| 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 |
| Tetikleme koşulu | Fonksiyon @Tarih parametresi bekliyor; 29 rapor tanımı 'Reports.ResmiPozisyon ()' parametresiz çağırıyor (yalnız #67 doğru). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek (rapor seçilirse) / S3 / 95 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET (BASE-CORE) |
| Kullanıcı belirtisi | "An insufficient number of arguments were supplied for the procedure or function Reports.ResmiPozisyon." |
| Öneri | Tekrarlı 29 rapor satırının temizlenmesi; seed'e yalnız #67. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT Id FROM AifaDev.Reports WHERE Query LIKE '%ResmiPozisyon ()%'; |
| Kanıt | dbsql.json AifaDev.Reports #38–#66 'Select * from Reports.ResmiPozisyon ()'; parameters.json Reports.ResmiPozisyon: @Tarih. |
| İlgili SQL nesneleri | Reports.ResmiPozisyon, AifaDev.Reports |
SQL SQLR-039 — Invalid object name: AifaDev.ExQueryBuilder (TRIGGER on AifaDev.RepositoryItems) S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid object name · SQL Error 4902 (Cannot find the object … ALTER VIEW) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | AifaDev.ExQueryBuilder (TRIGGER on AifaDev.RepositoryItems) |
| Tablo | Query.<Owner> (dinamik view) |
| Ekran | DataLayout/Repository.vb:21,45 (DynamicForms / depo alan tanımı ekranı) |
| Kod dosyası | ERPPRO/DataLayout/Repository.vb:21,45 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek — ilk kez tanımlanan her Owner için / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET (BASE-DEPENDENCY) |
| Kullanıcı belirtisi | Dinamik form alanı eklerken "Cannot find the object 'Query.XXX' because it does not exist or you do not have permissions." |
| Öneri | OBJECT_ID kontrolünde CREATE/ALTER ayrımı; 'Add Schema' → 'CREATE SCHEMA'. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT DISTINCT [Owner] FROM AifaDev.RepositoryItems WHERE IsDeleted=0 AND OBJECT_ID('Query.'+[Owner]) IS NULL; -- view'ı olmayan owner'lar |
| Kanıt | 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')". |
| İlgili SQL nesneleri | AifaDev.ExQueryBuilder, AifaDev.RepositoryItems |
SQL SQLR-040 — Invalid column name: Cari.Transferler S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid column name · SQL Error 207 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (DAO Insert/Update boş Catch → False döner; InternalDb MsgBox gösterir) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.Transferler |
| Tablo | Cari.Transferler |
| Kolon | Aciklama |
| Ekran | FrmTransferEkle → FrmTransfer (ANA MENÜ FrmMainForm; GiseEkrani) — kasa/şube transferi kaydı |
| Kod dosyası | ERPPRO/Class/Dao/Cari.Transferler.vb:172 (Insert), :222 (Update) |
| Tetikleme koşulu | Kod Cari.Transferler üzerinde 'Aciklama' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek (her transfer kaydında) / S2 / 95 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR (kolon) / BİLİNMİYOR / HAYIR (basedb/out/columns.json'da yok) |
| Kullanıcı belirtisi | "Invalid column name 'Aciklama'." — kayıt/liste başarısız. |
| Öneri | Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Cari.Transferler','Aciklama'); -- NULL ise kolon yok |
| Kanıt | 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). |
| İlgili SQL nesneleri | Cari.Transferler |
SQL SQLR-041 — Invalid column name: Siparis.Paket S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid column name · SQL Error 207 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (DAO Insert/Update boş Catch → False döner; InternalDb MsgBox gösterir) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.Paket |
| Tablo | Siparis.Paket |
| Kolon | IsPublic |
| Ekran | FrmPaketEkle (Siparis.PaketEx) |
| Kod dosyası | ERPPRO/Class/Dao/Siparis.Paket.vb:93 (Insert), :126 (Update) |
| Tetikleme koşulu | Kod Siparis.Paket üzerinde 'IsPublic' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 95 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR (kolon) / BİLİNMİYOR / HAYIR (basedb/out/columns.json'da yok) |
| Kullanıcı belirtisi | "Invalid column name 'IsPublic'." — kayıt/liste başarısız. |
| Öneri | Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Siparis.Paket','IsPublic'); -- NULL ise kolon yok |
| Kanıt | sql_frags (ERPPRO/Class/Dao/Siparis.Paket.vb:93 (Insert), :126 (Update)); columns.json Siparis.Paket kolon listesinde 'IsPublic' yok. |
| İlgili SQL nesneleri | Siparis.Paket |
SQL SQLR-042 — Invalid column name: Siparis.TakimKartlari S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid column name · SQL Error 207 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (DAO Insert/Update boş Catch → False döner; InternalDb MsgBox gösterir) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Siparis.TakimKartlari |
| Tablo | Siparis.TakimKartlari |
| Kolon | Grup |
| Ekran | Takım kartı ekleme (FrmTakimKarti — çağıran bulunamadı) |
| Kod dosyası | ERPPRO/Class/Dao/Siparis.TakimKarti.vb:112 (Insert), :163 (Update) |
| Tetikleme koşulu | Kod Siparis.TakimKartlari üzerinde 'Grup' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük / S3 / 95 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR (kolon) / BİLİNMİYOR / HAYIR (basedb/out/columns.json'da yok) |
| Kullanıcı belirtisi | "Invalid column name 'Grup'." — kayıt/liste başarısız. |
| Öneri | Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Siparis.TakimKartlari','Grup'); -- NULL ise kolon yok |
| Kanıt | 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ı. |
| İlgili SQL nesneleri | Siparis.TakimKartlari |
SQL SQLR-043 — Invalid column name: Sistem.CariIslemTipi S4 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid column name · SQL Error 207 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (DAO Insert/Update boş Catch → False döner; InternalDb MsgBox gösterir) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Sistem.CariIslemTipi |
| Tablo | Sistem.CariIslemTipi |
| Kolon | IsDeleted |
| 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') |
| Tetikleme koşulu | Kod Sistem.CariIslemTipi üzerinde 'IsDeleted' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük / S4 / 95 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR (kolon) / BİLİNMİYOR / HAYIR (basedb/out/columns.json'da yok) |
| Kullanıcı belirtisi | "Invalid column name 'IsDeleted'." — kayıt/liste başarısız. |
| Öneri | Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Sistem.CariIslemTipi','IsDeleted'); -- NULL ise kolon yok |
| Kanıt | 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. |
| İlgili SQL nesneleri | Sistem.CariIslemTipi |
SQL SQLR-044 — Invalid column name: Cari.Provizyon S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid column name · SQL Error 207 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (DAO Insert/Update boş Catch → False döner; InternalDb MsgBox gösterir) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.Provizyon |
| Tablo | Cari.Provizyon |
| Kolon | IsDeleted |
| Ekran | Provizyon listesi/silme (Ext) |
| Kod dosyası | ERPPRO/Class/Ext/Cari.Provizyon.vb:57 (TOList), :151, :171 (Delete) |
| Tetikleme koşulu | Kod Cari.Provizyon üzerinde 'IsDeleted' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 95 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR (kolon) / BİLİNMİYOR / HAYIR (basedb/out/columns.json'da yok) |
| Kullanıcı belirtisi | "Invalid column name 'IsDeleted'." — kayıt/liste başarısız. |
| Öneri | Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Cari.Provizyon','IsDeleted'); -- NULL ise kolon yok |
| Kanıt | 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). |
| İlgili SQL nesneleri | Cari.Provizyon |
SQL SQLR-045 — Invalid column name: Sistem.Users S4 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid column name · SQL Error 207 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (DAO Insert/Update boş Catch → False döner; InternalDb MsgBox gösterir) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Sistem.Users |
| Tablo | Sistem.Users |
| Kolon | SubeId |
| Ekran | FrmChangeAccount (çağıran bulunamadı — ölü ekran adayı) |
| Kod dosyası | ERPPRO/Form/Genel/FrmChangeAccount.vb:9 |
| Tetikleme koşulu | Kod Sistem.Users üzerinde 'SubeId' kolonunu kullanıyor; kolon DB1 kataloğunda (kb_src/db/columns.json) yok. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük / S4 / 95 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR (kolon) / BİLİNMİYOR / HAYIR (basedb/out/columns.json'da yok) |
| Kullanıcı belirtisi | "Invalid column name 'SubeId'." — kayıt/liste başarısız. |
| Öneri | Kolonun ana şemada (ERPSCHEMA/DBUpdate) tanımlı olup olmadığı doğrulanmalı; BASE kolon setine eklenmesi ya da koddan çıkarılması kararı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Sistem.Users','SubeId'); -- NULL ise kolon yok |
| Kanıt | sql_frags (ERPPRO/Form/Genel/FrmChangeAccount.vb:9); columns.json Sistem.Users kolon listesinde 'SubeId' yok. Şube bilgisi Sistem.UserDetails.SubeId'de. |
| İlgili SQL nesneleri | Sistem.Users, Sistem.UserDetails |
SQL SQLR-046 — Invalid column name: Cari.IslemDetaylari / Cari.Islemler (kurulum farkı) S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid column name · SQL Error 207 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.IslemDetaylari / Cari.Islemler (kurulum farkı) |
| Tablo | Cari.IslemDetaylari; Cari.Islemler |
| Kolon | ETTN (+36 döviz mevzuatı kolonu); IsArbitiraj |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | DB2'de yüksek (perakende ekranı açılırsa) / S2 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET / HAYIR (kitap/b8_kuyumcu §: ETTN kuyumcuda yok; 12 kolon) / EVET (V2 kolon seti) |
| Kullanıcı belirtisi | DB2'de perakende/işlem listesinde "Invalid column name 'ETTN'"; e-belge akışı kuyumcuda tanımsız. |
| Öneri | Kurulum profiline göre kolon seti (BASE + DÖVİZ eklentisi) ayrımı; kodda ETTN/IsArbitiraj kullanan sorguların profil bayrağıyla korunması. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COL_LENGTH('Cari.IslemDetaylari','ETTN') AS ETTN, COL_LENGTH('Cari.Islemler','IsArbitiraj') AS IsArbitiraj; |
| Kanıt | 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'. |
| İlgili SQL nesneleri | Cari.IslemDetaylari, Cari.Islemler |
SQL SQLR-047 — Invalid column name: Sistem.ERPSCHEMA 'Alter … Add' satırları S3 · Observed=HAYIR · Guard=KISMEN (DBUpdate çalıştırılırsa kolonlar eklenir)
| Hata sınıfı | Invalid column name · SQL Error 207 (kurulum bazlı) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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ş) |
| 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) |
| 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. |
| Guard var mı? | KISMEN (DBUpdate çalıştırılırsa kolonlar eklenir) |
| Olasılık / etki / güven | Orta / S3 / 60 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR (kolonlar) / BİLİNMİYOR / HAYIR |
| Kullanıcı belirtisi | DBUpdate uygulanmamış kurulumda ilgili ekranlarda 'Invalid column name …'. |
| Öneri | ERPSCHEMA ColumnName/DataType içeriği okunup (bu turda alınmadı — GAP) BASE kolon seti ile eşleştirilmeli. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT TableName, ColumnName, DataType, Method FROM Sistem.ERPSCHEMA WHERE OBJECT_ID(TableName) IS NOT NULL ORDER BY TableName; |
| Kanıt | 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'. |
| İ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 SQLR-048 — Invalid column name: (kod) ERPFatura.Save → Cari.IslemDetaylari S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Invalid column name · SQL Error 102 (Incorrect syntax near 'MERGE') |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET (boş Catch, RecId=0 → False) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | (kod) ERPFatura.Save → Cari.IslemDetaylari |
| Tablo | Cari.IslemDetaylari |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek (bu yol her çağrıldığında) / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET (tablo) / EVET (12 kolonlu; MERGE kolonlarının çoğu yok → ek 207) / EVET |
| Kullanıcı belirtisi | Fatura/belge detayı kaydedilmez; kullanıcıya hata gösterilmez (ekran 'kaydedilemedi' ya da hiçbir şey). |
| Öneri | 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ı) |
| Kanıt | QA-SQL-QUERY-MAP.md satır 354; ERPFatura.vb:330 metni; :486 'Catch ex As Exception' boş. |
| İlgili SQL nesneleri | Cari.IslemDetaylari |
SQL SQLR-049 — Divide by zero: FN.Bol S2 · Observed=HAYIR · Guard=EVET (ama sessiz 0)
| Hata sınıfı | Divide by zero · SQL Error 8134 (sessizleştirilmiş → 0) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | FN.Bol |
| Ekran | 224 çağrı / 103 modül: Cari.AcceptTransaction (işçilik/altına çevir), Stok.GetMadenMaliyeti, Stok.GetOrtMilyem, FN.GetPariteAVG, Pozisyon.*, Bilanco.*, Report(s).*, Cari.GetNetBakiye, Takoz.*; kod: DataStokList.vb:93, BilancoSimpleView.vb:166, Siparis.ParcaEx.vb:85 |
| Kod dosyası | modules.json (fn.bol regex: 224 eşleşme); ERPPRO/Controls/Grid/DataStokList.vb:93; ERPPRO/Designer/ReportManager/BilancoSimpleView.vb:166 |
| Tetikleme koşulu | FN.Bol(@a,@b): 'IF (@Number1<>0 and @Number2<>0) SET @Number=@Number1/@Number2' — payda 0 ya da NULL ise 0 döner; hata yok. Ortalama fiyat, kur çevrimi, milyem, işçilik hesapları paydası 0 (kur girilmemiş, miktar 0) olduğunda 0 üretir ve bakiye/maliyet satırına yazılır. |
| Guard var mı? | EVET (ama sessiz 0) |
| Olasılık / etki / güven | Yüksek (kur/miktar 0 durumları sık) / S2 / 95 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR (muhtemelen EVET) / EVET (BASE-CORE) |
| Kullanıcı belirtisi | Hata yok; bakiye/işçilik/ortalama maliyet 0 ya da eksik görünür; raporlarda 0 fiyat. |
| Öneri | FN.Bol'un 0 yerine NULL döndürmesi ya da çağıran yerlerde NULLIF ile açık koruma; 0 dönen durumların loglanması. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE IsDeleted=0 AND (ISNULL(HasKur,0)=0 OR ISNULL(IscilikBirimKur,0)=0) AND IslemKodu=0; -- takoz işlemlerinde kur 0 |
| Kanıt | modules.json FN.Bol tanımı; AcceptTransaction: '@Iscilik = Fn.Bol((@HasIscilik * @HasIscBirimKur),@IscKur) + …', '@HasBakiye += Fn.Bol(((@Miktar*@AgMilyem)*@GumKur),@HasKur)'; FN.Bol çağıran 103 modül listesi (div.py). |
| İlgili SQL nesneleri | FN.Bol, Cari.Islemler |
SQL SQLR-050 — Divide by zero: Bilanco.GetIKar; Bilanco.GetIBilanco S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Divide by zero · SQL Error 8134 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (NULL durumunda) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Bilanco.GetIKar; Bilanco.GetIBilanco |
| Tablo | Cari.BakiyeIslem; Stok.StokHaraketleri |
| Kolon | Kur1.Alis (Sistem.GetKurListesi BirimId=1 = HAS kuru) |
| Ekran | Koddan/raporlardan çağıran bulunamadı (deps: yok) |
| 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). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük (çağıran yok; HAS kuru 0 olağan dışı) / S3 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / HAYIR (UNKNOWN) |
| Kullanıcı belirtisi | Bilanço kâr raporunda 'Divide by zero error encountered.' |
| Öneri | NULLIF(Kur1.Alis,0) ve kur yokluğu için açık uyarı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT Tarih FROM Sistem.Kurlar WHERE BirimId=1 AND ISNULL(Alis,0)=0; |
| Kanıt | div.py çıktısı: Bilanco.GetIKar 5×, Bilanco.GetIBilanco 4× '/Kur1.Alis' NULLIF yok. |
| İlgili SQL nesneleri | Bilanco.GetIKar, Bilanco.GetIBilanco, Cari.BakiyeIslem, Stok.StokHaraketleri, Sistem.Kurlar |
SQL SQLR-051 — Divide by zero: MüşteriŞemasıA.IslemFiyatlar tetikleyicisi (DB2 Cari.Islemler 5. tetikleyici) S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Divide by zero · SQL Error 8134 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | MüşteriŞemasıA.IslemFiyatlar tetikleyicisi (DB2 Cari.Islemler 5. tetikleyici) |
| Tablo | Cari.Islemler → MüşteriŞemasıA.IslemFiyatlar |
| Kolon | UsdKur, HasKur |
| Ekran | DB2'de her Cari.Islemler INSERT/UPDATE |
| 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)). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta (DB2) / S2 / 70 |
| Var mı? V2 / KUYUMCU / BASE | HAYIR / EVET (3.738 krk; TD-41) / HAYIR (müşteri özel) |
| Kullanıcı belirtisi | DB2'de işlem kaydında 'Divide by zero error encountered' → işlem kaydedilemez. |
| Öneri | Müşteri özel tetikleyicinin eklenti noktasına alınması; NULLIF; set-tabanlı yazım. (Uygulanmadı) |
| 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()); |
| Kanıt | 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). |
| İlgili SQL nesneleri | Cari.Islemler |
| Wiki bağlantıları | TD-41 |
SQL SQLR-052 — Divide by zero: POS.FisKaydet; POS.BSMVHesapla; POS.EvrakKapisiDurum S4 · Observed=HAYIR · Guard=EVET
| Hata sınıfı | Divide by zero · SQL Error 8134 |
| Gözlemlendi | HAYIR · Potential=HAYIR · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | POS.FisKaydet; POS.BSMVHesapla; POS.EvrakKapisiDurum |
| Tablo | #S (geçici), POS.Sabitler |
| Kolon | SistemKur, MK.Kur, (1+@Oran), K.CariHesap |
| Ekran | POS (ERPPOSV2 vezne) — DB1 dev kurulum, ürün özelliği değil (GENERATED_PROPOSAL) |
| Tetikleme koşulu | FisKaydet: 'ABS(Fiyat-SistemKur)/SistemKur' WHERE 'ISNULL(SistemKur,0)>0' ile korunuyor; '/ MK.Kur' CASE WHEN ISNULL(MK.Kur,0)=0 ile korunuyor; 'Tutar / NULLIF(Miktar,0)'. BSMVHesapla '(1+@Oran)' — @Oran=-1 teorik. EvrakKapisiDurum CASE WHEN K.CariHesap=0 korumalı. |
| Guard var mı? | EVET |
| Olasılık / etki / güven | Çok düşük / S4 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET / HAYIR / HAYIR (POS ayrı paket) |
| Kullanıcı belirtisi | — |
| Öneri | Koruma yeterli; kayıt için. (Uygulanmadı) |
| Kanıt | div.py: POS.FisKaydet NULLIF/CASE; POS.EvrakKapisiDurum CASE. |
| İlgili SQL nesneleri | POS.FisKaydet, POS.BSMVHesapla, POS.EvrakKapisiDurum, POS.Sabitler |
SQL SQLR-053 — Divide by zero: Hesaplanan kolonlar: Cari.Islemler.USDTutar; Stok.Takoz.ScalaMiktar; Cari.ProformaDetay/FaturaDetay Kdv,Otv,Toplam (/100) S4 · Observed=HAYIR · Guard=EVET
| Hata sınıfı | Divide by zero · SQL Error 8134 (korumalı) |
| Gözlemlendi | HAYIR · Potential=HAYIR · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Hesaplanan kolonlar: Cari.Islemler.USDTutar; Stok.Takoz.ScalaMiktar; Cari.ProformaDetay/FaturaDetay Kdv,Otv,Toplam (/100) |
| Tablo | Cari.Islemler; Stok.Takoz; Cari.FaturaDetay; Cari.ProformaDetay |
| Kolon | UsdKur; SuMiktar |
| Ekran | Tablo düzeyinde |
| Kod dosyası | dbclean/computed.json |
| Tetikleme koşulu | USDTutar: 'case when isnull(UsdKur,0)<>0 … then Tutar*BirimKur/isnull(UsdKur,USDkur)' korumalı; ScalaMiktar 'isnull(SuMiktar,0)<>0' korumalı; /100 sabit. |
| Guard var mı? | EVET |
| Olasılık / etki / güven | Çok düşük / S4 / 95 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | — |
| Öneri | Kayıt için; koruma var. (Uygulanmadı) |
| Kanıt | computed.json satırları. |
| İlgili SQL nesneleri | Cari.Islemler, Stok.Takoz, Cari.ProformaDetay, Cari.FaturaDetay |
SQL SQLR-054 — Conversion failed: (kod) Cari.Odeme.vb:136 → Cari.Islemler S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Conversion failed · SQL Error 245 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | (kod) Cari.Odeme.vb:136 → Cari.Islemler |
| Tablo | Cari.Islemler |
| Kolon | Tag (nvarchar(max)) |
| Ekran | Ödeme ekranı (FrmOdemeListesi/FrmOdemeYap) — 'Convert(int,Tag) = <Id>' |
| Kod dosyası | ERPPRO/Class/Dao/Cari.Odeme.vb:136 |
| 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'. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta (Tag başka amaçla dolduysa) / S3 / 80 |
| Var mı? V2 / KUYUMCU / BASE | EVET (kolon) / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | Ödeme listesinde 'Conversion failed when converting the nvarchar value 'xyz' to data type int.' |
| Öneri | TRY_CONVERT ya da Tag yerine tipli bir referans kolonu. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE Tag IS NOT NULL AND TRY_CONVERT(int,Tag) IS NULL; |
| Kanıt | Cari.Odeme.vb:136 'select Sum(Miktar) … And Convert(int,Tag) =''" & Id & "''' (Cari.Odemeler ekranı zaten 208 ile düşer). |
| İlgili SQL nesneleri | Cari.Islemler |
SQL SQLR-055 — Conversion failed: Query.GENELSTOKLAR (VIEW); AifaDev.ExQueryBuilder üretimi Query.* view'ları S4 · Observed=HAYIR · Guard=KISMEN (Date için Year()>1900 kontrolü var ama Convert önce çalışır)
| Hata sınıfı | Conversion failed · SQL Error 245 / 8114 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Query.GENELSTOKLAR (VIEW); AifaDev.ExQueryBuilder üretimi Query.* view'ları |
| Tablo | AifaDev.RepositoryData |
| Kolon | Value (nvarchar) → Convert(int/decimal/date,…) |
| Ekran | DynamicForms / Query.* view'larını kullanan raporlar |
| 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. |
| Guard var mı? | KISMEN (Date için Year()>1900 kontrolü var ama Convert önce çalışır) |
| Olasılık / etki / güven | Orta / S4 / 75 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / HAYIR (Query.* UNKNOWN) |
| Kullanıcı belirtisi | Dinamik form listesi/raporunda 'Conversion failed …' ya da 'Error converting data type nvarchar to numeric'. |
| Öneri | TRY_CONVERT; giriş doğrulaması. (Uygulanmadı) |
| 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; |
| Kanıt | modules.json Query.GENELSTOKLAR 'Convert(int, F.Kimden)'; ExQueryBuilder DataType→Convert eşlemesi. |
| İlgili SQL nesneleri | Query.GENELSTOKLAR, AifaDev.ExQueryBuilder, AifaDev.RepositoryData, AifaDev.RepositoryItems |
SQL SQLR-056 — Conversion failed: (kod) tırnaklı birleştirme ile tipsiz literal karşılaştırması S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Conversion failed · SQL Error 245 / 8114 / 241 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (''→0 eşleşmesi sessiz) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | (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… |
| 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) |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET / EVET / — |
| Kullanıcı belirtisi | 'Error converting data type varchar to numeric' / 'Conversion failed when converting date and/or time' / 'Incorrect syntax near ='. |
| Öneri | Parametreli sorgu (SqlParameter) — TD-09/TD-37 ile birlikte. (Uygulanmadı) |
| Kanıt | dyn.py istatistiği: 1294 cümle; 914 '&' ile birleştirme; 553 tırnaklı ('" & x & "'); 252 parametreli; 133 sabit. TD-37 (ondalık ToString). |
| İlgili SQL nesneleri | Cari.Islemler, Cari.Hesaplar |
| Wiki bağlantıları | TD-37 · TD-09 |
SQL SQLR-057 — Arithmetic overflow: Cari.AcceptTransaction; Cari.History (Fiyat decimal(18,5) ← Islemler.Fiyat decimal(18,8)); Stok.StokHaraketleri.NetBakiye decimal(37,10) S4 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Arithmetic overflow · SQL Error 8115 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET (yuvarlama) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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 |
| Ekran | İşlem kaydı tetikleyicisi |
| 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). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Çok düşük (overflow) / Kesin (History.Fiyat yuvarlama) / S4 / 70 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | Overflow: 'Arithmetic overflow error converting numeric to data type numeric' (nadir). Yuvarlama: History'de Fiyat 5 hane. |
| Öneri | History ve Islemler kolon tiplerinin eşitlenmesi; ara hesaplarda decimal(28,10). (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT MAX(ABS(Tutar*ISNULL(HasKur,0))) FROM Cari.Islemler; |
| Kanıt | columns.json: Islemler.Fiyat decimal(18,8) vs History.Fiyat decimal(18,5); AcceptTransaction 'Convert(Decimal(18,2), @StokIsc * @StokIscKur)'. |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Cari.History, Stok.StokHaraketleri, Cari.Islemler, Cari.BakiyeIslem |
SQL SQLR-058 — Conversion failed: (kod) TCMB.Currency.Save → MERGE Sistem.TCMBDovizKurlari S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Conversion failed · SQL Error 4406 (View or function is not updatable) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | (kod) TCMB.Currency.Save → MERGE Sistem.TCMBDovizKurlari |
| Tablo | Sistem.TCMBDovizKurlari (DB1'de VIEW: Select … from Sistem.GetKurListesi(getdate())) |
| Ekran | Program.vb:225 açılışta arka plan TCMB kur çekme; Cari.Islem.vb:552 GetUSDCurrency |
| Kod dosyası | ERPPRO/Class/Module/TCMB.vb:67,127; ERPPRO/Class/Module/Program.vb:225 |
| Tetikleme koşulu | CheckTable() OBJECT_ID null değilse tablo oluşturmaz; DB1'de ad bir VIEW (tablo NonUsed_TCMBDovizKurlari'na taşınmış). MERGE bir TVF-tabanlı view'a yazamaz → 4406/4405; boş Catch → sessiz. GetUSDCurrency(tarih) view'dan yalnız bugünün kurunu görür → geçmiş tarih için Nothing → Cari.Islem.vb:552 '.Alis' NullReference (uygulama tarafı). |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek (DB1'de her açılışta) / S3 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET (view) / tablo: Sistem.NonUsed_TCMBDovizKurlari (25.212 satır) / EVET (tablo, 34.644 satır) / EVET (view BASE-CORE); NonUsed_ V2_ONLY |
| Kullanıcı belirtisi | TCMB kur arşivi güncellenmez (sessiz); döviz seri fatura ekranında geçmiş tarih kur boş ya da NullReference. |
| Öneri | TCMBDovizKurlari'nın tablo mu view mi olacağı kurulum genelinde tek karar; CheckTable'ın view'ı tablo sanmaması. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT type_desc FROM sys.objects WHERE object_id=OBJECT_ID('Sistem.TCMBDovizKurlari'); SELECT COUNT(*) FROM Sistem.NonUsed_TCMBDovizKurlari; |
| Kanıt | modules.json 'Create View Sistem.TCMBDovizKurlari as Select Tarih,Birim as Kodu,Alis,Satis from Sistem.GetKurListesi(getdate())'; TCMB.vb:67 CheckTable; :127 MERGE; phase6 KUY_ONLY 'Sistem.TCMBDovizKurlari' tablo. |
| İlgili SQL nesneleri | Sistem.TCMBDovizKurlari, Sistem.NonUsed_TCMBDovizKurlari, Sistem.GetKurListesi |
SQL SQLR-059 — String or binary data would be truncated: (kod DAO Insert/Update) kısa nvarchar kolonlar S3 · Observed=HAYIR · Guard=HAYIR (UI MaxLength bilinmiyor)
| Hata sınıfı | String or binary data would be truncated · SQL Error 8152 / 2628 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (DAO boş Catch → False) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | (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) |
| 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 |
| 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. |
| Guard var mı? | HAYIR (UI MaxLength bilinmiyor) |
| Olasılık / etki / güven | Orta / S3 / 75 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | 'String or binary data would be truncated.' ya da kayıt sessizce yapılmaz. |
| Öneri | UI MaxLength = kolon uzunluğu eşlemesi; Aciklama kolonlarının uzunluk standardı (TD standardizasyon). (Uygulanmadı) |
| 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; |
| Kanıt | Truncation taraması (300 kolon ≤50 karakter, kod INSERT listelerinde); columns.json uz değerleri (nvarchar byte/2). |
| İ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 SQLR-060 — String or binary data would be truncated: Cari.AcceptTransaction — @RefNo Nvarchar(36), @RaporNo Nvarchar(50); Sistem.CreateKasa; Cari.FaturaYaz (Kodu = FaturaSeri+FaturaNo) S4 · Observed=HAYIR · Guard=—
| Hata sınıfı | String or binary data would be truncated · SQL Error 8152 / 2628 |
| Gözlemlendi | HAYIR · Potential=HAYIR · Silent=EVET (değişken kesmesi) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.AcceptTransaction — @RefNo Nvarchar(36), @RaporNo Nvarchar(50); Sistem.CreateKasa; Cari.FaturaYaz (Kodu = FaturaSeri+FaturaNo) |
| Tablo | Cari.Islemler; Sistem.Kasalar; Cari.History |
| Kolon | RefNo(36) OwnerRefNo(36) RaporNo(MAX) Kodu(50) |
| Ekran | İşlem kaydı tetikleyicisi; şube oluşturma; fatura→işlem |
| Tetikleme koşulu | RefNo nvarchar(36): UPPER(NEWID()) 36 karakter → tam sığar (OK). AcceptTransaction '@RaporNo Nvarchar(50)' ← Islemler.RaporNo nvarchar(MAX): 50'den uzun rapor no değişkene atanırken SESSİZCE kesilir (değişken ataması hata vermez) — @RaporNo kullanılmadığı için etkisiz. CreateKasa: Kasalar.Kodu(10)='ANAKASA' OK; Aciklama(150) = Subeler.Kodu(30)+' SUBESI ANA KASASI' OK. FaturaYaz Kodu(50)= FaturaSeri(10)+FaturaNo OK. |
| Guard var mı? | — |
| Olasılık / etki / güven | Çok düşük / S4 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | — |
| Öneri | Kayıt için; risk bulunmadı. (Uygulanmadı) |
| Kanıt | columns.json uzunlukları; AcceptTransaction Declare listesi; CreateKasa metni. |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Sistem.CreateKasa, Cari.FaturaYaz, Cari.Islemler, Sistem.Kasalar, Cari.History |
SQL SQLR-061 — Cannot insert NULL: Cari.Islemler.FiyatTipi (tfiyattipi NOT NULL, default yok); Cari.History.FiyatTipi; Cari.BakiyeIslem.HesapType (NOT NULL) S3 · Observed=HAYIR · Guard=KISMEN
| Hata sınıfı | Cannot insert NULL · SQL Error 515 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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 |
| 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 |
| 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. |
| Guard var mı? | KISMEN |
| Olasılık / etki / güven | Düşük-Orta / S3 / 75 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | "Cannot insert the value NULL into column 'FiyatTipi'/'HesapType'" — işlem kaydedilemez. |
| Öneri | Kolonlara DEFAULT; DAO'da null koruması. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Cari.Islemler WHERE HesapType IS NULL; |
| Kanıt | 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). |
| İlgili SQL nesneleri | Cari.Islemler, Cari.History, Cari.BakiyeIslem, Sistem.Clients |
SQL SQLR-062 — Cannot insert NULL: (kod) Sistem.Clients dinamik INSERT S4 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Cannot insert NULL · SQL Error 515 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | (kod) Sistem.Clients dinamik INSERT |
| Tablo | Sistem.Clients |
| Kolon | ClientName (NOT NULL) |
| Ekran | Sistem.Clients.vb:161 — kolon listesi çalışma zamanında üretiliyor (InsertQuery/ValuesQuery) |
| Kod dosyası | ERPPRO/Class/Dao/Sistem.Clients.vb:161 |
| Tetikleme koşulu | Kolon listesi dolu özelliklerden derleniyor; ClientName boşsa listeye girmez → 515. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük / S4 / 60 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | İstemci kaydı yapılamaz (Cannot insert the value NULL into column 'ClientName'). |
| Öneri | Zorunlu alan kontrolü. (Uygulanmadı) |
| Kanıt | frags.py: Sistem.Clients INSERT listesinde clientname yok (dinamik). |
| İlgili SQL nesneleri | Sistem.Clients |
SQL SQLR-063 — Duplicate key: Sistem.Kurlar (BirimId,Tarih); Sistem.Birimler.Kodu; Cari.Hesaplar (VergiNo,SubeId); Cari.Islemler.FisNo; Cari.BakiyeKodlari.Kodu S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Duplicate key · SQL Error 2627 / 2601 (yok — benzersiz indeks yok → sessiz mükerrer) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Sistem.Kurlar (BirimId,Tarih); Sistem.Birimler.Kodu; Cari.Hesaplar (VergiNo,SubeId); Cari.Islemler.FisNo; Cari.BakiyeKodlari.Kodu |
| Tablo | Sistem.Kurlar; Sistem.Birimler; Cari.Hesaplar; Cari.Islemler |
| Ekran | Kur giriş (FrmKurGirisEkrani, Sistem.KurKopyala); Birim tanımı; hesap kartı; fiş numarası (Max+1, TD-02) |
| Kod dosyası | ERPPRO/Class/Ext/Cari.IslemEx.vb:256-267; ERPPRO/Form/Genel/FrmKurGirisEkrani.vb:110 |
| Tetikleme koşulu | DB1'de PK dışı benzersiz indeks yalnız 4 (sysdiagrams, KYC.BelgeTurleri.Kod, POS.Esikler, POS.VergiOranlari). İş anahtarları (Kurlar BirimId+Tarih, Birimler.Kodu, FisNo, RefNo) benzersiz değil → çakışma hata vermez, mükerrer satır oluşur. Sonuç: Sistem.GetKurListesi aynı birim için 2 satır → FN.GetKur TOP 1 (ORDER BY yok) rastgele kur; Bilanco/Pozisyon join'lerinde tutar iki kat; AcceptTransaction '(Select Id From Sistem.Birimler Where Kodu=HasSymbol)' → 512. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta (çok kullanıcılı Max+1 fiş no: yüksek) / S2 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | Hata yok; aynı fiş numarası iki işlem, kur listesinde çift satır, bilanço tutarı iki kat. |
| Öneri | İş anahtarlarına benzersiz indeks (Kurlar(BirimId,Tarih), Birimler(Kodu) filtered IsDeleted=0, Hesaplar(SubeId,VergiNo)); fiş no için SEQUENCE. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT BirimId,Tarih,COUNT(*) FROM Sistem.Kurlar GROUP BY BirimId,Tarih HAVING COUNT(*)>1; SELECT Kodu,COUNT(*) FROM Sistem.Birimler WHERE IsDeleted=0 GROUP BY Kodu HAVING COUNT(*)>1; SELECT FisNo,COUNT(DISTINCT RefNo) FROM Cari.Islemler WHERE IsDeleted=0 GROUP BY FisNo HAVING COUNT(DISTINCT RefNo)>1; |
| Kanıt | indexes.json is_unique & not PK: 4 satır; Sistem.Kurlar indeksleri PK_Kurlar(Id), IX_KUR_SORT_TARIH(Tarih)…; FN.GetKur 'Select top 1 Alis … Where BirimId=@BirimId' ORDER BY yok; TD-02. |
| İlgili SQL nesneleri | Sistem.Kurlar, Sistem.Birimler, Cari.Hesaplar, Cari.Islemler, Cari.BakiyeKodlari, FN.GetKur |
| Wiki bağlantıları | TD-02 |
SQL SQLR-064 — Duplicate key: Cari.AcceptTransaction → MERGE INTO Sistem.Activity S1 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Duplicate key · SQL Error 8672 (MERGE aynı satırı birden fazla kez güncelliyor) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.AcceptTransaction → MERGE INTO Sistem.Activity |
| Tablo | Sistem.Activity (PK yok, 4 satır) |
| Kolon | ActivitySubeId |
| Ekran | Her Cari.Islemler INSERT/UPDATE |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta (yarış koşulu bir kez oluşunca kalıcı) / S1 / 80 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR (DB2 tetikleyicisi farklı sürüm) / EVET |
| 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. |
| Öneri | Sistem.Activity'ye PK/unique(ActivitySubeId) ve MERGE'e HOLDLOCK; ya da UPDATE/INSERT ayrımı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT ActivitySubeId,COUNT(*) FROM Sistem.Activity GROUP BY ActivitySubeId HAVING COUNT(*)>1; |
| Kanıt | 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). |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Sistem.Activity |
SQL SQLR-065 — Identity: dbo.sp_DevirIslemiYap (IDENTITY_INSERT Cari.Islemler ON); Devir.vb TRUNCATE + yeniden INSERT; Sistem.Devir S2 · Observed=EVET (TD-42: DB2'de %66,1 / %54,6 öksüz satır) · Guard=HAYIR
| Hata sınıfı | Identity · SQL Error 544 / 8101 / (sessiz çakışma) |
| Gözlemlendi | EVET (TD-42: DB2'de %66,1 / %54,6 öksüz satır) · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | dbo.sp_DevirIslemiYap (IDENTITY_INSERT Cari.Islemler ON); Devir.vb TRUNCATE + yeniden INSERT; Sistem.Devir |
| Tablo | Cari.Islemler; Cari.IslemDetaylari; Sistem.SilAciklama; Cari.Transferler; Sistem.SilOnay; Genel.IptalOnay; Cari.RSReferans; Cari.Provizyon; Cari.IslemEmtiaDetayi; MüşteriŞemasıA.IslemFiyatlar |
| Kolon | Id / IslemId |
| Ekran | Devir ekranı (Class/Module/Devir.vb:76-87) |
| Kod dosyası | ERPPRO/Class/Module/Devir.vb:76-87 |
| Tetikleme koşulu | TRUNCATE Cari.Islemler kimliği tohuma sıfırlar; yeniden eklenen/yeni işlemler 1'den başlar. Boşaltılmayan IslemId taşıyan tablolar (SilAciklama 93k, Transferler, SilOnay, IptalOnay, Provizyon, RSReferans, MüşteriŞemasıA.IslemFiyatlar %66 öksüz — TD-42) eski Id'lerle yeni işlemlere bağlanır (sessiz yanlış join). sp_DevirIslemiYap IDENTITY_INSERT ile çakışan Id gönderirse 2627. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Kesin (her devirde) / S2 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET / EVET / Sistem.Devir/ sp_DevirIslemiYap UNKNOWN |
| Kullanıcı belirtisi | Devir sonrası silme gerekçeleri/transfer/provizyon kayıtları yanlış işlemle ilişkilenir; raporlar tutarsız. |
| Öneri | Devirde IDENT_CURRENT korunması (DBCC CHECKIDENT RESEED eski değere) ya da tüm IslemId taşıyan tabloların birlikte ele alınması. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Sistem.SilAciklama S WHERE NOT EXISTS (SELECT 1 FROM Cari.Islemler I WHERE I.Id=S.TransID); SELECT IDENT_CURRENT('Cari.Islemler'); |
| Kanıt | Devir.vb:76-80 'Truncate Table Cari.Islemler … Cari.IslemDetaylari'; sp_DevirIslemiYap satır 214 'SET IDENTITY_INSERT Cari.Islemler ON'; TD-29, TD-42. |
| İlgili SQL nesneleri | dbo.sp_DevirIslemiYap, Cari.Islemler, Sistem.Devir, Cari.IslemDetaylari, Sistem.SilAciklama, Cari.Transferler, Sistem.SilOnay, Cari.RSReferans, Cari.Provizyon, Cari.IslemEmtiaDetayi |
| Wiki bağlantıları | TD-29 · TD-42 |
SQL SQLR-066 — Identity: Sistem.SirketOlustur; Sistem.Users Id=1 varsayımı S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Identity · SQL Error (sessiz) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Sistem.SirketOlustur; Sistem.Users Id=1 varsayımı |
| Tablo | Sistem.Users; Sistem.UserDetails |
| Kolon | Id / UserId |
| Ekran | FrmMainForm.vb:706 (User.Id=1 gizli kısayol); SirketOlustur 'INSERT INTO Sistem.UserDetails(UserId…) Values(1,1,1,1,0)' |
| Kod dosyası | ERPPRO/Form/Genel/FrmMainForm.vb:706 |
| Tetikleme koşulu | SirketOlustur tüm tabloları TRUNCATE edip ADMIN kullanıcısını ekler ve UserDetails'e UserId=1 yazar; Users kimliği TRUNCATE ile sıfırlandığı için 1 olur — ancak Users tablosu Design/AifaDev dışı olduğu için truncate kapsamında; tohum değiştirilmişse (DBCC CHECKIDENT) ADMIN Id≠1 → UserDetails öksüz, giriş yapılamaz. Kodda Id=1 admin varsayımı. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük / S3 / 70 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / SirketOlustur UNKNOWN |
| Kullanıcı belirtisi | Yeni şirket kurulumunda ADMIN ile giriş yapılamaz / şube-kasa ataması yok. |
| Öneri | SCOPE_IDENTITY ile UserDetails eklenmesi; Id=1 varsayımının role dayalı yetkiyle değiştirilmesi. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT Id,UserName FROM Sistem.Users WHERE Id=1; SELECT * FROM Sistem.UserDetails WHERE UserId NOT IN (SELECT Id FROM Sistem.Users); |
| Kanıt | modules.json Sistem.SirketOlustur; FrmMainForm.vb:706 'If LoginInformation.User.Id = 1 AndAlso e.Shift…'. |
| İlgili SQL nesneleri | Sistem.SirketOlustur, Sistem.Users, Sistem.UserDetails |
SQL SQLR-067 — Subquery returned more than 1 value: Cari.AcceptTransaction; Uretim.TrBakiyeHesapla; Repair.BalanceRepair S1 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Subquery returned more than 1 value · SQL Error 512 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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 |
| Ekran | Her Cari.Islemler ve Uretim.UretimIslemleri INSERT/UPDATE |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük-Orta (Birimler.Kodu mükerrer girişi engellenmiyor) / S1 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | "Subquery returned more than 1 value…" — hiçbir işlem kaydedilemez. |
| Öneri | Settings'e tek satır kısıtı; Birimler(Kodu) filtered unique; TOP 1. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Sistem.Settings; SELECT Kodu,COUNT(*) FROM Sistem.Birimler WHERE IsDeleted=0 GROUP BY Kodu HAVING COUNT(*)>1; |
| Kanıt | subq.py: AcceptTransaction/TrBakiyeHesapla/BalanceRepair 8'er skaler alt sorgu; tables.json Sistem.Settings rows=1, indeks yok; Birimler yalnız PK_Birimler(Id). |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Uretim.TrBakiyeHesapla, Repair.BalanceRepair, Sistem.Settings, Sistem.Birimler |
SQL SQLR-068 — Subquery returned more than 1 value: Cari.HesapInsert; Cari.HesapUpdate (Cari.Hesaplar tetikleyicileri) S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Subquery returned more than 1 value · SQL Error 512 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.HesapInsert; Cari.HesapUpdate (Cari.Hesaplar tetikleyicileri) |
| Tablo | Cari.Hesaplar |
| Kolon | SubeId, Id, UserId |
| Ekran | Çok satırlı INSERT/UPDATE: Sistem.FromERP (toplu hesap aktarımı), dbo.sp_DevirIslemiYap, toplu UPDATE'ler |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta / S3 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET (BASE-DEPENDENCY) |
| 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!'. |
| Öneri | Set-tabanlı tetikleyici (inserted JOIN); yetki kuralının uygulama katmanına taşınması. (Uygulanmadı) |
| 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; |
| Kanıt | modules.json Cari.HesapInsert / Cari.HesapUpdate metinleri. |
| İlgili SQL nesneleri | Cari.HesapInsert, Cari.HesapUpdate, Cari.Hesaplar |
SQL SQLR-069 — Subquery returned more than 1 value: Sistem.GetIslemKodu; FN.GetKur; Cari.IslemDetayiEkle; POS.Sabit S3 · Observed=HAYIR · Guard=KISMEN
| Hata sınıfı | Subquery returned more than 1 value · SQL Error 512 / (sessiz TOP 1) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Sistem.GetIslemKodu; FN.GetKur; Cari.IslemDetayiEkle; POS.Sabit |
| Tablo | Sistem.CariIslemKodu/Turu/Tipi (PK Id); Sistem.GetKurListesi; Cari.RSReferans (PK yok); POS.Sabitler |
| Ekran | İşlem listeleri (GetIslemKodu her satırda); AcceptTransaction pırlanta maliyeti (FN.GetKur); FrmSeriFaturaBas (IslemDetayiEkle) |
| 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. |
| Guard var mı? | KISMEN |
| Olasılık / etki / güven | Düşük / S3 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET (GetIslemKodu, GetKur); IslemDetayiEkle LEGACY |
| Kullanıcı belirtisi | Nadir 'Subquery returned more than 1 value' (RSReferans); kur değeri beklenenden farklı (sessiz). |
| Öneri | GetKur'a ORDER BY Id DESC; RSReferans'a PK. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT SenderID,COUNT(*) FROM Cari.RSReferans GROUP BY SenderID HAVING COUNT(*)>1; |
| Kanıt | modules.json FN.GetKur, Sistem.GetIslemKodu, Cari.IslemDetayiEkle; indexes.json PK listesi. |
| İlgili SQL nesneleri | Sistem.GetIslemKodu, FN.GetKur, Cari.IslemDetayiEkle, POS.Sabit, Sistem.CariIslemKodu, Sistem.GetKurListesi, Cari.RSReferans, POS.Sabitler |
SQL SQLR-070 — Subquery returned more than 1 value: Cari.UpdateTransaction; Siparis.Kontrol; MüşteriŞemasıA tetikleyicisi S3 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Subquery returned more than 1 value · SQL Error (sessiz — tek satır varsayımı) |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.UpdateTransaction; Siparis.Kontrol; MüşteriŞemasıA tetikleyicisi |
| Tablo | Cari.Islemler → Cari.IslemDetaylari; Siparis.Siparisler |
| Kolon | IsDeleted, ETTN, IslemId |
| Ekran | Fiş iptali: iScreen.vb:723 'Update Cari.Islemler Set IsDeleted=''True'' Where FisNo=… and KasaId=…' (çok satır); Cari.Islem.vb:1058 'Where RefNo=… And IslemKodu=…' |
| Kod dosyası | ERPPRO/Controls/Islem Ekranı/Base Control/iScreen.vb:723; ERPPRO/Class/Dao/Islem/Cari.Islem.vb:1058 |
| Tetikleme koşulu | UpdateTransaction 'Select @IsDeleted=I.IsDeleted, @IslemId=D.IslemId, @Ettn=D.ETTN from inserted I Left Join Cari.IslemDetaylari D' → çok satırlı iptalde yalnız SON satırın IslemDetaylari'ı silinir/EIPTAL yapılır; diğer satırların belge detayı kalır (sessiz). Siparis.Kontrol aynı kalıp. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek (fiş iptali çok satırlı) / S3 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | Hata yok; iptal edilen fişin bazı satırlarının belge detayı (fatura no/ETTN) silinmez, raporlarda görünür. |
| Öneri | Set-tabanlı DELETE/UPDATE (inserted JOIN). (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT COUNT(*) FROM Cari.IslemDetaylari D JOIN Cari.Islemler I ON I.Id=D.IslemId WHERE I.IsDeleted=1 AND ISNULL(D.ETTN,'')='' ; |
| Kanıt | modules.json Cari.UpdateTransaction metni; sql_frags çok satırlı UPDATE'ler. |
| İlgili SQL nesneleri | Cari.UpdateTransaction, Siparis.Kontrol, Cari.Islemler, Cari.IslemDetaylari, Siparis.Siparisler |
SQL SQLR-071 — Dynamic SQL / injection: (kod) string-birleştirmeli SQL S1 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Dynamic SQL / injection · SQL Error 102 (tek tırnak) / injection |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | (kod) string-birleştirmeli SQL |
| Tablo | — |
| Kolon | — |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Yüksek (tırnaklı isim: O'NEIL, D'ARC…) / S1 / 95 |
| Var mı? V2 / KUYUMCU / BASE | EVET / EVET / — |
| Kullanıcı belirtisi | 'Unclosed quotation mark after the character string' / 'Incorrect syntax near …'; arama sonuç vermez. |
| Öneri | Parametreli sorguya geçiş (TD-09); en azından serbest metin girişlerinde Replace("'","''"). (Uygulanmadı) |
| Kanıt | 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 |
SQL SQLR-072 — Dynamic SQL / injection: Agent.RunAgent; AifaDev.ExQueryBuilder; Cari.GetHesapExtresi; Sistem.FromERP; Sistem.SirketOlustur; dbo.sp_DevirIslemiYap (6 modül) S2 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Dynamic SQL / injection · SQL Error 102 / injection |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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 |
| 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 |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük (çoğunun çağıranı yok) / SirketOlustur: yıkıcı / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / FromERP BASE-CORE; ExQueryBuilder BASE-DEPENDENCY; diğerleri UNKNOWN |
| 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. |
| Öneri | QUOTENAME; SirketOlustur ve sp_DevirIslemiYap'ın BASE'den çıkarılıp yönetici betiğine alınması. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT Kodu FROM Cari.BakiyeKodlari WHERE Kodu LIKE '%[]]%' OR Kodu LIKE '%[[]%'; |
| Kanıt | analysis_db.json dyn_mods (6 nesne); modules.json metinleri (GetHesapExtresi pivot, FromERP exec(@HesapQuery)). |
| İlgili SQL nesneleri | Agent.RunAgent, AifaDev.ExQueryBuilder, Cari.GetHesapExtresi, Sistem.FromERP, Sistem.SirketOlustur, dbo.sp_DevirIslemiYap, Agent.Agent, AifaDev.RepositoryItems, Cari.BakiyeKodlari |
SQL SQLR-073 — Transaction count mismatch: Cari.AcceptTransaction S2 · Observed=HAYIR · Guard=KISMEN (@IsError bayrağı yalnız bakiye yazımını atlar)
| Hata sınıfı | Transaction count mismatch · SQL Error 3609 (The transaction ended in the trigger. The batch has been aborted.) / 266 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=KISMEN (Activity/Takoz güncellemeleri sessizce kalır) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Cari.AcceptTransaction |
| Tablo | Cari.Islemler |
| Ekran | Her işlem kaydı (Cari.Islem.Save → INSERT; iptal → UPDATE) |
| Kod dosyası | ERPPRO/Class/Dao/Islem/Cari.Islem.vb:568,859 |
| 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ı. |
| Guard var mı? | KISMEN (@IsError bayrağı yalnız bakiye yazımını atlar) |
| Olasılık / etki / güven | Orta (her iş kuralı ihlalinde) / S2 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET / EVET (31.152 krk farklı sürüm — TD-48) / EVET |
| 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ı). |
| Öneri | Her ROLLBACK'ten sonra RETURN; THROW; cursor'un TRY/CATCH ile deallocate edilmesi. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT LEN(OBJECT_DEFINITION(OBJECT_ID('Cari.AcceptTransaction'))); -- 29.862 (DB1) vs 31.152 (DB2) |
| Kanıt | modules.json AcceptTransaction: ROLLBACK 13 / RETURN 5 (TD-04); DECLARE IslemCursor … CLOSE/DEALLOCATE yalnız normal akışta (TD-03). |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Cari.Islemler |
| Wiki bağlantıları | TD-04 · TD-03 |
SQL SQLR-074 — Deadlock / timeout: Cari.AcceptTransaction + InsertTransaction + UpdateTransaction (Cari.Islemler); Cari.GetHesapExtresi; Stok.GetOrtMilyem (cursor'lı skaler fonksiyon) S2 · Observed=HAYIR (canlı ölçüm yok) · Guard=HAYIR
| Hata sınıfı | Deadlock / timeout · SQL Error 1205 / -2 (Timeout expired) |
| Gözlemlendi | HAYIR (canlı ölçüm yok) · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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) |
| 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) |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Orta (yoğun saatlerde) / S2 / 70 |
| Var mı? V2 / KUYUMCU / BASE | EVET / EVET (Cari.Islemler 677k, BakiyeIslem 976k, History 736k) / EVET |
| 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). |
| Öneri | 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ı) |
| 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; |
| Kanıt | indexes.json (Cari.Islemler 26 indeks; StokHaraketleri 9, çiftler); tables.json satır sayıları; trg.json 4 tetikleyici Cari.Islemler; AcceptTransaction cursor. |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Cari.Islemler, Cari.GetHesapExtresi, Stok.GetOrtMilyem, Cari.BakiyeIslem, Stok.StokHaraketleri, Cari.History |
SQL 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 · Observed=HAYIR · Guard=KISMEN
| Hata sınıfı | Recursive trigger · SQL Error 217 (nesting 32) — düşük; iç içe tetikleme |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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 |
| Ekran | Her işlem kaydı |
| 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. |
| Guard var mı? | KISMEN |
| Olasılık / etki / güven | Düşük-Orta / S2 / 80 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | İşlem girerken beklenmedik 'Aynı Vergi No ya sahip başka bir hesap mevcuttur!!' hatası. |
| Öneri | HesapUpdate'in yalnız VergiNo/TCNo değiştiğinde (IF UPDATE(VergiNo)) çalışması. (Uygulanmadı) |
| 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; |
| Kanıt | AcceptTransaction 'Update Cari.Hesaplar Set LastDate=Getdate() Where Id=@HesapId'; HesapUpdate metni; trg.json trigger→tablo eşlemesi. |
| İlgili SQL nesneleri | Cari.AcceptTransaction, Cari.Hesaplar, Cari.HesapUpdate, Cari.Transferler, Stok.StokHaraketleri, Sistem.Subeler, Sistem.Kasalar, Uretim.UretimIslemleri |
SQL SQLR-076 — Disabled trigger: 12 tetikleyici (trg.json) S1 · Observed=HAYIR · Guard=—
| Hata sınıfı | Disabled trigger |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET (kapalıysa) |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 12 tetikleyici (trg.json) |
| Tablo | Cari.Islemler(4), Cari.Hesaplar(2), Cari.Transferler, Sistem.SilOnay, Sistem.Subeler, Siparis.Siparisler, Uretim.UretimIslemleri, AifaDev.RepositoryItems |
| Ekran | — |
| Kod dosyası | dbclean/trg.json |
| 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. |
| Guard var mı? | — |
| Olasılık / etki / güven | Bilinmiyor / S1 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET (hepsi etkin) / EVET (5 tetikleyici, farklı sürüm) / EVET (BASE-DEPENDENCY 12) |
| Kullanıcı belirtisi | Kapalıysa: işlem kaydedilir ama bakiye/stok değişmez, History boş. |
| Öneri | Kurulum doğrulama kontrol listesine sys.triggers is_disabled sorgusu. (Uygulanmadı) |
| 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; |
| Kanıt | trg.json 12 satır is_disabled=False; TD-32 metni (AS-DOCUMENTED). |
| İlgili SQL nesneleri | Cari.Transferler, Sistem.SilOnay, Sistem.Subeler, Siparis.Siparisler, Uretim.UretimIslemleri, AifaDev.RepositoryItems, Cari.Islemler, Cari.Hesaplar |
| Wiki bağlantıları | TD-32 |
SQL 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 · Observed=HAYIR · Guard=HAYIR
| Hata sınıfı | Broken dependency · SQL Error 208 / 4413 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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) |
| Ekran | İşlem kaydı; parite tanımı |
| 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. |
| Guard var mı? | HAYIR |
| Olasılık / etki / güven | Düşük (temizlik yapılırsa orta) / S2 / 80 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| 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'. |
| Öneri | build_order.json zincirinin BASE build'inde korunması; drop öncesi sys.sql_expression_dependencies kontrolü. (Uygulanmadı) |
| 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; |
| Kanıt | deps.json (2026 satır); computed.json Sistem.Pariteler.Parite 'Sistem.GetIdToBirim]([AnaBirimId])'; ERPSCHEMA dbo.SyncTickets computed 'FN.Bol'. |
| İlgili SQL nesneleri | Cari.AcceptTransaction, FN.GetKur, FN.Bol, Stok.GetTakozAdet, Genel.Dosyalar, Sistem.Pariteler, Sistem.GetIdToBirim, Cari.Islemler, Cari.GetGerekliEvraklar |
SQL SQLR-078 — Collation conflict: Pozisyon.Write (COLLATE Turkish_CI_AS); Genel.Dosyalar (cross-DB DOCUMENTS); Sistem.FromERP (<@Database>.dbo.*); ERPGLOBAL.dbo.Company S3 · Observed=HAYIR · Guard=KISMEN (Pozisyon.Write)
| Hata sınıfı | Collation conflict · SQL Error 468 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Pozisyon.Write (COLLATE Turkish_CI_AS); Genel.Dosyalar (cross-DB DOCUMENTS); Sistem.FromERP (<@Database>.dbo.*); ERPGLOBAL.dbo.Company |
| Ekran | Pozisyon yazımı; evrak kontrolü; hesap aktarımı |
| 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). |
| Guard var mı? | KISMEN (Pozisyon.Write) |
| Olasılık / etki / güven | Düşük / S3 / 60 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / Pozisyon.Write UNKNOWN |
| Kullanıcı belirtisi | 'Cannot resolve the collation conflict between … in the equal to operation.' |
| Öneri | BASE kurulumunda DB harmanlamasının sabitlenmesi (Turkish_CI_AS) ve tempdb/cross-DB için COLLATE DATABASE_DEFAULT. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT DATABASEPROPERTYEX(DB_NAME(),'Collation'), SERVERPROPERTY('Collation'); |
| Kanıt | modules.json COLLATE taraması: yalnız Pozisyon.Write. |
| İlgili SQL nesneleri | Pozisyon.Write, Genel.Dosyalar, Sistem.FromERP |
SQL SQLR-079 — Collation conflict: nvarchar(1) kolonlar; text/image legacy tipler; bit'e 'True'/'False' string S4 · Observed=HAYIR · Guard=—
| Hata sınıfı | Collation conflict · SQL Error (veri tipi) 8152/245 |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=HAYIR |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | 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 |
| Ekran | Sistem tanımları; tasarımcı (CodeDesigner) |
| 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): '+'/'-'. |
| Guard var mı? | — |
| Olasılık / etki / güven | Düşük / S4 / 90 |
| Var mı? V2 / KUYUMCU / BASE | EVET / BİLİNMİYOR / EVET |
| Kullanıcı belirtisi | Tanım ekranında 'String or binary data would be truncated'; tasarımcıda text tipi hataları. |
| Öneri | text/image → nvarchar(max)/varbinary(max); nvarchar(1) kodların standardı. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT OBJECT_NAME(object_id),name FROM sys.columns WHERE system_type_id IN (35,34,99); |
| Kanıt | columns.json taraması: nvarchar(1) 4, varchar(1) 2, text 4, image 19. |
| İlgili SQL nesneleri | Sistem.CariIslemTipi, Sistem.CariIslemTuru, Sistem.TakozScala, Cari.Islemler, AifaDev.Forms, Design.Forms |
SQL SQLR-080 — Legacy: Pozisyon.GetOldPozisyon; Sistem.NonUsed_TCMBDovizKurlari; Genel.Dosyalar_; Genel.Experler_; Sistem.AyarEvi_ (DB2); LiveUpdate.VersionHistory_; dbo.Temp; dbo.test; Muhasebe.TEst; FN.GetCariLimitOld; FN.GetKurOldKur; FX.StartSyncOld; Report.BakiyeArtisRaporuOld S3 · Observed=HAYIR · Guard=—
| Hata sınıfı | Legacy |
| Gözlemlendi | HAYIR · Potential=EVET · Silent=EVET |
| Runtime durumu | DOĞRULANMADI — statik analiz (Gözlemlendi: HAYIR) |
| SQL nesnesi | Pozisyon.GetOldPozisyon; Sistem.NonUsed_TCMBDovizKurlari; Genel.Dosyalar_; Genel.Experler_; Sistem.AyarEvi_ (DB2); LiveUpdate.VersionHistory_; dbo.Temp; dbo.test; Muhasebe.TEst; FN.GetCariLimitOld; FN.GetKurOldKur; FX.StartSyncOld; Report.BakiyeArtisRaporuOld |
| Ekran | FrmPozisyon.vb:8 (ANA MENÜ) → Pozisyon.GetOldPozisyon; AifaDev.Reports #18 'Pozisyon Raporu' → GetOldPozisyon; Pozisyon.GetHacimRaporu → GetOldPozisyon |
| Kod dosyası | ERPPRO/Form/RefreshGrid/FrmPozisyon.vb:8 |
| Tetikleme koşulu | 'Old' adlı fonksiyon canlı ekran ve rapor tarafından kullanılıyor (BASE-CORE olarak işaretli) — ad yanıltıcı, temizlikte silinirse 208. NonUsed_TCMBDovizKurlari (25.212 satır) hiçbir modül/kod tarafından okunmuyor (TCMB.vb view'ı hedefliyor). Dosyalar_/Experler_ tabloları 0 satır, view'lar tarafından değil kod tarafından da referans edilmiyor. dbo.Temp/test/Muhasebe.TEst referans yok. |
| Guard var mı? | — |
| Olasılık / etki / güven | Düşük / S3 / 85 |
| Var mı? V2 / KUYUMCU / BASE | EVET / Sistem.AyarEvi_/TCMBDovizKurlari tablo (KUY_ONLY); NonUsed_ HAYIR / GetOldPozisyon EVET (BASE-CORE); diğerleri HAYIR (LEGACY 25) |
| Kullanıcı belirtisi | Temizlik sonrası Pozisyon ekranı/raporunda 'Invalid object name Pozisyon.GetOldPozisyon'. |
| Öneri | GetOldPozisyon'un LEGACY listesine alınmaması (kullanımda); NonUsed_/_ son ekli nesnelerin EXCLUDE_LEGACY olarak kalması. (Uygulanmadı) |
| Validation SQL (salt okunur) | SELECT OBJECT_ID('Pozisyon.GetOldPozisyon'); SELECT COUNT(*) FROM Sistem.NonUsed_TCMBDovizKurlari; |
| Kanıt | Legacy referans taraması: code FrmPozisyon.vb:8, dbsql AifaDev.Reports#18, modül Pozisyon.GetHacimRaporu; analysis.json LEGACY 25 nesne. |
| İlgili SQL nesneleri | Pozisyon.GetOldPozisyon, Sistem.NonUsed_TCMBDovizKurlari, Genel.Dosyalar_, Genel.Experler_, dbo.Temp, dbo.test, Muhasebe.TEst, FN.GetCariLimitOld, FN.GetKurOldKur, FX.StartSyncOld, Report.BakiyeArtisRaporuOld, AifaDev.Reports, Pozisyon.GetHacimRaporu |
