Un négociant ne vend pas des unités : il vend des cartons, des palettes, des kilos, des lots. Et son client ne connaît pas vos références, il connaît les siennes.
Quatorze modules communautaires font entrer ce vocabulaire dans la commande — et quelques-uns vont jusqu'à l'atelier de préparation.
Résumé
sale_packaging_default inverse la logique d'Odoo : on choisit d'abord l'emballage, puis le nombre d'emballages, au lieu de saisir des unités et de laisser Odoo deviner. sale_order_secondary_unit permet de vendre dans une unité secondaire — facturer au mètre un produit géré en pièces, au kilo un produit stocké en cartons — et s'installe automatiquement dès que ses deux dépendances sont là.
Trois modules traitent les lots : choisir sur la ligne le lot qui sera livré, générer automatiquement un numéro de lot à la confirmation pour les produits configurés ainsi, et appliquer le prix spécifique du lot sélectionné. C'est la chaîne complète d'une vente tracée à l'unité de production.
sale_elaboration ajoute aux lignes des élaborations — opérations légères de préparation à exécuter à la livraison, l'exemple du code source étant « écailler un poisson » — avec ses profils, ses rapports et son menu de configuration. Autour, deux modules de colle y ajoutent la marque et les élaborations par défaut pour un couple client/produit. Enfin product_customerinfo_sale affiche le code produit du client sur les lignes, et trois petits modules complètent : nomenclature choisie sur la ligne, commande de service marquée terminée, montant du transport isolé.
L'essentiel
- Choisir l'emballage d'abord, la quantité ensuite — l'inverse du comportement standard.
- Une unité secondaire de vente, distincte de l'unité de stock, installée automatiquement.
- Le lot livré choisi sur la ligne, avec son prix propre s'il en a un.
- La génération automatique d'un numéro de lot à la confirmation, pour les produits concernés.
- Les élaborations : des opérations de préparation portées par la ligne, avec profils et rapports.
- Des élaborations par défaut pour un couple client/produit — le client qui veut toujours son poisson vidé.
- Le code produit du client affiché sur la ligne : il commande avec sa référence, pas la vôtre.
- La nomenclature choisie sur la ligne quand un produit en a plusieurs.
Ce que ces modules ajoutent à l'instance
| Module | Rôle | Version | Dépend de |
|---|---|---|---|
sale_packaging_default | Emballage choisi avant la quantité | 18.0.1.1.0 | sale |
product_set_sell_only_by_packaging | Colle : set de produits et vente par colisage | 18.0.1.0.0 | sell_only_by_packaging |
sale_order_secondary_unit | Unité secondaire de vente | 18.0.1.1.0 | product_secondary_unit |
sale_order_lot_selection | Lot choisi sur la ligne | 18.0.1.4.2 | sale_stock, stock_restrict_lot |
sale_order_lot_generator | Lot généré à la confirmation | 18.0.1.0.0 | sale_order_lot_selection |
sale_order_lot_selection_price | Prix propre au lot | 18.0.2.0.0 | stock_lot_list_price |
sale_elaboration | Élaborations sur les lignes | 18.0.1.3.2 | sale_stock |
sale_elaboration_brand | La marque dans le rapport d'élaboration | 18.0.1.0.0 | product_brand |
product_customerinfo_sale | Code et nom produit propres au client | 18.0.1.0.1 | product_customerinfo |
product_customerinfo_elaboration | Élaborations par défaut client/produit | 18.0.1.0.0 | sale_elaboration |
sale_mrp_bom | Nomenclature choisie sur la ligne | 18.0.1.0.0 | mrp, sale_stock |
sale_order_finish_service | Commande de service marquée terminée | 18.0.1.0.0 | sale_service |
sale_shipping_info_helper | Montant du transport isolé | 18.0.1.0.0 | delivery |
sale_order_transmit_method | Canal d'envoi propagé aux factures | 18.0.1.0.0 | account_invoice_transmit_method |
Les menus ajoutés se concentrent sur deux familles : les élaborations (configuration, profils et deux rapports, côté Ventes et côté Inventaire), les unités secondaires (Ventes ▸ Configuration ▸ Unités de mesure) et les informations produit par client (Ventes ▸ Configuration ▸ Prices for customers).
Vendre au carton, au kilo, à la palette
L'emballage d'abord
sale_packaging_defaultinverse la logique d'Odoo : au lieu de saisir une quantité d'unités et de laisser le logiciel suggérer un emballage, le vendeur choisit l'emballage puis le nombre d'emballages. La quantité en unités se déduit.
C'est la façon dont la commande arrive réellement : « trois palettes », « dix cartons ». Le reste est un calcul, et c'est au logiciel de le faire — pas au vendeur, dont les erreurs de conversion coûtent des livraisons entières.
Un module de colle, product_set_sell_only_by_packaging, garantit la cohérence avec les sets de produits quand un article ne peut être vendu que par colisage.
L'unité secondaire
sale_order_secondary_unit permet de vendre dans une seconde unité de mesure : facturer au mètre linéaire un produit géré en pièces, au kilogramme un produit stocké en cartons. Le module s'installe automatiquement dès que ses dépendances sont présentes.
| Situation | Unité de stock | Unité de vente |
|---|---|---|
| Profilés, tissus, câbles | Pièce ou rouleau | Mètre |
| Produits frais en caisse | Caisse | Kilogramme |
| Visserie | Unité | Boîte ou sachet |
Sans ce module, on crée des produits distincts par unité — et le stock devient faux, puisque les deux références puisent dans le même réel.
Le pendant logistique de ce module est traité dans ventes et stock : un module de colle assure que l'unité secondaire suive jusqu'aux mouvements.
Les lots : choisir, générer, tarifer
Pour un produit tracé — agroalimentaire, cosmétique, pièce critique — le lot n'est pas un détail logistique : c'est parfois l'objet de la vente.
sale_order_lot_selectionpermet de choisir le lot ou le numéro de série directement sur la ligne de commande. Le lot promis au client est celui qui sera livré — la restriction est appliquée jusqu'au transfert.sale_order_lot_generatorgénère automatiquement un numéro de lot ou de série à la confirmation, pour les produits configurés ainsi. Utile quand le lot n'existe pas encore au moment de la vente — une production à la commande.sale_order_lot_selection_pricefait calculer le prix de vente en tenant compte du prix spécifique du lot sélectionné, quand celui-ci en porte un.
Le troisième module décrit une pratique réelle et mal supportée par les ERP : tarifer au lot. Un millésime, une qualité de récolte, une série limitée n'ont pas le prix du produit générique. Sans lui, on crée une référence produit par lot — et le catalogue explose.
L'ensemble suppose que la traçabilité par lot soit activée sur les produits concernés, et s'appuie sur un module de restriction de lot côté stock.
Les élaborations : la préparation décrite sur la ligne
C'est le module le plus spécifique du lot, et le plus parlant pour qui connaît le négoce alimentaire.
sale_elaboration permet d'associer à une ligne de commande une ou plusieurs élaborations : des opérations de préparation ou de transformation légère à effectuer sur le produit au moment de la livraison. L'exemple donné par le code source est « écailler un poisson ».
| Écran | Ce qu'on y trouve |
|---|---|
| Ventes ▸ Configuration ▸ Elaborations | Les élaborations disponibles et leurs profils |
| Ventes ▸ Analyse ▸ Elaborations Report | Le rapport côté commercial |
| Inventaire ▸ Analyse ▸ Elaborations Report | Le même, côté préparation — c'est celui qui sert à l'atelier |
Deux compléments en font un outil quotidien :
product_customerinfo_elaborationdéfinit des élaborations par défaut pour un couple client/produit : le client qui veut toujours son poisson vidé n'a plus à le demander, et personne n'a plus à s'en souvenir.sale_elaboration_brandajoute la marque du produit dans le rapport des mouvements de stock issu des élaborations, pour identifier la marque en même temps que les consignes de préparation.
Au-delà du poisson, la mécanique vaut pour toute préparation à la commande : découpe, mise sous film, étiquetage client, assemblage léger. C'est une instruction de préparation portée par la vente et lue par l'entrepôt, ce qui est exactement ce qui manque dans les installations standard.
Parler le langage du client, et quatre détails utiles
Le code produit du client
product_customerinfo_sale relie les informations produit propres à un client — nom et code spécifiques — aux commandes de vente : le code du client apparaît sur les lignes, et un menu centralise ces informations.
Le besoin est universel en sous-traitance et en distribution : le client commande avec sa référence. Devoir traduire manuellement sa commande dans votre codification est une source d'erreurs quotidienne, et un motif de litige quand la traduction se trompe.
Trois modules de finition
| Module | Ce qu'il résout |
|---|---|
sale_mrp_bom | Choisir quelle nomenclature fabrique la ligne, quand un produit en a plusieurs — gammes ou variantes de fabrication |
sale_order_finish_service | Marquer terminée une commande de service, qu'Odoo laisserait indéfiniment à l'état « commande » |
sale_shipping_info_helper | Isoler le montant du transport du montant des articles, pour les rapports et les traitements |
Le deuxième comble un vrai manque : sur une activité de service, rien ne distingue une commande achevée d'une commande en cours. La liste de travail se remplit sans jamais se vider.
Dernier module du lot, sale_order_transmit_method porte le canal d'envoi — courriel, courrier, portail — sur la commande, repris du client et propagé aux factures générées. La cohérence du canal entre le devis et la facture paraît évidente ; elle ne l'est pas dans Odoo standard.
Limites connues
- L'unité secondaire s'installe automatiquement : son apparition peut surprendre si l'on n'a installé que ses dépendances.
- Le choix du lot à la vente contraint la logistique : l'entrepôt doit livrer ce lot précis, ce qui suppose un stock organisé et une réservation fiable.
- La tarification par lot suppose un prix renseigné sur le lot : sans donnée, le module n'a rien à appliquer.
- Les élaborations sont un vocabulaire métier : installées sans profils ni règles par client, elles restent un champ libre de plus.
- Le code produit client doit être maintenu : un catalogue client non tenu produit des traductions fausses, pires que l'absence de traduction.
sale_order_finish_serviceajoute un indicateur, pas un état : la commande reste à l'état « commande » pour Odoo.
Identité technique
Les quatorze modules viennent du dépôt OCA sale-workflow, branche 18.0, en licence AGPL-3 sauf sale_packaging_default (LGPL-3). Six dépendent de modules d'autres dépôts : unités secondaires et informations client sur produit (product-attribute), restriction et prix de lot (stock-logistics-workflow), marque produit (brand), mode de transmission (account-invoicing).
Les familles voisines : recommandation de produits, ventes et stock, remises et tarifs.
Questions fréquentes
Peut-on vendre en cartons plutôt qu'en unités ?
Oui : sale_packaging_default inverse la logique standard — on choisit l'emballage, puis le nombre d'emballages, et la quantité en unités se déduit. C'est la façon dont la commande arrive réellement, et cela supprime les erreurs de conversion qui coûtent des livraisons entières.
Comment facturer au kilo un produit stocké en cartons ?
Avec sale_order_secondary_unit, qui ajoute une unité secondaire de vente distincte de l'unité de stock. L'alternative — créer deux références produit — rend le stock faux, puisque les deux puisent dans le même réel. Le module s'installe automatiquement dès que ses dépendances sont présentes.
Peut-on promettre un lot précis à un client ?
Oui : sale_order_lot_selection permet de choisir le lot ou le numéro de série sur la ligne de commande, et la restriction est appliquée jusqu'au transfert. Cela contraint l'entrepôt à livrer ce lot, donc suppose un stock organisé et une réservation fiable.
Peut-on vendre deux lots du même produit à des prix différents ?
C'est l'objet de sale_order_lot_selection_price : le prix de vente tient compte du prix spécifique du lot sélectionné, s'il en porte un. Millésimes, qualités de récolte, séries limitées — sans ce module, il faut créer une référence produit par lot et le catalogue explose.
Qu'est-ce qu'une élaboration ?
Une opération de préparation ou de transformation légère à effectuer sur le produit au moment de la livraison — l'exemple du code source est « écailler un poisson ». sale_elaboration l'attache à la ligne de commande, avec ses profils, son rapport côté préparation, et la possibilité de définir des élaborations par défaut pour un couple client/produit.
Se faire accompagner
Ces quatorze modules ont un point commun : ils font parler l'ERP dans la langue du métier. Une entreprise qui vend des palettes et parle en unités dans son logiciel passe son temps à convertir — et chaque conversion est une erreur potentielle que personne ne détecte avant la livraison.
Nous commençons donc par relever le vocabulaire réel : comment la commande arrive, dans quelle unité, avec quelle référence, et ce que l'atelier doit faire avant d'expédier. Le paramétrage suit ce relevé. Voir les prestations d'Atalios Consulting ou demander un rappel.
Pour aller plus loin
- Recommandation de produits et assortiments
- Ventes et stock : livraisons, blocages et retours
- Grossiste, négoce et distribution avec Odoo
En résumé
Vendre au carton, facturer au kilo, promettre un lot et le tarifer, décrire la préparation sur la ligne, et afficher la référence du client plutôt que la vôtre. Quatorze modules qui remplacent les conversions mentales — celles dont l'erreur ne se voit qu'à la livraison. Parlons du vocabulaire de votre métier.