lint(limagrain): corrections completes Phase 1+2
- Bloquants: mermaid 03-picking/_index reconstitue (archive 11-05), 13 liens vers pages squelette retires, 2 liens recibles (anoxie, application-dictionary) - Conventions: 910 em dashes -> tirets simples, 145 checklists -> puces question, 13 questions resolues barrees - Liens: 9 ancres reparees (slugs GitHub) - Delta: 12 standard_ref remappes, blocs Standard EasyWMS + sections References ajoutes, front matter complete - Glossaire: 15 termes standard deplaces en section rappel avec renvoi - Rapport: limagrain/_lint_report.md (Phase 1 + Phase 2 + re-scan final) - Inclut les pages des sessions precedentes non commitees + CLAUDE.md et consume.log en l'etat
This commit is contained in:
@@ -0,0 +1,326 @@
|
||||
---
|
||||
title: "Process de picking au poste de travail (PK)"
|
||||
tags: [picking, PK, opérateur, étiquetage, filmage, picking-négatif, MII, custom]
|
||||
status: draft
|
||||
standard_ref: concepts/picking.md
|
||||
jira_refs: [LIM-91, LIM-80, LIM-84, LIM-82, LIM-75, LIM-66, LIM-76, LIM-68, LIM-67, LIM-116]
|
||||
confluence_refs: []
|
||||
sources: ["Jira LIM-91 (lecture directe, en revue de code)", "Jira LIM-116 (lecture directe, revue de code)"]
|
||||
last_updated: 2026-07-20
|
||||
author: Arthur
|
||||
---
|
||||
|
||||
# Process de picking au poste de travail (PK)
|
||||
|
||||
> **Résumé** : workflow opérateur de picking au poste de travail (PK).
|
||||
> L'opérateur prélève les sacs d'une palette source vers une palette
|
||||
> fille (client), gère l'étiquetage (RFID + intercalaires MII), le
|
||||
> filmage et l'évacuation. Dernière étape de la chaîne picking.
|
||||
|
||||
> **Standard EasyWMS** : → voir [Picking](../../concepts/picking.md)
|
||||
> Le WF standard `WorkStation_Picking_Default` sert de socle ; toute la
|
||||
> logique Limagrain est construite en custom par-dessus.
|
||||
|
||||
> **Statut (LIM-91)** : **En revue de code** (assignée Maxime Halgand).
|
||||
> Implémentation livrée le 16/07, revue de code du 17/07 avec plusieurs
|
||||
> corrections en attente (voir Points d'attention). Le contenu ci-dessous
|
||||
> reflète l'implémentation en cours, à reconfirmer à la validation.
|
||||
|
||||
## Positionnement dans la chaîne picking
|
||||
|
||||
Ce ticket est l'étape finale de la chaîne :
|
||||
|
||||
- [LIM-80](job-assignation-pk.md) assignation OS → PK (génère les tâches)
|
||||
- [LIM-84](sequencage-tk-ps.md) séquençage TK → PS (écrit `Line.CstAtt`)
|
||||
- [LIM-82](placement-ps-pk.md) placement PS → PK (choix de table, buffers)
|
||||
- **LIM-91 (cette page)** : picking effectif au PK → étiquetage → filmage
|
||||
→ évacuation
|
||||
|
||||
Le périmètre commence à la **détection de la palette source sur une
|
||||
table du PK** et se termine à l'**évacuation de la palette fille**.
|
||||
|
||||
Hors périmètre (couvert ailleurs) : tri/séquençage (LIM-84), placement et
|
||||
ping-pong (LIM-82), assignation PK (LIM-80), conditions de déclenchement
|
||||
du picking négatif (LIM-75).
|
||||
|
||||
## Architecture du poste
|
||||
|
||||
Le picking se fait toujours sur **un seul poste = 3 tables (TP)** ;
|
||||
jamais sur les 6 TP d'un îlot en même temps. Contrainte d'adjacence :
|
||||
`TABLE_GAUCHE ←→ TABLE_CENTRE ←→ TABLE_DROITE` (gauche et droite **non**
|
||||
adjacentes). Détail dans [Placement PS → PK](placement-ps-pk.md).
|
||||
|
||||
- Une palette ne se déplace **jamais** d'une table à une autre (ni
|
||||
opérateur, ni AGV) : elle arrive sur une table et n'en repart que pour
|
||||
évacuation.
|
||||
- Les **big-bags ne transitent jamais par les PK** : expédiés en palettes
|
||||
complètes via le flux shipping direct. Seuls les sacs sont prélevés.
|
||||
- Équipement par poste : 1 poste léger EasyWMS sur 2 écrans, 1 imprimante
|
||||
Zebra (HU RFID), 1 imprimante A4, 1 douchette multi-format.
|
||||
|
||||
Le process démarre en mode **Tâches automatiques** sur PC (même mode que
|
||||
la réception).
|
||||
|
||||
## Spécifications fonctionnelles
|
||||
|
||||
### Picking direct
|
||||
|
||||
Cas standard : l'opérateur prélève les sacs de la palette source (déjà
|
||||
sur une table adjacente à la palette fille) et les dépose sur la palette
|
||||
fille, confirme, puis la source est évacuée (retour ASRS si stock
|
||||
restant) ou mise en attente si d'autres tâches l'utilisent. Le ping-pong
|
||||
gauche/droite est géré par LIM-82.
|
||||
|
||||
Palette **multi-commandes** : si la source a encore des tâches pour
|
||||
d'autres OS, elle est marquée `MULTI_COMMANDE` et envoyée vers un buffer
|
||||
ES (LIM-82).
|
||||
|
||||
### Picking négatif
|
||||
|
||||
Optimisation physique : au lieu de déplacer les N sacs à expédier,
|
||||
l'opérateur déplace les sacs **qui restent** (moins nombreux) vers une
|
||||
autre palette. Toujours sur la **table du centre**, une seule palette en
|
||||
picking négatif à la fois. Un nouveau SSCC est généré pour la palette
|
||||
d'excédent (retour ASRS) et une étiquette RFID lui est imprimée.
|
||||
|
||||
Les **conditions de déclenchement** sont évaluées en amont (LIM-75 /
|
||||
LIM-84), pas dans ce workflow : `QttyNegPick.PickingPercent` (défaut 50),
|
||||
`QttyNegPick.MinCompletePercent` (défaut 55) et poids unitaire du sac
|
||||
≥ 7 kg. Le dispatcher standard route selon le `TaskType` déjà déterminé
|
||||
(pas de custom ici). La fusion standard neg+ord sur la même ligne de
|
||||
commande est déjà gérée par EasyWMS.
|
||||
|
||||
### Verrou HORS TOLERANCE et recomptage
|
||||
|
||||
Si une palette source porte le verrou « HORS TOLERANCE » (posé au PIE,
|
||||
[LIM-66](../01-inbound/controle-qualite-reception.md)), un **recomptage
|
||||
obligatoire** est déclenché avant le picking :
|
||||
|
||||
- Stock suffisant après inventaire → assignation maintenue, picking
|
||||
continue, verrou retiré sur la palette comptée.
|
||||
- Stock insuffisant → réassignation sur une autre palette + retrait du
|
||||
verrou.
|
||||
|
||||
Palette `MULTI_COMMANDE` revenant pour un autre OS : **pas besoin de
|
||||
recompter** (le premier recomptage fait foi).
|
||||
|
||||
### Étiquetage au picking
|
||||
|
||||
Dépend de la **classe de commande**, détectée via le RUT
|
||||
(`OutboundType = 0`, `AccountCode = MII`, `OutboundClassCode = MII`).
|
||||
|
||||
- **MII / multi-lots** : 1 étiquette HU **RFID** (palette mère physique,
|
||||
à chaque nouvelle palette) + 1 étiquette HU **sans RFID** (intercalaire
|
||||
/ palette fille, à chaque nouvelle ligne de stock flaggée). Pas de HU
|
||||
imbriquée : le **SSCC virtuel** de la palette fille est porté par le
|
||||
`CstAtt2` de la **ligne de stock** (ressource `SSCC MII [CST 2]`).
|
||||
- **Non-MII (ou MII mono-lot)** : une seule étiquette HU RFID, pas
|
||||
d'intercalaire.
|
||||
|
||||
Les rapports d'étiquette réutilisent ceux de
|
||||
[LIM-68](../01-inbound/etiquette-rfid.md) (mono/multiref RFID, monoref
|
||||
sans RFID pour l'intercalaire).
|
||||
|
||||
**Flag `CstAtt14` Container** (`true` après étiquetage au PK) consommé en
|
||||
aval par l'**étiqueteuse automatique au poste de sortie TK** :
|
||||
`true` → n'imprime pas ; `false` → imprime puis passe à `true` ;
|
||||
`error` → échec impression. Voir [AD Customs](../07-admin/ad-customs.md).
|
||||
|
||||
> **Messagerie carton (phase 1)** : aucun traitement spécifique. Les
|
||||
> supports suivent le flux client déjà en place et retournent à l'ASRS
|
||||
> (pas d'emplacement au sol, pas de SSCC colis, pas de poumon
|
||||
> transporteur).
|
||||
|
||||
### Filmage avant évacuation
|
||||
|
||||
Avant chaque évacuation de palette fille, l'opérateur choisit le
|
||||
programme de filmage via un prompt. Valeur stockée dans le **`CstAtt05`
|
||||
Container** et transmise en custom data à Galileo (TMS), qui arrête les
|
||||
rouleaux et lance le programme. Choix **obligatoire** (« 0 - pas de
|
||||
filmage » possible), **toujours proposé** à l'opérateur (pas de
|
||||
pré-sélection par espèce/contenant).
|
||||
|
||||
Programmes : `0` (pas de filmage), `A-H` selon espèce (Tournesol /
|
||||
Maïs & Blé) × contenant (Sacs / Big Bag) × mode (Complet / Réduit).
|
||||
Détail dans [Stations picking](stations-picking.md).
|
||||
|
||||
### Évacuation et retour ASRS
|
||||
|
||||
- **Palette fille** : tâche AGV PK → Entrée TK, replacement **direct** en
|
||||
zone client / défragmentation de l'ASRS (pas de stockage temporaire).
|
||||
Le passage en « conteneur client » est remonté à SAP via le **LOC**
|
||||
(`ACTION=P`, delta 5 min, [LIM-76](../06-erp-interface/loc-message-periodique.md)).
|
||||
- **Palette source** : retour ASRS si stock restant ; si vidée, remise
|
||||
manuelle sur la pile de palettes vides (pas de tâche AGV).
|
||||
- Les transferts inter-HU au picking génèrent des lignes `ACTION=T` dans
|
||||
le LOC.
|
||||
|
||||
> L'opérateur ne déplace **jamais** de sacs d'une TP à une autre (sacs de
|
||||
> 25 à 50 kg). Garanti par le placement LIM-82.
|
||||
|
||||
### Mouvements manuels du poste (appeler / renvoyer) - LIM-116
|
||||
|
||||
Les actions standard « **Appeler** » (faire venir un conteneur au poste)
|
||||
et « **Renvoyer conteneur** » sont customisées au PK pour tenir compte
|
||||
des **AGV** et du besoin de **filmage** des palettes (LIM-116, LOT 3).
|
||||
|
||||
- **Renvoi manuel - bouton « Stocker support »** : avant le calcul de la
|
||||
destination, l'opérateur choisit le **programme de filmage** (même
|
||||
sélection que [LIM-67](../01-inbound/reception-fournisseur.md), WF
|
||||
`CST_Workstation_Wrapping_UI`). WF modifié : `Return_ContainerFromPKStation_UI`.
|
||||
- **Renvoi automatique (plus de tâches)** : dans le process tâche
|
||||
automatique du poste, quand le conteneur est renvoyé parce qu'il n'a
|
||||
**plus de tâches**, la sélection du **programme de filmage** est demandée
|
||||
de la même manière. WF modifié : `Task_AutomaticPicking_UI`.
|
||||
- **Destination du retour (PIE de filmage)** : le retour d'une palette
|
||||
depuis le PK passe par le **custom de sélection du PIE** (PIE de
|
||||
ré-insertion `PIE_ENTRY_PK`, défaut PIE02, pour que la palette soit
|
||||
filmée). Une valeur a été ajoutée au `ProcessContext` de
|
||||
`Container_MoveToStationTypeCodeListOrReject` (et de
|
||||
`Container_CloseClientContainerOnMP_PR`) pour piloter ce choix - même WF
|
||||
de destination que le [rejet PIE](../02-stockage/rejet-pie.md).
|
||||
- **Capacité des buffers PK → PK** : la génération de mouvement depuis le
|
||||
picking (`Task_GenerateMovement_PR_V2`) gère la capacité des buffers
|
||||
quand une palette va d'un poste de picking à un autre (cf. buffers ES,
|
||||
[Placement PS → PK](placement-ps-pk.md)).
|
||||
|
||||
### Cas 100 % : tâche de shipping, pas de picking
|
||||
|
||||
Quand la quantité assignée sur une palette source correspond à **100 % de
|
||||
son stock**, on génère une **tâche de shipping** (pas de picking) :
|
||||
inutile de déplacer tous les sacs pour rebaptiser la palette
|
||||
(décision Vincent Charvet, 02/07). Solution testée : activer « Expédier
|
||||
uniquement conteneur complet » ; en dessous de la valeur « palette
|
||||
pleine » de la conversion de support, le WMS tente le picking négatif si
|
||||
les critères sont réunis, sinon la palette est reprise par le calcul
|
||||
global d'optimisation du volume.
|
||||
|
||||
### Modes opératoires
|
||||
|
||||
Fonctionne en **Full AGV**, **Mixte** (AGV + caristes) et **Full TRF**
|
||||
(4 caristes, mode dégradé, finalisation manuelle du module AGV). Le
|
||||
workflow opérateur au PK est **identique** quel que soit le mode ; seul
|
||||
le transport physique change.
|
||||
|
||||
## Implémentation (revue de code en cours)
|
||||
|
||||
Custom construit au-dessus du framework standard `WorkStation_Picking_Default`
|
||||
→ `Task_Automatic_PickingProcessType_UI` → `Expedition_Picking_UI_V1`.
|
||||
|
||||
### Workflows
|
||||
|
||||
| Workflow | Modification |
|
||||
|---|---|
|
||||
| `Task_AutomaticPicking_SelectTask_PR` | Si verrou « HORS TOLERANCE » → appelle `CST_Count_Picking_UI` (inventaire), puis relit les données du conteneur pour décider si la tâche de picking reste possible |
|
||||
| `CST_Count_Picking_UI` | Compte chaque ligne de stock, affiche les infos utiles au client, message de confirmation avant ajustement ; corrige le process de retour |
|
||||
| `Task_AutomaticPicking_UI` | Appelle `CST_Container_Picking_Options` (bouton « Retour » si stock, « Retirer » si vide) |
|
||||
| `Expedition_Picking_GetInitialParameters_PR` | Ajout de `OutboundClassCode` à la query |
|
||||
| `Expedition_Picking_ExecutePicking_UI` | Commandes MII : pose un code conteneur virtuel sur chaque ligne de stock, sauvé dans `CstAtt2` de stock, imprime l'étiquette correspondante |
|
||||
| `Expedition_Picking_Finish_UI` | Appelle le WF de filmage (wrapping) à la fermeture du conteneur client |
|
||||
| `Expedition_Picking_RequestProduct_UI_V1` | Dialog `CST_Picking_AutoReadQuantity_Prompt_V1` + paramètre poids produit |
|
||||
| `Expedition_Picking_AutoreadQuantity_UI_V2` | Dialog `CST_Picking_ManualReadQuantity_Prompt_V2` + paramètre poids produit |
|
||||
| `Container_MoveContainerListToLostAndFound` | Si conteneur vide → suppression au lieu d'envoi en Lost & Found |
|
||||
| `PickingStation_RemoveOrReturnContainer_UI` | Appelle `CST_Container_Picking_Options` (option « Retirer » seule, conteneurs vides) |
|
||||
| `PrintLabels_PrintSSCCList_PR` | Appelle le WF custom `CST_PrintRFIDLabel` |
|
||||
| `PrintLabels_AutoPrintOnCloseClientContainer_PR` | Récupère l'imprimante et appelle `CST_PrintRFIDLabel` |
|
||||
|
||||
### Dialogs
|
||||
|
||||
| Dialog | Rôle |
|
||||
|---|---|
|
||||
| `CST_Count_Picking_GetQuantity` | Demande à l'opérateur de compter le stock de la palette |
|
||||
| `CST_Container_Picking_Options` | Clone de `Container_Picking_Options` + paramètre bouton retour |
|
||||
| `CST_Picking_ManualReadQuantity_Prompt_V2` | Clone + poids produit mesuré |
|
||||
| `CST_Picking_AutoReadQuantity_Prompt_V1` | Clone + poids produit mesuré |
|
||||
|
||||
### Vues et ressources
|
||||
|
||||
- Vue `StockVList` : ajout de `CstAtt2` (SSCC MII).
|
||||
- Ressources : `CST_Stock_CustomAttribute2` (« SSCC MII [CST 2] »),
|
||||
`CST_MeasuredProductWeight_Prompt`, `CST_Alias_Prompt` (« Code lot
|
||||
officiel »), `Product_Prompt` (« Code lot SAP »), `Shared_Alias`,
|
||||
`Source_Prompt` (« Description courte SAP »),
|
||||
`CST_Container_RemoveQuestion_1`, `CST_Container_StoreQuestion_1`.
|
||||
|
||||
## CstAtt impliqués
|
||||
|
||||
| CstAtt | Entité | Donnée |
|
||||
|---|---|---|
|
||||
| `CstAtt05` | Container | Programme de filmage (0, A-H), transmis à Galileo |
|
||||
| `CstAtt06` | Container | Code PK assigné |
|
||||
| `CstAtt14` | Container | Flag étiquetage PK (`true`/`false`/`error`) - LIM-91 |
|
||||
| `CstAtt02` | Stock (StockLine) | SSCC virtuel palette MII - LIM-91 |
|
||||
|
||||
> `CstAtt14` a remplacé `CstAtt13` pour l'étiquetage (CstAtt13 déjà
|
||||
> utilisé pour le code OE) - décision 01/07. Voir
|
||||
> [AD Customs](../07-admin/ad-customs.md).
|
||||
|
||||
## Communication ERP
|
||||
|
||||
| Message | Direction | Déclencheur |
|
||||
|---|---|---|
|
||||
| ~~MOV~~ | ~~WMS → SAP~~ | **Annulé** (jugé inutile, décision client) |
|
||||
| LOC (`ACTION=P`) | WMS → SAP | Passage en conteneur client (delta 5 min) |
|
||||
| LOC (`ACTION=T`) | WMS → SAP | Transfert inter-HU au picking (delta 5 min) |
|
||||
|
||||
## Points d'attention
|
||||
|
||||
⚠️ **Revue de code en cours (17/07)** - corrections en attente :
|
||||
|
||||
- `PrintLabels_PrintSSCCList_PR` : arrêter la boucle si un SSCC est vide
|
||||
(transition depuis « Set current SSCC »).
|
||||
- `PrintLabels_AutoPrintOnCloseClientContainer_PR` : la transaction
|
||||
`CON.PRINT` puis l'appel à `CST_PrintLabel` provoquent une **double
|
||||
impression**.
|
||||
- `Expedition_Picking_RequestProduct_UI_V1` / `AutoreadQuantity_UI_V2` :
|
||||
`CustomAttribute1` non mappé, poids produit non affiché.
|
||||
- En **picking négatif**, les écrans sont différents (pas de poids
|
||||
produit) - à harmoniser.
|
||||
|
||||
⚠️ **Demande d'optimisation (Justine, 16/07)** à intégrer :
|
||||
|
||||
- Remplacer l'écran « Stocker support » de la palette mère par un écran
|
||||
de filmage, et distinguer clairement (texte + couleur) l'écran de
|
||||
filmage palette mère vs palette client.
|
||||
- La palette client doit passer par **PIE02** et non PIE01 (pour pouvoir
|
||||
être filmée).
|
||||
|
||||
> → Le filmage sur « Stocker support » et le passage par le PIE de retour
|
||||
> (`PIE_ENTRY_PK`, PIE02) sont **livrés dans LIM-116** (voir
|
||||
> [Mouvements manuels du poste](#mouvements-manuels-du-poste-appeler--renvoyer---lim-116)).
|
||||
> Reste à confirmer la distinction visuelle (texte + couleur) mère vs client.
|
||||
|
||||
⚠️ **Correction temporaire (17/07, LIM-116)** : un fix a été posé sur le
|
||||
mouvement `MP → PE` ; il sera **retiré** une fois la gestion complète des
|
||||
mouvements `MP → PK` en place.
|
||||
|
||||
⚠️ L'impression de l'étiquette standard à la fermeture du conteneur
|
||||
client a été retirée (elle s'ajoutait à tort à l'étiquette custom).
|
||||
|
||||
## Questions ouvertes
|
||||
|
||||
- Messagerie - choix du poumon : afficher uniquement les poumons
|
||||
compatibles avec le transporteur, ou tous ? Ou retour ASRS pour le flux
|
||||
classique ? (@Justine)
|
||||
- Recomptage HORS TOLERANCE : dialog retenu = `CST_Count_Picking_GetQuantity`
|
||||
(custom) ; confirmer l'ergonomie finale avec le client (@Justine)
|
||||
- Étiquetage intercalaire (HU fille sans RFID, MII/multi-lots) : format
|
||||
et rapport Zebra à créer (tâche à écrire par Arthur avec modèle rapport)
|
||||
|
||||
## Historique des modifications
|
||||
|
||||
| Date | Auteur | Modification |
|
||||
|------|--------|--------------|
|
||||
| 2026-07-17 | Arthur | Création depuis LIM-91 (lecture directe, en revue de code) : workflow opérateur PK, picking direct/négatif, HORS TOLERANCE, étiquetage MII (Stock CstAtt2 SSCC + CstAtt14), filmage CstAtt05, évacuation, cas 100 % → shipping, implémentation (WF/dialogs/vues/ressources), corrections revue de code 17/07 + optim Justine |
|
||||
| 2026-07-20 | Arthur | Ajout LIM-116 (LOT 3, lecture directe + revue de code) : nouvelle section « Mouvements manuels du poste (appeler / renvoyer) » - filmage sur « Stocker support » (`Return_ContainerFromPKStation_UI`) et sur renvoi automatique sans tâches (`Task_AutomaticPicking_UI`), sélection PIE de retour via `ProcessContext` (`Container_MoveToStationTypeCodeListOrReject` + `Container_CloseClientContainerOnMP_PR`, PIE_ENTRY_PK/PIE02), capacité buffers PK → PK (`Task_GenerateMovement_PR_V2`) ; optim Justine 16/07 marquée livrée par LIM-116 ; caveat fix temporaire MP → PE ; jira_refs +LIM-116/LIM-67, sources, last_updated |
|
||||
|
||||
## Références
|
||||
|
||||
| Source | Type | Date |
|
||||
|--------|------|------|
|
||||
| [LIM-91](https://easywmsfrance.atlassian.net/browse/LIM-91) | Ticket Jira (en revue de code) | 2026 |
|
||||
| Revue de code LIM-91 (M. Halgand, V. Charvet) | Implémentation + revue | 2026-07-16/17 |
|
||||
| [LIM-80](https://easywmsfrance.atlassian.net/browse/LIM-80) / [LIM-84](https://easywmsfrance.atlassian.net/browse/LIM-84) / [LIM-82](https://easywmsfrance.atlassian.net/browse/LIM-82) | Chaîne picking amont | 2026 |
|
||||
| [LIM-116](https://easywmsfrance.atlassian.net/browse/LIM-116) | Ticket Jira (LOT 3, mouvements manuels station picking - filmage retour + capacité buffers, attente déploiement test) | 2026-07 |
|
||||
| Revue de code LIM-116 (V. Charvet, M. Halgand) | Implémentation + revue (commit LOT3 e79f385242) | 2026-07-15/17 |
|
||||
| [LIM-67](https://easywmsfrance.atlassian.net/browse/LIM-67) | Ticket Jira (sélection programme filmage `CST_Workstation_Wrapping_UI`) | 2026 |
|
||||
Reference in New Issue
Block a user