AIFA AKADEMI · Kurumsal Wiki
4.310 makale
Ana sayfa Kurumsal Wiki › Eğitim › Tracks › TRACK-L5

Eğitim programı L5 — Teknik: veritabanı, kod, tetikleyiciler, raporlar, entegrasyonlar

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

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

  1. Uygulama akışını (başlangıç → login → FrmMainForm → iScreen → iF* → DAO → InternalDb → tablo → tetikleyici) dosya:satır düzeyinde izler.
  2. Cari.AcceptTransaction'ı dal dal okur; bir Cari.Islemler satırı için üretilecek defter satırlarını elle türetir.
  3. 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.
  4. 25 entegrasyonun mekanizmasını ve tipik arıza biçimlerini bilir.
  5. 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.StartupProgram.Config (Config.cfg) → ConnectDatabaseFrmLoginForm (GlobalSettings.Read, LiveUpdate, şirket/kullanıcı/şube seçimi, 3 hatalı deneme = kapanış) → LoginInformation.LoginProgram.InitFrmMainForm (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ı

Ö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

  1. Salt okunur DB'de SCN-NORMAL-MADEN, SCN-VADELI, SCN-TAKOZ satırlarını temsil eden gerçek Cari.Islemler kayıtları bulun (IslemKodu/IslemTipi süzgeci) ve IslemId ile Cari.BakiyeIslem / Stok.StokHaraketleri satırlarını çekip senaryodaki beklentiyle karşılaştırın.
  2. SCN-PARITE'deki GAP-TRN-PARITE-01'i araştırın: tip 10 satırlar hangi ekrandan geliyor (IslemTipi=10 sorgusu + iFNakit.IslemTipi kodu).
  3. 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.
  4. SCN-DEVIR ve SCN-SUBELER-ARASI-ISLEM için Sistem.Devir ve Cari.TransferUpdateSTatus tanı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: IslemTipi 12–15 ve IslemKodu 14 yalnız kodda; kitapçık Ek A düzeltildi (CTR-002/035/039/044, TD-44).
  • StokTipi sö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; IsArbitiraj hesaplanan sütunu buna dayanır (TD-39).
  • Cari.Islemler hesaplanan 14 sütunu INSERT/UPDATE listesine konursa hata; Cari.IslemINS precision'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.Reports tablosunda (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_TechnicalDebt maddelerine 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_TechnicalDebt maddesine 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

  1. (ÇS) Kullanıcı kaydı hangi katmandan tabloya ulaşır? a) iScreen → DAO → InternalDb b) FrmMainForm → SQL c) Tetikleyici → DAO d) Rapor fonksiyonu
  2. (KC) AcceptTransaction'da IslemTipi 11/12 için hangi koşul defter bloğunu atlar?
  3. (ÇS) Eksik evrak dalında hangi kusur var? a) cursor kapanmaz b) ROLLBACK sonrası RETURN yok c) MERGE hatası d) yanlış StokTipi
  4. (KC) Stok.StokHaraketleri.Bolum 0/1/2 neyi ayırır?
  5. (ÇS) Rapor sorgusunda en sık hata? a) FN.Bol kullanmak b) IsDeleted süzgecini unutmak c) Reports şeması d) ReportsV2
  6. (KC) StokId neden "çok anlamlı"dır?
  7. (ÇS) Uyumluluk düzeyi 100'de hangisi çalışmaz? a) CASE b) CONVERT c) STRING_AGG d) FOR XML PATH
  8. (KC) Repair.BalanceRepair neden çalıştırılmaz (iki somut sonuç)?
  9. (ÇS) Program.GetKur kusuru? a) satış döndürür b) daima alış döndürür c) tarih dikkate almaz d) EUR yok
  10. (KC) İki kurulumun tetikleyicisi neden "aynı" kabul edilemez?
  11. (ÇS) VaryantId gerç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).