Dès qu'une entreprise vend du stock, la commande cesse d'être un document commercial : elle réserve de la marchandise, déclenche une préparation, engage une date. Odoo lie les deux automatiquement, et c'est souvent trop automatique.
Dix-huit modules communautaires reprennent la main sur ce lien : ce qui part, quand, depuis quel entrepôt, vers quelle adresse — et ce qui revient.
Résumé
sale_manual_delivery est le plus structurant : activé sur une commande ou par défaut sur une équipe commerciale, il fait que la confirmation ne crée plus ni réservation ni bon de livraison. Un écran dédié, Inventaire ▸ Opérations ▸ Lignes de commande à livrer, permet alors de décider quelles lignes partent. sale_stock_picking_blocking retient au contraire les livraisons d'une commande confirmée avec un motif paramétrable — contrôle crédit, litige, attente de paiement — et un module voisin empêche la validation d'un bon depuis la commande.
Trois modules enrichissent la bulle de disponibilité affichée sur la ligne : stock de tous les entrepôts et non du seul entrepôt de la ligne, prochaine date de péremption des lots qui serviront, et alerte jaune quand la quantité vendue dépasse le stock réellement libre aujourd'hui. sale_block_no_stock va plus loin : il bloque la confirmation et ouvre un assistant qui propose des corrections.
Le reste couvre l'adresse de livraison par ligne (avec éclatement des livraisons), l'entrepôt par défaut du client, la référence client propagée jusqu'aux colis, les notes de livraison — interne et client — pré-remplies depuis la fiche client, la demande de retour créée depuis une commande livrée, et l'interdiction d'annuler une commande dont une livraison est déjà validée.
L'essentiel
- Confirmer sans livrer : la création des livraisons devient une décision, prise dans un écran dédié.
- Bloquer les livraisons avec motif, sans annuler la commande ni toucher aux lignes.
- Une adresse de livraison par ligne, avec éclatement automatique des bons de livraison.
- Un entrepôt par défaut sur la fiche client, proposé à la place de l'entrepôt global de la société.
- La référence client propagée jusqu'aux mouvements, aux transferts et aux colis.
- Trois enrichissements de la bulle de disponibilité : multi-entrepôts, péremption, alerte de survente.
- La demande de retour créée depuis la commande livrée, restreinte aux commandes concernées.
- L'annulation interdite quand une livraison est déjà validée — la cohérence commercial/logistique, enfin tenue.
Ce que ces modules ajoutent à l'instance
| Module | Rôle | Version |
|---|---|---|
sale_manual_delivery | Livraisons créées à la demande, pas à la confirmation | 18.0.1.1.0 |
sale_stock_picking_blocking | Blocage motivé de la création des livraisons | 18.0.1.0.2 |
sale_stock_picking_validation_blocking | Empêcher la validation d'un bon depuis la commande | 18.0.1.0.0 |
sale_stock_cancel_restriction | Interdire l'annulation si une livraison est faite | 18.0.1.0.0 |
sale_block_no_stock | Blocage de confirmation + assistant de correction | 18.0.1.0.0 |
sale_stock_delivery_address | Adresse de livraison par ligne | 18.0.1.1.1 |
sale_stock_partner_warehouse | Entrepôt par défaut du client | 18.0.1.1.0 |
sale_stock_line_customer_ref | Référence client jusqu'aux colis | 18.0.1.0.0 |
sale_stock_picking_note | Note interne et commentaire client de livraison | 18.0.1.1.0 |
sale_stock_return_request | Demande de retour depuis la commande | 18.0.1.0.2 |
sale_stock_last_date | Date de la dernière livraison, par ligne | 18.0.1.0.0 |
sale_stock_qty_at_date_widget_multi_warehouse | Disponibilité tous entrepôts | 18.0.1.0.0 |
sale_stock_expiry_date_on_qty_at_date_widget | Date de péremption dans la bulle | 18.0.1.0.0 |
sale_stock_reservation_issue_on_qty_at_date_widget | Alerte jaune de survente | 18.0.1.0.2 |
sale_stock_delivery_state | Colle : état de livraison avec sale_stock | 18.0.1.0.0 |
sale_stock_line_sequence | Colle : numéro de ligne jusqu'au transfert | 18.0.1.0.0 |
sale_stock_secondary_unit | Colle : unité secondaire jusqu'aux mouvements | 18.0.1.0.2 |
sale_restricted_qty | Restriction de quantité (peu documenté) | 18.0.2.0.1 |
Trois menus seulement : les lignes à livrer (Inventaire ▸ Opérations), les motifs de blocage et les demandes de retour (Ventes). Trois modules sont des colles : ils n'ajoutent rien de visible et font fonctionner ensemble deux mécaniques qui s'ignoraient.
Reprendre la main sur le déclenchement des livraisons
Par défaut, confirmer une commande crée immédiatement la réservation et le bon de livraison. Pour un négoce qui confirme des commandes à trois mois, c'est du stock réservé pour rien et des bons qui encombrent l'entrepôt.
La livraison manuelle
- Activer le mode sur une commande, ou par défaut sur une équipe commerciale.
- La confirmation ne génère plus ni réservation de stock ni bon de livraison.
- Ouvrir Inventaire ▸ Opérations ▸ Lignes de commande à livrer : toutes les lignes en attente y figurent.
- Sélectionner ce qui doit partir et créer les livraisons correspondantes.
Le déclencheur de la livraison passe du commercial au logisticien. C'est un changement d'organisation autant que de paramétrage : il faut que quelqu'un ouvre cet écran chaque jour, sinon rien ne part.
Les blocages
| Module | Ce qu'il empêche | Cas d'usage |
|---|---|---|
sale_stock_picking_blocking | La création des livraisons, avec motif paramétrable | Contrôle crédit, litige, attente de paiement |
sale_stock_picking_validation_blocking | La validation d'un bon depuis la commande | Dernier contrôle avant que la marchandise parte |
sale_stock_cancel_restriction | L'annulation d'une commande déjà livrée | Cohérence entre état commercial et état logistique |
Le troisième corrige un défaut qui coûte cher en inventaire : une commande annulée alors que la marchandise est partie laisse un stock faux et une facture introuvable. Odoo l'autorise ; ce module ne l'autorise plus.
Savoir ce qu'on peut promettre
La bulle de disponibilité affichée à côté de la quantité sur une ligne est l'outil le plus regardé d'un vendeur. Trois modules la rendent fiable.
- Multi-entrepôts : la bulle tient compte du stock de tous les entrepôts de la société, et non du seul entrepôt de la ligne. Le vendeur voit qu'il reste de la marchandise ailleurs, au lieu de refuser une commande.
- Péremption : la bulle affiche la prochaine date de péremption des lots qui serviraient à livrer la ligne. Indispensable en agroalimentaire, en cosmétique et en pharmacie — un client qui reçoit un lot à trois jours de la date limite le renvoie.
- Alerte de survente : l'icône passe en jaune quand la quantité vendue sur un devis ou une commande en brouillon dépasse la quantité réellement libre aujourd'hui. L'avertissement arrive avant la promesse, pas après.
sale_block_no_stock va au bout de la logique : il bloque la confirmation d'une commande dont une ligne dépasse un indicateur de stock choisi en configuration — et, plutôt qu'un refus sec, ouvre un assistant qui propose des corrections.
Un blocage qui propose une solution est accepté par les équipes ; un blocage sec est contourné. C'est la même philosophie que les règles d'exception, qui laissent la porte d'une levée explicite.
Dernier module du groupe, sale_stock_last_date affiche sur chaque ligne la date de la dernière livraison réellement effectuée — la réponse immédiate à « vous nous avez livré quand, déjà ? ».
Livrer où il faut, avec les bonnes informations
L'adresse, par ligne
sale_stock_delivery_address permet une adresse de livraison différente par ligne, avec éclatement automatique des livraisons quand plusieurs adresses coexistent sur une commande. Il permet aussi d'associer un emplacement de stock à une adresse.
Le cas est celui d'un client multi-sites qui commande en central et fait livrer sur ses agences. Sans ce module, il faut créer autant de commandes que d'adresses — et le client reçoit autant de factures.
sale_stock_partner_warehouse complète par l'autre bout : un entrepôt par défaut sur la fiche du client ou de l'adresse de livraison, proposé sur les nouvelles commandes à la place de l'entrepôt global. Pour une entreprise à plusieurs dépôts régionaux, c'est l'erreur de saisie la plus fréquente qui disparaît.
Les informations qui voyagent
| Module | Ce qui est transmis | Jusqu'où |
|---|---|---|
sale_stock_line_customer_ref | La référence du client | Mouvements, lignes de détail, transferts et colis |
sale_stock_picking_note | Une note interne et un commentaire client | Le bon de livraison — le commentaire est imprimé |
sale_stock_line_sequence | Le numéro de ligne de la commande | Les lignes du transfert |
Le premier est précieux en sous-traitance industrielle : la référence du donneur d'ordre doit figurer sur le colis, sinon la réception chez lui échoue.
Le deuxième évite la ressaisie : les deux notes peuvent être pré-remplies depuis la fiche du client — « livraison uniquement le matin », « sonner à l'interphone 3 » — au lieu d'être retapées à chaque commande.
Ce qui revient
sale_stock_return_request relie le mécanisme générique de demande de retour aux commandes : on crée une demande de retour client depuis une commande livrée, en la restreignant à une ou plusieurs commandes précises. Le menu dédié se trouve dans Ventes ▸ Commandes ▸ Demande de retour.
C'est la brique qui manque à la plupart des installations : sans elle, un retour se traite par un transfert créé à la main, sans lien avec la vente d'origine — donc sans analyse possible du taux de retour.
Limites connues
- La livraison manuelle déplace la responsabilité : si personne n'ouvre l'écran des lignes à livrer, rien ne part. C'est une décision d'organisation.
- L'adresse de livraison par ligne dépend du groupe d'approvisionnement par ligne : comportement d'approvisionnement modifié, pas simple affichage.
- Trois modules de colle (
sale_stock_delivery_state,_line_sequence,_secondary_unit) n'ont de sens qu'avec leurs deux modules parents installés. - La bulle multi-entrepôts peut faire promettre du stock distant : la marchandise existe, le transfert entre dépôts prend des jours.
sale_restricted_qtyest peu documenté dans le relevé : son apport est à vérifier sur le dépôt.- Les blocages doivent avoir un responsable de levée : un blocage que personne ne peut lever paralyse la logistique.
Identité technique
Les dix-huit modules viennent du dépôt OCA sale-workflow, branche 18.0, en licence AGPL-3 sauf deux enrichissements de la bulle de disponibilité et sale_block_no_stock (LGPL-3). Tous dépendent de sale_stock : ils n'ont aucun sens sur une activité de service pur.
Les familles voisines : les dates et reliquats côté commande, les préparations par lots côté entrepôt, et le stock négatif et les zones côté organisation.
Questions fréquentes
Peut-on confirmer une commande sans créer la livraison ?
Oui, avec sale_manual_delivery : activé sur la commande ou par défaut sur une équipe commerciale, il supprime la réservation et la création automatique du bon à la confirmation. Les lignes en attente s'affichent dans Inventaire ▸ Opérations ▸ Lignes de commande à livrer, où l'on décide de ce qui part. Revers : quelqu'un doit ouvrir cet écran chaque jour.
Comment retenir une livraison sans annuler la commande ?
sale_stock_picking_blocking bloque la création des livraisons avec un motif choisi dans une liste paramétrable — contrôle crédit, litige, attente de paiement. Un module voisin, sale_stock_picking_validation_blocking, empêche la validation d'un bon depuis la commande, pour un dernier contrôle avant le départ de la marchandise.
Peut-on livrer une commande à plusieurs adresses ?
Oui : sale_stock_delivery_address permet une adresse de livraison par ligne, avec éclatement automatique des bons de livraison. C'est le cas du client multi-sites qui commande en central ; sans ce module, il faut autant de commandes — et autant de factures — que d'adresses.
Comment éviter de vendre du stock qu'on n'a pas ?
Trois niveaux. La bulle de disponibilité enrichie passe en jaune quand la quantité vendue dépasse le stock libre du jour. sale_block_no_stock bloque la confirmation et ouvre un assistant qui propose des corrections. Et l'affichage multi-entrepôts évite l'inverse : refuser une commande alors que la marchandise est dans un autre dépôt.
Comment traiter un retour client proprement ?
Avec sale_stock_return_request : la demande de retour se crée depuis la commande livrée et reste rattachée à elle, via le menu Ventes ▸ Commandes ▸ Demande de retour. Sans ce module, un retour se traite par un transfert créé à la main, sans lien avec la vente — donc sans analyse possible du taux de retour.
Se faire accompagner
Le lien vente-stock est l'endroit où une PME perd le plus d'argent sans le voir : du stock réservé pour des commandes lointaines, des livraisons parties malgré un impayé, des retours traités hors circuit, des commandes annulées après expédition.
Nous reprenons donc ce lien dans l'ordre : qui déclenche une livraison, qui peut la bloquer, qui peut la lever, et comment un retour revient dans le système. Les modules viennent ensuite, et seulement ceux qui servent ces réponses. Voir les prestations d'Atalios Consulting ou demander un rappel.
Pour aller plus loin
- Dates de livraison, reliquats et annulations
- Préparations : lots, retours et liens facture
- Grossiste, négoce et distribution avec Odoo
En résumé
La livraison cesse d'être une conséquence automatique de la confirmation : elle se décide, se bloque avec un motif, se dirige par ligne vers la bonne adresse, et se refuse quand le stock n'y est pas. Les retours reviennent enfin rattachés à la vente qui les a produits. Parlons de votre chaîne vente-livraison.