Hatalar ve sorun giderme
NetOpenX hataları .NET'e System.Runtime.InteropServices.COMException olarak gelir. Netsis'in kendi mesajı ex.Message içindedir; ex.ErrorCode HRESULT değeridir.
Netsis hata kodu
Son Netsis hatasının sayısal kodu kernel.SonNetsisHata nesnesindedir. Mesaj metnini ayrıştırmak yerine bu kodu kullanın:
try
{
fatura.OkuUst("GECERSIZNO", "GECERSIZCARI");
}
catch (COMException)
{
var hata = kernel.SonNetsisHata;
if (hata != null && hata.Kod == 401)
Console.WriteLine("Fatura bulunamadı.");
else
throw;
}
| Kod | Anlamı (gözlenen) |
|---|---|
401 |
Okunmak istenen kayıt bulunamadı (OkuUst ile olmayan belge). REST'te de giriş hatasında Hata Kodu : 401 döner. |
Kod listesi Logo tarafından yayımlanmamıştır; Delphi örneği yalnızca 401'i gösterir. REST istemcisinde aynı bilgi JKernel.SonNetsisHata.Kod olarak geçer.
Teşhis edilebilir hata mesajı
Hatanın hangi belgede, hangi satırda çıktığını bilmeden çözmek zordur. NetsisQuick her işlemde bağlamı da mesaja ekler:
public static string HataOlustur(string islem, IDictionary<string, string> detay, Exception ex)
{
var sb = new StringBuilder();
sb.AppendLine($"{islem} işleminde hata oluştu");
foreach (var d in detay.Where(d => !string.IsNullOrEmpty(d.Value)))
sb.AppendLine($"{d.Key}: {d.Value}");
sb.AppendLine($"Hata: {ex.Message}");
if (ex is COMException com)
{
sb.AppendLine($"COM Hata Kodu: {com.ErrorCode}");
sb.AppendLine($"COM Hata Kaynağı: {com.Source}");
}
return sb.ToString();
}
// kullanım
catch (Exception ex)
{
throw new Exception(HataOlustur("SiparisOlustur", new Dictionary<string, string> {
["Veritabanı"] = db, ["Cari Kodu"] = cari, ["Excel satırı"] = index.ToString(),
["Stok Kodu"] = stokKodu }, ex));
}
Sık karşılaşılan durumlar
| Belirti | Olası neden | Çözüm |
|---|---|---|
Class not registered / REGDB_E_CLASSNOTREG (0x80040154) |
DLL register edilmemiş ya da süreç 64 bit | RegControl.exe / regsvr32; projeyi x86 derleyin |
| Visual Studio COM listesinde NetOpenX yok veya yanlış sürüm | Yanlış DLL register edilmiş | Doğru sürümün DLL'ini yeniden register edin |
| Bağlantıda lisans hatası | NetOpenX lisansı yok / indirilmemiş / tüm lisanslar kullanımda | SSO'dan lisansı indirin; bırakılmayan oturumları kapatın (LogOff, FreeNetsisLibrary) |
| Bağlantıda kullanıcı/şifre hatası | Netsis kullanıcısı ya da DB kullanıcısı yanlış | yeniSirket parametre sırasını kontrol edin (Bağlantı) |
| Kayıtta "stok kodu bulunamadı" benzeri hata | kalemYeni'ye geçersiz stok kodu ya da barkod verildi |
Önce barkodu stok koduna çevirin |
| Kayıtta risk hatası | RiskKontrol = true ve cari risk limiti aşıldı |
Risk limitini kontrol edin ya da bayrağı kapatın |
| Kaydedilen numara beklenenden farklı | Aynı numara başka kullanıcı tarafından alındı | kayitYeni() sonrası Ust().FATIRS_NO'yu okuyun |
NullReferenceException stok kartında |
TemelBilgi() / EkBilgi() çağrılmadı |
Cari ve stok |
| Uzun çalışan serviste bellek artışı, rastgele hatalar | COM nesneleri bırakılmıyor | finally içinde Marshal.ReleaseComObject ve FreeNetsisLibrary |
| Sürüm güncellemesi sonrası alan hataları | DLL ile veritabanı sürümü farklı | DLL'i aynı setten yeniden register edin, projeyi yeniden derleyin |
Hata ayıklama ipuçları
- İşlemi önce test şirketinde (canlının kopyası) çalıştırın.
- Netsis ekranında aynı belgeyi elle girmeyi deneyin. Ekran hata veriyorsa sorun NetOpenX'te değil, veride ya da parametrededir.
- Yazma sonrası sonucu SQL ile doğrulayın:
TBLFATUIRS,TBLSTHAR,TBLCAHAR. - Toplu işlerde her belgeyi ayrı
try/catchiçine alın ve hangi satırın hata verdiğini kaydedin; bir belgedeki hata diğerlerini durdurmasın.