Logo Cari Bakiye ve Ekstre SQL Sorgusu (Yürüyen Bakiyeli)

Knowledge Base › Logo Veritabanı & SQL

Logo Veritabanı & SQL8 min readNovember 4, 20264 görüntülenme
Logo Cari Bakiye ve Ekstre SQL Sorgusu (Yürüyen Bakiyeli)

Logo Tiger ve Go 3'te SQL ile cari bakiye, belirli tarihteki bakiye ve yürüyen bakiyeli cari ekstre sorguları. CLFLINE alanları ve dönem devri açıklamalı.

Cari hesap bakiyesi ve ekstresi, Logo kullanan her işletmenin en sık ihtiyaç duyduğu rapordur. Logo'nun kendi ekranlarından alınabildiği gibi, SQL ile alındığında Excel'e, bir yönetim paneline veya müşteri portalına doğrudan aktarılabilir. Bu rehberde cari bakiye, belirli bir tarihteki bakiye ve yürüyen bakiyeli cari ekstre sorgularını adım adım veriyoruz.

✅Bu sayfadaki bakiye hesaplama yöntemi, gerçek bir Logo Tiger veritabanında 10.000'den fazla carinin tamamında Logo'nun kendi cari toplamlarıyla birebir aynı sonucu vermiştir.
ℹ️Örneklerde firma 001, dönem 01 kullanılmıştır. Kendi firma ve dönem numaranızla değiştirin.

Cari Hareketler Nerede Tutulur?

TabloAçıklama
LG_001_CLCARDCari hesap kartları (kod, unvan, vergi no…)
LG_001_01_CLFLINECari hesap hareketleri — fatura, tahsilat, ödeme, dekont, çek, kredi kartı…
LV_001_01_GNTOTCLLogo'nun hazır cari toplamları (view)

Faturalar, kasa ve banka işlemleri, çek/senet bordroları — cariyi etkileyen her işlem CLFLINE tablosuna bir satır olarak düşer. Bu yüzden bakiye ve ekstre için tek kaynak bu tablodur.

Temel Alanlar

AlanAçıklama
CLIENTREFCari kartı (CLCARD.LOGICALREF)
DATE_İşlem tarihi
TRCODEHareket türü (aşağıdaki tabloya bakın)
SIGN0 = borç, 1 = alacak
AMOUNTTutar (yerel para birimi)
TRANNOFiş / belge numarası
LINEEXPSatır açıklaması
CANCELLED0 geçerli, 1 iptal

Satış faturası kestiğinizde müşteri borçlanır (SIGN = 0), tahsilat yaptığınızda alacaklanır (SIGN = 1). Bakiye = borçlar toplamı − alacaklar toplamı; pozitif sonuç müşterinin size borcu olduğunu gösterir.

En sık görülen hareket türleri

TRCODEHareket Türü
1Nakit tahsilat
2Nakit ödeme
3Borç dekontu
4Alacak dekontu
5Virman
14Açılış (devir) fişi
20Gelen havale
21Gönderilen havale
31Satınalma faturası
34Alınan hizmet faturası
36Satınalma iade faturası
37Perakende satış faturası
38Toptan satış faturası
39Verilen hizmet faturası
61Çek girişi
63Çek çıkışı (cari hesaba)
70Kredi kartı fişi

1. Tüm Carilerin Bakiyesi

SELECT C.CODE AS CariKodu, C.DEFINITION_ AS Unvan,
       SUM(CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE 0 END) AS Borc,
       SUM(CASE WHEN L.SIGN = 1 THEN L.AMOUNT ELSE 0 END) AS Alacak,
       SUM(CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE -L.AMOUNT END) AS Bakiye
FROM LG_001_CLCARD C
JOIN LG_001_01_CLFLINE L ON L.CLIENTREF = C.LOGICALREF
WHERE L.CANCELLED = 0
GROUP BY C.CODE, C.DEFINITION_
HAVING SUM(CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE -L.AMOUNT END) <> 0
ORDER BY Bakiye DESC

HAVING satırı bakiyesi sıfır olan carileri listeden çıkarır.

Alternatif: Logo'nun hazır toplamları ile

Daha hızlı bir yol olarak Logo'nun hazır cari toplam view'ını kullanabilirsiniz. TOTTYP = 1 yerel para birimi toplamlarıdır; şube ve bölüm bazında satırlar olduğu için cari bazında toplanır.

SELECT C.CODE AS CariKodu, C.DEFINITION_ AS Unvan,
       SUM(G.DEBIT) AS Borc, SUM(G.CREDIT) AS Alacak,
       SUM(G.DEBIT - G.CREDIT) AS Bakiye
FROM LV_001_01_GNTOTCL G
JOIN LG_001_CLCARD C ON C.LOGICALREF = G.CARDREF
WHERE G.TOTTYP = 1
GROUP BY C.CODE, C.DEFINITION_
ORDER BY Bakiye DESC

2. Belirli Bir Tarihteki Bakiye

Ay sonu veya yıl sonu bakiyesi için tarih koşulu eklemek yeterlidir:

SELECT C.CODE AS CariKodu, C.DEFINITION_ AS Unvan,
       SUM(CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE -L.AMOUNT END) AS Bakiye
FROM LG_001_CLCARD C
JOIN LG_001_01_CLFLINE L ON L.CLIENTREF = C.LOGICALREF
WHERE L.CANCELLED = 0
  AND L.DATE_ <= '2026-06-30'
GROUP BY C.CODE, C.DEFINITION_
HAVING SUM(CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE -L.AMOUNT END) <> 0
ORDER BY C.CODE

3. Yürüyen Bakiyeli Cari Ekstre

Tek bir carinin tüm hareketlerini tarih sırasıyla, her satırda o ana kadarki bakiyeyle birlikte listeler. '120.01.001' yerine kendi cari kodunuzu yazın.

SELECT L.DATE_ AS Tarih, L.TRANNO AS BelgeNo,
       CASE L.TRCODE
            WHEN 1 THEN 'Nakit Tahsilat' WHEN 2 THEN 'Nakit Ödeme'
            WHEN 3 THEN 'Borç Dekontu' WHEN 4 THEN 'Alacak Dekontu'
            WHEN 5 THEN 'Virman' WHEN 14 THEN 'Devir'
            WHEN 20 THEN 'Gelen Havale' WHEN 21 THEN 'Gönderilen Havale'
            WHEN 31 THEN 'Satınalma Faturası' WHEN 34 THEN 'Alınan Hizmet Faturası'
            WHEN 36 THEN 'Satınalma İade Faturası' WHEN 37 THEN 'Perakende Satış Faturası'
            WHEN 38 THEN 'Toptan Satış Faturası' WHEN 39 THEN 'Verilen Hizmet Faturası'
            WHEN 61 THEN 'Çek Girişi' WHEN 63 THEN 'Çek Çıkışı'
            WHEN 70 THEN 'Kredi Kartı'
            ELSE CAST(L.TRCODE AS varchar(10)) END AS IslemTuru,
       L.LINEEXP AS Aciklama,
       CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE 0 END AS Borc,
       CASE WHEN L.SIGN = 1 THEN L.AMOUNT ELSE 0 END AS Alacak,
       SUM(CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE -L.AMOUNT END)
           OVER (ORDER BY L.DATE_, L.LOGICALREF ROWS UNBOUNDED PRECEDING) AS Bakiye
FROM LG_001_01_CLFLINE L
JOIN LG_001_CLCARD C ON C.LOGICALREF = L.CLIENTREF
WHERE C.CODE = '120.01.001' AND L.CANCELLED = 0
ORDER BY L.DATE_, L.LOGICALREF
ℹ️Yürüyen bakiye için kullanılan SUM() OVER (... ROWS UNBOUNDED PRECEDING) yapısı SQL Server 2012 ve sonrasında çalışır. Logo'nun desteklediği tüm güncel SQL Server sürümleri bunu destekler.

Belirli tarih aralığı için ekstre (devreden bakiye ile)

Ekstreyi bir tarih aralığına daraltırken, aralığın başındaki bakiyeyi "devreden bakiye" satırı olarak eklemek gerekir:

DECLARE @Cari varchar(50) = '120.01.001',
        @Bas date = '2026-01-01', @Bit date = '2026-03-31';

SELECT CAST(NULL AS datetime) AS Tarih, 0 AS Sira, 'Devreden Bakiye' AS Aciklama,
       CAST(0 AS float) AS Borc, CAST(0 AS float) AS Alacak,
       ISNULL(SUM(CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE -L.AMOUNT END), 0) AS Bakiye
FROM LG_001_01_CLFLINE L
JOIN LG_001_CLCARD C ON C.LOGICALREF = L.CLIENTREF
WHERE C.CODE = @Cari AND L.CANCELLED = 0 AND L.DATE_ < @Bas
UNION ALL
SELECT L.DATE_, L.LOGICALREF, L.LINEEXP,
       CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE 0 END,
       CASE WHEN L.SIGN = 1 THEN L.AMOUNT ELSE 0 END,
       (SELECT ISNULL(SUM(CASE WHEN X.SIGN = 0 THEN X.AMOUNT ELSE -X.AMOUNT END), 0)
          FROM LG_001_01_CLFLINE X
         WHERE X.CLIENTREF = L.CLIENTREF AND X.CANCELLED = 0 AND X.DATE_ < @Bas)
       + SUM(CASE WHEN L.SIGN = 0 THEN L.AMOUNT ELSE -L.AMOUNT END)
           OVER (ORDER BY L.DATE_, L.LOGICALREF ROWS UNBOUNDED PRECEDING)
FROM LG_001_01_CLFLINE L
JOIN LG_001_CLCARD C ON C.LOGICALREF = L.CLIENTREF
WHERE C.CODE = @Cari AND L.CANCELLED = 0
  AND L.DATE_ >= @Bas AND L.DATE_ < DATEADD(day, 1, @Bit)
ORDER BY Tarih, Sira

Dönem Geçişlerinde Dikkat Edilmesi Gerekenler

Yeni döneme geçildiğinde Logo, her carinin önceki dönem sonu bakiyesini yeni dönemin ilk gününe açılış (devir) fişi olarak yazar (TRCODE = 14, açıklaması genellikle "Önceki Dönemden Devir"). Bu sayede:

  • Yeni dönemin CLFLINE tablosu tek başına doğru bakiyeyi verir; önceki dönemi eklemenize gerek yoktur.
  • Birden fazla dönemi birleştirerek ekstre alıyorsanız (UNION ALL), sonraki dönemlerin devir satırlarını (TRCODE = 14) hariç tutun, yoksa bakiye iki kez sayılır.
⚠️Dönem devri yapılmadan yeni dönemde işlem girilmişse yeni dönemin bakiyeleri eksik görünür. Devir işleminin tamamlandığını yeni dönemde TRCODE = 14 satırlarının varlığından kontrol edebilirsiniz.

Sık Sorulan Sorular

Bakiye Logo ekranındakiyle tutmuyor, neden?

En sık sebepler: iptal edilmiş fişlerin (CANCELLED = 1) toplama girmesi, yanlış dönem tablosunun kullanılması veya şube / bölüm filtresinin farklı olmasıdır. Ayrıca Logo ekranında döviz veya raporlama dövizi seçiliyse tutarlar farklı görünecektir; bu sorgular yerel para birimi (AMOUNT) üzerinden hesaplar.

Sadece müşterileri (alıcıları) nasıl listelerim?

CLCARD.CARDTYPE alanını kullanın: 1 alıcı, 2 satıcı, 3 alıcı + satıcı. Örneğin WHERE C.CARDTYPE IN (1, 3) yalnızca müşterileri getirir.

Vadesi geçmiş alacakları nasıl bulurum?

Vade bilgisi PAYTRANS tablosundadır. Hazır sorgu için SQL rapor sorguları rehberimize bakabilirsiniz.


Cari ekstrelerinizi müşterilerinize otomatik e-posta ile göndermek, bir müşteri portalında göstermek veya Excel'e bağlamak istiyorsanız Logo iş ortağı olarak ekibimiz yardımcı olabilir.

Knowledge Base
/logo-cari-bakiye-ekstre-sql