---
title: "Mikro ERP Menü Sorgu Yönetimi Rehberi: Özel SQL Rapor Oluşturma"
description: "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."
date: 2026-05-25
category: mikro-erp
tags: ["mikro-erp", "sql-server", "sorgu-yonetimi", "rapor", "astaflow"]
url: https://mikroerp.dev/blog/mikro-erp-menu-sorgu-yonetimi-rehberi/
---

## 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:

1. **Yeni** butonuna tıklayın
2. **Sorgu Adı** alanına açıklayıcı bir isim verin (ör: "Cari Tahsilat Detay Raporu")
3. **SQL Sorgusu** alanına sorgunuzu yapıştırın
4. Tarih parametresi kullanacaksanız `@P1` ve `@P2` parametrelerini kullanın
5. **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)

```sql
-- =============================================
-- ⚙️ 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

```sql
-- =============================================
-- ✅ 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 `@P1` ve `@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:

```sql
-- =============================================
-- 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:

```sql
-- ❌ 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

```sql
-- ❌ 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:

```sql
-- ❌ 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:

```sql
-- ❌ 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:

```sql
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ı

1. **İndeksli alanlarda filtrele:** `cha_tarihi`, `cha_kod`, `sth_stok_kod` gibi alanlar genellikle indekslidir. Bu alanlarda filtreleme hızlı çalışır.

2. **Gereksiz alan çekme:** `SELECT *` yerine sadece ihtiyacınız olan alanları çekin.

3. **Büyük tarih aralıklarında dikkatli olun:** 1 yıllık veri çekmek yerine aylık veya çeyreklik aralıklar kullanın.

4. **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](/blog/mikro-erp-cari-ekstre-raporu-sql/) — Borç, alacak ve bakiye takibi
- [Cari Yaşlandırma Raporu](/blog/mikro-erp-cari-yaslandirma-sql-sorgusu/) — Bakiye dağıtımlı yaşlandırma
- [Cari Risk Raporu](/blog/mikro-erp-cari-risk-raporu-sql/) — Bakiye, açık sipariş ve teminat
- [Cari Risk Analizi: fn_CariRiskFoyu](/blog/mikro-erp-cari-risk-raporu-fn-caririsklfoyu-analizi/) — 046355 raporunun SQL alternatifi
- [Tahsilat Detay Raporu](/blog/mikro-erp-cari-tahsilat-detay-raporu-sql/) — 046110 raporunun SQL alternatifi
- [Kapanmamış Cari Hareketler](/blog/mikro-erp-kapanmamis-cari-hareket-sql/) — Açık kalan tahsilatların takibi
- [Belge No ile Hareket Bulma](/blog/mikro-erp-belge-no-cari-hareket-bulma-sql/) — Doğru alan hangisi?
- [cha_vade Hesaplama](/blog/mikro-erp-vade-hesaplama-cha-vade-sql/) — Gerçek vade tarihi

### Stok ve Satış Raporları
- [Satış Raporu](/blog/mikro-erp-satis-raporu-sql/) — Ürün, cari ve dönem bazlı analiz
- [Depo Bazlı Stok Bakiye](/blog/mikro-erp-depo-bazli-stok-bakiye-sql/) — Hareket mi özet mi?
- [Alış-Satış Kâr Analizi](/blog/mikro-erp-alis-satis-kar-analizi-sql/) — Ürün bazlı brüt kâr/zarar
- [Son Alış Fiyatı](/blog/mikro-erp-son-alis-fiyati-sql/) — Son giriş tarihi ve fiyatı
- [Stok Maliyet Katman Hesabı](/blog/mikro-erp-stok-maliyet-katman-hesabi-sql/) — FIFO benzeri hesaplama
- [Fiyat Listesi Kontrolü](/blog/mikro-erp-fiyat-listesi-kontrol-sql/) — Fiyat neden yanlış geliyor?
- [Açık Sipariş Raporu](/blog/mikro-erp-acik-siparis-teslimat-raporu-sql/) — Teslimat durumu
- [Fatura-Sipariş Eşleştirme](/blog/mikro-erp-fatura-siparis-eslestirme-sql/) — İz sürme

### Finans Raporları
- [Çek/Senet Vade Takip](/blog/mikro-erp-cek-senet-vade-takip-sql/) — Portföy durumu
- [Banka Bakiye Raporu](/blog/mikro-erp-banka-hesap-bakiye-sql/) — Hesap hareketleri ve bakiye
- [Kasa ve Nakit Akış](/blog/mikro-erp-kasa-nakit-akis-raporu-sql/) — Anlık bakiye
- [Kur Farkı Kontrolü](/blog/mikro-erp-kur-farki-kontrol-sql/) — Dövizli hareket analizi

## Bu Bilgiyi Nereden Biliyoruz? (Kaynaklar)

*   **AstaFlow Case Study:** [Finans ve Tahsilat Modülleri](/case-study/) — Mikro ERP entegrasyonu
*   **Mikro ERP DB API:** [CARI_HESAP_HAREKETLERI](https://apidocs.mikro.com.tr/tablo-alan-adlari/cari_hesap_hareketleri) | [CARI_HESAPLAR](https://apidocs.mikro.com.tr/tablo-alan-adlari/cari_hesaplar)
*   **İlgili Araç:** [SQL Sorgu Playground](/araclar/sql-playground/) — Hazır şablonlarla SQL yazma
*   **İlgili Araç:** [Evrak Tipi Decoder](/araclar/evrak-tip-decoder/) — cha_evrak_tip değerlerini çevirin
*   **İlgili Araç:** [SQL JOIN Jeneratörü](/araclar/sql-join-generator/) — Tablo birleştirme kodunu otomatik oluşturun