Erp Asistanı Erp Asistanı
Netsis SQL

Netsis Kritik Stok ve Sipariş İhtiyaç Raporu SQL Rehberi

Netsis TBLSTOKPH ve TBLSTSABIT tablolarıyla kritik stok ve sipariş ihtiyaç raporu SQL sorguları. Rezerve müşteri ve satıcı siparişleriyle net stok hesabı.

Erp Asistanı Erp Asistanı Editör ekibi 6 dk okuma
Netsis Kritik Stok ve Sipariş İhtiyaç Raporu SQL Rehberi

Depo ve satınalma operasyonlarında en sık karşılaşılan tuzak, yalnızca raftaki fiziki stoka bakarak sipariş kararı almaktır. Depoda 50 adet görünen bir ürün için sistemde 80 adetlik açık müşteri siparişi (rezerve stok) bulunabilir veya tedarikçiye verilmiş 100 adetlik satıcı siparişi yolda olabilir. Doğru bir sipariş ihtiyaç analizi yapabilmek için fiziki stok, rezerve müşteri siparişleri ve bekleyen satıcı siparişleri birlikte değerlendirilmelidir.

Netsis ERP mimarisinde anlık stok bakiyeleri ve sipariş kümülatifleri TBLSTOKPH tablosunda tutulur. Bu rehberde, TBLSTOKPH ve TBLSTSABIT tablolarını kullanarak asgari stok seviyesinin altına düşen ürünleri tespit eden ve net satınalma ihtiyacını hesaplayan SQL sorgularını adım adım inceliyoruz. Netsis veri yapısının temelleri için Netsis tablo yapısı rehberi yazımıza da göz atabilirsiniz.

Netsis Stok Bakiyesi ve TBLSTOKPH Tablosunun Mantığı

Netsis'te her stok hareketinde TBLSTHAR tablosuna satır yazılırken, depo ve şube bazındaki anlık kümülatifler TBLSTOKPH tablosunda güncellenir. Bu tablo sayesinde milyonlarca satırlık hareket geçmişini toplamadan anlık bakiyeye, bekleyen müşteri siparişlerine ve yoldaki tedarik miktarına doğrudan ulaşabilirsiniz.

Net stok ve ihtiyaç hesabında kullanılan temel alanlar şunlardır:

Kavram TBLSTOKPH Kolonları Hesaplama Mantığı
Fiziki Stok TOP_GIRIS_MIK, TOP_CIKIS_MIK TOP_GIRIS_MIK - TOP_CIKIS_MIK
Rezerve Sipariş MUS_TOP_SIPARIS, MUS_TOP_TESLIM MUS_TOP_SIPARIS - MUS_TOP_TESLIM
Bekleyen Tedarik SAT_TOP_SIPARIS, SAT_TOP_TESLIM SAT_TOP_SIPARIS - SAT_TOP_TESLIM
Net Kullanılabilir Stok Tüm yukarıdaki alanlar Fiziki Stok + Bekleyen Tedarik - Rezerve Sipariş
Sipariş İhtiyacı Net Kullanılabilir Stok ve Emniyet Seviyesi Asgari Hedef - Net Kullanılabilir Stok

Hareket bazlı bakiye doğrulama detayları için Netsis stok hareketleri SQL sayfamızı inceleyebilirsiniz.

1. Depo Bazında Anlık Fiziki Stok Bakiyesi

TBLSTOKPH tablosundan şube ve depo bazında sıfırdan farklı fiziki bakiye veren kayıtları listelemek için aşağıdaki sorguyu kullanabilirsiniz:

SELECT
    p.SUBE_KODU,
    p.DEPO_KODU,
    p.STOK_KODU,
    s.STOK_ADI,
    s.OLCU_BR1,
    p.TOP_GIRIS_MIK,
    p.TOP_CIKIS_MIK,
    (p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK) AS FizikiStok
FROM TBLSTOKPH p
INNER JOIN TBLSTSABIT s ON s.STOK_KODU = p.STOK_KODU
WHERE p.SUBE_KODU = 0
  AND (p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK) <> 0
ORDER BY p.DEPO_KODU, p.STOK_KODU;

2. Rezerve ve Yoldaki Mallarla Net Kullanılabilir Stok Sorgusu

Müşteri siparişleriyle rezerve edilmiş miktarları fiziki stoktan düşüp tedarikçiden beklenen siparişleri ekleyen net bakiye sorgusu:

SELECT
    p.SUBE_KODU,
    p.DEPO_KODU,
    p.STOK_KODU,
    s.STOK_ADI,
    s.GRUP_KODU,
    (p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK) AS FizikiStok,
    (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM) AS BekleyenAlim,
    (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM) AS RezerveSiparis,
    ((p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK)
      + (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM)
      - (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM)) AS NetKullanilabilirStok
FROM TBLSTOKPH p
INNER JOIN TBLSTSABIT s ON s.STOK_KODU = p.STOK_KODU
WHERE p.SUBE_KODU = 0
ORDER BY p.DEPO_KODU, p.STOK_KODU;

3. Asgari Stok Seviyesinin Altına Düşenler ve Sipariş İhtiyaç Raporu

Belirlenen kritik emniyet stoku eşiğinin altına inen ürünleri listeleyen ve verilmesi gereken net sipariş miktarını hesaplayan parametrik sorgu:

DECLARE @KritikSeviye decimal(15, 2) = 20.00;

SELECT
    p.SUBE_KODU,
    p.STOK_KODU,
    s.STOK_ADI,
    s.SATICI_KODU,
    s.OLCU_BR1,
    (p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK) AS FizikiStok,
    (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM) AS YoldakiSiparis,
    (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM) AS RezerveMusteriSiparisi,
    ((p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK)
      + (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM)
      - (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM)) AS NetKullanilabilir,
    @KritikSeviye AS AsgariHedef,
    CASE
        WHEN ((p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK)
              + (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM)
              - (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM)) < @KritikSeviye
        THEN @KritikSeviye - ((p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK)
                              + (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM)
                              - (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM))
        ELSE 0
    END AS SiparisIhtiyacMiktari
FROM TBLSTOKPH p
INNER JOIN TBLSTSABIT s ON s.STOK_KODU = p.STOK_KODU
WHERE p.SUBE_KODU = 0
  AND s.SATINALMAKILIT = 'H'
  AND ((p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK)
       + (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM)
       - (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM)) < @KritikSeviye
ORDER BY SiparisIhtiyacMiktari DESC;

4. Açık Sipariş Kalemleriyle (TBLSIPATRA) Doğrulanmış İhtiyaç Analizi

Kümülatif bakiye tablosu yerine doğrudan açık sipariş kalemlerini (STHAR_FTIRSIP = '6' müşteri ve '7' satıcı) birleştirerek tam mutabakatlı net bakiye hesabı yapan sorgu. Sipariş kalemleri hakkında detaylı bilgi için Netsis açık siparişler SQL rehberi ve Netsis satıcı siparişleri SQL içeriklerimizi inceleyebilirsiniz:

SELECT
    s.STOK_KODU,
    s.STOK_ADI,
    s.SATICI_KODU,
    s.OLCU_BR1,
    ISNULL(ph.FizikiStok, 0) AS FizikiStok,
    ISNULL(sip.AcikMusteriSiparisi, 0) AS RezerveSiparis,
    ISNULL(sat.AcikSaticiSiparisi, 0) AS BekleyenAlim,
    (ISNULL(ph.FizikiStok, 0) + ISNULL(sat.AcikSaticiSiparisi, 0) - ISNULL(sip.AcikMusteriSiparisi, 0)) AS NetKullanilabilir
FROM TBLSTSABIT s
LEFT JOIN (
    SELECT
        STOK_KODU,
        SUM(TOP_GIRIS_MIK - TOP_CIKIS_MIK) AS FizikiStok
    FROM TBLSTOKPH
    WHERE SUBE_KODU = 0
    GROUP BY STOK_KODU
) ph ON ph.STOK_KODU = s.STOK_KODU
LEFT JOIN (
    SELECT
        STOK_KODU,
        SUM(STHAR_GCMIK) AS AcikMusteriSiparisi
    FROM TBLSIPATRA
    WHERE SUBE_KODU = 0
      AND STHAR_FTIRSIP = '6'
    GROUP BY STOK_KODU
) sip ON sip.STOK_KODU = s.STOK_KODU
LEFT JOIN (
    SELECT
        STOK_KODU,
        SUM(STHAR_GCMIK) AS AcikSaticiSiparisi
    FROM TBLSIPATRA
    WHERE SUBE_KODU = 0
      AND STHAR_FTIRSIP = '7'
    GROUP BY STOK_KODU
) sat ON sat.STOK_KODU = s.STOK_KODU
WHERE s.SATINALMAKILIT = 'H'
  AND (ISNULL(ph.FizikiStok, 0) + ISNULL(sat.AcikSaticiSiparisi, 0) - ISNULL(sip.AcikMusteriSiparisi, 0)) <= 0
ORDER BY NetKullanilabilir ASC;

5. Tedarikçi ve Stok Grubu Kırılımlı Acil Sipariş Listesi

Satınalma departmanının doğrudan tedarikçilere sipariş geçebilmesi için ana satıcı cari kodu ve alış fiyatı ile zenginleştirilmiş sipariş ihtiyaç listesi:

SELECT
    s.SATICI_KODU,
    s.GRUP_KODU,
    s.STOK_KODU,
    s.STOK_ADI,
    s.OLCU_BR1,
    s.ALIS_FIAT1,
    (p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK) AS DepoStok,
    (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM) AS BekleyenMusteriSiparisi,
    (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM) AS BekleyenTedarik,
    ((p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM)
      - (p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK)
      - (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM)) AS AcilSiparisIhtiyaci
FROM TBLSTOKPH p
INNER JOIN TBLSTSABIT s ON s.STOK_KODU = p.STOK_KODU
WHERE p.SUBE_KODU = 0
  AND s.SATINALMAKILIT = 'H'
  AND ((p.TOP_GIRIS_MIK - p.TOP_CIKIS_MIK)
       + (p.SAT_TOP_SIPARIS - p.SAT_TOP_TESLIM)
       - (p.MUS_TOP_SIPARIS - p.MUS_TOP_TESLIM)) < 0
ORDER BY s.SATICI_KODU, s.GRUP_KODU, AcilSiparisIhtiyaci DESC;

Sık yapılan hatalar

  • Sadece fiziki stoka bakmak: Müşteriye taahhüt edilmiş rezerve siparişleri hesaba katmamak, stokta ürün var zannedilirken sevkiyat krizlerine yol açar.
  • Yoldaki satıcı siparişlerini mükerrer sipariş etmek: Tedarikçiye daha önce geçilmiş olan siparişler (SAT_TOP_SIPARIS - SAT_TOP_TESLIM) hesaba dahil edilmezse gereksiz stok maliyeti oluşur.
  • SUBE_KODU filtresini atlamak: Çok şubeli Netsis yapılarında SUBE_KODU filtresi verilmediğinde tüm şubelerin bakiyeleri toplanır veya mükerrer satırlar döner.
  • Kilitli ve pasif stokları filtrelememek: SATINALMAKILIT = 'E' olan ya da artık tedarik edilmeyen ürünler rapordan elenmelidir.

Sık sorulanlar

TBLSTOKPH tablosundaki bakiye ile TBLSTHAR hareket toplamı neden farklı çıkar? Netsis'te veri tabanına dışarıdan müdahale edilmişse veya devir sonrası bakiye güncelleme servisi çalıştırılmamışsa kümülatif tablosu ile hareket tablosu arasında fark oluşabilir. Bu durumda Netsis içerisinden stok bakiye düzeltme işlemi çalıştırılmalıdır.

Depo bazında asgari stok takibi yapılabilir mi? TBLSTOKPH tablosunda veriler DEPO_KODU bazında tutulur. Sorgularınıza AND p.DEPO_KODU = @DepoNo filtresi ekleyerek her deponun kendi kritik stok seviyesini ayrı ayrı raporlayabilirsiniz.

Bekleyen sipariş miktarı neden eksi görünüyor? Satıcıdan siparişsiz mal kabulü yapıldığında veya sipariş miktarı üzerinde teslimat girildiğinde teslimat miktarı sipariş miktarını aşabilir. İhtiyaç formüllerinde bu durum CASE WHEN kontrolleri ile sıfıra çekilmelidir.


Kritik stok kontrollerini ve sipariş ihtiyaç analizlerini her gün manuel SQL çalıştırmadan otomatik takip etmek ister misiniz? Erp Asistanı ile tüm Netsis raporlarınızı doğal dille konuşarak üretebilir ve anlık uyarı mekanizmaları kurabilirsiniz.

Ücretsiz üye olun, ERP raporlarınızı saniyeler içinde alın →

Bu yazıyı paylaş
Konuşarak raporlayın

Netsis'te SQL ve raporu konuşarak alın

Türkçe sorunuzu yazın, şemanıza uygun çalışan SQL'i ya da hazır uygulamanızı saniyeler içinde alın. Kredi kartı gerekmez.