Files
mcp-wms-wiki/wiki_old_13-05-2026/sources/archives/LIM-73 - LOT1.3 [RECEPTION] Fermetures, REF et gestion retours.md
T
2026-05-20 09:41:27 +02:00

26 KiB
Raw Blame History

Note sur les CstAtt : deux CstAtt01 coexistent dans cette tâche mais sur des entités différentes — CstAtt01 de l'OE (hors tolérance) et CstAtt01 de la réception (réception retour entièrement rangée). Ils sont toujours qualifiés explicitement pour éviter toute confusion.


Contexte

Une fois les palettes traitées au poste de travail (LIM-67 / LIM-72), il faut :

  • Clôturer la réception et informer l'ERP via un message REF

  • Clôturer les OE (ordres d'entrée) associés et envoyer le message ROF correspondant

  • Afficher dans la vue des OE les OE en écart pour permettre aux gestionnaires de les clôturer manuellement

Relation réception ↔ OE : une réception peut servir plusieurs OE, mais un OE est servi par une seule réception. Si la réception associée à un OE est incomplète, l'OE ne sera pas complété par une future réception — SAP gère le reliquat via une nouvelle livraison.

Cette tâche concerne les flux fournisseur/intersite et retour client. La réception production (ASN) n'est pas concernée (pas de clôture manuelle).

Résumé du process complet :

  1. Déclaration sur l'image de quai : LIM-64

  2. Déplacement AGV → Poste de travail : LIM-70

  3. Traitement au poste de travail : LIM-67 / LIM-72

  4. Clôture de la réception (auto si toutes les palettes sont arrivées et validées, manuelle sinon) ← cette tâche

    • Pour les réceptions retour, l'émission du REF est différée jusqu'au rangement ASRS complet (§1.2).
  5. Clôture des OE associés (auto si dans la tolérance, manuelle sinon) ← cette tâche

  6. Déplacement AGV → Table d'entrée (+ filmage)

  7. Passage PIE : LIM-66

  8. Stockage ASRS ou rejet

  9. Émission du REF / ROFcette tâche

    • Fournisseur / intersite : REF émis à la clôture de la réception (étape 4), ROF émis à la clôture de chaque OE (étape 5).

    • Retour client : REF (et donc clôture effective de la réception) émis une fois tous les supports rangés en ASRS (après étape 8).

Réglage : IsSingleReceipt = true — le WMS ne gère pas de reliquats automatiques. Si réception incomplète, c'est SAP qui crée une nouvelle livraison (donc nouvel OE) si nécessaire.

Réglage : AutoCloseReception = true — le WMS clôture automatiquement la réception quand toutes les palettes sont arrivées et validées (condition custom en §1.1). Pour les retours, l'émission du REF reste conditionnée au rangement ASRS complet (§1.2).

Réglage : AutoCloseInboundOrder = true — à la clôture de la réception, chaque OE complété à 100% ou dans la tolérance est automatiquement clôturé (ROF envoyé) et auto-archivé (donc absent de la vue des OE). Les OE en écart (hors tolérance) restent ouverts et visibles dans la vue (§2) Ils ne doivent pas se fermer automatiquement (voir ci-dessous).


Développement

1. Clôture de la réception

1.1 Déclenchement

Principe : la réception est complètement « livrée » au WMS quand toutes les palettes fictives issues de l'image de quai ont été traitées au PK (devenant des palettes réelles), et qu'aucune palette n'est plus en cours de traitement au PK.

Rappel sur les deux CstAtt utilisés pour ce check :

CstAtt Entité Pose / dépose Scope (tâche)
CstAtt08 Palette fictive (issue de l'image de quai) Set avec la valeur du code de réception à la création de la palette fictive. Supprimé avec la palette fictive quand elle est traitée au PK. Géré en amont — posé par LIM-64, consommé par LIM-67 / LIM-72.
CstAtt10 Palette réelle au PK Set à true pendant le process de réception sur la palette en cours de traitement. Mis à vide à l’évacuation de la palette. Géré en amont par LIM-67 / LIM-72. Consommé ici pour le déclenchement de l'auto-close.

Condition de déclenchement de l'auto-close (et de visibilité du bouton « Fermer réception ») :

L'auto-close de la réception se déclenche — et le bouton « Fermer réception » n'est visible — que si les deux conditions suivantes sont simultanément remplies :

  • Aucune palette fictive ayant CstAtt08 = <code de la réception en cours> n'est présente (plus de palettes à venir de l'image de quai),

  • ET

    • Si Workstation : une seule palette (<=1) réelle au PK a CstAtt10 = true (plus dautres palettes en cours de traitement).

    • Si Vue Réception : aucune palette réelle au PK n'a CstAtt10 = true (plus de palette en cours de traitement).

Ces deux conditions garantissent que toutes les palettes sont arrivées et entièrement validées avant que la réception puisse se clôturer.

Si au moins une ligne est hors tolérance, afficher un message d'avertissement à l'opérateur au moment de la fermeture : « La réception a été clôturée mais les quantités reçues sont hors tolérance, voir avec le manager pour réguler les quantités attendues puis fermer l'ordre d'entrée ».

1.2 Cas spécifique des retours clients — REF conditionné au rangement complet

Contexte métier : pour les retours clients, le REF influe sur la facturation SAP. Il ne doit donc être envoyé que lorsque tous les supports de la réception sont rangés dans l'ASRS (et ont donc passé l'ensemble des contrôles, notamment PIE).

Pour les autres types de réception (fournisseur / intersite), le REF est émis de façon standard à la clôture de la réception, quelle que soit la position des supports (voir §1.4 pour la gestion du champ Zone de stockage dans ce cas).

1.2.1 Pose du CstAtt11 sur les supports (WMS)

À chaque fin de tâche de rangement dans l'ASRS :

  • Vérifier si le support provient d'une réception de type retour.

  • Si oui → CstAtt11 du support à true.

  • Sinon → aucune action.

Le CstAtt11 est posé une fois et n'est jamais remis à false, même si le support ressort ensuite de l'ASRS (cf. §1.2.3).

1.2.2 Affichage — statut « Clôture en cours »

Dans la vue des réceptions, le statut visuel d'une réception retour est piloté par CstAtt01 de la réception (posé par Reception_Close_PR_V2, cf. §1.3) :

CstAtt01 de la réception État Affichage
null / vide Retour en attente Standard
true Clôture en attente de rangement ASRS complet « Clôture en cours », ligne en jaune

Pour les réceptions non-retour, CstAtt01 de la réception n'est pas utilisé : le flag reste vide et l'affichage suit le comportement standard.

1.2.3 Cas rare — palette déjà sortie de l'ASRS avant clôture du REF

Exemple : réception retour de 15 palettes. Au moment où la 13e entre dans l'ASRS, la 1ère (entrée plus tôt) en est déjà ressortie (picking).

Le CstAtt11 du support n'est jamais remis à false après la pose initiale. Le flag persiste donc même si le support ressort de l'ASRS. Quand la 15e palette sera rangée, tous les supports de la réception auront CstAtt11 = true et la clôture se fera normalement.

Par ailleurs, si la palette est expédiée (fermeture de l'ordre de sortie), elle ne sera plus dans le pool évalué par Reception_Close_PR_V2 — la condition reste satisfaisable.

1.3 Adaptation de Reception_Close_PR_V2 (WMS)

Le workflow standard de clôture de réception est modifié pour couvrir deux comportements custom : la condition spécifique aux retours (A) et la gestion des écarts par ligne article (B). Ces deux comportements s'exécutent à la clôture de la réception et concernent l'ensemble des flux (hors précisions sur A, propres aux retours).

1.3.1 Partie A — Condition de clôture pour les retours

  • Si la réception n'est pas de type retour → comportement standard (clôture immédiate, génération de la transaction REF).

  • Si la réception est de type retour :

    • Vérifier que tous les supports de la réception ont CstAtt11 = true.

      • Oui → set CstAtt01 de la réception = false, fermer la réception, générer la transaction REF.

      • Non → ne pas fermer, set CstAtt01 de la réception = true, la réception reste dans l'état « Clôture en cours » (§1.2.2). Le WF sera rejoué à chaque event task finished sur un support de la réception, jusqu'à satisfaction de la condition.

Si une palette est refusée au PIE puis retirée du retour (ROR), le client doit la supprimer du WMS, sinon la clôture ne sera jamais effectuée.

1.3.2 Partie B — Pose du CstAtt01 de l'OE pour les lignes hors tolérance

Rappel des notions :

  • Quantité reçue (réelle, déclarée au PK)

  • Quantité attendue (théorique, issue du ROR)

  • Tolérance (% de dépassement autorisé, par ligne, issue du ROR. Si non indiquée dans le ROR, indiquée via le profil de réception de l'article)

Dans le standard la tolérance n'est utilisée que pour l'excès ; dans notre cas elle sera aussi utilisée pour vérifier une quantité reçue inférieure à celle attendue.

Algorithme — à la clôture effective de la réception (après validation de la condition A si applicable), pour chaque ligne article hors tolérance (en plus ou en moins) :

  1. Chercher le premier OE (FirstOrDefault) parmi les OE associés à la réception qui contient ce combo code article/lot.

    • Le client a validé qu'en pratique un combo code article/lot n'est jamais partagé entre plusieurs OE d'une même réception — le FirstOrDefault est donc déterministe dans les faits.
  2. Poser CstAtt01 = true sur cet OE.

Les OE ainsi flaggés ne se clôturent pas automatiquement (leur ROF est bloqué, il faut modifier le WF de clôture des OE pour ce cas) et s'affichent en rouge (§2). Les OE en écart dans la tolérance ne sont pas flaggés.

REF : le REF est envoyé normalement avec les quantités réelles reçues (ce qui inclut les excès sur les lignes déjà attendues). Le cas d'un code article totalement inattendu (ligne supplémentaire dans le REF) n'est autorisé que pour les retours et est géré par le standard — hors scope de cette tâche.

Note

: l'autorisation de la réception physique d'une marchandise en excès par rapport à la tolérance est traitée côté PK — cf. LIM-67 / LIM-72.

1.4 Contenu du REF (custom)

Il faut mettre en place les customisations suivantes :

Élément custom à rajouter (nom balise à ta guise) Détail
Zone de stockage Info récupérée depuis le code emplacement du support

Un seul REF est envoyé par réception (pas de REF progressif, car IsSingleReceipt = true).

Valeur de la zone de stockage :

  • Réceptions fournisseur / intersite : si un support se trouve hors de l'ASRS au moment de l'envoi du REF, on envoie "NON RANGEE".

  • Réceptions retour client : ce cas ne peut pas se produire puisque le REF n'est émis qu'une fois tous les supports rangés (cf. §1.2). La valeur sera toujours une zone réelle (même si hors ASRS).


2. Clôture des ordres d'entrée (OE)

2.1 Principe général

À la clôture de la réception, le WMS impute les quantités reçues sur les OE associés (un OE étant servi par une seule réception). Le flag CstAtt01 de l'OE a déjà été posé par Reception_Close_PR_V2 pour les OE concernés par une ligne hors tolérance (cf. §1.3.2). Le comportement dépend ensuite du résultat pour chaque OE :

Situation de l'OE Clôture OE ROF Affichage dans la vue des OE
Reçu = attendu (pas d'écart) Auto-close (AutoCloseInboundOrder = true) Envoi (auto) Auto-archivé → absent de la vue
Écart dans la tolérance (incomplet ou excès léger) Custom : auto-close Envoi (auto) Auto-archivé → absent de la vue
Écart hors tolérance (CstAtt01 de l'OE = true) Manuelle par un profil non-opérateur Envoyé manuellement Rouge — bouton « Clôturer l'OE » visible uniquement aux non-opérateurs

Règle d'affichage résumée : un OE présent dans la vue est forcément « non terminé » — soit sa réception n'est pas encore arrivée / en cours, soit sa réception est terminée avec écart. On distingue les trois cas à l'œil par la couleur.

2.2 Diagramme décisionnel

Clôture de la réception │ ▼ Pour chaque OE associé : écart détecté ? │ ┌────┴─────────┐ ▼ ▼ NON OUI │ │ │ │ ▼ │ Écart dans la tolérance ? │ │ │ ┌─────┴─────┐ │ ▼ ▼ │ OUI NON (hors tolérance) │ │ │ │ │ ▼ │ │ CstAtt01 de l'OE = true │ │ (posé par Reception_Close_PR_V2, §1.3.2) │ │ REF envoyé (avec quantités réelles) │ │ ROF BLOQUÉ │ │ OE affiché en ROUGE │ │ Bouton "Clôturer l'OE" visible │ │ uniquement aux non-opérateurs │ │ (admin, manager, chef d'équipe) │ │ │ │ │ ▼ │ │ Manager régularise dans SAP │ │ (envoi éventuel d'un nouveau ROR) │ │ puis clôture manuellement l'OE │ │ │ │ │ │ │ │ │ │ │ │ │ │ ▼ ▼ ▼ Clôture Auto ROF envoyé à SAP ROF envoyé auto-archivé

2.3 Visibilité et accessibilité du bouton « Clôturer l'OE »

État OE Affichage OE Bouton « Clôturer l'OE »
Sans écart (auto-clôturé) Standard - Auto-archivé, absent de la vue Standard : accessible à tous les profils (opérateurs inclus)
Écart dans la tolérance Standard - Auto-archivé, absent de la vue Standard : accessible à tous les profils (opérateurs inclus)
Écart hors tolérance (CstAtt01 de l'OE = true) Rouge Visible uniquement pour les profils non-opérateurs (admin, manager, chef d'équipe). Masqué pour les opérateurs standards.

3. LOC — Impact sur le message de localisation (développement hors scope)

Note

: Le développement du LOC custom est une tâche dédiée : LIM-76. Cette section décrit le besoin pour information et cohérence.

Le LOC est un message envoyé à SAP toutes les 5 minutes sur delta (palettes créées/déplacées/supprimées). Il contient les quantités et la localisation de chaque support.

Custom nécessaire (tâche dédiée) : le LOC ne doit pas prendre en compte les palettes liées à une réception non fermée. Cela est standard dans la génération du WSC (qu'on va forker pour faire le LOC).

Cela garantit que le WMS ne communique à SAP que les supports qu'il connaît déjà (via un REF préalable). Ainsi :

  • Si un article est géré en KG et qu'un écart de poids est constaté au PIE (LIM-66), la quantité réelle est mise à jour dans le stock WMS.

  • Le LOC suivant (après l'envoi du REF) transmettra naturellement la bonne quantité à SAP, sans besoin de STV spécifique.

  • SAP constatera l'écart en comparant les quantités du LOC avec celles du REF.

Note

: les notifications d'écart de poids au PIE et de rejet sont déjà gérées par LIM-66. La présente tâche (LIM-73) ne génère plus de notifications.


4. Récapitulatif des CstAtt utilisés par cette tâche

À reporter / mettre à jour dans LIM-14 (Custom Attributes, Séquences, Jobs et Paramètres WMS).

CstAtt Entité Type Portée Rôle
CstAtt08 Palette fictive String Posé par LIM-64, consommé ici Code de la réception liée à la palette fictive — utilisé pour détecter l'absence de palettes fictives restantes avant auto-close (§1.1)
CstAtt10 Palette réelle au PK Booléen Posé/déposé par LIM-67 / LIM-72, consommé ici true pendant le traitement d'une palette au PK — utilisé pour détecter qu'aucune palette n'est en cours avant auto-close (§1.1)
CstAtt11 Support (palette réelle) Booléen Introduit par cette tâche true quand le support issu d'une réception retour a fini son rangement en ASRS — utilisé par Reception_Close_PR_V2 pour conditionner la clôture de la réception et l'émission du REF (§1.2, §1.3.1)
CstAtt01 Réception (type retour uniquement) Booléen Introduit par cette tâche Réception retour entièrement rangée en ASRS — posé à true par Reception_Close_PR_V2 au moment de la tentative de clôture non effective. Pilote l'affichage « Clôture en cours » tant qu'il est à true (§1.2.2, §1.3.1)
CstAtt01 OE (ordre d'entrée) Booléen Introduit par cette tâche OE en écart hors tolérance — posé par Reception_Close_PR_V2 à la clôture de la réception (§1.3.2). Bloque la clôture auto de l'OE et pilote l'affichage rouge + la visibilité restreinte du bouton « Clôturer l'OE » (§2)

Cas de tests

Cas de tests — LIM-73

À compléter au fil des tests. Colonnes Dév / CDP laissées vides pour mise en couleur après exécution.


1. Clôture de la réception — Déclenchement (fournisseur / intersite)

ID Description Préconditions Actions Résultat attendu Dév CDP
1 Auto-close — toutes les palettes arrivées et validées (vue Réception) Réception fournisseur. Plus aucune palette fictive avec CstAtt08 = . Aucune palette au PK avec CstAtt10 = true Déclenchement auto-close depuis la vue Réception Réception clôturée, REF envoyé immédiatement
2 Auto-close depuis Workstation — dernière palette en cours de validation Réception fournisseur. Plus aucune palette fictive avec CstAtt08 = . Exactement 1 palette au PK avec CstAtt10 = true (la dernière en cours) Déclenchement auto-close depuis la Workstation Réception clôturée, REF envoyé (condition Workstation : CstAtt10 ≤ 1)
3 Pas d'auto-close depuis vue Réception — palette encore en cours au PK Réception fournisseur. 1 palette au PK avec CstAtt10 = true Tentative d'auto-close depuis la vue Réception Auto-close non déclenché. Bouton « Fermer réception » masqué
4 Pas d'auto-close — palettes fictives restantes (les deux points d'entrée) Réception fournisseur. 2 palettes fictives avec CstAtt08 = encore présentes Tentative d'auto-close (vue Réception et Workstation) Auto-close non déclenché dans les deux cas. Bouton « Fermer réception » masqué
5 Pas d'auto-close depuis Workstation — plus d'une palette en cours Réception fournisseur. 2 palettes au PK avec CstAtt10 = true Tentative d'auto-close depuis la Workstation Auto-close non déclenché. Bouton masqué (condition Workstation : CstAtt10 ≤ 1 non respectée)
6 Avertissement opérateur à la fermeture si ligne hors tolérance Réception prête à clôturer, 1 ligne article hors tolérance Clôture de la réception Message d'avertissement affiché à l'opérateur : « La réception a été clôturée mais les quantités reçues sont hors tolérance, voir avec le manager pour réguler les quantités attendues puis fermer l'ordre d'entrée »

2. Clôture de la réception — Contenu du REF

ID Description Préconditions Actions Résultat attendu Dév CDP
7 Zone de stockage présente pour chaque support Réception fournisseur, 3 palettes stockées en TK1, TK2, TK3 Clôture et envoi du REF Le REF contient pour chaque support sa zone de stockage (récupérée depuis le code emplacement)
8 Zone de stockage = "NON RANGEE" pour palettes hors ASRS (non-retour) Réception fournisseur, 3/5 palettes rangées en ASRS, 2 encore en transit au moment de la clôture Auto-close et envoi du REF REF envoyé immédiatement. Pour les 2 palettes non rangées : zone de stockage = "NON RANGEE"
9 REF unique par réception (pas de REF progressif) Réception avec plusieurs palettes rangées à des moments différents Clôture de la réception Un seul REF émis, contenant l'ensemble des supports

3. Clôture de la réception — Cas retour client (REF conditionné au rangement)

ID Description Préconditions Actions Résultat attendu Dév CDP
10 Retour, tous supports rangés ASRS Réception retour, CstAtt11 = true sur tous les supports, conditions §1.1 OK Auto-close Réception fermée, REF envoyé. CstAtt01 de la réception set à false à la clôture effective (quel que soit le chemin)
11 Retour, supports pas tous rangés — passage en « Clôture en cours » Réception retour, conditions §1.1 OK, mais 3/5 supports seulement rangés en ASRS Tentative de clôture (auto ou manuelle) Réception non fermée. CstAtt01 de la réception = true. Statut affiché « Clôture en cours », ligne en jaune. Pas de REF
12 Affichage standard avant tentative de clôture Réception retour en cours de traitement, aucune tentative de clôture encore déclenchée Ouvrir la vue des réceptions CstAtt01 de la réception vide. Affichage standard (pas de jaune)
13 Déblocage auto dès que le dernier support est rangé Suite du test 11. Dernier support entre en ASRS → CstAtt11 = true Event task finished Reception_Close_PR_V2 rejoué, condition satisfaite. Réception fermée, REF envoyé. CstAtt01 de la réception remis à false (plus de jaune dans la vue)
14 Cas rare — palette sortie avant clôture du REF Retour 15 palettes, la 1ère déjà ressortie (picking) quand la 15e est rangée Dernière palette rangée CstAtt11 resté à true sur la palette sortie. Condition §1.3.1 satisfaite. Clôture et REF OK
15 Palette refusée au PIE non supprimée — clôture impossible Retour 5 palettes, 4 rangées en ASRS (CstAtt11 = true), 1 refusée au PIE mais non retirée du WMS Tentative de clôture Clôture ne se fait jamais tant que la palette refusée est présente. Réception reste « Clôture en cours »
16 Palette refusée au PIE supprimée — clôture débloquée Suite du test 15, le client supprime la palette refusée du WMS Event task finished ou rejeu du WF Tous les supports restants ont CstAtt11 = true. Clôture et REF OK

4. Clôture des OE — Sans écart et écart dans la tolérance

ID Description Préconditions Actions Résultat attendu Dév CDP
17 Auto-close OE — réception parfaite Réception avec plusieurs OE, toutes quantités reçues = attendues Clôture de la réception Tous les OE auto-clôturés (AutoCloseInboundOrder), ROF envoyé pour chacun, OE auto-archivés (absents de la vue)
18 Auto-close OE — écart dans la tolérance (en moins) OE avec article A : attendu 100, reçu 95, tolérance 10% Clôture de la réception CstAtt01 de l'OE reste vide. OE auto-clôturé (custom : auto-close dans la tolérance). ROF envoyé. OE auto-archivé
19 Auto-close OE — écart dans la tolérance (en plus) OE avec article A : attendu 100, reçu 108, tolérance 10% Clôture de la réception CstAtt01 de l'OE reste vide. OE auto-clôturé. ROF envoyé avec quantité réelle (108). OE auto-archivé
20 Plusieurs OE sur une même réception — comportement mixte Réception avec 3 OE : OE1 parfait, OE2 dans la tolérance, OE3 hors tolérance Clôture de la réception OE1 et OE2 auto-clôturés et archivés. OE3 : CstAtt01 = true, reste visible en rouge (cf. §5)

5. Clôture des OE — Écart hors tolérance (rouge)

ID Description Préconditions Actions Résultat attendu Dév CDP
21 OE hors tolérance — CstAtt01 de l'OE = true, affichage rouge OE avec article A : attendu 100, reçu 150, tolérance 10% Clôture réception CstAtt01 de l'OE = true (posé par Reception_Close_PR_V2). REF envoyé avec quantité réelle (150). ROF bloqué (WF de clôture OE modifié). OE affiché en rouge dans la vue
22 OE hors tolérance — WF clôture OE bloque bien l'auto-close OE avec CstAtt01 de l'OE = true suite à une réception clôturée Passage du job d'auto-close OE L'OE n'est pas auto-clôturé. Reste ouvert et visible
23 Sélection de l'OE à flagger via combo article/lot (cas théorique) Réception avec 2 OE contenant un même combo article A + lot L1 (cas non prévu en production) Clôture réception, ligne (article A, lot L1) hors tolérance CstAtt01 de l'OE = true posé sur le premier OE trouvé (FirstOrDefault) ayant ce combo
24 Recherche par combo article/lot — distinction sur le lot Réception avec 2 OE : OE1 contient (article A, lot L1), OE2 contient (article A, lot L2). Seul le lot L1 est hors tolérance Clôture réception CstAtt01 de l'OE = true posé sur OE1 uniquement. OE2 non impacté
25 Bouton « Clôturer l'OE » visible pour non-opérateur CstAtt01 de l'OE = true, user = chef d'équipe / manager / admin Ouverture vue des OE Bouton « Clôturer l'OE » visible
26 Bouton « Clôturer l'OE » masqué pour opérateur standard CstAtt01 de l'OE = true, user = opérateur standard Ouverture vue des OE Bouton « Clôturer l'OE » masqué
27 Manager clôture manuellement OE hors tolérance CstAtt01 de l'OE = true, manager connecté. Régularisation SAP effectuée en amont Clic sur « Clôturer l'OE » OE clôturé, ROF envoyé