Proje başlatın

Türkiye'de SAP Business One: e-Fatura, e-Arşiv, e-Defter

By Zain Abbas, Kodenova · Updated

Short answerSAP Business One'ın resmi bir Türkiye lokalizasyonu vardır; ancak bu lokalizasyon vergi gruplarını, stopaj vergisini, ertelenmiş KDV'yi, kambiyo senetlerini, ileri tarihli çekleri, folyo numaralarını, yasal belge yevmiyelerini ve yıl sonu hesap kapanışını kapsar. Yerleşik bir e-Fatura, e-Arşiv, e-İrsaliye veya e-Defter işlevi yoktur: SAP'nin 10.0 sürümü için Localization for Turkey dokümantasyonu bu konuların hiçbirini içermez; bu nedenle Türk şirketleri SAP Business One'ı bir iş ortağı eklentisi (add-on) aracılığıyla GİB lisanslı bir özel entegratöre bağlar. VUK Genel Tebliği 509'a göre e-Fatura, brüt satış hasılatı 3 milyon TL'den itibaren (internet üzerinden satış yapanlar ile gayrimenkul veya taşıt ticareti yapanlar için 500.000 TL), e-İrsaliye 10 milyon TL'den itibaren zorunludur ve her e-Fatura kullanıcısı e-Defter de tutmak zorundadır.

SAP Business One, Türkiye’de resmi bir SAP lokalizasyonuyla çalışır ve Türkiye, SAP B1 müşterilerimin geldiği 13 ülkeden biridir. Türk finans ekiplerinden aldığım soru nadiren genel muhasebeyle ilgilidir. Soru, dört GİB e-belge sistemiyle, yani e-Fatura, e-Arşiv Fatura, e-İrsaliye ve e-Defter ile bunların ne kadarını SAP Business One’ın kendi başına yaptığıyla ilgilidir. Bu sayfa dürüst cevabı veriyor: SAP’nin Türkiye lokalizasyonunun neleri kapsadığı ve neleri kapsamadığı, GİB’in yayımladığı haliyle VUK Genel Tebliği 509 ve Elektronik Defter Genel Tebliği’ndeki güncel eşikler ve tarihler ve iş ortağı ana verilerinizdeki hatalı VKN ve TCKN numaralarını, bir e-Fatura bu yüzden reddedilmeden önce yakalayan bir SQL sorgusu.

Ben Zain Abbas; 13 ülkedeki şirketler için 7 yılı aşkın SAP B1 deneyimine sahip bir SAP Business One geliştiricisiyim. E-fatura entegrasyonlarım Suudi Arabistan, Ekvador, Guatemala, El Salvador ve Panama içindir; bunların hepsi her faturanın bir UBL veya JSON şemasında imzalanıp vergi idaresine raporlandığı onay (clearance) modeli ülkelerdir. Türkiye’nin e-Fatura sistemi de Türkiye’ye özgü bir UBL profiliyle aynı modeldir; bu nedenle aşağıda veri kalitesi ve ana veriler hakkında yazılanların çoğu bu projelerden gelir. Türkiye’ye ilişkin kurallar, SAP dokümantasyonundan ve sonda bağlantısı verilen GİB’in kendi metinlerinden alınmıştır.

SAP Business One’ın Türkiye lokalizasyonu neleri kapsar?

Şirket veritabanı oluşturulurken lokalizasyon olarak Türkiye’yi seçersiniz ve SAP bunu sonradan değiştirmenize izin vermez. SAP’nin 10.0 sürümü için Localization for Turkey yardımı 96 konuyu listeler. Gruplandığında şunları kapsar:

AlanSAP’nin belgeledikleri
Şirket kurulumuUse Deferred Tax (KDV’yi fatura yerine ödeme anında muhasebeleştirme), Period Type for Report Generation ile Extended Tax Reporting, Use Bill of Exchange, Use Folio Number
VergiTax Groups, Tax Code Determination kuralları, Withholding Tax Codes ve Withholding Tax Table, BAS kodları, Tax Declaration Boxes
Vergi raporlarıTax Report, Tax Report Declaration and Register Book, iş ortağına ve koda göre Withholding Tax Report, Tax Reconciliation Report, Tax Declaration Box Report, Business Activity Statement raporlaması, kur farklarıyla Deferred Tax Account
BankacılıkAlacak ve borç kambiyo senetleri (bills of exchange): kayıt, yönetim, geçmiş, bankaya yatırma ve iptal; ileri tarihli çeklerin bankaya yatırılması; ileri tarihli kredi fişlerinin (credit voucher) bankaya yatırılması
Yasal numaralandırmaFolio Number Assignment: dahili belge numarasından ayrı, yazdırma sırasında atanan ve Check Folio Numbering ile kontrol edilen mali belge numarası
Finansal raporlamaYıl sonunda tüm işlemleri sıralı olarak sunmak üzere geliştirilmiş Document Journal ve General Ledger raporları (SAP Notları 1733696 ve 1819900); Transfer Posting Correction Wizard
Yıl sonuAdministration > Utilities altında G/L Account Closing: hesap ayrıntılarında tanımlanan G/L Closing Account kullanılarak, hesap düzeyi başına zorunlu bir kapanış kaydı ve isteğe bağlı bir açılış kaydı

Bu listede olmayanlar daha önemlidir. Türkiye lokalizasyonu dokümantasyonunun hiçbir yerinde e-Fatura, e-Arşiv, e-İrsaliye veya e-Defter konusu yoktur; SAP’nin İspanya veya İtalya için sunduğu türden, Türkiye’ye yönelik bir Electronic Document Service protokolü de yoktur. Bunu 10 Kasım 2026’da kontrol ettim. Uygulamada SAP Business One kullanan bir Türk şirketi; A/R faturalarını, alacak dekontlarını (credit memo) ve teslimatları okuyan, UBL-TR XML’ini oluşturan ve bunu GİB lisanslı bir özel entegratöre ileten ya da e-Defter XBRL dosyasını yevmiyeden hazırlayan bir iş ortağı eklentisi çalıştırır. Türkiye’deki bir iş ortağını değerlendirirken hangi eklentiyi kullandığını ve entegratörün kim olduğunu sorun; SAP’nin kendisi, 90’ı aşkın isim içeren GİB lisanslı özel entegratör listesinde yer almaz.

Sorun çıkaran bir kurulum ayrıntısı: SAP Knowledge Base Article 3729497’ye göre, şirket SAP’nin Türk Tekdüzen Hesap Planı şablonu olan önceden tanımlı CATR hesap planıyla oluşturulduysa hesap segmentasyonu etkinleştirilemez. Segmentli hesaplara ihtiyacınız varsa veritabanını oluşturmadan önce karar verin.

Bir Türk şirketine hangi GİB e-belge kuralları uygulanır?

Türkiye’de tek bir e-fatura zorunluluğu yoktur. GİB tarafından birleştirilmiş ve en son 31 Aralık 2025 tarihli Tebliğ 589 ile değiştirilmiş VUK Genel Tebliği 509 kapsamında birbiriyle bağlantılı dört sistem ile e-Defter düzenlemesi vardır. 10 Kasım 2026 itibarıyla durum şöyledir:

SistemKimler zorunlu (ana kurallar)Yazılımın yapması gerekenlerBaşlangıç tarihi
e-Fatura (IV.1.4 bölümü)2022 veya sonraki herhangi bir hesap döneminde 3 milyon TL veya üzeri brüt satış hasılatı; internet üzerinden mal veya hizmet satan şirketler, elektronik ticaret aracı hizmet sağlayıcıları, internet ilan ve reklam aracı hizmet sağlayıcıları ile gayrimenkul veya motorlu taşıt imalatçıları, ticareti yapanlar ve aracıları için 500.000 TL; ÖTV (I) sayılı liste mallarına (akaryakıt) ilişkin EPDK lisansı sahipleri; ÖTV (III) sayılı liste mallarının (alkol, tütün, alkolsüz içecekler) üreticileri ve ithalatçıları; meyve ve sebze ticareti yapanlar ve komisyoncular; SGK ile sözleşmeli sağlık hizmeti sunucuları ve tıbbi malzeme tedarikçileri; belgeli oteller; elektrikli araç şarj ağı işletmecileriDiğer kayıtlı kullanıcılara faturaları UBL-TR formatında e-Fatura olarak düzenlemek, GİB üzerinden iletmek ve onlardan e-Fatura almakEşiğin aşıldığı yılı izleyen yılın yedinci ayının başı (1 Temmuz); ÖTV lisansından dört ay sonra; birleşme, bölünme veya nevi değişikliğinden üç ay sonra
e-Arşiv Fatura (IV.2.4)Aynı geçiş süresi içinde her e-Fatura kullanıcısı; 1 Ocak 2026’dan itibaren tutardan bağımsız olarak tüm faturalar için diğer tüm mükellefler de (basit usule tabi olanlar ve işletme hesabı esasına göre defter tutanlar için 1 Ocak 2027); 2025’te portal, vergiler dahil 3.000 TL’nin üzerinde zorunluyduTüketicilere ve kayıtlı olmayan şirketlere faturaları e-Arşiv olarak düzenlemek, alıcıya iletmek ve GİB’e raporlamak; kayıtlı olmayan mükellefler GİB portalını veya bir özel entegratörü kullanıre-Fatura kullanıcıları için e-Fatura ile aynı; diğerleri için 1 Ocak 2026 veya 2027
e-İrsaliye (IV.3.5)2021 veya sonrasında 10 milyon TL veya üzeri brüt satış hasılatı olan kayıtlı e-Fatura kullanıcıları; ÖTV (I) ve (III) sayılı liste işletmeleri; maden ruhsatı sahipleri; şeker üreticileri; demir-çelik üreticileri, ithalatçıları ve ihracatçıları; gübre takip sistemi kullanıcıları; meyve ve sebze ticareti yapanlar; 2024’ten itibaren 1 milyon TL’nin üzerindeki inşaat demiri takip sistemi mükellefleriSevk irsaliyelerini e-İrsaliye olarak düzenlemek ve kayıtlı kullanıcılardan almakHasılat kuralı için izleyen yılın yedinci ayı; sektörel kurallar için koşulun oluşmasından sonraki dördüncü ay
e-Defter (Elektronik Defter Genel Tebliği 1, 3.2 bölümü)e-Fatura kullanmak zorunda olan herkes; bağımsız denetime tabi şirketler (TTK madde 397); 1 Ocak 2025’ten itibaren bilanço esasına göre defter tutan herkesYevmiye defterini ve defter-i kebiri aylık olarak XBRL GL formatında oluşturmak, Mali Mühür veya NES ile imzalamak, berat dosyalarını oluşturmak ve beratı GİB’e yüklemeke-Fatura geçişiyle birlikte veya e-Fatura yıl ortasında zorunlu hale geldiyse izleyen yılın başında

Üç ayrıntı, bir SAP projesini nasıl planladığınızı değiştirir:

  • Eşikler kâr değil, brüt satıştır. IV.1.4 bölümü brüt satış hasılatı (veya satışlar artı brüt iş hasılatı) ölçütünü kullanır. Kâr marjı düşük bir ticaret şirketi, kendini büyük hissetmeden çok önce 3 milyon TL’yi aşar ve bir kez girdiğinde içeride kalır.
  • e-Fatura ve e-Defter birlikte gelir. e-Defter Tebliği’nin 3.2.1 bölümü her e-Fatura mükellefini e-Defter mükellefi yapar ve 3.2.6 bölümü aynı süreyi belirler. e-Fatura’yı Temmuz için, e-Defter’i ise “sonra” için planlayan bir SAP Business One projesi zaten gecikmiştir.
  • Berat süreleri, aksini seçmediğiniz sürece aylıktır. 4.3.4 bölümü: bir aya ait yevmiye ve defter-i kebir dosyaları beratlarıyla birlikte, o ayı izleyen dördüncü ayın gelir vergisi mükellefleri için 10’uncu, diğer mükellefler için 14’üncü günü sonuna kadar oluşturulmalı, imzalanmalı ve yüklenmelidir. Yılın son ayı beyannameyi izler: beyannamenin verildiği ayı izleyen ayın 10’uncu veya 14’üncü günü. Şirketler geçici vergi dönemleriyle uyumlu üçer aylık yüklemeye geçebilir, ancak yalnızca bunu hesap döneminin ilk ayında seçerek; bu seçim daha sonraki tüm yıllar için bağlayıcıdır. Cezalar açısından her ay ayrı sayılır.

GİB ayrıca, sektör veya hasılattan bağımsız olarak, riskli veya uyum düzeyi düşük olarak değerlendirdiği bir mükellefe yazılı bildirimle ve hazırlık için en az üç ay süre vererek bu dört sistemden herhangi birini zorunlu tutabilir. Eşikleri kuralın tamamı olarak değil, alt sınır olarak görün.

e-Fatura için SAP Business One’ı neye bağlarsınız?

GİB’in kendi sayfası e-Fatura’dan yararlanmanın üç yolunu listeler: GİB portalı, kendi sisteminizin GİB ile doğrudan entegrasyonu ve özel entegratör. SAP Business One için tercih neredeyse her zaman üçüncüsüdür, çünkü Mali Mühür ile imzalama ve arşivleme yükümlülüklerini entegratör üstlenir ve size bir REST veya SOAP uç noktası sağlar. İş ortağı eklentisinin bu durumda dört görevi vardır ve projeler tam da burada ya başarılı olur ya da başarısız:

  1. Alıcı sınıflandırması. Her faturadan önce eklenti, müşterinin VKN veya TCKN’sinin GİB kayıtlı kullanıcı listesinde olup olmadığını ve hangi etiketi (alias) kullandığını bilmelidir. Kayıtlı alıcı e-Fatura, aksi halde e-Arşiv demektir. Çoğu entegratör API’si bir sorgulama sunar; eklenti sonucu yalnızca yazdırma anında sorgulamak yerine iş ortağı üzerinde saklamalıdır.
  2. Belge eşleme. OINV ve INV1’den UBL-TR 1.2.1’e (güncel GİB kılavuzu): fatura tipi kodları (SATIS, IADE, TEVKIFAT, ISTISNA, IHRACKAYITLI), GİB sayısal kodlarıyla vergi kodları (KDV için 0015), tevkifat kodları ve oranları, istisna sebep kodları, birim kodları, ihracat faturaları için para birimi ve döviz kuru. SAP Business One’da bunlar tax group, withholding tax code ve unit of measure ana verilerinde tutulur; bu nedenle eşlemenin büyük kısmı kod değil, yapılandırmadır.
  3. Durum ve yeniden denemeler. Her belge bir GİB durumu alır (gönderildi, kabul edildi, reddedildi, iptal edildi); bu durum SAP Business One’a geri aktarılmalıdır, tercihen Crystal şablonlarının ve sorguların görebilmesi için faturadaki kullanıcı tanımlı alanlara.
  4. Gelen belgeler. Gelen e-Fatura ve e-İrsaliye belgeleri etiketinize ulaşır ve VKN ile tedarikçiyle eşleştirilerek taslak A/P faturalarına veya mal girişlerine dönüştürülmelidir.

Onay modeli projelerimden buraya taşınanlar:

  • Tek numaralandırma kaynağı olarak SAP Business One’ı kullanın. Bir e-Fatura numarası 3 harfli bir ön ek, yıl ve 9 haneli bir sıra numarasından oluşur ve GİB boşlukları görür. Eklenti numarayı özel bir SAP Business One belge serisinden almalı ve asla kendi numarasını üretmemelidir; aksi halde ilk ay sonunu iki listeyi mutabık hale getirmekle geçirirsiniz.
  • Kimse XML yazmadan önce vergi kodu eşlemesini muhasebeciyle birlikte gözden geçirin. SAP Business One’da tevkifat, oranı olan bir withholding tax code’dur; UBL-TR’de ise bir tevkifat kodu, bir oran ve bir fatura tipidir. İstisna, SAP’de %0 oranlı bir tax group, XML’de ise bir istisna sebep kodudur. Bu iki görünüm yan yana yazılıp onaylanmazsa retler ilk gün başlar.
  • Ana verileri pilottan sonra değil, önce temizleyin. Yanlış bir VKN’ye düzenlenen e-Fatura yanlış mükellefe gider ya da kimseye ulaşmaz; kontrol hanesi hatalı bir TCKN ise entegratördeki şema kontrolünden geçemez. Aşağıdaki sorgu bunları canlıya geçişten önce bulur.

Geçersiz VKN veya TCKN’ye sahip Türk müşterileri nasıl bulursunuz?

VKN (vergi kimlik numarası), GİB algoritmasıyla hesaplanan bir kontrol hanesine sahip 10 haneli bir numaradır: ilk dokuz hanenin her birine konum ağırlığını (9’dan 1’e kadar) ekleyin, sonucun 10’a göre modunu alın, 2 üzeri aynı ağırlıkla çarpın, 9’a göre modunu alın ve ilk adımın sonucu zaten sıfır değilse sıfırı 9 kabul edin; kontrol hanesi, 10 eksi toplamın 10’a göre modudur. TCKN (T.C. kimlik numarası) asla 0 ile başlamayan 11 haneli bir numaradır; onuncu hane (1, 3, 5, 7 ve 9. hanelerin toplamının 7 katı eksi 2, 4, 6 ve 8. hanelerin toplamı) mod 10, on birinci hane ise ilk on hanenin toplamı mod 10’dur. SAP Business One numarayı OCRD.LicTradNum alanında, çoğu zaman TR ön eki, boşluk veya noktalarla birlikte tutar.

Bu sorgu her aktif Türk müşteriyi kontrol eder ve neyin yanlış olduğunu raporlar:

-- SQL Server: Turkish customers with a missing or invalid VKN / TCKN
WITH BP AS (
    SELECT CardCode, CardName,
           REPLACE(REPLACE(REPLACE(ISNULL(LicTradNum, ''), ' ', ''), '.', ''), '-', '') AS Raw
    FROM OCRD
    WHERE CardType = 'C' AND Country = 'TR' AND frozenFor = 'N'
), N AS (
    SELECT CardCode, CardName,
           CASE WHEN LEFT(Raw, 2) = 'TR' THEN SUBSTRING(Raw, 3, 20) ELSE Raw END AS TaxNo
    FROM BP
), V AS (
    -- VKN check digit: sum over positions 1..9
    SELECT N.CardCode,
           (10 - SUM(CASE WHEN T.t <> 0 AND (T.t * POWER(2, 10 - P.i)) % 9 = 0 THEN 9
                          ELSE (T.t * POWER(2, 10 - P.i)) % 9 END) % 10) % 10 AS Chk
    FROM N
    CROSS APPLY (VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9)) AS P(i)
    CROSS APPLY (SELECT (CAST(SUBSTRING(N.TaxNo, P.i, 1) AS INT) + (10 - P.i)) % 10 AS t) AS T
    WHERE N.TaxNo LIKE '[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
    GROUP BY N.CardCode
), T AS (
    -- TCKN check digits
    SELECT CardCode,
           (((7 * (D1 + D3 + D5 + D7 + D9) - (D2 + D4 + D6 + D8)) % 10) + 10) % 10 AS C10,
           (D1 + D2 + D3 + D4 + D5 + D6 + D7 + D8 + D9 + D10) % 10 AS C11
    FROM (
        SELECT CardCode,
               CAST(SUBSTRING(TaxNo, 1, 1) AS INT) D1, CAST(SUBSTRING(TaxNo, 2, 1) AS INT) D2,
               CAST(SUBSTRING(TaxNo, 3, 1) AS INT) D3, CAST(SUBSTRING(TaxNo, 4, 1) AS INT) D4,
               CAST(SUBSTRING(TaxNo, 5, 1) AS INT) D5, CAST(SUBSTRING(TaxNo, 6, 1) AS INT) D6,
               CAST(SUBSTRING(TaxNo, 7, 1) AS INT) D7, CAST(SUBSTRING(TaxNo, 8, 1) AS INT) D8,
               CAST(SUBSTRING(TaxNo, 9, 1) AS INT) D9, CAST(SUBSTRING(TaxNo, 10, 1) AS INT) D10
        FROM N
        WHERE TaxNo LIKE '[1-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
    ) X
)
SELECT N.CardCode, N.CardName, N.TaxNo,
       CASE
           WHEN N.TaxNo = '' THEN 'Missing tax ID'
           WHEN LEN(N.TaxNo) = 10 AND V.Chk IS NULL THEN 'VKN has non-digits'
           WHEN LEN(N.TaxNo) = 10 AND V.Chk <> CAST(RIGHT(N.TaxNo, 1) AS INT) THEN 'VKN check digit wrong'
           WHEN LEN(N.TaxNo) = 10 THEN 'OK (VKN)'
           WHEN LEN(N.TaxNo) = 11 AND T.C10 IS NULL THEN 'TCKN has non-digits or starts with 0'
           WHEN LEN(N.TaxNo) = 11 AND (T.C10 <> CAST(SUBSTRING(N.TaxNo, 10, 1) AS INT)
                                    OR T.C11 <> CAST(SUBSTRING(N.TaxNo, 11, 1) AS INT)) THEN 'TCKN check digits wrong'
           WHEN LEN(N.TaxNo) = 11 THEN 'OK (TCKN)'
           ELSE 'Wrong length'
       END AS Problem
FROM N
LEFT JOIN V ON V.CardCode = N.CardCode
LEFT JOIN T ON T.CardCode = N.CardCode
WHERE N.TaxNo = '' OR LEN(N.TaxNo) NOT IN (10, 11)
   OR (LEN(N.TaxNo) = 10 AND (V.Chk IS NULL OR V.Chk <> CAST(RIGHT(N.TaxNo, 1) AS INT)))
   OR (LEN(N.TaxNo) = 11 AND (T.C10 IS NULL OR T.C10 <> CAST(SUBSTRING(N.TaxNo, 10, 1) AS INT)
                                            OR T.C11 <> CAST(SUBSTRING(N.TaxNo, 11, 1) AS INT)))
ORDER BY Problem, N.CardCode
-- SAP HANA version
WITH BP AS (
    SELECT "CardCode", "CardName",
           REPLACE(REPLACE(REPLACE(IFNULL("LicTradNum", ''), ' ', ''), '.', ''), '-', '') AS "Raw"
    FROM OCRD
    WHERE "CardType" = 'C' AND "Country" = 'TR' AND "frozenFor" = 'N'
), N AS (
    SELECT "CardCode", "CardName",
           CASE WHEN LEFT("Raw", 2) = 'TR' THEN SUBSTRING("Raw", 3, 20) ELSE "Raw" END AS "TaxNo"
    FROM BP
), P AS (
    SELECT 1 AS "i" FROM DUMMY UNION ALL SELECT 2 FROM DUMMY UNION ALL SELECT 3 FROM DUMMY
    UNION ALL SELECT 4 FROM DUMMY UNION ALL SELECT 5 FROM DUMMY UNION ALL SELECT 6 FROM DUMMY
    UNION ALL SELECT 7 FROM DUMMY UNION ALL SELECT 8 FROM DUMMY UNION ALL SELECT 9 FROM DUMMY
), V AS (
    SELECT "CardCode",
           MOD(10 - MOD(SUM(CASE WHEN "t" <> 0 AND MOD("t" * POWER(2, 10 - "i"), 9) = 0 THEN 9
                                 ELSE MOD("t" * POWER(2, 10 - "i"), 9) END), 10), 10) AS "Chk"
    FROM (
        SELECT N."CardCode", P."i",
               MOD(TO_INTEGER(SUBSTRING(N."TaxNo", P."i", 1)) + (10 - P."i"), 10) AS "t"
        FROM N CROSS JOIN P
        WHERE N."TaxNo" LIKE_REGEXPR '^[0-9]{10}$'
    ) S
    GROUP BY "CardCode"
), T AS (
    SELECT "CardCode",
           MOD(MOD(7 * ("D1" + "D3" + "D5" + "D7" + "D9") - ("D2" + "D4" + "D6" + "D8"), 10) + 10, 10) AS "C10",
           MOD("D1" + "D2" + "D3" + "D4" + "D5" + "D6" + "D7" + "D8" + "D9" + "D10", 10) AS "C11"
    FROM (
        SELECT "CardCode",
               TO_INTEGER(SUBSTRING("TaxNo", 1, 1)) "D1", TO_INTEGER(SUBSTRING("TaxNo", 2, 1)) "D2",
               TO_INTEGER(SUBSTRING("TaxNo", 3, 1)) "D3", TO_INTEGER(SUBSTRING("TaxNo", 4, 1)) "D4",
               TO_INTEGER(SUBSTRING("TaxNo", 5, 1)) "D5", TO_INTEGER(SUBSTRING("TaxNo", 6, 1)) "D6",
               TO_INTEGER(SUBSTRING("TaxNo", 7, 1)) "D7", TO_INTEGER(SUBSTRING("TaxNo", 8, 1)) "D8",
               TO_INTEGER(SUBSTRING("TaxNo", 9, 1)) "D9", TO_INTEGER(SUBSTRING("TaxNo", 10, 1)) "D10"
        FROM N
        WHERE "TaxNo" LIKE_REGEXPR '^[1-9][0-9]{10}$'
    ) X
)
SELECT N."CardCode", N."CardName", N."TaxNo",
       CASE
           WHEN N."TaxNo" = '' THEN 'Missing tax ID'
           WHEN LENGTH(N."TaxNo") = 10 AND V."Chk" IS NULL THEN 'VKN has non-digits'
           WHEN LENGTH(N."TaxNo") = 10 AND V."Chk" <> TO_INTEGER(RIGHT(N."TaxNo", 1)) THEN 'VKN check digit wrong'
           WHEN LENGTH(N."TaxNo") = 10 THEN 'OK (VKN)'
           WHEN LENGTH(N."TaxNo") = 11 AND T."C10" IS NULL THEN 'TCKN has non-digits or starts with 0'
           WHEN LENGTH(N."TaxNo") = 11 AND (T."C10" <> TO_INTEGER(SUBSTRING(N."TaxNo", 10, 1))
                                         OR T."C11" <> TO_INTEGER(SUBSTRING(N."TaxNo", 11, 1))) THEN 'TCKN check digits wrong'
           WHEN LENGTH(N."TaxNo") = 11 THEN 'OK (TCKN)'
           ELSE 'Wrong length'
       END AS "Problem"
FROM N
LEFT JOIN V ON V."CardCode" = N."CardCode"
LEFT JOIN T ON T."CardCode" = N."CardCode"
WHERE N."TaxNo" = '' OR LENGTH(N."TaxNo") NOT IN (10, 11)
   OR (LENGTH(N."TaxNo") = 10 AND (V."Chk" IS NULL OR V."Chk" <> TO_INTEGER(RIGHT(N."TaxNo", 1))))
   OR (LENGTH(N."TaxNo") = 11 AND (T."C10" IS NULL OR T."C10" <> TO_INTEGER(SUBSTRING(N."TaxNo", 10, 1))
                                                 OR T."C11" <> TO_INTEGER(SUBSTRING(N."TaxNo", 11, 1))))
ORDER BY "Problem", N."CardCode"

Bu tür kontrolleri çalıştırırken edindiğim notlar:

  • Mantığı test ettim, verilerinizi değil. İki algoritma, GİB’in yayımladığı test kimlik numarası 10000000146 ve resmi kontrol hanesi kuralıyla üretilen VKN’ler için geçerli sonucunu döndürür ve herhangi birinde tek haneli bir değişikliği yakalar. Sorguyu önce bir test kopyasında çalıştırın ve “Wrong length” satırlarını tek tek okuyun: Country = TR ile oluşturulmuş yabancı müşteriler ve vergi numarası alanına vergi dairesi adı yazılmış eski kayıtlar buraya düşer.
  • Tedarikçiler de. CardType değerini ‘S’ yapın. Gelen e-Fatura tedarikçilerinizle VKN üzerinden eşleştirilir ve e-Defter yevmiyesi iş ortaklarının vergi numaralarını taşır; bu nedenle hatalı bir tedarikçi VKN’si her ikisinde de ortaya çıkar.
  • Vergi dairesi ayrı bir alandır. UBL-TR faturası, VKN’li bir müşteri için alıcının vergi dairesini gerektirir ve SAP Business One’daki standart iş ortağı ana verisinde bunun için bir alan yoktur. OCRD üzerinde kullanıcı tanımlı bir alan ekleyin ve e-Fatura eklentisinin bunu okumasını sağlayın; vergi numarası alanına sıkıştırmayın.
  • Sonra yenilerini engelleyin. Aynı kontrolü nesne 2 (iş ortakları) için SBO_SP_TransactionNotification’a ekleyin; böylece bir Türk müşteri hatalı bir VKN veya TCKN ile kaydedilemez. TransactionNotification örnekleri bu kalıbı gösterir.

OCRD sayfası iş ortağı alanlarını listeler; SQL to HANA dönüştürücü ise diğer sorguları iki lehçe arasında yeniden yazar.

Türkiye’de hangi ERP sistemleri yaygındır?

Türkiye’deki küçük ve orta ölçekli şirketler çok sık olarak Logo, Mikro, Netsis (artık Logo’nun parçası) veya Uyumsoft gibi yerli yazılımlar kullanır; bunlar e-Fatura ve e-Defter’i yerleşik olarak sunar ve kendileri de lisanslı özel entegratör şirketleridir. Uluslararası bir gruba bağlı olan, yoğun ihracat yapan veya yurt dışındaki bir ana şirkete raporlama yapan şirketler ise daha çok SAP Business One, Microsoft Dynamics 365 Business Central veya SAP S/4HANA kullanır ve GİB’e bir eklenti ya da entegratör şirketlerinden birinin bağlayıcısı (connector) üzerinden bağlanır. GİB kuralları hepsine eşit şekilde uygulanır; dolayısıyla alıcı için soru, hangi ERP olduğundan çok sizin adınıza kimin imzaladığı, arşivlediği ve dosyaladığı ve tedarikçi değiştirirseniz arşivinize ne olacağıdır. ERP Selector sistemleri ülke gereksinimine göre karşılaştırır.

Kodenova, Türkiye’deki SAP Business One kullanıcıları için ne yapabilir?

Pakistan’dan uzaktan çalışıyorum; Pakistan Türkiye’den 2 saat ileride olduğu için Türkiye’deki 09:00-18:00 iş günü benim için 11:00-20:00’dir ve toplantılar kimsenin gece çalışmasına gerek kalmadan ayarlanabilir. Yaptıklarım:

  • e-Fatura öncesi ana veri temizliği: VKN ve TCKN, vergi dairesi, vergi grupları ve tevkifat kodları; yukarıdakine benzer sorgular ve düzeltilecekler listesiyle.
  • Doğrulama kuralları SBO_SP_TransactionNotification içinde: geçersiz vergi numarasına sahip bir Türk müşteriyi veya eklentinizin UBL-TR eşlemesi için ihtiyaç duyduğu alanları eksik olan bir A/R faturasını engellemek.
  • Entegrasyonlar Service Layer üzerinden: web mağazaları, pazaryerleri, bankalar ve e-Fatura eklentinizin geri yazdığı durum alanları; böylece raporlar ve panolar GİB durumunu faturanın yanında gösterir. Service Layer kılavuzuna bakın.
  • Eklentiler, sorgular, raporlar ve SQL Server’dan HANA’ya geçiş. Eklenti geliştirme kılavuzuna ve geçiş kılavuzuna bakın.
  • SAP B1 üzerinde yapay zekâ: ChatGPT veya Claude’un canlı SAP verilerinden, yetkilere bağlı olarak yanıt verebilmesi için bir MCP sunucusu.

Kapsamı net olarak belirteyim: geliştirdiğim e-fatura entegrasyonları Suudi Arabistan, Ekvador, Guatemala, El Salvador ve Panama içindir. Türkiye için bir e-Fatura, e-Arşiv veya e-Defter ürünü satmıyorum ve özel entegratör değilim; bu belgeler GİB lisanslı bir entegratör ve iş ortağınızın sağladığı eklenti üzerinden gider, ben de bunun etrafındaki SAP tarafında çalışırım. Vergi danışmanlığı yapmıyorum. Kodenova bir SAP iş ortağı değildir ve lisans satmaz; lisans ve destek için bir iş ortağınız varsa, geliştirme konusunda onunla birlikte çalışırım. Diğer ülke sayfaları: Suudi Arabistan, İspanya, Almanya ve SAP Business One merkez sayfasındaki tam liste.

Sources

Related services

FAQ

Frequently asked questions

SAP Business One Türkiye'de e-Fatura'yı destekliyor mu?

Yerleşik olarak hayır. SAP'nin SAP Business One 10.0 için Localization for Turkey dokümantasyonu (10 Kasım 2026'da kontrol edildi) vergi raporlarını, stopaj vergisini, ertelenmiş vergiyi, kambiyo senetlerini, ileri tarihli çekleri, folyo numaralarını, yasal belge yevmiyesini ve yıl sonu kapanışını belgeler. e-Fatura, e-Arşiv, e-İrsaliye veya e-Defter konusu yoktur. SAP Business One kullanan Türk müşteriler, A/R faturalarından UBL-TR belgeleri oluşturan ve bunları GİB tarafından lisanslanmış özel entegratör şirketlerinden biri aracılığıyla ya da GİB sistemiyle doğrudan entegrasyon yoluyla gönderen bir iş ortağı eklentisi kullanır.

Türkiye'de e-Fatura'yı kimler kullanmak zorundadır?

VUK Genel Tebliği 509'un IV.1.4 bölümüne göre: 2022 veya sonraki herhangi bir hesap döneminde brüt satış hasılatı 3 milyon TL'ye ulaşan mükellefler (internet üzerinden satış yapan ya da gayrimenkul ve motorlu taşıt ticareti veya aracılığı yapan şirketler için 500.000 TL), ÖTV (I) sayılı liste mallarına ilişkin EPDK lisansı sahipleri, ÖTV (III) sayılı liste mallarının üreticileri ve ithalatçıları, elektronik ticaret aracı hizmet sağlayıcıları, meyve ve sebze ticareti yapanlar, SGK ile sözleşmeli sağlık hizmeti sunucuları ve tıbbi malzeme tedarikçileri, belgeli oteller ve elektrikli araç şarj ağı işletmecileri. GİB ayrıca riskli gördüğü herhangi bir mükellefi üç ay önceden bildirimde bulunarak zorunlu tutabilir.

Bir Türk şirketi eşiği aştıktan sonra e-Fatura'ya ne zaman geçmek zorundadır?

Tebliğ 509'un IV.1.5 bölümüne göre, bir hesap döneminde brüt satış hasılatı eşiğine ulaşan şirket, izleyen yılın yedinci ayının başından, yani 1 Temmuz'dan itibaren e-Fatura'ya geçmiş olmalıdır. 2026 hasılatı 3 milyon TL'ye ulaşan bir şirket 1 Temmuz 2027'den itibaren e-Fatura düzenlemelidir. ÖTV lisansı sahiplerinin lisans ayından itibaren dört ayı, birleşme, bölünme veya nevi değişikliği yoluyla kurulan şirketlerin ise tescilden itibaren en fazla üç ayı vardır.

e-Fatura ile e-Arşiv Fatura arasındaki fark nedir?

Her ikisi de UBL-TR formatında elektronik faturadır. e-Fatura, GİB e-Fatura sistemine de kayıtlı olan bir alıcıya gönderilir ve GİB üzerinden iletilir. e-Arşiv Fatura ise diğer herkese, yani tüketicilere ve kayıtlı olmayan şirketlere düzenlenir; alıcıya doğrudan iletilir ve GİB'e raporlanır. Her e-Fatura kullanıcısı e-Arşiv'e de kaydolmak zorundadır ve 1 Ocak 2026'dan itibaren her iki sistemin dışında kalan şirketler, tutardan bağımsız olarak tüm faturalarını GİB portalı veya bir özel entegratör üzerinden e-Arşiv olarak düzenlemek zorundadır; basit usule tabi mükellefler ve işletme hesabı esasına göre defter tutanlar için bu tarih bir yıl ertelenerek 1 Ocak 2027'dir.

e-Defter'i kimler tutmak zorundadır ve berat dosyalarının süresi ne zaman dolar?

Elektronik Defter Genel Tebliği'nin (Sıra No: 1) 3.2 bölümüne göre e-Defter; e-Fatura kullanmak zorunda olan her mükellef, Türk Ticaret Kanunu'nun 397. maddesi uyarınca bağımsız denetime tabi şirketler ve 1 Ocak 2025'ten itibaren bilanço esasına göre defter tutan her mükellef için zorunludur. Aylık yevmiye defteri ve defter-i kebir dosyaları beratlarıyla birlikte, ilgili ayı izleyen dördüncü ayın gelir vergisi mükellefleri için 10'uncu, diğer mükellefler için 14'üncü günü sonuna kadar imzalanıp yüklenmelidir; geçici vergi dönemleriyle uyumlu üçer aylık yükleme seçeneği de vardır.

Türkiye dışındaki bir geliştirici Türkiye'deki bir SAP Business One sistemi üzerinde çalışabilir mi?

Evet; üzerinde anlaşılmış erişim, KVKK kapsamında bir veri işleme sözleşmesi ve belirli çalışma saatleriyle. Kodenova Pakistan'dan uzaktan çalışır; Pakistan Türkiye'den 2 saat ileridedir, bu yüzden Türkiye'deki iş günü benimkiyle neredeyse tamamen örtüşür. Türkiye, SAP Business One müşterilerimin geldiği 13 ülkeden biridir. İngilizce çalışıyorum; vergi soruları için bu sayfada bağlantısı verilen GİB metinleri referanstır ve son söz mali müşavirinizindir.

Başlamaya hazır mısınız?

İhtiyacınızı bize anlatın. Net bir teknik yanıt, tanımlı bir kapsam ve fiyat alırsınız; genellikle 24 saat içinde.