Documentation10 min de lecture

Mouvements de stock : dates réelles, lots imposés et relocalisation

Dix-huit modules OCA du dépôt `stock-logistics-workflow` agissent au niveau du mouvement dans Odoo 18 Community : `stock_move_actual_date` ajoute une **date réelle** sur les transferts, les mouvements et leurs lignes — pour enregistrer quand l'opération a **physiquement eu lieu**, et non quand elle a été saisie. Les dix-sept autres, du lot verrouillé à la relocalisation automatique de l'emplacement source.

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

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

FamilleModulesNombre
Datesstock_move_actual_date, stock_move_original_date, stock_move_line_dates, stock_move_backdating4
Lots et péremptionstock_move_forced_lot, stock_restrict_lot, stock_move_line_change_lot, stock_move_line_expiration_date_required, stock_lock_lot, stock_production_lot_active6
Disponibilité et routagestock_move_source_relocate, stock_move_source_relocate_dynamic_routing, stock_move_auto_assign_auto_release, stock_override_procurement4
Quantités et traçabilitéstock_move_line_qty_picked, stock_move_quantity_product_uom, stock_move_propagate_first_move, stock_move_vendor_comment4

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.

ModuleCe qu'il enregistre
stock_move_actual_dateUne date réelle sur les transferts, rebuts, mouvements et lignes — la date physique de l'opération
stock_move_original_dateLa date planifiée à la confirmation, conservée même si la date planifiée change ensuite
stock_move_line_datesLes dates planifiée et limite sur les lignes d'opération, avec filtres et regroupements
stock_move_backdatingL'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_lot permet d'indiquer le lot au niveau de la demande d'approvisionnement : le mouvement généré ne réservera que celui-là.
  • stock_restrict_lot ré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_lot amé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_lot bloque 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

ModuleCe qu'il ajoutePourquoi
stock_move_line_qty_pickedUne quantité réellement prélevée, distincte de la quantité réservéeScanner sans modifier immédiatement la réservation
stock_move_quantity_product_uomLa 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_moveDeux champs pour retrouver le premier mouvement de la chaîneRemonter à l'origine depuis n'importe quel maillon
stock_move_vendor_commentUn commentaire fournisseur sur le mouvementPorter 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

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é.

Documentation OCALogistiqueTraçabilité

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