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ı
Editör ekibi
10 dk okuma
İçindekiler
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 = 18vecha_evrak_tip = 137: Stoktan demirbaşa virman dekontudep_tipi17 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
MikroDesktopveritabanı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
- Kritik raporları listeleyin. Cari ekstre, stok durumu, satış özeti, kasa ve banka bakiyesi gibi karar verdiren raporlar önceliklidir.
- Kaldırılan kolonları arayın. Rapor metinlerinde
sto_beden_kodu,sto_renk_kodu,sto_bedenli_takip,sto_renkDetayli,cha_disyazilimidgeçiyor mu? - 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.
SELECT *kullanımını kaldırın. Kolonları adıyla seçen rapor yeni kolonlardan etkilenmez.- 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.
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.