Se rendre au contenu
Nexelans
  • Page d'accueil
  • Nos services
  • Odoo
  • Facturation électronique
  • Formations
  • Support
  • Blog Odoo
  • Contactez-nous
  • 0
  • Se connecter
  • Contactez-nous
Nexelans
  • 0
    • Page d'accueil
    • Nos services
    • Odoo
    • Facturation électronique
    • Formations
    • Support
    • Blog Odoo
    • Contactez-nous
  • Se connecter
  • Contactez-nous
  • T&A Odoo
  • Insérer des textes pré-écrits dans les lignes de devis et factures Odoo
  • Insérer des textes pré-écrits dans les lignes de devis et factures Odoo

    Un mode opératoire pratique pour les documents de vente Odoo
    5 mai 2026 par
    Nexelans, Emmanuel Chaumery
    | Aucun commentaire pour l'instant

    Sur EBP, on appelle ça les « messages type ». Sur d'autres ERP du marché, c'est une bibliothèque de phrases types ou de mentions standardisées qu'on insère dans une ligne de document de vente : conditions de garantie sur un devis travaux, rappel de délai de validité, mention « hors fournitures », clause de réserve de propriété déclinée selon le client. L'utilisateur sélectionne le message dans une liste déroulante et le texte tombe dans le devis.

    Dans Odoo, cette fonction n'existe pas en standard. On peut taper du texte libre dans une ligne de section ou une ligne de note, mais rien ne permet de piocher dans un référentiel partagé. Chaque commercial recopie ses formulations, les variantes se multiplient, et les mentions juridiques finissent par se déformer de devis en devis.

    On peut reconstituer cette fonction proprement avec Odoo Studio et une action automatisée. Sans développement, sans module tiers. Voici le mode opératoire que nous déployons chez nos clients qui viennent d'EBP ou de Sage et qui réclament cette ergonomie.

    Le besoin métier

    Avant de configurer quoi que ce soit, il faut être au clair sur le périmètre. Cette mécanique a du sens quand on a :

    • des mentions récurrentes que les commerciaux doivent insérer presque à l'identique dans leurs documents
    • un enjeu de cohérence juridique ou commerciale (clauses de garantie, mentions légales, conditions particulières)
    • une volonté de centraliser la maintenance de ces textes plutôt que de les diffuser par e-mail à chaque modification

    Ce qu'on va construire : une bibliothèque de textes accessible depuis le formulaire d'un devis ou d'une commande client, avec un sélecteur qui ajoute automatiquement le texte choisi en bas du document sous forme de ligne de note. L'utilisateur peut ensuite déplacer la ligne où il veut dans le document, ou la supprimer pour annuler l'insertion.

    Étape 1 — Créer un nouveau modèle « Textes pré-écrits »

    Tout se passe dans Odoo Studio. Si vous n'avez pas Studio activé sur votre instance, c'est un module Enterprise qu'il faut installer depuis les applications. Sur Odoo Online plan Personnalisé, sur Odoo.sh ou en on-premise Enterprise, il est disponible.

    Depuis n'importe quel écran, on clique sur l'icône Studio en haut à droite, puis sur « Nouveau modèle ». On choisit l'option qui crée un modèle minimaliste. On le nomme « Texte pré-écrit » par exemple, technicalement Odoo va le créer sous le nom x_texte_preecrit.

    Studio génère par défaut un champ Name qui sert d'identifiant. C'est ce qui s'affichera dans la liste déroulante au moment de la sélection. On garde ce champ et on le renomme en « Libellé » pour clarifier l'intention : ce n'est pas le contenu du texte, c'est juste son nom court.

    On ajoute ensuite un champ « Texte » de type Text (et non Char ni Html). Le type Text autorise les retours à la ligne et n'embarque pas de mise en forme, ce qui correspond à ce qu'on veut insérer dans une ligne de description : du texte brut.

    À ce stade, on a un modèle avec deux champs : un libellé court et un contenu textuel. On peut désormais le peupler.

    Création du modèle

    Étape 2 — Créer le menu et saisir les textes

    Sorti de Studio, le modèle est dans un menu accessible aux utilisateurs autorisés à le maintenir. La logique courante : créer un menu sous Configuration → Ventes, accessible aux utilisateurs avec les droits de paramétrage. Les commerciaux sélectionnent les textes mais ne les éditent pas — c'est le responsable commercial ou la direction qui maintient la liste.

    On crée alors quelques entrées. Quelques exemples typiques qu'on rencontre sur le terrain :

    • « Garantie 2 ans » : La présente prestation bénéficie d'une garantie de 2 ans pièces et main-d'œuvre, à compter de la date de mise en service.
    • « Acompte 30% » : Un acompte de 30% est demandé à la commande. Le solde est à régler à la livraison.
    • « Hors fournitures » : Devis hors fournitures. Les matériaux nécessaires à l'exécution de la prestation seront facturés en sus, sur la base des prix d'achat majorés de 15%.
    • « Validité devis 30 jours » : Le présent devis est valable 30 jours à compter de sa date d'émission.

    Quelques entrées suffisent au démarrage. La bibliothèque s'enrichit ensuite au fur et à mesure des besoins remontés par les commerciaux.

    Liste de textes pré écrits

    Étape 3 — Ajouter le sélecteur sur le devis

    On retourne dans Studio, on ouvre cette fois le formulaire d'un devis (sale.order). On ajoute un nouveau champ de type Many2one qui pointe vers le modèle x_texte_preecrit créé précédemment.

    Quelques détails qui comptent au moment de la configuration :

    • Position du champ : on le place dans l'en-tête du devis, à côté du commercial ou des conditions, pas dans le bloc des lignes. C'est un champ d'action, pas une donnée à conserver durablement sur le devis.
    • Pas de stockage utile : on peut laisser le champ stocké, mais sa valeur est éphémère. Une fois le texte inséré dans une ligne, le champ peut être vidé pour un usage suivant.
    • Libellé du champ : « Insérer un texte type » ou « Texte pré-écrit » — quelque chose qui dit clairement que c'est un déclencheur d'insertion, pas un attribut du devis.

    Cette même opération est à reproduire sur le formulaire de la facture client (account.move) si le besoin existe aussi côté facturation. Et éventuellement sur la commande de vente confirmée si vos commerciaux modifient encore les commandes après confirmation.

    Insertion dans le devis de textes préécrits Odoo

    Étape 4 — Créer l'action automatisée

    C'est la pièce centrale. On va dans Studio → Automatisations. 

    On crée une nouvelle action automatisée avec les paramètres suivants :

    • Nom : Insertion texte pré écrit
    • Modèle : Devis (sale.order)
    • Déclencheur : À la création et modification
    • Champs déclencheurs : le champ Many2one qu'on vient d'ajouter à l'étape 3
    • Avant la mise à jour du domaine : [] (vide)
    • Appliquer sur : [('x_studio_texte_preecrit', '!=', False)] — on ne déclenche que si une valeur est sélectionnée, pas quand on vide le champ

    Le nom du champ technique varie selon ce que vous avez saisi dans Studio. Studio préfixe par x_studio_ les champs créés via l'interface graphique.

    Ensuite, on choisit le type d'action : Exécuter du code Python. Et là, on saisit un petit bout de code qui :

    1. Récupère le texte associé au sélecteur
    2. Crée une nouvelle ligne de devis de type « note » avec ce texte en description
    3. Vide le sélecteur pour permettre une utilisation ultérieure

    Le code ressemble à ceci :

    python

    for record in records:
    if record.x_studio_textes_pre_ecrits:
    record.write({
    'order_line': [(0, 0, {
    'display_type': 'line_note',
    'name': record.x_studio_textes_pre_ecrits.x_studio_texte,
    'sequence': 9999,
    })],
    'x_studio_textes_pre_ecrits': False,
    })

    Quelques points à noter sur ce code :

    • display_type: 'line_note' indique à Odoo que la ligne est une note, pas une ligne de produit. Cette ligne n'a ni quantité, ni prix, ni produit. Elle ne perturbe ni le calcul du total, ni la facturation, ni la gestion des stocks.
    • sequence: 9999 place la ligne en bas du document. C'est volontaire : on insère toujours en dernière position, et l'utilisateur déplace ensuite la ligne par glisser-déposer s'il veut la repositionner. C'est plus prévisible qu'un calcul de séquence en fonction du contexte.
    • x_studio_textes_pre_ecrits : False réinitialise le sélecteur. L'utilisateur peut donc enchaîner plusieurs insertions sans avoir à vider le champ manuellement.

    Sur la facture client, le même principe s'applique avec quelques ajustements : on cible account.move, le champ des lignes est invoice_line_ids, et le display_type reste line_note.

    Test

    Étape 5 — Tester puis utiliser

    Sur un nouveau devis, on sélectionne un texte dans la liste déroulante. La ligne de note apparaît en bas du document, le sélecteur se vide. On peut sélectionner un autre texte, qui s'ajoute à son tour. On peut déplacer les lignes de note où on veut dans le devis par glisser-déposer.

    Pour retirer un texte inséré par erreur : on supprime simplement la ligne. Pas de mécanisme particulier à prévoir, le bouton de suppression standard d'Odoo fait le travail. C'est l'avantage de générer une ligne de note normale plutôt qu'un champ caché : la ligne est manipulable comme n'importe quelle autre ligne du document.

    Limites et points d'attention

    Cette mécanique a quelques limites qu'il faut connaître avant de la déployer :

    Pas de variables dans le texte. Le texte est inséré tel quel. Si vous voulez une mention qui inclut le nom du client, la date du jour ou le numéro de devis, il faut prévoir cette logique dans le code Python de l'action automatisée. C'est faisable mais ça complexifie le code. Pour la majorité des usages — clauses fixes, mentions juridiques, conditions standardisées — la version simple suffit.

    Pas de mise en forme riche. On insère du texte brut. Si vous voulez du gras, des puces ou des sauts de ligne stylisés sur la facture imprimée, il faut soit gérer ça via le rapport d'impression (le QWeb), soit utiliser un champ HTML — mais alors le texte ne s'affichera pas comme prévu dans la ligne de devis à l'écran.

    Le champ reste visible sur le formulaire. On peut le masquer via Studio en jouant sur les attributs de visibilité, mais le plus simple reste de l'assumer : c'est un outil, pas un attribut du devis.

    Migration de version. Les champs créés via Studio sont préfixés x_studio_ et survivent normalement aux migrations Odoo, à condition que le modèle cible (sale.order, account.move) n'ait pas vu sa structure profondément modifiée. Lors d'une migration de version majeure, il faut tester que l'action automatisée fonctionne toujours sur l'environnement de pré-production avant la bascule en production. Les changements sur le format des actions automatisées entre Odoo 17, 18 et 19 ont été documentés dans les notes de version successives.

    Quand préférer un module dédié

    La solution Studio + action automatisée tient parfaitement pour une dizaine ou une vingtaine de textes, utilisée par une équipe de quelques commerciaux. Au-delà, ou quand on ajoute des règles complexes (textes conditionnels selon le type de produit, selon le client, selon la langue), on bascule sur un développement dédié dans un module custom.

    Mais dans 80% des cas qu'on rencontre chez les clients qui viennent d'EBP ou de Sage, le besoin est exactement celui qu'on vient de couvrir : une bibliothèque centralisée de mentions standardisées, insérables en un clic dans un devis ou une facture. Studio fait le travail.

    Si vous reprenez un parc Odoo et que vos commerciaux râlent parce qu'ils retrouvent pas leurs « messages type » de l'ancien outil, vous avez maintenant la recette. Contactez nous si vous voulez qu'on déploie ça sur votre instance.


    Nexelans, Emmanuel Chaumery 5 mai 2026
    Partager cet article
    Étiquettes
    Archive
    Se connecter pour laisser un commentaire.

    Conçu
    pour les entreprises

    Nexelans et Sudokeys sont des intégrateurs experts et partenaires Gold d'Odoo. Nous nous engageons à offrir des solutions sur mesure pour optimiser les opérations des petites et moyennes entreprises.

    • Page d'accueil
    • Contactez-nous
    • Politique vie privée
    • Notre Studio IA
    • +33 4 87 86 01 15
    • contact@nexelans.fr
    Suivez-nous
    Copyright 2024 © Nexelans
    Généré par Odoo - Le #1 Open Source eCommerce

    Nous utilisons des cookies pour vous offrir une meilleure expérience utilisateur sur ce site. Politique en matière de cookies

    Que les essentiels Je suis d'accord