MSSQL 2008 R2 Stok Yüreyen Bakiye NETSIS

MS SQL

ÖMER ÇARNAÇAR

15.09.2018

0 Yorum


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

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

 

Başlık Değer