Documentation11 min de lecture

Regrouper, scinder et suivre les transferts de stock

Seize modules OCA du dépôt `stock-logistics-workflow` reprennent la main sur la forme des transferts dans Odoo 18 Community : `stock_picking_group_by_partner_by_carrier` (version 18.0.2.1.0) **fusionne dans un seul bon de livraison** les mouvements issus de commandes différentes partageant la même adresse et le même transporteur. Les quinze autres, de la scission par dimensions à la barre d'avancement d'un transfert.

Entrepôt organisé en zones avec emplacements identifiés

Un bon de livraison par commande, c'est la règle d'Odoo. Dans un entrepôt réel, deux commandes du même client partant le même jour chez le même transporteur devraient voyager ensemble — et un transfert trop gros devrait pouvoir être coupé.

Seize modules communautaires décident de ces regroupements et de ces scissions, puis rendent l'avancement visible.

Résumé

Quatre modules regroupent : un index technique qui rend les requêtes de regroupement rapides, le regroupement par client et par transporteur dans un seul bon, l'ajout d'un critère de date pour ne fusionner que ce qui part le même jour, et une colle avec la politique de livraison forcée par type d'opération.

Trois scindent : un bouton de scission d'un transfert non validé, un mode par dimensions — le premier transfert respecte un volume donné — et un mode par nombre de kits. Deux autres agissent en masse : confirmer et transférer plusieurs bons d'un coup, et relever la priorité des transferts amont dès qu'un transfert aval commence à être traité.

Le reste rend lisible : un type métier calculé sur chaque transfert, des étapes de préparation configurables en plus de l'état standard, un pourcentage d'avancement affiché en barre, et quatre boutons qui ouvrent ce qui est lié — reliquats, retours, lots utilisés, transferts d'origine d'une chaîne.

L'essentiel

  • Un bon de livraison pour plusieurs commandes du même client chez le même transporteur.
  • Un critère de date pour ne fusionner que ce qui part ensemble.
  • La scission d'un transfert sans le valider — par quantité, par dimensions ou par kits.
  • La priorité des transferts amont relevée dès que l'aval démarre.
  • Des étapes de préparation configurables, en plus de l'état d'Odoo.
  • Un pourcentage d'avancement affiché en barre dans les listes.
  • Quatre accès directs : reliquats, retours, lots utilisés, transferts d'origine.
  • Un index PostgreSQL dédié — sans lui, le regroupement ralentit toute la base.

Ce que ces modules ajoutent à l'instance

FamilleModulesNombre
Regroupementstock_picking_group_by_base, stock_picking_group_by_partner_by_carrier, stock_picking_group_by_partner_by_carrier_by_date, stock_picking_group_by_partner_by_carrier_force_move_type4
Scissionstock_split_picking, stock_split_picking_dimension, stock_split_picking_kit3
Action en masse et prioritéstock_picking_mass_action, stock_picking_consolidation_priority2
Lisibilitéstock_picking_kind, stock_picking_stage, stock_picking_progress3
Accès directsstock_picking_show_backorder, stock_picking_show_return, stock_picking_show_lot, stock_picking_show_linked4

Un seul menu de configuration : Inventaire ▸ Configuration ▸ Étape de préparation. Tous les autres enrichissent le formulaire de transfert, ses listes ou le moteur de regroupement.

Regrouper : un colis plutôt que trois

Trois commandes passées dans la semaine par le même client, livrées à la même adresse par le même transporteur, produisent trois bons de livraison — donc potentiellement trois expéditions facturées. C'est le comportement standard, et il coûte directement de l'argent.

  1. stock_picking_group_by_base crée d'abord un index PostgreSQL sur la table des transferts : sans lui, les requêtes de regroupement deviennent lentes dès que la base grossit.
  2. stock_picking_group_by_partner_by_carrier fusionne dans un seul bon les mouvements issus de commandes différentes partageant adresse de livraison et transporteur.
  3. stock_picking_group_by_partner_by_carrier_by_date ajoute le critère de date : deux mouvements ne fusionnent que s'ils doivent partir le même jour — en tenant compte du fuseau du client.
  4. Un module de colle assure la compatibilité avec la politique de livraison forcée par type d'opération.

Le critère de date est indispensable dès qu'on travaille avec des dates d'engagement : sans lui, une commande à livrer dans trois semaines se retrouve fusionnée avec une commande du jour, et la première bloque la seconde.

Ce regroupement est l'inverse exact du découpage décrit dans les dates de livraison : l'un éclate une commande en plusieurs livraisons, l'autre réunit plusieurs commandes en une. Les deux se combinent, et il faut savoir lequel prime.

Scinder un transfert trop gros

ModuleMode de scissionCas d'usage
stock_split_pickingPar sélection ou quantité, sans valider le transfertUne partie seulement est prête à partir
stock_split_picking_dimensionPar dimensions : le premier transfert respecte un volume donnéRemplir un véhicule ou un contenant
stock_split_picking_kitPar nombre de kitsExpédier dix ensembles complets sur les trente commandés

Le premier répond au besoin le plus fréquent : livrer ce qui est disponible sans attendre le reste, et sans valider un transfert partiel qui créerait un reliquat mal maîtrisé.

Le deuxième est l'outil du chargement : on coupe pour remplir un camion, une palette, un conteneur. Il s'appuie sur le calcul de volume des transferts.

Le troisième concerne les produits vendus en ensembles : couper au milieu d'un kit n'a pas de sens, et c'est pourtant ce que fait une scission par quantité.

stock_picking_mass_action complète par le geste inverse : confirmer et transférer plusieurs bons sélectionnés en une seule opération, depuis la liste.

Prioriser et suivre l'avancement

La priorité qui remonte la chaîne

stock_picking_consolidation_priority augmente automatiquement la priorité des transferts amont — réceptions, prélèvements, mouvements internes — dès qu'un transfert aval de la même chaîne commence à être traité.

C'est une mécanique d'ordonnancement fine et rarement implémentée : quand l'expédition commence, tout ce qui l'alimente devient urgent. Sans elle, l'opérateur du prélèvement traite dans l'ordre d'arrivée, et l'expédition attend la seule ligne manquante.

Rendre l'état lisible

  • stock_picking_kind calcule un type métier sur chaque transfert — livraison client, réception fournisseur, retour, mouvement interne. Utile pour filtrer et pour les automatisations, là où le type d'opération est paramétrable et donc variable d'une instance à l'autre.
  • stock_picking_stage ajoute des étapes configurables en complément de l'état standard : « en attente de contrôle », « emballé », « chargé ». L'état d'Odoo dit où en est la mécanique ; l'étape dit où en est le travail.
  • stock_picking_progress calcule un pourcentage d'avancement sur les mouvements et les transferts, affiché en barre de progression dans les listes.

La barre d'avancement change la supervision d'un entrepôt : un chef d'équipe voit en un écran ce qui est à 10 % et ce qui est à 90 %, au lieu de lire des états binaires.

Six briques de liaison entre la vente et la livraison

Ces modules n'ont pas d'écran propre : ils transportent une information de la commande jusqu'au transfert, ou corrigent un calcul. Leur absence se voit sur le bon de livraison, jamais dans une liste de modules.

ModuleCe qu'il transporte ou corrige
delivery_procurement_group_carrierLe transporteur choisi sur la commande, reporté vers le groupe d'approvisionnement puis vers les transferts — brique fondatrice du regroupement par transporteur
procurement_auto_create_group_carrierColle entre la création automatique de groupe d'approvisionnement et le transporteur porté par ce groupe
delivery_total_weight_from_packagingLe poids réel des conditionnements dans le calcul du poids des mouvements, transferts et colis — et non le seul poids unitaire du produit
product_customerinfo_pickingLe code et le nom produit du client affichés dans les lignes d'opération du transfert
sale_line_returned_qtyLa quantité déjà retournée par le client, affichée sur chaque ligne de commande de vente
sale_line_returned_qty_mrpLa correction de ce calcul pour les produits vendus en kits — installation automatique
sale_order_global_stock_routeUne route logistique choisie en en-tête de commande et appliquée à toutes ses lignes

Le troisième corrige une erreur silencieuse et coûteuse : un poids calculé sur le seul produit, sans ses emballages, sous-estime chaque expédition. Le transporteur, lui, pèse le colis réel — et refacture l'écart.

Le quatrième prolonge jusqu'à l'entrepôt la logique du code produit client : l'opérateur qui prépare voit la référence que le client lira sur son bon de réception.

Le dernier évite une saisie répétitive : choisir une route particulière — expédition directe, passage par une plateforme — en tête de commande plutôt que sur chacune de ses lignes.

Quatre boutons qui font gagner des minutes

ModuleCe qu'il ouvre depuis le transfert
stock_picking_show_backorderLes reliquats qui en découlent, dans un onglet dédié
stock_picking_show_returnLes transferts de retour liés, et le bouton pour remonter au transfert d'origine
stock_picking_show_lotLes lots et numéros de série créés ou utilisés sur les lignes
stock_picking_show_linkedLes transferts d'origine d'une route chaînée

Ces quatre modules ne changent aucun comportement : ils évitent des recherches. Sur un flux chaîné à trois étapes, retrouver le transfert amont d'une expédition demande sinon une recherche dans la liste des mouvements — ce que personne ne fait sous pression.

Le deuxième mérite une mention : retrouver l'origine d'un retour est la première question d'un litige client, et la réponse déclenche tout le reste — avoir, remplacement, réclamation transporteur.

Les retours eux-mêmes sont traités dans préparations : lots, retours et liens facture et ventes et stock.

Limites connues

  • Le regroupement sans critère de date fusionne des expéditions lointaines : installer le module de date avec celui de regroupement.
  • L'index PostgreSQL est une modification de base : indispensable, mais à appliquer lors d'une fenêtre de maintenance sur une base volumineuse.
  • Regroupement et découpage par date s'opposent : décider lequel prime avant d'installer les deux.
  • La scission par dimensions suppose des volumes produit renseignés.
  • Les étapes de préparation s'ajoutent à l'état standard : sans règle d'usage, elles ne sont pas remplies.
  • La priorité automatique modifie l'ordonnancement : à éprouver sur une copie avant une base en production.

Identité technique

Les seize modules viennent du dépôt OCA stock-logistics-workflow, branche 18.0, tous en licence AGPL-3. Le regroupement par client et transporteur dépend de plusieurs briques — groupe d'approvisionnement par transporteur, extraction d'entrepôt, livraison — installées avec lui ; la scission par dimensions dépend du calcul de volume du dépôt stock-logistics-warehouse.

Les familles voisines : les vagues de préparation et préparations : lots, retours et liens facture.

Questions fréquentes

Peut-on livrer plusieurs commandes dans un seul bon ?

Oui : stock_picking_group_by_partner_by_carrier fusionne dans un seul bon de livraison les mouvements issus de commandes différentes partageant la même adresse et le même transporteur. Ajoutez le module de critère de date, sans lequel une commande à livrer dans trois semaines se retrouve fusionnée avec une expédition du jour.

Pourquoi un index PostgreSQL est-il nécessaire ?

Parce que le regroupement interroge la table des transferts sur plusieurs critères — partenaire, emplacements, type d'opération. stock_picking_group_by_base crée l'index correspondant ; sans lui, ces requêtes ralentissent à mesure que la base grossit, et le ralentissement touche tout l'entrepôt.

Comment expédier une partie d'un transfert sans le valider ?

Avec stock_split_picking : un bouton Split scinde un transfert non validé en deux, sans passer par la validation partielle qui créerait un reliquat. Deux extensions ajoutent une scission par dimensions (remplir un camion) et par nombre de kits (ne pas couper un ensemble en deux).

Comment faire remonter l'urgence dans la chaîne logistique ?

stock_picking_consolidation_priority relève automatiquement la priorité des transferts amont dès qu'un transfert aval de la même chaîne commence à être traité. Sans ce mécanisme, le prélèvement traite dans l'ordre d'arrivée pendant que l'expédition attend une seule ligne.

Quelle différence entre l'état et l'étape d'un transfert ?

L'état d'Odoo — brouillon, en attente, disponible, fait — décrit la mécanique. L'étape ajoutée par stock_picking_stage décrit le travail réel : en attente de contrôle, emballé, chargé. Les deux coexistent, et l'étape n'a de valeur que si une règle d'usage dit qui la met à jour et quand.

Se faire accompagner

Regrouper et scinder sont deux décisions opposées qui coexistent dans tout entrepôt : on regroupe pour économiser du transport, on scinde pour livrer plus vite. Installer les deux sans trancher la priorité produit des comportements imprévisibles — et des opérateurs qui défont à la main ce que le système vient de faire.

Nous posons donc la règle d'abord : qu'est-ce qui prime, le coût de transport ou le délai ? Puis nous paramétrons, et nous mesurons le nombre de colis par client et par semaine avant et après. Voir les prestations d'Atalios Consulting ou demander un rappel.

Pour aller plus loin

En résumé

Deux décisions opposées et nécessaires : regrouper plusieurs commandes dans un colis quand elles partagent client, transporteur et date ; scinder un transfert trop gros par volume ou par kits. Avec, autour, la priorité qui remonte la chaîne et l'avancement enfin visible. Parlons de vos expéditions.

Documentation OCALogistiqueEntrepôt

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