Blog'a Dön SQL & Teknik

Logo Stok Bakiye Düzeltme: SQL ile Hatalı Stokları Bulma

24 Aralık 2025 15 dk okuma

Özet: Stok bakiye hataları yanlış fiyatlandırma, eksik satış ve mali sorunlara yol açar. Bu rehberde SQL sorguları ile hatalı stokları tespit etme ve düzeltme yöntemlerini öğreneceksiniz.

Stok Bakiye Hataları Neden Oluşur?

Negatif Stok

Stok olmadan satış fişi kesilmesi veya tarih sıralaması hataları

Silinen Fişler

Stok hareketi silindikten sonra bakiye güncellememe

Mükerrer Kayıt

Aynı fişin birden fazla kaydedilmesi

Entegrasyon Hataları

E-ticaret veya WMS entegrasyonlarından kaynaklanan hatalar

Negatif Stokları Tespit Etme

Aşağıdaki sorgu, negatif bakiyeye düşmüş tüm stokları listeler:

SELECT 
    ITM.CODE AS StokKodu,
    ITM.NAME AS StokAdi,
    WH.NAME AS DepoAdi,
    ISNULL(INV.ONHAND, 0) AS Miktar
FROM LG_001_ITEMS ITM
LEFT JOIN LG_001_01_STINVTOT INV ON ITM.LOGICALREF = INV.STOCKREF
LEFT JOIN L_CAPIWHOUSE WH ON INV.INVENNO = WH.NR
WHERE ISNULL(INV.ONHAND, 0) < 0
ORDER BY INV.ONHAND ASC

Not: 001 firma kodunuza, 01 dönem kodunuza göre düzenleyin.

Hesaplanan vs Kayıtlı Bakiye Karşılaştırma

En kritik sorgu: Stok hareketlerinden hesaplanan bakiye ile kayıtlı bakiyeyi karşılaştırır.

WITH HesaplananBakiye AS (
    SELECT 
        STOCKREF,
        INVENNO,
        SUM(CASE 
            WHEN IOCODE IN (1,2,3,4,12,13) THEN AMOUNT
            WHEN IOCODE IN (5,6,7,8,14,15) THEN -AMOUNT
            ELSE 0
        END) AS HesaplananMiktar
    FROM LG_001_01_STLINE
    WHERE CANCELLED = 0
    GROUP BY STOCKREF, INVENNO
)
SELECT 
    ITM.CODE AS StokKodu,
    ITM.NAME AS StokAdi,
    WH.NAME AS Depo,
    HB.HesaplananMiktar,
    ISNULL(INV.ONHAND, 0) AS KayitliBakiye,
    HB.HesaplananMiktar - ISNULL(INV.ONHAND, 0) AS Fark
FROM HesaplananBakiye HB
INNER JOIN LG_001_ITEMS ITM ON HB.STOCKREF = ITM.LOGICALREF
LEFT JOIN LG_001_01_STINVTOT INV 
    ON HB.STOCKREF = INV.STOCKREF AND HB.INVENNO = INV.INVENNO
LEFT JOIN L_CAPIWHOUSE WH ON HB.INVENNO = WH.NR
WHERE ABS(HB.HesaplananMiktar - ISNULL(INV.ONHAND, 0)) > 0.01
ORDER BY ABS(HB.HesaplananMiktar - ISNULL(INV.ONHAND, 0)) DESC

IOCODE Değerleri (Stok Hareket Türleri)

IOCODE Açıklama Etki
1 Satınalma İrsaliyesi + Giriş
2 Perakende Satış İade + Giriş
3 Toptan Satış İade + Giriş
4 Konsinye Çıkış İade + Giriş
5 Satınalma İade - Çıkış
6 Perakende Satış - Çıkış
7 Toptan Satış - Çıkış
8 Konsinye Çıkış - Çıkış
12 Üretimden Giriş + Giriş
13 Devir Fişi + Giriş

Stok Bakiyelerini Yeniden Hesaplatma

Dikkat!

Doğrudan SQL UPDATE işlemi yapmadan önce mutlaka yedek alın. Tercihen Logo'nun kendi araçlarını kullanın:

  • Yardımcı Programlar → Envanter Hesapları Yeniden Oluştur
  • • Bu işlem STINVTOT tablosunu hareket kayıtlarından yeniden hesaplar

Belirli Bir Stokun Hareket Geçmişi

SELECT 
    ST.DATE_ AS Tarih,
    ST.FICHENO AS FisNo,
    CASE ST.IOCODE
        WHEN 1 THEN 'Satınalma'
        WHEN 7 THEN 'Toptan Satış'
        WHEN 13 THEN 'Devir'
        ELSE CAST(ST.IOCODE AS VARCHAR)
    END AS Tur,
    ST.AMOUNT AS Miktar,
    WH.NAME AS Depo
FROM LG_001_01_STLINE ST
INNER JOIN LG_001_ITEMS ITM ON ST.STOCKREF = ITM.LOGICALREF
LEFT JOIN L_CAPIWHOUSE WH ON ST.INVENNO = WH.NR
WHERE ITM.CODE = 'STK-001'  -- Stok kodunu yazın
  AND ST.CANCELLED = 0
ORDER BY ST.DATE_, ST.LOGICALREF

Envanter Sayım Farkı Fişi Oluşturma

Fiziksel sayım sonucu tespit edilen farklar için Logo'da:

  1. 1 Stok Yönetimi → Hareketler → Sayım Fişleri
  2. 2 Yeni Sayım Fişi oluşturun
  3. 3 Sayım miktarlarını girin (sistem farkı otomatik hesaplar)
  4. 4 Sayım fişini onaylayın → Fark fişi otomatik oluşur

Stok Bakiye Analizi Desteği

Karmaşık stok problemlerinizi çözelim, envanter doğruluğunuzu sağlayalım.

Destek Al