màj wiki avec retour MES lot-5 AD
This commit is contained in:
@@ -0,0 +1,769 @@
|
||||
## Résumé
|
||||
|
||||
Message custom **LOC** envoyé toutes les 5 minutes de EasyWMS vers SAP, contenant le delta des mouvements de HU (supports) sur la période. Ce message remplace les messages custom PCK et MOVE de l'AF (supprimés) et devient le **seul canal** de notification des mouvements de stock vers SAP (les STV et STC seront désactivés).
|
||||
|
||||
---
|
||||
|
||||
## Contexte
|
||||
|
||||
Limagrain (SAP) ne souhaite pas recevoir les STV standards (en delta +/-) car jugés non fiables en cas de perte de message. Le LOC transmet des **quantités absolues** que SAP prend pour argent comptant et compare à ses propres données.
|
||||
|
||||
Le LOC est un **fork fonctionnel du WSC** (image de stock complète) adapté pour ne remonter que le delta des 5 dernières minutes, et formaté selon un JSON spécifique attendu par SAP.
|
||||
|
||||
---
|
||||
|
||||
## Architecture technique
|
||||
|
||||
### Chaîne de traitement
|
||||
|
||||
Job (toutes les 5 min) → Workflow → Transaction custom (ex. LOC.SEND) → GNA → Requêtes WMS + Formatage JSON → POST API SAP
|
||||
|
||||
### Côté WMS
|
||||
|
||||
1. **Créer un Job** déclenché toutes les 5 minutes.
|
||||
|
||||
2. Ce job appelle un **Workflow custom** dont le seul rôle est de **créer une transaction custom** (ex. LOC.SEND).
|
||||
|
||||
3. Le Workflow et la transaction ne portent aucune logique métier côté WMS — toute la logique est dans le GNA.
|
||||
|
||||
|
||||
### Côté GNA
|
||||
|
||||
1. **Créer un nouveau script BOO** pour le message LOC.
|
||||
|
||||
2. Le GNA détecte la transaction custom LOC.SEND.
|
||||
|
||||
3. À réception de cette transaction, le script BOO :
|
||||
|
||||
- Collecte toutes les transactions WMS pertinentes sur le delta de temps (cf. §Transactions sources)
|
||||
|
||||
- Agrège les données par HU et détermine le code ACTION pour chaque mouvement
|
||||
|
||||
- Construit le JSON au format attendu par SAP (cf. §Format JSON)
|
||||
|
||||
- Effectue un **appel POST** vers l'API SAP (endpoint unique déjà en place sur git/develop)
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Paramètres d'import
|
||||
|
||||
| | | | |
|
||||
|---|---|---|---|
|
||||
|Réf.|Champ|Type|Description|
|
||||
|1|IV_LGNUM|CHAR 4|Numéro d'entrepôt (valeur fixe : "WF02") provenant de la config EasyS|
|
||||
|2|IV_TREATMENT_ID|CHAR 24|Horodatage de génération du LOC|
|
||||
|
||||
---
|
||||
|
||||
## Table IT_CREATE (1:n) — Champs
|
||||
|
||||
| | | | |
|
||||
|---|---|---|---|
|
||||
|Réf.|Champ|Type|Description|
|
||||
|1|MATNR|CHAR 40|Code produit SAP — vide si action B|
|
||||
|2|BATCHID|CHAR 10|Code lot SAP — vide si action B|
|
||||
|3|ACTION|CHAR 1|Code action : B, U, R, S, T, C, P|
|
||||
|4|ANFME|NUM 13.3|Quantité (absolue ou transférée selon action) — vide si action B ou U/R|
|
||||
|5|ALTME|CHAR 3|Unité de mesure (Ex : BAG, KG) — vide si action B|
|
||||
|6|VLPLA|CHAR 18|Zone de stockage origine|
|
||||
|7|NLPLA|CHAR 18|Zone de stockage destination|
|
||||
|8|VLENR|CHAR 20|Code HU (palette) source (SSCC)|
|
||||
|9|NLENR|CHAR 20|Code HU (palette) destination (SSCC)|
|
||||
|10|REASON|CHAR 4|Code raison scrap — uniquement pour action S (ZSC1 = scrapping normal)|
|
||||
|11|VBELN|—|Code livraison sortante SAP — uniquement pour action P|
|
||||
|12|POSNR|—|Ligne de livraison sortante SAP — uniquement pour action P|
|
||||
|
||||
---
|
||||
|
||||
## Codes ACTION
|
||||
|
||||
| | | |
|
||||
|---|---|---|
|
||||
|Code|Signification|Déclencheur|
|
||||
|**B**|Déplacement bin-to-bin|Déplacement de HU d'une zone à une autre|
|
||||
|**U**|Set to Unrestricted (déblocage)|Déblocage statut B6|
|
||||
|**R**|Set to Restricted (blocage)|Blocage statut B6|
|
||||
|**S**|Scrap quantity (suppression)|Suppression de stock / support|
|
||||
|**T**|Transfert inter-HU|Transfert de quantité entre deux HU|
|
||||
|**C**|Correction de poids|Ajustement de quantité (valeur absolue)|
|
||||
|**P**|Assignation client|Palette positionnée sur image de quai|
|
||||
|
||||
---
|
||||
|
||||
## Transactions WMS sources
|
||||
|
||||
| | | |
|
||||
|---|---|---|
|
||||
|Transaction WMS|Action LOC|Données à récupérer|
|
||||
|CON.MOVE|**B** (déplacement)|ContainerCode, zone de stockage origine, zone de stockage destination|
|
||||
|CON.LOCATE|**B** (déplacement)|Idem|
|
||||
|STK.MOVE|**B** ou **T**|ContainerCode source et destination. Si ContainerTo ≠ ContainerCode → ACTION=T avec quantité transférée|
|
||||
|STK.ADJ|**C** (correction)|ContainerCode, quantité absolue actuelle sur la HU après ajustement, UdM|
|
||||
|CST.STK|**U** ou **R**|ContainerCode, nouveau statut (B6 uniquement hors retour)|
|
||||
|STK.PICKING|**T** (transfert)|Container source, container destination (palette fille), quantité transférée|
|
||||
|CON.DELETE|**S** (suppression)|ContainerCode, quantité supprimée|
|
||||
|
||||
Vérifier si d'autres transactions sont utiles pour le LOC.
|
||||
|
||||
### Données stock/container à récupérer pour chaque ligne LOC
|
||||
|
||||
Pour chaque HU identifiée dans les transactions du delta, récupérer :
|
||||
|
||||
- **Code produit SAP** : attribut logistique LotCode du stock
|
||||
|
||||
- **Code lot SAP** : ItemCode du stock (= code article WMS)
|
||||
|
||||
- **Quantité** : quantité actuelle de la ligne de stock (UdM de base WMS = unité alternative SAP)
|
||||
|
||||
- **UdM** : BAG ou KG
|
||||
|
||||
- **Zone de stockage** : zone WMS du container (origine et destination)
|
||||
|
||||
- **Code support** : ContainerCode (SSCC)
|
||||
|
||||
- **Code livraison sortante** : ShippingOrderCode si action P
|
||||
|
||||
|
||||
### Filtre d'exclusion
|
||||
|
||||
**Exclure les palettes liées à une réception non fermée** (= dont le REF n'a pas encore été envoyé). Seules les HU déjà connues de SAP via un REF préalable doivent apparaître dans le LOC.
|
||||
|
||||
---
|
||||
|
||||
## Format JSON de sortie
|
||||
|
||||
`{ "IV_LGNUM": "WF02", "IV_TREATMENT_ID": "<HORODATAGE_GENERATION_LOC>", "IT_CREATE": [ { "MATNR": "<CODE_PRODUIT_SAP>", "BATCHID": "<LOT_SAP>", "ACTION": "<CODE_ACTION>", "ANFME": "<QUANTITE_OU_VIDE>", "ALTME": "<UDM_OU_VIDE>", "VLPLA": "<ZONE_STOCKAGE_ORIGINE>", "NLPLA": "<ZONE_STOCKAGE_DESTINATION>", "VLENR": "<CODE_SUPPORT_ORIGINE>", "NLENR": "<CODE_SUPPORT_DESTINATION>", "REASON": "<CODE_RAISON_OU_VIDE>", "VBELN": "<CODE_LIVRAISON_OU_VIDE>", "POSNR": "<LIGNE_LIVRAISON_OU_VIDE>" } ] }`
|
||||
|
||||
---
|
||||
|
||||
## Règles de remplissage par action
|
||||
|
||||
| | | | | | | |
|
||||
|---|---|---|---|---|---|---|
|
||||
|Champ|B (déplacement)|U/R (statut)|S (suppression)|T (transfert)|C (correction)|P (assignation client)|
|
||||
|MATNR|Vide|Code produit SAP|Code produit SAP|Code produit SAP|Code produit SAP|Vide|
|
||||
|BATCHID|Vide|Lot SAP|Lot SAP|Lot SAP|Lot SAP|Vide|
|
||||
|ACTION|B|U ou R|S|T|C|P|
|
||||
|ANFME|Vide|Vide|Qté supprimée|Qté transférée|Qté absolue comptée|Vide|
|
||||
|ALTME|Vide|UdM|UdM|UdM|UdM|Vide|
|
||||
|VLPLA|Zone origine|Zone actuelle|Zone actuelle|Zone HU source|Zone actuelle|Vide|
|
||||
|NLPLA|Zone destination|Vide|Vide|Zone HU destination|Vide|Image de quai|
|
||||
|VLENR|Code HU|Code HU|Code HU|Code HU source|Code HU|Code HU|
|
||||
|NLENR|Vide|Vide|Vide|Code HU destination|Vide|Vide|
|
||||
|REASON|Vide|Vide|ZSC1|Vide|Vide|Vide|
|
||||
|VBELN|Vide|Vide|Vide|Vide|Vide|Code livraison sortante|
|
||||
|POSNR|Vide|Vide|Vide|Vide|Vide|Ligne de livraison|
|
||||
|
||||
---
|
||||
|
||||
## Règles métier
|
||||
|
||||
### Déplacement (ACTION=B)
|
||||
|
||||
Déplacement de HU d'une zone à une autre. **Pas de quantité, pas de code article, pas de lot** — seuls les champs zone et support sont renseignés. Le contenu de la HU n'est pas rediscuté.
|
||||
|
||||
### Blocage/Déblocage (ACTION=R/U)
|
||||
|
||||
Hors flux retour, le seul statut autorisé est le **B6** (blocage logistique). Le LOC envoie R pour bloquer, U pour débloquer.
|
||||
|
||||
### Suppression/Scrap (ACTION=S)
|
||||
|
||||
REASON est renseigné **uniquement** pour cette action. Valeur : ZSC1 (scrapping normal).
|
||||
|
||||
### Transfert inter-HU (ACTION=T)
|
||||
|
||||
Source et destination **doivent être dans la même ligne** (VLENR + NLENR). ANFME = quantité transférée (pas le solde restant). Si le transfert passe par une étape intermédiaire (table de travail), transmettre chaque étape séparément avec un emplacement matérialisé.
|
||||
|
||||
**Cas picking :** 5 tâches alimentant la même palette fille = 5 lignes ACTION=T dans le même LOC, dans l'ordre chronologique.
|
||||
|
||||
**Création de palette au picking :** Si le SSCC en NLENR est inconnu de SAP, SAP crée automatiquement la HU (type palette standard). Le LOC ne crée que la structure palette — le stock est transféré depuis une palette source connue.
|
||||
|
||||
### Correction de quantité (ACTION=C)
|
||||
|
||||
Quantité **absolue** comptée/validée (pas un écart). SAP calcule le delta. REASON n'est pas renseigné.
|
||||
|
||||
### Assignation client (ACTION=P)
|
||||
|
||||
Déclencheur : palette physiquement positionnée sur l'**image de quai** (pas l'assignation logique). Les champs obligatoires sont :
|
||||
|
||||
- ACTION = P
|
||||
|
||||
- VLENR = Code HU
|
||||
|
||||
- NLPLA = Image de quai de la HU
|
||||
|
||||
- VBELN = Code livraison sortante SAP (= SorCode côté WMS)
|
||||
|
||||
- POSNR = Ligne de livraison sortante SAP (= ligne d'OS associée à l'article)
|
||||
|
||||
|
||||
Les champs MATNR, BATCHID, ANFME, ALTME, VLPLA, NLENR, REASON sont **vides** pour cette action.
|
||||
|
||||
---
|
||||
|
||||
## Horodatage
|
||||
|
||||
IV_TREATMENT_ID = horodatage du moment de **génération du LOC** (pas l'heure de chaque transaction individuelle). Toutes les lignes d'un même LOC partagent le même horodatage. Format limité à 24 caractères (CHAR 24).
|
||||
**Format** : YYYYMMDD
|
||||
|
||||
## Ordre des lignes
|
||||
|
||||
Les lignes dans IT_CREATE doivent être dans l'**ordre chronologique** des transactions WMS. SAP traite les lignes dans l'ordre du fichier.
|
||||
|
||||
---
|
||||
|
||||
## Désactivation STV et STC
|
||||
|
||||
### STV
|
||||
|
||||
Désactiver le post-processing des transactions STK.ADJ → plus de génération de message STV. Le LOC couvre ce besoin via ACTION=C.
|
||||
|
||||
**Vérifications préalables obligatoires :**
|
||||
|
||||
- Lister toutes les transactions qui génèrent un STV et confirmer que le LOC couvre chaque cas
|
||||
|
||||
- Vérifier que le middleware GNA n'a pas d'autre dépendance au STV
|
||||
|
||||
|
||||
### STC
|
||||
|
||||
Désactiver le post-processing des transactions CST.STK → plus de génération de message STC. Le LOC couvre le B6 via ACTION=R/U.
|
||||
|
||||
**Mêmes vérifications à effectuer que pour le STV.**
|
||||
|
||||
Documenter les résultats de cette analyse dans un commentaire de la tâche avant de procéder à la désactivation.
|
||||
|
||||
---
|
||||
|
||||
## Zones de stockage (VLPLA/NLPLA)
|
||||
|
||||
Les zones de stockage WMS doivent être découpées/créées pour correspondre au besoin du LOC :
|
||||
|
||||
Une table de correspondance est nécessaire car les codes zone WMS ne correspondent pas directement aux codes emplacement SAP. Cette table sera réalisée via un paramètre (ex : [TK_5_A:TK_5][TK_5_B:TK_5]).
|
||||
|
||||
Zones attendues par SAP :
|
||||
|
||||
- ASRS1 : correspond au TK1 (compartiment anoxie)
|
||||
|
||||
- ASRS2 : correspond au TK2 (compartiment du milieu)
|
||||
|
||||
- ASRS3 : correspond à la zone accessible du TK3 uniquement (grand compartiment)
|
||||
|
||||
- ASRS4 : correspond à la zone accessible du TK4 uniquement (grand compartiment)
|
||||
|
||||
- ASRS34 : correspond à la zone accessible des deux TK3 et TK4 (grand compartiment)
|
||||
|
||||
- PICKING : si présent sur un PK/TP
|
||||
|
||||
- QUAI : si présent sur un emplacement d’image de quai ou sur le quai
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Contraintes de longueur
|
||||
|
||||
| | | |
|
||||
|---|---|---|
|
||||
|Champ|Type|Longueur max|
|
||||
|IV_LGNUM|CHAR|4|
|
||||
|IV_TREATMENT_ID|CHAR|24|
|
||||
|MATNR|CHAR|40|
|
||||
|BATCHID|CHAR|10|
|
||||
|ACTION|CHAR|1|
|
||||
|ANFME|NUM|13.3 (13 entiers, 3 décimales)|
|
||||
|ALTME|CHAR|3|
|
||||
|VLPLA|CHAR|18|
|
||||
|NLPLA|CHAR|18|
|
||||
|VLENR|CHAR|20|
|
||||
|NLENR|CHAR|20|
|
||||
|REASON|CHAR|4|
|
||||
|
||||
---
|
||||
|
||||
## Critères d'acceptation
|
||||
|
||||
1. Un job WMS tourne toutes les 5 minutes et crée une transaction custom LOC.SEND.
|
||||
|
||||
2. Le GNA détecte cette transaction et génère un JSON LOC conforme au format spécifié.
|
||||
|
||||
3. Le JSON est envoyé en POST à l'endpoint SAP.
|
||||
|
||||
4. Les 7 codes ACTION (B, U, R, S, T, C, P) sont correctement générés selon le type de transaction WMS source.
|
||||
|
||||
5. **ACTION=B** : les champs ANFME, ALTME, MATNR, BATCHID, NLENR, REASON, VBELN, POSNR sont vides. Seuls VLPLA, NLPLA et VLENR sont renseignés.
|
||||
|
||||
6. **ACTION=U/R** : MATNR, BATCHID, ALTME, VLPLA, VLENR renseignés. ANFME, NLPLA, NLENR, REASON, VBELN, POSNR vides.
|
||||
|
||||
7. **ACTION=S** : REASON = ZSC1. MATNR, BATCHID, ANFME, ALTME, VLPLA, VLENR renseignés. NLPLA, NLENR, VBELN, POSNR vides.
|
||||
|
||||
8. **ACTION=T** : VLENR et NLENR renseignés dans la même ligne. ANFME = quantité transférée (pas un solde). MATNR, BATCHID, ALTME, VLPLA, NLPLA renseignés. REASON, VBELN, POSNR vides.
|
||||
|
||||
9. **ACTION=C** : ANFME = quantité absolue (pas un delta). MATNR, BATCHID, ALTME, VLPLA, VLENR renseignés. NLPLA, NLENR, REASON, VBELN, POSNR vides.
|
||||
|
||||
10. **ACTION=P** : VLENR, NLPLA (image de quai), VBELN (livraison sortante), POSNR (ligne de livraison) renseignés. MATNR, BATCHID, ANFME, ALTME, VLPLA, NLENR, REASON vides.
|
||||
|
||||
11. Les palettes liées à une réception non fermée (pas de REF envoyé) sont exclues du LOC.
|
||||
|
||||
12. Les lignes dans IT_CREATE sont dans l'**ordre chronologique** des transactions WMS.
|
||||
|
||||
13. IV_TREATMENT_ID = horodatage de génération du LOC (CHAR 24).
|
||||
|
||||
14. Si aucune transaction pertinente sur le delta → pas d'envoi de LOC.
|
||||
|
||||
15. Tous les champs respectent les contraintes de longueur (MATNR ≤ 40, BATCHID ≤ 10, VLENR/NLENR ≤ 20, VLPLA/NLPLA ≤ 18, REASON ≤ 4, ANFME = NUM 13.3).
|
||||
|
||||
16. STV et STC désactivés après validation de l'analyse d'impact.
|
||||
|
||||
17. Cas picking : N tâches alimentant la même palette fille = N lignes ACTION=T dans le même LOC, dans l'ordre chronologique.
|
||||
|
||||
18. Si le SSCC en NLENR est inconnu de SAP lors d'un ACTION=T, SAP crée automatiquement la HU — le LOC ne doit pas bloquer.
|
||||
|
||||
|
||||
---
|
||||
|
||||
# Cas de tests
|
||||
|
||||
## 1. Architecture & Job
|
||||
|
||||
### CT-01 — Déclenchement du job toutes les 5 minutes
|
||||
|
||||
**CA :** 1 **Préconditions :** Job LOC activé, WMS et GNA opérationnels. **Étapes :**
|
||||
|
||||
1. Observer le job LOC pendant 15 minutes.
|
||||
|
||||
2. Vérifier la création de transactions LOC.SEND dans le WMS.
|
||||
|
||||
|
||||
**Résultat attendu :** 3 transactions LOC.SEND créées à ~5 min d'intervalle.
|
||||
|
||||
---
|
||||
|
||||
### CT-02 — Le GNA détecte la transaction LOC.SEND et génère le JSON
|
||||
|
||||
**CA :** 2, 3 **Préconditions :** Au moins une transaction WMS pertinente existe sur le delta. **Étapes :**
|
||||
|
||||
1. Provoquer un mouvement de HU (ex. CON.MOVE).
|
||||
|
||||
2. Attendre le prochain cycle du job LOC.
|
||||
|
||||
3. Vérifier les logs du GNA.
|
||||
|
||||
|
||||
**Résultat attendu :** Le GNA détecte LOC.SEND, génère un JSON conforme et effectue un POST vers l'endpoint SAP. La réponse HTTP est 200.
|
||||
|
||||
---
|
||||
|
||||
### CT-03 — Aucune transaction sur le delta → pas d'envoi
|
||||
|
||||
**CA :** 14 **Préconditions :** Aucun mouvement WMS sur les 5 dernières minutes. **Étapes :**
|
||||
|
||||
1. Attendre le prochain cycle du job LOC.
|
||||
|
||||
2. Vérifier les logs du GNA.
|
||||
|
||||
|
||||
**Résultat attendu :** Aucun appel POST n'est effectué vers SAP. Le GNA logge l'absence de transactions.
|
||||
|
||||
---
|
||||
|
||||
## 2. ACTION=B — Déplacement bin-to-bin
|
||||
|
||||
### CT-10 — Déplacement via CON.MOVE
|
||||
|
||||
**CA :** 4, 5 **Préconditions :** HU HU-001 en zone TK_1, connue de SAP (REF envoyé). **Étapes :**
|
||||
|
||||
1. Exécuter un CON.MOVE de HU-001 de TK_1 vers TK_3.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
3. Inspecter le JSON envoyé.
|
||||
|
||||
|
||||
**Résultat attendu :**
|
||||
|
||||
`{ "ACTION": "B", "VLPLA": "TK_1", "NLPLA": "TK_3", "VLENR": "HU-001", "MATNR": "", "BATCHID": "", "ANFME": "", "ALTME": "", "NLENR": "", "REASON": "", "VBELN": "", "POSNR": "" }`
|
||||
|
||||
---
|
||||
|
||||
### CT-11 — Déplacement via CON.LOCATE
|
||||
|
||||
**CA :** 4, 5 **Préconditions :** HU HU-002 en zone PK_01, connue de SAP. **Étapes :**
|
||||
|
||||
1. Exécuter un CON.LOCATE de HU-002 vers QUAI_03.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Ligne ACTION=B identique en structure à CT-10, avec VLPLA=PK_01, NLPLA=QUAI_03, VLENR=HU-002. Tous les autres champs vides.
|
||||
|
||||
---
|
||||
|
||||
### CT-12 — Déplacement via STK.MOVE sans changement de HU
|
||||
|
||||
**CA :** 4, 5 **Préconditions :** HU HU-003 contenant du stock, ContainerTo = ContainerCode (même HU). **Étapes :**
|
||||
|
||||
1. Exécuter un STK.MOVE où ContainerTo = ContainerCode et la zone change.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Ligne ACTION=B (pas T). MATNR, BATCHID, ANFME, ALTME vides. Zones origine/destination renseignées.
|
||||
|
||||
---
|
||||
|
||||
## 3. ACTION=U/R — Blocage / Déblocage
|
||||
|
||||
### CT-20 — Blocage d'une HU (ACTION=R)
|
||||
|
||||
**CA :** 4, 6 **Préconditions :** HU HU-010 en zone TK_2, statut libre, connue de SAP. **Étapes :**
|
||||
|
||||
1. Exécuter un CST.STK passant HU-010 en statut B6.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :**
|
||||
|
||||
`{ "ACTION": "R", "MATNR": "<code_produit>", "BATCHID": "<lot>", "ALTME": "<udm>", "VLPLA": "TK_2", "VLENR": "HU-010", "ANFME": "", "NLPLA": "", "NLENR": "", "REASON": "", "VBELN": "", "POSNR": "" }`
|
||||
|
||||
---
|
||||
|
||||
### CT-21 — Déblocage d'une HU (ACTION=U)
|
||||
|
||||
**CA :** 4, 6 **Préconditions :** HU HU-010 en zone TK_2, statut B6, connue de SAP. **Étapes :**
|
||||
|
||||
1. Exécuter un CST.STK retirant le statut B6 de HU-010.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Idem CT-20 mais ACTION=U.
|
||||
|
||||
---
|
||||
|
||||
### CT-22 — Changement de statut hors B6 (hors retour) → pas de ligne LOC
|
||||
|
||||
**CA :** 6 **Préconditions :** HU HU-011, changement de statut autre que B6 (ex. F2, F9). **Étapes :**
|
||||
|
||||
1. Exécuter un CST.STK avec un statut retour.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Aucune ligne générée dans le LOC pour cette transaction.
|
||||
|
||||
---
|
||||
|
||||
## 4. ACTION=S — Suppression / Scrap
|
||||
|
||||
### CT-30 — Suppression d'un container (CON.DELETE)
|
||||
|
||||
**CA :** 4, 7 **Préconditions :** HU HU-020 en zone TK_4, contenant 150.000 BAG de produit MAT-A, lot LOT-1, connue de SAP. **Étapes :**
|
||||
|
||||
1. Exécuter un CON.DELETE sur HU-020.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :**
|
||||
|
||||
`{ "ACTION": "S", "MATNR": "MAT-A", "BATCHID": "LOT-1", "ANFME": "150.000", "ALTME": "BAG", "VLPLA": "TK_4", "VLENR": "HU-020", "REASON": "ZSC1", "NLPLA": "", "NLENR": "", "VBELN": "", "POSNR": "" }`
|
||||
|
||||
---
|
||||
|
||||
### CT-31 — REASON toujours ZSC1 pour action S
|
||||
|
||||
**CA :** 7 **Préconditions :** Plusieurs suppressions via CON.DELETE. **Étapes :**
|
||||
|
||||
1. Supprimer 2 containers différents.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Chaque ligne ACTION=S a REASON=ZSC1. Pas d'autre valeur.
|
||||
|
||||
---
|
||||
|
||||
## 5. ACTION=T — Transfert inter-HU
|
||||
|
||||
### CT-40 — Transfert via STK.MOVE avec changement de HU
|
||||
|
||||
**CA :** 4, 8 **Préconditions :** HU HU-030 (source) en zone TK_1, HU HU-031 (destination) en zone PK_02. Transfert de 50.000 KG de produit MAT-B, lot LOT-2. **Étapes :**
|
||||
|
||||
1. Exécuter un STK.MOVE avec ContainerTo ≠ ContainerCode.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :**
|
||||
|
||||
`{ "ACTION": "T", "MATNR": "MAT-B", "BATCHID": "LOT-2", "ANFME": "50.000", "ALTME": "KG", "VLPLA": "TK_1", "NLPLA": "PK_02", "VLENR": "HU-030", "NLENR": "HU-031", "REASON": "", "VBELN": "", "POSNR": "" }`
|
||||
|
||||
---
|
||||
|
||||
### CT-41 — Transfert via STK.PICKING
|
||||
|
||||
**CA :** 4, 8 **Préconditions :** HU source HU-040, palette fille HU-041. Picking de 20.000 BAG de MAT-C, lot LOT-3. **Étapes :**
|
||||
|
||||
1. Exécuter un STK.PICKING.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Ligne ACTION=T avec VLENR=HU-040, NLENR=HU-041, ANFME=20.000 (quantité transférée, pas le solde restant).
|
||||
|
||||
---
|
||||
|
||||
### CT-42 — Picking multiple : N tâches → N lignes ACTION=T
|
||||
|
||||
**CA :** 17 **Préconditions :** 3 tâches de picking alimentant la même palette fille HU-050 depuis 3 HU sources différentes. **Étapes :**
|
||||
|
||||
1. Exécuter les 3 pickings dans l'ordre : HU-051 → HU-050, HU-052 → HU-050, HU-053 → HU-050.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** 3 lignes ACTION=T dans IT_CREATE, dans l'ordre chronologique des pickings. Chaque ligne a NLENR=HU-050 et un VLENR différent.
|
||||
|
||||
---
|
||||
|
||||
### CT-43 — Transfert vers SSCC inconnu de SAP
|
||||
|
||||
**CA :** 18 **Préconditions :** Palette fille HU-060 nouvellement créée (SSCC inexistant côté SAP). **Étapes :**
|
||||
|
||||
1. Exécuter un picking vers HU-060.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** La ligne ACTION=T est générée normalement avec NLENR=HU-060. Le LOC ne bloque pas. SAP crée automatiquement la HU à réception.
|
||||
|
||||
---
|
||||
|
||||
### CT-44 — Transfert via étape intermédiaire (table de travail)
|
||||
|
||||
**CA :** 8 **Préconditions :** Transfert de HU-070 vers HU-071 passant par une table de travail TW_01. **Étapes :**
|
||||
|
||||
1. Exécuter les mouvements : HU-070 → TW_01, puis TW_01 → HU-071.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** 2 lignes distinctes dans le LOC, chacune avec un emplacement matérialisé (pas de fusion en une seule ligne).
|
||||
|
||||
---
|
||||
|
||||
## 6. ACTION=C — Correction de quantité
|
||||
|
||||
### CT-50 — Ajustement de stock via STK.ADJ
|
||||
|
||||
**CA :** 4, 9 **Préconditions :** HU HU-080 en zone TK_5, stock actuel 100.000 BAG de MAT-D, lot LOT-4. Ajustement à 95.000 BAG. **Étapes :**
|
||||
|
||||
1. Exécuter un STK.ADJ sur HU-080.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :**
|
||||
|
||||
`{ "ACTION": "C", "MATNR": "MAT-D", "BATCHID": "LOT-4", "ANFME": "95.000", "ALTME": "BAG", "VLPLA": "TK_5", "VLENR": "HU-080", "NLPLA": "", "NLENR": "", "REASON": "", "VBELN": "", "POSNR": "" }`
|
||||
|
||||
ANFME = quantité absolue après ajustement (95.000), pas le delta (-5.000).
|
||||
|
||||
---
|
||||
|
||||
### CT-51 — REASON vide pour action C
|
||||
|
||||
**CA :** 9 **Préconditions :** Ajustement de stock. **Étapes :** Idem CT-50.
|
||||
|
||||
**Résultat attendu :** Le champ REASON est vide (pas de code raison pour les corrections).
|
||||
|
||||
---
|
||||
|
||||
## 7. ACTION=P — Assignation client
|
||||
|
||||
### CT-60 — Palette positionnée sur image de quai
|
||||
|
||||
**CA :** 4, 10 **Préconditions :** HU HU-090 assignée à la livraison VBELN-001, ligne 010. Image de quai QUAI_07. **Étapes :**
|
||||
|
||||
1. Positionner physiquement HU-090 sur l'image de quai QUAI_07.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :**
|
||||
|
||||
`{ "ACTION": "P", "VLENR": "HU-090", "NLPLA": "QUAI_07", "VBELN": "VBELN-001", "POSNR": "010", "MATNR": "", "BATCHID": "", "ANFME": "", "ALTME": "", "VLPLA": "", "NLENR": "", "REASON": "" }`
|
||||
|
||||
---
|
||||
|
||||
### CT-61 — ACTION=P : champs MATNR, BATCHID, ANFME, ALTME, VLPLA, NLENR, REASON vides
|
||||
|
||||
**CA :** 10 **Préconditions :** Idem CT-60.
|
||||
|
||||
**Résultat attendu :** Vérifier explicitement que les 7 champs ci-dessus sont vides dans la ligne P.
|
||||
|
||||
---
|
||||
|
||||
## 8. Filtre d'exclusion
|
||||
|
||||
### CT-70 — HU liée à une réception non fermée exclue du LOC
|
||||
|
||||
**CA :** 11 **Préconditions :** HU HU-100 vient d'être réceptionnée, le REF n'a **pas** encore été envoyé à SAP. Un mouvement CON.MOVE est effectué sur HU-100. **Étapes :**
|
||||
|
||||
1. Déplacer HU-100.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Aucune ligne pour HU-100 dans le LOC.
|
||||
|
||||
---
|
||||
|
||||
### CT-71 — HU liée à une réception fermée (REF envoyé) incluse dans le LOC
|
||||
|
||||
**CA :** 11 **Préconditions :** HU HU-101 réceptionnée, REF envoyé et confirmé par SAP. Un mouvement est effectué sur HU-101. **Étapes :**
|
||||
|
||||
1. Déplacer HU-101.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** La ligne apparaît dans le LOC.
|
||||
|
||||
---
|
||||
|
||||
## 9. Ordre chronologique & Horodatage
|
||||
|
||||
### CT-80 — Lignes dans l'ordre chronologique
|
||||
|
||||
**CA :** 12 **Préconditions :** 3 transactions WMS effectuées dans l'ordre : CON.MOVE (t1), STK.ADJ (t2), STK.PICKING (t3). **Étapes :**
|
||||
|
||||
1. Exécuter les 3 transactions.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
3. Inspecter l'ordre des lignes dans IT_CREATE.
|
||||
|
||||
|
||||
**Résultat attendu :** Les lignes apparaissent dans l'ordre t1 → t2 → t3 (ACTION=B, puis C, puis T).
|
||||
|
||||
---
|
||||
|
||||
### CT-81 — IV_TREATMENT_ID = horodatage de génération
|
||||
|
||||
**CA :** 13 **Préconditions :** Transactions effectuées à des heures différentes sur le delta. **Étapes :**
|
||||
|
||||
1. Inspecter IV_TREATMENT_ID dans le JSON.
|
||||
|
||||
|
||||
**Résultat attendu :** IV_TREATMENT_ID correspond à l'heure de génération du LOC (pas l'heure d'une transaction individuelle). Toutes les lignes partagent le même horodatage. Longueur ≤ 24 caractères.
|
||||
|
||||
---
|
||||
|
||||
## 10. Contraintes de longueur
|
||||
|
||||
### CT-90 — Respect des longueurs max MII
|
||||
|
||||
**CA :** 15 **Préconditions :** Données de test avec des valeurs aux limites de longueur. **Étapes :**
|
||||
|
||||
1. Créer des données avec : MATNR de 40 caractères, BATCHID de 10 caractères, VLENR/NLENR de 20 caractères, VLPLA/NLPLA de 18 caractères.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Le JSON est généré sans troncature ni erreur. Les valeurs respectent les longueurs max.
|
||||
|
||||
---
|
||||
|
||||
### CT-91 — ANFME au format NUM 13.3
|
||||
|
||||
**CA :** 15 **Préconditions :** Quantité avec décimales (ex. 12345.678). **Étapes :**
|
||||
|
||||
1. Ajuster un stock à une quantité avec 3 décimales.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** ANFME formaté en NUM 13.3 (max 13 chiffres entiers, 3 décimales).
|
||||
|
||||
---
|
||||
|
||||
## 11. Désactivation STV / STC
|
||||
|
||||
### CT-100 — Plus de STV après désactivation
|
||||
|
||||
**CA :** 16 **Préconditions :** STV désactivé (post-processing STK.ADJ supprimé). **Étapes :**
|
||||
|
||||
1. Exécuter un STK.ADJ.
|
||||
|
||||
2. Vérifier qu'aucun message STV n'est généré.
|
||||
|
||||
3. Vérifier que le LOC contient bien une ligne ACTION=C.
|
||||
|
||||
|
||||
**Résultat attendu :** Pas de STV. Le LOC couvre le mouvement via ACTION=C.
|
||||
|
||||
---
|
||||
|
||||
### CT-101 — Plus de STC après désactivation
|
||||
|
||||
**CA :** 16 **Préconditions :** STC désactivé (post-processing CST.STK supprimé). **Étapes :**
|
||||
|
||||
1. Exécuter un CST.STK (blocage B6).
|
||||
|
||||
2. Vérifier qu'aucun message STC n'est généré.
|
||||
|
||||
3. Vérifier que le LOC contient bien une ligne ACTION=R.
|
||||
|
||||
|
||||
**Résultat attendu :** Pas de STC. Le LOC couvre le mouvement via ACTION=R.
|
||||
|
||||
---
|
||||
|
||||
## 12. Cas combinés / Scénarios de bout en bout
|
||||
|
||||
### CT-110 — LOC avec plusieurs actions dans le même delta
|
||||
|
||||
**CA :** 4, 12 **Préconditions :** Sur le même delta de 5 minutes, effectuer : un déplacement (B), un blocage (R), un picking (T), une correction (C). **Étapes :**
|
||||
|
||||
1. Exécuter les 4 opérations.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** Le JSON contient 4 lignes dans IT_CREATE, une par action, dans l'ordre chronologique. Chaque ligne respecte ses règles de remplissage propres.
|
||||
|
||||
---
|
||||
|
||||
### CT-111 — IV_LGNUM toujours "WF02"
|
||||
|
||||
**CA :** 2 **Préconditions :** Valeur configurée dans EasyS. **Étapes :**
|
||||
|
||||
1. Inspecter plusieurs JSON LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** IV_LGNUM = "WF02" dans tous les cas.
|
||||
|
||||
---
|
||||
|
||||
### CT-112 — HU multi-lignes de stock (point en attente #2)
|
||||
|
||||
**CA :** — **Préconditions :** HU contenant 2 lignes de stock (2 articles/lots différents). **Étapes :**
|
||||
|
||||
1. Effectuer un mouvement sur cette HU.
|
||||
|
||||
2. Attendre le cycle LOC.
|
||||
|
||||
|
||||
**Résultat attendu :** plusieurs entrées dans IT_CREATE
|
||||
|
||||
---
|
||||
|
||||
## Points en attente
|
||||
|
||||
| | | | |
|
||||
| --- | ----------------------------------------------------------------------------------------------------------------------- | ------------- | ---------- |
|
||||
| # | Point | En attente de | Impact dev |
|
||||
| 3 | Cas palette déposée sur image de quai → chargée → OS fermé → LOF/SOF envoyé avant le LOC (LOC ne mentionnera pas la HU) | Limagrain | Non |
|
||||
Reference in New Issue
Block a user