Odoo 20.0 FINAL è già disponibile e presente nell'App Store. Se migri un'installazione che usa solo moduli della propria Odoo, il rischio è basso. Se ha connettori personalizzati, propri o di terze parti, alcune modifiche di Odoo 20 rompono interi moduli: e almeno una, fino al 31 ottobre, non segnalava alcun errore. Questo è l'ordine in cui li controlliamo noi, con ciò che si può automatizzare e ciò che va guardato a mano.
1. Fai l'inventario dei moduli non ufficiali presenti nel tuo Odoo
Da Impostazioni > App, filtra per «non nel catalogo di Odoo» oppure controlla ir.module.module con author != 'Odoo S.A.'. Ognuno di questi moduli va verificato prima di migrare; quelli della propria Odoo li porta Odoo.
2. Cerca le dipendenze da moduli scomparsi
grep -rn "base_vat\|base_iban\|stock_picking_batch\|website_sale_wishlist\|website_sale_comparison" */__manifest__.py. Se compaiono in depends, il modulo risulta installable=False in Odoo 20: non è un avviso, non si installa. La validazione di NIF/IBAN è passata al nucleo; per il resto non esiste un sostituto diretto.
3. Cerca odoo.osv nel codice Python
grep -rn 'from odoo.osv import' .. Il pacchetto odoo.osv non esiste più in Odoo 20: genera ModuleNotFoundError e il modulo non si carica. Sostituisci ogni expression.AND/OR/TRUE_DOMAIN/FALSE_DOMAIN con il suo equivalente in odoo.fields.Domain.
4. Converti i permessi al nuovo formato
ir.model.access e ir.rule si fondono in un unico modello, ir.access. Odoo fornisce uno script apposito: odoo-bin upgrade_code --script 19.4-00-ir-access --addons-path <carpeta>, che converte i CSV, aggiorna il manifest ed elimina il vecchio file. Attenzione ai file ._* di macOS: fanno fallire lo script con UnicodeDecodeError; eliminali prima con find . -name '._*' -delete.
5. Controlla come si scrivono e si leggono gli allegati
Aggiornamento del 6 novembre 2026: fino al 31 ottobre era la modifica più pericolosa perché non avvisava: ir.attachment.create({'datas': ...}) creava l'allegato con dimensione 0 e senza alcun errore. Dal commit c06a07264bdb di Odoo genera AssertionError. Sostituisci 'datas': base64.b64encode(x) con 'raw': x: funziona allo stesso modo in Odoo 17, 18, 19 e 20, quindi si può correggere oggi senza aspettare il porting. Leggere con .datas genera AttributeError: in Odoo 20 si legge con .raw oppure, dopo aver letto il campo, con .content/.to_base64() sul valore restituito.
6. Porta la versione del manifest a 20.0
Se il version del __manifest__.py non inizia con 20.0, il log riporta The module X has an incompatible version, setting installable=False e il modulo risulta uninstallable. Non è un avviso ignorabile: senza questo passaggio, tutto il resto non conta.
7. Installa su un vero Odoo 20, non limitarti a compilare
Che il codice compili o che una scansione statica non segnali nulla non dimostra che il modulo si installi, e ancor meno che funzioni. L'unica prova che vale è installare davvero su un Odoo 20.0 FINAL con Enterprise ed eseguire tutta la batteria di test del modulo, non solo l'avvio.
8. Non migrare tutto il catalogo di connettori in un colpo solo
Ordinali in base a ciò che muove più denaro o a quello più rischioso da lasciare rotto, non al più facile da portare. Un connettore di fatturazione o di firma elettronica che fallisce in silenzio (come quello degli allegati fino al 31 ottobre) costa molto di più se lo scopri tardi rispetto a uno del catalogo.
Il dettaglio di ogni rottura, con il file e la riga in cui l'abbiamo verificata: Odoo 20 è arrivato: cosa cambia per le tue integrazioni e i tuoi connettori.
Domande frequenti
Posso migrare a Odoo 20 se ho connettori personalizzati?
Sì, ma ogni connettore personalizzato o di terze parti va controllato prima: dipendenze da moduli scomparsi (base_vat, base_iban...), uso di odoo.osv, il formato dei permessi e come scrive e legge gli allegati. Installare senza errori non basta; serve superare l'intera batteria di test su un vero Odoo 20.
Qual è la prima cosa che si può correggere senza aspettare la migrazione?
Cambiare il modo in cui si scrivono gli allegati: 'datas': base64.b64encode(x) con 'raw': x. Funziona allo stesso modo in Odoo 17, 18, 19 e 20, quindi si può fare oggi nel codice attuale senza aspettare il ramo 20.
Link utili all'interno di FlexigoTech
Cosa facciamo in merito
Vuoi che controlliamo i tuoi connettori prima di migrare?
Ti diciamo, sul codice reale di Odoo 20, quali dei tuoi moduli personalizzati si rompono e per quale punto di questa lista. Scrivi a comercial@flexigobe.com o chiama il +34 616 809 504.

