Erp Asistanı Erp Asistanı
Netsis SQL

Netsis Kullanıcı Logları ve İşlem Takibi SQL: Audit Raporu

Netsis TBLFATUIRS, TBLSTHAR ve TBLCAHAR tablolarında KAYITYAPANKUL ve DUZELTMEYAPANKUL alanlarıyla evrak değişiklik ve audit takip SQL sorguları.

Erp Asistanı Erp Asistanı Editör ekibi 9 dk okuma
Netsis Kullanıcı Logları ve İşlem Takibi SQL: Audit Raporu

Netsis veritabanında iç denetim, geriye dönük evrak müdahalelerinin tespiti ve kullanıcı bazlı iş yükü analizi kurumsal veri güvenliği için kritik öneme sahiptir. Fatura ve irsaliye evraklarında bir işlemin kim tarafından sisteme girildiği ve daha sonra kim tarafından değiştirildiği, evrakın başlık satırında kayıt altına alınır. Stok kalemleri (TBLSTHAR) ve cari hareketler (TBLCAHAR) bu denetim kolonlarını taşımaz; kalem bazlı denetimde başlık tablosuna join yapmak gerekir. Bu rehberde, Netsis audit mekanizmasını oluşturan ortak alanları inceleyerek geriye dönük müdahaleleri, kullanıcı işlem adetlerini ve şüpheli saat farklarını listeleyen SQL sorgularını paylaşıyoruz. Veritabanı mimarisini daha kapsamlı anlamak için Netsis tablo yapısı rehberi ve temel sorgu kalıpları için Netsis hazır SQL sorguları yazılarımıza göz atabilirsiniz.

Netsis Denetim (Audit) Kolonları ve Anlamları

Netsis evrak başlık tablolarında işlem izini tutan dört ana denetim kolonu bulunur. Bu kolonlar ek log tablosuna ihtiyaç duymadan hızlı bir ön denetim yapmanızı sağlar:

Alan Adı Veri Tipi Açıklama Denetim Amacı
KAYITYAPANKUL varchar(12) Kaydı oluşturan kullanıcı kodu İlk işlemi yapan personeli tespit etme
KAYITTARIHI datetime Sisteme kayıt giriş zamanı Belge tarihi ile sisteme giriş zamanını kıyaslama
DUZELTMEYAPANKUL varchar(12) Son düzeltmeyi yapan kullanıcı kodu Evrakta güncelleme yapan kişiyi bulma
DUZELTMETARIHI datetime Son düzeltme zamanı Değişikliğin yapıldığı anı yakalama
SUBE_KODU smallint Şube kodu Şube bazlı işlem ayrımı

Bu dört alan TBLFATUIRS (fatura/irsaliye başlığı) üzerinde tutulur. TBLSTHAR ve TBLCAHAR tarafında bu kolonlar yoktur; kalem veya cari satırı denetlemek istediğinizde FISNO = FATIRS_NO ya da BELGE_NO = FATIRS_NO bağıyla başlığa dönmeniz gerekir.

1. Kullanıcı Bazında Günlük Evrak Giriş Adetleri

Kullanıcıların hangi tarihte kaç adet fatura veya irsaliye kestiğini ve toplam parasal hacmini TBLFATUIRS tablosundaki KAYITYAPANKUL ve KAYITTARIHI alanlarıyla özetleyebilirsiniz:

SELECT
    CAST(KAYITTARIHI AS DATE) AS IslemTarihi,
    KAYITYAPANKUL,
    CASE FTIRSIP
        WHEN '1' THEN 'Satış Faturası'
        WHEN '2' THEN 'Alış Faturası'
        WHEN '3' THEN 'Satış İrsaliyesi'
        WHEN '4' THEN 'Alış İrsaliyesi'
        ELSE 'Diğer'
    END AS BelgeTuru,
    COUNT(*) AS BelgeAdedi,
    SUM(GENELTOPLAM) AS ToplamTutar
FROM TBLFATUIRS
WHERE SUBE_KODU = 0
  AND KAYITTARIHI >= '2026-01-01'
GROUP BY CAST(KAYITTARIHI AS DATE), KAYITYAPANKUL, FTIRSIP
ORDER BY IslemTarihi DESC, BelgeAdedi DESC;

2. Kayıt Sonrası Değiştirilen Faturalar (Audit Değişiklik Raporu)

Fatura sisteme girildikten sonra tutar, cari veya vade üzerinde değişiklik yapılmışsa DUZELTMEYAPANKUL ve DUZELTMETARIHI alanları dolar. Aşağıdaki sorgu, oluşturulduktan sonra müdahale gören faturaları ve iki işlem arasındaki dakika farkını listeler:

SELECT
    FATIRS_NO AS FaturaNo,
    FTIRSIP AS BelgeTipi,
    CARI_KODU AS CariKodu,
    TARIH AS BelgeTarihi,
    GENELTOPLAM AS GenelToplam,
    KAYITYAPANKUL AS Kaydeden,
    KAYITTARIHI AS KayitZamani,
    DUZELTMEYAPANKUL AS Duzelten,
    DUZELTMETARIHI AS DuzeltmeZamani,
    DATEDIFF(MINUTE, KAYITTARIHI, DUZELTMETARIHI) AS FarkDakika
FROM TBLFATUIRS
WHERE SUBE_KODU = 0
  AND DUZELTMETARIHI IS NOT NULL
  AND DUZELTMEYAPANKUL IS NOT NULL
  AND DUZELTMEYAPANKUL <> ''
  AND TARIH >= '2026-01-01'
ORDER BY DUZELTMETARIHI DESC;

3. Geriye Dönük Belge Girişi Yapan Kullanıcıların Tespiti

Kullanıcıların fiili işlem tarihinden çok daha eski bir tarihe evrak düzenlemesi (örneğin ay kapanışından sonra eski aya fatura kesilmesi) denetim açısından risk oluşturur. TARIH (belge tarihi) ile KAYITTARIHI (sistemin o anki zamanı) arasındaki gün farkını bu sorguyla yakalayabilirsiniz:

SELECT
    FATIRS_NO AS FaturaNo,
    FTIRSIP AS BelgeTipi,
    CARI_KODU AS CariKodu,
    TARIH AS BelgeTarihi,
    KAYITTARIHI AS SistemGirisZamani,
    KAYITYAPANKUL AS KaydedenKullanici,
    DATEDIFF(DAY, TARIH, KAYITTARIHI) AS GecikmeGunSayisi,
    GENELTOPLAM AS Tutar
FROM TBLFATUIRS
WHERE SUBE_KODU = 0
  AND DATEDIFF(DAY, TARIH, KAYITTARIHI) > 2
  AND KAYITTARIHI >= '2026-01-01'
ORDER BY GecikmeGunSayisi DESC;

4. Cari Hareketlerde Değişikliği Fatura Başlığından İzlemek

TBLCAHAR satırlarında denetim kolonu bulunmadığı için, bir cari hareketin kim tarafından girildiğini ve sonradan değiştirildiğini ancak başlık tablosuna dönerek görebilirsiniz. Faturalardan doğan cari hareketler HAREKET_TURU = 'B' ile işaretlenir; BELGE_NO alanı başlıktaki FATIRS_NO ile eşleşir. Cari ekstre mantığı için Netsis cari ekstre ve bakiye takibi yazımızı inceleyebilirsiniz:

SELECT
    ch.INC_KEY_NUMBER AS KayitSiraNo,
    ch.CARI_KOD AS CariKodu,
    ch.TARIH AS IslemTarihi,
    ch.BELGE_NO AS BelgeNo,
    ch.ACIKLAMA AS Aciklama,
    ch.BORC AS Borc,
    ch.ALACAK AS Alacak,
    ch.HAREKET_TURU AS HareketTuru,
    f.KAYITYAPANKUL AS Kaydeden,
    f.KAYITTARIHI AS KayitZamani,
    f.DUZELTMEYAPANKUL AS Duzelten,
    f.DUZELTMETARIHI AS DuzeltmeZamani
FROM TBLCAHAR ch
JOIN TBLFATUIRS f
    ON f.FATIRS_NO = ch.BELGE_NO
   AND f.CARI_KODU = ch.CARI_KOD
   AND f.SUBE_KODU = ch.SUBE_KODU
WHERE ch.SUBE_KODU = 0
  AND ch.HAREKET_TURU = 'B'
  AND f.DUZELTMETARIHI IS NOT NULL
  AND f.DUZELTMEYAPANKUL IS NOT NULL
  AND f.DUZELTMEYAPANKUL <> ''
  AND f.DUZELTMEYAPANKUL <> f.KAYITYAPANKUL
  AND ch.TARIH >= '2026-01-01'
ORDER BY f.DUZELTMETARIHI DESC;

Sorgu, kaydı giren kişi ile sonradan düzelten kişinin farklı olduğu satırları getirir. Bu, yetki matrisi denetiminde en hızlı ilk taramadır.

5. Stok Kalemlerinde Değişikliği Fatura Başlığından Takip

Faturanın genel toplamı değişmese bile stok satırındaki miktar veya birim fiyat değiştirilmiş olabilir. Fatura kalemleri TBLSTHAR tablosunda saklanır ancak denetim kolonları burada değildir; bu yüzden satırı başlıkla birleştirip KAYITYAPANKUL ve DUZELTMETARIHI bilgisini başlıktan almak gerekir. Stok hareket mimarisi hakkında daha fazla bilgi için Netsis stok hareketleri ve bakiye hesaplama rehberine başvurabilirsiniz:

SELECT
    h.INCKEYNO AS SatirNo,
    h.FISNO AS BelgeNo,
    h.STOK_KODU AS StokKodu,
    h.STHAR_TARIH AS HareketTarihi,
    h.STHAR_GCMIK AS Miktar,
    h.STHAR_NF AS NetFiyat,
    (h.STHAR_GCMIK * h.STHAR_NF) AS SatirTutari,
    f.FTIRSIP AS BelgeTipi,
    f.KAYITYAPANKUL AS Kaydeden,
    f.KAYITTARIHI AS KayitZamani,
    f.DUZELTMEYAPANKUL AS Duzelten,
    f.DUZELTMETARIHI AS DuzeltmeZamani
FROM TBLSTHAR h
JOIN TBLFATUIRS f
    ON f.FATIRS_NO = h.FISNO
   AND f.SUBE_KODU = h.SUBE_KODU
   AND f.FTIRSIP = h.STHAR_FTIRSIP
WHERE h.SUBE_KODU = 0
  AND f.DUZELTMETARIHI IS NOT NULL
  AND f.DUZELTMEYAPANKUL IS NOT NULL
  AND f.DUZELTMEYAPANKUL <> ''
  AND h.STHAR_TARIH >= '2026-01-01'
ORDER BY f.DUZELTMETARIHI DESC, h.INCKEYNO;

Başlık-kalem bağını FISNO = FATIRS_NO üzerinden kurmak tek başına yeterli değildir; aynı belge numarası farklı şube ve belge tiplerinde tekrar edebileceği için SUBE_KODU ve FTIRSIP = STHAR_FTIRSIP teyidi şarttır.

Sık yapılan hatalar

  • Denetim kolonlarını hareket tablolarında aramak: KAYITYAPANKUL, KAYITTARIHI, DUZELTMEYAPANKUL ve DUZELTMETARIHI alanları TBLSTHAR ve TBLCAHAR içinde yoktur. Bu alanlar evrak başlığındadır; kalem raporunda başlığa join yapılmadan sorgu Invalid column name hatası verir.
  • SUBE_KODU filtresini atlamak: Çok şubeli Netsis yapılarında şube filtresi eklenmezse aynı evrak numarasına sahip farklı şube kayıtları mükerrer denetim uyarılarına yol açar.
  • TARIH ile KAYITTARIHI alanlarını karıştırmak: TARIH evrakın üzerinde yazan muhasebe tarihidir; KAYITTARIHI ise kullanıcının butona bastığı gerçek sunucu saatidir. Denetim raporlarında her zaman KAYITTARIHI ve DUZELTMETARIHI kullanılmalıdır.
  • DUZELTMEYAPANKUL alanındaki boş string kontrolünü unutmak: Netsis bazı sürümlerde düzeltme yapılmamış kayıtlarda NULL yerine boş karakter ('') bırakabilir. Sorgularda hem IS NOT NULL hem de <> '' kontrolü birlikte yapılmalıdır.
  • Belge tipi (FTIRSIP / STHAR_FTIRSIP) ayrımını yapmamak: TBLFATUIRS ve TBLSTHAR içinde sadece faturalar değil irsaliyeler ve depo transferleri de bulunur. Yalnızca fatura denetimi için ilgili tip kodları filtrelenmelidir.

Sık sorulanlar

DUZELTMEYAPANKUL alanı geçmişteki tüm değişiklikleri saklar mı? Hayır, Netsis standart mimarisinde bu alanlar yalnızca en son düzeltmeyi yapan kullanıcıyı ve o düzeltmenin zamanını saklar. Bir evrak 5 kez değiştirildiyse ilk 4 değişikliğin ara geçmişi bu tabloda tutulmaz.

Stok kalemi veya cari hareket için ayrı denetim sorgusu yazmam gerekir mi? Ayrı kolon aramanıza gerek yok. Kalem ve cari satırlarını FISNO = FATIRS_NO veya BELGE_NO = FATIRS_NO bağıyla TBLFATUIRS başlığına bağlayıp denetim alanlarını başlıktan okumak yeterlidir. Sipariş kalemleri için ilgili başlık TBLSIPAMAS olduğundan farklı bir bağ kurulur.

Silinen kayıtları bu sorgularla görebilir miyiz? Hayır, kullanıcı bir faturayı veya fişi tamamen sildiğinde satır TBLFATUIRS, TBLSTHAR veya TBLCAHAR tablolarından silinir. Silinen evrakları takip etmek için veritabanı seviyesinde trigger (tetikleyici) veya SQL Server Change Data Capture (CDC) mimarisi kurulmalıdır.

Kullanıcı arayüzden evrakı sadece açıp kaydetmeden çıkarsa düzeltme tarihi güncellenir mi? Netsis arayüzünde evrak değiştirilmeden sadece 'Tamam' ya da 'Kaydet' butonuna basılarak geçilirse düzeltme alanları tetiklenebilir. Bu nedenle KAYITTARIHI ile DUZELTMETARIHI arasındaki farkın sıfırdan büyük olması veya kritik alanların değişip değişmediğinin kontrolü önemlidir.


Netsis üzerinde kullanıcı hareketlerini ve denetim izlerini manuel SQL sorgularıyla takip etmek yerine, sisteminizi Erp Asistanı'na bağlayarak şüpheli geriye dönük girişleri ve yetkisiz evrak düzeltmelerini anlık bildirimlerle izleyebilirsiniz.

Ücretsiz üye olun, denetim raporlarınızı otomatikleştirin →

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.