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
- Tüm kullanıcılar programdan çıkar; yedek alınır (Backup, PB-013).
- 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].
Id = 1kullanı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].- 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]. - 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.Islemlersayı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. - 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.Islemlersatı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.BakiyeIslemhesap/kasa/birim bazında toplanır (toplamı 0 olanlar atlanır) veIslemId=-1, bugünün tarihiyle geri yazılır; açılış stoğu:Stok.StokHaraketleriyalnızStokTipi 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 timeout0 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):
IslemIdtutanSistem.SilAciklama,Stok.Mutabakat,Cari.AccountLog,MüşteriŞemasıA.IslemFiyatlarboş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=-1olduğ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ı
- PRB-DEVIR-000; zincir SYM-DEVIR.
- Playbook'lar: PB-034, PB-035, PB-006.
- Süreçler: PROC-180 (v2, SQL), PROC-190 (v3), PROC-110 (kurulum).
Müşteri varyasyonları
- V2 (döviz) örnek DB'de
dbo.DEVIRBAKIYEyok, 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.vbSOURCE_CODE:ERPPRO/Form/Genel/FrmDevir.vbDERIVED: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).
