Erp Asistanı Erp Asistanı
Netsis SQL

Netsis Ortalama Satış Fiyatı SQL: STHAR_NF ile Fiyat Trendi

Netsis TBLSTHAR tablosunda STHAR_NF ve STHAR_BF kullanarak ağırlıklı ortalama satış fiyatı hesaplama, liste fiyatı kıyası ve aylık fiyat trendi SQL sorguları.

Erp Asistanı Erp Asistanı Editör ekibi 8 dk okuma
Netsis Ortalama Satış Fiyatı SQL: STHAR_NF ile Fiyat Trendi

Netsis ERP kullanan işletmelerde bir ürünün fiili satış performansını incelerken stok kartındaki liste fiyatına bakmak yanıltıcı sonuçlar üretir. Satış temsilcilerinin uyguladığı satır iskontoları, dönemsel kampanyalar ve müşteri bazlı özel fiyat anlaşmaları nedeniyle ürünlerin kasaya giren birim fiyatı sürekli değişir. Doğru bir fiyat analizi ve karlılık takibi yapabilmek için hareket kayıtlarındaki gerçekleşen tutarlar üzerinden ağırlıklı ortalama satış fiyatı hesaplanmalıdır. Bu rehberde, Netsis stok hareketleri tablosu üzerinden net ve brüt fiyat ayrımlarını, liste fiyatı sapmalarını ve aylık fiyat trendlerini gösteren T-SQL sorgularını ele alıyoruz. Tablo ilişkileri ve genel mimari için Netsis tablo yapısı rehberi yazımızdan da faydalanabilirsiniz.

STHAR_NF ve STHAR_BF farkı: Neden STHAR_NF kullanılmalı?

Netsis'te fatura ve irsaliye kalemleri TBLSTHAR tablosunda saklanır. Fiyat hesaplamalarında en sık yapılan hata STHAR_BF (Brüt Fiyat) ile STHAR_NF (Net Fiyat) kolonlarının birbirine karıştırılmasıdır. STHAR_BF, stoğun faturaya ilk çağrıldığı andaki brüt liste birim fiyatını temsil eder. STHAR_NF ise satır iskontoları düşüldükten sonra oluşan net birim fiyattır. Bir ürünün gerçek ciro getirisini bulmak için STHAR_GCMIK * STHAR_NF çarpımı esastır.

Alan Bulunduğu Tablo Veri Tipi Anlamı ve Raporlama Amacı
STHAR_NF TBLSTHAR decimal İskontolar sonrası net birim satış fiyatı. Ciro ve ortalama fiyat hesabının temelidir.
STHAR_BF TBLSTHAR decimal İskontolar öncesi brüt birim fiyat. İskonto oranı analizlerinde referans alınır.
SATIS_FIAT1 TBLSTSABIT decimal Stok tanım kartındaki 1. satış fiyatı. Gerçekleşen fiyatla liste fiyatını kıyaslamada kullanılır.
STHAR_GCMIK TBLSTHAR decimal Hareket miktarı. Ağırlıklı ortalama hesabı için katsayı olarak kullanılır.

Ağırlıklı ortalama satış fiyatı nasıl hesaplanır? (AVG tuzağı)

SQL'de doğrudan AVG(STHAR_NF) fonksiyonunu kullanmak ciddi bir istatistiksel sapmaya yol açar. Örneğin bir müşteriye 1 adet ürün 100 TL'den, başka bir müşteriye 99 adet ürün 80 TL'den satıldığında basit aritmetik ortalama (100 + 80) / 2 = 90 TL sonucunu verir. Ancak şirketin kasasına giren fiili ortalama birim tutar ((1 * 100) + (99 * 80)) / 100 = 80.20 TL seviyesindedir. Bu nedenle doğru fiyat analizi için mutlaka toplam cironun toplam miktara bölündüğü ağırlıklı ortalama formülü kullanılmalıdır: SUM(STHAR_GCMIK * STHAR_NF) / SUM(STHAR_GCMIK).

Filtreleme tarafında ise STHAR_GCKOD = 'C' (çıkış hareketleri) ve STHAR_FTIRSIP = '1' (satış faturaları) şartları eklenmelidir. İrsaliye kayıtlarının mükerrer ciro yaratmasını engellemek ve şube bazlı verileri doğru ayırmak için filtre yapısına dikkat edilmelidir. Detaylı hareket yapısı için Netsis stok hareketleri SQL rehberi incelenebilir.

1. Ürün bazında ağırlıklı ortalama satış fiyatı ve liste fiyatı kıyası

Bu sorgu, seçilen tarih aralığında satılan ürünlerin toplam miktarını, net cirosunu, gerçekleşen ağırlıklı ortalama birim fiyatını ve TBLSTSABIT tablosundaki güncel SATIS_FIAT1 liste fiyatı ile olan farkını listeler.

SELECT
    s.STOK_KODU,
    s.STOK_ADI,
    s.SATIS_FIAT1 AS [Liste Fiyati],
    SUM(h.STHAR_GCMIK) AS [Toplam Satis Miktari],
    SUM(h.STHAR_GCMIK * h.STHAR_NF) AS [Net Ciro],
    CAST(SUM(h.STHAR_GCMIK * h.STHAR_NF) / NULLIF(SUM(h.STHAR_GCMIK), 0) AS decimal(18, 4)) AS [Gerceklesen Ort Fiyat],
    CAST(s.SATIS_FIAT1 - (SUM(h.STHAR_GCMIK * h.STHAR_NF) / NULLIF(SUM(h.STHAR_GCMIK), 0)) AS decimal(18, 4)) AS [Fiyat Sapmasi]
FROM TBLSTHAR h
JOIN TBLSTSABIT s ON s.STOK_KODU = h.STOK_KODU
WHERE h.STHAR_GCKOD = 'C'
  AND h.STHAR_FTIRSIP = '1'
  AND h.SUBE_KODU = 0
  AND h.STHAR_TARIH >= '20260101' AND h.STHAR_TARIH < '20260701'
GROUP BY s.STOK_KODU, s.STOK_ADI, s.SATIS_FIAT1
HAVING SUM(h.STHAR_GCMIK) > 0
ORDER BY [Net Ciro] DESC;

2. Brüt fiyat ve net fiyat kıyası ile ortalama iskonto oranı

Satış ekibinin ürün bazında ne kadar taviz verdiğini görmek için STHAR_BF üzerinden hesaplanan brüt ciro ile STHAR_NF üzerinden hesaplanan net ciro karşılaştırılır. Dönemsel filtrelerin doğru kullanımı için Netsis tarih filtreleri SQL rehberi içeriğimize göz atabilirsiniz.

SELECT
    h.STOK_KODU,
    s.STOK_ADI,
    SUM(h.STHAR_GCMIK) AS [Toplam Miktar],
    CAST(SUM(h.STHAR_GCMIK * h.STHAR_BF) / NULLIF(SUM(h.STHAR_GCMIK), 0) AS decimal(18, 4)) AS [Ortalama Brut Fiyat],
    CAST(SUM(h.STHAR_GCMIK * h.STHAR_NF) / NULLIF(SUM(h.STHAR_GCMIK), 0) AS decimal(18, 4)) AS [Ortalama Net Fiyat],
    CAST(
        (SUM(h.STHAR_GCMIK * h.STHAR_BF) - SUM(h.STHAR_GCMIK * h.STHAR_NF))
        / NULLIF(SUM(h.STHAR_GCMIK * h.STHAR_BF), 0) * 100
    AS decimal(5, 2)) AS [Ortalama Iskonto Orani (%)]
FROM TBLSTHAR h
JOIN TBLSTSABIT s ON s.STOK_KODU = h.STOK_KODU
WHERE h.STHAR_GCKOD = 'C'
  AND h.STHAR_FTIRSIP = '1'
  AND h.SUBE_KODU = 0
  AND h.STHAR_TARIH >= '20260101' AND h.STHAR_TARIH < '20260701'
GROUP BY h.STOK_KODU, s.STOK_ADI
HAVING SUM(h.STHAR_GCMIK) > 0
ORDER BY [Toplam Miktar] DESC;

3. Aylık ortalama satış fiyat trendi

Ürünlerin satış fiyatlarının aylar içindeki değişimini (enflasyonist fiyat artışları veya dönemsel fiyat kırmaları) izlemek için yıl ve ay kırılımında zaman serisi analizi yapılır.

SELECT
    YEAR(h.STHAR_TARIH) AS [Yil],
    MONTH(h.STHAR_TARIH) AS [Ay],
    h.STOK_KODU,
    s.STOK_ADI,
    SUM(h.STHAR_GCMIK) AS [Aylik Satis Miktari],
    SUM(h.STHAR_GCMIK * h.STHAR_NF) AS [Aylik Net Ciro],
    CAST(SUM(h.STHAR_GCMIK * h.STHAR_NF) / NULLIF(SUM(h.STHAR_GCMIK), 0) AS decimal(18, 4)) AS [Aylik Ort Satis Fiyati]
FROM TBLSTHAR h
JOIN TBLSTSABIT s ON s.STOK_KODU = h.STOK_KODU
WHERE h.STHAR_GCKOD = 'C'
  AND h.STHAR_FTIRSIP = '1'
  AND h.SUBE_KODU = 0
  AND h.STHAR_TARIH >= '20260101' AND h.STHAR_TARIH < '20270101'
GROUP BY YEAR(h.STHAR_TARIH), MONTH(h.STHAR_TARIH), h.STOK_KODU, s.STOK_ADI
ORDER BY h.STOK_KODU, [Yil], [Ay];

4. Müşteri ve ürün kırılımında ortalama fiyat dökümü

Aynı ürünün farklı müşterilere ortalama kaç TL'den satıldığını tespit etmek, fiyat politikasındaki tutarsızlıkları ve müşteri bazlı karlılıkları netleştirir.

SELECT
    h.STHAR_CARIKOD AS [Cari Kodu],
    h.STOK_KODU AS [Stok Kodu],
    s.STOK_ADI AS [Stok Adi],
    SUM(h.STHAR_GCMIK) AS [Satis Miktari],
    SUM(h.STHAR_GCMIK * h.STHAR_NF) AS [Net Tutar],
    CAST(SUM(h.STHAR_GCMIK * h.STHAR_NF) / NULLIF(SUM(h.STHAR_GCMIK), 0) AS decimal(18, 4)) AS [Cariye Ozel Ort Fiyat],
    s.SATIS_FIAT1 AS [Guncel Liste Fiyati]
FROM TBLSTHAR h
JOIN TBLSTSABIT s ON s.STOK_KODU = h.STOK_KODU
WHERE h.STHAR_GCKOD = 'C'
  AND h.STHAR_FTIRSIP = '1'
  AND h.SUBE_KODU = 0
  AND h.STHAR_TARIH >= '20260101' AND h.STHAR_TARIH < '20260701'
GROUP BY h.STHAR_CARIKOD, h.STOK_KODU, s.STOK_ADI, s.SATIS_FIAT1
HAVING SUM(h.STHAR_GCMIK) > 0
ORDER BY h.STHAR_CARIKOD, [Net Tutar] DESC;

Sık yapılan hatalar

  • AVG(STHAR_NF) kullanmak: Basit ortalama almak adet ağırlıklarını yok sayar. Mutlaka toplam tutarı toplam miktara bölerek ağırlıklı ortalama hesaplayın.
  • STHAR_BF ile ciro hesaplamak: İskontolu satışlarda STHAR_BF kullanılırsa ciro ve ortalama fiyat gerçekte olduğundan yüksek çıkar.
  • Belge tipi filtresini (STHAR_FTIRSIP) unutmak: Filtre verilmezse alış faturaları (2), irsaliyeler (3) ve depo transferleri (8/9) satış analizine dahil olur.
  • Sıfıra bölme hatası (Divide by Zero): Satış miktarı toplamı 0 olan veya iadelerle sıfırlanan satırlarda SQL Server hata verir. Bölme işleminde payda kısmında NULLIF(SUM(STHAR_GCMIK), 0) kullanın.
  • SUBE_KODU filtresini atlamak: Çok şubeli Netsis yapılarında şube filtresi verilmediğinde tüm şubelerin hareketleri birbirine karışarak fiyat istatistiklerini bozar.

Sık sorulanlar

STHAR_NF KDV dahil mi yoksa hariç midir? Netsis hareket tablosunda tutulan STHAR_NF ve STHAR_BF değerleri varsayılan olarak KDV hariç net birim fiyatlardır. KDV oranı satırdaki STHAR_KDV alanında ayrı tutulur.

İadeler ortalama satış fiyatını nasıl etkiler? Müşteri iadeleri STHAR_GCKOD = 'G' ve STHAR_FTIRSIP = '1' (veya iade tipi) olarak kaydedilir. Yukarıdaki sorgular yalnızca fiili satış çıkışlarını (STHAR_GCKOD = 'C') baz alır. Net satış fiyatı analizi için iade satırları ayrı değerlendirilmelidir.

Dövizli satışlarda ortalama fiyat nasıl hesaplanır? Dövizli faturalarda STHAR_DOVTIP döviz cinsini, STHAR_DOVFIAT ise dövizli birim fiyatı belirtir. Döviz bazında analiz için STHAR_DOVTIP > 0 filtresi verilip STHAR_DOVFIAT alanı üzerinden ağırlıklı ortalama alınmalıdır.


Netsis veritabanınızda ortalama fiyat trendlerini, iskonto kaçaklarını ve karlılık analizlerini her ay SQL yazmak zorunda kalmadan otomatik takip etmek ister misiniz? Erp Asistanı ile sisteminize saniyeler içinde bağlanabilir, doğal dilde sorular sorarak dinamik raporlar ve grafikler üretebilirsiniz.

Erp Asistanı'nı ücretsiz deneyin, fiyat ve satış analizlerinizi anında oluşturun →

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.