Netsis İade Raporu SQL: STHAR_GCKOD ile İade Analizi ve Oranı
Netsis SQL veritabanında STHAR_GCKOD ters yön mantığıyla satış iadelerini raporlayın. Ürün bazlı iade miktarı, cirosu ve iade oranı hesaplama sorguları.
Erp Asistanı
Editör ekibi
7 dk okuma
İçindekiler
Netsis ERP veritabanında satış ve ciroyu raporlarken en sık karşılaşılan hatalardan biri, satış iadelerinin gözden kaçırılması veya yanlış yön filtresi nedeniyle çift sayılmasıdır. Netsis'te tek bir fatura kalem tablosu (TBLSTHAR) bulunur ve satış faturaları STHAR_FTIRSIP = '1' koduyla tutulur. Satış faturasında normal ürün çıkışı STHAR_GCKOD = 'C' (Çıkış) iken, müşteriden dönen iade satırları depoya tekrar girdiği için STHAR_GCKOD = 'G' (Giriş) olarak işlenir. Bu mantığı anlamak, doğru bir Netsis stok hareketleri SQL raporu kurmanın ilk şartıdır. Temel tablo bağları için Netsis tablo yapısı rehberi içeriğimizden de yararlanabilirsiniz.
Bu rehberde, STHAR_GCKOD alanındaki ters yön mantığını kullanarak ürün ve cari bazında net satış, iade toplamı ve iade oranını hesaplayan T-SQL sorgularını adım adım inceleyeceğiz.
Netsis'te İade Mantığı: GCKOD ve TBLFATUIRS TIPI
Netsis veritabanında satış faturası kalemleri TBLSTHAR tablosunda saklanır. Satış evraklarının genel belge tipi STHAR_FTIRSIP = '1' değerini alır. Ancak hareketin stok yönü STHAR_GCKOD alanına bakar:
STHAR_GCKOD = 'C'(Çıkış): Müşteriye yapılan normal mal/ürün satışı.STHAR_GCKOD = 'G'(Giriş): Satış faturası veya satış iade faturası içerisindeki iade satırı. Ürün firmaya geri döndüğü için depoya giriş olarak işlenir.
Fatura başlık seviyesinde doğrulamak isterseniz TBLFATUIRS tablosundaki TIPI alanını kontrol edebilirsiniz. FTIRSIP = '1' iken TIPI = 4 olan kayıtlar doğrudan İade Faturası olarak kaydedilmiş evraklardır.
1. Satış İade Kalemleri Dökümü
Doğrudan satış faturaları (STHAR_FTIRSIP = '1') içerisinde yer alan ve depoya giriş (STHAR_GCKOD = 'G') olarak kaydedilmiş iade satırlarını listelemek için aşağıdaki sorguyu kullanabilirsiniz.
SELECT
s.STHAR_TARIH AS [Tarih],
s.FISNO AS [Fatura No],
s.STOK_KODU AS [Stok Kodu],
st.STOK_ADI AS [Stok Adı],
s.STHAR_CARIKOD AS [Cari Kodu],
s.STHAR_GCMIK AS [İade Miktarı],
(s.STHAR_GCMIK * s.STHAR_NF) AS [İade Tutar]
FROM TBLSTHAR s
LEFT JOIN TBLSTSABIT st ON st.STOK_KODU = s.STOK_KODU
WHERE s.STHAR_FTIRSIP = '1'
AND s.STHAR_GCKOD = 'G'
AND s.SUBE_KODU = 0
AND s.STHAR_TARIH >= '20260101' AND s.STHAR_TARIH < '20260701'
ORDER BY s.STHAR_TARIH DESC, s.INCKEYNO DESC;
2. Ürün Bazında Satış, İade ve İade Oranı
Sadece iadeleri listelemek ürün performansını değerlendirmek için yeterli değildir. Gerçek analitik güç, bir stok kartının toplam satış miktarı ile iade miktarını kıyaslamaktan geçer. Bu sorgu ürün bazında brüt satış, iade miktar/tutarı ve iade yüzdesini hesaplar.
SELECT
s.STOK_KODU AS [Stok Kodu],
st.STOK_ADI AS [Stok Adı],
SUM(CASE WHEN s.STHAR_GCKOD = 'C' THEN s.STHAR_GCMIK ELSE 0 END) AS [Satış Miktarı],
SUM(CASE WHEN s.STHAR_GCKOD = 'G' THEN s.STHAR_GCMIK ELSE 0 END) AS [İade Miktarı],
SUM(CASE WHEN s.STHAR_GCKOD = 'C' THEN (s.STHAR_GCMIK * s.STHAR_NF) ELSE 0 END) AS [Satış Tutarı],
SUM(CASE WHEN s.STHAR_GCKOD = 'G' THEN (s.STHAR_GCMIK * s.STHAR_NF) ELSE 0 END) AS [İade Tutarı],
CAST(
CASE WHEN SUM(CASE WHEN s.STHAR_GCKOD = 'C' THEN s.STHAR_GCMIK ELSE 0 END) = 0 THEN 0
ELSE (SUM(CASE WHEN s.STHAR_GCKOD = 'G' THEN s.STHAR_GCMIK ELSE 0 END) * 100.0) /
SUM(CASE WHEN s.STHAR_GCKOD = 'C' THEN s.STHAR_GCMIK ELSE 0 END)
END AS DECIMAL(5,2)
) AS [İade Oranı (%)]
FROM TBLSTHAR s
LEFT JOIN TBLSTSABIT st ON st.STOK_KODU = s.STOK_KODU
WHERE s.STHAR_FTIRSIP = '1'
AND s.SUBE_KODU = 0
AND s.STHAR_TARIH >= '20260101' AND s.STHAR_TARIH < '20260701'
GROUP BY s.STOK_KODU, st.STOK_ADI
HAVING SUM(CASE WHEN s.STHAR_GCKOD = 'G' THEN s.STHAR_GCMIK ELSE 0 END) > 0
ORDER BY [İade Tutarı] DESC, s.STOK_KODU;
3. Başlık Kontrollü İade Faturası Detayı (TBLFATUIRS JOIN)
Eğer raporunuzu sadece başlık seviyesinde İade Faturası (TIPI = 4) olarak kesilmiş resmi evraklarla sınırlamak isterseniz, TBLFATUIRS tablosu ile JOIN yapmanız gerekir.
SELECT
f.FATIRS_NO AS [Fatura No],
f.TARIH AS [Tarih],
f.CARI_KODU AS [Cari Kodu],
s.STOK_KODU AS [Stok Kodu],
st.STOK_ADI AS [Stok Adı],
s.STHAR_GCMIK AS [Miktar],
(s.STHAR_GCMIK * s.STHAR_NF) AS [Net Tutar]
FROM TBLFATUIRS f
INNER JOIN TBLSTHAR s ON s.FISNO = f.FATIRS_NO
AND s.STHAR_FTIRSIP = f.FTIRSIP
AND s.SUBE_KODU = f.SUBE_KODU
LEFT JOIN TBLSTSABIT st ON st.STOK_KODU = s.STOK_KODU
WHERE f.FTIRSIP = '1'
AND f.TIPI = 4
AND f.SUBE_KODU = 0
AND f.TARIH >= '20260101' AND f.TARIH < '20260701'
ORDER BY f.TARIH DESC, s.INCKEYNO DESC;
4. Müşteri (Cari) Bazında İade ve Net Ciro Analizi
Hangi müşterinin ne kadarlık iade yaptığını ve toplam satış içindeki iade yükünü görmek için STHAR_CARIKOD bazında gruplama yapabilirsiniz.
SELECT
s.STHAR_CARIKOD AS [Cari Kodu],
SUM(CASE WHEN s.STHAR_GCKOD = 'C' THEN (s.STHAR_GCMIK * s.STHAR_NF) ELSE 0 END) AS [Brüt Satış Tutarı],
SUM(CASE WHEN s.STHAR_GCKOD = 'G' THEN (s.STHAR_GCMIK * s.STHAR_NF) ELSE 0 END) AS [İade Tutarı],
SUM(CASE WHEN s.STHAR_GCKOD = 'C' THEN (s.STHAR_GCMIK * s.STHAR_NF) ELSE -(s.STHAR_GCMIK * s.STHAR_NF) END) AS [Net Ciro]
FROM TBLSTHAR s
WHERE s.STHAR_FTIRSIP = '1'
AND s.SUBE_KODU = 0
AND s.STHAR_TARIH >= '20260101' AND s.STHAR_TARIH < '20260701'
GROUP BY s.STHAR_CARIKOD
HAVING SUM(CASE WHEN s.STHAR_GCKOD = 'G' THEN (s.STHAR_GCMIK * s.STHAR_NF) ELSE 0 END) > 0
ORDER BY [İade Tutarı] DESC, s.STHAR_CARIKOD;
Farklı sorgu örnekleri için Netsis hazır SQL sorguları rehberimizi inceleyebilirsiniz.
Netsis İade Raporu Mantık Özeti
| Parametre / Kolon | Satış Hareketi | Satış İade Hareketi | Açıklama |
|---|---|---|---|
| STHAR_FTIRSIP | '1' | '1' | Her iki işlem de Satış Faturası modülündedir. |
| STHAR_GCKOD | 'C' (Çıkış) | 'G' (Giriş) | İade satırı depoya stok girişi sağlar. |
| TBLFATUIRS.TIPI | 1 veya 2 | 4 | Başlık tablosunda 4 = İade faturası anlamına gelir. |
| Hesaplanan Tutar | STHAR_GCMIK * STHAR_NF |
STHAR_GCMIK * STHAR_NF |
Net fiyat KDV hariç satır değerini verir. |
Sık yapılan hatalar
- STHAR_GCKOD süzgecini unutmak: Satış cirosunu hesaplarken sadece
STHAR_FTIRSIP = '1'filtresi koyupSTHAR_GCKODayrımı yapmamak, iadelerin satış gibi toplanmasına ve cironun hatalı yüksek çıkmasına neden olur. - İade Faturasını Alış Faturası (
FTIRSIP='2') ile karıştırmak: Satıştan iade faturaları alış faturası değildir. Belge tipi yine1(Satış), stok yönüG(Giriş) olarak tutulur. - Süreçte
SUBE_KODUfiltresini atlamak: Çok şubeli veritabanlarındaSUBE_KODUkısıtı verilmezse farklı şubelerin belge numaraları çakışabilir ve toplamlar yanlış gelir. - Tutar hesabı için saklanan hazır kolon aramak: Netsis
TBLSTHARtablosunda hazır net tutar kolonu bulunmaz. Tutar daimaSTHAR_GCMIK * STHAR_NFçarpımıyla hesaplanmalıdır.
Sık sorulanlar
Satış iadesi ile alış faturası arasındaki SQL farkı nedir?
Satış iadesinde STHAR_FTIRSIP = '1' ve STHAR_GCKOD = 'G' olur. Alış faturasında ise STHAR_FTIRSIP = '2' ve STHAR_GCKOD = 'G' tutulur. Yani iade işlemi orijinal modülün altında ters stok yönüyle işlenir.
İade oranını hesaplarken sıfıra bölünme (Divide by zero) hatası nasıl önlenir?
Hiç satışı olmayıp sadece iadesi girilmiş ürünlerde CASE WHEN SUM(Satış) = 0 THEN 0 kontrolü eklenerek matematiksel sıfıra bölünme hatası engellenir.
İade raporlarında KDV dahil tutarları nasıl bulabilirim?
STHAR_NF net birim fiyattır. KDV dahil satır tutarı için (STHAR_GCMIK * STHAR_NF) * (1 + (STHAR_KDV / 100.0)) formülünü kullanabilirsiniz.
Netsis veritabanınızdan SQL kodlarıyla uğraşmadan anlık iade analizi, cari durum ve stok raporları almak isterseniz Erp Asistanı'nı deneyebilirsiniz. Doğal dilde soru sorarak raporlarınızı saniyeler içinde oluşturun.
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.