Mikro ERP Menü Sorgu Yönetimi Rehberi: Özel SQL Rapor Oluşturma
Mikro ERP'de Menü Sorgu Yönetimi ile özel SQL raporu nasıl eklenir? @P1/@P2 parametreleri, adım adım kurulum, SSMS'den Mikro'ya taşıma ve hazır sorgu örnekleri.
Menü Sorgu Yönetimi Nedir?
Mikro ERP’nin Menü Sorgu Yönetimi, kendi yazdığınız SQL sorgularını Mikro’nun menü yapısına ekleyip doğrudan program içinden çalıştırmanızı sağlayan dahili bir rapor motorudur.
SSMS’i (SQL Server Management Studio) her rapor ihtiyacında açmak yerine, sorguyu bir kez Mikro’ya tanımlayıp tüm kullanıcıların erişimine sunabilirsiniz. Kullanıcı sorguyu seçer, tarih aralığı girer ve sonuçları ekranda görür veya Excel’e aktarır.
Neden Kullanmalısınız?
| SSMS ile Rapor | Menü Sorgu Yönetimi ile |
|---|---|
| Her seferinde SSMS açılmalı | Mikro menüsünden tek tıkla erişim |
| Tarihleri elle yazmalısınız | Mikro’nun tarih seçicisinden otomatik |
| SQL bilgisi gerekli | Son kullanıcı SQL bilmeden çalıştırabilir |
| Sonuçlar grid’de kalır | Excel’e doğrudan aktarılabilir |
| Sadece siz erişirsiniz | Tüm yetkili kullanıcılar erişir |
Adım Adım: Sorgu Ekleme
1. Menü Sorgu Yönetimi’ne Erişim
Mikro ERP’de Raporlar → Genel Raporlar → Menü Sorgu Yönetimi yolunu takip edin. Bazı versiyonlarda bu ekrana şu şekilde de ulaşılır:
- Araçlar → Menü Sorgu Yönetimi
- Menü numarası: 930 (sürüme göre değişebilir)
2. Yeni Sorgu Tanımlama
Menü Sorgu Yönetimi ekranında:
- Yeni butonuna tıklayın
- Sorgu Adı alanına açıklayıcı bir isim verin (ör: “Cari Tahsilat Detay Raporu”)
- SQL Sorgusu alanına sorgunuzu yapıştırın
- Tarih parametresi kullanacaksanız
@P1ve@P2parametrelerini kullanın - Kaydet ile sorguyu tanımlayın
3. Sorguyu Çalıştırma
Tanımlanan sorgu menüde görünür. Çalıştırdığınızda:
- Tarih aralığı seçme ekranı çıkar (eğer @P1/@P2 kullanıyorsanız)
- Sorgu çalışır ve sonuçlar grid’de listelenir
- Excel’e aktarma seçeneği mevcuttur
@P1 ve @P2 Parametreleri — En Kritik Kural
Bu blog’daki her SQL yazısında bahsettiğimiz en önemli konu: SSMS’deki DECLARE satırları Mikro’ya taşınırken kaldırılmalıdır.
SSMS’de Test (DECLARE ile)
-- =============================================
-- ⚙️ SSMS Test: Tarihleri değiştirin
-- =============================================
DECLARE @P1 DATE = '2026-04-01';
DECLARE @P2 DATE = '2026-04-30';
SELECT
CHA.cha_tarihi AS [Tarih],
CHA.cha_kod AS [Cari Kodu],
LTRIM(RTRIM(
ISNULL(CH.cari_unvan1, '') + ' ' + ISNULL(CH.cari_unvan2, '')
)) AS [Cari Ünvan],
CHA.cha_meblag AS [Tutar]
FROM dbo.CARI_HESAP_HAREKETLERI CHA WITH (NOLOCK)
LEFT JOIN dbo.CARI_HESAPLAR CH WITH (NOLOCK)
ON CH.cari_kod = CHA.cha_kod
WHERE CHA.cha_tarihi >= @P1
AND CHA.cha_tarihi <= @P2
AND CHA.cha_tip = 1 -- Alacak (tahsilat)
AND CHA.cha_evrak_tip = 1 -- Tahsilat makbuzu
ORDER BY CHA.cha_tarihi, CHA.cha_kod;
Mikro Menü Sorgu Yönetimi’ne Taşırken
-- =============================================
-- ✅ Mikro versiyonu: DECLARE satırları YOK
-- @P1 ve @P2 Mikro tarafından otomatik gönderilir
-- =============================================
SELECT
CHA.cha_tarihi AS [Tarih],
CHA.cha_kod AS [Cari Kodu],
LTRIM(RTRIM(
ISNULL(CH.cari_unvan1, '') + ' ' + ISNULL(CH.cari_unvan2, '')
)) AS [Cari Ünvan],
CHA.cha_meblag AS [Tutar]
FROM dbo.CARI_HESAP_HAREKETLERI CHA WITH (NOLOCK)
LEFT JOIN dbo.CARI_HESAPLAR CH WITH (NOLOCK)
ON CH.cari_kod = CHA.cha_kod
WHERE CHA.cha_tarihi >= @P1
AND CHA.cha_tarihi <= @P2
AND CHA.cha_tip = 1
AND CHA.cha_evrak_tip = 1
ORDER BY CHA.cha_tarihi, CHA.cha_kod;
Kural: SSMS’de
DECLARE @P1 DATE = '...'; DECLARE @P2 DATE = '...';satırları sizin test için yazdığınız satırlardır. Mikro, sorguyu çalıştırırken ekrandaki tarih seçiciden bu değerleri otomatik olarak@P1ve@P2’ye atar. Bu yüzden Mikro’ya taşırken DECLARE satırlarını mutlaka kaldırın, aksi halde hata alırsınız.
Parametresiz Sorgu Örneği
Her sorgunun tarih parametresine ihtiyacı yoktur. Örneğin müşteri cari listesi:
-- =============================================
-- Müşteri Cari Listesi (parametresiz)
-- Mikro Menü Sorgu Yönetimi'ne doğrudan eklenebilir
-- =============================================
SELECT
cari_kod AS [Cari Kodu],
LTRIM(RTRIM(
ISNULL(cari_unvan1, '') + ' ' + ISNULL(cari_unvan2, '')
)) AS [Cari Ünvan],
cari_temsilci_kodu AS [Temsilci],
cari_sektor_kodu AS [Sektör],
cari_il AS [İl],
CASE cari_baession_tipi
WHEN 0 THEN 'Müşteri'
WHEN 1 THEN 'Satıcı'
WHEN 2 THEN 'Diğer'
ELSE ''
END AS [Cari Türü]
FROM dbo.CARI_HESAPLAR WITH (NOLOCK)
WHERE cari_kod LIKE 'M.%' -- ⚙️ Kendi cari kod şemanıza göre düzenleyin
ORDER BY cari_kod;
Sütun İsimlendirme: [Türkçe Alias] Kuralı
Sorgu sonuçları Mikro ekranında ve Excel’de sütun başlığı olarak görünür. Okunabilirlik için:
-- ❌ Böyle yapma:
SELECT cha_kod, cha_meblag, cha_tarihi
-- ✅ Böyle yap:
SELECT
cha_kod AS [Cari Kodu],
cha_meblag AS [Tutar],
cha_tarihi AS [Tarih]
Türkçe karakter kullanmak için sütun adını [köşeli parantez] içine alın. Boşluk, Ç, Ş, İ, Ö, Ü gibi karakterler sorunsuz çalışır.
Sık Yapılan Hatalar
1. DECLARE Satırlarını Kaldırmayı Unutmak
-- ❌ Bu Mikro'da hata verir:
DECLARE @P1 DATE = '2026-01-01';
DECLARE @P2 DATE = '2026-12-31';
SELECT ... WHERE cha_tarihi >= @P1
-- ✅ Doğrusu:
SELECT ... WHERE cha_tarihi >= @P1
2. Geçici Tablo (#temp) Kullanmak
Mikro Menü Sorgu Yönetimi’nde CREATE TABLE #temp veya SELECT INTO #temp gibi geçici tablo komutları desteklenmeyebilir. Bunun yerine CTE (Common Table Expression) veya subquery kullanın:
-- ❌ Geçici tablo (sorunlu olabilir):
SELECT * INTO #Temp FROM CARI_HESAPLAR WHERE ...
SELECT * FROM #Temp
-- ✅ CTE ile (sorunsuz):
;WITH CariListe AS (
SELECT * FROM CARI_HESAPLAR WHERE ...
)
SELECT * FROM CariListe
3. NOLOCK Kullanmamak
Rapor sorguları çalışırken diğer kullanıcıların işlemlerini kilitleyebilir. Tüm rapor sorgularında WITH (NOLOCK) kullanın:
-- ❌ Kilitleme riski:
FROM dbo.CARI_HESAP_HAREKETLERI
-- ✅ Güvenli okuma:
FROM dbo.CARI_HESAP_HAREKETLERI WITH (NOLOCK)
4. ORDER BY Eksikliği
ORDER BY olmadan sonuçların sırası garanti değildir. Kullanıcı tarih veya cari kodu bazında sıralı sonuç bekler:
ORDER BY CHA.cha_tarihi DESC, CHA.cha_kod
İleri Düzey: Birden Fazla Parametre Kullanımı
Mikro’nun standart parametre yapısında @P1 ve @P2 tarih parametreleridir. Ancak bazı sürümlerde ek parametreler de kullanılabilir. Temel kural:
| Parametre | Tip | Kullanım |
|---|---|---|
@P1 | DATE | Başlangıç tarihi |
@P2 | DATE | Bitiş tarihi |
Tarih dışında filtreleme yapmanız gerekiyorsa, bunu WHERE koşuluna sabit olarak yazın veya sorguyu birden fazla versiyon olarak kaydedin.
Performans İpuçları
-
İndeksli alanlarda filtrele:
cha_tarihi,cha_kod,sth_stok_kodgibi alanlar genellikle indekslidir. Bu alanlarda filtreleme hızlı çalışır. -
Gereksiz alan çekme:
SELECT *yerine sadece ihtiyacınız olan alanları çekin. -
Büyük tarih aralıklarında dikkatli olun: 1 yıllık veri çekmek yerine aylık veya çeyreklik aralıklar kullanın.
-
JOIN sayısını minimumda tutun: Her JOIN sorgu süresini artırır. Sadece gerçekten ihtiyaç duyulan tabloları birleştirin.
Hazır Sorgularımız — Menü Sorgu Yönetimi’ne Eklenebilir
Bu blogda yayınladığımız tüm SQL sorguları Menü Sorgu Yönetimi uyumludur. SSMS versiyonundaki DECLARE satırlarını kaldırarak doğrudan kullanabilirsiniz:
Cari Hesap Raporları
- Cari Ekstre Raporu — Borç, alacak ve bakiye takibi
- Cari Yaşlandırma Raporu — Bakiye dağıtımlı yaşlandırma
- Cari Risk Raporu — Bakiye, açık sipariş ve teminat
- Cari Risk Analizi: fn_CariRiskFoyu — 046355 raporunun SQL alternatifi
- Tahsilat Detay Raporu — 046110 raporunun SQL alternatifi
- Kapanmamış Cari Hareketler — Açık kalan tahsilatların takibi
- Belge No ile Hareket Bulma — Doğru alan hangisi?
- cha_vade Hesaplama — Gerçek vade tarihi
Stok ve Satış Raporları
- Satış Raporu — Ürün, cari ve dönem bazlı analiz
- Depo Bazlı Stok Bakiye — Hareket mi özet mi?
- Alış-Satış Kâr Analizi — Ürün bazlı brüt kâr/zarar
- Son Alış Fiyatı — Son giriş tarihi ve fiyatı
- Stok Maliyet Katman Hesabı — FIFO benzeri hesaplama
- Fiyat Listesi Kontrolü — Fiyat neden yanlış geliyor?
- Açık Sipariş Raporu — Teslimat durumu
- Fatura-Sipariş Eşleştirme — İz sürme
Finans Raporları
- Çek/Senet Vade Takip — Portföy durumu
- Banka Bakiye Raporu — Hesap hareketleri ve bakiye
- Kasa ve Nakit Akış — Anlık bakiye
- Kur Farkı Kontrolü — Dövizli hareket analizi
Bu Bilgiyi Nereden Biliyoruz? (Kaynaklar)
- AstaFlow Case Study: Finans ve Tahsilat Modülleri — Mikro ERP entegrasyonu
- Mikro ERP DB API: CARI_HESAP_HAREKETLERI | CARI_HESAPLAR
- İlgili Araç: SQL Sorgu Playground — Hazır şablonlarla SQL yazma
- İlgili Araç: Evrak Tipi Decoder — cha_evrak_tip değerlerini çevirin
- İlgili Araç: SQL JOIN Jeneratörü — Tablo birleştirme kodunu otomatik oluşturun