Netsis Erp'de SQL ile Stok Devir Çalışması

Önce devir takibi yapabilmek için ara bir tablo oluşturuyoruz.


CREATE TABLE [dbo].[DEVIRSTOKBAKIYE](
 [STOK_KODU] [dbo].[TDBSTOKKOD] NOT NULL,
 [YILSONUTARIHI] [smalldatetime] NULL,
 [DEPO_KODU] [dbo].[TDBSMALLINT] NULL,
 [YILSONUBAKIYE] [decimal](38, 8) NULL,
 [GUNCELBAKIYE] [decimal](38, 8) NULL,
 [SILMESONRASIGUNCELBAKIYE] [decimal](38, 8) NULL,
 [DEVIRSONRASIGUNCELBAKIYE] [decimal](38, 8) NULL,
 [DURUM] [tinyint] NULL,
 [BASLANGICTARIHI] [datetime] NULL,
 [BITISTARIHI] [datetime] NULL,
 [KAYITSAYISI] [int] NULL
) ON [PRIMARY]

GO


TBLSTHAR'daki triggerlar pasif ediliyor


ALTER TABLE TBLSTHAR DISABLE TRIGGER [NTR_STHARD]
ALTER TABLE TBLSTHAR DISABLE TRIGGER [NTR_STHARD_KALEMDETAY]
ALTER TABLE TBLSTHAR DISABLE TRIGGER [NTR_STHARI]
ALTER TABLE TBLSTHAR DISABLE TRIGGER [NTR_STHARU]
ALTER TABLE TBLSTHAR DISABLE TRIGGER [NST_TBLSTHAR]


 DECLARE @STOKKODU nvarchar(35)
 DECLARE @DEVIRTARIHI SMALLDATETIME
 DECLARE @YILSONUTARIHI SMALLDATETIME
 DECLARE @DEPOKODU SMALLINT
 DECLARE @SUBEKODU SMALLINT

 SET @YILSONUTARIHI='2014-12-31'
 SET @DEVIRTARIHI='2015-01-01'
 SET @DEPOKODU=10
 SET @SUBEKODU=0


 PRINT 'CURSOR A GIRIS ' +   CONVERT(VARCHAR(19), GETDATE(), 120)

 DECLARE STOK_CURSOR CURSOR FOR 
 SELECT TOP 100 STOK_KODU FROM TBLSTSABIT WHERE STOK_KODU NOT IN (SELECT STOK_KODU FROM DEVIRSTOKBAKIYE WHERE DEPO_KODU=@DEPOKODU)
 AND STOK_KODU IN (SELECT STOK_KODU FROM TBLSTHAR WHERE DEPO_KODU=@DEPOKODU)
 ORDER BY STOK_KODU

 PRINT 'CURSOR SORGUSU ' +   CONVERT(VARCHAR(19), GETDATE(), 120)

 OPEN STOK_CURSOR
 FETCH NEXT FROM STOK_CURSOR INTO @STOKKODU  
  WHILE @@FETCH_STATUS <> -1
 BEGIN


  BEGIN TRY
   BEGIN TRAN
    
   
PRINT 'TRANSACTIONA GIRDI ' + @STOKKODU + '' + CONVERT(VARCHAR(19), GETDATE(), 120)   

INSERT INTO [dbo].[DEVIRSTOKBAKIYE]
           ([STOK_KODU]
           ,[YILSONUTARIHI]
           ,[DEPO_KODU]
           ,[YILSONUBAKIYE]
     ,DURUM
     ,BASLANGICTARIHI
     ,KAYITSAYISI
     )
 

    SELECT STOK_KODU , YILSONUTARIHI=@YILSONUTARIHI, DEPO_KODU , SUM(CASE STHAR_GCKOD WHEN 'G' THEN STHAR_GCMIK  ELSE -(STHAR_GCMIK ) END) YILSONUBAKIYE,0,GETDATE()
    ,COUNT(INCKEYNO)
    FROM TBLSTHAR WITH(NOLOCK) WHERE STHAR_TARIH<@DEVIRTARIHI AND DEPO_KODU=@DEPOKODU AND STOK_KODU=@STOKKODU
    GROUP BY STOK_KODU,DEPO_KODU

PRINT 'DEVIRSTOKBAKIYE TABLOSUNA KAYIT ATILDI ' + @STOKKODU + '' + CONVERT(VARCHAR(19), GETDATE(), 120)   

    UPDATE DEVIRSTOKBAKIYE SET GUNCELBAKIYE = ISNULL((
 
 
    SELECT  SUM(CASE STHAR_GCKOD WHEN 'G' THEN STHAR_GCMIK  ELSE -(STHAR_GCMIK ) END) YILSONUBAKIYE
    FROM TBLSTHAR WITH(NOLOCK) WHERE DEPO_KODU=@DEPOKODU AND STOK_KODU=@STOKKODU
 
 
    ),0)
    WHERE STOK_KODU=@STOKKODU AND DEPO_KODU=@DEPOKODU

PRINT 'DEVIRSTOKBAKIYE GUNCEL BAKIYE GUNCELLENDI ' + @STOKKODU + '' + CONVERT(VARCHAR(19), GETDATE(), 120)

    --DELETE FROM TBLSTHAR WHERE STHAR_TARIH<@DEVIRTARIHI AND DEPO_KODU=@DEPOKODU AND STOK_KODU=@STOKKODU

    SELECT INCKEYNO INTO #TBLSTHAR_INCKEY FROM TBLSTHAR WHERE STHAR_TARIH<@DEVIRTARIHI AND DEPO_KODU=@DEPOKODU AND STOK_KODU=@STOKKODU
    DELETE FROM TBLSTHAR WHERE INCKEYNO IN (SELECT INCKEYNO FROM #TBLSTHAR_INCKEY)
    DROP TABLE #TBLSTHAR_INCKEY

PRINT 'STHAR SILINDI ' + @STOKKODU + '' + CONVERT(VARCHAR(19), GETDATE(), 120)

    UPDATE DEVIRSTOKBAKIYE SET SILMESONRASIGUNCELBAKIYE= ISNULL((
 
 
    SELECT  SUM(CASE STHAR_GCKOD WHEN 'G' THEN STHAR_GCMIK  ELSE -(STHAR_GCMIK ) END) YILSONUBAKIYE
    FROM TBLSTHAR WITH(NOLOCK) WHERE DEPO_KODU=@DEPOKODU AND STOK_KODU=@STOKKODU
 
 
    ),0)
    WHERE STOK_KODU=@STOKKODU AND DEPO_KODU=@DEPOKODU

PRINT 'DEVIRSTOKBAKIYE SILMESONRASIGUNCELBAKIYE GUNCELLENDI ' + @STOKKODU + '' + CONVERT(VARCHAR(19), GETDATE(), 120)

   
    INSERT INTO TBLSTHAR(SUBE_KODU,STOK_KODU, DEPO_KODU, STHAR_HTUR,STHAR_GCKOD,STHAR_GCMIK,STHAR_ACIKLAMA,STHAR_DOVTIP,STHAR_TARIH)
    SELECT @SUBEKODU,STOK_KODU,DEPO_KODU,'A','C',YILSONUBAKIYE*-1,'DEVIR-MC2017',1,@YILSONUTARIHI
    FROM DEVIRSTOKBAKIYE WHERE DEPO_KODU=@DEPOKODU AND STOK_KODU=@STOKKODU AND YILSONUBAKIYE<0 and="" depo_kodu="@DEPOKODU" devirstokbakiye="" from="" insert="" into="" select="" sthar_htur="" stok_kodu="@STOKKODU" tblsthar="" where="" yilsonubakiye="">0


    UPDATE DEVIRSTOKBAKIYE SET DURUM=1, BITISTARIHI=GETDATE()
    , DEVIRSONRASIGUNCELBAKIYE= ISNULL((
 
 
    SELECT  SUM(CASE STHAR_GCKOD WHEN 'G' THEN STHAR_GCMIK  ELSE -(STHAR_GCMIK ) END) YILSONUBAKIYE
    FROM TBLSTHAR WITH(NOLOCK) WHERE DEPO_KODU=@DEPOKODU AND STOK_KODU=@STOKKODU
 
 
    ),0)
    
     WHERE STOK_KODU=@STOKKODU AND DEPO_KODU=@DEPOKODU
    
   COMMIT TRAN
  END TRY
  BEGIN CATCH
   ROLLBACK TRAN
   PRINT 'Beklenmedik bir hata olustu'
  END CATCH  

  
 --DELETE FROM DEVIRSTOKBAKIYE
 

 

 FETCH NEXT FROM STOK_CURSOR INTO @STOKKODU
 END


 CLOSE STOK_CURSOR
 DEALLOCATE STOK_CURSOR


ALTER TABLE TBLSTHAR ENABLE TRIGGER [NTR_STHARD]
ALTER TABLE TBLSTHAR ENABLE TRIGGER [NTR_STHARD_KALEMDETAY]
ALTER TABLE TBLSTHAR ENABLE TRIGGER [NTR_STHARI]
ALTER TABLE TBLSTHAR ENABLE TRIGGER [NTR_STHARU]
ALTER TABLE TBLSTHAR ENABLE TRIGGER [NST_TBLSTHAR]

Yorumlar