Mikro KDV Raporu SQL: Oran Bazında Satış ve Alış KDV Dökümü
Mikro'da satış ve alış faturalarından KDV oranı bazında döküm almak için SQL sorguları. Aylık rapor, iade düzeltmesi, yuvarlama uyarıları.
Erp Asistanı
Editör ekibi
5 dk okuma
İçindekiler
Mikro kullanıcıları için KDV raporu, özellikle oran bazında satış ve alış dökümü almak sık karşılaşılan bir ihtiyaçtır. Bu yazıda, STOK_HAREKETLERI tablosundan doğrudan çalışan SQL sorguları ile hem satış hem alış tarafını aylık dönemlerde KDV oranı kırılımında nasıl raporlayacağınızı adım adım anlatıyoruz. Temel tablo bilgisi için Mikro tablo yapısı rehberi'ne, fatura-rapor ilişkisi için fatura hangi tabloda yazısına göz atabilirsiniz.
Mikro'da KDV Bilgisi Nerede?
KDV oranı ve tutarı STOK_HAREKETLERI satırlarında saklanır. Her fatura kalemi için:
sth_vergi: KDV oranı (yüzde, float)sth_tutar: KDV hariç net satır tutarı (matrah)
KDV tutarı veritabanında doğrudan bir alanda tutulmaz; ihtiyaç duyulduğunda sth_tutar * sth_vergi / 100.0 formülüyle hesaplanır. Bu hesaplama, kayan nokta yuvarlama farklarına yol açabilir; resmî beyannameler için Mali Mühür onaylı çıktıları esas almalısınız.
Aşağıdaki tablo kullanacağımız kritik alanları özetler:
| Alan | Açıklama | Not |
|---|---|---|
sth_tarih |
Hareket tarihi | Ay/yıl kırılımı için |
sth_evraktip |
Evrak türü | 4 = Satış, 3 = Alış |
sth_vergi |
KDV oranı (%) | Gruplama anahtarı |
sth_tutar |
Net satır tutarı | Matrah |
sth_normal_iade |
Normal/İade bayrağı | 0:Normal, 1:İade (düşülmeli) |
sth_iptal |
İptal bayrağı | ZORUNLU = 0 |
Oran Bazında Aylık Satış KDV Dökümü
Aşağıdaki sorgu, belirtilen yıl için her ay ve her KDV oranı için toplam matrah ve KDV tutarını döndürür. İade faturaları (sth_normal_iade = 1) ters işaretle düşülmüştür.
SELECT
YEAR(sth_tarih) AS Yil,
MONTH(sth_tarih) AS Ay,
sth_vergi AS KDV_Orani,
SUM(CASE WHEN sth_normal_iade = 0 THEN sth_tutar ELSE -sth_tutar END) AS Matrah,
SUM(CASE WHEN sth_normal_iade = 0 THEN sth_tutar * sth_vergi / 100.0
ELSE -sth_tutar * sth_vergi / 100.0 END) AS KDV_Tutari
FROM STOK_HAREKETLERI
WHERE sth_iptal = 0
AND sth_evraktip = 4
AND sth_tarih >= '20260101' AND sth_tarih < '20270101'
GROUP BY YEAR(sth_tarih), MONTH(sth_tarih), sth_vergi
ORDER BY Yil, Ay, KDV_Orani;
Tarih aralığını kendi döneminize göre ayarlayın. sth_evraktip = 4 yalnızca çıkış faturalarını seçer; irsaliye vb. karışmaz.
Oran Bazında Aylık Alış KDV Dökümü
Satışın simetriği olan alış tarafı için sth_evraktip = 3 filtresi kullanılır. Mantık aynıdır.
SELECT
YEAR(sth_tarih) AS Yil,
MONTH(sth_tarih) AS Ay,
sth_vergi AS KDV_Orani,
SUM(CASE WHEN sth_normal_iade = 0 THEN sth_tutar ELSE -sth_tutar END) AS Matrah,
SUM(CASE WHEN sth_normal_iade = 0 THEN sth_tutar * sth_vergi / 100.0
ELSE -sth_tutar * sth_vergi / 100.0 END) AS KDV_Tutari
FROM STOK_HAREKETLERI
WHERE sth_iptal = 0
AND sth_evraktip = 3
AND sth_tarih >= '20260101' AND sth_tarih < '20270101'
GROUP BY YEAR(sth_tarih), MONTH(sth_tarih), sth_vergi
ORDER BY Yil, Ay, KDV_Orani;
İade faturaları alış tarafında da benzer düzeltme gerektirir; sth_normal_iade kontrolü burada da yapılmıştır.
Satış ve Alışı Birleştirip Ödenecek KDV'yi Hesaplama
Bir sonraki adım, satış KDV'sinden alış KDV'sini düşerek dönem net KDV yükünü hesaplamaktır. Aşağıdaki sorgu her iki tarafı birleştirir ve oran bazında ödenmesi gereken KDV'yi çıkarır.
SELECT
s.Yil, s.Ay, s.KDV_Orani,
s.Matrah AS Satis_Matrah,
s.KDV_Tutari AS Satis_KDV,
ISNULL(a.Matrah,0) AS Alis_Matrah,
ISNULL(a.KDV_Tutari,0) AS Alis_KDV,
s.KDV_Tutari - ISNULL(a.KDV_Tutari,0) AS Odenmesi_Gereken_KDV
FROM
(SELECT YEAR(sth_tarih) Yil, MONTH(sth_tarih) Ay, sth_vergi KDV_Orani,
SUM(CASE WHEN sth_normal_iade=0 THEN sth_tutar ELSE -sth_tutar END) Matrah,
SUM(CASE WHEN sth_normal_iade=0 THEN sth_tutar*sth_vergi/100.0 ELSE -sth_tutar*sth_vergi/100.0 END) KDV_Tutari
FROM STOK_HAREKETLERI
WHERE sth_iptal=0 AND sth_evraktip=4
AND sth_tarih>='20260101' AND sth_tarih<'20270101'
GROUP BY YEAR(sth_tarih), MONTH(sth_tarih), sth_vergi) s
LEFT JOIN
(SELECT YEAR(sth_tarih) Yil, MONTH(sth_tarih) Ay, sth_vergi KDV_Orani,
SUM(CASE WHEN sth_normal_iade=0 THEN sth_tutar ELSE -sth_tutar END) Matrah,
SUM(CASE WHEN sth_normal_iade=0 THEN sth_tutar*sth_vergi/100.0 ELSE -sth_tutar*sth_vergi/100.0 END) KDV_Tutari
FROM STOK_HAREKETLERI
WHERE sth_iptal=0 AND sth_evraktip=3
AND sth_tarih>='20260101' AND sth_tarih<'20270101'
GROUP BY YEAR(sth_tarih), MONTH(sth_tarih), sth_vergi) a
ON s.Yil=a.Yil AND s.Ay=a.Ay AND s.KDV_Orani=a.KDV_Orani
ORDER BY s.Yil, s.Ay, s.KDV_Orani;
Alış tarafında ilgili ay/vergide kayıt yoksa LEFT JOIN sayesinde NULL değerler 0 olarak değerlendirilir.
Hesaplanan KDV Tutarında Yuvarlama Farkı
sth_vergi ve sth_tutar float tiptedir; çarpım sonucu kayan nokta yuvarlaması nedeniyle kuruş seviyesinde resmî beyanlardan farklı görünebilir. Örneğin, 0,20 KDV oranıyla 14,75 matrahtan 2,95 yerine 2,9500000000000002 gibi bir değer çıkabilir. Bu fark mali açıdan önemsizdir ancak tam eşleşme bekleniyorsa ROUND(... ,2) fonksiyonu kullanılabilir. Kesin mutabakat için Mikro'nun kendi Beyanname raporunu esas almanızı öneririz.
Sık yapılan hatalar
sth_iptal = 0filtresini unutmak: İptal edilmiş hareketler rapora istenmeyen tutarlar ekler.sth_evraktipfiltresini atlamak: Satış veya alış dışındaki hareket türleri (sayım, fire vb.) hatalı toplamlara yol açar.- İade satırlarını düşmemek:
sth_normal_iade = 1olan satırlar ters işaretle toplama dahil edilmezse KDV ve matrah şişer. - KDV tutarını doğrudan yanlış alanlardan çekmeye çalışmak:
sth_vergioran olduğu için tutar çarpılarak elde edilmelidir; aksi takdirde sadece oranlar toplanır. - Tarih filtresi koymamak: Tüm yılların verisi gelir, sorgu performansı düşer.
Sık sorulanlar
Sorguda tarih aralığını nasıl değiştiririm?
WHERE koşulundaki '20260101' ve '20270101' değerlerini kendi döneminize göre güncelleyin. Örneğin, 2025 yılı için '20250101' ve '20260101' kullanın.
KDV oranı 0 olan satırlar neden var?
İstisna, vergisiz teslim veya KDV'siz işlemler için sth_vergi 0 olabilir. Bu satırlar ayrı bir grupta listelenir, rapordan çıkarmak isterseniz WHERE koşuluna AND sth_vergi > 0 ekleyin.
Sorguyu Excel'e nasıl aktarırım?
SQL Server Management Studio (SSMS) sonuç ızgarasından kopyala-yapıştır yapabilirsiniz. Erp Asistanı'nda sorguyu çalıştırdığınızda sonuç tablo olarak gelir ve tek tıkla Excel indirebilirsiniz.
Bu sorgular Mikro v16'da da çalışır mı?
Evet, v16 ve v17'deki STOK_HAREKETLERI tablo şeması aynıdır; yalnızca firma/şube yapınıza göre ek filtre gerekebilir. Emin değilseniz v16/v17 farkları yazısına bakın.
Bu rehberdeki sorgularla KDV raporlarınızı hızlıca çıkarabilirsiniz. Daha karmaşık ihtiyaçlar için (örneğin plasiyer bazlı KDV, dövizli faturalar) Erp Asistanı'na ücretsiz üye olun, doğal dille istediğiniz sorguyu yazın; anında çalışan SQL'e dönüşsü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.