Documentation11 min de lecture

Fiche produit : codification, cycle de vie et protection du coût

Dix-neuf modules OCA du dépôt `product-attribute` encadrent la fiche produit dans Odoo 18 Community : `product_cost_security` protège le champ **Coût** par deux groupes d'accès dédiés, et `product_usability` ajoute l'**application Produits**, que la version Community ne fournit pas. Les dix-sept autres, de la référence interne unique au cycle de vie calculé par dates.

Équipe au travail sur des ordinateurs portables autour d'une table

Le catalogue est le référentiel le plus partagé d'un ERP : les ventes, les achats, la production et la comptabilité y puisent. C'est aussi celui où les règles sont les plus implicites — une codification « qu'on connaît », un coût que « tout le monde peut voir ».

Dix-neuf modules communautaires rendent ces règles explicites : codification contrôlée, cycle de vie, droits sur le coût, approbation d'une nouvelle fiche.

Résumé

Quatre modules traitent la codification : référence interne rendue obligatoire, rendue unique dans toute la base, attribuée automatiquement par une séquence, et code-barres obligatoire avec pré-remplissage depuis la référence. S'y ajoutent les prix multiples nommés — prix standard, promo, grossiste — sur lesquels des règles de tarif peuvent s'appuyer.

Cinq traitent le cycle de vie : un champ d'état du produit (en développement, vendable, fin de vie, obsolète) avec ses modèles, la possibilité d'activer ou désactiver le produit selon son état, l'accès à cet état depuis Ventes et depuis Inventaire, et un statut calculé automatiquement à partir de trois dates saisies sur la fiche.

Le reste encadre : un profil produit qui applique un jeu de valeurs en un clic, la société préremplie à la création, une permission d'édition des produits sans laquelle un utilisateur ne peut rien modifier, la protection du coût par deux groupes — avec deux modules de colle pour le stock et la caisse —, l'approbation par paliers d'une nouvelle fiche, et l'application Produits qui manque à la version Community.

L'essentiel

  • La référence interne obligatoire et unique — Odoo ne fait qu'avertir, il ne bloque pas.
  • Une séquence automatique pour attribuer la référence, plutôt que de la laisser à l'inspiration.
  • Un état de cycle de vie du produit, visible depuis Ventes et depuis Inventaire.
  • Un statut calculé par dates : nouveau, discontinué, en fin de vie.
  • Le coût protégé par deux groupes d'accès dédiés, caisse comprise.
  • Une permission d'édition des produits distincte des autres droits.
  • L'approbation d'une nouvelle fiche par un ou plusieurs valideurs.
  • L'application Produits ajoutée — elle n'existe pas en Community.

Ce que ces modules ajoutent à l'instance

FamilleModulesNombre
Codificationproduct_code_mandatory, product_code_unique, product_sequence, product_barcode_required, product_multi_price5
Cycle de vieproduct_state, product_state_active, product_state_sale, product_state_stock_base, product_status5
Droits et contrôleproduct_readonly_security, product_cost_security, product_cost_security_stock_account, pos_product_cost_security, product_tier_validation5
Confort et créationproduct_usability, product_profile, product_company_default, product_restricted_type4

Les menus ajoutés : l'application Produits avec sa configuration, les profils de produit et les états de l'article côté Ventes comme côté Inventaire.

La codification : rendre explicite ce qui était implicite

Odoo avertit quand une référence interne est en double, il ne bloque pas. Sur une base alimentée par plusieurs personnes pendant deux ans, les doublons s'accumulent — et c'est au moment d'un inventaire ou d'un import que leur coût apparaît.

ModuleCe qu'il impose
product_code_mandatoryLa référence interne devient obligatoire
product_code_uniqueElle devient unique dans toute la base — contrainte bloquante
product_sequenceElle est attribuée automatiquement par une séquence
product_barcode_requiredLe code-barres devient obligatoire, avec pré-remplissage depuis la référence

Les trois premiers se combinent naturellement : une séquence qui attribue, une contrainte qui vérifie, une obligation qui empêche d'enregistrer sans. Le résultat est un catalogue dont chaque article est identifiable — ce qui conditionne tous les échanges de données, de l'EDI à l'import de tarifs.

product_multi_price ajoute une autre dimension : plusieurs prix nommés par produit — « prix standard », « prix promo », « prix grossiste » — sur lesquels des règles de liste de prix peuvent ensuite s'appuyer. C'est une alternative aux listes de prix multiples quand la différence est structurelle plutôt que contractuelle.

Les règles de tarif elles-mêmes sont traitées dans remises, prix et tarifs.

Le cycle de vie d'un article

Un catalogue vivant contient des produits en cours de référencement, des produits vendables, des produits en fin de vie qu'on écoule, et des obsolètes qu'on garde pour l'historique. Odoo ne connaît que « actif » et « archivé ».

  1. product_state introduit un état sur la fiche produit — en développement, normal, fin de vie, obsolète — avec un modèle d'états configurable.
  2. product_state_active permet de définir, sur l'état lui-même, s'il active ou désactive le produit. Passer un article en « obsolète » l'archive automatiquement.
  3. product_state_sale et product_state_stock_base rendent cet état accessible depuis Ventes et depuis Inventaire — deux petits modules sans logique propre, mais sans lesquels l'état reste invisible là où il sert.
  4. product_status calcule un statut à partir de trois dates saisies sur la fiche : nouveau jusqu'à, discontinué à partir de, fin de vie.

La différence entre l'état et le statut mérite d'être posée : l'état est une décision (« nous arrêtons ce produit »), le statut est un calcul (« nous sommes après la date d'arrêt »). Les deux coexistent, et le second évite d'avoir à passer manuellement cinq cents articles en fin de vie.

product_tier_validation ferme le dispositif par l'amont : une approbation par paliers sur les fiches produit, pour qu'un nouvel article soit validé avant d'être vendable. Dans une entreprise où le référencement engage la logistique et la comptabilité analytique, c'est un contrôle légitime.

Qui peut voir le coût, qui peut modifier une fiche

Le coût

product_cost_security protège le champ Coût par deux groupes d'accès distincts, réunis dans une catégorie de droits dédiée. Deux modules de colle étendent cette protection :

  • product_cost_security_stock_account pour la valorisation comptable du stock, où le coût réapparaîtrait sinon ;
  • pos_product_cost_security pour le point de vente, qui charge les données produit côté caisse.

Ces deux colles disent l'essentiel : protéger un champ ne suffit pas, il faut couvrir tous les endroits où il transite. Un coût masqué sur la fiche produit mais visible dans l'écran de caisse n'est pas protégé.

Le besoin est courant : les commerciaux voient les prix de vente, pas les coûts ; les vendeurs en magasin encore moins. Sans ce module, le coût d'achat est visible de tout utilisateur ayant accès au produit.

L'édition

product_readonly_security crée une permission Édition des produits sans laquelle un utilisateur ne peut ni créer, ni modifier, ni supprimer un produit — quels que soient ses autres droits.

C'est le pendant catalogue de ce que nous avons vu côté ventes : beaucoup d'utilisateurs doivent consulter le catalogue sans pouvoir le modifier, et Odoo lie trop souvent lecture et écriture.

La gestion fine des droits est traitée dans sécuriser les accès Odoo.

Créer un produit plus vite, et le retrouver

ModuleCe qu'il apporte
product_usabilityL'application Produits avec ses menus : produits, catégories, unités de mesure, étiquettes — absente de la version Community
product_profileUn profil produit : un jeu de valeurs préconfigurées appliqué en un clic à la fiche
product_company_defaultLa société préremplie à la création, au lieu d'un champ vide qui rend le produit partagé
product_restricted_typeUne restriction des types de produit sélectionnables (module peu documenté dans le relevé)

Le premier appartient à la famille des modules qui restaurent ce que l'éditeur n'a pas mis en Community : sans lui, gérer les catégories ou les unités de mesure suppose de passer par les menus d'une autre application.

Le deuxième change la façon de créer un catalogue : au lieu de régler quinze champs sur chaque nouvelle fiche — type, politique de facturation, route, catégorie, unité —, on applique un profil et tout est posé. Sur un catalogue de plusieurs milliers d'articles, c'est la différence entre une base homogène et une base où chaque article a été paramétré à sa façon.

Le troisième corrige un piège discret : en multi-société, une fiche produit dont la société est vide est partagée par toutes les sociétés. C'est parfois voulu — et le plus souvent, c'est un oubli dont on découvre l'effet lors d'une consolidation.

Limites connues

  • Rendre la référence unique sur une base existante échoue tant que les doublons n'ont pas été résolus : c'est un chantier de nettoyage préalable.
  • La séquence automatique et une codification parlante s'opposent : il faut choisir entre une référence signifiante et une référence générée.
  • La protection du coût exige ses modules de colle : sans eux, le coût réapparaît dans la valorisation ou dans la caisse.
  • Les états de produit n'ont de valeur qu'avec une règle : qui décide du passage en fin de vie, et quand.
  • product_restricted_type est peu documenté dans le relevé : comportement à vérifier sur le dépôt.
  • L'approbation d'une fiche produit ralentit le référencement : à calibrer selon le rythme réel de création d'articles.

Identité technique

Les dix-neuf modules viennent du dépôt OCA product-attribute, branche 18.0 — 105 modules au total —, en licence AGPL-3 sauf product_barcode_required (LGPL-3). Deux dépendent d'applications tierces (point de vente, valorisation de stock) et l'approbation s'appuie sur le socle générique du dépôt server-ux.

Les familles voisines du même dépôt seront traitées dans les fiches suivantes : conditionnements et unités, attributs et variantes, listes de prix, classification ABC.

Questions fréquentes

Odoo empêche-t-il les références produit en double ?

Non : il avertit sans bloquer. product_code_unique ajoute une contrainte bloquante sur toute la base, product_code_mandatory rend la référence obligatoire, et product_sequence l'attribue automatiquement. Sur une base existante, la contrainte d'unicité échoue tant que les doublons ne sont pas résolus : prévoyez le nettoyage.

Comment gérer la fin de vie d'un produit ?

product_state ajoute un état — en développement, normal, fin de vie, obsolète — et product_state_active permet de décider, sur l'état lui-même, s'il archive le produit. En complément, product_status calcule un statut à partir de trois dates, ce qui évite de passer manuellement des centaines d'articles en fin de vie.

Peut-on masquer le coût d'achat aux commerciaux ?

Oui, avec product_cost_security, qui protège le champ Coût par deux groupes d'accès dédiés. Installez aussi les deux modules de colle — valorisation de stock et point de vente — sans lesquels le coût réapparaît dans ces écrans. Protéger un champ suppose de couvrir tous les endroits où il transite.

Pourquoi la version Community n'a-t-elle pas de menu Produits ?

Parce que le module de base ne fournit pas d'application dédiée : on accède aux produits depuis Ventes, Achats ou Inventaire. product_usability ajoute une application Produits avec ses menus — produits, catégories, unités de mesure, étiquettes. C'est la même famille de modules que account_usability côté comptabilité.

Comment créer des fiches produit homogènes ?

Avec product_profile : un profil porte un jeu de valeurs préconfigurées — type, politique de facturation, route, catégorie, unité — appliqué en un clic à la fiche. Sur un catalogue de plusieurs milliers d'articles, c'est la différence entre une base homogène et une base paramétrée article par article.

Se faire accompagner

Le catalogue est le référentiel que toutes les équipes utilisent et que personne ne possède. Les règles y sont implicites jusqu'au jour où un import échoue sur des doublons, où un commercial cite un coût d'achat à un client, ou où un article archivé réapparaît dans une commande.

Nous commençons donc par trois décisions : qui crée un produit, selon quelle codification, et qui voit le coût. Le paramétrage en découle, et la reprise des doublons se chiffre avant d'activer la contrainte d'unicité. Voir les prestations d'Atalios Consulting, notre méthode ou demander un rappel.

Pour aller plus loin

En résumé

La référence enfin obligatoire et unique, un cycle de vie explicite plutôt qu'un archivage binaire, le coût protégé partout où il transite — caisse comprise —, et l'application Produits que la version Community n'a pas. Dix-neuf modules pour rendre explicites les règles du référentiel le plus partagé. Parlons de votre catalogue.

Documentation OCAProduitsRéférentiel

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