Netsis İskonto Raporu SQL: TBLSTHAR ve TBLFATUIRS İndirim Analizi
Netsis ERP satış faturalarında satır ve genel iskonto hesaplama SQL sorguları. TBLSTHAR ve TBLFATUIRS ile cari bazlı indirim analiz rehberi.
Erp Asistanı
Editör ekibi
9 dk okuma
İçindekiler
Netsis ERP üzerinde satış performansını ve karlılığı incelerken en sık karşılaşılan zorluk, brüt ciro ile net ciro arasındaki iskonto yapısının doğru ayrıştırılamamasıdır. Satış faturalarında iki temel indirim mekanizması bulunur: TBLSTHAR tablosunda tutulan kalem bazlı satır iskontoları ve TBLFATUIRS başlığında yönetilen fatura altı genel iskontolar. Bu iki mekanizmanın brüt fiyattan net faturaya gidiş adımlarını doğru kurgulamak, gerçek satış hasılatını ve müşteri bazlı indirim maliyetlerini şeffaf biçimde ortaya koyar. Veritabanı mimarisi hakkında genel bir bakış için Netsis tablo yapısı rehberi yazımıza göz atabilirsiniz.
Netsis İskonto Mantığı ve Tablo Mimarisi
Netsis'te fatura süreçleri başlık (TBLFATUIRS) ve hareket kalemleri (TBLSTHAR) olarak iki seviyede saklanır. Bir ürün satıldığında liste fiyatı ile faturadaki nihai fiyat arasındaki fark satır düzeyinde hesaplanırken, faturanın tamamına uygulanan genel iskontolar başlık tablosunda toplam tutarları etkiler.
| Seviye | Tablo | Kolon / Hesaplama | Anlamı ve İşlevi |
|---|---|---|---|
| Kalem (Satır) | TBLSTHAR |
STHAR_BF |
Ürünün liste / brüt birim fiyatı |
| Kalem (Satır) | TBLSTHAR |
STHAR_NF |
İskontolar düşülmüş net birim fiyatı |
| Kalem (Satır) | TBLSTHAR |
STHAR_GCMIK * STHAR_BF |
Satırın liste fiyatı üzerinden brüt tutarı |
| Kalem (Satır) | TBLSTHAR |
STHAR_GCMIK * STHAR_NF |
Satırın net satış hasılatı |
| Başlık (Evrak) | TBLFATUIRS |
BRUTTUTAR |
Faturadaki kalemlerin toplam brüt tutarı |
| Başlık (Evrak) | TBLFATUIRS |
GENELTOPLAM |
İskontolar ve vergiler sonrası net ödenecek tutar |
| Başlık (Evrak) | TBLFATUIRS |
KDV |
Faturanın hesaplanan toplam katma değer vergisi |
Netsis veritabanında satır tutarları fiziksel bir kolon olarak depolanmaz; her zaman miktar (STHAR_GCMIK) ile birim fiyatın (STHAR_BF veya STHAR_NF) çarpımıyla dinamik hesaplanır.
1. Kalem Bazlı Satır İskonto Analizi (TBLSTHAR)
Satış faturasındaki her bir kalemin brüt tutarını, net tutarını ve satırda uygulanan toplam iskonto tutarını hesaplamak için STHAR_BF (Brüt Fiyat) ve STHAR_NF (Net Fiyat) kolonları karşılaştırılır. STHAR_SATISK1..6 alanları indirim kademelerini tutar ancak nihai net fiyat her zaman STHAR_NF içine yansıtılır.
SELECT
h.FISNO AS [Fatura No],
h.STHAR_TARIH AS [Tarih],
h.STHAR_CARIKOD AS [Cari Kodu],
h.STOK_KODU AS [Stok Kodu],
h.STHAR_GCMIK AS [Miktar],
h.STHAR_BF AS [Brüt Liste Fiyatı],
h.STHAR_NF AS [Net Satış Fiyatı],
CAST(h.STHAR_GCMIK * h.STHAR_BF AS decimal(18,2)) AS [Brüt Satır Tutarı],
CAST(h.STHAR_GCMIK * (h.STHAR_BF - h.STHAR_NF) AS decimal(18,2)) AS [Satır İskonto Tutarı],
CAST(h.STHAR_GCMIK * h.STHAR_NF AS decimal(18,2)) AS [Net Satır Tutarı],
CAST(CASE
WHEN h.STHAR_BF > 0 THEN ((h.STHAR_BF - h.STHAR_NF) / h.STHAR_BF) * 100.0
ELSE 0.0
END AS decimal(5,2)) AS [İskonto Yüzdesi]
FROM TBLSTHAR h
WHERE h.STHAR_FTIRSIP = '1'
AND h.STHAR_GCKOD = 'C'
AND h.SUBE_KODU = 0
AND h.STHAR_TARIH >= '20260101' AND h.STHAR_TARIH < '20260701'
ORDER BY h.STHAR_TARIH DESC, h.FISNO;
Bu sorgu, her satış kalemi için liste fiyatından ne kadar sapıldığını ve satır bazlı iskonto maliyetini listeler. Stok hareketleri hakkında daha ayrıntılı sorgular için Netsis stok hareketleri SQL rehberimize bakabilirsiniz.
2. Fatura Başlık Seviyesinde Brüt Tutar ve İskonto Dengesi (TBLFATUIRS)
Fatura başlığında yer alan BRUTTUTAR, GENELTOPLAM ve KDV kolonları faturanın genel parasal mutabakatını sağlar. Fatura altı genel iskonto yapıldığında, KDV hariç matrah ile brüt tutar arasındaki fark toplam indirim tutarını verir. Vergi dahil/hariç hesaplama mantığı için Netsis KDV Dahil mi ve Tutar Hesaplama başlıklı makalemizi inceleyebilirsiniz.
SELECT
f.FATIRS_NO AS [Fatura No],
f.CARI_KODU AS [Cari Kodu],
f.TARIH AS [Fatura Tarihi],
f.BRUTTUTAR AS [Brüt Tutar],
f.KDV AS [KDV Tutarı],
f.GENELTOPLAM AS [Genel Toplam],
CAST(CASE
WHEN f.KDV_DAHILMI = 'H' THEN f.BRUTTUTAR - (f.GENELTOPLAM - f.KDV)
ELSE f.BRUTTUTAR - f.GENELTOPLAM
END AS decimal(18,2)) AS [Toplam Fatura İskontosu],
CAST(CASE
WHEN f.BRUTTUTAR > 0 AND f.KDV_DAHILMI = 'H'
THEN ((f.BRUTTUTAR - (f.GENELTOPLAM - f.KDV)) / f.BRUTTUTAR) * 100.0
WHEN f.BRUTTUTAR > 0 AND f.KDV_DAHILMI = 'E'
THEN ((f.BRUTTUTAR - f.GENELTOPLAM) / f.BRUTTUTAR) * 100.0
ELSE 0.0
END AS decimal(5,2)) AS [Fatura İskonto Oranı]
FROM TBLFATUIRS f
WHERE f.FTIRSIP = '1'
AND f.SUBE_KODU = 0
AND f.TARIH >= '20260101' AND f.TARIH < '20260701'
ORDER BY f.TARIH DESC, f.FATIRS_NO;
3. Başlık ve Kalem Birleşik İskonto Dökümü
Fatura başlığı ile kalemlerin toplamını tek sorguda birleştirmek, kalem bazlı brüt toplam ile başlık brüt tutarının tutarlılığını denetlemek açısından kritik bir kontroldür.
SELECT
f.FATIRS_NO AS [Fatura No],
f.CARI_KODU AS [Cari Kodu],
f.TARIH AS [Fatura Tarihi],
f.BRUTTUTAR AS [Fatura Brüt Tutarı],
f.GENELTOPLAM AS [Fatura Genel Toplam],
f.KDV AS [Fatura KDV],
CAST(SUM(h.STHAR_GCMIK * h.STHAR_BF) AS decimal(18,2)) AS [Kalemler Brüt Toplamı],
CAST(SUM(h.STHAR_GCMIK * h.STHAR_NF) AS decimal(18,2)) AS [Kalemler Net Toplamı],
CAST(SUM(h.STHAR_GCMIK * (h.STHAR_BF - h.STHAR_NF)) AS decimal(18,2)) AS [Kalem İskontoları Toplamı]
FROM TBLFATUIRS f
JOIN TBLSTHAR h ON h.FISNO = f.FATIRS_NO
AND h.SUBE_KODU = f.SUBE_KODU
AND h.STHAR_FTIRSIP = f.FTIRSIP
WHERE f.FTIRSIP = '1'
AND f.SUBE_KODU = 0
AND f.TARIH >= '20260101' AND f.TARIH < '20260701'
GROUP BY f.FATIRS_NO, f.CARI_KODU, f.TARIH, f.BRUTTUTAR, f.GENELTOPLAM, f.KDV
ORDER BY f.TARIH DESC;
4. Cari Bazında Satış İndirim ve Efektif İskonto Oranı
Müşteri bazında ne kadar brüt ciro üretildiği, bu ciroya karşılık ne kadar iskonto verildiği ve müşterinin firmanız için ortalama efektif iskonto oranı bu sorguyla raporlanır.
SELECT
c.CARI_KOD AS [Cari Kodu],
c.CARI_ISIM AS [Cari Ünvanı],
COUNT(DISTINCT h.FISNO) AS [Fatura Adedi],
CAST(SUM(h.STHAR_GCMIK * h.STHAR_BF) AS decimal(18,2)) AS [Toplam Brüt Satış],
CAST(SUM(h.STHAR_GCMIK * (h.STHAR_BF - h.STHAR_NF)) AS decimal(18,2)) AS [Toplam Verilen İskonto],
CAST(SUM(h.STHAR_GCMIK * h.STHAR_NF) AS decimal(18,2)) AS [Toplam Net Ciro],
CAST(CASE
WHEN SUM(h.STHAR_GCMIK * h.STHAR_BF) > 0
THEN (SUM(h.STHAR_GCMIK * (h.STHAR_BF - h.STHAR_NF)) / SUM(h.STHAR_GCMIK * h.STHAR_BF)) * 100.0
ELSE 0.0
END AS decimal(5,2)) AS [Efektif İskonto Oranı (%)]
FROM TBLSTHAR h
JOIN TBLCASABIT c ON c.CARI_KOD = h.STHAR_CARIKOD
WHERE h.STHAR_FTIRSIP = '1'
AND h.STHAR_GCKOD = 'C'
AND h.SUBE_KODU = 0
AND h.STHAR_TARIH >= '20260101' AND h.STHAR_TARIH < '20260701'
GROUP BY c.CARI_KOD, c.CARI_ISIM
ORDER BY [Toplam Net Ciro] DESC;
5. Plasiyer Bazlı İskonto ve İndirim Trend Raporu
Satış temsilcilerinin (plasiyerlerin) müşterilere uyguladığı genel indirim oranlarını kıyaslamak, iskonto politikasının denetimi için önemlidir.
SELECT
ISNULL(f.PLA_KODU, 'TANIMSIZ') AS [Plasiyer Kodu],
COUNT(f.FATIRS_NO) AS [Toplam Fatura Sayısı],
CAST(SUM(f.BRUTTUTAR) AS decimal(18,2)) AS [Toplam Brüt Tutar],
CAST(SUM(f.GENELTOPLAM) AS decimal(18,2)) AS [Toplam Net Ciro],
CAST(SUM(CASE
WHEN f.KDV_DAHILMI = 'H' THEN f.BRUTTUTAR - (f.GENELTOPLAM - f.KDV)
ELSE f.BRUTTUTAR - f.GENELTOPLAM
END) AS decimal(18,2)) AS [Toplam İndirim Tutarı],
CAST(CASE
WHEN SUM(f.BRUTTUTAR) > 0
THEN (SUM(CASE
WHEN f.KDV_DAHILMI = 'H' THEN f.BRUTTUTAR - (f.GENELTOPLAM - f.KDV)
ELSE f.BRUTTUTAR - f.GENELTOPLAM
END) / SUM(f.BRUTTUTAR)) * 100.0
ELSE 0.0
END AS decimal(5,2)) AS [Ortalama İskonto Oranı (%)]
FROM TBLFATUIRS f
WHERE f.FTIRSIP = '1'
AND f.SUBE_KODU = 0
AND f.TARIH >= '20260101' AND f.TARIH < '20260701'
GROUP BY f.PLA_KODU
ORDER BY [Toplam Net Ciro] DESC;
Sık yapılan hatalar
- STHAR_BF yerine STHAR_NF üzerinden brüt hesaplamak:
STHAR_NFzaten iskontolar düşülmüş net fiyattır. Brüt ciro için mutlakaSTHAR_BF * STHAR_GCMIKkullanılmalıdır. - SUBE_KODU filtresini unutmak: Çok şubeli Netsis yapılarında
SUBE_KODUfiltresi verilmediğinde aynı fatura numaraları farklı şubelerden gelerek toplamları mükerrer hale getirir. - Belge tipi filtresi koymamak:
TBLSTHARtablosundaSTHAR_FTIRSIP = '1'(Satış Faturası) veSTHAR_GCKOD = 'C'(Çıkış) kısıtlaması yapılmazsa alış faturaları ve depo transferleri satış indirimine karışır. - Sıfıra bölme (Divide by zero) hatası: İskonto yüzdesi hesaplarken brüt tutarın sıfır olduğu bedelsiz veya promosyonlu satırlarda
CASE WHEN ... > 0kontrolü yapılmalıdır. - KDV dahil/hariç ayrımını atlamak: Fatura başlığındaki
KDV_DAHILMIparametresi hesaba katılmadan brüt tutardan genel toplam çıkarılırsa KDV tutarı yanlışlıkla iskonto gibi algılanır.
Sık sorulanlar
TBLSTHAR tablosundaki STHAR_SATISK1..6 kolonları neyi gösterir? Satırda uygulanan 1. iskonto, 2. iskonto gibi kademeli indirim oranlarını veya tutarlarını saklar. Ancak tüm bu adımların nihai matematiksel sonucu doğrudan STHAR_NF kolonuna işlenmiş durumdadır.
Fatura altı genel iskonto TBLSTHAR satırlarına nasıl yansır? Fatura başlığındaki genel iskontolar satırların STHAR_NF değerini doğrudan değiştirmez; başlık seviyesinde matrahı düşürür. Kalem bazlı net maliyet hesaplanırken başlık iskontosunun satırlara ağırlıklı dağıtılması gerekir.
İade faturaları iskonto analizine nasıl dahil edilir? Satış iade faturaları TIPI = 4 veya STHAR_GCKOD = 'G' olarak kaydedilir. Net satış indirim raporlarında iadelerin iskonto tutarları toplam iskonto maliyetinden düşülmelidir.
Netsis veritabanınızdaki iskonto ve karlılık analizlerini manuel SQL yazmadan, konuşma dilinde sorular sorarak dakikalar içinde hazırlayabilirsiniz.
Netsis'te 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.