Cari Hesap Ekstresi SQL Sorgusu (Logo Tiger SQL Stored Procedure)

Logo Tiger Cari Hesap Ekstresi İçin SQL Stored Procedure

Logo Tiger kullanan firmalarda cari hesap ekstresi alma, finans ve muhasebe ekiplerinin en sık ihtiyaç duyduğu işlemlerden biridir. Özellikle çoklu firma yapısında çalışan şirketlerde, doğru firma veritabanından ve doğru cari koda göre ekstre alabilmek büyük önem taşır.

Bu sayfada paylaştığım CARI_HESAP_EKSTRE stored procedure’ü, başlangıç ve bitiş tarihine göre ilgili cari hesabın hareketlerini işlem türü bazında ve yürüyen bakiye mantığıyla listeler.

Ayrıca başlangıç tarihinden önceki hareketleri toplu şekilde devir olarak gösterir. Böylece alınan çıktı, Logo’da gördüğünüz cari hesap ekstresinin birebir aynısına çok yakın ve pratik bir yapı sunar.


Bu Stored Procedure Ne İşe Yarar?

Bu prosedür ile:

  • Belirli bir firma numarası için cari hesap ekstresi alınabilir
  • İstenen cari kod bazında hareketler listelenebilir
  • Başlangıç tarihinden önceki kayıtlar devreden bakiye olarak gösterilir
  • Başlangıç ve bitiş tarihi arasındaki işlemler yürüyen bakiye ile izlenebilir
  • İşlemler fiş türüne göre açıklamalı şekilde raporlanır
  • Çoklu firma ile çalışan yapılarda istenilen firmaya göre ayrı ekstre alınabilir

Prosedürün Çalışma Mantığı

CARI_HESAP_EKSTRE prosedürü, Logo Tiger veritabanındaki cari hareketleri ilgili firma tablosundan çekerek ekstre oluşturur. Prosedür içinde LG_XXX_01_CLFLINE ve LG_XXX_CLCARD tabloları dinamik olarak kullanılır. Firma numarası parametre ile verildiği için her firma için ayrı ayrı kullanım mümkündür.

Bu yapı sayesinde:

  • Cari kartın LOGICALREF bilgisi koddan bulunur
  • Bitiş tarihine kadar olan tüm hareketler çekilir
  • Başlangıç tarihinden önceki toplam borç/alacak hesaplanır
  • Bu toplam “Devreden Durum” satırı olarak eklenir
  • Başlangıç tarihinden sonraki işlemler sırayla işlenerek bakiye hesaplanır

Prosedür Parametreleri

Bu stored procedure aşağıdaki parametreleri alır:

1) @DbName

İşlem yapılacak veritabanı adıdır.
Örnek: melihdb

2) @FirmaNr

Logo firma numarasıdır.
Örnek: 002, 003, 032

Bu parametreye göre sorgu ilgili firma tablolarına yönlenir.
Örneğin 002 verildiğinde LG_002_CLCARD ve LG_002_01_CLFLINE tabloları kullanılır.

3) @CariKod

Ekstresi alınacak cari hesabın kodudur.

4) @BaslangicTarihi

Ekstrenin başlangıç tarihidir.
Bu tarihten önceki işlemler devir olarak gösterilir.

5) @BitisTarihi

Ekstrenin bitiş tarihidir.
Bu tarihe kadar olan hareketler ekstreye dahil edilir.

USE [melihdb]
GO
/****** Object:  StoredProcedure [dbo].[CARI_HESAP_EKSTRE]    Script Date: 24.03.2026 11:08:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[CARI_HESAP_EKSTRE]
@DbName VARCHAR(50),
@FirmaNr VARCHAR(50),
@CariKod VARCHAR(50),
@BaslangicTarihi DATE,
@BitisTarihi DATE
AS
BEGIN
SET NOCOUNT ON;
DECLARE @OrderNo INT,
@LOGICALREF INT,
@Tarih DATE,
@Saat INT,
@FisNo VARCHAR(200),
@FisTuru VARCHAR(200),
@Aciklama VARCHAR(400),
@Borc DECIMAL(18,2),
@Alacak DECIMAL(18,2);
DECLARE @SQL NVARCHAR(MAX);
SET @SQL = N’
USE ‘+@DbName+’
SELECT
ROW_NUMBER() OVER(ORDER BY EX.DATE_, EX.FTIME ASC) AS OrderNo,
EX.LOGICALREF,
EX.DATE_ AS Tarih,
EX.FTIME AS Saat,
EX.TRANNO AS FisNo,
CASE WHEN EX.MODULENR = 4
THEN (CASE EX.TRCODE WHEN 31 THEN ”Satınalma Faturası”
  WHEN 32 THEN ”Perakende Satış İade Faturası”
  WHEN 33 THEN ”Toptan Satış İade Faturası”
  WHEN 34 THEN ”Alınan Hizmet Faturası”
  WHEN 36 THEN ”Satınalma iade Faturası”
  WHEN 37 THEN ”Perakende Satış Faturası”
  WHEN 38 THEN ”Toptan Satış Faturası”
  WHEN 39 THEN ”Verilen Hizmet Faturası”
  WHEN 43 THEN ”Satınalma Fiyat Farkı Faturası”
  WHEN 44 THEN ”Satış Fiyat Farkı Faturası”
  WHEN 56 THEN ”Müstahsil Makbuzu”
ELSE ”” END)
WHEN EX.MODULENR = 7
THEN (CASE EX.TRCODE WHEN 20 THEN ”Gelen Havale”
  WHEN 21 THEN ”Gönderilen Havale”
  WHEN 24 THEN ”Döviz Alış Belgesi”
  WHEN 25 THEN ”Döviz Satış Belgesi”
  WHEN 28 THEN ”Alınan Hizmet Faturası”
  WHEN 29 THEN ”Verilen Hizmet Faturası”
  WHEN 30 THEN ”Müstahsil Makbuzu” ELSE ”” END)
WHEN EX.MODULENR = 6
THEN (CASE EX.TRCODE WHEN 61 THEN ”Çek Girişi”
  WHEN 62 THEN ”Senet Girişi”
  WHEN 63 THEN ”Çek Çıkış (Cari Hesaba)”
  WHEN 64 THEN ”Senet Çıkış (Cari Hesaba)”
  ELSE ”” END)
WHEN EX.MODULENR IN(5, 10)
THEN (CASE EX.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 Fişi”
  WHEN 6 THEN ”Kur Farkı İşlemi”
  WHEN 12 THEN ”Özel Fiş”
  WHEN 14 THEN ”Açılış Fişi”
  WHEN 41 THEN ”Verilen Vade Farkı Faturası”
  WHEN 42 THEN ”Alınan Vade Farkı Faturası”
  WHEN 45 THEN ”Verilen Serbest Meslek Makbuzu”
  WHEN 46 THEN ”Alınan Serbest Meslek Makbuzu”
  WHEN 70 THEN ”Kredi Kartı Fişi”
  WHEN 71 THEN ”Kredi Kartı İade Fişi”
  WHEN 72 THEN ”Firma Kredi Kartı Fişi”
  WHEN 73 THEN ”Firma Kredi Kartı İade Fişi”
  ELSE ”” END)
ELSE ”” END AS FisTuru,
EX.LINEEXP AS Aciklama,
CASE WHEN EX.SIGN = 0 THEN EX.AMOUNT ELSE 0 END AS Borc,
CASE WHEN EX.SIGN = 1 THEN EX.AMOUNT ELSE 0 END AS Alacak
–FROM LV_’+@FirmaNr+’_01_CLEKSTRE EX
FROM LG_’+@FirmaNr+’_01_CLFLINE EX
WHERE EX.CLIENTREF = (SELECT LOGICALREF FROM LG_’+@FirmaNr+’_CLCARD WHERE CODE = ”’ +@CariKod+”’ )
AND EX.DATE_ <= ”’+CONVERT(VARCHAR, @BitisTarihi, 23)+”’ AND EX.CANCELLED = 0
–AND UPPER(EX.SPECODE) LIKE (CASE WHEN EX.MODULENR = 5 AND (EX.TRCODE = 14 OR EX.TRCODE = 5) THEN ”%%” END)
ORDER BY Tarih, Saat’;
DECLARE @EKSTRETABLE TABLE
(
OrderNo INT,
LOGICALREF INT,
Tarih DATE,
Saat INT,
FisNo VARCHAR(200),
FisTuru VARCHAR(200),
Aciklama VARCHAR(400),
Borc DECIMAL(18,2),
Alacak DECIMAL(18,2)
)
DECLARE @EKSTRETABLEBAKIYELI TABLE
(
OrderNo INT,
LOGICALREF INT,
Tarih DATE,
Saat int,
FisNo VARCHAR(200),
FisTuru VARCHAR(200),
Aciklama VARCHAR(400),
Borc DECIMAL(18,2),
Alacak DECIMAL(18,2),
Bakiye DECIMAL(18,2),
Durum VARCHAR(1)
)
INSERT INTO @EKSTRETABLE (OrderNo, LOGICALREF, Tarih, Saat, FisNo, FisTuru, Aciklama, Borc,Alacak)
EXEC (@SQL)
DECLARE @ORDER INT = 1
IF((SELECT COUNT(OrderNo) FROM @EKSTRETABLE WHERE Tarih < @BaslangicTarihi) > 0)
BEGIN
DECLARE @DEVREDENBORC DECIMAL(18,2) = (SELECT SUM(Borc) FROM @EKSTRETABLE WHERE Tarih < @BaslangicTarihi);
DECLARE @DEVREDENALACAK DECIMAL(18,2) = (SELECT SUM(Alacak) FROM @EKSTRETABLE WHERE Tarih < @BaslangicTarihi);
INSERT INTO @EKSTRETABLEBAKIYELI (OrderNo, LOGICALREF, Tarih, Saat, FisNo, FisTuru, Aciklama, Borc, Alacak, Bakiye, Durum)
VALUES(@ORDER, 0, @BaslangicTarihi, 0, ”, ‘Devreden Durum’, ”, @DEVREDENBORC, @DEVREDENALACAK, @DEVREDENBORC – @DEVREDENALACAK,
CASE WHEN SIGN(@DEVREDENBORC – @DEVREDENALACAK) = -1 THEN ‘A’ ELSE ‘B’ END)
SET @ORDER = 2;
END
DECLARE EXTRECURSOR CURSOR FOR SELECT * FROM @EKSTRETABLE
OPEN EXTRECURSOR
FETCH NEXT FROM EXTRECURSOR INTO
@OrderNo,
@LOGICALREF,
@Tarih,
@Saat,
@FisNo,
@FisTuru,
@Aciklama,
@Borc,
@Alacak;
WHILE @@FETCH_STATUS=0
BEGIN
IF(@Tarih >= @BaslangicTarihi AND (SELECT COUNT(*) FROM @EKSTRETABLEBAKIYELI) > 0)
BEGIN
INSERT INTO @EKSTRETABLEBAKIYELI (OrderNo, LOGICALREF, Tarih, FisNo, FisTuru, Aciklama, Borc, Alacak, Bakiye, Durum)
VALUES(@ORDER, @LOGICALREF, @Tarih, @FisNo, @FisTuru, @Aciklama, @Borc, @Alacak,
(CASE WHEN SIGN(@Borc – @Alacak) = -1
THEN (SELECT Bakiye FROM @EKSTRETABLEBAKIYELI WHERE OrderNo = @ORDER – 1) + (@Borc – @Alacak)
ELSE (SELECT Bakiye FROM @EKSTRETABLEBAKIYELI WHERE OrderNo = @ORDER – 1) + (@Borc – @Alacak)
END),
(CASE SIGN((SELECT Bakiye FROM @EKSTRETABLEBAKIYELI WHERE OrderNo = @ORDER – 1) + (@Borc – @Alacak)) WHEN -1 THEN ‘A’ WHEN 0 THEN ” ELSE ‘B’ END)
)
SET @ORDER = @ORDER+1
END
ELSE IF(@Tarih >= @BaslangicTarihi)
BEGIN
INSERT INTO @EKSTRETABLEBAKIYELI (OrderNo, LOGICALREF, Tarih, FisNo, FisTuru, Aciklama, Borc, Alacak, Bakiye, Durum)
VALUES(@ORDER, @LOGICALREF, @Tarih, @FisNo, @FisTuru, @Aciklama, @Borc, @Alacak,(@Borc – @Alacak),
(CASE SIGN(@Borc – @Alacak) WHEN -1 THEN ‘A’ WHEN 0 THEN ” ELSE ‘B’ END)
)
SET @ORDER = @ORDER+1
END
FETCH NEXT FROM EXTRECURSOR INTO
@OrderNo,
@LOGICALREF,
@Tarih,
@Saat,
@FisNo,
@FisTuru,
@Aciklama,
@Borc,
@Alacak;
END
CLOSE EXTRECURSOR;
DEALLOCATE EXTRECURSOR;
SELECT
Tarih,
FisNo,
FisTuru,
Aciklama,
ABS(Borc) AS Borc,
ABS(Alacak) AS Alacak,
 (Bakiye) AS Bakiye
 FROM @EKSTRETABLEBAKIYELI EX
END

Nasıl Çağırılır?

Aşağıda örnek kullanım yer almaktadır:

EXEC [dbo].[CARI_HESAP_EKSTRE]
@DbName = ‘melihdb’,
@FirmaNr = ‘002’,
@CariKod = ‘120.01.001’,
@BaslangicTarihi = ‘2026-01-01’,
@BitisTarihi = ‘2026-03-31’;

Örnek Senaryo

Yukarıdaki örnekte:

  • Veritabanı: melihdb
  • Firma: 002
  • Cari Kod: 120.01.001
  • Başlangıç Tarihi: 01.01.2026
  • Bitiş Tarihi: 31.03.2026

Bu çağrı sonucunda ilgili cari hesabın:

  • 01.01.2026 öncesi bakiyesi devreden durum
  • 01.01.2026 – 31.03.2026 arası hareketleri ise
    tarih, fiş no, fiş türü, açıklama, borç, alacak ve bakiye bilgileriyle listelenir.

Dönen Alanlar

Bu prosedür çıktısında aşağıdaki kolonlar yer alır:

  • Tarih
  • FisNo
  • FisTuru
  • Aciklama
  • Borc
  • Alacak
  • Bakiye

Bu yapı, muhasebe ve finans ekiplerinin cari hareketleri doğrudan yorumlayabilmesi için oldukça kullanışlıdır.


Fiş Türleri Nasıl Belirleniyor?

Prosedür, cari hareketlerin türünü Logo’daki MODULENR ve TRCODE alanlarına göre çözümler. Böylece kayıtlar yalnızca rakamsal kodlarla değil, anlamlı fiş isimleriyle görüntülenir. Örneğin:

  • Satınalma Faturası
  • Toptan Satış Faturası
  • Verilen Hizmet Faturası
  • Gelen Havale
  • Gönderilen Havale
  • Nakit Tahsilat
  • Nakit Ödeme
  • Borç Dekontu
  • Alacak Dekontu
  • Virman Fişi
  • Açılış Fişi
  • Kredi Kartı Fişi

Bu sayede ekstre çıktısı, kullanıcı açısından çok daha okunabilir hale gelir.


Devir Mantığı Nasıl Çalışır?

Bu prosedürün en güçlü yanlarından biri de devir mantığıdır.

Başlangıç tarihinden önce cari hesapta oluşan tüm borç ve alacak hareketleri toplanır. Eğer bu tarihten önce hareket varsa, prosedür ekstre başına bir Devreden Durum satırı ekler. Bu satırın bakiyesi, önceki hareketlerin net sonucunu gösterir. Ardından başlangıç tarihinden sonraki kayıtlar bu devir bakiyesi üzerine yürütülür.

Bu sayede kullanıcı, sadece dönem içi hareketleri değil, o döneme hangi bakiye ile girildiğini de net şekilde görür.


Neden Faydalı?

Bu prosedür özellikle şu durumlarda çok faydalıdır:

  • Çok sayıda firma ile çalışan yapılarda
  • Logo Tiger’daki cari hesap ekstresini SQL üzerinden almak isteyenlerde
  • Raporu dış sistemlere aktarmak isteyenlerde
  • Finans ekibine özel ekran geliştirenlerde
  • Web raporlama veya dashboard projelerinde

Kısacası bu prosedür, Logo’dan manuel ekstre almak yerine SQL ile standart, tutarlı ve geliştirilebilir bir yapı sunar.


Teknik Avantajları

Bu stored procedure’ün öne çıkan avantajları:

  • Çoklu firma desteği
  • Dinamik tablo kullanımı
  • Cari bazlı filtreleme
  • Tarih aralığına göre ekstre üretimi
  • Devreden bakiye desteği
  • Yürüyen bakiye hesaplama
  • Logo mantığına uyumlu çıktı

Kimler Kullanabilir?

Bu yapı özellikle şu ekipler için uygundur:

  • Muhasebe departmanları
  • Finans ekipleri
  • ERP danışmanları
  • SQL geliştiricileri
  • Logo Tiger entegrasyonu yapan yazılım ekipleri

Özel SQL ve Raporlama Desteği

Firmanıza özel cari ekstre, yaşlandırma raporu, bakiye kontrolü, tahsilat analizi veya Logo Tiger entegrasyonları geliştirmek istiyorsanız, size özel çalışmalar da yapabilirim.

Aşağıdaki konularda destek verebilirim:

  • Logo Tiger SQL geliştirme
  • Stored procedure yazımı
  • Dinamik rapor tasarımı
  • Web raporlama ekranları
  • Finans ve muhasebe entegrasyonları
  • Performans optimizasyonu

İletişim

SQL sorguları, Logo Tiger raporları veya size özel geliştirmeler için benimle iletişime geçebilirsiniz.

İletişim Sayfası
https://melihsamur.com.tr/iletisim/

WhatsApp
https://wa.me/905415582843

E-posta
melih@melihsamur.com.tr