SQL Sorgu Cari Hesaplarda Yürüyen Bakiye

Vedat ÖZER

Logo Uzmanı
Geliştirici
Katılım
4 Haz 2018
Mesajlar
108
Puanları
43
Yaş
29
Konum
Antalya / Merkez
Ad Soyad
Vedat ÖZER
Selamlar,

Cari hesaplardan yürüyen bakiye için örnek sorgu paylaşıyorum. SQL'de Kullanıcı tanımlı fonksiyon ile başka raporlar yapabilirsiniz.

İçeriği görebilmek için mesaj yazmalısınız.
 
Moderatör tarafında düzenlendi:

Vedat ÖZER

Logo Uzmanı
Geliştirici
Katılım
4 Haz 2018
Mesajlar
108
Puanları
43
Yaş
29
Konum
Antalya / Merkez
Ad Soyad
Vedat ÖZER
İnşAllah yakında Sql'de Yürüyen bakiye ile ilgili farklı çözümler içeren sorgular paylaşa'cam.
 
  • Beğendim
Tepkiler: Btr

assenucler

Yeni Üye
Katılım
19 Haz 2018
Mesajlar
34
Puanları
8
Yaş
73
Konum
Emekli YMM
Sayın Vedat Özer,

Sanırım, verdiğiniz kodlar Logo yazılımı sorgularında kullanılıyor değil mi?
 

yilmaz3838

Yeni Üye
Katılım
16 Kas 2018
Mesajlar
14
Puanları
3
Yaş
30
Konum
Kayseri
Ad Soyad
Yılmaz Seyran
Merhaba öncelikle emekleriniz için çok Teşekkürler ederim. Fakat şöyle bir sorunla karşılaştım 120.01.001 yada YILMAZ yada 120.01.025 bunları yazdığımda sorun yok fakat 120.01.003 yazdığımda;
String or binary data would be truncated.
The statement has been terminated.
Hatayı alıyorum. Bu konuyla ilgili yardımcı olur musunuz?
 

Vedat ÖZER

Logo Uzmanı
Geliştirici
Katılım
4 Haz 2018
Mesajlar
108
Puanları
43
Yaş
29
Konum
Antalya / Merkez
Ad Soyad
Vedat ÖZER
Merhaba,

Aşağıdaki alanların karakter sınırını değiştirip deneyin.

ADI VARCHAR(300) COLLATE TURKISH_CI_AS,
KODU VARCHAR(300) COLLATE TURKISH_CI_AS,
 

sfatihs

Yeni Üye
Katılım
27 Kas 2018
Mesajlar
11
Puanları
1
Yaş
26
Konum
İzmir
Ad Soyad
Kenan ÖZ
Merhabalar, Siteniz çok güzel gerçekten, Logo ile ilgili paylaşımlarınız için çok teşekkür ederim,

Fonksiyonu oldugu gibi kullandıgım zaman ;

Msg 207, Level 16, State 1, Procedure xxx, Line 43 [Batch Start Line 0]
Invalid column name 'PAIDINCASH'.
Msg 207, Level 16, State 1, Procedure xxx, Line 97 [Batch Start Line 0]
Invalid column name 'PAIDINCASH'.


bu hatayı alıyorum tabloda PAIDINCASH ın 0 oldugu değer yok acaba ondanmı?

(where HAREKET.CANCELLED=0 AND HAREKET.PAIDINCASH=0) burdaki amacı öğrenebilirmiyim rica etsem logo veri tababına tam hakim değilimde. Mikroda iyiyim ama :)


PAIDINCASH ı fonksiyondan kaldırdıgım zaman fonksiyon kaydoluyor ama sorgulamada ise şöyle bir hata geliyor ;


Msg 8152, Level 16, State 14, Line 1
String or binary data would be truncated.
The statement has been terminated.

Logo GO kullanıyoruz ver. 2.5
 

Vedat ÖZER

Logo Uzmanı
Geliştirici
Katılım
4 Haz 2018
Mesajlar
108
Puanları
43
Yaş
29
Konum
Antalya / Merkez
Ad Soyad
Vedat ÖZER
Merhaba,

PAIDINCASH alanı peşin ödemelerde 0 ile 1 değerini alır. Go versiyonu eski bir versiyondur bundan yok sanırım. Diğer bahsettiğiniz hata cursor'dan dönem sonuçların ilgili tabloya yazılırken veri alanının eklenen verinin alanından kısa olmasıdır. Bunun için Cari Kodu,Cari Adı gibi Varchar olanların sayısını yükseltin.
 

sfatihs

Yeni Üye
Katılım
27 Kas 2018
Mesajlar
11
Puanları
1
Yaş
26
Konum
İzmir
Ad Soyad
Kenan ÖZ
Merhaba,

Dediğiniz gibi yaptım şuan düzeldi, Teşekkürler,

Tarih sıralamasına göre sonuç almak istiyorum ama olmuyor bi öneriniz varmı? Tarih değilde sanki bir sayı gibi sıralıyor günü baz alıyor sadece.
 

Vedat ÖZER

Logo Uzmanı
Geliştirici
Katılım
4 Haz 2018
Mesajlar
108
Puanları
43
Yaş
29
Konum
Antalya / Merkez
Ad Soyad
Vedat ÖZER
Merhaba,

Kodu aşağıdaki şekilde düzelttim.

SQL:
---SELECT * FROM  [dbo].[Carı_Bakıye_006] ('01.01.2018','31.12.2018','120.07.008')

ALTER  FUNCTION [dbo].[Carı_Bakıye_006] (@TARIH1 VARCHAR(12), @TARIH2 VARCHAR(12), @KODU VARCHAR(30))
RETURNS @Report TABLE
(
ID INT NOT NULL PRIMARY KEY,
ADI VARCHAR(300) COLLATE TURKISH_CI_AS,
KODU VARCHAR(300) COLLATE TURKISH_CI_AS,
FISTUR VARCHAR(150),
TARIH  DATETIME ,
BELGE  VARCHAR(150),
ACIKLAMA VARCHAR(150),
BORC  FLOAT,
ALACAK  FLOAT,
BAKIYE FLOAT,
BA  VARCHAR(4)
)
AS
BEGIN

DECLARE @COUNTER INT
DECLARE @ID INT
DECLARE @TARIH  VARCHAR(12)
DECLARE @BORC  FLOAT
DECLARE @ALACAK  FLOAT
DECLARE @BAKIYE FLOAT
DECLARE @FISTUR VARCHAR(150)
DECLARE @ADI VARCHAR(150)
DECLARE @BELGE VARCHAR(150)
DECLARE @ACIKLAMA VARCHAR(150)
DECLARE @BA VARCHAR(4)
SET @ID = 0
SET @BAKIYE = 0
SET @TARIH1 = CONVERT(DATETIME,@TARIH1,104)
SET @TARIH2 = CONVERT(DATETIME,@TARIH2,104)



DECLARE curCARI
CURSOR LOCAL FAST_FORWARD FOR



SELECT * FROM (
SELECT '' ADI,'' KODU,'' FISTUR,NULL TARIH,'Devir' BELGE,'' ACIKLAMA,SUM(CASE WHEN SIGN=0 THEN AMOUNT ELSE 0 END) BORC,SUM(CASE WHEN SIGN=1 THEN AMOUNT ELSE 0 END)ALACAK,'' BA
FROM LG_006_01_CLFLINE AS HAREKET LEFT OUTER JOIN LG_006_CLCARD AS KART ON HAREKET.CLIENTREF=KART.LOGICALREF
where HAREKET.CANCELLED=0 AND HAREKET.PAIDINCASH=0 AND KART.CODE=@KODU  AND HAREKET.DATE_< @TARIH1
GROUP BY KART.CODE
UNION all
SELECT
KART.DEFINITION_ ADI ,
KART.CODE KODU,
FISTUR=case WHEN HAREKET.TRCODE=1 THEN 'Nakit Tahsilat'
WHEN HAREKET.TRCODE=2 THEN 'Nakit Ödeme'
WHEN HAREKET.TRCODE=3 THEN 'Borç Dekontu'
WHEN HAREKET.TRCODE=4 THEN 'Alacak Dekontu'
WHEN HAREKET.TRCODE=5 THEN 'Virman İşlemi'
WHEN HAREKET.TRCODE=6 THEN 'Kur Farkı İşlemi'
WHEN HAREKET.TRCODE=12 THEN 'Özel İşlem'
WHEN HAREKET.TRCODE=14 THEN 'Açılış Fişi'
WHEN HAREKET.TRCODE=20 THEN 'Gelen Havaleler'
WHEN HAREKET.TRCODE=21 THEN 'Gönderilen Havaleler'
WHEN HAREKET.TRCODE=31 THEN 'Mal Alım Faturası'
WHEN HAREKET.TRCODE=32 THEN 'Perakende Satış İade Faturası'
WHEN HAREKET.TRCODE=33 THEN 'Toptan Satış İade Faturası'
WHEN HAREKET.TRCODE=34 THEN 'Alınan Hizmet Faturası'
WHEN HAREKET.TRCODE=35 THEN 'Alınan Proforma Faturası'
WHEN HAREKET.TRCODE=36 THEN 'Alım İade Faturası'
WHEN HAREKET.TRCODE=37 THEN 'Perakende Satış Faturası'
WHEN HAREKET.TRCODE=38 THEN 'Toptan Satış Faturası'
WHEN HAREKET.TRCODE=39 THEN 'Verilen Hizmet Faturası'
WHEN HAREKET.TRCODE=40 THEN 'Verilen Proforma Faturası'
WHEN HAREKET.TRCODE=41 THEN 'Verilen Vade Farkı Faturası'
WHEN HAREKET.TRCODE=42 THEN 'Alınan Vade Farkı Faturası'
WHEN HAREKET.TRCODE=43 THEN 'Alınan Fiyat Farkı Faturası'
WHEN HAREKET.TRCODE=44 THEN 'Verilen Fiyat Farkı Faturası'
WHEN HAREKET.TRCODE=45 THEN 'Verilen Serbest Meslek Makbuzu'
WHEN HAREKET.TRCODE=46 THEN 'Alınan Serbest Meslek Makbuzu'
WHEN HAREKET.TRCODE=56 THEN 'Müstahsil Makbuzu'
WHEN HAREKET.TRCODE=70 THEN 'Kredi Kartı Fişi'
WHEN HAREKET.TRCODE=71 THEN 'Kredi Kartı Fişi İade'
WHEN HAREKET.TRCODE=72 THEN 'Firma Kredi Kartı Fişi'
WHEN HAREKET.TRCODE=73 THEN 'Firma Kredi Kartı Fişi İade'
WHEN HAREKET.TRCODE=61 THEN 'Çek Girişi'
WHEN HAREKET.TRCODE=62 THEN 'Senet Girişi'
WHEN HAREKET.TRCODE=63 THEN 'Çek Çıkış Cari Hesaba'
WHEN HAREKET.TRCODE=64 THEN 'Senet Çıkış Cari Hesaba'
WHEN HAREKET.TRCODE=75 THEN 'Özel Dekont'
end,
HAREKET.DATE_ TARIH,
HAREKET.DOCODE BELGE,
HAREKET.LINEEXP ACIKLAMA,
CASE WHEN SIGN=0 THEN AMOUNT ELSE 0 END  BORC,
CASE WHEN SIGN=1 THEN AMOUNT ELSE 0 END  ALACAK,'' as ba
FROM LG_006_01_CLFLINE AS HAREKET LEFT OUTER JOIN  LG_006_CLCARD AS KART ON HAREKET.CLIENTREF=KART.LOGICALREF
where HAREKET.CANCELLED=0 AND HAREKET.PAIDINCASH=0 AND KART.CODE=@KODU  AND CONVERT(DATETIME,HAREKET.DATE_,104)>= @TARIH1 AND CONVERT(DATETIME,HAREKET.DATE_,104)<= @TARIH2
) AS TMP
ORDER BY TARIH

OPEN curCARI
FETCH NEXT FROM curCARI
INTO @ADI,@KODU,@BELGE,@ACIKLAMA,@FISTUR, @TARIH, @BORC, @ALACAK,@BA
WHILE @@FETCH_STATUS = 0
BEGIN
SET @ID = @ID + 1
SET @BAKIYE = round(@BAKIYE + @BORC - @ALACAK ,2)
SET @BA = CASE WHEN round(@BAKIYE ,2)>0 THEN '(B)' ELSE '(A)' END

INSERT @Report
VALUES (@ID, @ADI,@KODU,@BELGE,@ACIKLAMA,@FISTUR, @TARIH,  @BORC, @ALACAK, @BAKIYE,@BA)
FETCH NEXT FROM curCARI

INTO  @ADI,@KODU,@BELGE,@ACIKLAMA,@FISTUR, @TARIH, @BORC, @ALACAK,@BA

END
CLOSE curCARI
DEALLOCATE curCARI
RETURN
END
 

sfatihs

Yeni Üye
Katılım
27 Kas 2018
Mesajlar
11
Puanları
1
Yaş
26
Konum
İzmir
Ad Soyad
Kenan ÖZ
İlginiz için teşekkürler, Tarih sıralama da düzeldi
 

Koboy66

Yeni Üye
Katılım
12 Ara 2018
Mesajlar
11
Puanları
3
Yaş
39
Konum
İstanbul
Ad Soyad
Erkan uzun
Cari hesap bölümündeki gibi son bakiyeyi gösteren sorgu vedat beyin sorgusunu düzenledim.

Cari kodu ve tarihe gerek kalmadan


Kod:
SELECT * FROM [dbo].[Carı_Bakıye_006_Grublu] () ORDER BY KODU
Kod:
CREATE  FUNCTION [dbo].[Carı_Bakıye_006_Grublu] ()
RETURNS @Report TABLE
(
KODU VARCHAR(300) COLLATE TURKISH_CI_AS,
ADI VARCHAR(300) COLLATE TURKISH_CI_AS,


BORC  FLOAT,
ALACAK  FLOAT,
BAKIYE FLOAT,
BA  VARCHAR(4)
)
AS
BEGIN
DECLARE @COUNTER INT
DECLARE @BORC  FLOAT
DECLARE @ALACAK  FLOAT
DECLARE @BAKIYE FLOAT
DECLARE @KODU VARCHAR(150)
DECLARE @ADI VARCHAR(150)
DECLARE @BA VARCHAR(4)
SET @BAKIYE = 0

DECLARE curCARI
CURSOR LOCAL FAST_FORWARD FOR

SELECT
KART.CODE KODU,
KART.DEFINITION_ ADI ,


SUM(CASE WHEN SIGN=0 THEN AMOUNT ELSE 0 END)  BORC,
SUM(CASE WHEN SIGN=1 THEN AMOUNT ELSE 0 END)  ALACAK,
round(SUM(CASE WHEN SIGN=0 THEN AMOUNT ELSE 0 END)- SUM(CASE WHEN SIGN=1 THEN AMOUNT ELSE 0 END),2)  BAKIYE,'' as ba
FROM LG_006_01_CLFLINE AS HAREKET LEFT OUTER JOIN  LG_006_CLCARD AS KART ON HAREKET.CLIENTREF=KART.LOGICALREF
where HAREKET.CANCELLED=0 AND HAREKET.PAIDINCASH=0
GROUP BY KART.DEFINITION_,KART.CODE

ORDER BY ADI

OPEN curCARI
FETCH NEXT FROM curCARI
INTO @ADI, @KODU,  @BORC, @ALACAK, @BAKIYE,@BA
WHILE @@FETCH_STATUS = 0
BEGIN


SET @BA = CASE WHEN round(@BAKIYE ,2)>0 THEN '(B)' ELSE '(A)' END

INSERT @Report
VALUES ( @ADI, @KODU,  @BORC, @ALACAK, @BAKIYE,@BA)
FETCH NEXT FROM curCARI

INTO  @ADI,@KODU, @BORC, @ALACAK,@BAKIYE,@BA

END
CLOSE curCARI
DEALLOCATE curCARI
RETURN
END

GO
 

Ekli dosyalar

Vedat ÖZER

Logo Uzmanı
Geliştirici
Katılım
4 Haz 2018
Mesajlar
108
Puanları
43
Yaş
29
Konum
Antalya / Merkez
Ad Soyad
Vedat ÖZER
Merhaba,

Bunun için Cursor kullanmaya hiç gerek yok direk normal sorgu ile çıkar , ki yürüyen bakiyede normal sorgu ilede çıkar bu yöntem biraz daha hızlıdır.

SQL:
SELECT *,CASE WHEN BAKIYE>0 THEN '(B)' WHEN BAKIYE<0 THEN '(A)' ELSE '-' END [B-A] FROM (
SELECT
KART.CODE KODU,
KART.DEFINITION_ ADI ,
SUM(CASE WHEN SIGN=0 THEN AMOUNT ELSE 0 END)  BORC,
SUM(CASE WHEN SIGN=1 THEN AMOUNT ELSE 0 END)  ALACAK,
round(SUM(CASE WHEN SIGN=0 THEN AMOUNT ELSE 0 END)- SUM(CASE WHEN SIGN=1 THEN AMOUNT ELSE 0 END),2)  BAKIYE
FROM LG_006_01_CLFLINE AS HAREKET LEFT OUTER JOIN  LG_006_CLCARD AS KART ON HAREKET.CLIENTREF=KART.LOGICALREF
where HAREKET.CANCELLED=0 AND HAREKET.PAIDINCASH=0
GROUP BY KART.DEFINITION_,KART.CODE)  AS TMP
ORDER BY KODU
 
Üst Alt