MSSQL 2008 R2 Stok Yüreyen Bakiye Netsis

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..

  1. 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

Ksin 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

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir