Logo Destek

Database => SQL => Konuyu başlatan: Recete - 30.10.2020, 14:18

Başlık: EKSİ STOK
Gönderen: Recete - 30.10.2020, 14:18
Merhaba,
Aşağıdaki sorguda sütunlar arası hesaplamada bir terslik var.
Mesela mevcut 9, Sipariş 1 adet ama Satılabilir durumu -8
SATILABİLİR stok 8 yazması gerekirken -8 yazıyor.

Bir diğer konu da;

13 adet sipariş var, 1 adet şube de var. Mevcut sıfır ise
Satılabilir 12 olması gerekiyor.

Yardımcı olabilir misiniz?

Kod: [Seç]
SELECT

I.CODE 'ÜRÜN KODU',
ISNULL((SELECT SUM (DEPO.ONHAND) AS MIKTAR FROM LV_006_01_STINVTOT AS DEPO WHERE (DEPO.INVENNO IN (1)) AND (DEPO.STOCKREF = I.LOGICALREF)),0) AS 'MEVCUT',
SUM(O.AMOUNT)   'SİPARİŞ',
ISNULL((SELECT SUM (DEPO.ONHAND-DEPO.ACTSORDER) AS MIKTAR FROM LV_006_01_STINVTOT AS DEPO WHERE (DEPO.INVENNO IN (2)) AND (DEPO.STOCKREF= I.LOGICALREF)),0) AS 'ŞUBE',
ISNULL((SELECT SUM (DEPO.ONHAND-DEPO.ACTSORDER) AS MIKTAR FROM LV_006_01_STINVTOT AS DEPO WHERE (DEPO.INVENNO IN (-1)) AND (DEPO.STOCKREF = I.LOGICALREF)),0) AS 'SATILABİLİR'

FROM
LG_006_01_STLINE    ST  RIGHT JOIN
LG_006_ITEMS        I   ON I.LOGICALREF= O.STOCKREF RIGHT JOIN
LG_006_01_ORFLINE   O ON O.LOGICALREF= ST.ORDTRANSREF

WHERE
I.CARDTYPE='12'

GROUP BY
I.CODE,
I.LOGICALREF
Başlık: Ynt: EKSİ STOK
Gönderen: Recete - 31.10.2020, 10:01
Üstadlar, bunu çözmem gerekiyor. Yardımcı olabilir ?
Başlık: Ynt: EKSİ STOK
Gönderen: hyponectia - 31.10.2020, 13:27
Merhaba,

Yukarıdaki sorgu çalışmıyor olması lazım (orfline'a bağlantı kurulmadan join atılmış).
Siparişlerde sadece ORFLINE'a refer edilmiş ama herhangi bir kısıtlama yok: satış/satınalma? ITEMS.CARDTYPE=12 ama STLINE veya ORFLINE üzerinde LINETYPE ne? STLINE'a bağlantı sebebi (satış/satınalma - TRCODE)?

Alıntı
Aşağıdaki sorguda sütunlar arası hesaplamada bir terslik var.
Sütunlar arasında herhangi bir işlem yok. Terslik, sütunlara değer gelirken oluşturulan sorgudaki eksiklik.

Kolay gelsin.
Başlık: Ynt: EKSİ STOK
Gönderen: Recete - 31.10.2020, 13:50
İlginiz için teşekkür ederim.
Sorgu şu anda çalışıyor. Ancak ORFLINE bağlantısı eksik olduğundan bazı yerlerde sapıtıyor.
Nasıl olmalıdır?
Sorguyu düzeltebilir misiniz?
Selamlar
Başlık: Ynt: EKSİ STOK
Gönderen: hyponectia - 31.10.2020, 14:16
Yardımcı olmaya çalışıyım. Tam olarak yapmak istediğiniz nedir? Malzeme ve depo bazında stok durumları ile sipariş durumlarını mı görmek istiyorsunuz? 
Başlık: Ynt: EKSİ STOK
Gönderen: Recete - 31.10.2020, 15:02
Merhaba,
Doğrudur dediğiniz gibi yapmaya çalışıyorum.
Teşekkür ederim.
Başlık: Ynt: EKSİ STOK
Gönderen: hyponectia - 31.10.2020, 16:19
Merhaba,

Aşağıdaki işinizi görür heralde ama ORFLINE için LINETYPE ayarlamanız gerekebilir. Firma ve dönem bilgilerinize göre de sorguyu düzeltmeniz gerekir.

Ekran görüntüsü de ekledim nasıl bir sonuç çıktığına dair.

Kod: [Seç]

SELECT IT.CODE AS 'Ürün Kodu', ISNULL(B1.X,0) AS 'Toplam Stok', ISNULL(B2.X,0) AS 'Merkez Stok', ISNULL(B3.X,0) AS 'Bekleyen Satış Sipariş',
CASE
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) > 0 THEN CONVERT(varchar,(ISNULL(B1.X,0)-ISNULL(B3.X,0)))
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) <=0 THEN 'Yeteri Kadar Stok Yok'
END AS 'Satılabilir'

FROM LG_507_ITEMS IT

LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_507_01_STINVTOT SI WHERE INVENNO=-1 GROUP BY STOCKREF
) AS B1 ON B1.STOCKREF=IT.LOGICALREF

LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_507_01_STINVTOT SI WHERE INVENNO=0 GROUP BY STOCKREF
) AS B2 ON B2.STOCKREF=IT.LOGICALREF

LEFT JOIN
(
SELECT STOCKREF, SUM(AMOUNT-SHIPPEDAMOUNT) X FROM LG_507_01_ORFLINE ORL WHERE ORL.TRCODE=1 AND ORL.LINETYPE IN (0,7) AND (ORL.AMOUNT-ORL.SHIPPEDAMOUNT > 0 ) AND ORL.STATUS <>2 AND ORL.CANCELLED=0
GROUP BY ORL.STOCKREF
) AS B3 ON B3.STOCKREF=IT.LOGICALREF

WHERE IT.ACTIVE=0



Başlık: Ynt: EKSİ STOK
Gönderen: Recete - 31.10.2020, 16:33
Tamamdır. Çok teşekkür ederim. Hakkınızı helal ediniz.
Buna şube ambarını da ilave etmem gerekecek.
MERKEZ STOK Üzerinden Çoğaltarak gidebilir miyim?
Ayrıca stok kartı içerisindeki gurup kodunu buraya yazmadan iç select ile sıralamak ve daha sonra ürün koduna göre sıralama yapmam gerekecek.
ORDER BY En sona mı yazmalıyım?
Başlık: Ynt: EKSİ STOK
Gönderen: hyponectia - 31.10.2020, 16:45
B1 veya B2 sorgusunu kopyalayıp, ambar (INVENNO) değiştirmeniz yeterli ambar eklemek için.

Sıralama yapmak için son satırdaki WHERE'den sonra yazabilirsiniz ORDER BY.
Başlık: Ynt: EKSİ STOK
Gönderen: Recete - 31.10.2020, 17:04
Tamamdır. Tekrar teşekkür ederim.
Sağlıcakla kalın .
Başlık: Ynt: EKSİ STOK
Gönderen: Recete - 02.11.2020, 14:51
Merhaba,

Aşağıdaki sorguda;
Msg 8114, Level 16, State 5, Line 1
varchar veri türü numeric veri türüne dönüştürülürken hata.
hatası veriyor.
Nasıl düzeltilebilir?

Aslında (yeterli stok yok) yazısı yerine sıfır (0) yazsa nasıl olur?
Demek istediğim (-) durumdaki stokları da sıfır (0) görelim.
Eğer bir üründen sipariş miktarı toplam mevcuttan fazlaysa yani fark < 0 ise doğrudan sıfır yazmalıdır.

Bir diğer konu da;
İç ve dış Selectler sorgu içerisine alınabilir mi?

Kod: [Seç]
SELECT
[ÜRÜN KODU],
SHOWROOM,
ŞUBE,
[TOPLAM MEVCUT],
SİPARİŞ,
SATILABİLİR
FROM
(
SELECT * FROM
(
SELECT

I.CODE AS 'ÜRÜN KODU',
I.STGRPCODE,

ISNULL(B2.X,0) 'SHOWROOM',
ISNULL(B4.X,0) 'ŞUBE',
ISNULL(B1.X,0) 'TOPLAM MEVCUT',
ISNULL(B3.X,0) 'SİPARİŞ',

CASE
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) > 0 THEN CONVERT(varchar,(ISNULL(B1.X,0)-ISNULL(B3.X,0)))
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) <=0 THEN 'Yeteri Kadar Stok Yok'
END AS 'Satılabilir'

FROM LG_622_ITEMS I

LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_622_04_STINVTOT SI
WHERE INVENNO=-1 GROUP BY STOCKREF
) AS B1 ON B1.STOCKREF=I.LOGICALREF

LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_622_04_STINVTOT SI
WHERE INVENNO=1 GROUP BY STOCKREF
) AS B2 ON B2.STOCKREF=I.LOGICALREF

LEFT JOIN
(
SELECT STOCKREF, SUM(ONHAND) X FROM LV_622_04_STINVTOT SI
WHERE INVENNO=2 GROUP BY STOCKREF
) AS B4 ON B4.STOCKREF=I.LOGICALREF

LEFT JOIN
(
SELECT STOCKREF, SUM(AMOUNT-SHIPPEDAMOUNT) X FROM LG_622_04_ORFLINE ORL
WHERE ORL.TRCODE=1 AND ORL.LINETYPE IN (0,7) AND (ORL.AMOUNT-ORL.SHIPPEDAMOUNT > 0 ) AND ORL.STATUS <>2 AND ORL.CANCELLED=0
GROUP BY ORL.STOCKREF
) AS B3 ON B3.STOCKREF=I.LOGICALREF

WHERE I.CARDTYPE=12
)
AS T
WHERE
CAST(SHOWROOM AS decimal(38,2))>0 OR
CAST(ŞUBE AS decimal(38,2))>0 OR
CAST([TOPLAM MEVCUT] AS decimal(38,2))>0 OR
CAST(SİPARİŞ AS decimal(38,2))>0 OR
CAST(SATILABİLİR AS decimal(38,2))>0
) TS
ORDER BY STGRPCODE, [ÜRÜN KODU]
Başlık: Ynt: EKSİ STOK
Gönderen: hyponectia - 02.11.2020, 20:49
Merhaba,

CASE
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) > 0 THEN ISNULL(B1.X,0)-ISNULL(B3.X,0)
WHEN ISNULL(B1.X,0)-ISNULL(B3.X,0) <=0 THEN 0
END AS 'Satılabilir'

olarak değiştirilebilir.
Başlık: Ynt: EKSİ STOK
Gönderen: Recete - 03.11.2020, 14:19

Tamamdır. Bilgi ve yardımınız için teşekkür ederim.
Kolay gelsin.