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ı
Editör ekibi
9 dk okuma
İçindekiler
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,DUZELTMEYAPANKULveDUZELTMETARIHIalanlarıTBLSTHARveTBLCAHARiçinde yoktur. Bu alanlar evrak başlığındadır; kalem raporunda başlığa join yapılmadan sorguInvalid column namehatası verir. SUBE_KODUfiltresini 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.TARIHileKAYITTARIHIalanlarını karıştırmak:TARIHevrakın üzerinde yazan muhasebe tarihidir;KAYITTARIHIise kullanıcının butona bastığı gerçek sunucu saatidir. Denetim raporlarında her zamanKAYITTARIHIveDUZELTMETARIHIkullanılmalıdır.DUZELTMEYAPANKULalanındaki boş string kontrolünü unutmak: Netsis bazı sürümlerde düzeltme yapılmamış kayıtlardaNULLyerine boş karakter ('') bırakabilir. Sorgularda hemIS NOT NULLhem de<> ''kontrolü birlikte yapılmalıdır.- Belge tipi (
FTIRSIP/STHAR_FTIRSIP) ayrımını yapmamak:TBLFATUIRSveTBLSTHARiç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.
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.