Merhabalar ,
Netsis üzerinde bulunan stok hareketlerini Miktar bazlı nasıl bakiyesini kontrol edeceğimizi kısaca nasıl çözümü anlatmaya çalışacağım.
Problem
Burda aslında diğer veri tabanlarından farklı olarak 2 sorunumuz var..
- Bir Netsis veritabanının bir ID PK alanının olmaması
2.İşlemi yapacağımız veritabanının 2008 R2 olmasında kaynaklı RANGE UNBOUNDED PRECEDING AND CURRENT ROW özelliğini desteklememesi
Çözüm İse
Kesin bir çözüm olması için öncelikle satırların birbirinden ayrılması için
ROW_NUMBER() OVER (PARTITION BY EKRAN.STOK_KODU ORDER BY EKRAN.STOK_KODU ASC) AS SAY,
İle Benzersiz stok bazlı bir değer üretmek
CREATE VIEW dbo.VW_STOKDURUM
--WITH ENCRYPTION, SCHEMABINDING, VIEW_METADATA
AS
SELECT
ROW_NUMBER() OVER (PARTITION BY EKRAN.STOK_KODU ORDER BY EKRAN.STOK_KODU ASC) AS SAY,
Hazırlıyacağımız bir Wiew ile ID birbirlerine eşitlemek kullanacağız.
CASE EKRAN.STHAR_HTUR
WHEN 'A' THEN 'DEVİR'
WHEN 'D' THEN 'MUHTELİF'
WHEN 'J' THEN 'FATURA'
-- ELSE
END AS Durum,
DBO.TARIH_FORMATLA(EKRAN.STHAR_TARIH) AS TARIH,EKRAN.STOK_KODU,EKRAN.FISNO, CONVERT(DECIMAL(15,3),EKRAN.CLC_GIRIS_MIK) AS GMIKTAR,CONVERT(DECIMAL(15,3),EKRAN.CLC_CIKIS_MIK) AS CIKISMIKTAR,
CONVERT(DECIMAL(15,3),EKRAN.STHAR_NF) AS BIRIM_FIYAT
,EKRAN.DEPO_KODU,EKRAN.STHAR_ACIKLAMA,EKRAN.STHAR_SIPNUM,EKRAN.STHAR_CARIKOD,EKRAN.EKALAN,EKRAN.MUH_KODU,EKRAN.S_YEDEK1,EKRAN.CLC_ACIKLAMA
FROM STHAR_EKR AS EKRAN
WHERE EKRAN.STHAR_HTUR NOT IN ('C','N')
Bir sonraki adımda ise CTE ile sorgumuz yazacağız.
WITH cte AS
(
SELECT
ROW_NUMBER() OVER (PARTITION BY EKRAN.STOK_KODU ORDER BY EKRAN.STOK_KODU ASC) AS SAY,
CASE EKRAN.STHAR_HTUR
WHEN 'A' THEN 'DEVİR'
WHEN 'D' THEN 'MUHTELİF'
WHEN 'J' THEN 'FATURA'
-- ELSE
END AS Durum,
DBO.TARIH_FORMATLA(EKRAN.STHAR_TARIH) AS TARIH,EKRAN.STOK_KODU,EKRAN.FISNO, CONVERT(DECIMAL(15,3),EKRAN.CLC_GIRIS_MIK) AS GMIKTAR,CONVERT(DECIMAL(15,3),EKRAN.CLC_CIKIS_MIK) AS CIKISMIKTAR,
CONVERT(DECIMAL(15,3),EKRAN.STHAR_NF) AS BIRIM_FIYAT
,EKRAN.DEPO_KODU,EKRAN.STHAR_ACIKLAMA,EKRAN.STHAR_SIPNUM,EKRAN.STHAR_CARIKOD,EKRAN.EKALAN,EKRAN.MUH_KODU,EKRAN.S_YEDEK1,EKRAN.CLC_ACIKLAMA
FROM STHAR_EKR AS EKRAN
WHERE EKRAN.STHAR_HTUR NOT IN ('C','N')
)
SELECT SAY
,Durum
,TARIH
,STOK_KODU
,FISNO
,GMIKTAR
,CIKISMIKTAR
,(SELECT SUM(GMIKTAR-CIKISMIKTAR)
FROM VW_STOKDURUM b
WHERE b.SAY <= cte.SAY AND cte.STOK_KODU=B.STOK_KODU ) AS BAKIYE
,BIRIM_FIYAT
,DEPO_KODU
,STHAR_ACIKLAMA
,STHAR_SIPNUM
,STHAR_CARIKOD
,EKALAN
,MUH_KODU
,S_YEDEK1
,CLC_ACIKLAMA
FROM cte
Sorunu kalıcı olarak çözmüş durumdayız.
Sorunsuz günler dileğiyle