Erp Asistanı Erp Asistanı
Mikro SQL

Mikro v15 Tablo Yapısı: RECno, RECid Çifti ve Temel Tablolar Rehberi

Mikro v15 veritabanı tablo haritası: stok, cari, sipariş ve hareket tabloları, Guid yerine RECno ve RECid kimlikleri, v15'e özgü fatura bağı, kod sözlükleri, fonksiyon imzaları ve v15 şemasına göre yazılmış örnek SQL'ler.

Erp Asistanı Erp Asistanı Editör ekibi 11 dk okuma
Mikro v15 Tablo Yapısı: RECno, RECid Çifti ve Temel Tablolar Rehberi

Mikro v15 hâlâ pek çok işletmede çalışıyor ve raporlarını SQL ile alanların ilk sorusu değişmiyor: "Hangi veri hangi tabloda?" İnternetteki Mikro örneklerinin çoğu ise v16 ve v17 için yazılmıştır; o sorguları v15'e yapıştırdığınızda "Invalid column name" hatası alırsınız. Bu rehber yalnızca Mikro v15 veritabanını anlatır: tablo haritası, v15'e özgü kimlik kolonları (RECno ve RECid çifti), kod sözlükleri, fonksiyon imzaları ve v15 şemasına göre yazılmış örnek sorgular. Tablo ve kolon adlarının tamamı gerçek bir v15 veritabanının şema dökümüyle tek tek karşılaştırılmıştır.

Önce: veritabanınız gerçekten v15 mi?

Sürümü tahmin etmeyin, veritabanına sorun. Mikro'da sürüm, cari kart tablosundaki iki kolonun varlığından anlaşılır:

SELECT CASE WHEN COL_LENGTH('dbo.CARI_HESAPLAR', 'cari_VersionNo') IS NOT NULL THEN 'v17'
            WHEN COL_LENGTH('dbo.CARI_HESAPLAR', 'cari_Guid')      IS NOT NULL THEN 'v16'
            WHEN OBJECT_ID('dbo.CARI_HESAPLAR')                    IS NOT NULL THEN 'v15'
       END AS MikroSurumu;

Sonuç v15 ise bu rehber sizin içindir. v16 çıkarsa Mikro v16 tablo yapısı, v17 çıkarsa Mikro v17 tablo yapısı rehberine geçin.

Mikro v15 adlandırma mantığı

Her tablonun kolonları o tabloya özgü bir önek taşır; öneki tanıyınca kolonun hangi tablodan geldiğini sorgunun içinde okuyabilirsiniz:

  • STOKLAR → sto_ (sto_kod, sto_isim)
  • STOK_HAREKETLERI → sth_ (sth_stok_kod, sth_miktar)
  • CARI_HESAPLAR → cari_ (cari_kod, cari_unvan1)
  • CARI_HESAP_HAREKETLERI → cha_ (cha_kod, cha_meblag)
  • SIPARISLER → sip_ (sip_stok_kod, sip_miktar)
  • DEPOLAR → dep_ (dep_no, dep_adi)

Evrak numarası her hareket tablosunda aynı kalıptadır: <önek>_evrakno_seri + <önek>_evrakno_sira. İptal bayrağı <önek>_iptal, kayıt izi <önek>_create_date ve <önek>_lastup_date kolonlarındadır.

v15'in en büyük farkı: Guid yok, RECno ve RECid çifti var

v16 ve v17'de her satırın kimliği <önek>_Guid kolonudur. v15'te bu kolon yoktur. Onun yerine üç kolon bulunur:

Kolon Tip Ne işe yarar
<önek>_RECno int, otomatik artan Satırın sıra numarası (sth_RECno, cha_RECno, sip_RECno)
<önek>_RECid_DBCno smallint Kimlik çiftinin ilk yarısı
<önek>_RECid_RECno int Kimlik çiftinin ikinci yarısı

İncelediğimiz v15 veritabanında birincil anahtarı olan 518 tablonun 383'ünde bu çift bulunur; Guid taşıyan tablo sayısı sıfırdır. Pratikteki iki sonucu:

  1. Sıralama: v16 için yazılmış ORDER BY sth_Guid v15'te hata verir. "En son kayıt" için sth_RECno ya da tarih + sth_evrakno_sira kullanılır.
  2. Evrak bağları: Tablolar birbirine Guid ile değil, RECid çiftiyle bağlanır. Fatura kaleminden fatura başlığına giden yol v15'te sth_fat_recid_dbcno + sth_fat_recid_recno kolonlarıdır (aşağıda örneği var).

Stok kartında birincil anahtar her sürümde sto_kod'dur; sto_RECno ayrıca tekil indekslidir.

En çok kullanılan Mikro v15 tabloları

Tablo Ne tutar Öne çıkan kolonlar Kolon sayısı
STOKLAR Stok kartları sto_kod, sto_isim, sto_kisa_ismi, sto_birim1_ad, sto_anagrup_kod, sto_altgrup_kod, sto_marka_kodu 194
STOK_HAREKETLERI Tüm stok giriş/çıkışları (fatura ve irsaliye kalemleri dahil) sth_tarih, sth_stok_kod, sth_miktar, sth_tutar, sth_tip, sth_evraktip, sth_giris_depo_no, sth_cikis_depo_no 124
CARI_HESAPLAR Cari kartlar cari_kod, cari_unvan1, cari_unvan2, cari_vdaire_adi, cari_VergiKimlikNo, cari_EMail, cari_CepTel 182
CARI_HESAP_HAREKETLERI Parasal hareketler ve fatura başlıkları cha_tarihi, cha_kod, cha_meblag, cha_tip, cha_cinsi, cha_evrak_tip, cha_vade 145
SIPARISLER Sipariş kalemleri (ayrı başlık tablosu yoktur) sip_tarih, sip_musteri_kod, sip_stok_kod, sip_miktar, sip_teslim_miktar, sip_tip, sip_kapat_fl 118
DEPOLAR Depo tanımları dep_no, dep_adi, dep_tipi 68
BARKOD_TANIMLARI Barkodlar bar_kodu, bar_stokkodu, bar_birimpntr 32
STOK_SATIS_FIYAT_LISTELERI Stok × fiyat listesi × depo fiyatı sfiyat_stokkod, sfiyat_listesirano, sfiyat_deposirano, sfiyat_fiyati 27
KASALAR / BANKALAR Kasa ve banka tanımları kas_kod, kas_isim · ban_kod, ban_ismi, ban_IBANKodu 26 / 88
ODEME_PLANLARI Ödeme planları (vade hesabında kullanılır) odp_no, odp_adi 24
STOK_HAREKETLERI_OZET Dönem ve depo bazında stok özeti sho_StokKodu, sho_Depo 42

Kolon sayıları, incelediğimiz v15 veritabanının şemasından sayılmıştır. Aynı veritabanında 687 tablo, 935 görünüm (view) ve yaklaşık bin fonksiyon vardır; günlük raporların büyük kısmı yukarıdaki çekirdekle çıkar.

Dikkat: Mikro'da ayrı bir FATURALAR tablosu yoktur. Faturanın parasal başlığı CARI_HESAP_HAREKETLERI'nde, kalemleri STOK_HAREKETLERI'nde durur. Ayrıntı: Mikro'da fatura hangi tabloda?

Kod sözlükleri: tip ve evrak kolonları

Bu küçük kodlar raporun doğruluğunu belirler; yanlış kod hata vermez, sessizce yanlış rakam üretir.

STOK_HAREKETLERI:

Kolon Değerler
sth_tip (yön) 0: Giriş · 1: Çıkış · 2: Depo transferi
sth_cins (sınıf) 0: Toptan · 1: Perakende · 4: Fire · 5: Sarf · 7: Üretim · 10: Sayım · 11: Açılış
sth_evraktip (evrak) 1: Çıkış irsaliyesi · 3: Giriş (alış) faturası · 4: Çıkış (satış) faturası · 13: Giriş irsaliyesi · 2: Depo transfer fişi · 12: Depo giriş fişi
sth_normal_iade 0: Normal · 1: İade

CARI_HESAP_HAREKETLERI:

Kolon Değerler
cha_tip (yön) 0: Borç · 1: Alacak
cha_cinsi (sınıf) 0: Nakit · 1: Müşteri çeki · 2: Müşteri senedi · 5: Dekont · 6: Toptan fatura · 7: Perakende fatura · 8: Hizmet faturası
cha_evrak_tip (evrak) 0: Alış faturası · 63: Satış faturası · 1: Tahsilat makbuzu · 64: Tediye makbuzu · 29: Açılış fişi
cha_cari_cins (hesap türü) 0: Cari · 2: Banka · 4: Kasa

SIPARISLER: sip_tip 0 alınan (müşteri) siparişi, 1 verilen (tedarikçi) siparişidir.

Satış cirosu için güvenli süzgeç şudur: sth_iptal = 0 AND sth_tip = 1 AND sth_evraktip IN (1, 4) AND sth_normal_iade = 0. Yalnız sth_evraktip = 4 yazarsanız irsaliyeyle kesilmiş satışlar dışarıda kalır.

v15 fonksiyonları: imzalar v16 ve v17'den farklı

Mikro'nun fn_ ile başlayan fonksiyonları her sürümde aynı adı taşır ama aynı parametreyi almaz. v15'te:

Fonksiyon v15'te parametre Not
fn_EldekiMiktar 1 (stok kodu) v15'te yalnız 1–18 numaralı depoları toplar
fn_DepodakiMiktar 3 (stok kodu, depo no, tarih) Üç sürümde aynı
fn_StokSatisFiyati 3 (stok kodu, fiyat listesi, depo) v16 ve v17'de 4 parametre ister
fn_CariHesapBakiye 7 v16'da 11, v17'de 12
fn_CariHesapAnaDovizBakiye 9 v16'da 13, v17'de 14
fn_VergiYuzde 1 (vergi sıra numarası) Üç sürümde aynı

İki uyarı önemlidir. Birincisi, fn_EldekiMiktar v15'te depo numarası 18'den büyük olan depoları hesaba katmaz; çok depolu bir kurulumda eldeki miktar eksik çıkabilir (aşağıdaki ikinci sorgu bu durumu çözer). İkincisi, v15 fonksiyonlarının bir bölümü ana Mikro veritabanına (MikroDB_V15) adıyla başvurur; firma veritabanını başka bir sunucuya tek başına taşıdıysanız bu fonksiyonlar "Invalid object name" hatası verebilir.

KDV tarafında da bir tuzak vardır: sto_toptan_vergi, sto_perakende_vergi ve sth_vergi_pntr kolonları oran değil, sıra numarası tutar. Oranı dbo.fn_VergiYuzde(sıra) verir ve hangi numaranın hangi orana denk geldiği kurulumdan kuruluma değişir; sorguya sabit yazmayın.

v15 şemasına göre üç örnek sorgu

-- 1) Eldeki stok (fonksiyonla)
SELECT sto_kod AS [Stok Kodu], sto_isim AS [Stok Adı],
       dbo.fn_EldekiMiktar(sto_kod) AS [Eldeki Miktar]
FROM STOKLAR
WHERE sto_iptal = 0
ORDER BY sto_kod;
-- 2) Depo bazında stok (hareketlerden; 18'den büyük depo numaralarını da sayar)
SELECT h.DepoNo AS [Depo No], d.dep_adi AS [Depo Adı], h.sth_stok_kod AS [Stok Kodu],
       SUM(h.Miktar) AS [Net Miktar]
FROM (
    SELECT sth_giris_depo_no AS DepoNo, sth_stok_kod, sth_miktar AS Miktar
    FROM STOK_HAREKETLERI
    WHERE sth_iptal = 0 AND sth_tip IN (0, 2)
    UNION ALL
    SELECT sth_cikis_depo_no AS DepoNo, sth_stok_kod, -sth_miktar AS Miktar
    FROM STOK_HAREKETLERI
    WHERE sth_iptal = 0 AND sth_tip IN (1, 2)
) AS h
LEFT JOIN DEPOLAR d ON d.dep_no = h.DepoNo
WHERE h.DepoNo IS NOT NULL AND h.DepoNo <> 0
GROUP BY h.DepoNo, d.dep_adi, h.sth_stok_kod
HAVING SUM(h.Miktar) <> 0
ORDER BY h.DepoNo, h.sth_stok_kod;
-- 3) Satış faturaları kalemleriyle (v15: RECid çiftiyle bağlanır)
SELECT TOP 50
       cha.cha_tarihi AS [Tarih], cha.cha_evrakno_seri AS [Seri], cha.cha_evrakno_sira AS [Sıra],
       cha.cha_kod AS [Cari Kodu], sth.sth_stok_kod AS [Stok Kodu], sth.sth_miktar AS [Miktar],
       sth.sth_tutar / NULLIF(sth.sth_miktar, 0) AS [Birim Fiyat], sth.sth_tutar AS [Tutar]
FROM CARI_HESAP_HAREKETLERI cha
JOIN STOK_HAREKETLERI sth
  ON sth.sth_fat_recid_dbcno = cha.cha_RECid_DBCno
 AND sth.sth_fat_recid_recno = cha.cha_RECid_RECno
WHERE cha.cha_iptal = 0 AND sth.sth_iptal = 0
  AND cha.cha_evrak_tip = 63 AND cha.cha_normal_Iade = 0
ORDER BY cha.cha_tarihi DESC, cha.cha_RECno DESC, sth.sth_satirno;

Üçüncü sorgunun v16/v17 karşılığında bağ tek satırdır (sth_fat_uid = cha_Guid). v15'te o kolonlar bulunmadığı için bağ iki kolonla kurulur; sürümler arasında en sık kırılan nokta budur.

v16 için yazılmış bir sorgu v15'te neden çalışmaz?

Sorguda geçen v15'teki durum v15 karşılığı
sth_Guid, cha_Guid, sip_Guid, cari_Guid Yok sth_RECno, cha_RECno, sip_RECno, cari_RECno
sth_fat_uid = cha_Guid Yok sth_fat_recid_dbcno / sth_fat_recid_recno = cha_RECid_DBCno / cha_RECid_RECno
cha_vergi11 … cha_vergi20 Yok v15'te vergi kolonları cha_vergi1 … cha_vergi10
sfiyat_birim_pntr Yok v15 fiyat listesinde birim ayrımı yoktur
sto_resim_url, sto_plu_no Yok v15 stok kartında bu alanlar bulunmaz
sth_teslim_tarihi Yok v16 ile gelmiştir
fn_StokSatisFiyati(kod, liste, depo, birim) 4. parametre fazla v15'te 3 parametreyle çağrılır

Tersi de geçerlidir: v15'e özgü sth_fat_recid_recno, sip_teklifRecId_RECno gibi kolonlar v16'da kaldırılmıştır. Sürüm yükselttiğinizde bu kolonları kullanan raporlar hata verir.

Sık yapılan hatalar

  • İptal filtresini unutmak: sth_iptal = 0, cha_iptal = 0, sip_iptal = 0 yazılmazsa iptal edilmiş evraklar rapora karışır.
  • Cari bakiyeyi süzmeden toplamak: CARI_HESAP_HAREKETLERI yalnız müşterileri değil kasa ve banka hareketlerini de taşır. Müşteri bakiyesi için cha_cari_cins = 0 şartını ekleyin.
  • cha_vade kolonunu tarih sanmak: Bu kolon tam sayıdır ve bir vade kodu tutar; doğrudan tarihle karşılaştırılmaz.
  • İnternetten bulunan sorguyu sürüme bakmadan çalıştırmak: Örneklerin çoğu v16/v17 içindir; Guid geçen her sorgu v15'te uyarlanmalıdır.

Sık sorulanlar

Mikro v15'te tablo listesini nereden görebilirim? SQL Server Management Studio'da firma veritabanını açıp tablolara bakabilirsiniz. Yüzlerce tablo vardır; günlük raporlar için bu rehberdeki çekirdek tablolar çoğu zaman yeterlidir.

v15'te Guid kolonu neden yok? Guid kimlikler v16 ile gelmiştir. v15'te satır kimliği RECno ile RECid çiftidir; tablolar arası bağlar da bu çiftle kurulur.

v15 sorgularım v16'ya geçince çalışır mı? Temel kolonları (sto_kod, sth_miktar, cha_meblag gibi) kullananlar çalışır. RECno, RECid ve recid ile biten bağ kolonlarını kullananlar çalışmaz; ayrıca bazı fonksiyonlar daha fazla parametre ister. Ayrıntı: Mikro v16 ve v17 farkları.

Tablo ve kod ezberlemeden v15 raporu alabilir miyim? Evet. Erp Asistanı'nda sorunuzu Türkçe yazarsınız; sistem veritabanınızın sürümünü kendisi algılar ve sorguyu v15 şemasına göre kurar.


Sürümler arasındaki ortak yapı için: Mikro tablo yapısı rehberi. Hazır sorgu arşivi için: Mikro hazır SQL sorguları.

Bu haritayı ezberlemek yerine kullanmak isterseniz Erp Asistanı'na ücretsiz üye olun, raporunuzu doğal dille isteyin; v15 şemanıza uygun SQL'i saniyeler içinde alın.

Ücretsiz üye olun, sorgunuzu doğal dille üretin →

Bu yazıyı paylaş
Konuşarak raporlayın

Mikro'da 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.