Votre modèle de données pour la gestion d’entrepôt
Votre modèle de données pour la gestion d’entrepôt
- Attributs recommandés pour une analyse complète
- Activités clés à suivre dans votre processus
- Conseils pour extraire les données de SAP EWM
Attributs de gestion d’entrepôt
| Nom | Description | ||
|---|---|---|---|
| Warehouse Order WarehouseOrder | Identifiant unique d’un Warehouse Order, qui regroupe plusieurs tâches d’entrepôt à effectuer par une ressource. | ||
| Description Le Warehouse Order sert d’identifiant principal du cas pour suivre de bout en bout le processus de manutention des marchandises dans l’entrepôt. Il représente un lot de travail, par exemple le prélèvement d’articles pour une livraison sortante ou la mise en stock de marchandises reçues. Chaque Warehouse Order comprend une ou plusieurs tâches d’entrepôt. Dans le Process Mining, l’analyse par Warehouse Order donne une vue complète du cycle de vie d’un lot de travail précis. Elle aide à repérer les goulots d’étranglement, à mesurer les temps de cycle globaux entre la création et la fin, et à comprendre l’ensemble des activités associées à une instruction logistique. Pourquoi est-ce important ? Cet identifiant central relie toutes les activités d’entrepôt associées. Il permet d’analyser le processus de bout en bout et de mesurer le temps de cycle pour une seule unité de travail. Où trouver ces données Cet identifiant se trouve généralement dans la table d’en-tête des Warehouse Orders de SAP EWM, par exemple /SCWM/WHO. Exemples 200000145200000146200000147 | |||
| Dernière mise à jour des données LastDataUpdate | Horodatage indiquant la dernière actualisation des données de cet enregistrement depuis le système source. | ||
| Description Cet attribut indique la date de la dernière extraction des données depuis le système source. Il précise à quel point les données analysées sont récentes. Pour prendre des décisions éclairées à partir d’une analyse ou d’un Dashboard, il est essentiel de connaître la date des données. Cet horodatage permet de savoir si les informations sont en temps réel ou correspondent à un instant précis, et de tenir compte de leur ancienneté. Pourquoi est-ce important ? Cet attribut indique l’actualité des données et permet de savoir à quel point l’analyse du processus reflète la situation présente. Où trouver ces données Ce champ de métadonnées est généralement généré et ajouté lors de l’extraction des données (ETL). Il indique l’horodatage du chargement. Exemples 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| Heure de début EventTime | Horodatage indiquant le début de l’activité ou de l’événement. | ||
| Description Cet attribut enregistre la date et l’heure exactes auxquelles une activité d’entrepôt a eu lieu. Il sert principalement à ordonner les événements et à calculer les durées qui les séparent. En Process Mining, l’heure de début est indispensable pour établir la chronologie des événements de chaque cas. Elle sert à calculer les temps de cycle, d’attente et de traitement, nécessaires à l’analyse des performances, au repérage des goulots d’étranglement et au suivi des SLA. Pourquoi est-ce important ? Cet horodatage permet d’ordonner les événements chronologiquement et de calculer les indicateurs de performance liés au temps, notamment les temps de cycle et les durées. Où trouver ces données Cet attribut se trouve généralement dans les tables d’événements ou de confirmations, comme /SCWM/ORDIM_C (par exemple, le champ CONF_TIMESTAMP), ou dans les journaux de changements de statut associés aux Warehouse Orders et aux tâches. Exemples 2023-10-26T10:00:00Z2023-10-26T10:15:30Z2023-10-26T11:20:00Z | |||
| Nom de l’activité ActivityName | Nom de l’activité ou de l’événement précis survenu dans la gestion de l’entrepôt, par exemple « Tâche de prélèvement créée » ou « Sortie de marchandises comptabilisée ». | ||
| Description Cet attribut décrit une étape ou un événement du processus de gestion de l’entrepôt. Ces activités constituent les éléments de base de la cartographie du processus : création, confirmation, emballage, chargement et mouvements de marchandises, par exemple. L’analyse de leur séquence et de leur fréquence est fondamentale en Process Mining. Elle permet de visualiser le flux du processus, de repérer les parcours fréquents ou rares, de détecter les écarts par rapport à la procédure standard et d’identifier les étapes qui entraînent des retards ou des reprises. Pourquoi est-ce important ? Cet attribut définit les étapes du processus. Il constitue la base de sa cartographie et permet d’analyser le flux, les écarts et les goulots d’étranglement. Où trouver ces données Cet attribut est déduit des changements de statut, des messages d’événement ou des journaux de transactions liés aux Warehouse Orders et aux tâches, dans des tables telles que /SCWM/ORDIM_C (confirmations), ou en interprétant les champs de statut dans /SCWM/WHO et /SCWM/ORDIM_O. Exemples Tâche de prélèvement confirméeTâche de mise en stock crééeEntrée de marchandises comptabiliséeWarehouse Order terminé | |||
| Système source SourceSystem | Identifie le système source dont les données ont été extraites, par exemple l’instance de production SAP EWM. | ||
| Description Cet attribut indique le système de référence d’où proviennent les données de gestion de l’entrepôt. Dans une entreprise qui utilise plusieurs systèmes, préciser leur origine est essentiel pour assurer la traçabilité et fournir le contexte nécessaire. Pour l’analyse, cet attribut permet de distinguer les processus qui couvrent plusieurs systèmes ou de comparer ceux de différentes instances, par exemple des systèmes distincts selon les régions. La provenance des données est ainsi clairement établie et vérifiable. Pourquoi est-ce important ? Cet attribut assure la traçabilité et fournit le contexte nécessaire, notamment dans les environnements qui utilisent plusieurs instances SAP ou des systèmes intégrés. La provenance des données reste ainsi clairement établie. Où trouver ces données Il s’agit généralement d’une valeur statique ajoutée lors du processus d’extraction, de transformation et de chargement des données (ETL). Elle identifie l’instance SAP S/4HANA ou EWM concernée. Exemples SAP_EWM_PROD_EUS4H_US_100EWM_APAC_PRD | |||
| Heure de fin EventEndTime | Horodatage indiquant la fin d’une activité ou d’un événement. | ||
| Description Cet attribut enregistre la date et l’heure auxquelles une activité d’entrepôt s’est terminée. Pour les événements ponctuels, il correspond souvent à l’heure de début, mais peut être différent pour les activités dont la durée est mesurable, comme l’emballage ou le chargement. Une heure de fin distincte permet de calculer précisément la durée de traitement de chaque activité. Elle est indispensable aux Dashboards de performance qui analysent la durée d’étapes précises, comme l’efficacité du prélèvement et de l’emballage, afin de repérer les tâches les plus longues. Pourquoi est-ce important ? Cet attribut permet de calculer précisément la durée de chaque activité et d’identifier les étapes longues ainsi que les tâches qui mobilisent beaucoup de ressources. Où trouver ces données Pour les événements ponctuels, cet attribut correspond souvent à l’horodatage de début. Pour les tâches de longue durée, il peut s’agir d’un champ distinct dans des tables comme /SCWM/ORDIM_C, ou d’une valeur déduite d’un changement de statut ultérieur. Exemples 2023-10-26T10:05:00Z2023-10-26T10:25:45Z2023-10-26T11:20:00Z | |||
| ID utilisateur User | Identifiant de l’opérateur d’entrepôt ou de l’utilisateur qui a confirmé ou exécuté l’activité. | ||
| Description Cet attribut indique l’ID utilisateur de la personne chargée d’effectuer une tâche d’entrepôt. Il peut s’agir du préparateur qui a confirmé un prélèvement, de l’employé au poste d’emballage ou du cariste qui a confirmé une mise en stock. Ces données sont essentielles au Dashboard sur l’utilisation des ressources et des équipements. Elles permettent d’analyser les performances individuelles ou collectives, de repérer les besoins de formation et de mieux répartir la charge de travail entre les équipes de l’entrepôt. Pourquoi est-ce important ? Cet attribut associe les tâches à une personne précise. Il permet d’analyser les performances par utilisateur ou par équipe, et contribue à la gestion des ressources et à la répartition de la charge de travail. Où trouver ces données Cet attribut se trouve généralement dans les données de confirmation d’une tâche d’entrepôt, par exemple dans le champ UNAME de la table /SCWM/ORDIM_C. Exemples JSMITHARODRIGUEZOPERATOR_05 | |||
| Numéro d’article MaterialNumber | Identifiant unique du produit ou de l’article traité dans la tâche d’entrepôt. | ||
| Description Cet attribut indique l’article déplacé, prélevé, emballé ou reçu. Il permet de segmenter et d’analyser les performances de l’entrepôt selon les caractéristiques des produits. L’analyse par numéro d’article permet de savoir quels produits ont les temps de mise en stock les plus longs, lesquels sont le plus souvent concernés par des erreurs de prélèvement ou lesquels nécessitent des contrôles qualité. Cet attribut est indispensable aux Dashboards sur les performances de réception et de mise en stock, ainsi que sur les délais de contrôle qualité. Pourquoi est-ce important ? Cet attribut permet de filtrer et de segmenter les données de processus par produit afin de repérer les problèmes propres à la manutention, au stockage ou au contrôle qualité de certains produits. Où trouver ces données Ces informations sont généralement disponibles dans les tables des tâches d’entrepôt, comme /SCWM/ORDIM_O, et sont associées aux données de base des articles. Exemples FIN-1001RAW-2050SFIN-300-A | |||
| Priorité Priority | Niveau de priorité attribué à l’ordre d’entrepôt, qui indique son degré d’urgence (par exemple : élevée, moyenne ou faible). | ||
| Description Cet attribut classe les ordres d’entrepôt selon leur importance pour l’activité ou leur degré d’urgence. Les ordres prioritaires peuvent, par exemple, concerner des expéditions express ou l’approvisionnement essentiel de la production et nécessiter un traitement accéléré. La priorité est une dimension importante du Dashboard et de l’indicateur de performance « Respect des délais de traitement des ordres prioritaires ». Elle permet de filtrer et de segmenter les résultats afin de vérifier que les ordres les plus urgents sont traités dans les délais prévus et que les opérations de l’entrepôt répondent aux objectifs de l’entreprise. Pourquoi est-ce important ? Permet de cibler l’analyse et le suivi pour vérifier que les ordres les plus urgents respectent leurs niveaux de service, ce qui a un effet direct sur la satisfaction des clients. Où trouver ces données La priorité peut être définie dans le document de livraison sous-jacent, puis transférée à l’ordre d’entrepôt. Elle peut figurer dans des tables telles que /SCWM/WHO. Exemples ÉlevéeMoyenneFaible | |||
| Statut du Warehouse Order WarehouseOrderStatus | Statut actuel ou final du Warehouse Order, par exemple « Completed » ou « Canceled ». | ||
| Description Cet attribut indique le résultat final d’un ordre d’entrepôt. Savoir si l’ordre a été exécuté ou annulé est essentiel pour analyser le taux de réussite du processus et comprendre les raisons de sa non-exécution. Il s’agit d’un filtre important pour de nombreuses analyses. Par exemple, le calcul du temps de cycle de bout en bout d’un ordre d’entrepôt porte généralement uniquement sur les ordres terminés. Cet attribut permet également de repérer et d’examiner la fréquence des annulations et leurs causes. Pourquoi est-ce important ? Indique le résultat d’un dossier et permet de filtrer les ordres terminés ou annulés, ce qui est essentiel pour analyser avec précision le temps de cycle et le débit. Où trouver ces données Le champ de statut se trouve généralement dans la table d’en-tête des ordres d’entrepôt, /SCWM/WHO. Exemples TerminéEn coursAnnulé | |||
| Type de Warehouse Order WarehouseOrderType | Classe le Warehouse Order selon sa fonction, par exemple la mise en stock, le prélèvement ou le réapprovisionnement interne. | ||
| Description Le type de Warehouse Order classe les commandes selon leur fonction logistique. Cette distinction est fondamentale, car chaque type suit un parcours différent et répond à des attentes de performance qui lui sont propres. En analyse, cet attribut sert principalement à filtrer et à comparer les données. Par exemple, le Dashboard sur le débit et le volume des Warehouse Orders s’appuie sur cet attribut pour distinguer les processus entrants (mise en stock) des processus sortants (prélèvement) et donner une vue plus pertinente des opérations d’entrepôt. Pourquoi est-ce important ? Cet attribut permet de segmenter l’analyse par catégorie de processus, par exemple entrant ou sortant, et de comparer les données de façon plus pertinente. Où trouver ces données Le type est déterminé par le type de processus d’entrepôt, généralement indiqué dans la table d’en-tête des Warehouse Orders /SCWM/WHO. Exemples PICKPUTWREPLSTGE | |||
| Dans les délais IsOnTime | Indicateur booléen précisant si un ordre d’entrepôt a été terminé au plus tard à la date d’achèvement demandée. | ||
| Description Cet indicateur donne une réponse simple, sous forme binaire, sur le respect du SLA. Il vérifie si l’événement final d’achèvement d’un ordre d’entrepôt a eu lieu au plus tard à la date d’achèvement demandée. Cet attribut est essentiel au Dashboard « Respect des délais de traitement des ordres prioritaires ». Il facilite la création d’indicateurs de performance et de visualisations, car il permet de compter et de filtrer facilement les ordres terminés dans les délais ou en retard. Vous pouvez ainsi évaluer rapidement les résultats au regard des objectifs de niveau de service, sans effectuer de calculs complexes sur les dates dans la couche d’analyse. Pourquoi est-ce important ? Facilite l’analyse de la performance du SLA en indiquant clairement, pour chaque ordre, s’il a été traité dans les délais ou en retard. Où trouver ces données Il s’agit d’un attribut calculé. La logique compare l’horodatage de l’activité « Ordre d’entrepôt terminé » à l’attribut RequestedCompletionDate. Exemples truefalse | |||
| Date d’achèvement demandée RequestedCompletionDate | Date à laquelle il est demandé qu’un ordre d’entrepôt prioritaire soit terminé. | ||
| Description Cet attribut définit le niveau de service (SLA) ou la date cible d’achèvement d’un ordre d’entrepôt. Cette échéance sert de référence pour comparer l’heure réelle d’achèvement et déterminer si l’ordre a été traité dans les délais. Cette date est essentielle au calcul de l’indicateur de performance « Taux de traitement des ordres prioritaires ». En comparant l’horodatage réel d’achèvement à la date demandée, l’analyse mesure le respect des niveaux de service et met en évidence les ordres susceptibles d’être en retard ou déjà en retard. Pourquoi est-ce important ? Définit le SLA d’un ordre et sert de référence pour mesurer le respect des délais de traitement, en particulier pour les articles prioritaires. Où trouver ces données Cette date est souvent calculée à partir de la date prévue de sortie des marchandises ou de livraison indiquée dans l’ordre de livraison sortante à l’origine de l’ordre d’entrepôt. Consultez la documentation SAP Extended Warehouse Management. Exemples 2023-10-27T17:00:00Z2023-10-28T12:00:00Z | |||
| Écart de quantité QuantityVariance | Différence entre la quantité prévue et la quantité réellement confirmée pour une tâche. | ||
| Description Cette métrique calculée mesure l’écart constaté lors d’une tâche d’entrepôt. Une valeur non nulle indique que la réalité physique ne correspond pas aux données du système et peut signaler un problème, comme une erreur de prélèvement ou de réception, ou un article endommagé. Cet attribut contribue directement au Dashboard « Analyse des écarts de stock » en indiquant l’ampleur des erreurs. L’analyse de leur fréquence et de leur importance permet de repérer les problèmes systémiques de gestion du stock et d’exécution des opérations, et d’orienter les efforts d’amélioration de la précision. Pourquoi est-ce important ? Mesure directement les écarts de stock et les imprécisions opérationnelles, ce qui facilite le repérage et l’analyse de leur ampleur. Où trouver ces données Calculé en soustrayant PlannedQuantity de ActualQuantity pour chaque tâche concernée. Exemples 0-15 | |||
| Emplacement de stockage StorageLocation | Emplacement précis dans l’entrepôt, par exemple une case de stockage, d’où les marchandises sont déplacées ou vers laquelle elles sont acheminées. | ||
| Description Cet attribut identifie l’emplacement physique concerné par une tâche d’entrepôt, par exemple la case de prélèvement ou la case de destination pour le rangement. Il peut désigner une zone générale ou les coordonnées précises d’une étagère. L’analyse par emplacement de stockage peut révéler des éléments utiles aux opérations, comme les « zones privilégiées » où les prélèvements sont nombreux ou les zones où les retards et les erreurs sont fréquents. Elle peut également servir à analyser le « respect des itinéraires de prélèvement » et à comprendre les déplacements des préparateurs dans l’entrepôt. Pourquoi est-ce important ? Situe les opérations dans l’entrepôt et permet d’analyser l’efficacité des déplacements, l’accessibilité des cases et l’optimisation des itinéraires de prélèvement. Où trouver ces données Figure généralement dans les tables des tâches d’entrepôt, comme /SCWM/ORDIM_O, qui contiennent les informations sur les cases de départ (VLPLA) et de destination (NLPLA). Exemples 01-02-03STATION-EMBALLAGE-01ZONE-SORTIE-A | |||
| Équipement utilisé EquipmentUsed | Identifiant de l’équipement utilisé pour effectuer la tâche d’entrepôt, par exemple un chariot élévateur ou un transpalette. | ||
| Description Cet attribut précise l’équipement de manutention affecté à une tâche d’entrepôt ou utilisé pour l’effectuer. Il peut s’agir d’un chariot élévateur précis, d’un véhicule à guidage automatique (AGV) ou d’un type de chariot particulier. Ces données constituent la base du Dashboard « Utilisation des ressources et des équipements » et de l’indicateur de performance « Taux d’utilisation des équipements ». En suivant les équipements utilisés pour chaque tâche et la durée d’utilisation, les responsables peuvent analyser les tendances, planifier la maintenance et prendre des décisions éclairées sur la taille et la composition du parc. Pourquoi est-ce important ? Permet d’analyser l’utilisation et l’efficacité des équipements, d’optimiser la gestion du parc et de repérer les contraintes liées aux ressources. Où trouver ces données Si la gestion des ressources est configurée dans SAP EWM, ces informations peuvent être stockées dans les détails des tâches ou des ordres d’entrepôt. Consultez la documentation SAP Extended Warehouse Management. Exemples CHARIOT-ÉLÉVATEUR-07AGV-02CHARIOT-15 | |||
| Heure de départ prévue PlannedDepartureTime | Heure à laquelle l’expédition doit quitter l’entrepôt selon le planning. | ||
| Description Cet attribut indique l’heure cible d’expédition, une fois les activités de prélèvement, d’emballage et de chargement terminées. Il sert de référence pour mesurer le respect des délais lors de la dernière étape du processus d’expédition sortante. Cet horodatage est essentiel au Dashboard « Respect des délais d’expédition ». En comparant l’heure réelle d’expédition à l’heure prévue, l’analyse peut repérer les retards liés au chargement, à la coordination avec le transporteur ou aux documents, et éclairer l’efficacité de la planification logistique et du transport. Pourquoi est-ce important ? Sert de référence pour mesurer le respect des délais d’expédition, un élément essentiel de la planification logistique et du respect des horaires des transporteurs. Où trouver ces données Ces informations figurent généralement dans le document de transport ou d’expédition associé aux ordres d’entrepôt. Consultez la documentation SAP Extended Warehouse Management. Exemples 2023-10-27T18:00:00Z2023-10-28T14:00:00Z | |||
| Quantité prévue PlannedQuantity | Quantité de matériel prévue pour une tâche d’entrepôt donnée. | ||
| Description Cet attribut correspond à la quantité cible de matériel à déplacer, prélever ou réceptionner selon les instructions de la tâche d’entrepôt. Elle sert de référence pour la comparer à la quantité réellement traitée. La quantité prévue est essentielle au Dashboard « Analyse des écarts de stock » et à l’indicateur de performance « Taux de précision du stock ». En la comparant à la quantité réelle, le système peut repérer des écarts susceptibles de révéler des erreurs de prélèvement ou de réception, ou des problèmes de saisie, et ainsi contribuer à améliorer la précision du stock. Pourquoi est-ce important ? Sert de référence pour calculer la précision du stock et repérer les écarts, ce qui est essentiel pour maintenir des niveaux de stock exacts. Où trouver ces données Figure dans les données des tâches d’entrepôt, par exemple dans la table /SCWM/ORDIM_O, souvent dans un champ tel que NISTA (quantité cible). Exemples 10050250 | |||
| Quantité réelle ActualQuantity | Quantité de matériel réellement confirmée par l’utilisateur pour une tâche d’entrepôt. | ||
| Description Cet attribut indique la quantité effectivement manipulée et confirmée par l’opérateur de l’entrepôt. Il peut s’agir de la quantité prélevée dans un emplacement, rangée ou comptée lors d’une réception de marchandises. La comparaison de la quantité réelle avec la quantité prévue est fondamentale pour l’« Analyse des écarts de stock ». Un écart entre les deux valeurs signale directement une exception de processus à examiner. Il mesure directement la précision des opérations et constitue une donnée essentielle pour les indicateurs de performance « Taux de précision du stock » et « Taux d’erreur de prélèvement ». Pourquoi est-ce important ? Il s’agit de la quantité réellement manipulée. La comparer à la quantité prévue permet de mesurer directement la précision des opérations et de repérer les erreurs. Où trouver ces données Figure dans les données de confirmation des tâches d’entrepôt, par exemple dans la table /SCWM/ORDIM_C, souvent dans un champ tel que NDIFF (quantité de l’écart) ou peut être calculée à partir des quantités confirmées. Exemples 10049250 | |||
| Temps de cycle de bout en bout EndToEndCycleTime | Durée totale entre la création de l’ordre d’entrepôt et son achèvement. | ||
| Description Cet indicateur de performance mesure la durée totale du cycle de vie d’un ordre d’entrepôt. Il donne une indication générale de l’efficacité et de la rapidité des opérations de l’entrepôt. Cet indicateur est au cœur du Dashboard « Temps de cycle de bout en bout d’un ordre d’entrepôt ». Son suivi dans le temps et sa segmentation selon des dimensions comme le type d’ordre ou le matériel permettent de repérer les inefficacités systémiques et de mesurer l’effet des initiatives d’amélioration sur l’ensemble des opérations. Pourquoi est-ce important ? Cet indicateur de performance mesure l’efficacité globale du processus d’entrepôt et donne une vue d’ensemble des résultats opérationnels. Où trouver ces données Calculé au niveau du dossier en soustrayant l’horodatage du premier événement (« Ordre d’entrepôt créé ») de celui du dernier événement (« Ordre d’entrepôt terminé »). Exemples 8640017280043200 | |||
| Warehouse Task WarehouseTask | Identifiant unique d’une tâche d’entrepôt, qui fait partie d’un Warehouse Order. | ||
| Description Une tâche d’entrepôt est une instruction visant à effectuer un mouvement précis de marchandises, par exemple déplacer un produit d’un emplacement de stockage vers un poste d’emballage. Un Warehouse Order regroupe une ou plusieurs de ces tâches. L’analyse à l’échelle des tâches donne une vue plus détaillée des opérations d’entrepôt. Elle aide à évaluer les performances des ressources pour des mouvements précis, à repérer les emplacements difficiles d’accès et à analyser l’efficacité des activités de prélèvement ou de mise en stock. Pourquoi est-ce important ? Cet attribut fournit un niveau de détail précis pour l’analyse et permet d’examiner les mouvements et les étapes qui composent un Warehouse Order. Où trouver ces données Cet attribut se trouve dans les tables des tâches d’entrepôt, telles que /SCWM/ORDIM_O (données des tâches) et /SCWM/ORDIM_C (données de confirmation). Exemples 300000451300000452300000453 | |||
Activités de gestion d’entrepôt
| Activité | Description | ||
|---|---|---|---|
| Emballage terminé | Cette activité indique que tous les articles d’une expédition ont été emballés dans une unité de manutention, désormais fermée et étiquetée. Les marchandises emballées sont prêtes pour l’étape suivante, comme la mise en zone d’expédition ou le chargement. | ||
| Pourquoi est-ce important ? Cette étape clôt la phase d’emballage. Elle est nécessaire avant la mise en zone d’expédition et l’expédition. Tout retard à ce stade a donc une incidence directe sur le délai global et sur l’indicateur de délai d’emballage et de mise en zone d’expédition. Où trouver ces données L’événement peut être enregistré lorsque le statut de l’unité de manutention (HU) passe à « Closed » ou lorsque la dernière tâche d’entrepôt liée à l’emballage pour le WO est confirmée. La table /SCWM/HUHDR contient les informations de statut des HU. Données à recueillir Repérez l’horodatage auquel la dernière unité de manutention d’expédition associée à la commande est fermée ou terminée. Type d’événement inferred | |||
| Sortie de marchandises comptabilisée | Il s’agit de la dernière étape logistique et comptable dans le système. Elle retire officiellement les marchandises du stock de l’entrepôt, confirme le transfert de propriété et indique que l’expédition a quitté les lieux. | ||
| Pourquoi est-ce important ? Cette étape marque la fin du flux sortant et déclenche la facturation ainsi que la mise à jour des stocks. Elle entre dans le calcul du respect des délais d’expédition et de l’indicateur de temps de chargement et d’expédition. Où trouver ces données Cet événement est déduit de la comptabilisation d’un document de livraison sortante associé au Warehouse Order. Consultez le flux documentaire ou les champs de statut, par exemple DGI_STAT, dans la table /SCDL/DB_PROCH_O. Données à recueillir Repérez l’horodatage auquel le statut de sortie de marchandises passe à « Completed » pour la livraison sortante associée. Type d’événement explicit | |||
| Tâche de mise en stock confirmée | Un opérateur d’entrepôt confirme que la Warehouse Task de mise en stock est terminée, c’est-à-dire que les marchandises ont été placées physiquement dans l’emplacement prévu. Cette confirmation met à jour l’emplacement du stock en temps réel. | ||
| Pourquoi est-ce important ? Cette activité marque une étape importante du traitement des marchandises entrantes : elle confirme que le stock est disponible pour le prélèvement. Tout retard à ce stade a une incidence directe sur l’indicateur de temps de cycle entre la réception des marchandises et leur mise en stock. Où trouver ces données L’événement est enregistré à partir de l’horodatage de confirmation (champ CONFIRMED_AT) dans la table des Warehouse Tasks, /SCWM/WT. Le statut de la tâche (STAT) passe également à « Confirmed ». Données à recueillir Utilisez l’horodatage de confirmation de la table /SCWM/WT pour les tâches de mise en stock associées au Warehouse Order. Type d’événement explicit | |||
| Tâche de prélèvement confirmée | Un opérateur d’entrepôt confirme que la Warehouse Task de prélèvement est terminée, ce qui signifie que les marchandises ont été récupérées physiquement à leur emplacement de stockage. Cette opération s’effectue généralement à l’aide d’un scanner RF. | ||
| Pourquoi est-ce important ? Cette étape est importante pour le traitement des commandes et influe directement sur le temps de cycle entre la commande et l’expédition. Son analyse permet de mesurer la productivité des préparateurs et de repérer les goulots d’étranglement du prélèvement. Où trouver ces données L’événement est enregistré à partir de l’horodatage de confirmation (champ CONFIRMED_AT) dans la table des Warehouse Tasks, /SCWM/WT. Le statut de la tâche (STAT) passe à « Confirmed ». Données à recueillir Utilisez l’horodatage de confirmation de la table /SCWM/WT pour les tâches de prélèvement associées au Warehouse Order. Type d’événement explicit | |||
| Warehouse Order créé | Cette activité marque la création d’un Warehouse Order (WO), un lot de travail composé de plusieurs tâches d’entrepôt. Le système génère un WO pour regrouper et organiser le travail des employés de l’entrepôt, selon des critères tels que la zone d’activité, la file d’attente ou le produit. | ||
| Pourquoi est-ce important ? Il s’agit de l’événement de début principal du processus d’exécution en entrepôt. L’analyse du délai entre la création et la première action permet de repérer les retards dans l’attribution du travail et l’affectation des ressources. Où trouver ces données Cet événement est enregistré à partir de l’horodatage de création (champ CREATED_AT) dans la table d’en-tête des Warehouse Orders, /SCWM/WHO. Données à recueillir Extrayez l’horodatage de création de la table /SCWM/WHO pour chaque numéro de Warehouse Order (WHO). Type d’événement explicit | |||
| Warehouse Order terminé | Le statut du Warehouse Order passe à « Completed » une fois toutes les tâches d’entrepôt associées confirmées. Le lot de travail est alors clôturé du point de vue de l’exécution. | ||
| Pourquoi est-ce important ? Il s’agit de l’événement de fin qui marque la réussite du processus. Il est indispensable pour calculer le temps de cycle de bout en bout de l’entrepôt et mesurer le débit global. Où trouver ces données L’événement est enregistré en suivant le changement du champ de statut (STAT) à « Completed » dans la table d’en-tête des Warehouse Orders, /SCWM/WHO. Vous pouvez utiliser le journal des modifications de cette table (DBTABLOG) ou un champ d’horodatage dédié. Données à recueillir Repérez l’horodatage auquel le statut dans /SCWM/WHO passe à « C » (Completed). Type d’événement inferred | |||
| Chargement terminé | Cette activité indique que toutes les marchandises de l’expédition ont été chargées physiquement dans l’unité de transport. Cette étape est nécessaire avant la comptabilisation de la sortie de marchandises et le départ du véhicule. | ||
| Pourquoi est-ce important ? Cette étape importante précède l’expédition finale. Un retard entre la fin du chargement et la sortie de marchandises peut révéler des problèmes de documentation ou de système qui retardent le départ des transporteurs. Où trouver ces données Cet événement est déduit du changement de statut de l’unité de transport (TU) ou de la commande de livraison sortante associée, qui passe à « Loading Completed ». Les statuts des tables /SCWM/TU et /SCDL/DB_PROCH_O sont pertinents. Données à recueillir Enregistrez l’horodatage auquel le statut de la TU ou de la commande de livraison est mis à jour pour indiquer la fin du chargement. Type d’événement inferred | |||
| Début de l’emballage | Cette activité marque le début de l’emballage : les articles prélevés sont regroupés et placés dans des conteneurs d’expédition ou des unités de manutention. Il s’agit souvent de la première étape effectuée dans un poste d’emballage. | ||
| Pourquoi est-ce important ? Cette étape marque le début de la phase des services à valeur ajoutée. La mesure du temps d’emballage aide à optimiser l’aménagement des postes de travail, les effectifs et les fournitures. Où trouver ces données Cet événement peut nécessiter une déduction. Il peut être déterminé à partir du premier scan d’un article ou d’une unité de manutention à un poste d’emballage, souvent enregistré dans les journaux des postes de travail ou des unités de manutention. Les tables telles que /SCWM/PACKSPEC et les journaux d’exécution associés peuvent servir de source. Données à recueillir Utilisez l’horodatage de la première confirmation d’une Warehouse Task liée à l’emballage pour la livraison, ou l’heure de création de l’unité de manutention (HU) d’expédition finale. Type d’événement inferred | |||
| Début du chargement | Cette activité marque le début du chargement physique des marchandises depuis la zone d’expédition dans un camion ou une unité de transport. Elle est souvent déclenchée par une action de l’utilisateur dans le système. | ||
| Pourquoi est-ce important ? Il s’agit du début de la dernière étape physique dans l’entrepôt. L’analyse du temps de chargement aide à optimiser l’utilisation des portes de quai et le temps d’immobilisation des transporteurs. Où trouver ces données Cet événement est déduit du changement de statut de l’unité de transport (TU) ou de la commande de livraison sortante associée, qui passe à « Loading Started ». Vous pouvez consulter la table /SCWM/TU_STATUS. Données à recueillir Enregistrez l’horodatage auquel le statut de la TU ou de la commande de livraison est mis à jour pour indiquer le début du chargement. Type d’événement inferred | |||
| Entrée de marchandises comptabilisée | Cette activité marque l’acceptation officielle des marchandises dans le stock de l’entrepôt, après leur réception d’un fournisseur externe ou de la production. Cette écriture comptable et de stock rend les articles visibles et disponibles pour les étapes suivantes, comme la mise en stock. | ||
| Pourquoi est-ce important ? Il s’agit d’une étape importante du processus d’approvisionnement. Le délai entre l’arrivée des marchandises et leur comptabilisation peut révéler un retard dans la zone de réception et réduire la disponibilité des stocks. Où trouver ces données Cet événement est déduit de la comptabilisation d’un document de livraison entrante associé au Warehouse Order. Consultez le flux documentaire ou les champs de statut, par exemple DGRSTAT, dans la table /SCDL/DB_PROCH_I. Données à recueillir Repérez l’horodatage auquel le statut de réception des marchandises passe à « Completed » pour la livraison entrante associée. Type d’événement inferred | |||
| Tâche de mise en stock créée | Le système génère une instruction précise, une Warehouse Task (WT), pour déplacer les marchandises reçues de la zone de réception vers un emplacement de stockage définitif. Cette activité indique que le système est prêt à exécuter le déplacement vers le stock. | ||
| Pourquoi est-ce important ? Le suivi du délai entre la création et la confirmation de la tâche indique le temps nécessaire aux opérateurs pour prendre en charge et exécuter les instructions de mise en stock. Il permet de repérer d’éventuelles pénuries de personnel ou d’équipement. Où trouver ces données L’événement est enregistré à partir de l’horodatage de création (champ CREATED_AT) de la Warehouse Task concernée dans la table /SCWM/WT, lorsque le type de processus indique une mise en stock. Données à recueillir Filtrez les Warehouse Tasks associées au Warehouse Order dont le type de processus correspond à une mise en stock, puis utilisez leur horodatage de création. Type d’événement explicit | |||
| Tâche de mise en zone d’expédition confirmée | Un opérateur d’entrepôt confirme le déplacement d’une unité de manutention emballée depuis un poste d’emballage ou une zone de regroupement vers la zone prévue pour les expéditions. Les marchandises sont alors prêtes à être chargées. | ||
| Pourquoi est-ce important ? Cette étape marque le passage du traitement interne à la logistique sortante. Les retards dans la mise en zone d’expédition peuvent désorganiser les quais de chargement et faire manquer les heures d’enlèvement du transporteur. Où trouver ces données L’événement est enregistré à partir de l’horodatage de confirmation (champ CONFIRMED_AT) d’une Warehouse Task (/SCWM/WT) dont le type de processus correspond à un déplacement vers la zone d’expédition. Données à recueillir Repérez l’horodatage de confirmation de la tâche de mise en zone d’expédition associée à l’unité de manutention ou à la livraison. Type d’événement explicit | |||
| Tâche de prélèvement créée | Le système génère une Warehouse Task (WT) pour prélever des marchandises dans un emplacement de stockage afin de préparer une commande de livraison sortante. Il s’agit de l’instruction donnée à un opérateur pour récupérer un produit. | ||
| Pourquoi est-ce important ? Cette étape marque le début du processus physique de sortie. Le délai entre la création et la confirmation des tâches de prélèvement est essentiel pour analyser l’efficacité du prélèvement et la disponibilité des ressources. Où trouver ces données L’événement est enregistré à partir de l’horodatage de création (champ CREATED_AT) de la Warehouse Task concernée dans la table /SCWM/WT, lorsque le type de processus indique un prélèvement. Données à recueillir Filtrez les Warehouse Tasks associées au Warehouse Order dont le type de processus correspond à un prélèvement, puis utilisez leur horodatage de création. Type d’événement explicit | |||
| Warehouse Order annulé | Le Warehouse Order est annulé avant la fin de toutes les tâches, ce qui empêche la poursuite de son exécution. Cela peut se produire en cas d’indisponibilité du stock, de modification des commandes client ou d’autres exceptions. | ||
| Pourquoi est-ce important ? Cette activité correspond à un échec ou à un parcours d’exception. L’analyse de la fréquence et des motifs d’annulation aide à repérer les problèmes en amont liés à la planification, à la précision des stocks ou à la gestion des commandes. Où trouver ces données L’événement est enregistré en suivant le changement du champ de statut (STAT) à « Canceled » dans la table d’en-tête des Warehouse Orders, /SCWM/WHO. Données à recueillir Repérez l’horodatage auquel le statut dans /SCWM/WHO prend une valeur correspondant à une annulation. Type d’événement inferred | |||
Guides d’extraction
Étapes
- Prérequis : identifier ou créer les vues CDS : les principales sources de données sont les vues CDS standard de SAP S/4HANA pour la gestion des entrepôts. Les vues essentielles sont
I_WarehouseOrderpour les événements au niveau des commandes etI_WarehouseTaskpour ceux au niveau des tâches. D’autres vues, commeI_OutboundDeliveryItem,I_InboundDeliveryItemetI_EWMTransportationUnit, sont nécessaires pour les événements logistiques associés. Vérifiez que ces vues sont actives dans votre système. - Créer une vue CDS personnalisée : pour regrouper les données de plusieurs sources dans un journal d’événements unique, créez une vue CDS personnalisée. Dans Eclipse, utilisez ABAP Development Tools (ADT) pour créer une nouvelle définition de données. Cette vue personnalisée utilisera
UNION ALLpour fusionner les enregistrements de différentes sources, chacun correspondant à une activité métier distincte. - Définir la structure du journal d’événements : dans votre vue CDS personnalisée, définissez les champs qui formeront les colonnes du journal d’événements. Ils doivent inclure
WarehouseOrder,ActivityName,EventTime, ainsi que les autres attributs requis et recommandés. Associez ces champs à ceux des vues CDS standard sous-jacentes. - Modéliser les événements des commandes d’entrepôt : ajoutez les premières instructions
SELECTà votre union. Sélectionnez les données deI_WarehouseOrderpour générer l’événement « Commande d’entrepôt créée » à partir de l’horodatage de création. Ajoutez ensuite des instructionsSELECTpour les événements « Commande d’entrepôt terminée » et « Commande d’entrepôt annulée », en filtrant selon le statut de la commande et en utilisant les horodatages de confirmation ou de modification appropriés. - Modéliser les événements des tâches d’entrepôt : ajoutez des instructions
SELECTà partir deI_WarehouseTask. Générez les événements « Tâche de mise en stock créée » et « Tâche de mise en stock confirmée » en filtrant les catégories de processus d’entrepôt liées à la mise en stock. De même, créez les événements « Tâche de préparation créée », « Tâche de préparation confirmée » et « Tâche de mise en zone d’attente confirmée » à partir des catégories de processus correspondantes et des horodatages de création et de confirmation. - Modéliser les événements de mouvement de marchandises : reliez les vues associées aux livraisons aux tâches d’entrepôt afin de suivre les mouvements de marchandises. Pour l’événement « Entrée de marchandises comptabilisée », sélectionnez les données de
I_InboundDeliveryItemà l’aide deActualGoodsMovementDateTime. Pour l’événement « Sortie de marchandises comptabilisée », utilisez le même champ dansI_OutboundDeliveryItemet reliez-le à la commande ou à la tâche d’entrepôt concernée. - Modéliser les événements de chargement et d’emballage : sélectionnez les données de
I_EWMTransportationUnitpour suivre les événements « Chargement commencé » et « Chargement terminé » à l’aide des horodatages dédiés. Pour l’emballage, qui peut être complexe, utilisez une vue Handling Unit comme indicateur indirect : l’heure de création peut représenter le début de l’emballage et l’heure d’un changement de statut, sa fin. Cette étape peut nécessiter des ajustements selon votre processus d’emballage. - Ajouter des annotations pour exposer la vue CDS : ajoutez l’annotation
@OData.publish : trueà la définition de votre vue CDS personnalisée. SAP générera ainsi automatiquement un service OData à partir de la structure de la vue. - Activer la vue CDS et le service OData : activez la nouvelle définition de données dans ADT. Accédez ensuite au système SAP Gateway Hub et utilisez la transaction
/IWFND/MAINT_SERVICEpour rechercher et activer le service OData généré. Les données seront alors accessibles via un point de terminaison d’API REST. - Extraire les données : utilisez votre plateforme de données cible ou votre outil ETL pour vous connecter au point de terminaison du service OData activé. Appliquez directement les filtres dans l’URI OData, par exemple sur
EventTime, pour limiter le périmètre des données (p. ex.?$filter=EventTime ge datetime'2023-01-01T00:00:00'). - Mettre les données au format requis pour le Process Mining : enregistrez les données extraites dans un fichier plat, par exemple au format CSV, dont les en-têtes de colonnes correspondent aux attributs requis par ProcessMind (
WarehouseOrder,ActivityName,EventTime, etc.). Importez le fichier final dans l’outil de Process Mining.
Configuration
- Vue CDS personnalisée : créez une vue CDS dédiée, par exemple
Z_C_EWM_EVENTLOG_CDS, pour réunir les données d’événements. Elle constitue l’objet central de l’extraction. - Service OData : activez le service OData généré à partir de la vue CDS personnalisée. Son nom correspond généralement à celui de la vue CDS, suivi du suffixe
_CDS. - Filtrage par période : lors de l’appel à l’API OData, il est essentiel d’appliquer un filtre de date au champ
EventTime. Pour une première analyse, une période de 3 à 6 mois est généralement adaptée. Sans filtre, la requête risque d’expirer ou de ralentir le système. - Filtrage par entité : pour réduire davantage le périmètre des données, envisagez de filtrer des attributs tels que le numéro d’entrepôt (
Warehouse), le type de commande d’entrepôt (WarehouseOrderType) ou certains articles (MaterialNumber). - Autorisations système : la personne qui crée la vue CDS doit disposer d’un accès développeur SAP dans ADT. L’utilisateur ou le compte de service qui appelle l’API OData doit être autorisé à accéder aux données sous-jacentes de gestion des entrepôts.
Exemple de requête sql
DEFINE VIEW Z_C_EWM_EVENTLOG_CDS
WITH PARAMETERS
P_StartDate : abap.dats,
P_EndDate : abap.dats
AS SELECT FROM I_WarehouseOrder AS WO
{
-- Required Attributes
WO.WarehouseOrder AS WarehouseOrder,
CAST('Warehouse Order Created' AS abap.char(40)) AS ActivityName,
WO.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
-- Recommended Attributes
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.CreationUser AS User,
WO.WarehouseOrderType AS WarehouseOrderType,
WO.WarehouseOrderStatus AS WarehouseOrderStatus,
WO.Priority AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
CAST(WO.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseOrder AS WO
{
WO.WarehouseOrder,
CAST('Warehouse Order Completed' AS abap.char(40)) AS ActivityName,
WO.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.ConfirmationUser AS User,
WO.WarehouseOrderType,
WO.WarehouseOrderStatus,
WO.Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WO.WarehouseOrderStatus = 'C' AND
CAST(WO.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseOrder AS WO
{
WO.WarehouseOrder,
CAST('Warehouse Order Canceled' AS abap.char(40)) AS ActivityName,
WO.LastChangeDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
CAST(NULL AS abap.char(40)) AS MaterialNumber,
WO.LastChangeUser AS User,
WO.WarehouseOrderType,
WO.WarehouseOrderStatus,
WO.Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WO.WarehouseOrderStatus = 'X' AND
CAST(WO.LastChangeDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
LEFT JOIN I_InboundDeliveryItem AS IBD ON WT.DeliveryDocument = IBD.InboundDelivery AND WT.DeliveryDocumentItem = IBD.InboundDeliveryItem
{
WT.WarehouseOrder,
CAST('Goods Receipt Posted' AS abap.char(40)) AS ActivityName,
IBD.ActualGoodsMovementDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
IBD.LastChangedByUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
IBD.GoodsMovementStatus = 'C' AND -- Completed
CAST(IBD.ActualGoodsMovementDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Putaway Task Created' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Putaway Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '1' AND -- Putaway
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Picking Task Created' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Picking Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Packing Started' AS abap.char(40)) AS ActivityName,
WT.CreationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
WT.ConfirmationDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
WT.CreationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '5' AND -- Packing
CAST(WT.CreationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Packing Completed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '5' AND -- Packing
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
{
WT.WarehouseOrder,
CAST('Staging Task Confirmed' AS abap.char(40)) AS ActivityName,
WT.ConfirmationDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
WT.ConfirmationUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
WT.ProcessorProcTimeInSec AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '4' AND -- Staging
WT.WarehouseTaskStatus = 'C' AND
CAST(WT.ConfirmationDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_EWMTransportationUnit AS TU
INNER JOIN I_WarehouseTask AS WT ON TU.TransportationUnit = WT.ShipmentOrTransportationUnit
{
WT.WarehouseOrder,
CAST('Loading Started' AS abap.char(40)) AS ActivityName,
TU.LoadingStartDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
TU.LoadingEndDateTime AS EventEndTime,
WT.Product AS MaterialNumber,
TU.LastChangeUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
TU.LoadingStartDateTime IS NOT NULL AND
CAST(TU.LoadingStartDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_EWMTransportationUnit AS TU
INNER JOIN I_WarehouseTask AS WT ON TU.TransportationUnit = WT.ShipmentOrTransportationUnit
{
WT.WarehouseOrder,
CAST('Loading Completed' AS abap.char(40)) AS ActivityName,
TU.LoadingEndDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
TU.LastChangeUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
TU.LoadingEndDateTime IS NOT NULL AND
TU.LoadingStatus = 'C' AND
CAST(TU.LoadingEndDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate
UNION ALL
SELECT FROM I_WarehouseTask AS WT
LEFT JOIN I_OutboundDeliveryItem AS OBD ON WT.DeliveryDocument = OBD.OutboundDelivery AND WT.DeliveryDocumentItem = OBD.OutboundDeliveryItem
{
WT.WarehouseOrder,
CAST('Goods Issue Posted' AS abap.char(40)) AS ActivityName,
OBD.ActualGoodsMovementDateTime AS EventTime,
CAST('S4HANA_EWM' AS abap.char(20)) AS SourceSystem,
tstmp_current_utctimestamp() AS LastDataUpdate,
CAST(NULL AS abap.tstp) AS EventEndTime,
WT.Product AS MaterialNumber,
OBD.LastChangedByUser AS User,
WT.WarehouseOrderType,
CAST(NULL AS abap.char(1)) AS WarehouseOrderStatus,
CAST(NULL AS abap.numc(2)) AS Priority,
CAST(NULL AS abap.dec(15, 2)) AS ProcessingTime
}
WHERE
WT.WhseTskProcessCat = '2' AND -- Stock Removal
OBD.GoodsMovementStatus = 'C' AND -- Completed
CAST(OBD.ActualGoodsMovementDateTime AS abap.dats) BETWEEN :P_StartDate AND :P_EndDate Étapes
- Vérifiez que l’accès direct en lecture au schéma de base de données SAP EWM est autorisé, puis identifiez les objets physiques correspondant aux en-têtes des commandes d’entrepôt, aux tâches d’entrepôt, à l’historique des statuts des commandes, aux écritures d’entrées et de sorties de marchandises, à l’emballage, à la mise en zone d’attente et au chargement. Les références logiques /SCWM/WHO et /SCWM/WT constituent des points de départ courants, mais vérifiez dans votre système les objets réels, les champs, les codes de statut, la signification des horodatages et le schéma de base de données.
- Obtenez la correspondance vérifiée des champs auprès du responsable technique SAP EWM ou dans le dictionnaire de données. Faites correspondre l’ID de commande d’entrepôt, le type de commande, le statut, la priorité, l’ID de tâche d’entrepôt, la catégorie de tâche ou le type de processus, l’article, l’utilisateur, l’horodatage de création, l’horodatage de confirmation, les horodatages d’emballage, de mise en zone d’attente et de chargement, les horodatages d’entrée et de sortie de marchandises, le système source et l’horodatage de la dernière actualisation. Ne supposez pas qu’un champ se trouve dans la même table ni qu’un code de statut a la même signification d’un déploiement à l’autre.
- Configurez la connexion d’extraction avec un compte de base de données en lecture seule, le schéma de production ou de reporting et des valeurs paramétrées pour les dates de début et de fin d’extraction, le nom du système source et les éventuels filtres propres à votre entreprise. Appliquez le filtre de date à l’horodatage de l’événement concerné, et pas uniquement à celui de création de la commande d’entrepôt, afin de ne pas exclure les événements survenus plus tard dans son cycle de vie.
- Créez les lignes d’événement en sélectionnant une ligne pour chaque activité explicitement requise. La requête doit utiliser les champs sources vérifiés pour chaque activité et ne pas compter sur ProcessMind pour déduire les événements. Si une activité est représentée dans un historique de statuts ou un journal d’applications plutôt que dans un champ de l’en-tête actuel, utilisez cet historique ou ce journal et conservez l’horodatage de l’événement ainsi que l’utilisateur qui l’a exécuté.
- Normalisez tous les horodatages d’activité dans un même fuseau horaire, de préférence UTC, ou documentez le fuseau horaire du serveur d’applications SAP. Convertissez les codes de statut et de processus propres à la source en noms d’activité exacts pour le journal d’événements : Commande d’entrepôt créée, Entrée de marchandises comptabilisée, Tâche de mise en stock créée, Tâche de mise en stock confirmée, Tâche de préparation créée, Tâche de préparation confirmée, Emballage commencé, Emballage terminé, Tâche de mise en zone d’attente confirmée, Chargement commencé, Chargement terminé, Sortie de marchandises comptabilisée, Commande d’entrepôt terminée et Commande d’entrepôt annulée.
- Vérifiez que chaque ligne de sortie contient
WarehouseOrder,ActivityName,EventTime,SourceSystemetLastDataUpdate. RenseignezEventEndTimelorsqu’un horodatage de fin fiable est disponible. Pour les événements au niveau des tâches, associez chaque tâche à sa commande d’entrepôt. Si une commande comprend plusieurs tâches pertinentes, conservez une ligne par événement de tâche tout en gardant la commande d’entrepôt comme identifiant de cas. Si le format d’import cible le permet, utilisez un critère de départage stable, comme l’ID de tâche ou l’ID d’événement source. - Validez le résultat avant l’export. Vérifiez que les 14 noms d’activité apparaissent lorsque les données sources contiennent les événements métier correspondants, que les horodatages se situent dans la période demandée, que les commandes d’entrepôt ne sont pas anormalement vides et que les doublons s’expliquent par plusieurs tâches ou des changements de statut répétés. Comparez les volumes aux rapports opérationnels SAP ou à un extrait validé indépendamment.
- Exportez le résultat dans un fichier délimité compatible avec ProcessMind ou sous forme de résultat de base de données, avec un événement par ligne. Conservez exactement les noms de colonnes requis, utilisez un format d’horodatage sans ambiguïté, comme ISO 8601, mettez les valeurs textuelles entre guillemets si le format délimité l’exige et incluez une ligne d’en-tête. Importez le fichier dans ProcessMind ou configurez la connexion à la base de données, puis définissez
WarehouseOrdercomme identifiant de cas,ActivityNamecomme activité,EventTimecomme horodatage de début et, si disponible,EventEndTimecomme horodatage de fin.
Configuration
- Association des objets sources : vérifiez les objets physiques et les champs correspondant aux commandes d’entrepôt, aux tâches, à l’historique des statuts, aux mouvements de marchandises, à l’emballage, à la mise en zone d’attente et au chargement. Les objets logiques /SCWM/WHO et /SCWM/WT peuvent être pertinents, mais confirmez la représentation utilisée dans la base de données déployée avant la mise en œuvre.
- Période : commencez par une période contrôlée de trois à six mois. Pour les premiers tests, choisissez une période plus courte, puis étendez-la après rapprochement des données. Entre deux extractions incrémentielles, prévoyez un léger chevauchement pour récupérer les écritures tardives et les corrections.
- Choix de l’horodatage des événements : utilisez les horodatages de création pour les activités de création, ceux de confirmation pour les activités confirmées, ceux de comptabilisation pour les entrées et sorties de marchandises, et les horodatages d’exécution vérifiés pour l’emballage, la mise en zone d’attente et le chargement. Ne remplacez pas tous les horodatages d’événement par celui de création de la commande d’entrepôt.
- Filtres : appliquez uniquement des filtres métier vérifiés, par exemple sur le numéro d’entrepôt, le code société, le type de document, le type de commande d’entrepôt, la zone d’activité, la file d’attente, l’usine ou le système source. Les champs du code société et du type de document peuvent se trouver dans des objets associés : leur correspondance doit être établie dans le système cible.
- Correspondance des statuts : configurez les codes de statut ou de processus SAP exacts qui représentent les commandes d’entrepôt terminées et annulées. Validez cette correspondance avec le responsable fonctionnel EWM, car les codes et le stockage des statuts peuvent varier selon la version et la mise en œuvre.
- SourceSystem : définissez une valeur stable qui identifie l’instance EWM de production ou de reporting. Ne la déduisez pas d’un champ métier susceptible d’être nul.
- LastDataUpdate : renseignez cet attribut avec l’horodatage de l’extraction ou de l’actualisation de la source, de manière uniforme pour toutes les lignes d’une même exécution.
- Extraction incrémentielle : utilisez un point de reprise persistant fondé sur l’horodatage source le plus récent extrait avec succès, avec une période de chevauchement pour récupérer les enregistrements tardifs. Éliminez les doublons à l’aide des identifiants sources vérifiés, lorsqu’ils sont disponibles.
- Performances : limitez la période dès le début, ne sélectionnez que les colonnes requises, filtrez les champs indexés, évitez d’appliquer des fonctions aux colonnes d’horodatage indexées dans les prédicats et traitez les longues périodes par lots quotidiens ou hebdomadaires. Utilisez une réplique de reporting si cela est autorisé.
- Stratégie de jointure : vérifiez la cardinalité entre les commandes et les tâches d’entrepôt. Évitez de multiplier accidentellement les lignes lors de la jointure des tâches, des statuts, des articles et des unités de manutention. Agrégez ou sélectionnez l’enregistrement d’événement approprié avant d’effectuer les jointures.
- Fuseaux horaires : configurez le fuseau horaire source et la règle de conversion. Stockez les horodatages de manière cohérente et documentez la gestion du passage à l’heure d’été.
- Prérequis : autorisation d’accès à la base de données en lecture seule, accès approuvé au schéma EWM, correspondances vérifiées dans le dictionnaire de données, autorisation de lire les objets opérationnels et historiques concernés, et configuration d’import ProcessMind approuvée. Les modules SAP, licences et autorisations nécessaires dépendent de l’architecture EWM déployée et doivent être confirmés par le responsable du système.
Exemple de requête sql
WITH
params AS (
SELECT
CAST('[Start date and time]' AS TIMESTAMP) AS start_time,
CAST('[End date and time]' AS TIMESTAMP) AS end_time,
CAST('[Source system name]' AS VARCHAR(255)) AS source_system,
CAST(CURRENT_TIMESTAMP AS TIMESTAMP) AS last_data_update
),
warehouse_orders AS (
SELECT
CAST(wo.[Warehouse order ID field] AS VARCHAR(255)) AS WarehouseOrder,
CAST(wo.[Warehouse order type field] AS VARCHAR(255)) AS WarehouseOrderType,
CAST(wo.[Warehouse order status field] AS VARCHAR(255)) AS WarehouseOrderStatus,
CAST(wo.[Priority field] AS VARCHAR(255)) AS Priority,
CAST(wo.[Warehouse order creation timestamp field] AS TIMESTAMP) AS WarehouseOrderCreatedTime,
CAST(wo.[Warehouse order completion timestamp field] AS TIMESTAMP) AS WarehouseOrderCompletedTime,
CAST(wo.[Warehouse order cancellation timestamp field] AS TIMESTAMP) AS WarehouseOrderCanceledTime,
CAST(wo.[Material number field] AS VARCHAR(255)) AS MaterialNumber,
CAST(wo.[User field] AS VARCHAR(255)) AS [User]
FROM [Your warehouse order header table] wo
),
warehouse_tasks AS (
SELECT
CAST(wt.[Warehouse order ID field] AS VARCHAR(255)) AS WarehouseOrder,
CAST(wt.[Warehouse task ID field] AS VARCHAR(255)) AS WarehouseTask,
CAST(wt.[Task category or process type field] AS VARCHAR(255)) AS TaskType,
CAST(wt.[Material number field] AS VARCHAR(255)) AS MaterialNumber,
CAST(wt.[Task creation timestamp field] AS TIMESTAMP) AS TaskCreatedTime,
CAST(wt.[Task confirmation timestamp field] AS TIMESTAMP) AS TaskConfirmedTime,
CAST(wt.[User field] AS VARCHAR(255)) AS [User]
FROM [Your warehouse task table] wt
),
events AS (
SELECT wo.WarehouseOrder, 'Warehouse Order Created' AS ActivityName, wo.WarehouseOrderCreatedTime AS EventTime, CAST(NULL AS TIMESTAMP) AS EventEndTime, wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo
UNION ALL
SELECT gr.[Warehouse order ID field], 'Goods Receipt Posted', CAST(gr.[Goods receipt posting timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(gr.[Material number field] AS VARCHAR(255)), CAST(gr.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your goods receipt posting table] gr LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(gr.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT wt.WarehouseOrder, 'Putaway Task Created', wt.TaskCreatedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified putaway task type]'
UNION ALL
SELECT wt.WarehouseOrder, 'Putaway Task Confirmed', wt.TaskConfirmedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified putaway task type]' AND wt.TaskConfirmedTime IS NOT NULL
UNION ALL
SELECT wt.WarehouseOrder, 'Picking Task Created', wt.TaskCreatedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified picking task type]'
UNION ALL
SELECT wt.WarehouseOrder, 'Picking Task Confirmed', wt.TaskConfirmedTime, CAST(NULL AS TIMESTAMP), wt.MaterialNumber, wt.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_tasks wt LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = wt.WarehouseOrder WHERE wt.TaskType = '[Verified picking task type]' AND wt.TaskConfirmedTime IS NOT NULL
UNION ALL
SELECT pk.[Warehouse order ID field], 'Packing Started', CAST(pk.[Packing start timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(pk.[Material number field] AS VARCHAR(255)), CAST(pk.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your packing event table] pk LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(pk.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT pk.[Warehouse order ID field], 'Packing Completed', CAST(pk.[Packing completion timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(pk.[Material number field] AS VARCHAR(255)), CAST(pk.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your packing event table] pk LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(pk.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT st.[Warehouse order ID field], 'Staging Task Confirmed', CAST(st.[Staging confirmation timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(st.[Material number field] AS VARCHAR(255)), CAST(st.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your staging event table] st LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(st.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT ld.[Warehouse order ID field], 'Loading Started', CAST(ld.[Loading start timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(ld.[Material number field] AS VARCHAR(255)), CAST(ld.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your loading event table] ld LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(ld.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT ld.[Warehouse order ID field], 'Loading Completed', CAST(ld.[Loading completion timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(ld.[Material number field] AS VARCHAR(255)), CAST(ld.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your loading event table] ld LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(ld.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT gi.[Warehouse order ID field], 'Goods Issue Posted', CAST(gi.[Goods issue posting timestamp field] AS TIMESTAMP), CAST(NULL AS TIMESTAMP), CAST(gi.[Material number field] AS VARCHAR(255)), CAST(gi.[User field] AS VARCHAR(255)), wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM [Your goods issue posting table] gi LEFT JOIN warehouse_orders wo ON wo.WarehouseOrder = CAST(gi.[Warehouse order ID field] AS VARCHAR(255))
UNION ALL
SELECT wo.WarehouseOrder, 'Warehouse Order Completed', wo.WarehouseOrderCompletedTime, CAST(NULL AS TIMESTAMP), wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo WHERE wo.WarehouseOrderCompletedTime IS NOT NULL
UNION ALL
SELECT wo.WarehouseOrder, 'Warehouse Order Canceled', wo.WarehouseOrderCanceledTime, CAST(NULL AS TIMESTAMP), wo.MaterialNumber, wo.[User], wo.WarehouseOrderType, wo.WarehouseOrderStatus, wo.Priority FROM warehouse_orders wo WHERE wo.WarehouseOrderCanceledTime IS NOT NULL
)
SELECT
e.WarehouseOrder,
e.ActivityName,
e.EventTime,
e.EventEndTime,
p.source_system AS SourceSystem,
p.last_data_update AS LastDataUpdate,
e.MaterialNumber,
e.[User],
e.WarehouseOrderType,
e.WarehouseOrderStatus,
e.Priority
FROM events e
CROSS JOIN params p
WHERE e.WarehouseOrder IS NOT NULL
AND e.EventTime IS NOT NULL
AND e.EventTime >= p.start_time
AND e.EventTime < p.end_time
ORDER BY e.WarehouseOrder, e.EventTime, e.ActivityName; Prêt à commencer ?
Commencez dès aujourd’hui à optimiser les opérations de votre entrepôt. Utilisez ce modèle pour améliorer l’efficacité et accélérer le traitement des ordres.
Éliminez les erreurs de préparation et optimisez la gestion de votre entrepôt dès aujourd’hui
Atteignez une précision des stocks de 99,5 % et éliminez les retards de traitement des commandes en quelques semaines.
Aucune carte bancaire requise. Configuration en quelques minutes.