Mikro ERP Satış Raporu SQL Sorgusu: Ürün, Cari ve Dönem Bazlı Analiz

Mikro ERP'de satış raporu nasıl çıkarılır? STOK_HAREKETLERI tablosundan ürün bazlı, cari bazlı ve aylık dönemsel satış raporlarını çıkaran hazır SQL...

Sorun: “Bu Ay Ne Kadar Sattık?”

Yönetim her ay soruyor: “En çok ne sattık? Kim ne aldı? Geçen aya göre nasılız?” Mikro’nun standart raporları var ama özelleştirilmiş analiz istiyorsanız SQL şart.

Hangi Tablo, Hangi Alan?

Satış verileri STOK_HAREKETLERI tablosundadır. Filtre koşulları:

FiltreAlanDeğerAçıklama
Satış çıkışısth_tip1Çıkış hareketi
Faturasth_cins0Normal hareket
Normal (iade değil)sth_normal_iade0İade hariç
İptal değilsth_iptal0İptal hariç

Kaynak: STOK_HAREKETLERI · STOKLAR

Ürün Bazlı Satış Raporu

En çok satılan ürünler — miktar ve ciro olarak:

SELECT TOP 50
    STH.sth_stok_kod                              AS [Stok Kodu],
    S.sto_isim                                    AS [Ürün Adı],
    SUM(STH.sth_miktar)                           AS [Toplam Miktar],
    SUM(STH.sth_tutar)                            AS [Toplam Ciro],
    COUNT(DISTINCT STH.sth_evrakno_seri + 
        CAST(STH.sth_evrakno_sira AS VARCHAR))    AS [Fatura Sayısı],
    COUNT(DISTINCT STH.sth_cari_kodu)             AS [Müşteri Sayısı],
    ROUND(SUM(STH.sth_tutar) / 
        NULLIF(SUM(STH.sth_miktar), 0), 2)        AS [Ort. Birim Fiyat]
FROM STOK_HAREKETLERI STH WITH (NOLOCK)
INNER JOIN STOKLAR S WITH (NOLOCK) ON STH.sth_stok_kod = S.sto_kod
WHERE STH.sth_tip = 1                             -- Çıkış
  AND STH.sth_cins = 0                            -- Normal
  AND STH.sth_normal_iade = 0                     -- İade değil
  AND STH.sth_iptal = 0
  AND STH.sth_tarih >= '2026-01-01'
  AND STH.sth_tarih <= '2026-12-31'
GROUP BY STH.sth_stok_kod, S.sto_isim
ORDER BY [Toplam Ciro] DESC;

Müşteri Bazlı Satış Raporu

Hangi müşteri ne kadar alışveriş yaptı:

SELECT TOP 50
    STH.sth_cari_kodu                             AS [Cari Kodu],
    C.cari_unvan1                                 AS [Müşteri],
    SUM(STH.sth_tutar)                            AS [Toplam Ciro],
    COUNT(DISTINCT STH.sth_evrakno_seri + 
        CAST(STH.sth_evrakno_sira AS VARCHAR))    AS [Fatura Sayısı],
    COUNT(DISTINCT STH.sth_stok_kod)              AS [Ürün Çeşidi],
    MIN(STH.sth_tarih)                            AS [İlk Alım],
    MAX(STH.sth_tarih)                            AS [Son Alım]
FROM STOK_HAREKETLERI STH WITH (NOLOCK)
INNER JOIN CARI_HESAPLAR C WITH (NOLOCK) ON STH.sth_cari_kodu = C.cari_kod
WHERE STH.sth_tip = 1 AND STH.sth_cins = 0 
  AND STH.sth_normal_iade = 0 AND STH.sth_iptal = 0
  AND STH.sth_tarih >= '2026-01-01'
GROUP BY STH.sth_cari_kodu, C.cari_unvan1
ORDER BY [Toplam Ciro] DESC;

Aylık Satış Trendi (Pivot)

Aylara göre satış cirosu:

SELECT 
    YEAR(sth_tarih)                               AS [Yıl],
    SUM(CASE WHEN MONTH(sth_tarih) =  1 THEN sth_tutar ELSE 0 END) AS [Oca],
    SUM(CASE WHEN MONTH(sth_tarih) =  2 THEN sth_tutar ELSE 0 END) AS [Şub],
    SUM(CASE WHEN MONTH(sth_tarih) =  3 THEN sth_tutar ELSE 0 END) AS [Mar],
    SUM(CASE WHEN MONTH(sth_tarih) =  4 THEN sth_tutar ELSE 0 END) AS [Nis],
    SUM(CASE WHEN MONTH(sth_tarih) =  5 THEN sth_tutar ELSE 0 END) AS [May],
    SUM(CASE WHEN MONTH(sth_tarih) =  6 THEN sth_tutar ELSE 0 END) AS [Haz],
    SUM(CASE WHEN MONTH(sth_tarih) =  7 THEN sth_tutar ELSE 0 END) AS [Tem],
    SUM(CASE WHEN MONTH(sth_tarih) =  8 THEN sth_tutar ELSE 0 END) AS [Ağu],
    SUM(CASE WHEN MONTH(sth_tarih) =  9 THEN sth_tutar ELSE 0 END) AS [Eyl],
    SUM(CASE WHEN MONTH(sth_tarih) = 10 THEN sth_tutar ELSE 0 END) AS [Eki],
    SUM(CASE WHEN MONTH(sth_tarih) = 11 THEN sth_tutar ELSE 0 END) AS [Kas],
    SUM(CASE WHEN MONTH(sth_tarih) = 12 THEN sth_tutar ELSE 0 END) AS [Ara],
    SUM(sth_tutar) AS [Yıl Toplamı]
FROM STOK_HAREKETLERI WITH (NOLOCK)
WHERE sth_tip = 1 AND sth_cins = 0 
  AND sth_normal_iade = 0 AND sth_iptal = 0
GROUP BY YEAR(sth_tarih)
ORDER BY [Yıl];

Satıcı Performans Raporu

Hangi satıcı ne kadar ciro yaptı:

SELECT 
    CH.cha_satici_kodu                             AS [Satıcı Kodu],
    C.cari_unvan1                                  AS [Satıcı Adı],
    COUNT(DISTINCT CH.cha_kod)                     AS [Müşteri Sayısı],
    SUM(CH.cha_meblag)                             AS [Toplam Ciro],
    COUNT(DISTINCT CH.cha_evrakno_seri + 
        CAST(CH.cha_evrakno_sira AS VARCHAR))      AS [Fatura Sayısı]
FROM CARI_HESAP_HAREKETLERI CH WITH (NOLOCK)
LEFT JOIN CARI_HESAPLAR C WITH (NOLOCK) ON CH.cha_satici_kodu = C.cari_kod
WHERE CH.cha_evrak_tip = 63                        -- Satış faturası
  AND CH.cha_iptal = 0
  AND CH.cha_tarihi >= '2026-01-01'
  AND CH.cha_satici_kodu <> ''
GROUP BY CH.cha_satici_kodu, C.cari_unvan1
ORDER BY [Toplam Ciro] DESC;

Dikkat Edilecekler

  1. İade dahil etmeyin: sth_normal_iade = 0 filtresi iade faturalarını hariç tutar. İadeli rapor istiyorsanız ayrı satırda gösterin.
  2. Stok çıkış tipleri: sth_cins = 0 sadece fatura çıkışlarını alır. Fire, sarf, transfer çıkışları dahil değildir.
  3. KDV: sth_tutar KDV hariç tutardır. KDV dahil ciro için vergi alanlarını ekleyin.

İlgili Yazılar


Bu rehber Mikro ERP API Docs tablo yapısına dayanarak hazırlanmıştır.

📚 İlgili Yazılar