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