Erp Asistanı Erp Asistanı
Netsis SQL

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ı Erp Asistanı Editör ekibi 9 dk okuma
Netsis İskonto Raporu SQL: TBLSTHAR ve TBLFATUIRS İndirim Analizi

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_NF zaten iskontolar düşülmüş net fiyattır. Brüt ciro için mutlaka STHAR_BF * STHAR_GCMIK kullanılmalıdır.
  • SUBE_KODU filtresini unutmak: Çok şubeli Netsis yapılarında SUBE_KODU filtresi verilmediğinde aynı fatura numaraları farklı şubelerden gelerek toplamları mükerrer hale getirir.
  • Belge tipi filtresi koymamak: TBLSTHAR tablosunda STHAR_FTIRSIP = '1' (Satış Faturası) ve STHAR_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 ... > 0 kontrolü yapılmalıdır.
  • KDV dahil/hariç ayrımını atlamak: Fatura başlığındaki KDV_DAHILMI parametresi 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.

Ücretsiz üye olun, istediğiniz sorguyu doğal dille alın →

Bu yazıyı paylaş
Konuşarak raporlayın

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.