Documentation10 min de lecture

Les briques techniques du serveur Odoo : séquences, plages, JSON, Excel

Le module OCA `base_name_search_improved` (dépôt `server-tools`, version 18.0.1.1.1, licence AGPL-3) **améliore la recherche utilisée partout où l'on sélectionne un enregistrement lié** — champs client, produit, compte — avec un référentiel de recherches paramétrables sous **Paramètres ▸ Smart Searches**. Vingt autres modules fournissent séquences calculées, plages horaires, export JSON et boîte à outils Excel.

Composants et câblage d'un équipement informatique

La moitié d'un dépôt d'outils serveur n'est pas destinée aux utilisateurs : ce sont des briques dont dépendent les modules fonctionnels. Les ignorer rend incompréhensibles les dépendances d'une installation — et savoir ce qu'elles font explique pourquoi un module « ne fait rien ».

Vingt-et-un modules communautaires, documentés pour ce qu'ils sont, terminent le dépôt server-tools.

Résumé

Quatre modules traitent la recherche et les séquences : la recherche améliorée sur les champs de relation avec son référentiel, une séquence calculée par expression Python, un mécanisme de séquence alternative selon des critères, et l'exclusion mutuelle de deux actions planifiées.

Trois modules traitent les images : des images conditionnelles réutilisables remplaçant celle d'un enregistrement selon une condition ou une société, des galeries d'images rattachables à n'importe quel modèle, et deux modules fournissant une bibliothèque d'icônes à jour et sa compatibilité avec l'éditeur web.

Six modules sont des briques d'ORM : un champ de relation multiple personnalisable, une méthode de partition sur tous les modèles, la prise en charge des listes dans les champs creux, un champ vectoriel pour stocker des plongements, une méthode d'extraction de texte depuis du HTML, et la simulation des recalculs de champs depuis le code.

Huit modules enfin traitent les échanges et l'exploitation : l'export JSON avec ses analyseurs, une boîte à outils Excel avec ses gabarits, des paramètres datés, des plages horaires réutilisables et leur module de test, un fournisseur alternatif pour les services externes, une connexion alternative nécessaire derrière un mutualiseur de connexions, et un exécuteur de tests au format standard.

L'essentiel

  • La recherche améliorée sur les champs de relation.
  • Une séquence calculée par expression Python.
  • Deux actions planifiées rendues mutuellement exclusives.
  • Des galeries d'images sur n'importe quel modèle.
  • L'export JSON de n'importe quel modèle, avec ses analyseurs.
  • Une boîte à outils Excel avec gabarits, sans écrire de code.
  • Des plages horaires réutilisables par d'autres modules.
  • Un champ vectoriel pour stocker des plongements.

Ce que ces modules ajoutent à l'instance

FamilleModulesNombre
Recherche et séquencesbase_name_search_improved, sequence_python, base_sequence_option, base_cron_exclusion4
Imagesbase_conditional_image, base_multi_image, base_fontawesome, base_fontawesome_web_editor4
Briques d'ORMbase_m2m_custom_field, base_partition, base_sparse_field_list_support, field_vector, html_text, onchange_helper6
Échangesjsonifier, excel_import_export, iap_alternative_provider3
Tempsbase_time_parameter, base_time_window, test_base_time_window3
Exploitationbus_alt_connection, odoo_test_xmlrunner2

Les menus : Paramètres ▸ Smart Searches, Paramètres ▸ Technique ▸ Paramètres ▸ Conditional Images et Time Parameters, Multi images, Séquences & identifiants ▸ Manage Sequence Options, Excel Import/Export ▸ XLSX Templates, Interface utilisateur ▸ Export Fields et Custom Export Resolvers.

La recherche et les séquences

Taper trois lettres dans un champ « Client » et ne pas trouver un client qui existe est l'irritant le plus fréquent d'un ERP. La recherche standard cherche sur le début du nom ; l'utilisateur, lui, tape le mot dont il se souvient — qui est au milieu.

base_name_search_improved rend cette recherche plus tolérante, avec un référentiel de recherches paramétrables sous Paramètres ▸ Smart Searches.

  • sequence_python calcule la valeur d'une séquence par une expression Python, au lieu du gabarit numérique standard. C'est ce qui permet une numérotation intégrant un code client, un code site ou une année fiscale décalée.
  • base_sequence_option (LGPL-3) fait correspondre à un document une séquence différente de la séquence par défaut selon des critères. C'est la brique dont dépend le module de séquences optionnelles comptables.
  • base_cron_exclusion (LGPL-3) rend deux actions planifiées mutuellement exclusives : l'une ne démarre jamais pendant l'autre.

L'exclusion mutuelle d'actions planifiées évite une catégorie de problèmes difficiles à diagnostiquer : un calcul de réapprovisionnement qui tourne pendant une facturation récurrente produit des résultats variables, et le défaut ne se reproduit pas en recette.

Les images

  • base_conditional_image définit des images conditionnelles réutilisables, stockées une seule fois, remplaçant dynamiquement l'image d'un enregistrement selon une condition Python ou la société. Menu sous Conditional Images.
  • base_multi_image permet de rattacher plusieurs images — une galerie — à n'importe quel modèle, au lieu de l'image unique du standard. Menu sous Multi images.
  • base_fontawesome (LGPL-3, version 2.0.0) fournit une bibliothèque d'icônes à jour, en remplaçant celle livrée par le cœur d'Odoo.
  • base_fontawesome_web_editor (LGPL-3) assure la compatibilité de ces icônes avec l'éditeur web, notamment son sélecteur d'icônes.

Les images conditionnelles répondent à un besoin multi-société : un même produit, un logo différent selon l'entité qui le vend, sans dupliquer l'article.

Les galeries d'images sont la brique dont dépendent plusieurs modules de catalogue : un produit avec six photos, un équipement avec son constat d'état.

Les briques d'ORM

Six modules n'ont aucun effet visible et servent à d'autres modules :

ModuleCe qu'il fournit
base_m2m_custom_fieldUn type de champ de relation multiple personnalisable
base_partitionUne méthode de partition ajoutée à tous les modèles (LGPL-3)
base_sparse_field_list_supportLa prise en charge des listes dans les champs creux
field_vectorUn champ vectoriel pour stocker des plongements (LGPL-3)
html_textUne méthode d'extraction de texte depuis un champ HTML
onchange_helperLa simulation des recalculs de champs depuis le code (LGPL-3)

Le champ vectoriel mérite d'être signalé : il permet de stocker dans Odoo des plongements issus de modèles de langue, donc de bâtir une recherche sémantique sur des données d'ERP. C'est une brique, non une fonctionnalité — mais elle existe.

onchange_helper est la plus utilisée des six : elle permet à un import ou à un script de déclencher les mêmes recalculs qu'une saisie à l'écran. Sans elle, un import produit des enregistrements aux champs dépendants vides.

Les échanges et le temps

jsonifier (LGPL-3) ajoute une méthode de conversion en JSON à tous les modèles, pilotée par un analyseur décrivant les champs à extraire. Deux menus en configuration : les champs d'export et les résolveurs personnalisés.

C'est la brique dont dépendent les interfaces de programmation du dépôt de services web : elle décide de la forme des données envoyées.

excel_import_export est une boîte à outils Excel : construire des imports, des exports et des rapports au format tableur sans écrire de code de génération, à partir de gabarits. Menus sous Excel Import/Export ▸ XLSX Templates.

  • iap_alternative_provider permet de brancher un fournisseur de service alternatif au mécanisme d'achat intégré d'Odoo — un service de messages courts externe, par exemple, au lieu de celui de l'éditeur.
  • base_time_parameter (LGPL-3) définit des paramètres datés : une valeur avec ses versions dans le temps. Menu sous Time Parameters.
  • base_time_window fournit un modèle de jour de la semaine et un mécanisme réutilisable de plages horaires récurrentes, dont dépendent les créneaux de livraison et les plages d'appel.
  • test_base_time_window ne fournit rien de fonctionnel : il teste ce mécanisme.

Le fournisseur alternatif compte pour une PME française : le mécanisme d'achat intégré d'Odoo route les messages courts et les enrichissements de contact par les serveurs de l'éditeur. Pouvoir les router ailleurs est à la fois une question de coût et de localisation des données.

bus_alt_connection est nécessaire uniquement derrière un mutualiseur de connexions PostgreSQL : sans lui, les notifications en temps réel ne fonctionnent pas dans cette architecture. odoo_test_xmlrunner produit des rapports de tests au format standard, pour une chaîne d'intégration continue.

Limites connues

  • La moitié de ces modules n'a aucun effet visible : les installer sans module consommateur n'apporte rien.
  • base_name_search_improved élargit les recherches, donc leur coût : sur une base à cinquante mille contacts, à éprouver.
  • sequence_python exécute du code pour numéroter : une expression erronée casse la numérotation de documents légaux.
  • base_fontawesome remplace une feuille de style du cœur : un conflit avec un thème est possible.
  • field_vector ne fournit pas de moteur de recherche vectorielle : c'est un type de champ, l'indexation reste à construire.
  • excel_import_export repose sur des gabarits à maintenir : un changement de modèle de données casse le gabarit silencieusement.
  • bus_alt_connection ne sert que derrière un mutualiseur de connexions : inutile ailleurs.
  • test_base_time_window et odoo_test_xmlrunner ne doivent pas être installés en production.

Identité technique

Les vingt-et-un modules viennent du dépôt OCA server-tools, branche 18.0 — dont les 56 modules sont désormais tous documentés ici. Treize sont en AGPL-3, huit en LGPL-3. Les dépendances : base pour la plupart, web et web_editor pour les icônes et les recalculs, bus pour la connexion alternative, iap pour le fournisseur alternatif, mail pour la boîte à outils Excel, base_sparse_field pour les listes.

Les deux autres fiches du dépôt : exploiter une instance Odoo et tracer, restreindre et faire circuler les fichiers.

Questions fréquentes

Pourquoi la recherche d'un client dans un champ ne trouve-t-elle pas ce qui existe ?

Parce que la recherche standard porte sur le début du nom, alors que l'utilisateur tape le mot dont il se souvient — qui est au milieu. base_name_search_improved la rend plus tolérante, avec un référentiel sous Paramètres ▸ Smart Searches. À éprouver sur une grosse base : elle élargit les recherches, donc leur coût.

Peut-on calculer un numéro de document par une formule ?

Oui, avec sequence_python, qui calcule la valeur d'une séquence par une expression Python. C'est ce qui permet une numérotation intégrant un code client, un code site ou une année fiscale décalée. Une expression erronée casse la numérotation de documents légaux : à tester.

Peut-on empêcher deux actions planifiées de tourner en même temps ?

Oui : base_cron_exclusion les rend mutuellement exclusives. Cela évite une catégorie de problèmes indiagnosticables — un calcul de réapprovisionnement qui tourne pendant une facturation récurrente produit des résultats variables, et le défaut ne se reproduit pas en recette.

Peut-on produire des fichiers Excel depuis Odoo sans développer ?

Oui : excel_import_export est une boîte à outils permettant de construire imports, exports et rapports au format tableur à partir de gabarits, sous Paramètres ▸ Technique ▸ Excel Import/Export. Les gabarits sont à maintenir : un changement de modèle de données les casse silencieusement.

Peut-on utiliser un autre fournisseur que celui d'Odoo pour les SMS ?

Oui, avec iap_alternative_provider, qui permet de brancher un fournisseur alternatif au mécanisme d'achat intégré. C'est à la fois une question de coût et de localisation des données : par défaut, messages courts et enrichissements de contact passent par les serveurs de l'éditeur.

Se faire accompagner

Ces modules sont ceux dont une installation Odoo dépend sans que personne les ait demandés. Les connaître évite deux erreurs : installer une brique en attendant une fonctionnalité, et désinstaller une brique dont dépend un module en service.

Nous documentons donc la chaîne de dépendances d'une instance avant toute intervention, et nous signalons les modules de test qui n'ont rien à faire en production. Voir les prestations d'Atalios Consulting ou demander un rappel.

Pour aller plus loin

En résumé

La moitié d'un dépôt d'outils serveur n'est pas destinée aux utilisateurs : ce sont des briques dont dépendent les modules fonctionnels. Les connaître évite d'installer une brique en attendant une fonctionnalité, ou de retirer celle dont dépend un module en service. Parlons de votre instance.

Documentation OCAOdoo CommunityHébergement

Partager

Fiches connexes

Équipe au travail sur des ordinateurs portables autour d'une table
Le module OCA `account_invoice_en16931` (dépôt `fr-einvoicing`, version 18.0.1.0.0, licence AGPL-3) est le socle qui fabrique le fichier de facture électronique conforme à la norme européenne **EN 16931** : Factur-X (PDF/A-3 avec XML CII embarqué), XML UBL, XML CII ou PDF accompagné d'un UBL — et il ajoute des **contrôles bloquants à la validation** d'une facture client. Les quatre modules qui s'y greffent pour la France, et ce que le socle ne fait pas.
Lire la suite
Documentation OCA, Facturation électronique
Réunion d'approbation autour d'un document de travail
Relevé sur une instance Odoo 18 Community, le module OCA `base_tier_validation` (dépôt `server-ux`, version 18.0.3.5.1, licence AGPL-3) ajoute 1 modèle, 101 champs et 3 menus, mais ne s'active sur aucun document métier par lui-même : il lui faut un module d'implémentation. C'est le point qui surprend le plus — voici ce qu'il fait réellement, et comment le mettre en service.
Lire la suite
Documentation OCA, Odoo