Excel Forum

Excel Forum (http://www.excel.web.tr/index.php)
-   Logo SQL (http://www.excel.web.tr/forumdisplay.php?f=191)
-   -   Stoklarda Yürüyen Bakiye (http://www.excel.web.tr/showthread.php?t=169810)

Vedat Özer 15-01-2018 21:20

Stoklarda Yürüyen Bakiye
 
1 Eklenti(ler)
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'

planlamaci 26-01-2018 14:22

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.

Vedat Özer 27-01-2018 12:54

1 Eklenti(ler)
Selamlar,

Oluşturulan Proc Excel'den değişken vererek çağırabilirsiniz. Cari Hesaplarla yaptığım çalışmayı ekliyorum.

planlamaci 08-02-2018 15:21

Logo Cari Yürüyen bakiye Fatura detayı
 
Alıntı:

Vedat Özer tarafından gönderildi (Mesaj 927993)
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 08-02-2018 16:29

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 09-02-2018 09:50

Abi teşekkür ederim Beynim resmen yandı....
 
Kayış koptu bende Cevap için teşekkür ederim.

Vedat Özer 09-02-2018 12:50

Selamlar,

Rica Ederim.
Fatura detayları için sorgunun değişmesi lazım.


Saat 02:58

Powered by vBulletin Version 3.7.2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.