Le mouvement de stock est l'unité comptable de l'entrepôt : il porte la date, le lot, l'emplacement source et la quantité. Trois de ces quatre informations sont régulièrement fausses, et personne ne s'en aperçoit avant l'inventaire.
Dix-huit modules communautaires les corrigent, chacun sur un point précis.
Résumé
Quatre modules traitent les dates : une date réelle d'opération distincte de la date de saisie, la date planifiée d'origine conservée même après report, les dates planifiée et limite descendues sur les lignes d'opération, et un module d'antidatage.
Cinq traitent les lots : un lot imposé depuis la demande d'approvisionnement, un lot restreint sur le mouvement — qui ne réservera que celui-là —, un meilleur comportement au changement de lot sur une ligne déjà réservée, la date d'expiration rendue obligatoire à la réception, et le verrouillage de lots interdits de mouvement sauf vers des emplacements autorisés. Un sixième permet d'archiver des lots sans les supprimer.
Le reste agit sur la mécanique : relocalisation automatique de l'emplacement source d'un mouvement non disponible selon des règles, libération automatique quand une réservation rend un produit disponible, deux champs pour retrouver le premier mouvement d'une chaîne, une quantité convertie dans l'unité par défaut du produit, une quantité réellement prélevée distincte de la quantité réservée, et un commentaire fournisseur sur le mouvement.
L'essentiel
- Une date réelle : quand l'opération a eu lieu, pas quand elle a été saisie.
- La date planifiée d'origine conservée : mesurer un retard suppose de connaître la promesse initiale.
- Un lot imposé depuis la demande d'approvisionnement, ou restreint sur le mouvement.
- Des lots verrouillés : interdits de mouvement sauf vers des emplacements explicitement autorisés.
- La date d'expiration obligatoire à la réception pour les produits concernés.
- La relocalisation automatique de l'emplacement source quand le stock n'est pas là où on l'attendait.
- La quantité prélevée distincte de la quantité réservée — le scan ne modifie pas la réservation.
- Le premier mouvement d'une chaîne accessible depuis n'importe quel maillon.
Ce que ces modules ajoutent à l'instance
| Famille | Modules | Nombre |
|---|---|---|
| Dates | stock_move_actual_date, stock_move_original_date, stock_move_line_dates, stock_move_backdating | 4 |
| Lots et péremption | stock_move_forced_lot, stock_restrict_lot, stock_move_line_change_lot, stock_move_line_expiration_date_required, stock_lock_lot, stock_production_lot_active | 6 |
| Disponibilité et routage | stock_move_source_relocate, stock_move_source_relocate_dynamic_routing, stock_move_auto_assign_auto_release, stock_override_procurement | 4 |
| Quantités et traçabilité | stock_move_line_qty_picked, stock_move_quantity_product_uom, stock_move_propagate_first_move, stock_move_vendor_comment | 4 |
Un seul menu ajouté : Inventaire ▸ Configuration ▸ Gestion de l'entrepôt ▸ Source Relocation, pour les règles de relocalisation. Tous les autres sont des modules techniques qui enrichissent des écrans existants.
Les dates : ce qui s'est passé, et quand on l'a dit
Une réception saisie le lundi matin pour une livraison arrivée le vendredi soir porte la date du lundi. Sur un produit à date limite, sur un calcul de délai fournisseur ou sur une valorisation de fin de mois, cet écart de trois jours n'est pas anodin.
| Module | Ce qu'il enregistre |
|---|---|
stock_move_actual_date | Une date réelle sur les transferts, rebuts, mouvements et lignes — la date physique de l'opération |
stock_move_original_date | La date planifiée à la confirmation, conservée même si la date planifiée change ensuite |
stock_move_line_dates | Les dates planifiée et limite sur les lignes d'opération, avec filtres et regroupements |
stock_move_backdating | L'antidatage d'un mouvement (module peu documenté dans le relevé) |
Le deuxième est le pendant exact du module de date d'arrivée initiale côté achat : sans lui, un fournisseur qui décale trois fois apparaît comme ponctuel, puisque la date planifiée a suivi chaque report.
Le troisième sert les entrepôts qui travaillent à la ligne : filtrer les lignes d'opération par date limite permet de prioriser ce qui est en retard, pas ce qui est en haut de la liste.
Les lots : imposer, restreindre, verrouiller
Imposer un lot
stock_move_forced_lotpermet d'indiquer le lot au niveau de la demande d'approvisionnement : le mouvement généré ne réservera que celui-là.stock_restrict_lotréintroduit sur le mouvement un champ lot restreint qui force la réservation et le transfert sur ce seul lot. C'est la brique dont dépendent la sélection de lot à la vente et à l'achat.stock_move_line_change_lotaméliore le comportement standard quand on change le lot d'une ligne déjà réservée : Odoo se contente de remplacer la valeur, ce qui laisse la réservation précédente incohérente.
Verrouiller un lot
stock_lock_lotbloque des lots ou numéros de série : ils ne peuvent plus être utilisés dans les mouvements ni les réservations, sauf vers des emplacements explicitement autorisés à les recevoir.
C'est l'outil du blocage qualité : un lot suspect, une série en attente d'analyse, un retour client à expertiser. L'exception d'emplacement est bien pensée — on peut toujours envoyer le lot en zone de quarantaine ou au rebut, mais pas chez un client.
stock_production_lot_active complète en permettant d'archiver des lots sans les supprimer : sur une base ancienne, la liste des lots devient autrement inexploitable.
La péremption
stock_move_line_expiration_date_required rend la saisie manuelle de la date d'expiration obligatoire à la réception, pour les produits configurés avec une date d'expiration dont le délai n'est pas calculable automatiquement.
Sans ce contrôle, une réception se valide avec une date d'expiration vide — et la gestion des périmés, la rotation et les blocages de vente perdent toute fiabilité.
Les ventes par lot et leur tarification sont traitées dans conditionnements, unités et lots.
Quand le stock n'est pas là où on l'attendait
Deux modules traitent la disponibilité sans intervention humaine.
La relocalisation de la source
stock_move_source_relocate définit des règles qui changent automatiquement l'emplacement source d'un mouvement non disponible — non réservé ou partiellement réservé — au moment de la vérification de disponibilité. Les règles se configurent dans Inventaire ▸ Configuration ▸ Gestion de l'entrepôt ▸ Source Relocation.
Le cas : la zone de picking est vide, le stock est en réserve. Plutôt que de laisser le mouvement en attente, la règle bascule la source sur la réserve. Un module de colle assure la compatibilité avec le routage dynamique.
La libération automatique
stock_move_auto_assign_auto_release enchaîne automatiquement une libération des mouvements dès qu'une réservation automatique rend un produit disponible. Il s'adresse aux entrepôts qui pilotent leurs expéditions par la disponibilité à la promesse plutôt que par la date.
L'effet combiné des deux : une marchandise qui arrive déclenche la réservation, la libération, et le mouvement part en préparation — sans que personne n'ait relancé un écran.
Quantités et traçabilité de la chaîne
| Module | Ce qu'il ajoute | Pourquoi |
|---|---|---|
stock_move_line_qty_picked | Une quantité réellement prélevée, distincte de la quantité réservée | Scanner sans modifier immédiatement la réservation |
stock_move_quantity_product_uom | La quantité convertie dans l'unité par défaut du produit, en champ stocké | Comparer et sommer des mouvements en unités différentes |
stock_move_propagate_first_move | Deux champs pour retrouver le premier mouvement de la chaîne | Remonter à l'origine depuis n'importe quel maillon |
stock_move_vendor_comment | Un commentaire fournisseur sur le mouvement | Porter l'instruction jusqu'à l'opération |
Le premier est fondamental pour les entrepôts équipés de terminaux : séparer ce qui est scanné de ce qui est réservé permet de constater un écart au lieu de l'écraser. C'est la base d'un contrôle de prélèvement.
Le troisième ferme la boucle de traçabilité : dans une chaîne Réception → Stockage → Prélèvement → Emballage → Expédition, retrouver l'origine d'un colis demande sinon de remonter maillon par maillon.
Reste stock_override_procurement, module purement technique permettant de surcharger les valeurs d'approvisionnement — une brique pour développements spécifiques, sans effet visible en soi.
Limites connues
- Deux modules sont peu documentés dans le relevé (
stock_move_backdating,stock_override_procurement) : leur comportement se vérifie sur le dépôt. - L'antidatage touche la valorisation comptable : à encadrer par des droits et une fenêtre autorisée.
- La relocalisation automatique change les emplacements sources : à éprouver sur une copie, car elle modifie le comportement de réservation.
- Le verrouillage de lot peut bloquer une expédition urgente : prévoir qui a le droit de déverrouiller.
- La date planifiée d'origine n'a de valeur que posée dès le départ : installée après coup, elle ne reconstitue pas l'historique.
- La quantité prélevée suppose un process de contrôle : sans règle, l'écart constaté n'est traité par personne.
Identité technique
Les dix-huit modules viennent du dépôt OCA stock-logistics-workflow, branche 18.0, en licences AGPL-3 et LGPL-3 selon le module. Plusieurs dépendent de briques d'autres dépôts : péremption produit (product-attribute), disponibilité à la promesse et routage dynamique, sous-emplacements et routes par emplacement source (stock-logistics-warehouse).
Les familles voisines : regrouper et scinder les transferts, les vagues de préparation et stock : négatif, zones et rangement.
Questions fréquentes
Comment enregistrer la vraie date d'une réception saisie en retard ?
Avec stock_move_actual_date, qui ajoute une date réelle sur les transferts, les mouvements et leurs lignes : on enregistre quand l'opération a physiquement eu lieu, indépendamment de la date de saisie. Sur un produit à date limite ou en fin de mois, l'écart de quelques jours n'est pas neutre.
Peut-on empêcher l'utilisation d'un lot suspect ?
Oui : stock_lock_lot verrouille des lots ou numéros de série, qui ne peuvent plus être réservés ni déplacés sauf vers des emplacements explicitement autorisés. On peut donc toujours envoyer le lot en quarantaine ou au rebut, mais pas chez un client. Prévoyez qui a le droit de déverrouiller.
Comment forcer un mouvement à utiliser un lot précis ?
stock_restrict_lot ajoute un champ lot restreint sur le mouvement, qui force la réservation et le transfert sur ce seul lot ; stock_move_forced_lot permet de l'imposer dès la demande d'approvisionnement. La première est la brique dont dépendent la sélection de lot à la vente et à l'achat.
Que faire quand la zone de prélèvement est vide mais la réserve pleine ?
stock_move_source_relocate définit des règles qui changent automatiquement l'emplacement source d'un mouvement non disponible au moment de la vérification de disponibilité. Le mouvement bascule sur la réserve au lieu de rester en attente. À éprouver sur une copie : il modifie le comportement de réservation.
Pourquoi séparer quantité prélevée et quantité réservée ?
Pour pouvoir constater un écart au lieu de l'écraser. stock_move_line_qty_picked ajoute une quantité réellement prélevée, distincte de la réservation : le scan d'un opérateur n'efface plus ce qui était attendu, et le contrôle de prélèvement devient possible.
Se faire accompagner
Les mouvements de stock sont la couche où les erreurs sont les plus coûteuses et les moins visibles : une date fausse décale une valorisation, un lot mal réservé envoie un produit périmé chez un client, un emplacement source figé laisse des commandes en attente alors que la marchandise est à dix mètres.
Nous traitons donc ces modules par le risque : d'abord les lots et les dates d'expiration quand le métier l'exige, ensuite les dates réelles, enfin la relocalisation — qui est puissante et doit être éprouvée. Voir les prestations d'Atalios Consulting ou demander un rappel.
Pour aller plus loin
- Regrouper, scinder et suivre les transferts
- Stock : interdire le négatif, organiser les emplacements
- La gestion des stocks et de la traçabilité dans Odoo
En résumé
La date réelle de l'opération, la promesse initiale conservée, le lot imposé ou verrouillé, la date de péremption obligatoire, et l'emplacement source qui se corrige tout seul quand le stock n'est pas là où on l'attendait. Dix-huit corrections au niveau où l'erreur coûte le plus. Parlons de votre traçabilité.