Ö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]
0>
Yorumlar
Yorum Gönder