Erp Asistanı Erp Asistanı
Mikro SQL

Mikro Hazır SQL Sorguları: Kopyala-Çalıştır 10 Örnek (v16/v17 Uyumlu)

6 dk okuma Erp Asistanı
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_evraktip seç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.

Ücretsiz üye olun, istediğiniz sorguyu doğal dille 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.