Migrating from Odoo 17/18 to Odoo 19: Complete Guide

Step-by-step guide to migrating from Odoo 17 or 18 to Odoo 19. Covers planning, data migration, custom module updates, testing, and zero-downtime cutover.

E
ECOSIRE Research and Development Team
|19 Mart 202610 dk okuma2.1k Kelime|

Odoo 17/18'den Odoo 19'a Geçiş: Tam Kılavuz

Odoo 19 Enterprise'a yükseltme, performansta, kullanıcı deneyiminde ve yapay zeka destekli özelliklerde önemli iyileştirmeler sağlar. Ancak geçiş, ERP yaşam döngüsündeki en yüksek riskli işlemlerden biridir; veri kaybı, bozulan özel modüller ve uzun süreli kesintiler, dikkatli planlama ve yürütme gerektiren gerçek risklerdir.

Bu kılavuz, Odoo 17 veya Odoo 18'den Odoo 19 Enterprise'a geçiş yapan kuruluşlar için pratik, adım adım geçiş metodolojisi sağlar. İlk değerlendirme ve veri eşlemesinden özel modül güncellemelerine, test prosedürlerine ve canlıya geçiş planına kadar her şeyi kapsar.

Önemli Çıkarımlar

  • Odoo 19 geçişi, aynı anda bir ana sürümün yükseltilmesini gerektirir (17→18→19 veya 17→19 doğrudan OpenUpgrade ile)
  • Özel modül uyumluluğu Odoo 19'un API değişikliklerine göre doğrulanmalıdır
  • Veri taşıma, Odoo'nun resmi yükseltme platformu veya OpenUpgrade aracılığıyla gerçekleştirilir
  • Üretime geçmeden önce paralel bir test ortamı zorunludur
  • Karmaşıklığa bağlı olarak 3-8 haftalık toplam geçiş zaman çizelgesini planlayın
  • Mutabakat sorunlarını önlemek için geçiş öncesinde mali dönemler kapatılmalıdır
  • Tüm üçüncü taraf entegrasyonlarının geçişten sonra yeniden doğrulanması gerekir
  • Geri alma planı hayata geçirilmeden önce belgelenmeli ve test edilmelidir

Geçiş Planlaması: Değerlendirme Aşaması

Tek bir geçiş komut dosyası yazmadan önce kapsamlı değerlendirmeye zaman ayırın. Taşıma işlemleri çoğunlukla teknik karmaşıklıktan değil, yetersiz planlamadan dolayı başarısız olur.

1. Adım: Mevcut ortamınızın envanterini çıkarın

Mevcut Odoo kurulumunuzun her bileşenini belgeleyin:

Current Environment Inventory:
- Odoo version: 17.0.x or 18.0.x
- Edition: Community or Enterprise
- Database size: X GB, Y records in sale.order, Z in account.move
- Installed modules: [list all modules]
- Custom modules: [list with developer contact]
- Third-party connectors: [Amazon, Shopify, etc.]
- Active integrations: [API, webhooks, cron jobs]
- Customized reports: [list]
- Custom fields (Studio or code): [list]
- Server specs: RAM, CPU, disk
- PostgreSQL version: (minimum 15 required for Odoo 19)

2. Adım: Özel modülleri sınıflandırın

Her özel modül için şunları belirleyin:

SınıflandırmaTanımıTaşıma Eylemi
Standart kullanımModül Odoo Marketplace'ten farklı değilOdoo 19'u yeniden indirin
Hafifçe değiştirilmişKüçük alan eklemeleri, değişiklikleri görüntülemeGüncelleme ve test etme
Büyük ölçüde özelleştirilmişİş açısından kritik Python mantığıTam geliştirici incelemesi
Kullanımdan kaldırıldıİşlevsellik artık Odoo çekirdeğindeKaldır ve yeniden yapılandır
UyumsuzKaldırılan Odoo 19 API'lerine bağlıdırYeniden yazma gerekli

3. Adım: Odoo 19'daki son değişiklikleri belirleyin

Odoo 17/18 ile Odoo 19 arasında özel modülleri etkileyen önemli değişiklikler:

  • OWL 3.x: Ön uç bileşenlerinin OWL 2.x modellerinden taşınması gerekir
  • Python 3.12: Bazı Python 3.10/3.11 söz dizimlerinin ayarlanması gerekebilir
  • PostgreSQL 15+: Gerekli minimum sürüm; bazı sorgu kalıpları değişiyor
  • API'nin kullanımdan kaldırılması: Birkaç _legacy yöntemi kaldırıldı; _multi_create_multi olup olmadığını kontrol edin
  • Rapor motoru: Bazı QWeb rapor değişkenleri yeniden adlandırıldı
  • Hesap taşımanın yeniden düzenlenmesi: account.move satır yapısı değişiklikleri muhasebe özelleştirmelerini etkiler

Geçiş Yolunuzu Seçme

Yol 1: Odoo Resmi Yükseltme Hizmeti

Odoo SA, upgrade.odoo.com adresinde otomatik yükseltme hizmeti sunmaktadır. Veritabanınızı gönderirsiniz, onlar Odoo SA tarafından geliştirilen ve bakımı yapılan geçiş komut dosyalarını çalıştırır ve siz de yükseltilmiş bir veritabanı alırsınız.

Artıları:

  • Odoo SA tarafından resmi destek ve testler
  • Veritabanı şeması değişikliklerini otomatik olarak yönetir
  • Minimal özelleştirmelerle standart Odoo'ya uygundur

Eksileri:

  • Özel modülleri işlemez
  • Üretim verilerinin Odoo sunucularına gönderilmesini gerektirir
  • Geçiş süreci üzerinde sınırlı kontrol
  • Özel modül geçişi sizin sorumluluğunuzdadır

Yol 2: OpenUpgrade (Topluluk Aracı)

OpenUpgrade, Topluluk ve Kurumsal için geçiş komut dosyaları sağlayan açık kaynaklı bir projedir.

# Clone OpenUpgrade for Odoo 19
git clone https://github.com/OCA/OpenUpgrade.git -b 19.0

# Install upgrade dependencies
pip install openupgradelib

# Run migration
python odoo-bin --config=upgrade.conf \
    --update=all \
    --load=base,web,openupgrade_framework

Yol 3: Verileri İçe Aktarmayla Yeni Yükleme

Yoğun biçimde özelleştirilmiş örnekler veya çok eski sürümler için:

  1. Yeni bir Odoo 19 Enterprise örneği kurun
  2. Tüm modülleri ve ayarları yeniden yapılandırın
  3. Kritik verileri eski sistemden dışarı aktarın
  4. Odoo'nun içe aktarma aracı veya özel geçiş komut dosyaları aracılığıyla içe aktarın
  5. Muhasebe için açılış bakiyelerini manuel olarak yeniden girin

Bu yol daha yavaştır ancak en temiz başlangıç ​​noktasını sağlar.

Odoo 17/18 → 19 geçişlerinin çoğu için önerilir: Yol 1 veya 2'nin paralel özel modül yeniden geliştirme çalışmasıyla birleştirilmesi.


Göç Öncesi Hazırlık (1-2. Hafta)

Veritabanı hazırlığı:

-- Run on source database before export
-- Identify orphaned records
SELECT id, name FROM res_partner WHERE active = FALSE AND id NOT IN (
    SELECT partner_id FROM sale_order
    UNION SELECT partner_id FROM account_move
    UNION SELECT partner_id FROM stock_picking
);

-- Archive old draft records (reduces migration time)
UPDATE sale_order SET active = FALSE
WHERE state = 'draft' AND date_order < NOW() - INTERVAL '2 years';

-- Verify accounting reconciliation
SELECT COUNT(*) FROM account_move_line
WHERE reconciled = FALSE AND debit != credit;

Yakın mali dönemler:

Taşımadan önce:

  1. Odoo Muhasebe'de geçerli aydan önceki tüm dönemleri kilitleyin
  2. Yaşlandırılmış alacak ve borç raporlarını çalıştırın ve farklılıkları uzlaştırın
  3. Geçiş tarihine kadar tüm banka ekstrelerinin mutabakatını yapın
  4. Geçmiş verilere dahil edilmesi gereken tüm taslak faturaları kaydedin

Her şeyi yedekleyin:

# PostgreSQL backup
pg_dump -h localhost -p 5433 -U odoo_user -Fc odoo_production > \
    odoo_prod_backup_$(date +%Y%m%d_%H%M%S).dump

# Filestore backup (attachments, images)
tar -czf odoo_filestore_$(date +%Y%m%d).tar.gz \
    /var/lib/odoo/.local/share/Odoo/filestore/

# Configuration backup
cp /etc/odoo/odoo.conf odoo_conf_backup_$(date +%Y%m%d).conf

Özel modül kodu incelemesi:

Her özel modül için bir uyumluluk kontrolü yapın:

# Check for deprecated patterns
grep -r "execute_kw" custom_modules/   # Still valid in v19
grep -r "browse\(\[" custom_modules/  # Should be browse(ids) not browse([ids])
grep -r "_multi" custom_modules/      # Check for renamed methods
grep -r "account\.move\.line\." custom_modules/  # Account refactoring affected
grep -r "@api\.one" custom_modules/   # Removed in v14, ensure not present
grep -r "@api\.multi" custom_modules/ # Removed in v14, ensure not present

Geçiş Ortamını Ayarlama (2-3. Hafta)

Altyapı kurulumu:

# Install Odoo 19 Enterprise on migration server
# Requirements: Ubuntu 22.04/24.04, PostgreSQL 15+, Python 3.12

# Install PostgreSQL 15+
sudo apt install postgresql-15 postgresql-contrib

# Install Python 3.12 and dependencies
sudo apt install python3.12 python3.12-dev python3.12-venv \
    libxml2-dev libxslt1-dev libldap2-dev libsasl2-dev \
    libtiff5-dev libjpeg8-dev libopenjp2-7-dev zlib1g-dev \
    libfreetype6-dev liblcms2-dev libwebp-dev libharfbuzz-dev \
    libfribidi-dev libxcb1-dev

# Clone Odoo 19 Enterprise
git clone https://github.com/odoo/odoo.git -b 19.0 /opt/odoo19
git clone https://github.com/odoo/enterprise.git -b 19.0 /opt/odoo19-enterprise

# Install Python dependencies
pip3.12 install -r /opt/odoo19/requirements.txt

Kaynak veritabanını taşıma sunucusuna geri yükleyin:

# Create target database
createdb -h localhost -U postgres odoo_migration_test

# Restore backup
pg_restore -h localhost -U postgres -d odoo_migration_test \
    odoo_prod_backup_YYYYMMDD.dump

# Run Odoo upgrade
python3 /opt/odoo19/odoo-bin \
    -d odoo_migration_test \
    -u all \
    --without-demo=all \
    --stop-after-init

Özel Modül Geçişi (3-5. Haftalar)

Bu aşama en fazla zaman alan aşamadır. Her özel modül şunları gerektirir:

1. Manifest sürümünü güncelle:

# Change from:
'version': '17.0.1.0.0',
# To:
'version': '19.0.1.0.0',

2. Python uyumluluğunu güncelleyin:

# Old pattern (deprecated):
@api.multi
def my_method(self):
    for record in self:
        pass

# New pattern:
def my_method(self):
    for record in self:
        pass

3. Görünüm sözdizimini güncelleyin:

<!-- Old (v16 and earlier): -->
<field name="state" attrs="{'invisible': [('active', '=', False)]}"/>

<!-- New (v17+): -->
<field name="state" invisible="not active"/>

4. OWL bileşenlerini güncelleyin (varsa ön uç widget'ları):

OWL 3.x, reaktivite değişikliklerini sunar. Modülleriniz özel JavaScript widget'ları kullanıyorsa:

// Old OWL 2.x:
class MyWidget extends Component {
    static template = 'MyModule.MyWidget';
    willStart() { ... }
}

// New OWL 3.x:
class MyWidget extends Component {
    static template = 'MyModule.MyWidget';
    setup() {
        onWillStart(async () => { ... });
    }
}

5. Her modülü bağımsız olarak test edin:

# Install and test each custom module
python3 odoo-bin -d test_db -i my_custom_module --stop-after-init
python3 odoo-bin -d test_db --test-enable -u my_custom_module

Veri Doğrulama ve Test Etme (5-6. Haftalar)

Finansal veri doğrulama:

-- Verify balance sheet balances (assets = liabilities + equity)
SELECT
    SUM(CASE WHEN account_type LIKE 'asset%' THEN balance ELSE 0 END) as assets,
    SUM(CASE WHEN account_type LIKE 'liability%' THEN balance ELSE 0 END) as liabilities,
    SUM(CASE WHEN account_type = 'equity' THEN balance ELSE 0 END) as equity
FROM account_account aa
JOIN account_move_line aml ON aml.account_id = aa.id
JOIN account_move am ON aml.move_id = am.id
WHERE am.state = 'posted';

Kayıt sayımı doğrulaması:

Kaynak ve taşınan veritabanı arasındaki kayıt sayılarını karşılaştırın:

# Run on both source and target to compare
models_to_check = [
    'res.partner', 'product.template', 'product.product',
    'sale.order', 'purchase.order', 'account.move',
    'stock.quant', 'mrp.production', 'hr.employee'
]

for model in models_to_check:
    count = env[model].search_count([])
    print(f"{model}: {count}")

Kullanıcı kabul testi kontrol listesi:

  • Tüm menülere ve gezinme öğelerine erişilebilir
  • Temel iş akışları: satış siparişi → teslimat → fatura → ödeme
  • Muhasebe: yevmiye kayıtları, banka mutabakatı, raporlar
  • Envanter: makbuzlar, teslimatlar, stok değerlemesi
  • Üretim: Malzeme Listesi, iş emirleri, kalite kontrolleri (varsa)
  • İK: çalışanlar, izin yönetimi, maaş bordrosu (varsa)
  • İş kullanıcıları tarafından doğrulanan özel modül işlevselliği
  • Raporlar doğru bir şekilde oluşturuluyor ve geçiş öncesi çıktıyla eşleşiyor
  • Aşamalandırmada test edilen harici entegrasyonlar (API, web kancaları)

Canlı Yayına Geçiş Planı (7-8. Hafta)

Kesim aralığı planlaması:

Minimum iş etkisine sahip bir geçiş aralığı seçin:

  • Hafta sonu (çoğu işletme için cumartesi akşamından pazar sabahına kadar)
  • Mali ayın sonu (açılış bakiyesi girişini kolaylaştırır)
  • Resmi tatilden önceki son iş gününden sonra (ekstra ara süre)

Kesim kontrol listesi:

T-48 hours:
[ ] Final communication to all users about downtime window
[ ] Freeze all non-critical transactions in old system
[ ] Verify migration server is ready
[ ] Complete last data validation run

T-0 (Cutover Start):
[ ] Put old system in maintenance mode (disable user access)
[ ] Create final backup of production database
[ ] Run final migration on this backup
[ ] Verify record counts and financial balances
[ ] Test all critical workflows
[ ] DNS/URL cutover to new system
[ ] Smoke test from user devices (desktop, mobile)

T+2 hours (Go-Live Verification):
[ ] All users can log in
[ ] Create test sale order, confirm, ship, invoice
[ ] Verify email sending works
[ ] Check integrations are receiving/sending data
[ ] Monitor error logs for first 30 minutes

Geri alma planı:

Geçiş sırasında kritik sorunlar bulunursa:

  1. DNS'yi eski sunucuya geri döndürün (< 5 dakika)
  2. Kullanıcılar için eski sistemi yeniden etkinleştirin
  3. Bulunan tüm sorunları belgeleyin
  4. Geçiş takibi penceresini planlayın

Sıkça Sorulan Sorular

Odoo 17'den doğrudan Odoo 19'a geçebilir miyim, yoksa 18'den mi geçmeliyim?

Odoo'nun resmi yükseltme hizmetini kullanarak genellikle doğrudan 17'den 19'a geçebilirsiniz. Odoo SA'nın geçiş komut dosyaları, çoklu sürüm atlamalarını yönetir. OpenUpgrade ile mevcut geçiş komut dosyalarına bağlı olarak 17→18→19 adımlarını izlemeniz gerekebilir. İhtiyacınız olan belirli sürümler için her zaman OpenUpgrade deposunu kontrol edin.

Tipik bir Odoo geçişi ne kadar sürer?

Zaman çizelgesi büyük ölçüde özelleştirme düzeyine bağlıdır. Minimum özelleştirmeye sahip standart bir Odoo örneği: 2-3 hafta. Orta derecede özelleştirilmiş (5-10 özel modül): 4-6 hafta. Karmaşık entegrasyonlarla büyük ölçüde özelleştirilmiş: 8-16 hafta. Geçişin kendisi (veritabanı yükseltmesi) saatler sürer; Zaman test etme, modül güncellemeleri ve doğrulama aşamasındadır.

Taşıma sırasında Studio özelleştirmelerine ne olur?

Studio özelleştirmeleri standart Odoo verileri (görünümler, alanlar, otomasyonlar) olarak depolanır ve standart veritabanı yükseltme işlemi yoluyla taşınır. Ancak Odoo 19'un temel form yapısını değiştirmesi durumunda bazı görünüm özelleştirmelerinin manuel olarak incelenmesi gerekebilir. Taşıma sonrasında her zaman tüm Studio özelleştirmelerini test edin.

Geçiş sonrasında açılış bakiyelerini yeniden girmem gerekir mi?

Hayır, veritabanını doğrudan taşırsanız. Tüm geçmiş yevmiye kayıtları ve bakiyeler veritabanına aktarılır. "Verileri içe aktararak yeni kurulum" yolunu seçerseniz geçiş tarihi itibarıyla açılış bakiyelerini girmeniz gerekir; bu da muhasebe ekibinizle dikkatli bir koordinasyon gerektirir.

Odoo Enterprise lisansım sürüm 19'a aktarılacak mı?

Evet. Odoo Enterprise abonelikleri sürümden bağımsızdır. Yıllık aboneliğiniz, çalıştırdığınız sürümü kapsar. Odoo 19 Enterprise kodunu almak için Odoo'nun Git deposu üzerinden kurumsal kimlik bilgilerinizle erişmiyorsanız Odoo iş ortağınızla iletişime geçin.


Sonraki Adımlar

Odoo geçişleri iş sürekliliğini doğrudan etkileyen yüksek riskli projelerdir. Sorunsuz bir geçiş ile acılı bir geçiş arasındaki fark; hazırlık, uzmanlık ve sıkı bir test metodolojisine bağlıdır.

ECOSIRE, düzinelerce Odoo örneğini 13, 14, 15, 16, 17 ve 18 sürümlerinden Odoo 19 Enterprise'a başarıyla taşıdı. Geçiş metodolojimiz tam değerlendirmeyi, özel modül güncellemelerini, paralel testleri ve geri alma prosedürlerini içeren belgelenmiş bir geçiş planını kapsar.

ECOSIRE'den Odoo Geçiş Değerlendirmesi isteyin →

Mevcut ortamınızı değerlendireceğiz, tüm geçiş risklerini belirleyeceğiz ve sabit kapsamlı bir geçiş planı sunacağız, böylece ilk geçiş komut dosyası çalıştırılmadan önce tam olarak ne bekleyeceğinizi bileceksiniz.

E

Yazan

ECOSIRE Research and Development Team

ECOSIRE'da kurumsal düzeyde dijital ürünler geliştiriyor. Odoo entegrasyonları, e-ticaret otomasyonu ve yapay zeka destekli iş çözümleri hakkında içgörüler paylaşıyor.

WhatsApp'ta Sohbet Et