Mikro Hazır SQL Sorguları: Kopyala-Çalıştır 10 Örnek (v16/v17 Uyumlu)
Mikro kullanıcılarının en sık aradığı şey hazır, çalışan SQL örnekleridir: eldeki stok, cari bakiye, aylık ciro, bekleyen siparişler... Bu yazıda en çok ihtiyaç duyulan 10 sorguyu kopyala-çalıştır hâlde veriyoruz. Hepsi hem v16 hem v17 veritabanında test edildi. Tablo ve kod mantığı için: Mikro tablo yapısı rehberi.
Genel kural: her sorguda *_iptal = 0 filtresi vardır; iptal evrakları rapora karıştırmayın.
1. Stok kartı listesi
SELECT sto_kod, sto_isim, sto_birim1_ad
FROM STOKLAR
ORDER BY sto_isim;
2. Eldeki stok miktarı (hareketten)
SELECT sh.sth_stok_kod, s.sto_isim,
SUM(CASE WHEN sh.sth_tip = 0 THEN sh.sth_miktar
WHEN sh.sth_tip = 1 THEN -sh.sth_miktar
ELSE 0 END) AS [Eldeki Miktar]
FROM STOK_HAREKETLERI sh
JOIN STOKLAR s ON s.sto_kod = sh.sth_stok_kod
WHERE sh.sth_iptal = 0
GROUP BY sh.sth_stok_kod, s.sto_isim
HAVING SUM(CASE WHEN sh.sth_tip = 0 THEN sh.sth_miktar
WHEN sh.sth_tip = 1 THEN -sh.sth_miktar
ELSE 0 END) <> 0
ORDER BY s.sto_isim;
3. Eldeki miktar, Mikro'nun kendi fonksiyonuyla
Mikro'nun hazır fonksiyonu fn_EldekiMiktar tek parametre alır:
SELECT sto_kod, sto_isim, dbo.fn_EldekiMiktar(sto_kod) AS [Eldeki Miktar]
FROM STOKLAR
ORDER BY sto_isim;
Ham toplam (2. sorgu) ile fonksiyon farklı sonuç verebilir: fonksiyon Mikro'nun resmi hesap kurallarını uygular. Fark görürseniz fonksiyonu esas alın. Ayrıntı: Mikro fonksiyonları ve şifreli kolonlar.
4. Depo bazında stok
Depo transferi (sth_tip = 2) iki bacaklıdır: giriş deposuna ekler, çıkış deposundan düşer. Bu sorgu her iki bacağı da doğru sayar:
SELECT t.depo_no, t.stok_kod, SUM(t.miktar) AS [Depodaki Miktar]
FROM (
SELECT sth_giris_depo_no AS depo_no, sth_stok_kod AS stok_kod, sth_miktar AS miktar
FROM STOK_HAREKETLERI WHERE sth_iptal = 0 AND sth_tip IN (0, 2)
UNION ALL
SELECT sth_cikis_depo_no, sth_stok_kod, -sth_miktar
FROM STOK_HAREKETLERI WHERE sth_iptal = 0 AND sth_tip IN (1, 2)
) t
GROUP BY t.depo_no, t.stok_kod
HAVING SUM(t.miktar) <> 0
ORDER BY t.depo_no, t.stok_kod;
5. Cari bakiye listesi
SELECT ch.cha_kod, c.cari_unvan1,
SUM(CASE WHEN ch.cha_tip = 0 THEN ch.cha_meblag ELSE 0 END) AS [Borç],
SUM(CASE WHEN ch.cha_tip = 1 THEN ch.cha_meblag ELSE 0 END) AS [Alacak],
SUM(CASE WHEN ch.cha_tip = 0 THEN ch.cha_meblag ELSE -ch.cha_meblag END) AS [Bakiye]
FROM CARI_HESAP_HAREKETLERI ch
JOIN CARI_HESAPLAR c ON c.cari_kod = ch.cha_kod
WHERE ch.cha_iptal = 0
GROUP BY ch.cha_kod, c.cari_unvan1
HAVING SUM(CASE WHEN ch.cha_tip = 0 THEN ch.cha_meblag ELSE -ch.cha_meblag END) <> 0
ORDER BY [Bakiye] DESC;
6. Cari ekstre (yürüyen bakiyeli)
SELECT ch.cha_tarihi, ch.cha_evrakno_seri, ch.cha_evrakno_sira, ch.cha_aciklama,
CASE WHEN ch.cha_tip = 0 THEN ch.cha_meblag ELSE 0 END AS [Borç],
CASE WHEN ch.cha_tip = 1 THEN ch.cha_meblag ELSE 0 END AS [Alacak],
SUM(CASE WHEN ch.cha_tip = 0 THEN ch.cha_meblag ELSE -ch.cha_meblag END)
OVER (ORDER BY ch.cha_tarihi, ch.cha_evrakno_sira, ch.cha_satir_no
ROWS UNBOUNDED PRECEDING) AS [Yürüyen Bakiye]
FROM CARI_HESAP_HAREKETLERI ch
WHERE ch.cha_iptal = 0 AND ch.cha_kod = 'CARI-001'
ORDER BY ch.cha_tarihi, ch.cha_evrakno_sira, ch.cha_satir_no;
CARI-001 yerine kendi cari kodunuzu yazın. Kesin ekstre için Mikro'nun fn_CariFoy fonksiyonu da kullanılabilir.
7. Aylık net ciro ve KDV
Satış faturası kalemleri sth_evraktip = 4; iade sth_normal_iade ile düşülür:
SELECT YEAR(sth_tarih) AS [Yıl], MONTH(sth_tarih) AS [Ay],
SUM(CASE WHEN sth_normal_iade = 0 THEN sth_tutar ELSE -sth_tutar END) AS [Net Ciro],
SUM(CASE WHEN sth_normal_iade = 0 THEN sth_vergi ELSE -sth_vergi END) AS [KDV]
FROM STOK_HAREKETLERI
WHERE sth_iptal = 0 AND sth_evraktip = 4
GROUP BY YEAR(sth_tarih), MONTH(sth_tarih)
ORDER BY [Yıl], [Ay];
8. En çok satan ürünler
SELECT TOP 20 sh.sth_stok_kod, s.sto_isim,
SUM(CASE WHEN sh.sth_normal_iade = 0 THEN sh.sth_miktar ELSE -sh.sth_miktar END) AS [Net Miktar],
SUM(CASE WHEN sh.sth_normal_iade = 0 THEN sh.sth_tutar ELSE -sh.sth_tutar END) AS [Net Ciro]
FROM STOK_HAREKETLERI sh
JOIN STOKLAR s ON s.sto_kod = sh.sth_stok_kod
WHERE sh.sth_iptal = 0 AND sh.sth_evraktip = 4
GROUP BY sh.sth_stok_kod, s.sto_isim
ORDER BY [Net Ciro] DESC;
9. En çok ciro yapan müşteriler
Cari taraftan, satış faturası evrakıyla (cha_evrak_tip = 63):
SELECT TOP 20 ch.cha_kod, c.cari_unvan1,
SUM(CASE WHEN ch.cha_normal_Iade = 0 THEN ch.cha_meblag ELSE -ch.cha_meblag END) AS [Ciro]
FROM CARI_HESAP_HAREKETLERI ch
JOIN CARI_HESAPLAR c ON c.cari_kod = ch.cha_kod
WHERE ch.cha_iptal = 0 AND ch.cha_evrak_tip = 63
GROUP BY ch.cha_kod, c.cari_unvan1
ORDER BY [Ciro] DESC;
10. Bekleyen (açık) siparişler
SELECT sip.sip_evrakno_seri, sip.sip_evrakno_sira, sip.sip_tarih,
sip.sip_musteri_kod, c.cari_unvan1,
sip.sip_stok_kod, s.sto_isim,
sip.sip_miktar, sip.sip_teslim_miktar,
sip.sip_miktar - sip.sip_teslim_miktar AS [Bekleyen]
FROM SIPARISLER sip
LEFT JOIN CARI_HESAPLAR c ON c.cari_kod = sip.sip_musteri_kod
LEFT JOIN STOKLAR s ON s.sto_kod = sip.sip_stok_kod
WHERE sip.sip_iptal = 0 AND sip.sip_tip = 0
AND sip.sip_miktar > sip.sip_teslim_miktar
ORDER BY sip.sip_tarih;
sip_tip = 0 alınan (müşteri) siparişleridir; verilen siparişler için 1 kullanın.
Bu sorguları uyarlarken dikkat
sth_evraktipseçimini bilinçli yapın: 4 satış faturası, 1 çıkış irsaliyesi, 3 alış faturasıdır. Fatura raporuna irsaliye karıştırmayın.- Tarih filtresi ekleyin:
sth_tarih >= '20260101' AND sth_tarih < '20270101'gibi; yoksa tüm yılların toplamı gelir. - Sürüm farkı: bu sorgular v16 ve v17'de test edildi; ama kurulumunuza özel alanlar farklı olabilir. Şüphede kalırsanız v16/v17 farkları yazısına bakın.
Sık sorulanlar
Sorgular şirketimin veritabanında birebir çalışır mı? Çekirdek tablolar standarttır, çalışır; ancak depo, şube, döviz gibi kırılımlar işletmeye göre değişir ve sorguya eklenmesi gerekir.
Excel'e nasıl aktarırım? SSMS sonuç ızgarasından kopyalayabilirsiniz; Erp Asistanı'nın canlı raporlama özelliği ise sonucu doğrudan tablo olarak gösterir ve tek tıkla Excel'e verir.
10 sorgu iyi bir başlangıç; ama asıl güç istediğiniz raporu anında üretebilmektir: "geçen ay plasiyer bazında satışlar", "6 aydır hareket görmeyen stoklar"... Erp Asistanı'na ücretsiz üye olun, sorunuzu Türkçe yazın; v16/v17 şemanıza uygun SQL'i saniyeler içinde alı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.