Erp Asistanı Erp Asistanı
Mikro

Mikro v16 ve v17 Farkları: Hangi Tablo ve Kolonlar Değişti, SQL Sorgularınız Neden Bozulur

Mikro v16'dan v17'ye geçişte kaldırılan ve eklenen kolonlar, yeni tablolar, parametresi değişen fonksiyonlar ve hata mesajlarının anlamı. Gerçek v16 ve v17 veritabanlarında ölçülmüş farklar ve farkı kendi veritabanınızda bulan sorgu.

Erp Asistanı Erp Asistanı Editör ekibi 10 dk okuma
Mikro v16 ve v17 Farkları: Hangi Tablo ve Kolonlar Değişti, SQL Sorgularınız Neden Bozulur

Mikro'yu v16'dan v17'ye yükselten işletmelerin bir kısmı, eski raporlarının hata verdiğini ya da farklı sonuç döndürdüğünü görür. İyi haber: v17, v16'nın tablo düzenini büyük ölçüde korur; çoğunlukla ekler, az şey kaldırır. Kötü haber: kaldırdığı birkaç kolon ve parametresi değişen birkaç fonksiyon, tam da en çok kullanılan raporlara dokunur. Bu yazıda iki sürüm arasındaki farkları somut tablo, kolon ve fonksiyon adlarıyla veriyoruz. Aşağıdaki sayıların tamamı gerçek bir v16 ve gerçek bir v17 veritabanında ölçülmüştür.

Önce: hangi sürümdesiniz?

Sürümü veritabanının kendisinden okuyun:

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;

Sürüme özel tablo haritaları için: Mikro v16 tablo yapısı · Mikro v17 tablo yapısı · Mikro v15 tablo yapısı.

Özet: çekirdek tablolarda ne değişti?

Tablo v16 kolon v17 kolon v17'de kalkan v17'de eklenen
STOKLAR 215 236 4 25
STOK_HAREKETLERI 138 148 0 10
CARI_HESAPLAR 183 196 0 13
CARI_HESAP_HAREKETLERI 176 186 2 12
SIPARISLER 129 140 0 11
DEPOLAR 72 81 0 9
BARKOD_TANIMLARI 30 44 0 14
STOK_SATIS_FIYAT_LISTELERI 28 42 0 14
KASALAR / BANKALAR 25 / 90 34 / 99 0 9

Tabloda iki kalıp görülür. Birincisi, neredeyse her tabloya dokuz yeni sistem kolonu eklenir (aşağıda). İkincisi, çekirdek tablolarda kaldırılan kolon yalnız altı tanedir: dördü stok kartında, ikisi cari harekettedir. Yani v16 raporlarınızın çoğu v17'de aynen çalışır; bozulanlar bu altı kolona ya da parametresi değişen fonksiyonlara dokunanlardır.

v17'de kaldırılan kolonlar: sorgunuzu bozan asıl sebep

Tablo Kaldırılan kolon v17'deki karşılığı
STOKLAR sto_beden_kodu, sto_renk_kodu, sto_bedenli_takip, sto_renkDetayli Varyant yapısı: sto_varyant_detayli_fl1 … fl5, sto_varyant_kod_arr1 … arr5 ve VARYANTLAR, VARYANT_KIRILIM_TANIMLARI, VARYANT_BAGLANTI_TANIMLARI tabloları
CARI_HESAP_HAREKETLERI cha_disyazilimid, cha_disyazilim_tip Doğrudan karşılığı yoktur

Bu kolonlardan birini seçen, süzen ya da sıralayan bir sorgu v17'de "Invalid column name" (Msg 207) hatası verir. Beden ve renk kırılımlı stok raporları bu yüzden v17'de yeniden yazılmalıdır. v16'daki fn_hangi_beden ve fn_hangi_renk fonksiyonları da v17'de yoktur.

v17'de eklenen kolonlar

Dokuz sistem kolonu. Neredeyse her tabloya aynı son eklerle gelir: _MainProgramNo, _VersionNo, _MenuNo, _MikroSpecial1, _MikroSpecial2, _MikroSpecial3, _ExternalProgramType, _ExternalProgramId, _Hash (örneğin sto_VersionNo, cha_Hash). Ölçtüğümüz v17 veritabanında bu kolonlar 394 tabloda var; v16'da hiçbirinde yok.

İş kolonları. Raporlar için en kullanışlı olanlar:

Tablo Yeni kolon Ne işe yarar
STOK_HAREKETLERI sth_birimfiyat Satırın birim fiyatı (v16'da sth_tutar / sth_miktar ile hesaplanırdı)
CARI_HESAP_HAREKETLERI cha_birimfiyat, cha_kdv_toplam, cha_efatura_belge_tipi Birim fiyat, KDV toplamı, e-belge tipi
SIPARISLER sip_miktar2, sip_avans_tutari İkinci birim miktarı, sipariş avansı
CARI_HESAPLAR cari_SorumlulukMerkezi, cari_siparis_avans_muh_kod Sorumluluk merkezi, sipariş avansı muhasebe kodu
BARKOD_TANIMLARI / STOK_SATIS_FIYAT_LISTELERI bar_VarBaglantiUId1 … 5 / sfiyat_VarBaglantiUId1 … 5 Barkod ve fiyatın varyanta bağlanması

Bu yön de önemlidir: v17'de yazılıp bu kolonları kullanan bir sorgu v16'da çalışmaz. İki sürümü birlikte kullanıyorsanız her rapor için hangi sürümde çalışacağını belirleyin.

Uzayan kolonlar. Bazı metin kolonları büyümüştür: cha_aciklama 40 karakterden 127 karaktere, sto_special1 … sto_special3 4 karakterden 127 karaktere çıkar. Bu, v17'den v16'ya veri aktaran işlemlerde metnin kırpılmasına yol açabilir.

v17'de gelen tablolar

v16 veritabanında bulunmayan, v17 ile gelen başlıca tablolar:

  • Bakiye ve avans: CARI_HESAP_BAKIYELERI, SIPARIS_AVANS_ESLEME
  • Varyant: VARYANTLAR, VARYANT_KIRILIM_TANIMLARI, VARYANT_BAGLANTI_TANIMLARI, STOK_VARYANT_SEVIYE_TANIMLARI
  • Diğer: E_ENVANTER_HAREKETLERI, BEYANNAMELER, BILDIRIMLER, KULLANICI_KVKK_HAKLARI, MADEN_TANIMLARI, TAKVIM_KAYIT

CARI_HESAP_BAKIYELERI v17'ye özgüdür ama eski sürümden yükseltilmiş bazı firma veritabanlarında oluşmayabilir. Her v17 kurulumunda çalışması gereken bir bakiye raporunu bu tabloya değil, CARI_HESAP_HAREKETLERI'ne dayandırın.

Parametresi değişen fonksiyonlar

Mikro'nun fn_ fonksiyonları iki sürümde de aynı adı taşır ama bazıları farklı sayıda parametre ister:

Fonksiyon v16 v17
fn_CariHesapBakiye 11 12
fn_CariHesapAnaDovizBakiye 13 14
fn_CariHesapMeblag, fn_CariHesapVergiDahilMeblag 36 27
fn_StokSatisFiyatiHesaplama 7 12
fn_CariharBorcAlacak 9 11
fn_beden_kirilimi, fn_renk_kirilimi 2 1
fn_RenkBedenBarkodBul 2 6
fn_hangi_beden, fn_hangi_renk 2 yok

Parametresi değişmeyenler de önemli: fn_EldekiMiktar (1), fn_DepodakiMiktar (3), fn_StokSatisFiyati (4), fn_OpVadeTarih (2), fn_VergiYuzde (1), fn_CariFoy (9), fn_StokFoy (6) iki sürümde aynıdır.

Eksik parametreyle çağrılan fonksiyon şu hatayı verir:

An insufficient number of arguments were supplied for the procedure or function dbo.fn_CariHesapAnaDovizBakiye.

Bakiye fonksiyonlarında v17'nin eklediği son parametre @DepozitoNakitIslemler_Bakiyeyi_Etkilemesin_fl'dir; v16 çağrısı v17'de bu parametre eklenerek çalışır:

-- v16 (13 parametre)
SELECT dbo.fn_CariHesapAnaDovizBakiye(N'', 4, N'', N'', N'', 0, '19000101', GETDATE(), 0, 0, 0, 0, 0) AS [Kasa Bakiyesi];
-- v17 (14 parametre)
SELECT dbo.fn_CariHesapAnaDovizBakiye(N'', 4, N'', N'', N'', 0, '19000101', GETDATE(), 0, 0, 0, 0, 0, 0) AS [Kasa Bakiyesi];

Kod değerleri: anlamı değişen yok, yeni değer var

Rapor yazarken en çok korkulan şey, bir kodun anlamının sessizce değişmesidir. v16 ile v17 arasında anlamı değişen kod yoktur; sth_tip, sth_cins, cha_tip, cha_cinsi, sip_tip gibi kolonların değerleri aynıdır. v17 yalnız listelerin sonuna yeni değer ekler:

  • sth_evraktip = 18 ve cha_evrak_tip = 137: Stoktan demirbaşa virman dekontu
  • dep_tipi 17 ve 18: araç depo ve e-ticaret depo

Evrak tipine göre süzen raporlarınızda bu yeni değerleri bilinçli olarak dahil etmeniz ya da dışarıda bırakmanız yeterlidir.

Ana veritabanı adı değişir

Mikro'nun bazı fonksiyon ve görünümleri, firma veritabanının yanındaki ana Mikro veritabanına adıyla başvurur. Bu ad v16'da MikroDB_V16, v17'de MikroDesktop'tur. İki pratik sonucu vardır:

  • Firma veritabanını tek başına başka bir sunucuya taşırsanız bu fonksiyonlar "Invalid object name 'MikroDB_V16.dbo…'" (v16) ya da benzeri bir hatayla durur.
  • v17'de raporu çalıştıran SQL kullanıcısının MikroDesktop veritabanını da okuyabilmesi gerekir; yoksa sorgu "is not able to access the database" hatası verir.

Hızlı teşhis: SELECT DB_ID('MikroDB_V16'), DB_ID('MikroDesktop'); — boş dönen, o sunucuda bulunmayan ana veritabanıdır.

"Sorgum neden bozuldu?" hata tablosu

Gördüğünüz Olası sebep Çözüm
Invalid column name 'sto_beden_kodu' (ya da sto_renk_kodu) v17'de beden/renk kolonları kaldırıldı Varyant tablolarına geçin
Invalid column name 'cha_disyazilimid' v17'de kaldırıldı Sorgudan çıkarın
Invalid column name 'sth_birimfiyat' v17 sorgusu v16'da çalıştırıldı v16'da sth_tutar / NULLIF(sth_miktar, 0)
An insufficient number of arguments… Fonksiyon v17'de bir parametre daha istiyor Parametre listesini tamamlayın
… has too many arguments specified v17 için yazılmış çağrı v16'da çalıştırıldı Son parametreyi çıkarın
Invalid object name 'CARI_HESAP_BAKIYELERI' v16'da ya da yükseltilmiş bir veritabanında tablo yok Bakiyeyi hareketlerden hesaplayın
Hata yok ama sütunlar kaymış SELECT * kullanan rapor, yeni sistem kolonlarını da getiriyor Kolonları adıyla seçin

Farkı kendi veritabanınızda görün

Aynı SQL Server'da bir v16 ve bir v17 veritabanınız varsa (ör. yükseltme öncesi yedeğiniz), farkı doğrudan sorgulayabilirsiniz. Veritabanı adlarını kendi adlarınızla değiştirin:

-- v16'da olup v17'de olmayan kolonlar
SELECT e.TABLE_NAME AS [Tablo], e.COLUMN_NAME AS [v17'de olmayan kolon]
FROM MikroDB_V16_FIRMA.INFORMATION_SCHEMA.COLUMNS e
WHERE e.TABLE_NAME IN ('STOKLAR', 'STOK_HAREKETLERI', 'CARI_HESAPLAR', 'CARI_HESAP_HAREKETLERI', 'SIPARISLER')
  AND NOT EXISTS (SELECT 1 FROM MikroDesktop_FIRMA.INFORMATION_SCHEMA.COLUMNS y
                  WHERE y.TABLE_NAME = e.TABLE_NAME AND y.COLUMN_NAME = e.COLUMN_NAME)
ORDER BY e.TABLE_NAME, e.COLUMN_NAME;
-- v17'de gelen tablolar
SELECT y.TABLE_NAME AS [Yalnız v17'de olan tablo]
FROM MikroDesktop_FIRMA.INFORMATION_SCHEMA.TABLES y
WHERE y.TABLE_TYPE = 'BASE TABLE'
  AND NOT EXISTS (SELECT 1 FROM MikroDB_V16_FIRMA.INFORMATION_SCHEMA.TABLES e WHERE e.TABLE_NAME = y.TABLE_NAME)
ORDER BY y.TABLE_NAME;

Firmaya özel eklenmiş tablolar ve kolonlar da bu listelerde çıkar; Mikro'nun kendi farkını yukarıdaki tablolarla karşılaştırarak ayırabilirsiniz.

Raporlarınızı kırılmadan taşımak için beş adım

  1. Kritik raporları listeleyin. Cari ekstre, stok durumu, satış özeti, kasa ve banka bakiyesi gibi karar verdiren raporlar önceliklidir.
  2. Kaldırılan kolonları arayın. Rapor metinlerinde sto_beden_kodu, sto_renk_kodu, sto_bedenli_takip, sto_renkDetayli, cha_disyazilimid geçiyor mu?
  3. Fonksiyon çağrılarını sayın. Yukarıdaki tablodaki fonksiyonları kullanan her çağrının parametre sayısını v17'ye göre düzeltin.
  4. SELECT * kullanımını kaldırın. Kolonları adıyla seçen rapor yeni kolonlardan etkilenmez.
  5. Sonuçları karşılaştırın. Aynı tarih aralığında eski ve yeni raporun toplamları tutuyor mu? Tutmuyorsa fark büyük olasılıkla evrak tipi süzgecinden ya da bakiye fonksiyonunun yeni parametresinden gelir.

Sık sorulanlar

v16 sorgum v17'de neden hata veriyor? Büyük olasılıkla beden/renk kolonlarından birini ya da cha_disyazilimid'i kullanıyor, veya bir bakiye fonksiyonunu v16'nın parametre sayısıyla çağırıyor. Hata mesajındaki kolon ya da fonksiyon adı hangisi olduğunu söyler.

v16'daki kodların anlamı v17'de değişti mi? Hayır. Tip ve evrak kodlarının anlamı aynıdır; v17 yalnız yeni değerler ekler (evrak tipi 18 ve 137 gibi).

İki sürümü aynı anda kullanıyorum, ne yapmalıyım? Sürüm kontrolünü raporun başına koyun ya da her sürüm için ayrı sorgu tutun. Sistem kolonları, sth_birimfiyat ve CARI_HESAP_BAKIYELERI yalnız v17'dedir; beden/renk kolonları yalnız v16'da.

Sürüme göre sorgu yazmakla uğraşmak istemiyorum. Erp Asistanı'nda sürüm bağlantınızdan algılanır; sorunuzu Türkçe yazdığınızda SQL o sürümün gerçek tablo, kolon ve fonksiyon imzalarıyla kurulur. Aynı soruyu iki sürüm için ayrı ayrı sorabilirsiniz.


Sürüm yükseltmek raporlarınızı kaybetmek anlamına gelmez. Değişen yerleri bilin, sorgunuzu o sürüme göre kurun; geçiş sancısız olsun.

Sürümünüzü seçip SQL ü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.