Erp Asistanı Erp Asistanı
Netsis SQL

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ı Erp Asistanı Editör ekibi 6 dk okuma
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ı 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 →

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.