ERP Asistanı Dal Net
Logo SQL

Logo Cari Yaşlandırma SQL: PAYTRANS ile Vade Analizi

Logo ERP'de PAYTRANS tablosuyla cari yaşlandırma ve vadesi geçen alacak analizi yapın. 30, 60, 90 gün kova sorguları ve SQL örnekleri rehberimizde.

Erp Asistanı Erp Asistanı Editör ekibi 7 dk okuma
Logo Cari Yaşlandırma SQL: PAYTRANS ile Vade Analizi

Logo ERP (GO 3, Tiger 3) veritabanında cari yaşlandırma ve vadesi geçen alacak raporu hazırlamak isteyenlerin düştüğü en yaygın tuzak, cari hareket tablosu olan CLFLINE üzerinden tahsilatları faturalarla FIFO yöntemiyle eşleştirmeye çalışmaktır. Oysa Logo, fatura veya finans belgesi kaydedildiği anda ödeme planına bağlı olarak borç takip kayıtlarını doğrudan PAYTRANS tablosuna yazar. Faturanın vadesi, taksit kırılımları ve yapılan kısmi tahsilatlar bu tabloda satır satır izlenir.

Bu rehberde; PAYTRANS tablosunun borç takip mimarisini, açık vade satırlarının nasıl filtrelendiğini ve finans yönetiminin temel göstergesi olan 0-30, 31-60, 61-90 ile 90+ gün cari yaşlandırma kova raporunu SQL ile nasıl alacağınızı inceleyeceğiz.

Logo Tablo Adlandırma ve Genel Kurallar

Sorguları çalıştırmadan önce Logo veritabanı mimarisinin temel kurallarını dikkate almalısınız:

  1. Firma ve Dönem Önekleri: Aşağıdaki sorgularda tablolar mantıksal adlarıyla (PAYTRANS, CLCARD, INVOICE) verilmiştir. Kendi SQL Server veritabanınızda çalıştırırken kart tablolarının başına LG_{firma}_ (örneğin LG_001_CLCARD), hareket tablolarının başına ise LG_{firma}_{dönem}_ (örneğin LG_001_01_PAYTRANS) önekini eklemeniz gerekir. Mimari detaylar için Logo tablo yapısı rehberi yazımızı inceleyebilirsiniz.
  2. Ters Mantık Aktiflik ve İptal Kontrolü: Logo kartlarında ACTIVE = 0 aktif kart demektir (ACTIVE = 1 pasiftir). Hareket tablolarında ise geçerli kayıtlar CANCELLED = 0 filtresiyle seçilir.
  3. Sayısal Anahtarlar: Tablolar cari kodu veya fatura numarası ile değil, sistemin otomatik ürettiği LOGICALREF anahtarıyla birleştirilir (PAYTRANS.CARDREF = CLCARD.LOGICALREF).

PAYTRANS Tablo Mimarisi ve Borç Takip Mantığı

Borç takip sistemi, her satış ve alış belgesi için vadelere bölünmüş ödeme satırları üretir. Tablonun çekirdek kolonları şu şekildedir:

Kolon Adı Veri Tipi İşlevi ve Raporlama Kuralı
CARDREF int Cari kart referansı (CLCARD.LOGICALREF).
FICHEREF int Kaynak fatura referansı (INVOICE.LOGICALREF).
DATE_ datetime Vade tarihi (ödemenin beklendiği gün).
PROCDATE datetime İşlem veya fatura tarihi.
TOTAL float İlgili vade satırının toplam borç tutarı.
PAID float Bu vade satırına yapılan tahsilat veya kapatma tutarı.
SIGN smallint İşlem yönü: 0 = Borç (Müşteri alacağı), 1 = Alacak (Tedarikçi borcu).
CANCELLED smallint İptal durumu: 0 = Aktif, 1 = İptal.

Bir vade satırının açık (ödenmemiş) olduğunu PAID < TOTAL koşuluyla anlarız. Satırdan kalan tahsil edilmemiş net alacak ise TOTAL - PAID farkıdır. Tarih analizinde PROCDATE faturanın kesildiği tarihi, DATE_ ise vadenin dolduğu günü temsil eder. Yaşlandırma hesaplarında mutlaka DATE_ kolonu baz alınmalıdır.

1. Açık Vade Satırları ve Gecikme Günleri

Müşterilerden tahsil edilmemiş tüm açık fatura ve taksit satırlarını, vade tarihlerine ve gecikme günlerine göre listelemek için aşağıdaki sorguyu kullanabilirsiniz:

SELECT
    C.CODE AS cari_kodu,
    C.DEFINITION_ AS cari_unvani,
    P.PROCDATE AS fatura_tarihi,
    P.DATE_ AS vade_tarihi,
    P.TOTAL AS toplam_tutar,
    P.PAID AS odenen_tutar,
    (P.TOTAL - P.PAID) AS kalan_tutar,
    DATEDIFF(DAY, P.DATE_, GETDATE()) AS gecikme_gunu
FROM PAYTRANS P
JOIN CLCARD C ON C.LOGICALREF = P.CARDREF
WHERE P.CANCELLED = 0
  AND C.ACTIVE = 0
  AND P.SIGN = 0
  AND P.PAID < P.TOTAL
ORDER BY P.DATE_ ASC;

Bu raporu SQL yazmadan, Türkçe sorarak alın: Logo raporlama

Bu sorgu, işletmenizin nakit akışında geciken tahsilatları gün bazında tespit etmek için temel kaynaktır. Operasyonel takip adımları için vadesi geçen alacak takibi içeriğimize bakabilirsiniz.

2. Fatura ve Taksit Detaylı Açık Alacaklar

Bir fatura birden fazla taksite bölünmüşse PAYTRANS tablosunda aynı faturaya (FICHEREF) ait birden fazla satır oluşur. Fatura numarasıyla birlikte açık taksit durumunu görmek için INVOICE tablosuyla bağlantı kurulur:

SELECT
    I.FICHENO AS fatura_no,
    C.CODE AS cari_kodu,
    C.DEFINITION_ AS cari_unvani,
    I.DATE_ AS fatura_tarihi,
    P.DATE_ AS taksit_vadesi,
    P.TOTAL AS taksit_tutari,
    P.PAID AS tahsil_edilen,
    (P.TOTAL - P.PAID) AS kalan_bakiye,
    DATEDIFF(DAY, P.DATE_, GETDATE()) AS gecikme_gunu
FROM PAYTRANS P
JOIN CLCARD C ON C.LOGICALREF = P.CARDREF
JOIN INVOICE I ON I.LOGICALREF = P.FICHEREF
WHERE P.CANCELLED = 0
  AND I.CANCELLED = 0
  AND C.ACTIVE = 0
  AND P.SIGN = 0
  AND P.PAID < P.TOTAL
ORDER BY I.DATE_ DESC, P.DATE_ ASC;

Genel hesap ekstresi ile borç takibi arasındaki farkları anlamak adına Logo stok ve cari bakiye hesaplama rehberinde yer alan CLFLINE mantığını da incelemeniz önerilir.

3. Cari Bazında Yaşlandırma Kovaları (0-30, 31-60, 61-90, 90+ Gün)

Finans raporlamalarında müşterilerin borç dağılımı belirli vade aralıklarına (kovalara) bölünerek özetlenir. Aşağıdaki sorgu, her cari için vadesi henüz gelmemiş tutarı ve vadesi geçmiş alacakları 30'ar günlük dilimler halinde gruplar:

SELECT
    C.CODE AS cari_kodu,
    C.DEFINITION_ AS cari_unvani,
    SUM(CASE WHEN DATEDIFF(DAY, P.DATE_, GETDATE()) <= 0
             THEN (P.TOTAL - P.PAID) ELSE 0 END) AS vadesi_gelmemis,
    SUM(CASE WHEN DATEDIFF(DAY, P.DATE_, GETDATE()) BETWEEN 1 AND 30
             THEN (P.TOTAL - P.PAID) ELSE 0 END) AS gun_01_30,
    SUM(CASE WHEN DATEDIFF(DAY, P.DATE_, GETDATE()) BETWEEN 31 AND 60
             THEN (P.TOTAL - P.PAID) ELSE 0 END) AS gun_31_60,
    SUM(CASE WHEN DATEDIFF(DAY, P.DATE_, GETDATE()) BETWEEN 61 AND 90
             THEN (P.TOTAL - P.PAID) ELSE 0 END) AS gun_61_90,
    SUM(CASE WHEN DATEDIFF(DAY, P.DATE_, GETDATE()) > 90
             THEN (P.TOTAL - P.PAID) ELSE 0 END) AS gun_90_uzeri,
    SUM(CASE WHEN DATEDIFF(DAY, P.DATE_, GETDATE()) > 0
             THEN (P.TOTAL - P.PAID) ELSE 0 END) AS toplam_vadesi_gecen,
    SUM(P.TOTAL - P.PAID) AS genel_acik_alacak
FROM PAYTRANS P
JOIN CLCARD C ON C.LOGICALREF = P.CARDREF
WHERE P.CANCELLED = 0
  AND C.ACTIVE = 0
  AND P.SIGN = 0
  AND P.PAID < P.TOTAL
GROUP BY C.CODE, C.DEFINITION_
HAVING SUM(P.TOTAL - P.PAID) > 0
ORDER BY toplam_vadesi_gecen DESC;

4. Vadesi En Çok Geciken 20 Açık Alacak Kalemi

Tahsilat biriminin acil aksiyon alması gereken en riskli kalemleri listelemek için gecikme gününe göre sıralı bir liste oluşturulabilir:

SELECT TOP 20
    C.CODE AS cari_kodu,
    C.DEFINITION_ AS cari_unvani,
    P.DATE_ AS vade_tarihi,
    DATEDIFF(DAY, P.DATE_, GETDATE()) AS gecikme_gunu,
    (P.TOTAL - P.PAID) AS kalan_alacak
FROM PAYTRANS P
JOIN CLCARD C ON C.LOGICALREF = P.CARDREF
WHERE P.CANCELLED = 0
  AND C.ACTIVE = 0
  AND P.SIGN = 0
  AND P.PAID < P.TOTAL
  AND DATEDIFF(DAY, P.DATE_, GETDATE()) > 0
ORDER BY gecikme_gunu DESC, kalan_alacak DESC;

Sık yapılan hatalar

  • DATE_ yerine PROCDATE kullanmak: PROCDATE evrak tarihidir, DATE_ ise vadedir. Yaşlandırma hesabında PROCDATE kullanılırsa vadesi gelmemiş ancak 40 gün önce kesilmiş bir fatura haksız yere vadesi geçmiş görünür.
  • SIGN = 0 filtresini unutmak: SIGN değeri 0 olan kayıtlar müşteriden alacakları, 1 olanlar tedarikçiye borçları gösterir. Filtre verilmezse işletmenin ödeyeceği borçlar ile tahsil edeceği tutarlar birbirine girer.
  • Taksitli faturayı tek satır varsaymak: Taksitli bir satışta INVOICE tablosunda 1 satır varken PAYTRANS tablosunda taksit sayısı kadar satır yer alır. Fatura toplam tutarı aranıyorsa SUM(TOTAL) kullanılmalıdır.
  • ACTIVE = 0 ve CANCELLED = 0 kontrollerini atlamak: Logo'da pasif kartlar ACTIVE = 1 değerini alır; iptal edilmiş evrak ve vade kayıtları ise CANCELLED = 1 olur. Bu kayıtlar filtrelenmezse tutarlar hatalı çıkar.
  • Firma/dönem öneklerini eklememek: PAYTRANS ve CLCARD mantıksal adlardır. Sorgu çalıştırılmadan önce LG_{firma}_{dönem}_PAYTRANS ve LG_{firma}_CLCARD biçimine dönüştürülmelidir.

Sık sorulanlar

Cari bakiye ile açık vade toplamı neden tutmaz? CLFLINE tablosu borç ve alacak hareketlerini doğrudan tutar; ancak tahsilat makbuzu veya dekont girildiğinde borç takip penceresinden fatura ile eşleştirilmediyse (kapatma yapılmadıysa) fatura PAYTRANS tablosunda açık (PAID < TOTAL) görünmeye devam eder.

Vadesi henüz gelmemiş faturalar kovalarda nerede yer alır? DATEDIFF(DAY, P.DATE_, GETDATE()) <= 0 koşulu, vadesi bugün veya gelecekte olan satırları yakalar. Yukarıdaki kova sorgumuzda bu tutarlar vadesi_gelmemis sütununda toplanır.

SIGN kolonu satış iade faturalarında nasıl çalışır? Satış faturası SIGN = 0 (borç) üretirken, satış iade faturası SIGN = 1 (alacak) satırı üretir. Yaşlandırma sorgularında net alacağı hesaplamak için müşteri iadeleri ayrıca incelenmelidir.

Kısmi tahsilat yapıldığında PAYTRANS nasıl güncellenir? Tahsilat makbuzu faturayla ilişkilendirildiğinde Logo ilgili PAYTRANS satırının PAID kolonunu tahsilat tutarı kadar artırır. Satır silinmez; TOTAL - PAID formülüyle kalan bakiye güncel kalır.


Logo tablolarındaki borç takip yapılarını elle sorgulamak yerine Erp Asistanı ile tanışın →. Erp Asistanı, firmanıza özel tablo öneklerini ve LOGICALREF ilişkilerini otomatik çözerek finans analizlerinizi dakikalar içinde hazırlar.

Bu yazıyı paylaş
Logo raporlama

Bu raporu SQL yazmadan, Türkçe sorarak 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.