AIFA AKADEMI · Kurumsal Wiki
4.310 makale
Ana sayfa Kurumsal Wiki › Ekranlar › SCR-FRMDEVIR

FrmDevir

SCREENMOD-SISTEMERPGOLD_COREACTIVE_CRITICALHIGHSOURCE_IMPLEMENTED
Kanonik kaynak: markdown · bu sayfa üretilmiş görünümdür

Sınıf: FrmDevir · Modül: MOD-SISTEM · Türetildiği: DevExpress.XtraEditors.XtraForm · Yaşam döngüsü: ACTIVE_CRITICAL · Kapsam: ERPGOLD_CORE

Nedir?

Yıl sonu (dönem) devri ekranıdır — "Devir İşlemleri" penceresi. Tek düğmeyle (Başla) Devir.DevirYap akışını çalıştırır: canlı veritabanının tam yedeğini alır, yedeği DB_yyyyMMdd adıyla ayrı bir arşiv veritabanı olarak geri yükler, arşivdeki şubeleri pasife çeker, ana veritabanında beş işlem/defter tablosunu TRUNCATE eder ve yalnız bakiye ile stok özetini IslemId = -1 açılış satırları olarak geri yazar; son olarak arşiv adını ERPGLOBAL.dbo.Company tablosuna ekler ki giriş ekranındaki şirket listesinde görünsün [SOURCE_CODE:ERPPRO/Form/Genel/FrmDevir.vb:1-36] [SOURCE_CODE:ERPPRO/Class/Module/Devir.vb:34-146] [DOCUMENT:kitap#4.7]. Devir sonrası eski yılın işlem satırları ana veritabanında kalmaz; geçmişe dönük rapor arşiv veritabanından alınır [DOCUMENT:kitap#4.7].

Ne zaman kullanılır?

  • Yeni yıla geçişte eski dönemi arşivleyip açılış bakiyelerini oluşturmak için — yılda bir, destek eşliğinde [DOCUMENT:06_Workflows/WF-YIL-SONU-DEVIR.md] [TICKET_THEME:PRB-DEVIR-000].
  • Ön koşullar: yedek alınmış; devir günü takoz ve çeşni stokları sıfır, maden stokları tek kasada; nakit-maden stokları (operasyonel ve belgelendirilmiş görünüm), bakiye ekstresi ve son bilanço not edilmiş; program güncel; Aralık BTrans'ı alınmış [DOCUMENT:06_Workflows/WF-YIL-SONU-DEVIR.md#ön-koşullar] [PROCESS:PROC-180].

Adım adım kullanım

  1. Tüm kullanıcılar programdan çıkar; yedek alınır (Backup, PB-013).
  2. Takozlar SERİ ÇIKIŞ ile geçici karta çıkılır, çeşni çıkılır, stoklar tek kasaya transfer edilir [DOCUMENT:06_Workflows/WF-TAKOZ-SERI-CIKIS.md] [DOCUMENT:06_Workflows/WF-KASA-TRANSFER.md].
  3. Id = 1 kullanıcı (ADMIN) ile girilir; ana menüde Shift+D basılınca Tanımlamalar ▸ Sistem ▸ Devir düğmesi görünür hâle gelir [SOURCE_CODE:ERPPRO/Form/Genel/FrmMainForm.vb:705-710].
  4. Pencere açılınca Dabase Name, Archive Name (DB_yyyyMMdd) ve File Location (mdf klasörü) gösterilir; kontrol edilir [SOURCE_CODE:FrmDevir.vb:5-10].
  5. Başla basılır. Adımlar listede akar: "Database Backup'ı Alınıyor." → yedek dosyası doğrulama → "…Geri Yükleniyor." → "Veritabanı Doğrulanıyor." (arşiv ve canlı Cari.Islemler sayıları eşit olmalı) → "Arsiv Veritabanı İşleme Kapatıldı." → "Devir İşlemi Gerçekleştiriliyor." → "Devir İşlemi Tamamlandı." → ERPGLOBAL kontrolü → "Arsivlenen Bilgiler Sisteme Eklendi." [SOURCE_CODE:Devir.vb:84-146]. !!! ERROR: satırı çıkarsa süreç durur; pencere kapatılabilir.
  6. Devir sonrası: resmi stoklar DEVİR hesabından GİRİŞ+MAHSUP ile girilir, takozlar Blok Takoz ile geri alınır, transferler geri yapılır; bilanço/stok/pozisyon/bakiye listeleri eski yılın son günüyle karşılaştırılır; yeni yıl kur listesi girilir [DOCUMENT:06_Workflows/WF-YIL-SONU-DEVIR.md] [DOCUMENT:06_Workflows/WF-ACILIS-STOK-DEVIR-HESABI.md] [DOCUMENT:06_Workflows/WF-BLOK-TAKOZ-GIRIS.md].

Alanların anlamı

Ekran etiketi Anlamı
Dabase Name Bağlı canlı veritabanı adı (ConnInfo.InitialCatalog)
Archive Name Oluşturulacak arşiv DB adı: DB_ + bugünün tarihi (yyyyMMdd)
File Location Canlı DB'nin veri dosyası klasörü; arşiv .mdf/.ldf buraya yazılır
Başla BackgroundWorker ile Devir.DevirYap(yyyyMMdd); düğme basılınca gizlenir, ilerleme çubuğu görünür
(adım listesi) StepChanged / StepException mesajları

Ekranın giriş alanı yoktur; yazdığı tablolar: Cari.BakiyeIslem, Stok.StokHaraketleri (açılış satırları), ERPGLOBAL.dbo.Company, arşiv DB'de Sistem.Subeler.IsActive [SOURCE_CODE:Devir.vb:34-80,116,141].

Hesaplama / doğrulama mantığı

  • Yedek doğrulama: yedek dosyası yoksa "Veritabanı Yedeği Alınamadı. Lütfen Manuel Olarak Devir Yapınız." ile durur; dosya 0 bayt ise "Backup Failed.!" [SOURCE_CODE:Devir.vb:88-96].
  • Sayı doğrulama: arşiv ve canlı Cari.Islemler satır sayısı farklıysa "Veritabanı Kayıt Sayıları Eşleşmedi.!" ile durur — TRUNCATE bu adımdan sonra gelir, yani doğrulama başarısızsa canlı veri bozulmaz [SOURCE_CODE:Devir.vb:104-116].
  • Açılış bakiyesi: Cari.BakiyeIslem hesap/kasa/birim bazında toplanır (toplamı 0 olanlar atlanır) ve IslemId=-1, bugünün tarihiyle geri yazılır; açılış stoğu: Stok.StokHaraketleri yalnız StokTipi IN (1,2) (maden, nakit) için işlem türü/şube/kasa/stok/varyant bazında toplanır [SOURCE_CODE:Devir.vb:49-79].
  • Truncate edilen 5 tablo: Cari.Islemler, Cari.BakiyeIslem, Cari.History, Stok.StokHaraketleri, Cari.IslemDetaylari [SOURCE_CODE:Devir.vb:68-72].
  • Zaman aşımı remote query timeout 0 yapılarak kaldırılır [SOURCE_CODE:Devir.vb:84].

Riskler (kaynaklı):

  • Takoz ve diğer stok tipleri kaybolur: açılış stoğuna yalnız maden (1) ve nakit (2) taşınır; takoz (3) ve diğer tiplerin hareketleri truncate ile silinir, açılışa yazılmaz — bu yüzden devir öncesi takoz/çeşni stoğu sıfırlanmalıdır [SOURCE_CODE:Devir.vb:59-62] [DOCUMENT:06_Workflows/WF-YIL-SONU-DEVIR.md]. Uyulmazsa "Devir sonrası takoz stoğu −1" belirtisi görülür.
  • Kapsam dışı tablolar (GAP-DEVIR-SCOPE): IslemId tutan Sistem.SilAciklama, Stok.Mutabakat, Cari.AccountLog, MüşteriŞemasıA.IslemFiyatlar boşaltılmaz; kuyumcu DB'de bu satırların %55–66'sı öksüz kalmış — IslemId üzerinden JOIN yapan raporlar sessizce eksik döner, silme denetim izi kopar [DOCUMENT:00_Governance/KNOWN_GAPS.md#gap-devir-scope] [DOCUMENT:kitap#9.7]. Kasıtlı mı unutulmuş mu bilinmiyor.
  • Sabit mantıksal dosya adı: RESTORE komutu MOVE N'ERPGOLDV2' / N'ERPGOLDV2_log' mantıksal adlarını sabit yazar [SOURCE_CODE:Devir.vb:39]; mantıksal dosya adı farklı bir veritabanında (ör. ERPGOLDV2_KUYUMCU) geri yükleme başarısız olabilir — GAP-SCR-DEVIR-LOGICALNAME: canlıda test edilmedi.
  • Cari.Transferler kodda boşaltılmaz; süreç dokümanı ve WF adım 3 "Transferler temizlenir" der — bkz. CTR aşağıda.
  • Yedek dosyası uygulama klasörüne (DB_yyyyMMdd.Bak) yazılır; disk alanı yetersizse yedek başarısız olur [SOURCE_CODE:Devir.vb:17-20].
  • Açılış satırları IslemId=-1 olduğundan düzeltilemez; bakiye kartında işlem listesinde görünmez ama bakiyeye dahildir [DOCUMENT:06_Workflows/WF-YIL-SONU-DEVIR.md#sonuç].

CTR-SCR-DEVIR-01: WF-YIL-SONU-DEVIR adım 3 "Devir + ADMIN şifresi; Sistem.Devir(@Tarih) / sp_DevirIslemiYap çalışır; Transferler temizlenir" der. Kod: FrmDevir şifre sormaz (görünürlük Shift+D + User.Id=1), saklı yordam çağırmaz, Cari.Transferler'e dokunmaz; tarih parametresi almaz — daima bugüne kadar devreder [SOURCE_CODE:FrmDevir.vb:31-35] [SOURCE_CODE:Devir.vb:34-80]. CTR-034 (kodda tek sürüm, dokümanda üç) ile aynı kökten; PROC-180/190 tarih parametreli manuel SQL sürümleridir.

Stok / bakiye / rapor etkisi

İşlem ekranıdır ama tetikleyici üzerinden değil, doğrudan defterlere yazar: Cari.Islemler boşaltılır (tetikleyici AcceptTransaction çalışmaz — TRUNCATE), Cari.BakiyeIslem ve Stok.StokHaraketleri özet satırlarıyla yeniden kurulur. Devir sonrası her yeni işlem yine BR-DEFTER-URETIMI kuralıyla defter üretir. Rapor etkisi: geçmiş yıl raporları arşiv DB'den; canlı DB'de Tarih alanı NULL olan BakiyeIslem/StokHaraketleri satırları tutarsızlık işaretidir; fişte "eski bakiye" çıkmazsa Bakiye.GetBakiyeFisNo güncellenir [DOCUMENT:06_Workflows/WF-YIL-SONU-DEVIR.md]. Arşiv DB'ye bağlanıp işlem denenirse "BU VERI TABANI ISLEME KAPATILMISTIR." alınır [DOCUMENT:12_Support/KnownIssues/H-007.md].

Sık yapılan kullanıcı hataları

  • Devir sonrası "geçen yılın işlemleri kayboldu" — beklenen davranış; arşiv DB'den bakılır [DOCUMENT:12_Support/KnownIssues/H-008.md] [DOCUMENT:12_Support/Playbooks/PB-034.md].
  • Devir sonrası müşteri bakiyesi geçen yılın son bakiyesinden farklı — devir günü sonrası girilen işlemler / açılış satırı tarihi [DOCUMENT:12_Support/KnownIssues/H-108.md].
  • Fiş üzerinde "eski bakiye" yazmıyor [DOCUMENT:12_Support/KnownIssues/H-111.md].
  • Açılış (devir) stoğu girildi, DEVİR hesabı alacaklı kaldı — MAHSUP yerine NORMAL girilmiş [DOCUMENT:12_Support/KnownIssues/H-115.md] [DOCUMENT:12_Support/Playbooks/PB-035.md].
  • Yanlış veritabanına (arşiv) bağlı kalındı — "BU VERI TABANI ISLEME KAPATILMISTIR." [DOCUMENT:12_Support/KnownIssues/H-007.md] [DOCUMENT:12_Support/Playbooks/PB-006.md].
  • Yılbaşı fatura/e-belge numarası devam ediyor — devirle ilgisiz ayrı rutin [DOCUMENT:12_Support/KnownIssues/H-152.md].

İlgili ticket temaları

Müşteri varyasyonları

  • V2 (döviz) örnek DB'de dbo.DEVIRBAKIYE yok, KUYUMCU'da var (535 satır) — kuyumcu müşterisinde manuel SQL devri izi [DOCUMENT:00_Governance/CONTRADICTIONS.md#ctr-034].
  • Hangi müşteride ekran devri, hangisinde PROC-180/190 SQL devri uygulandığı kurulum profiline yazılmalı (CTR-034, CTR-SYM-DEVIR-01) — GAP.

Kim kullanır? Nereden açılır?

  • ANA MENÜ ▸ Tanımlamalar ▸ Sistem ▸ Devir

Yaşam döngüsü kanıtı

ACTIVE_CRITICAL — ANA MENÜ: Tanımlamalar ▸ Sistem ▸ Devir

Kullanıcı olayları

Olay Metot Dosya:satır
Me.Load FormLoad FrmDevir.vb:5
BackgroundWorker1.DoWork BackgroundWorker1_DoWork FrmDevir.vb:12
Devir.Finish Devir_Finish FrmDevir.vb:17
Devir.StepChanged Devir_StepChanged FrmDevir.vb:22
Devir.StepException Devir_Exception FrmDevir.vb:25
BtnStart.Click SimpleButton1_Click FrmDevir.vb:31

Bilinen kusurlar / dikkat

  • Kayıtlı kusur yok.

Kaynaklar

  • SOURCE_CODE:ERPPRO/Form/Genel/FrmDevir.Designer.vb
  • SOURCE_CODE:ERPPRO/Form/Genel/FrmDevir.vb
  • DERIVED:docs/knowledge-base/screens/FrmDevir.md (KB-docs statik analiz)
  • DERIVED:kb_src/erppro/scan.json (olay/SQL/çağrı)

Bilinmeyenler

  • Hangi sürümde eklendiği: VERSION_UNKNOWN (GAP-CODE-VERSION-DATE).