Mikro Fonksiyonları (fn_) ve Şifreli Kolonlar: SQL Raporlamada Bilmeniz Gerekenler
Mikro veritabanına ilk kez SQL ile bağlanan herkesin takıldığı iki konu vardır: fn_ ile başlayan tablo fonksiyonları ve doğrudan okunamayan şifreli/kodlanmış kolonlar. Bu iki başlığı anlamadan yazılan sorgular ya hata verir ya da yanlış sonuç üretir. Bu yazıda ikisinin de ne olduğunu, neden tuzak olduklarını ve doğru kullanımı anlatıyoruz.
Mikro tablo fonksiyonları (fn_) nedir?
Mikro, sık ihtiyaç duyulan karmaşık hesaplamaları (cari foy/ekstre, bakiye, stok maliyeti gibi) hazır tablo değerli fonksiyonlar (table-valued functions) olarak sunar. Bunlar fn_ önekiyle başlar ve normal bir tablo gibi FROM ya da JOIN içinde kullanılır:
SELECT *
FROM dbo.fn_CariFoy('120.01.001', '20260101', '20261231', 0, 0, 0);
Bu fonksiyonlar size hazır bir hesaplama döndürür; aynı mantığı sıfırdan JOIN'lerle kurmaya çalışmak hem zor hem hataya açıktır. Avantajı: Mikro'nun kendi iş kuralları (iptal, iade, evrak yönü) fonksiyonun içinde zaten işlenmiştir.
Dikkat edilmesi gerekenler
- İmza (parametre sırası) önemlidir. Fonksiyonlar tarih, kod, şube/depo gibi parametreleri belirli bir sırayla bekler. Yanlış sıra ya da eksik parametre, sorguyu çalışmaz hâle getirir.
- Performans. Tablo fonksiyonları, çok sayıda cari/stok için satır satır (RBAR) çağrıldığında yavaşlayabilir. Toplu raporlarda küme bazlı (set-based) alternatif tercih edilmelidir.
- Sürüm farkı. Fonksiyon imzaları sürümler arasında değişebilir; v16'da çalışan bir çağrı v17'de farklı parametre isteyebilir.
Şifreli ve kodlanmış kolonlar (msg_S_ ...)
Mikro'da bazı kolonların adı msg_S_ gibi öneklerle gelir ya da değer olarak doğrudan anlamlı olmayan kodlar tutar. Örneğin bir hareketin "tipi" sayısal bir kodla saklanır; "satış mı, iade mi, iptal mi" sorusunun cevabı bu kodun doğru yorumlanmasına bağlıdır.
Bu kolonları ham hâliyle rapora koyarsanız:
- Kullanıcı anlamsız sayılar görür (
0,1,2... yerine "Satış", "İade", "İptal" beklenirken). - Filtreleme yanlış yapılır; örneğin iptal kayıtları toplamdan düşülmez.
- İki sürüm arasında aynı kodun anlamı farklılaşabilir.
Doğru yaklaşım, bu kodları anlamlarına çevirmek (CASE/lookup ile) ve şifreli alanları Mikro'nun beklediği biçimde ele almaktır:
SELECT
h.cha_evrakno_seri AS [Seri],
h.cha_evrakno_sira AS [Sıra],
CASE h.cha_tip
WHEN 0 THEN N'Borç'
WHEN 1 THEN N'Alacak'
ELSE N'Diğer'
END AS [Hareket Yönü]
FROM CARI_HESAP_HAREKETLERI h;
Neden elle yazmak risklidir?
Bir raporun "çalışması" ile "doğru olması" farklı şeylerdir. fn_ fonksiyonlarını ve kodlanmış kolonları bilmeden yazılan bir sorgu hatasız çalışabilir ama:
- İptal/iade kayıtlarını sayabilir,
- Borç/alacak yönünü ters çevirebilir,
- Şifreli kolonu yanlış yorumlayıp yanlış gruplayabilir.
Bu hatalar genellikle sessizdir — rapor çıkar, sayı görünür, ama yanlıştır. En tehlikeli hata türü budur.
Erp Asistanı bunu nasıl çözer?
Erp Asistanı'nın bilgi tabanında her fonksiyonun imzası, her kodlanmış kolonun anlamı ve binlerce doğrulanmış örnek tutulur. Siz "cari ekstresini getir" dediğinizde:
- Doğru fonksiyon (örn.
fn_CariFoy) doğru parametre sırasıyla çağrılır, - Kodlanmış kolonlar otomatik olarak anlamlarına çevrilir,
- İptal/iade/yön gibi tuzaklar baştan ele alınır,
- Sorgu, sürümünüzün gerçek şemasına karşı doğrulanır.
Yani fonksiyon imzalarını ezberlemek ya da msg_S_ kolonlarının ne anlama geldiğini araştırmak zorunda kalmazsınız.
Sık sorulanlar
fn_ fonksiyonlarını her zaman kullanmalı mıyım? Tekil bir cari/stok için idealdir. Çok satırlı toplu raporlarda performans için küme bazlı alternatif daha iyi olabilir; Erp Asistanı duruma göre doğru olanı üretir.
Şifreli kolonları çözebilir miyim? Anlamlı kodlamaların karşılığı bilinir ve CASE/lookup ile çevrilebilir. Gerçekten şifreli (geri döndürülemez) alanlar rapora konmaz.
Bu bilgiler sürümle değişir mi? Evet. Hem fonksiyon imzaları hem kolon anlamları v16/v17 arasında farklılaşabilir; doğru sürümü seçmek kritiktir.
Mikro'nun fonksiyonları ve kodlanmış kolonları, doğru kullanıldığında en büyük gücünüz; yanlış kullanıldığında sessiz hata kaynağınızdır. Doğru sorguyu üretmeyi bize bırakın.
Mikro'da SQL ve raporu konuşarak alın
Türkçe sorunuzu yazın, şemanıza uygun çalışan SQL'i ya da hazır uygulamanızı saniyeler içinde alın. Kredi kartı gerekmez.