Erp Asistanı Erp Asistanı
Netsis SQL

GRUP_KODU ve KOD_1/KOD_2 ile Netsis Stok Kategorisi Raporlama

Netsis stok kartlarında GRUP_KODU, KOD_1 ve KOD_2 ile kategori bazlı satış ve stok raporu alın. Boş kodları temizleyin, örnek SQL ile çalışın.

Erp Asistanı Erp Asistanı Editör ekibi 6 dk okuma
GRUP_KODU ve KOD_1/KOD_2 ile Netsis Stok Kategorisi Raporlama

Netsis'te stok kartlarındaki GRUP_KODU, KOD_1 ve KOD_2 alanları serbest sınıflama için kullanılır; ancak boş veya tutarsız kodlar raporlarınızı sessizce bozar. Bu yazıda hem kart listesini hem de satış toplamlarını kategori bazında çıkaran, kopyala-çalıştır SQL örnekleri veriyoruz. Tablo yapısına genel bakış için Netsis tablo yapısı rehberi yazısına göz atın.

Stok kartı sınıflama alanları

TBLSTSABIT tablosunda stok kartına ait sınıflama alanları şunlardır:

Alan Tip Açıklama Boş değer tuzağı
GRUP_KODU varchar(8) Stok grubu kodu (ör. HAM, MAMUL) NULL veya boş string olabilir
KOD_1 varchar(8) Birinci sınıflama (ör. marka) NULL veya boş string olabilir
KOD_2 varchar(8) İkinci sınıflama (ör. kategori) NULL veya boş string olabilir
KOD_3..KOD_5 varchar(8) Ek sınıflama alanları Aynı şekilde

Bu alanlar varchar olduğu için hem NULL hem de '' (boş string) değer alabilir. Raporlarken ikisini birden ele almak gerekir; aksi hâlde bazı kartlar toplam dışı kalır.

1. Stok kartlarını kategori kodlarıyla listeleme

SELECT 
    STOK_KODU,
    STOK_ADI,
    CASE 
        WHEN GRUP_KODU IS NULL OR GRUP_KODU = '' THEN '(Tanimsiz)'
        ELSE GRUP_KODU 
    END AS GRUP_KODU,
    CASE 
        WHEN KOD_1 IS NULL OR KOD_1 = '' THEN '(Tanimsiz)'
        ELSE KOD_1 
    END AS KOD_1,
    CASE 
        WHEN KOD_2 IS NULL OR KOD_2 = '' THEN '(Tanimsiz)'
        ELSE KOD_2 
    END AS KOD_2,
    OLCU_BR1,
    SATIS_FIAT1
FROM TBLSTSABIT
ORDER BY GRUP_KODU, KOD_1, KOD_2;

2. Grup kodu başına stok kartı sayısı (boşları dahil et)

SELECT 
    CASE 
        WHEN GRUP_KODU IS NULL OR GRUP_KODU = '' THEN '(Tanimsiz)'
        ELSE GRUP_KODU 
    END AS GRUP_KODU,
    COUNT(*) AS StokSayisi
FROM TBLSTSABIT
GROUP BY 
    CASE 
        WHEN GRUP_KODU IS NULL OR GRUP_KODU = '' THEN '(Tanimsiz)'
        ELSE GRUP_KODU 
    END
ORDER BY StokSayisi DESC;

3. Son 12 ay satış cirosunu GRUP_KODU'na göre toplama

Aşağıdaki sorgu satış faturası ve satış irsaliyesi kalemlerini (STHAR_FTIRSIP IN ('1','3') ve STHAR_GCKOD='C') kullanır. Tarih aralığını ihtiyacınıza göre değiştirin.

-- SUBE_KODU: Çok şubeli kurulumda WHERE SUBE_KODU = <şube> ekleyin.
SELECT 
    s.GRUP_KODU,
    SUM(h.STHAR_GCMIK) AS ToplamMiktar,
    SUM(h.STHAR_GCMIK * h.STHAR_NF) AS NetCiro
FROM TBLSTHAR h
INNER JOIN TBLSTSABIT s ON s.STOK_KODU = h.STOK_KODU
WHERE h.STHAR_GCKOD = 'C'
  AND h.STHAR_FTIRSIP IN ('1','3')
  AND h.STHAR_TARIH >= '2026-01-01' AND h.STHAR_TARIH < '2027-01-01'
GROUP BY s.GRUP_KODU
ORDER BY NetCiro DESC;

4. KOD_1 (marka) bazında satış raporu

SELECT 
    s.KOD_1,
    COUNT(DISTINCT s.STOK_KODU) AS UrunCesidi,
    SUM(h.STHAR_GCMIK) AS ToplamMiktar,
    SUM(h.STHAR_GCMIK * h.STHAR_NF) AS NetCiro
FROM TBLSTHAR h
INNER JOIN TBLSTSABIT s ON s.STOK_KODU = h.STOK_KODU
WHERE h.STHAR_GCKOD = 'C'
  AND h.STHAR_FTIRSIP IN ('1','3')
  AND h.STHAR_TARIH >= '2026-01-01' AND h.STHAR_TARIH < '2027-01-01'
  AND s.KOD_1 IS NOT NULL AND s.KOD_1 <> ''
GROUP BY s.KOD_1
ORDER BY NetCiro DESC;

5. Boş grup kodu veya KOD_1 olan kartları tespit etme (temizlik listesi)

SELECT 
    STOK_KODU,
    STOK_ADI,
    GRUP_KODU,
    KOD_1,
    KOD_2
FROM TBLSTSABIT
WHERE (GRUP_KODU IS NULL OR GRUP_KODU = '')
   OR (KOD_1 IS NULL OR KOD_1 = '')
   OR (KOD_2 IS NULL OR KOD_2 = '')
ORDER BY STOK_KODU;

Sık yapılan hatalar

  • NULL ve boş string ayrımını yapmamak: ISNULL(GRUP_KODU, '(Boş)') yalnızca NULL değerleri yakalar; '' değerleri hâlâ boş görünür. Her iki durumu CASE ile ele alın.
  • Satış raporunda belge tipi filtresini atlamak: TBLSTHAR tüm hareket türlerini içerir; yalnızca satış cirosu istiyorsanız STHAR_FTIRSIP IN ('1','3') ve STHAR_GCKOD='C' şarttır.
  • KOD_1 ile KOD_2'yi karıştırmak: Her iki alan da bağımsız sınıflamadır; hiyerarşi garantisi yoktur. Rapor başlığında hangi alanı kullandığınızı netleştirin.
  • Türkçe karakterli stok kodu eşleştirirken = operatörü kullanmak: Büyük/küçük harf ve Türkçe karakter farklılıklarından dolayı kayıt kaçabilir. dbo.TRK() fonksiyonu ile normalize edin (bkz. Netsis ortak kolonlar kartı).

Sık sorulanlar

GRUP_KODU ile KOD_1 arasındaki fark nedir? GRUP_KODU genellikle stok grubunu (ör. mamul, hammadde) tutar; KOD_1 ise serbest sınıflama alanıdır ve kuruluma göre marka, sezon veya kategori olarak kullanılır. Netsis'te iki alan da birbirinin alternatifi değildir; birlikte kullanılabilir.

Boş grup kodlarını toplu güncelleyebilir miyim? Evet, UPDATE komutuyla mümkündür ancak önce yukarıdaki 5. sorgu ile tespit yapıp ilgili kartlara doğru kodu atamanız gerekir. Yedek almadan toplu güncelleme yapmayın.

Satış raporunda hem NULL hem boş string nasıl ele alınır? Yukarıdaki örneklerde olduğu gibi CASE WHEN GRUP_KODU IS NULL OR GRUP_KODU = '' kalıbını kullanın. Bu, tüm boş kayıtları tek bir 'Tanımsız' başlığı altında toplar.

KOD_2'yi KOD_1'in alt kategorisi gibi kullanabilir miyim? Veritabanı tarafında böyle bir hiyerarşi tanımlı değildir; ancak işletme kuralınız olarak KOD_1=marka, KOD_2=ürün grubu şeklinde sabit bir eşleşme uygulayabilirsiniz. Bunu raporlarınızda CASE ile birleştirip tek "Marka > Kategori" alanı yaratabilirsiniz.


Kategori kodlarıyla rapor almak doğru kurgulandığında çok güçlüdür; ancak boş kodlar ve belge tipi filtreleri işin can damarıdır. Erp Asistanı'na ücretsiz üye olun, "geçen ay KOD_1 bazında net ciro" gibi sorularınızı Türkçe yazın, Netsis şemanıza uygun SQL'i saniyeler içinde alın.

Ücretsiz üye olun, istediğiniz sorguyu doğal dille 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.