Files
mcp-wms-wiki/wiki/limagrain/03-picking/process-picking-pk.md
T
arthur 7496aafe64 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
2026-07-20 12:56:42 +02:00

327 lines
17 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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 |