Netsis Günlük Satış Özeti SQL: Gün Bazında Ciro ve Fatura Sayısı
Netsis'te günlük satış cirosu ve fatura sayısını iki farklı tablo (TBLSTHAR ve TBLFATUIRS) üzerinden hesaplayan, kopyala-çalıştır SQL örnekleriyle farklılıkları açıklayan pratik rehber.
Erp Asistanı
Editör ekibi
6 dk okuma
İçindekiler
Netsis’te günlük satış cirosu ve fatura sayısı raporu alırken iki farklı kaynaktan besleniriz: TBLSTHAR kalem hareketleri ve TBLFATUIRS fatura başlık kayıtları. Bu yazıda her iki yaklaşımla gün bazında net ciro ve fatura adedini çıkaran, kopyala-çalıştır SQL’leri vereceğiz. Ayrıca iki tablonun rakamlarının neden uyuşmadığını, hangi durumlarda hangisinin doğru olduğunu açıklayacağız. Tablo yapısıyla ilgili daha geniş bilgi için Netsis Tablo Yapısı Rehberi ve Netsis Stok Hareketleri SQL yazılarına bakabilirsiniz.
Günlük ciro ve fatura sayısı için iki yaklaşım
Netsis’te satış verisine iki farklı tablodan ulaşabilirsiniz:
- Kalem (TBLSTHAR): Her stok hareketi bir satırdır. Çıkış yönlü hareketlerin miktar ile net birim fiyat çarpımı ciroyu verir; iade giriş yönünde otomatik düşer. Ancak hizmet faturaları gibi stok kalemi olmayan evraklar burada yer almaz.
- Başlık (TBLFATUIRS): Fatura başına bir kayıttır. GENELTOPLAM üzerinden ciro, COUNT ile fatura sayısı doğrudan alınır. Hizmet faturaları dahildir, ancak iade faturaları ayrıca ele alınmalıdır.
Aşağıda her iki yaklaşımı örnekleyen sorgular ve farkların nedenini gösteren bir karşılaştırma tablosu var.
Kalemden (TBLSTHAR) günlük net ciro
Bu sorgu, satış faturası ve irsaliye kalemlerindeki çıkış hareketlerini toplayarak günlük ciroyu hesaplar. İade faturaları giriş yönünde olduğu için toplama zaten dahil olmaz, böylece net ciro elde edilir.
SELECT
CAST(STHAR_TARIH AS DATE) AS Tarih,
SUM(STHAR_GCMIK * STHAR_NF) AS NetCiro
FROM TBLSTHAR
WHERE STHAR_FTIRSIP IN ('1', '3') -- Satış faturası ve irsaliye
AND STHAR_GCKOD = 'C' -- Sadece çıkışlar
AND STHAR_TARIH >= '20250601' AND STHAR_TARIH < '20250701'
AND SUBE_KODU = 0 -- Tek şube; gerekirse değiştirin
GROUP BY CAST(STHAR_TARIH AS DATE)
ORDER BY Tarih;
Yalnızca faturalanmış satışları görmek için IN ('1','3') yerine = '1' yapın. İrsaliyeleri dahil etmek fatura kesilmemiş çıkışları da rapora ekler.
Başlıktan (TBLFATUIRS) günlük ciro ve fatura sayısı
Bu sorgu, fatura başlık kayıtlarını kullanarak hem ciro hem fatura adedini getirir. GENELTOPLAM KDV dahil net fatura tutarıdır; KDV hariç çalışmak için BRUTTUTAR kullanılabilir (iskonto kalemde olduğundan başlıkta netleşmez).
SELECT
CAST(TARIH AS DATE) AS Tarih,
COUNT(*) AS FaturaAdedi,
SUM(GENELTOPLAM) AS ToplamCiro
FROM TBLFATUIRS
WHERE FTIRSIP = '1' -- Satış faturası
AND TARIH >= '20250601' AND TARIH < '20250701'
AND SUBE_KODU = 0
GROUP BY CAST(TARIH AS DATE)
ORDER BY Tarih;
İade faturalarını hariç tutmak isterseniz TIPI <> 4 koşulu ekleyin.
İki tablonun rakamları neden farklı olur?
Çoğu zaman kalemden hesaplanan ciro ile başlık toplamı birebir eşleşmez. Sebebini anlamak raporun güvenilirliği için şarttır.
| Konu | TBLSTHAR (Kalem) | TBLFATUIRS (Başlık) |
|---|---|---|
| Hizmet faturaları | Kayıt yok (stok hareketi yok) | Ciroya dahil |
| İade faturaları | Giriş yönünde olduğu için ciroyu otomatik düşer | Aynı fatura tipi (FTIRSIP=1) ile gelir; filtre eklenmezse sayıya ve ciroya eklenir |
| Fatura sayısı | Her kalem ayrı satır; tek fatura birden çok satır üretir | Her fatura 1 satır |
| İrsaliyeler | FTIRSIP=3 dahil edilirse faturalanmamış irsaliyeler eklenir | Fatura başlığı yoksa yer almaz |
Hangisini kullanmalısınız? Eğer amacınız stok hareketiyle ilişkili net satış cirosu ise TBLSTHAR’dan gitmek daha doğrudur. Fatura sayısı ve tüm fatura tiplerini (hizmet dahil) kapsayan ciro için TBLFATUIRS kullanın.
Günlük özeti tek sorguda birleştirme
Aşağıdaki sorgu, her iki tabloyu aynı tarihe göre birleştirir ve aradaki farkı görmenizi sağlar.
SELECT
COALESCE(k.Tarih, b.Tarih) AS Tarih,
KalemCiro,
BaslikCiro,
FaturaAdedi,
BaslikCiro - KalemCiro AS Fark
FROM (
SELECT
CAST(STHAR_TARIH AS DATE) AS Tarih,
SUM(STHAR_GCMIK * STHAR_NF) AS KalemCiro
FROM TBLSTHAR
WHERE STHAR_FTIRSIP IN ('1', '3')
AND STHAR_GCKOD = 'C'
AND STHAR_TARIH >= '20250601' AND STHAR_TARIH < '20250701'
AND SUBE_KODU = 0
GROUP BY CAST(STHAR_TARIH AS DATE)
) k
FULL OUTER JOIN (
SELECT
CAST(TARIH AS DATE) AS Tarih,
SUM(GENELTOPLAM) AS BaslikCiro,
COUNT(*) AS FaturaAdedi
FROM TBLFATUIRS
WHERE FTIRSIP = '1'
AND TIPI <> 4 -- İadeler hariç
AND TARIH >= '20250601' AND TARIH < '20250701'
AND SUBE_KODU = 0
GROUP BY CAST(TARIH AS DATE)
) b ON k.Tarih = b.Tarih
ORDER BY Tarih;
Fark sütunu pozitifse, başlıkta olup kalemde olmayan tutarlar var demektir (genelde hizmet faturası). Eksiyse, iade ya da başka bir etken söz konusu olabilir; filtrelerinizi gözden geçirin.
Sık yapılan hatalar
- SUBE_KODU filtresini unutarak çok şubeli veritabanında bütün şubeleri birbirine karıştırmak.
- TBLSTHAR’da STHAR_FTIRSIP filtrelemeden tüm evrak türlerini (alış, transfer, üretim) rapora dahil etmek.
- Tarih aralığını string olarak doğrudan karşılaştırırken saat bilgisi nedeniyle gün sınırlarında hareket kaçırmak. BETWEEN yerine
>= ... AND < ...ve CAST AS DATE kullanmak daha güvenlidir. - Kalem birim fiyatı (STHAR_NF) ile iadelerin doğru düşüldüğünü varsaymak; ancak STHAR_FTIRSIP’i ‘1’ olarak gelen iade girişleri farklı birim fiyat taşıyabilir. İade düşümünü garantiye almak için ek koşullar gerekebilir.
- Fatura sayısını TBLSTHAR’daki kalem sayısından çıkarmaya çalışmak. Bir fatura birden çok kalem içerir, fatura sayısı için mutlaka TBLFATUIRS kullanın.
Sık sorulanlar
Neden TBLSTHAR’daki günlük ciro ile TBLFATUIRS GENELTOPLAM toplamı tutmuyor? En yaygın sebep hizmet faturalarıdır; HIZMET_FAT=’E’ olan kayıtlar TBLSTHAR’da bulunmaz. Ayrıca faturanın dövizli olması, kur farkı, yuvarlama gibi etkenler de küçük farklara yol açabilir.
Sadece satış faturalarını saymak için hangi tablo daha doğru? Fatura sayısı için TBLFATUIRS kesin ve doğrudur. Kalem tablosu aynı faturaya ait birden çok satır içerdiğinden sayım için uygun değildir.
İade faturalarını düşmek için ne yapmalıyım?
TBLFATUIRS sorgusuna TIPI <> 4 ekleyerek iade faturalarını hariç tutabilirsiniz. Kalem tarafında ise iadeler zaten giriş yönünde (GCKOD=’G’) hareket yarattığı için çıkış toplamına dahil olmaz; ek bir filtreye genelde ihtiyaç duyulmaz.
Hizmet faturalarını da katmak istersem? O zaman TBLFATUIRS’dan gitmek zorundasınız. Ancak stok bazlı detay gerekmiyorsa bu yeterlidir. Detay isterseniz hizmet faturalarının kalemlerini içeren ayrı bir tablo olmadığı için başlıktaki tutarı baz alırsınız.
Erp Asistanı’na ücretsiz üye olun, “geçen ayki günlük satış ciromu ve fatura sayımı getir” deyin; Netsis şemanıza uygun SQL’i saniyeler içinde alın. Ücretsiz üye olun, istediğiniz sorguyu doğal dille alı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.