• Merhaba, 22 Ocak 2020 Çarşamba günü sabah 08:00 ile 12:00 saatleri arasında forumun bulunduğu sunucuda genel bakım çalışması yapılacaktır.
    Bu sürenin tamamında olmasa da bir süreliğine forum geçici olarak erişilemez olacaktır. Bilgilerinize

Stoklarda Yürüyen Bakiye

Vedat Özer

Uzman
Uzman
Katılım
4 Ocak 2010
Mesajlar
2,055
Excel Vers. ve Dili
OFFICE 2007 PRO TR - Win7 X64
Selamlar,

Logo Muhasebe proğramında stok kartlarında yürüyen bakiye raporunu paylaşıyorum.

İ7 işlemci bilgisayarda 1.230.945 satırda 31 saniye'de işlemi bitiriyor.

Kullanılan kodlar;
Kod:
IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'STOK_YURUYEN') AND OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[STOK_YURUYEN] 

GO

CREATE PROC STOK_YURUYEN 
(@FIRMA VARCHAR(4),@DONEM VARCHAR(3))
AS
EXEC ('
SET NOCOUNT ON
IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects O
WHERE O.xtype = ''U'' AND O.id = OBJECT_ID(N''tempdb..#GECICITABLO''))
BEGIN  
DROP TABLE #GECICITABLO
END


CREATE TABLE #GECICITABLO
(
[Stfıche_Referans] INT,
[Stlıne_Referans] INT,
[Fiş No] VARCHAR(100),
[Fiş Türü] VARCHAR(65),
[Belge No] VARCHAR(100),
[Stfıche Tarıh] SMALLDATETIME,
[Stlıne Tarıh] SMALLDATETIME,
[Ftıme] bigint,
[Stok Kodu] VARCHAR(250),
[Stok Adı] VARCHAR(250),
[Bırım] VARCHAR(15),
[Giriş Çıkış] VARCHAR(20),
[Miktar] DECIMAL(38,2),
[Kalan] DECIMAL(38,2),
[Tutar] DECIMAL(38,2)
) 

CREATE CLUSTERED INDEX IX_#GECICITABLO ON #GECICITABLO ([Stok Kodu], [Stlıne Tarıh], [Miktar])

INSERT INTO #GECICITABLO
([Stfıche_Referans],
[Stlıne_Referans],
[Fiş No],
[Fiş Türü],
[Belge No],
[Stfıche Tarıh],
[Stlıne Tarıh],
[Ftıme],
[Stok Kodu],
[Stok Adı],
[Bırım],
[Giriş Çıkış],
[Miktar],
[Kalan],
[Tutar])

SELECT 
VEDAT_OZER.[Stfıche_Referans] ,
VEDAT_OZER.[Stlıne_Referans] ,
VEDAT_OZER.[Fiş No],
VEDAT_OZER.[Fiş Türü],
VEDAT_OZER.[Belge No],
VEDAT_OZER.[Stfıche Tarıh],
VEDAT_OZER.[Stlıne Tarıh],
VEDAT_OZER.[Ftıme],
VEDAT_OZER.[Stok Kodu],
VEDAT_OZER.[Stok Adı],
VEDAT_OZER.[Bırım],
VEDAT_OZER.[Giriş Çıkış],
VEDAT_OZER.[Miktar],
VEDAT_OZER.Kalan,
VEDAT_OZER.[Tutar]

FROM (
SELECT
STFICHE.LOGICALREF [STFICHE_REFERANS],
STLINE.LOGICALREF [STLINE_REFERANS],
[Fiş No]=STFICHE.FICHENO,
[Fiş Türü]=CASE STFICHE.TRCODE	 
WHEN  1 then ''Satınalma İrsaliyesi''
WHEN  2 then ''Perakende Satış İade İrsaliyesi''
WHEN  3 then ''Toptan Satış İade İrsaliyesi''
WHEN  4 then ''Konsinye Çıkış İade İrsaliyesi''
WHEN  5 then ''Konsinye Giriş İrsaliyesi''
WHEN  6 then ''Satınalma İade İrsaliyesi''
WHEN  7 then ''Perakende Satış İrsaliyesi''
WHEN  8 then ''Toptan Satış İrsaliyesi''
WHEN  9 then ''Konsinye Çıkış İrsaliyesi''
WHEN  10 then ''Konsinye Giriş İade İrsaliyesi''
WHEN  11 then ''Fire Fişi''
WHEN  12 then ''Sarf Fişi''
WHEN  13 then ''Üretimden Giriş Fişi''
WHEN  14 then ''Devir Fişi''
WHEN  25 then ''Ambar Fişi''
WHEN  26 then ''Muhtahsil İrsaliyesi''
WHEN  50 then ''Sayım Fazlası Fişi''
WHEN  51 then ''Sayım Eksiği Fişi'' ELSE '''' END,
[Belge No]=STFICHE.DOCODE,
[Stfıche Tarıh]=STFICHE.DATE_,
[Stlıne Tarıh]=STLINE.DATE_,
[Ftıme]=STLINE.FTIME,
[Stok Kodu]=ITEMS.CODE,
[Stok Adı]=ITEMS.NAME,
[Bırım]=BIRIM.CODE,
[Giriş Çıkış]= CASE WHEN STLINE.IOCODE IN(1,2) THEN ''Giriş'' when STLINE.IOCODE IN(3,4) THEN ''Çıkış'' else '''' end,
[Miktar]=(CASE WHEN STLINE.IOCODE IN(1,2) THEN 1 ELSE -1 end) * STLINE.AMOUNT*(CASE WHEN ISNULL(UINFO2,0)=0 THEN 1 ELSE UINFO2 END)/(CASE WHEN ISNULL(UINFO1,0)=0 THEN 1 ELSE UINFO1 END),
null KALAN,
[Tutar]=(CASE WHEN STLINE.IOCODE IN(1,2) THEN 1 ELSE -1 end) * STLINE.VATMATRAH
FROM LG_'+@FIRMA+'_'+@DONEM+'_STFICHE STFICHE WITH (NOLOCK) 
LEFT OUTER JOIN LG_'+@FIRMA+'_01_STLINE STLINE WITH (NOLOCK) ON STFICHE.LOGICALREF=STLINE.STFICHEREF 
LEFT OUTER JOIN LG_'+@FIRMA+'_ITEMS ITEMS      WITH (NOLOCK) ON STLINE.STOCKREF =ITEMS.LOGICALREF 
LEFT OUTER JOIN LG_'+@FIRMA+'_UNITSETL BIRIM   WITH (NOLOCK) ON BIRIM.UNITSETREF= ITEMS.UNITSETREF AND BIRIM.MAINUNIT=1
WHERE 
STFICHE.CANCELLED=0 AND STLINE.CANCELLED=0
AND STLINE.LINETYPE=0
AND STLINE.IOCODE IN (1,2,3,4)


) VEDAT_OZER


DECLARE @STOK_KODU VARCHAR(150),
        @YURUYEN  DECIMAL(38,2),
        @SAYI     bigint
		
	
	;	
SELECT @SAYI = 1

;

WITH
CTE AS
(
 SELECT SAY = ROW_NUMBER() OVER (ORDER BY [Stok Kodu], [Stlıne Tarıh], [Miktar]),
[Stfıche_Referans] ,
[Stlıne_Referans] ,
[Fiş No],
[Fiş Türü],
[Belge No],
[Stfıche Tarıh],
[Stlıne Tarıh],
[Ftıme],
[Stok Kodu],
[Stok Adı],
[Bırım],
[Giriş Çıkış],
[Miktar],
Kalan,
[Tutar] FROM #GECICITABLO WITH(INDEX=IX_#GECICITABLO)


)
 UPDATE tgt
    SET @YURUYEN = Kalan = CASE 
                               WHEN tgt.SAY = @SAYI 
                               THEN CASE
                                    WHEN tgt.[Stok Kodu] = @STOK_KODU THEN tgt.Miktar + @YURUYEN
                                    ELSE tgt.Miktar
                                    END
                               ELSE 0  
                               END,
        @STOK_KODU = tgt.[Stok Kodu],
        @SAYI  = @SAYI + 1
   FROM CTE tgt 
   WITH (TABLOCKX) 
  OPTION (MAXDOP 1)              

SELECT
[Stfıche_Referans] ,
[Stlıne_Referans] ,
[Fiş No],
[Fiş Türü],
[Belge No],
[Stfıche Tarıh],
[Stlıne Tarıh],
RTRIM(CONVERT(char(20), ROUND([Ftıme] / 16777216, 2))) + '':'' + RTRIM(CONVERT(char(20), 
ROUND(([Ftıme] - ROUND([Ftıme] / 16777216, 2) * 16777216)/ 65536, 2))) + '':'' + RTRIM(CONVERT(char(20),
ROUND(([Ftıme] - ROUND([Ftıme] / 16777216, 2) * 16777216 - ROUND(([Ftıme] - ROUND([Ftıme] / 16777216, 2) * 16777216) / 65536, 2) * 65536) / 256, 2))) AS Saat,
[Stok Kodu],
[Stok Adı],
[Bırım],
[Giriş Çıkış],
[Miktar],
[Kalan],
[Tutar] FROM #GECICITABLO 
ORDER BY [Stok Kodu],[Stlıne Tarıh],[Saat]
;
')
Çalışma Şekli;

Kod:
EXEC STOK_YURUYEN '006','01'
 

Ekli dosyalar

planlamaci

Altın Üye
Katılım
15 Nisan 2010
Mesajlar
100
Excel Vers. ve Dili
2003
Yürüyen bakiyenin Cari hesap için olanı varmıdır.

Bu sorguyu wiev olarak nasıl kullanabilirim.


merhaba bu stoklarda ki Yürüyen bakiyenin Cari hesap için olanı varmıdır.
 
Son düzenleme:

planlamaci

Altın Üye
Katılım
15 Nisan 2010
Mesajlar
100
Excel Vers. ve Dili
2003
Logo Cari Yürüyen bakiye Fatura detayı

Selamlar,

Oluşturulan Proc Excel'den değişken vererek çağırabilirsiniz. Cari Hesaplarla yaptığım çalışmayı ekliyorum.
Merhaba bu dosyada fatura detayı ve işlem dövizi yok. dosyada düzenleme yapabilir miyiz şifre paylaşabilir misiniz.?
 

Vedat Özer

Uzman
Uzman
Katılım
4 Ocak 2010
Mesajlar
2,055
Excel Vers. ve Dili
OFFICE 2007 PRO TR - Win7 X64
Selamlar,

Cari hesap ekstresinde yürüyen bakiye ile ilgili yapmış olduğum çözümü satır satır giderek paylaşıyorum. Excelden değişken verip çağırırsınız.


1.Veri Tabanında 'CARI_EKSTRE' kayıtlı Procedure varmı diye sorguluyoruz. Sayma işleminde 1 eşitse siliyoruz.

Kod:
IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'CARI_EKSTRE') AND OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[CARI_EKSTRE]

2. Veri tabanımızda oluşturacağımız Procedure parametre veriyoruz.

@FRM= Firma numarası
@DNM= Dönem numarası
@ILKTARIH= Cari Ekstre Başlangıç Tarihi
@SONTARIH= Cari Ekstre Bitiş Tarihi
@ILK= Sorgulama Yapacağımız İlk Cari
@SON= Sorgulama Yapacağımız Son Cari


Kod:
CREATE  PROC [dbo].[CARI_EKSTRE] 
(
@FRM VARCHAR(4)
,@DNM VARCHAR(4)
,@ILKTARIH VARCHAR(12)
,@SONTARIH VARCHAR(12)
,@ILK VARCHAR(65)
,@SON VARCHAR(65)  
)

Örnek Uygulama;


Kod:
EXEC [dbo].[CARI_EKSTRE] '117','01','01.05.2017','31.12.2017','120.001.0080','120.001.0080'

3. Değişkenlik verme

Logo'da Firma ve dönem değişebiliyo oluşturduğumuz Procedure bir kere oluşturup parametre vererek çağırma işinde

EXEC('') oluşturuyoruz.

4. Sorgumuz'da TRANSACTION kullanacam isteyen bu alanı kaldırabilir.

Kod:
EXEC('
SET NOCOUNT ON
BEGIN TRY 
BEGIN TRANSACTION

5. Sorgu için'de kullanacağımız parametreleri veriyoruz.

Kod:
DECLARE @DURUM Nvarchar (51)
DECLARE @CLINTREF INTEGER
DECLARE @CARI_KODU NVARCHAR(165)
DECLARE @CARI_ADI NVARCHAR(165)
DECLARE @BAKIYE FLOAT
DECLARE @TARIH datetime
DECLARE @FIS_TUR Nvarchar(165)
DECLARE @OZEL_KOD Nvarchar (165) 
DECLARE @BELGE Nvarchar(165)
DECLARE @ACIKLAMA Nvarchar(165)
DECLARE @BORC FLOAT
DECLARE @ALACAK FLOAT
DECLARE @EKLEME_TARIH datetime
DECLARE @EKLEYEN Nvarchar (65)
DECLARE @DEGISTIRME_TARIH datetime
DECLARE @DEGISTIREN Nvarchar (65)

6. Cari Hesap ekstresini oluşturup aktaracağımız sana tabloyu sorguluyoruz var ise siliyoruz.

Kod:
IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects O
WHERE O.xtype = ''U'' AND O.id = OBJECT_ID(N''tempdb..#TMP''))
BEGIN  
DROP TABLE #TMP
END

7. Sanal tabloyu oluşturuyoruz.

Kod:
CREATE TABLE #TMP
(
[CLINTREF] [int] NULL ,
[CARI_KODU] [varchar] (165)  NULL ,
[CARI_ADI] [varchar] (165)  NULL ,
[TARIH] [datetime] NULL ,
[FIS_TUR] [varchar] (165)   NULL ,
[OZEL_KOD] [varchar] (165)  NULL ,
[BELGE] [varchar] (165) NULL ,
[ACIKLAMA] [varchar] (165)  NULL,
[BORC] [FLOAT] NULL  ,
[ALACAK] [FLOAT] NULL,
[BAKIYE] [FLOAT] NULL,
[DURUM] [varchar] (5)  NULL,
[EKLEME_TARIH] [datetime] NULL ,
[EKLEYEN] [varchar] (65)  NULL,
[DEGISTIRME_TARIH] [datetime] NULL ,
[DEGISTIREN] [varchar] (65)  NULL
         
)

8. Dış tarafta çalışacak Cursor tanımlıyoruz.


Kod:
DECLARE CARI_LISTE cursor for

9. Car Ekstre'de dönecek carileri listeliyoruz.


Kod:
SELECT DISTINCT CARI.LOGICALREF, CARI.CODE , CARI.DEFINITION_
FROM LG_' + @FRM + '_CLCARD CARI  WHERE CARI.LOGICALREF IN(SELECT CLIENTREF FROM LG_' + @FRM + '_' + @DNM + '_CLFLINE ) AND  CARI.CODE BETWEEN  '''+ @ILK +''' AND '''+ @SON +''' 
ORDER BY CARI.LOGICALREF,CARI.CODE,CARI.DEFINITION_


OPEN CARI_LISTE  FETCH NEXT FROM CARI_LISTE 
INTO @CLINTREF,@CARI_KODU,@CARI_ADI

WHILE @@fetch_status = 0

BEGIN

10. İç Tarafta çalışacak Cursor tanımlıyoruz.

Kod:
DECLARE CARI_DETAY cursor for

11. Hesap ekstresi için sorgumuzu hazırlıyoruz.

Kod:
SELECT 
CARI_KODU,
CARI_ADI,
TARIH,
FIS_TUR,
OZEL_KOD,
BELGE,
ACIKLAMA,
BORC,
ALACAK,EKLEME_TARIH,EKLEYEN,DEGISTIREN_TARIH,DEGISTIREN
FROM (
SELECT 
MAX(CLNTC.CODE) CARI_KODU,
MAX(CLNTC.DEFINITION_) CARI_ADI ,
NULL TARIH,
''-'' FIS_TUR,
''-'' OZEL_KOD,
''-'' BELGE,
''Devir Eden Bakiye'' ACIKLAMA,
ISNULL(sum(ROUND((1-CTRNS.SIGN)*AMOUNT,2)),0) BORC,
ISNULL(sum(ROUND(CTRNS.SIGN*AMOUNT,2)),0) ALACAK,null EKLEME_TARIH,''-'' EKLEYEN,null DEGISTIREN_TARIH,''-'' DEGISTIREN
FROM LG_' + @FRM + '_CLCARD CLNTC  LEFT OUTER JOIN 
LG_' + @FRM + '_' + @DNM + '_CLFLINE CTRNS  ON (CTRNS.CLIENTREF = CLNTC.LOGICALREF) 
WHERE  CTRNS.CANCELLED=0 AND CTRNS.PAIDINCASH=0 AND CLNTC.CODE=@CARI_KODU AND CTRNS.DATE_< CONVERT(DATETIME,''' + @ILKTARIH + ''',104)

UNION ALL
SELECT  
CLNTC.CODE CARI_KODU ,CLNTC.DEFINITION_ CARI_ADI ,
CONVERT(datetime, CTRNS.DATE_, 104)TARIH,
case WHEN CTRNS.TRCODE=1 THEN ''Nakit Tahsilat''
WHEN CTRNS.TRCODE=2 THEN ''Nakit Ödeme''
WHEN CTRNS.TRCODE=3 THEN ''Borç Dekontu''
WHEN CTRNS.TRCODE=4 THEN ''Alacak Dekontu''
WHEN CTRNS.TRCODE=5 THEN ''Virman İşlemi''
WHEN CTRNS.TRCODE=6 THEN ''Kur Farkı İşlemi''
WHEN CTRNS.TRCODE=12 THEN ''Özel İşlem''
WHEN CTRNS.TRCODE=14 THEN ''Açılış Fişi''
WHEN CTRNS.TRCODE=20 THEN ''Gelen Havaleler''
WHEN CTRNS.TRCODE=21 THEN ''Gönderilen Havaleler''
WHEN CTRNS.TRCODE=31 THEN ''Mal Alım Faturası''
WHEN CTRNS.TRCODE=32 THEN ''Perakende Satış İade Faturası''
WHEN CTRNS.TRCODE=33 THEN ''Toptan Satış İade Faturası''
WHEN CTRNS.TRCODE=34 THEN ''Alınan Hizmet Faturası''
WHEN CTRNS.TRCODE=35 THEN ''Alınan Proforma Faturası''
WHEN CTRNS.TRCODE=36 THEN ''Alım İade Faturası''
WHEN CTRNS.TRCODE=37 THEN ''Perakende Satış Faturası''
WHEN CTRNS.TRCODE=38 THEN ''Toptan Satış Faturası''
WHEN CTRNS.TRCODE=39 THEN ''Verilen Hizmet Faturası''
WHEN CTRNS.TRCODE=40 THEN ''Verilen Proforma Faturası''
WHEN CTRNS.TRCODE=41 THEN ''Verilen Vade Farkı Faturası''
WHEN CTRNS.TRCODE=42 THEN ''Alınan Vade Farkı Faturası''
WHEN CTRNS.TRCODE=43 THEN ''Alınan Fiyat Farkı Faturası''
WHEN CTRNS.TRCODE=44 THEN ''Verilen Fiyat Farkı Faturası''
WHEN CTRNS.TRCODE=45 THEN ''Verilen Serbest Meslek Makbuzu''
WHEN CTRNS.TRCODE=46 THEN ''Alınan Serbest Meslek Makbuzu''
WHEN CTRNS.TRCODE=56 THEN ''Müstahsil Makbuzu''
WHEN CTRNS.TRCODE=70 THEN ''Kredi Kartı Fişi''
WHEN CTRNS.TRCODE=71 THEN ''Kredi Kartı Fişi İade''
WHEN CTRNS.TRCODE=72 THEN ''Firma Kredi Kartı Fişi''
WHEN CTRNS.TRCODE=73 THEN ''Firma Kredi Kartı Fişi İade''
WHEN CTRNS.TRCODE=61 THEN ''Çek Girişi''
WHEN CTRNS.TRCODE=62 THEN ''Senet Girişi''
WHEN CTRNS.TRCODE=63 THEN ''Çek Çıkış Cari Hesaba''
WHEN CTRNS.TRCODE=64 THEN ''Senet Çıkış Cari Hesaba''
WHEN CTRNS.TRCODE=75 THEN ''Özel Dekont''
end as FIS_TUR,
CTRNS.DOCODE OZEL_KOD,
CTRNS.SPECODE AS BELGE,
CTRNS.LINEEXP AS ACIKLAMA,
ISNULL(ROUND((1-CTRNS.SIGN)*AMOUNT,2),0) AS BORC, 
ISNULL(ROUND(CTRNS.SIGN*AMOUNT,2),0) AS ALACAK,
CONVERT(DATETIME,CTRNS.CAPIBLOCK_CREADEDDATE,104) AS EKLEME_TARIH,
EKLEYEN.NAME EKLEYEN,
CONVERT(DATETIME,CTRNS.CAPIBLOCK_MODIFIEDDATE,104) AS DEGISTIREN_TARIH,
DEGISTIREN.NAME DEGISTIREN
FROM 
LG_' + @FRM + '_' + @DNM + '_CLFLINE CTRNS LEFT OUTER JOIN
LG_' + @FRM + '_CLCARD CLNTC  ON (CTRNS.CLIENTREF = CLNTC.LOGICALREF) 
LEFT OUTER JOIN L_CAPIUSER EKLEYEN ON  EKLEYEN.NR=CTRNS.CAPIBLOCK_CREATEDBY
LEFT OUTER JOIN L_CAPIUSER DEGISTIREN  ON  DEGISTIREN.NR=CTRNS.CAPIBLOCK_MODIFIEDBY
WHERE  CTRNS.CANCELLED=0 AND CTRNS.PAIDINCASH=0 AND CLNTC.CODE=@CARI_KODU AND CTRNS.DATE_ BETWEEN  CONVERT(DATETIME,''' + @ILKTARIH + ''',104) AND  CONVERT(DATETIME,''' + @SONTARIH + ''',104))VEDAT_OZER
ORDER BY VEDAT_OZER.CARI_KODU,VEDAT_OZER.TARIH
SET  @BAKIYE = 0

OPEN CARI_DETAY FETCH NEXT FROM CARI_DETAY
INTO 
@CARI_KODU,
@CARI_ADI,
@TARIH,
@FIS_TUR,
@OZEL_KOD,
@BELGE,
@ACIKLAMA,
@BORC,
@ALACAK,
@EKLEME_TARIH,
@EKLEYEN,
@DEGISTIRME_TARIH,
@DEGISTIREN
WHILE @@fetch_status = 0
BEGIN
12. Satır satır yürüyen bakiye oluşturuyoruz.

Kod:
SET  @BAKIYE =ROUND( @BAKIYE  + @BORC - @ALACAK ,2)
Borç ise "B" Alacak ise "A" 0 ise "-" yazma işlemini yapıyoruz.

Kod:
SET  @DURUM = CASE WHEN @BAKIYE>0 THEN ''(B)'' WHEN @BAKIYE<0 THEN ''(A)''  WHEN @BAKIYE=0 THEN ''(-)'' ELSE '''' END
13. Kayıtlarımızı sanal tablo'ya aktarıyoruz.

Kod:
INSERT INTO #TMP (
CLINTREF,
CARI_KODU,
CARI_ADI,
TARIH,
FIS_TUR,
OZEL_KOD,
BELGE,
ACIKLAMA,
BORC,
ALACAK,
BAKIYE,
DURUM,
EKLEME_TARIH,
EKLEYEN,
DEGISTIRME_TARIH,
DEGISTIREN)
VALUES(  
@CLINTREF,
@CARI_KODU,
@CARI_ADI,
@TARIH,
@FIS_TUR,
@OZEL_KOD,
@BELGE,
@ACIKLAMA,
@BORC,
@ALACAK,
@BAKIYE,
@DURUM,
@EKLEME_TARIH,
@EKLEYEN,
@DEGISTIRME_TARIH,
@DEGISTIREN)
14. Dış ve İç Cursor yenile kapat temizle

Kod:
FETCH NEXT FROM CARI_DETAY
INTO 
@CARI_KODU,
@CARI_ADI,
@TARIH,
@FIS_TUR,
@OZEL_KOD,
@BELGE,
@ACIKLAMA,
@BORC,
@ALACAK,
@EKLEME_TARIH,
@EKLEYEN,
@DEGISTIRME_TARIH,
@DEGISTIREN

END
CLOSE CARI_DETAY
DEALLOCATE CARI_DETAY 

FETCH NEXT FROM CARI_LISTE
INTO 
@CLINTREF,
@CARI_KODU,
@CARI_ADI
END
CLOSE CARI_LISTE
DEALLOCATE CARI_LISTE

15. TRANSACTION kapatıyoruz.

Kod:
COMMIT TRAN  
PRINT(''Cari Hesap Ekstresini Başarıyla Tamamlanmıştır.'')
END TRY 
   
BEGIN CATCH 
IF @@TRANCOUNT > 0 
BEGIN 
ROLLBACK TRAN  
PRINT(''Cari Hesap Ekstresinde Hata Var. Lütfen Tekrar Deneyin !'')
END 
END CATCH

15. Sanal tabloyu düzenleyip listeliyoruz.

Kod:
SELECT 
CARI_KODU as [Carı Kodu],
CARI_ADI as [Carı Adı],
TARIH as [Tarih],
FIS_TUR as [Fiş Türü],
BELGE [Özel Kod],
OZEL_KOD [Belge No],
ACIKLAMA [Açıklama],
BORC [Borç],
ALACAK [Alacak],
BAKIYE [Bakiye],
DURUM [B-A],
EKLEME_TARIH [Ekleme Tarihi],
EKLEYEN [Ekleyen Kişi],
DEGISTIRME_TARIH [Değiştirme Tarihi],
DEGISTIREN as [Değiştiren Kişi]
FROM #TMP WHERE  CARI_KODU IS NOT NULL
ORDER BY CARI_KODU

')

Sorguları tek seferde ekliyorum.

Kod:
IF EXISTS (SELECT * FROM DBO.SYSOBJECTS WHERE ID = OBJECT_ID(N'CARI_EKSTRE') AND OBJECTPROPERTY(ID, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[CARI_EKSTRE] 

GO

CREATE  PROC [dbo].[CARI_EKSTRE] 
(
@FRM VARCHAR(4)
,@DNM VARCHAR(4)
,@ILKTARIH VARCHAR(12)
,@SONTARIH VARCHAR(12)
,@ILK VARCHAR(65)
,@SON VARCHAR(65)  
)
AS
EXEC('
SET NOCOUNT ON
BEGIN TRY 
BEGIN TRANSACTION 

DECLARE @DURUM Nvarchar (51)
DECLARE @CLINTREF INTEGER
DECLARE @CARI_KODU NVARCHAR(165)
DECLARE @CARI_ADI NVARCHAR(165)
DECLARE @BAKIYE FLOAT
DECLARE @TARIH datetime
DECLARE @FIS_TUR Nvarchar(165)
DECLARE @OZEL_KOD Nvarchar (165) 
DECLARE @BELGE Nvarchar(165)
DECLARE @ACIKLAMA Nvarchar(165)
DECLARE @BORC FLOAT
DECLARE @ALACAK FLOAT
DECLARE @EKLEME_TARIH datetime
DECLARE @EKLEYEN Nvarchar (65)
DECLARE @DEGISTIRME_TARIH datetime
DECLARE @DEGISTIREN Nvarchar (65)  


IF EXISTS(SELECT * FROM tempdb.dbo.sysobjects O
WHERE O.xtype = ''U'' AND O.id = OBJECT_ID(N''tempdb..#TMP''))
BEGIN  
DROP TABLE #TMP
END

CREATE TABLE #TMP
(
[CLINTREF] [int] NULL ,
[CARI_KODU] [varchar] (165)  NULL ,
[CARI_ADI] [varchar] (165)  NULL ,
[TARIH] [datetime] NULL ,
[FIS_TUR] [varchar] (165)   NULL ,
[OZEL_KOD] [varchar] (165)  NULL ,
[BELGE] [varchar] (165) NULL ,
[ACIKLAMA] [varchar] (165)  NULL,
[BORC] [FLOAT] NULL  ,
[ALACAK] [FLOAT] NULL,
[BAKIYE] [FLOAT] NULL,
[DURUM] [varchar] (5)  NULL,
[EKLEME_TARIH] [datetime] NULL ,
[EKLEYEN] [varchar] (65)  NULL,
[DEGISTIRME_TARIH] [datetime] NULL ,
[DEGISTIREN] [varchar] (65)  NULL
          
)  



DECLARE CARI_LISTE cursor for

SELECT DISTINCT CARI.LOGICALREF, CARI.CODE , CARI.DEFINITION_
FROM LG_' + @FRM + '_CLCARD CARI  WHERE CARI.LOGICALREF IN(SELECT CLIENTREF FROM LG_' + @FRM + '_' + @DNM + '_CLFLINE ) AND  CARI.CODE BETWEEN  '''+ @ILK +''' AND '''+ @SON +''' 
ORDER BY CARI.LOGICALREF,CARI.CODE,CARI.DEFINITION_


OPEN CARI_LISTE  FETCH NEXT FROM CARI_LISTE 
INTO @CLINTREF,@CARI_KODU,@CARI_ADI

WHILE @@fetch_status = 0

BEGIN

DECLARE CARI_DETAY cursor for

SELECT 
CARI_KODU,
CARI_ADI,
TARIH,
FIS_TUR,
OZEL_KOD,
BELGE,
ACIKLAMA,
BORC,
ALACAK,EKLEME_TARIH,EKLEYEN,DEGISTIREN_TARIH,DEGISTIREN
FROM (
SELECT 
MAX(CLNTC.CODE) CARI_KODU,
MAX(CLNTC.DEFINITION_) CARI_ADI ,
NULL TARIH,
''-'' FIS_TUR,
''-'' OZEL_KOD,
''-'' BELGE,
''Devir Eden Bakiye'' ACIKLAMA,
ISNULL(sum(ROUND((1-CTRNS.SIGN)*AMOUNT,2)),0) BORC,
ISNULL(sum(ROUND(CTRNS.SIGN*AMOUNT,2)),0) ALACAK,null EKLEME_TARIH,''-'' EKLEYEN,null DEGISTIREN_TARIH,''-'' DEGISTIREN
FROM LG_' + @FRM + '_CLCARD CLNTC  LEFT OUTER JOIN 
LG_' + @FRM + '_' + @DNM + '_CLFLINE CTRNS  ON (CTRNS.CLIENTREF = CLNTC.LOGICALREF) 
WHERE  CTRNS.CANCELLED=0 AND CTRNS.PAIDINCASH=0 AND CLNTC.CODE=@CARI_KODU AND CTRNS.DATE_< CONVERT(DATETIME,''' + @ILKTARIH + ''',104)

UNION ALL
SELECT  
CLNTC.CODE CARI_KODU ,CLNTC.DEFINITION_ CARI_ADI ,
CONVERT(datetime, CTRNS.DATE_, 104)TARIH,
case WHEN CTRNS.TRCODE=1 THEN ''Nakit Tahsilat''
WHEN CTRNS.TRCODE=2 THEN ''Nakit Ödeme''
WHEN CTRNS.TRCODE=3 THEN ''Borç Dekontu''
WHEN CTRNS.TRCODE=4 THEN ''Alacak Dekontu''
WHEN CTRNS.TRCODE=5 THEN ''Virman İşlemi''
WHEN CTRNS.TRCODE=6 THEN ''Kur Farkı İşlemi''
WHEN CTRNS.TRCODE=12 THEN ''Özel İşlem''
WHEN CTRNS.TRCODE=14 THEN ''Açılış Fişi''
WHEN CTRNS.TRCODE=20 THEN ''Gelen Havaleler''
WHEN CTRNS.TRCODE=21 THEN ''Gönderilen Havaleler''
WHEN CTRNS.TRCODE=31 THEN ''Mal Alım Faturası''
WHEN CTRNS.TRCODE=32 THEN ''Perakende Satış İade Faturası''
WHEN CTRNS.TRCODE=33 THEN ''Toptan Satış İade Faturası''
WHEN CTRNS.TRCODE=34 THEN ''Alınan Hizmet Faturası''
WHEN CTRNS.TRCODE=35 THEN ''Alınan Proforma Faturası''
WHEN CTRNS.TRCODE=36 THEN ''Alım İade Faturası''
WHEN CTRNS.TRCODE=37 THEN ''Perakende Satış Faturası''
WHEN CTRNS.TRCODE=38 THEN ''Toptan Satış Faturası''
WHEN CTRNS.TRCODE=39 THEN ''Verilen Hizmet Faturası''
WHEN CTRNS.TRCODE=40 THEN ''Verilen Proforma Faturası''
WHEN CTRNS.TRCODE=41 THEN ''Verilen Vade Farkı Faturası''
WHEN CTRNS.TRCODE=42 THEN ''Alınan Vade Farkı Faturası''
WHEN CTRNS.TRCODE=43 THEN ''Alınan Fiyat Farkı Faturası''
WHEN CTRNS.TRCODE=44 THEN ''Verilen Fiyat Farkı Faturası''
WHEN CTRNS.TRCODE=45 THEN ''Verilen Serbest Meslek Makbuzu''
WHEN CTRNS.TRCODE=46 THEN ''Alınan Serbest Meslek Makbuzu''
WHEN CTRNS.TRCODE=56 THEN ''Müstahsil Makbuzu''
WHEN CTRNS.TRCODE=70 THEN ''Kredi Kartı Fişi''
WHEN CTRNS.TRCODE=71 THEN ''Kredi Kartı Fişi İade''
WHEN CTRNS.TRCODE=72 THEN ''Firma Kredi Kartı Fişi''
WHEN CTRNS.TRCODE=73 THEN ''Firma Kredi Kartı Fişi İade''
WHEN CTRNS.TRCODE=61 THEN ''Çek Girişi''
WHEN CTRNS.TRCODE=62 THEN ''Senet Girişi''
WHEN CTRNS.TRCODE=63 THEN ''Çek Çıkış Cari Hesaba''
WHEN CTRNS.TRCODE=64 THEN ''Senet Çıkış Cari Hesaba''
WHEN CTRNS.TRCODE=75 THEN ''Özel Dekont''
end as FIS_TUR,
CTRNS.DOCODE OZEL_KOD,
CTRNS.SPECODE AS BELGE,
CTRNS.LINEEXP AS ACIKLAMA,
ISNULL(ROUND((1-CTRNS.SIGN)*AMOUNT,2),0) AS BORC, 
ISNULL(ROUND(CTRNS.SIGN*AMOUNT,2),0) AS ALACAK,
CONVERT(DATETIME,CTRNS.CAPIBLOCK_CREADEDDATE,104) AS EKLEME_TARIH,
EKLEYEN.NAME EKLEYEN,
CONVERT(DATETIME,CTRNS.CAPIBLOCK_MODIFIEDDATE,104) AS DEGISTIREN_TARIH,
DEGISTIREN.NAME DEGISTIREN
FROM 
LG_' + @FRM + '_' + @DNM + '_CLFLINE CTRNS LEFT OUTER JOIN
LG_' + @FRM + '_CLCARD CLNTC  ON (CTRNS.CLIENTREF = CLNTC.LOGICALREF) 
LEFT OUTER JOIN L_CAPIUSER EKLEYEN ON  EKLEYEN.NR=CTRNS.CAPIBLOCK_CREATEDBY
LEFT OUTER JOIN L_CAPIUSER DEGISTIREN  ON  DEGISTIREN.NR=CTRNS.CAPIBLOCK_MODIFIEDBY
WHERE  CTRNS.CANCELLED=0 AND CTRNS.PAIDINCASH=0 AND CLNTC.CODE=@CARI_KODU AND CTRNS.DATE_ BETWEEN  CONVERT(DATETIME,''' + @ILKTARIH + ''',104) AND  CONVERT(DATETIME,''' + @SONTARIH + ''',104))VEDAT_OZER
ORDER BY VEDAT_OZER.CARI_KODU,VEDAT_OZER.TARIH


SET  @BAKIYE = 0

OPEN CARI_DETAY FETCH NEXT FROM CARI_DETAY
INTO 
@CARI_KODU,
@CARI_ADI,
@TARIH,
@FIS_TUR,
@OZEL_KOD,
@BELGE,
@ACIKLAMA,
@BORC,
@ALACAK,
@EKLEME_TARIH,
@EKLEYEN,
@DEGISTIRME_TARIH,
@DEGISTIREN

WHILE @@fetch_status = 0

BEGIN

SET  @BAKIYE =ROUND( @BAKIYE  + @BORC - @ALACAK ,2)
SET  @DURUM = CASE WHEN @BAKIYE>0 THEN ''(B)'' WHEN @BAKIYE<0 THEN ''(A)''  WHEN @BAKIYE=0 THEN ''(-)'' ELSE '''' END

  

INSERT INTO #TMP (
CLINTREF,
CARI_KODU,
CARI_ADI,
TARIH,
FIS_TUR,
OZEL_KOD,
BELGE,
ACIKLAMA,
BORC,
ALACAK,
BAKIYE,
DURUM,
EKLEME_TARIH,
EKLEYEN,
DEGISTIRME_TARIH,
DEGISTIREN)
VALUES(  
@CLINTREF,
@CARI_KODU,
@CARI_ADI,
@TARIH,
@FIS_TUR,
@OZEL_KOD,
@BELGE,
@ACIKLAMA,
@BORC,
@ALACAK,
@BAKIYE,
@DURUM,
@EKLEME_TARIH,
@EKLEYEN,
@DEGISTIRME_TARIH,
@DEGISTIREN)


FETCH NEXT FROM CARI_DETAY
INTO 
@CARI_KODU,
@CARI_ADI,
@TARIH,
@FIS_TUR,
@OZEL_KOD,
@BELGE,
@ACIKLAMA,
@BORC,
@ALACAK,
@EKLEME_TARIH,
@EKLEYEN,
@DEGISTIRME_TARIH,
@DEGISTIREN

END
CLOSE CARI_DETAY
DEALLOCATE CARI_DETAY 

FETCH NEXT FROM CARI_LISTE
INTO 
@CLINTREF,
@CARI_KODU,
@CARI_ADI
END
CLOSE CARI_LISTE
DEALLOCATE CARI_LISTE

COMMIT TRAN  
PRINT(''Cari Hesap Ekstresini Başarıyla Tamamlanmıştır.'')
END TRY 
   
BEGIN CATCH 
IF @@TRANCOUNT > 0 
BEGIN 
ROLLBACK TRAN  
PRINT(''Cari Hesap Ekstresinde Hata Var. Lütfen Tekrar Deneyin !'')
END 
END CATCH 


SELECT 
CARI_KODU as [Carı Kodu],
CARI_ADI as [Carı Adı],
TARIH as [Tarih],
FIS_TUR as [Fiş Türü],
BELGE [Özel Kod],
OZEL_KOD [Belge No],
ACIKLAMA [Açıklama],
BORC [Borç],
ALACAK [Alacak],
BAKIYE [Bakiye],
DURUM [B-A],
EKLEME_TARIH [Ekleme Tarihi],
EKLEYEN [Ekleyen Kişi],
DEGISTIRME_TARIH [Değiştirme Tarihi],
DEGISTIREN as [Değiştiren Kişi]
FROM #TMP WHERE  CARI_KODU IS NOT NULL
ORDER BY CARI_KODU

')
 

planlamaci

Altın Üye
Katılım
15 Nisan 2010
Mesajlar
100
Excel Vers. ve Dili
2003
Abi teşekkür ederim Beynim resmen yandı....

Kayış koptu bende Cevap için teşekkür ederim.
 

Vedat Özer

Uzman
Uzman
Katılım
4 Ocak 2010
Mesajlar
2,055
Excel Vers. ve Dili
OFFICE 2007 PRO TR - Win7 X64
Selamlar,

Rica Ederim.
Fatura detayları için sorgunun değişmesi lazım.
 
Katılım
20 Ocak 2020
Mesajlar
1
Excel Vers. ve Dili
2013
Merhabalar Vedat Bey,
Bilgi Paylasiminiz İcin Tesekkur Ediyorum,
Kullanmasini Bilene Cok Degerli Bir Kaynak,
Konu Hakkinda Bir Sorum Olucakti,
Proc İle TL Bakiye Listelenmektedir.
Raporlanan Doviz veya Doviz Bakiye Listelenmemektedir,
Doviz Turu İcinde Nasil Uyarlayabilirim ?
 
Üst