Kime: yazılımcı, rapor yazan destek personeli. Süre: 3 gün. Ön koşul: TRACK-L2 (L3 önerilir). Kaynak kod ve DB'ye erişim salt okunur başlar; üretim DB'sine yazma bu seviyenin kapsamı dışıdır.
Öğrenme hedefi
- Uygulama akışını (başlangıç → login → FrmMainForm → iScreen → iF* → DAO → InternalDb → tablo → tetikleyici) dosya:satır düzeyinde izler.
Cari.AcceptTransaction'ı dal dal okur; birCari.Islemlersatırı için üretilecek defter satırlarını elle türetir.- Rapor tablo fonksiyonlarını (Reports/Report/ReportsV2/Bakiye/Bilanco/Pozisyon) ve rapor yazım kurallarını (IsDeleted, FN.Bol, uyumluluk 100, StokId çok anlamlı) uygular.
- 25 entegrasyonun mekanizmasını ve tipik arıza biçimlerini bilir.
- P1 teknik borç maddelerini ve "dokunulmaz" nesneleri (BalanceRepair, Devir) tanır; GAP/CTR disiplinine uyar.
Teorik anlatım
Mimari (ARCHITECTURE): VB.NET WinForms + DevExpress; sunum (Ekran/, Base Control/), iş kuralı (Dao/Islem/Cari.Islem.vb, Ext/*Ex.vb, ekran Validate/FormSave), veri erişimi (Dao/ AIO.*, InternalDb), veritabanı (220 tablo, 12 tetikleyici, 338 fonksiyon, 61 proc, 73 view; FK yalnız KYC). Çözüm haritası ARCH-SOLUTION-MAP, bağımlılıklar ARCH-DEPENDENCY-MAP, kod haritası CODE_MAP, sınıflar 09_CodeArchitecture/Classes.
Başlangıç akışı (ARCH-APP-FLOW): MyApplication.Startup → Program.Config (Config.cfg) → ConnectDatabase → FrmLoginForm (GlobalSettings.Read, LiveUpdate, şirket/kullanıcı/şube seçimi, 3 hatalı deneme = kapanış) → LoginInformation.Login → Program.Init → FrmMainForm (Ribbon görünürlüğü UserGroup.Permission, SEC-AUTHZ; kimlik doğrulama SEC-AUTHN). Menü → onMenuSelect(Tag) → ekran.
Veri erişimi (ARCH-DB-ACCESS): ADO.NET, ORM yok; üç yol bir arada (InternalDb sarmalayıcı 293 sınıf; doğrudan SqlConnection 39 dosya; attribute mini-ORM 2 sınıf). Uygulama katmanında transaction yok (TD-01); bağlantı dizesi yapısı belgelenir, değerler asla ([AGENT_BRIEF] §4). Ayarlar: CONFIGURATION (87 anahtar; Sistem.Settings, Sistem.Subeler, Sistem.Kasalar, Sistem.Clients, Sistem.UserGroup).
Tetikleyici (TRG-CARI.ACCEPTTRANSACTION, 569 satır, AFTER INSERT/UPDATE/DELETE): (1) doğrudan DELETE reddi; (2) cursor ile her satır: şube pasif → ROLLBACK+RETURN; ETTN dolu ve Mutabakat/IsDeleted değil → ROLLBACK+RETURN; eksik evrak → ROLLBACK RETURN yok (TD-04); şube/kasa/hesap 0 → ROLLBACK; Sistem.Activity MERGE; takoz stok kontrolleri (Stok.GetTakozAdet); (3) Delete BakiyeIslem/StokHaraketleri(Bolum 0) Where IslemId; (4) IsDeleted=False AND IslemTipi NOT IN (11,12) ise: stok bloğu (kod 1/2 → StokTipi 1; 0 → 3 adet ±1; 3 ve tip≠4 → 2; tip 1 → BirimId nakit ∓Tutar; 8 → 4; 9 → model ayar stoğu) ve bakiye bloğu (14 çeşni; 3+tip 10; 1/2/9 has+tutar aynı işaret; 4/5/6 has/tutar zıt işaret; diğer kodlar yalnız tutar; 0 takoz çok metalli + XRF + işçilik). Diğer tetikleyiciler: Insert/Update/Delete → Cari.History; TRG-CARI.TRANSFERUPDATESTATUS (Bolum 2); TRG-URETIM.TRBAKIYEHESAPLA (Bolum 1); TRG-SISTEM.CREATEKASA. İki kurulumun tetikleyicisi farklıdır (29.862 ↔ 31.152 karakter, TD-48/CTR-037); KUYUMCU'da 5. tetikleyici NilKuyumIslemFiyatlari müşteri-özel (TD-41).
Raporlar (10_Reports/Functions/INDEX: 79 tablo fonksiyonu; DOC-REPORT-GUIDE on kural): FK yok, IsDeleted=0 şart, Cari.Islemler tek kaynak, StokId/BirimId çok anlamlı, işaret iki katmanlı, hesaplanan 14 sütun, kur fotoğrafı satırda, FN.Bol, uyumluluk düzeyi 100. Üç rapor şeması (Report/Reports/ReportsV2, TD-47); metrikler METRIC_DICTIONARY; tasarım Aifa Developer Studio (AifaDev.Reports; .repx kaynakta yok — GAP). RPT-91 ve Reports.MusteriUrunHacimRaporu GENERATED_PROPOSAL.
Entegrasyonlar (11_Integrations/INDEX, 25): e-fatura entegratörü (INT-EFATURA, DijitalFatura kütüphanesi), istatistik/BSMV (INT-EDOVIZ-ISTATISTIK), MASAK (INT-MASAK-AMLSCAN), BTrans (INT-BTRANS), kur akışı (INT-KUR-EDS, INT-TCMB, INT-TICKDATA UNVERIFIED), lisans, LiveUpdate, yazıcı/terazi/barkod/RFID, POS, KYC, MT4, provizyon/RsAktar, RDP. Uç nokta/anahtar değerleri wiki'ye girmez.
Kalite ve teknik borç (17_Quality_And_TechnicalDebt/INDEX, 49 madde; QA-HOTSPOTS, QA-SQL-QUERY-MAP): 679 boş catch, 1.010 dinamik SQL, transaction yok, Max+1 numara üretimi (TD-02), cursor sızıntısı (TD-03), GetKur daima alış (TD-21), GetMadenMaliyeti TOP 50 (TD-23), VaryantId adı (TD-39), TxtTarih→Vade (TD-40), Devir TRUNCATE (TD-29), BalanceRepair (TD-30 — çalıştırılmaz). Governance: KNOWN_GAPS, CONTRADICTIONS; yeni bulgu makalede GAP:/CTR: + _tools/agent_findings_*.md.
ERPGOLD bağlantısı
- Tablo makaleleri (08_Database/INDEX): TBL-CARI.ISLEMLER (90 kolon), TBL-CARI.BAKIYEISLEM, TBL-STOK.STOKHARAKETLERI (Bolum 0/1/2; StokTipi 1 maden, 2 nakit, 3 takoz, 4 pırlanta — tablo makalesi yalnız 1/2 yazar, tetikleyici 3/4 de kullanır: CTR kaydı), TBL-CARI.HISTORY.
- Enum'lar: ENUM INDEX; kod tablosu ↔ enum farkları CTR-002/039/044 (TD-44).
- Ekran → kolon haritası her SCR makalesinde "Alanlar → veritabanı"; kitapçık §8.5 "ekran ile kolonun aynı şeyi söylemediği yerler".
Örnek
Cari.Islemler satırı: IslemKodu 4 (ÇEVİR), IslemTuru 2, IslemTipi −1, BakiyeId HAS, Miktar 50, AuMilyem 0, BirimId TL, Tutar 200.000. Tetikleyici okuması: tip ≠ 11/12 → blok çalışır; stok bloğunda 4 için dal yok, tip ≠ 1 → stok satırı yok; bakiye bloğu 4/5/6 dalı: ALACAK → Has = +|50| (milyem 0 → 1), Tutar = −|200.000| → iki satır (HAS +50, TL −200.000). Doğrulama: SCN-CEVIR.
Uygulamalı senaryo
- Salt okunur DB'de SCN-NORMAL-MADEN, SCN-VADELI, SCN-TAKOZ satırlarını temsil eden gerçek
Cari.Islemlerkayıtları bulun (IslemKodu/IslemTipi süzgeci) veIslemIdileCari.BakiyeIslem/Stok.StokHaraketlerisatırlarını çekip senaryodaki beklentiyle karşılaştırın. - SCN-PARITE'deki GAP-TRN-PARITE-01'i araştırın: tip 10 satırlar hangi ekrandan geliyor (
IslemTipi=10sorgusu +iFNakit.IslemTipikodu). - DOC-REPORT-GUIDE kurallarıyla "hesap bazında günlük has hacmi" tablo fonksiyonu taslağı yazın (
IsDeleted=0,IslemKodu IN (0,1,2),FN.Bol, tip 11 ayrı sütun); üretime deploy yok. - SCN-DEVIR ve SCN-SUBELER-ARASI-ISLEM için
Sistem.DevirveCari.TransferUpdateSTatustanımlarını okuyup Bolum/IslemId −1 etkisini açıklayın.
Sık karıştırılan noktalar
- Kod enum ≠ DB kod tablosu ≠ kitapçık Ek A:
IslemTipi12–15 veIslemKodu14 yalnız kodda; kitapçık Ek A düzeltildi (CTR-002/035/039/044, TD-44). StokTipisözlüğü: tablo makalesi 1 maden / 2 nakit der; tetikleyici 3 takoz, 4 pırlanta da yazar; transfer tetikleyicisi −2'yi siler ama yazmaz (GAP-TRN-TRANSFER-02).VaryantIdürün varyantı değil karşı işlem Id'sidir;IsArbitirajhesaplanan sütunu buna dayanır (TD-39).Cari.Islemlerhesaplanan 14 sütunu INSERT/UPDATE listesine konursa hata;Cari.IslemINSprecision'sız decimal parametreler (TD-31).FN.GetKur(SQL) alış döndürür;Program.GetKur(VB) de alış — satış değerlemesi yapan kod makası kaybeder (TD-21/22; BR-KUR-001 GAP).- Rapor fonksiyonu ≠ rapor tasarımı: fonksiyon DB'de, .repx tasarımı
AifaDev.Reportstablosunda (kaynakta yok — GAP); RPT-91 GENERATED_PROPOSAL. - Salt okunur kural: MCP/SSMS bağlantısı salt okunur; üretim tetikleyicisi/prosedürü değiştirmek bu programın kapsamı dışıdır; öneriler
17_Quality_And_TechnicalDebtmaddelerine bağlanır.
Eğitmen notları
- Materyal: kaynak kod okuma erişimi, salt okunur DB, TRG-CARI.ACCEPTTRANSACTION SQL tanımı yazdırılmış, DOC-REPORT-GUIDE.
- Süre dağılımı: 1. gün mimari + akış + veri erişimi; 2. gün tetikleyici dal dal (her dal için bir senaryo satırı türetme) + raporlar; 3. gün entegrasyonlar + teknik borç + uygulama.
- Tetikleyiciyi anlatırken iki kurulumun metninin farklı olduğunu (TD-48) ve wiki'deki tanımın "örnek DB" olduğunu vurgulayın.
- Üretimde değişiklik önerileri yalnız
17_Quality_And_TechnicalDebtmaddesine bağlı yazılı öneri olarak kabul edilir; eğitim sırasında deploy yoktur.
Kaynak makaleler
ARCHITECTURE · ARCH-APP-FLOW · ARCH-DB-ACCESS · ARCH-SOLUTION-MAP · CODE_MAP · CONFIGURATION · SEC-AUTHN · SEC-AUTHZ · TRG-CARI.ACCEPTTRANSACTION · 08_Database/INDEX · 10_Reports/Functions/INDEX · DOC-REPORT-GUIDE · 11_Integrations/INDEX · 17_Quality_And_TechnicalDebt/INDEX · QA-HOTSPOTS · QA-SQL-QUERY-MAP
Quiz
- (ÇS) Kullanıcı kaydı hangi katmandan tabloya ulaşır? a) iScreen → DAO → InternalDb b) FrmMainForm → SQL c) Tetikleyici → DAO d) Rapor fonksiyonu
- (KC)
AcceptTransaction'daIslemTipi 11/12için hangi koşul defter bloğunu atlar? - (ÇS) Eksik evrak dalında hangi kusur var? a) cursor kapanmaz b) ROLLBACK sonrası RETURN yok c) MERGE hatası d) yanlış StokTipi
- (KC)
Stok.StokHaraketleri.Bolum0/1/2 neyi ayırır? - (ÇS) Rapor sorgusunda en sık hata? a) FN.Bol kullanmak b) IsDeleted süzgecini unutmak c) Reports şeması d) ReportsV2
- (KC)
StokIdneden "çok anlamlı"dır? - (ÇS) Uyumluluk düzeyi 100'de hangisi çalışmaz? a) CASE b) CONVERT c) STRING_AGG d) FOR XML PATH
- (KC)
Repair.BalanceRepairneden çalıştırılmaz (iki somut sonuç)? - (ÇS)
Program.GetKurkusuru? a) satış döndürür b) daima alış döndürür c) tarih dikkate almaz d) EUR yok - (KC) İki kurulumun tetikleyicisi neden "aynı" kabul edilemez?
- (ÇS)
VaryantIdgerçekte neyi tutar? a) ürün varyantı b) karşı işlem Id'si c) fiş no d) kasa
Cevap anahtarı
| # | Cevap | Kaynak |
|---|---|---|
| 1 | a | ARCHITECTURE |
| 2 | @IsDeleted='False' And @IsError=0 AND (@IslemTipi<>11 AND @IslemTipi<>12) |
TRG-CARI.ACCEPTTRANSACTION, BR-TIP-004 |
| 3 | b | TD-04 |
| 4 | 0 cari işlem (tetikleyici), 1 üretim, 2 kasa transferi | TBL-STOK.STOKHARAKETLERI |
| 5 | b | DOC-REPORT-GUIDE kural 2 |
| 6 | işaret ettiği tablo IslemKodu'na bağlı (1/2 Maden, 3 Nakit, 5 Hizmet …) | DOC-REPORT-GUIDE kural 4; TBL-CARI.ISLEMLER |
| 7 | c | DOC-REPORT-GUIDE kural 10; TD-33 |
| 8 | devir/transfer satırlarını (~80.033) yok eder; tip 11/12'ye bakiye yazar | TD-30, SP-REPAIR.BALANCEREPAIR |
| 9 | b | TD-21 |
| 10 | 29.862 ↔ 31.152 karakter; KUYUMCU'da ek dal/5. tetikleyici | TD-48, CTR-037 |
| 11 | b | TD-39 |
Minimum başarı kriteri
- Quiz: 11 sorudan en az 9 doğru; 2, 5, 8 zorunlu doğru.
- Uygulamalı senaryo: 4 adımın tamamı; 1. adımda üç kaydın defter satırları senaryo beklentisiyle eşleşmiş ya da fark GAP/CTR olarak
_tools/agent_findings_*.md'ye yazılmış; 3. adımdaki fonksiyon taslağı on kuralın tümüne uyuyor (eğitmen kod incelemesi).
