Erp Asistanı Erp Asistanı
Netsis SQL

Netsis Cari Yaşlandırma SQL: Vadesi Geçen Alacak Kovaları

8 dk okuma Erp Asistanı
Netsis Cari Yaşlandırma SQL: Vadesi Geçen Alacak Kovaları

Netsis ERP kullanan finans ve muhasebe ekiplerinin en çok ihtiyaç duyduğu raporların başında cari yaşlandırma (aging) gelir. Alacakların ne kadar süredir tahsil edilemediğini görmek, nakit akışını yönetmek ve tahsilat stratejilerini belirlemek için hayati önem taşır. Netsis'te cari hareketler Netsis Cari Ekstre ve Bakiye SQL yazımızda da bahsettiğimiz gibi TBLCAHAR tablosunda tutulur. Bu yazıda, TBLCAHAR ve TBLCASABIT tablolarını kullanarak vadesi geçen alacakları 0-30, 31-60, 61-90 ve 90+ gün gibi "kovalara" (buckets) bölen, doğrudan SQL Server üzerinde çalıştırabileceğiniz hazır T-SQL sorgularını paylaşacağız. Netsis'in genel veri mimarisi hakkında daha fazla bilgi için Netsis tablo yapısı rehberi yazımıza göz atabilirsiniz.

Netsis Cari Yaşlandırma Mantığı ve TBLCAHAR

Netsis'te sağlıklı bir yaşlandırma raporu hazırlamak için VADE_TARIHI, BORC, ALACAK ve KAPATILMIS_TUTAR kolonlarını doğru analiz etmek gerekir. Eğer sisteminizde faturalar ile ödemeler düzenli olarak eşleştiriliyorsa (yani cari kapama işlemi yapılıyorsa), açık hesap (open-item) yaklaşımı en doğru sonucu verir. Bu yaklaşımda, borç hareketinin orijinal tutarından kapatılmış tutar düşülerek kalan bakiye bulunur ve vade tarihine göre yaşlandırılır.

Kolon Adı Veri Tipi Açıklama Yaşlandırmadaki Rolü
CARI_KOD varchar(15) Cari hesap kodu Gruplama ve filtreleme
VADE_TARIHI datetime Belgenin vade tarihi DATEDIFF ile gün farkı hesabı
BORC decimal Borç tutarı (TL) Alacak yaşlandırmasında ana tutar
ALACAK decimal Alacak tutarı (TL) Ödemeler ve iadeler
KAPATILMIS_TUTAR decimal Kapatılan tutar Açık kalan bakiyeyi bulma (BORC - KAPATILMIS_TUTAR)
HKA char(1) Açık/Kapalı durumu 'A' (Açık) olan hareketleri filtreleme
SUBE_KODU smallint Şube kodu Çok şubeli yapılarda filtreleme

1. Açık Hesap Yöntemiyle Basit Vade Analizi

Bu sorgu, henüz tamamen kapatılmamış (HKA = 'A') borç hareketlerini baz alır. Her bir hareketin kalan açık tutarını hesaplar ve vade tarihinin bugünden ne kadar uzak olduğuna bakarak ilgili gün kovasına yerleştirir.

SELECT
    C.CARI_KOD,
    S.CARI_ISIM,
    SUM(C.BORC - C.KAPATILMIS_TUTAR) AS [Toplam Acik Borc],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) <= 0 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [Vadesi Gelmemis],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) BETWEEN 1 AND 30 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [1-30 Gun Gecen],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) BETWEEN 31 AND 60 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [31-60 Gun Gecen],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) BETWEEN 61 AND 90 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [61-90 Gun Gecen],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) > 90 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [90+ Gun Gecen]
FROM TBLCAHAR C
INNER JOIN TBLCASABIT S ON C.CARI_KOD = S.CARI_KOD
WHERE C.HKA = 'A'
  AND C.BORC > 0
  AND C.SUBE_KODU = 0
GROUP BY C.CARI_KOD, S.CARI_ISIM
HAVING SUM(C.BORC - C.KAPATILMIS_TUTAR) > 0
ORDER BY [Toplam Acik Borc] DESC;

2. Belge Bazında Detaylı Vade Aşım Listesi

Finans ekibinin müşterileri arayıp tahsilat yaparken kullanacağı, hangi faturanın kaç gün geciktiğini gösteren detaylı liste sorgusudur. Doğrudan açık fatura bazında gecikme gününü hesaplar.

SELECT
    C.CARI_KOD,
    S.CARI_ISIM,
    C.BELGE_NO,
    C.TARIH AS [Belge Tarihi],
    C.VADE_TARIHI AS [Vade Tarihi],
    C.BORC AS [Orijinal Tutar],
    (C.BORC - C.KAPATILMIS_TUTAR) AS [Kalan Borc],
    DATEDIFF(day, C.VADE_TARIHI, GETDATE()) AS [Gecikme Gun Sayisi],
    CASE
        WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) <= 0 THEN 'Vadesi Gelmedi'
        WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) BETWEEN 1 AND 30 THEN '0-30 Gun'
        WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) BETWEEN 31 AND 60 THEN '31-60 Gun'
        WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) BETWEEN 61 AND 90 THEN '61-90 Gun'
        ELSE '90+ Gun'
    END AS [Vade Durumu]
FROM TBLCAHAR C
INNER JOIN TBLCASABIT S ON C.CARI_KOD = S.CARI_KOD
WHERE C.HKA = 'A'
  AND C.BORC > 0
  AND C.SUBE_KODU = 0
ORDER BY C.CARI_KOD, C.VADE_TARIHI;

3. Plasiyer Bazında Vadesi Geçen Alacak Özeti

Satış temsilcilerinin (plasiyerlerin) kendi portföylerindeki gecikmiş alacakları takip edebilmesi için hazırlanan özet rapordur. Hangi plasiyerin ne kadarlık gecikmiş alacak riski taşıdığını net şekilde gösterir.

SELECT
    ISNULL(C.PLASIYER_KODU, 'TANIMSIZ') AS [Plasiyer Kodu],
    SUM(C.BORC - C.KAPATILMIS_TUTAR) AS [Toplam Acik Alacak],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) <= 0 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [Vadesi Gelmemis],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) > 0 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [Toplam Vadesi Gecen],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) BETWEEN 1 AND 30 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [1-30 Gun],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) BETWEEN 31 AND 90 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [31-90 Gun],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) > 90 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [90+ Gun]
FROM TBLCAHAR C
WHERE C.HKA = 'A'
  AND C.BORC > 0
  AND C.SUBE_KODU = 0
GROUP BY C.PLASIYER_KODU
ORDER BY [Toplam Vadesi Gecen] DESC;

4. Dövizli Cari Yaşlandırma Raporu

Eğer dövizli çalışan carileriniz varsa, yerel para birimi (TL) üzerinden yaşlandırma yapmak kur dalgalanmaları nedeniyle yanıltıcı olabilir. Bu sorgu, döviz türü bazında açık borçları ve vadesi geçen tutarları listeler.

SELECT
    C.CARI_KOD,
    S.CARI_ISIM,
    C.DOVIZ_TURU AS [Doviz Tipi],
    SUM(C.DOVIZ_TUTAR) AS [Toplam Doviz Borc],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) > 0 THEN C.DOVIZ_TUTAR ELSE 0 END) AS [Vadesi Gecen Doviz Tutar]
FROM TBLCAHAR C
INNER JOIN TBLCASABIT S ON C.CARI_KOD = S.CARI_KOD
WHERE C.HKA = 'A'
  AND C.BORC > 0
  AND C.DOVIZ_TURU > 0
  AND C.SUBE_KODU = 0
GROUP BY C.CARI_KOD, S.CARI_ISIM, C.DOVIZ_TURU
ORDER BY C.CARI_KOD;

5. Risk Limiti Aşan ve Vadesi Geçen Bakiyesi Olan Cariler

Bu gelişmiş sorgu, TBLCASABIT tablosundaki RISK_SINIRI değerini aşan ve aynı zamanda 30 günden fazla gecikmiş alacağı bulunan riskli müşterileri listeler. Finansal risk yönetiminde erken uyarı sistemi olarak kullanılabilir.

SELECT
    S.CARI_KOD,
    S.CARI_ISIM,
    S.RISK_SINIRI AS [Risk Limiti],
    SUM(C.BORC - C.ALACAK) AS [Guncel Net Bakiye],
    SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) > 30 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) AS [30+ Gun Gecikmis Alacak]
FROM TBLCASABIT S
INNER JOIN TBLCAHAR C ON S.CARI_KOD = C.CARI_KOD
WHERE S.SUBE_KODU = 0
GROUP BY S.CARI_KOD, S.CARI_ISIM, S.RISK_SINIRI
HAVING SUM(C.BORC - C.ALACAK) > S.RISK_SINIRI
   AND SUM(CASE WHEN DATEDIFF(day, C.VADE_TARIHI, GETDATE()) > 30 THEN C.BORC - C.KAPATILMIS_TUTAR ELSE 0 END) > 0
ORDER BY [Guncel Net Bakiye] DESC;

Netsis veritabanınızda daha farklı raporlar geliştirmek isterseniz Netsis Hazır SQL Sorguları rehberimizdeki diğer örnekleri de inceleyebilirsiniz.

Sık yapılan hatalar

  • SUBE_KODU filtresinin unutulması: Netsis'te hareketler şube bazlı tutulur. SUBE_KODU filtresi eklenmezse tüm şubelerin verileri birbirine karışır ve yanlış bakiye/yaşlandırma sonuçları üretilir.
  • Kapatılmamış hareketlerin göz ardı edilmesi: KAPATILMIS_TUTAR kolonu güncel değilse veya Netsis'te "Cari Yaşlandırma / Eşleme" işlemi düzenli çalıştırılmadıysa, HKA = 'A' filtresi yanıltıcı olabilir. Bu durumda borç ve alacakların tamamını FIFO mantığıyla dağıtan özel algoritmalar kullanılmalıdır.
  • Vade tarihi boş olan kayıtlar: VADE_TARIHI alanı girilmemiş veya NULL olan kayıtlar DATEDIFF fonksiyonunda beklenmedik sonuçlar (veya 1900-01-01 varsayımı nedeniyle aşırı yüksek gecikme günleri) üretebilir. Sorgularınızda vade tarihinin doğruluğunu kontrol edin.
  • İade faturalarının borç gibi algılanması: İade faturaları alacak kaydı oluşturur. Yaşlandırma yaparken borç ve alacak yönlerine dikkat edilmeli, sadece borç hareketleri (BORC > 0) yaşlandırılmalıdır.

Sık sorulanlar

Soru? Netsis'te yaşlandırma raporunun doğru çalışması için cari eşleme yapmak zorunlu mu? Cevap: Evet. Eğer açık hesap (open-item) yöntemiyle KAPATILMIS_TUTAR üzerinden net bir yaşlandırma yapmak istiyorsanız, faturalar ile ödemelerin/tahsilatların eşleştirilmiş olması gerekir. Aksi takdirde tüm faturalar tamamen açık görünür.

Soru? Vade tarihi girilmemiş hareketler için varsayılan vadeyi nasıl hesaplarız? Cevap: TBLCASABIT tablosundaki VADE_GUNU kolonunu kullanarak, eğer VADE_TARIHI boşsa DATEADD(day, S.VADE_GUNU, C.TARIH) formülüyle dinamik bir vade tarihi üretebilirsiniz.

Soru? Bu sorgular çok şubeli Netsis veritabanlarında nasıl çalıştırılmalı? Cevap: Sorgulardaki WHERE C.SUBE_KODU = 0 filtresini, raporlamak istediğiniz şubenin koduyla değiştirmeli veya konsolide bir rapor için bu filtreyi kaldırıp GROUP BY alanlarına C.SUBE_KODU kolonunu eklemelisiniz.


Cari yaşlandırma ve vade analizleri finansal sağlığınızın aynasıdır. Netsis veritabanınızdan bu verileri çekmek ve analiz etmek için SQL sorgularını özelleştirebilirsiniz. Erp Asistanı'na ücretsiz üye olarak, veritabanı şemanıza en uygun SQL sorgularını doğal dille sorarak saniyeler içinde üretebilirsiniz.

Ü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.