Vibrant close-up of a computer screen displaying color-coded programming code.

Rize merkezli, çay + fındık ihracatçısı 95 çalışanlı bir firma, SAP B1’i 5 yıl önce kurdu. Son 1 yılda yavaşlık + entegrasyon sorunları başladı. 3 ayda mimari refactoring + performance tuning yaptık. Bu yazı SAP B1’in teknik derinliğini sahadan örneklerle anlatıyor.

SAP B1 Bileşen Mimarisi

[Client Katman]
  - SAP B1 Windows Client (RDP / fat client)
  - SAP B1 Web Client
  - SAP B1 Mobile (iOS/Android)
  - 3rd party integrasyon (REST/SOAP)
       ↓
[Service Layer (REST OData)]
[B1WS (SOAP, legacy)]
       ↓
[SAP B1 Application Server]
       ↓
[Database]
  - SAP HANA (in-memory) veya
  - Microsoft SQL Server

HANA vs SQL Server Karşılaştırma

Konu HANA SQL Server
Performans 5-10x hızlı (in-memory) Standard
Maliyet (lisans) Yüksek (RAM bazlı) Düşük
Donanım (RAM) ~~64 GB+ minimum ~~16 GB yeter
Pervasive Analytics Native + güçlü Sınırlı
Real-time analytics Mükemmel Orta
İş zekası raporu HANA Studio + Analytics SSRS + Crystal
Yedekleme HANA backup SQL backup (VSS)
Yönetim karmaşıklık Yüksek (HANA Studio öğren) Düşük (SSMS)

Şirket SQL Server kullanıyordu, performans sorunu nedeniyle HANA’ya geçiş değerlendirildi ama lisans + RAM maliyeti karşılamadı. SQL Server’da tuning yoluna gidildi.

Performans Tuning

Tespit Edilen Sorunlar

Sorun Etki
OINV (fatura) tablosu 4M kayıt, indeksler eksik Sorgu 12 sn
İhracat raporları tüm fatura full scan yapıyor 3 dk+ rapor süresi
Custom UDQ (User Defined Query) optimize edilmemiş Ay sonu raporları bekliyor
SAP DB’si transaction log büyümüş (180 GB) Backup uzun + disk dolu
VM’e ayrılan vCPU az (4) CPU bottleneck

Yapılan Tuning

-- OINV için ek indeks (ihracat sorgusuna göre)
CREATE NONCLUSTERED INDEX IX_OINV_DocDate_CardCode_Currency
ON OINV (DocDate, CardCode, DocCur)
INCLUDE (DocTotal, DocTotalSy, U_IhracatNo)
WHERE Canceled = 'N';

-- İhracat raporu için filtered indeks
CREATE NONCLUSTERED INDEX IX_OINV_Export
ON OINV (DocDate)
INCLUDE (CardCode, DocTotal, U_GTIP, U_Plaka)
WHERE U_IhracatNo IS NOT NULL;

-- Statistics update
UPDATE STATISTICS OINV WITH FULLSCAN;
UPDATE STATISTICS RDR1 WITH FULLSCAN;

-- VM'e vCPU 4 → 8, RAM 16 → 32 GB
-- TempDB ayrı disk
-- Recovery model: Simple yerine FULL ama log shipping ile

Sonuç

İşlem Önce Sonra
İhracat fatura listeleme ~~12 sn ~~0.8 sn
Ay sonu rapor ~~3 dk ~~24 sn
Sales Order kayıt ~~5 sn ~~1.2 sn
Genel sistem responsive Yavaş Akıcı

Add-On Mimarisi

SAP B1 ekstra fonksiyonalite Add-On ile gelir:

Add-On tipi Açıklama
UI Add-On (eski) SAP B1 Studio + .NET, COM-based, Windows Client
Web Add-On Web Client için, modern
Service Layer extension OData REST API ile dış sistem entegrasyon
Pervasive Analytics Custom dashboard + KPI

Sahada Kullanılan Add-On’lar

  • e-Dönüşüm (Türk partner): e-Fatura, e-İrsaliye, e-Defter
  • Banka entegrasyon: Hesap hareket → otomatik mahsup
  • İhracat dökümantasyon: Custom (paket listesi, çeki listesi, ATR/EUR.1)
  • Excel Loader: Toplu master data ve transaction yükleme

Service Layer (REST OData)

# Login
POST https://b1srv:50000/b1s/v1/Login
{
  "CompanyDB": "SBODemoUS",
  "UserName": "manager",
  "Password": "***"
}
→ Cookie: B1SESSION=...

# Müşteri yarat
POST https://b1srv:50000/b1s/v1/BusinessPartners
{
  "CardCode": "C90001",
  "CardName": "Yeni Müşteri AŞ",
  "CardType": "cCustomer",
  "GroupCode": 100,
  "Currency": "USD"
}

# Sales Order yarat
POST /b1s/v1/Orders
{
  "CardCode": "C90001",
  "DocDate": "2026-04-25",
  "DocumentLines": [
    { "ItemCode": "A1001", "Quantity": 100, "Price": 25.50 }
  ]
}

# Stok sorgu
GET /b1s/v1/Items?$filter=OnHand gt 0&$select=ItemCode,ItemName,OnHand

Integration Framework (B1iF)

SAP B1’in built-in iPaaS’ı:

  • 3rd party sistemden veri çek (REST, SOAP, file, DB)
  • Map (XSLT)
  • SAP B1’e yaz (DI API ile)
  • Schedule + monitoring

Sahada Örnek Akışlar

Akış Tetikleyici Aksiyon
Webshop sipariş → SAP HTTPS POST (webshop webhook) SAP B1 Sales Order yarat
Banka hareketleri Saatlik scheduled (banka API) Hesap hareketi import
Lojistik tracking Schedule (lojistik API) Sipariş status update
Tedarikçi katalog Daily (CSV) Item master update

Sahada Düşülen Üç Tuzak

  1. İlk gün doğru DB seçmemek: SQL’den HANA’ya geçiş zor + pahalı. Beklenen büyüme + analytics ihtiyacına göre baştan karar ver.
  2. Add-On’ları SAP B1 standartı yerine custom kod yazmak: Bakım + upgrade kâbusu. Önce SAP B1 native özellik dene, sonra add-on, son çare custom.
  3. Performance monitoring kurmadan canlıya çıkmak: Yavaşlık fark edildiğinde 4-5 yıl geçmiş, 4M kayıt birikmiş. Day 1 indeks + query plan monitoring.

CloudSpark olarak SAP Business One mimarisi (HANA/SQL Server seçimi), performans tuning, Add-On geliştirme, Service Layer integration ve B1 Integration Framework (B1iF) için danışmanlık veriyoruz.

🇹🇷 Türkçe🇬🇧 English🇩🇪 Deutsch🇫🇷 Français🇸🇦 العربية🇷🇺 Русский🇪🇸 Español