Votre template de données pour la gestion des stocks
Votre template de données pour la gestion des stocks
- Attributs recommandés à collecter
- Activités clés à suivre pour découvrir le processus
- Guide d’extraction adapté à SAP S/4HANA
Attributs de gestion des stocks
| Nom | Description | ||
|---|---|---|---|
| Heure de l’événement EventTime | Date et heure précises auxquelles l’activité de stock a été enregistrée dans le système. | ||
| Description Event Time est l’horodatage qui indique précisément le moment où une activité s’est produite. Ces données sont essentielles pour classer les événements dans l’ordre chronologique et reconstituer le flux du processus pour chaque lot de stock. Elles servent de base à toutes les analyses temporelles de Process Mining. La précision de l’Event Time est essentielle pour calculer des indicateurs de performance tels que les temps de cycle, les délais et les durées. Elle permet d’analyser la performance du processus sur différentes périodes, d’identifier les moments où apparaissent les goulots d’étranglement et de comprendre les retards, par exemple le temps passé par un lot en contrôle qualité avant sa libération. Pourquoi c’est important Cet horodatage classe les événements dans l’ordre chronologique et constitue la base de tous les calculs de durée et de performance. Où les obtenir Il s’agit généralement d’une combinaison de la date de comptabilisation (MKPF-BUDAT) et de l’heure de saisie (MKPF-CPUTM) issues de la table d’en-tête des documents article MKPF. Exemples 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Lot d’inventaire InventoryBatchLot | Identifiant unique d’une quantité précise d’un produit, utilisé comme identifiant de cas pour suivre son cycle de vie. | ||
| Description Le numéro de lot d’inventaire est l’identifiant de cas principal qui regroupe toutes les activités liées à une quantité précise et distincte d’un produit. Il permet de reconstituer chronologiquement le parcours complet d’une quantité de stock, depuis sa réception initiale dans l’entrepôt, en passant par les différents mouvements internes et changements de statut, jusqu’à sa sortie pour une vente, une production ou une élimination. Dans l’analyse des processus, cet attribut est fondamental. Il permet de suivre le flux de bout en bout pour chaque lot, de mesurer précisément les temps de cycle, d’identifier les variations de processus et de comprendre comment les différents lots sont traités. L’analyse au niveau du lot est essentielle dans les secteurs où la traçabilité, le contrôle qualité et la gestion des dates d’expiration sont déterminants, notamment l’industrie pharmaceutique, l’agroalimentaire et la chimie. Pourquoi c’est important Il s’agit de l’identifiant central qui relie tous les événements de stock associés au sein d’un même cas et rend possible l’analyse de bout en bout du processus. Où les obtenir Il s’agit généralement du numéro de lot, présent dans des tables SAP telles que MCHA (Batch Master) ou MCH1 (Batches), dans le champ CHARG. Exemples B001-A452023L202405-XYZ789456123BATCH-05-24 | |||
| Activité ActivityName | Nom de l’événement métier survenu à un moment précis du processus de gestion des stocks. | ||
| Description L’attribut Activity décrit une étape ou un événement unique du cycle de vie du stock d’un lot. Ces événements représentent des actions métier importantes, comme la réception de marchandises, le déplacement du stock, la réalisation d’un contrôle qualité ou la sortie de matériel. Chaque activité correspond à un événement survenu sur le lot de stock à un moment précis. L’analyse des activités constitue le fondement du Process Mining. Elle permet de visualiser le flux du processus, d’identifier les parcours fréquents et rares, de détecter les goulots d’étranglement lorsque certaines activités sont retardées et d’analyser les boucles de reprise. En comprenant la séquence et la fréquence d’activités telles que « Stock Scrapped » ou « Quality Inspection », les entreprises peuvent repérer les domaines à améliorer et accroître leur efficacité opérationnelle. Pourquoi c’est important Il définit les étapes du processus et permet de visualiser et d’analyser le cycle de vie du stock. Où les obtenir Il s’agit d’un attribut dérivé, souvent associé à des noms compréhensibles par les utilisateurs à partir des Movement Types SAP (MSEG-BWART) ou des codes de transaction (MKPF-TCODE2). Exemples Réception des marchandises enregistréeTransfert de mise en stock enregistréSortie de marchandises pour livraison enregistréeStock mis au rebut | |||
| Code motif du mouvement de stock MovementReasonCode | Code qui précise le motif d’un mouvement de stock. | ||
| Description Le code Reason for Movement fournit un contexte supplémentaire sur la raison d’un mouvement de marchandises. Il sert souvent à expliquer les mouvements imprévus, tels que les ajustements de stock, les retours ou les mises au rebut. Cet attribut est particulièrement utile pour l’analyse des causes profondes. Dans le Dashboard « Manual Inventory Adjustment Drivers », l’analyse par code motif peut révéler l’origine des écarts, par exemple un dommage, un vol ou une erreur de saisie. Cette analyse aide les entreprises à traiter les problèmes sous-jacents plutôt qu’à corriger uniquement leurs conséquences. Pourquoi c’est important Il explique la raison des mouvements de stock imprévus et permet une analyse ciblée des causes profondes. Où les obtenir Présent dans la table des postes de documents article MSEG, champ GRUND (Reason for Movement). Exemples 00010005102 | |||
| Emplacement de stockage StorageLocation | Emplacement précis au sein d’un Plant où le stock est physiquement entreposé. | ||
| Description Un Storage Location est une unité organisationnelle qui permet de différencier les stocks de matériel au sein d’un Plant. Par exemple, un site peut disposer d’emplacements distincts pour les matières premières, les produits finis et le stock en contrôle qualité. Cet attribut fournit un niveau de détail plus précis que le Plant. Il sert à analyser les mouvements entre différentes zones de stock, notamment le délai de transfert entre la zone de réception et l’entrepôt principal. L’analyse de l’utilisation de l’espace et de la fréquence des mouvements par emplacement de stockage aide à optimiser l’agencement de l’entrepôt et la logistique interne. Pourquoi c’est important Il fournit une vue détaillée de l’emplacement du stock au sein d’un site et aide à analyser les mouvements internes ainsi que l’efficacité du stockage. Où les obtenir Présent dans la table des postes de documents article MSEG, champ LGORT (Storage Location). Exemples 0001RM01FG01QI01 | |||
| Nom d’utilisateur UserName | Identifiant de l’utilisateur qui a exécuté la transaction dans SAP. | ||
| Description Cet attribut enregistre l’identifiant SAP du collaborateur qui a comptabilisé le document ou exécuté l’activité. Il assure la traçabilité en indiquant qui est responsable des actions réalisées dans le processus de gestion des stocks. L’analyse par utilisateur est essentielle pour comprendre la performance, la conformité et les besoins de formation. Par exemple, le Dashboard « Manual Inventory Adjustment Drivers » utilise cet attribut pour identifier les utilisateurs qui effectuent le plus d’ajustements. Il peut aider à repérer les personnes nécessitant une formation complémentaire, à mettre en évidence des activités non autorisées ou à reconnaître les meilleurs contributeurs. Pourquoi c’est important Il établit la responsabilité et aide à identifier les comportements propres à certains utilisateurs, les besoins de formation ou les problèmes de conformité. Où les obtenir Présent dans la table d’en-tête des documents article MKPF, champ USNAM (User Name). Exemples JSMITHMBROWNWAREHOUSE_OPS | |||
| Numéro de matériel MaterialNumber | Identifiant unique du produit ou du matériel géré. | ||
| Description Le numéro de matériel, souvent appelé SKU (Stock Keeping Unit), est le code unique attribué à un produit donné. Il constitue un élément fondamental des données de référence de la gestion des stocks et sert à suivre les quantités, les valeurs et les mouvements de marchandises. Dans le Process Mining, l’analyse par numéro de matériel permet d’examiner les processus de stock du point de vue du produit. Elle aide à répondre à des questions telles que : quels produits présentent les temps de contrôle qualité les plus longs, lesquels sont le plus souvent mis au rebut ou lesquels font l’objet du plus grand nombre de transferts internes ? Cette segmentation est essentielle pour identifier les problèmes propres à certains produits et adapter les stratégies de gestion des stocks aux différents types de marchandises. Pourquoi c’est important Il permet de segmenter l’analyse par produit afin de révéler les tendances et les problèmes propres à certains articles. Où les obtenir Présent dans la table des postes de documents article MSEG, champ MATNR. Les données de référence se trouvent dans la table MARA. Exemples RM-1001FG-2050-B100-400-A | |||
| Quantité Quantity | Quantité de matériel concernée par le mouvement de stock. | ||
| Description Cet attribut représente la quantité de matériel déplacée, reçue, sortie ou ajustée lors d’une activité donnée. Elle est enregistrée dans l’unité de mesure de base du matériel. L’analyse de la quantité est essentielle pour comprendre l’ampleur et l’impact des processus de stock. Elle permet de créer des Dashboards représentant le volume de marchandises traitées, comme « Goods Issue Throughput by SKU ». Elle sert également à calculer des KPI tels que le ratio de stock mis au rebut ou éliminé, en apportant une dimension quantitative à l’analyse du processus qui ne se limite pas au décompte des événements. Pourquoi c’est important Elle quantifie le volume de matériel associé à chaque activité et permet d’analyser le débit, le volume mis au rebut et l’impact des ajustements. Où les obtenir Présent dans la table des postes de documents article MSEG, champ MENGE (Quantity). Exemples 10012.55000-10 | |||
| Site Plant | Unité organisationnelle représentant un établissement où se trouve le stock, comme une usine ou un centre de distribution. | ||
| Description Un Plant est une unité organisationnelle centrale dans SAP. Il peut représenter un site de production, un entrepôt central ou un siège social. Tout le stock est physiquement ou logiquement rattaché à un Plant. L’analyse par Plant est fondamentale pour comparer la performance des processus entre différents sites. Elle permet de répondre à des questions telles que : quel site présente le délai de mise en stock le plus long ? Le taux d’écarts d’inventaire est-il plus élevé sur le site A que sur le site B ? Cette segmentation géographique ou organisationnelle est essentielle pour identifier les problèmes propres à chaque site et partager les bonnes pratiques dans l’ensemble de l’organisation. Pourquoi c’est important Il permet de comparer les processus et la performance des stocks entre les différents sites de l’entreprise. Où les obtenir Présent dans la table des postes de documents article MSEG, champ WERKS (Plant). Exemples 10001710DE01US01 | |||
| Type de mouvement MovementType | Clé à trois chiffres dans SAP qui détermine la manière dont un mouvement de marchandises est comptabilisé. | ||
| Description Le Movement Type est une clé de contrôle essentielle de la gestion des stocks SAP. Il détermine les caractéristiques d’un mouvement de matériel, les comptes mis à jour, la présentation de l’écran de transaction ainsi que les champs de quantité ou de valeur actualisés. Par exemple, « 101 » correspond à une réception de marchandises, « 311 » à un transfert et « 551 » à une mise au rebut. Cet attribut sert souvent à dériver le nom Activity compréhensible par les utilisateurs. L’analyse des processus par Movement Type offre une vue technique détaillée des flux de stock. Elle est essentielle pour valider l’exactitude de la cartographie du processus et identifier les types de transactions susceptibles de provoquer des goulots d’étranglement ou des écarts. Pourquoi c’est important Il fournit une classification technique précise de chaque événement de stock, essentielle pour dériver les activités et réaliser une analyse détaillée. Où les obtenir Présent dans la table des postes de documents article MSEG, champ BWART (Movement Type). Exemples 101311261551601 | |||
| Bac de stockage StorageBin | Unité de stockage la plus précise d’un entrepôt, où les matériaux sont physiquement entreposés. | ||
| Description Un Storage Bin représente une coordonnée précise dans un entrepôt, par exemple l’emplacement d’une étagère. Ce niveau de détail est généralement utilisé lorsque SAP Warehouse Management (WM) ou Extended Warehouse Management (EWM) est déployé. Pour le Dashboard « Warehouse Storage Utilization », cet attribut est essentiel. Il permet d’analyser l’efficacité d’utilisation de l’espace, d’identifier les zones potentiellement encombrées et de révéler les parcours inefficaces de mise en stock ou de prélèvement. L’analyse des mouvements entre les bacs de stockage aide à optimiser l’agencement de l’entrepôt et à réduire le temps de déplacement des opérateurs. Pourquoi c’est important Il fournit les données de localisation les plus précises et permet d’analyser l’utilisation de l’espace ainsi que l’efficacité opérationnelle de l’entrepôt. Où les obtenir Avec WM, ces informations peuvent se trouver dans des tables de Transfer Order telles que LTAK/LTAP. Pour les documents d’inventaire, elles peuvent figurer dans MSEG-LGPBE. Consultez la documentation SAP S/4HANA. Exemples A-01-01-AB-05-10-CRCV-AREA-01 | |||
| Date d’expiration ExpirationDate | Date à laquelle le lot de matériel expire et ne peut plus être utilisé. | ||
| Description La date d’expiration de la durée de conservation (SLED) est une donnée de référence essentielle pour les marchandises périssables ou sensibles au temps. Elle est gérée au niveau du lot et détermine à partir de quelle date un produit ne peut plus être vendu ou consommé. Cet attribut est essentiel au Dashboard « Obsolete & Expired Stock Analysis ». En analysant les activités en fonction de la date d’expiration, les entreprises peuvent identifier les lots susceptibles d’arriver à expiration et prendre des mesures préventives. Il permet de mesurer l’efficacité des politiques de rotation des stocks, telles que First-Expired-First-Out (FEFO), et de quantifier les pertes liées aux stocks périmés mis au rebut. Pourquoi c’est important Il permet d’analyser les stocks obsolètes et périmés afin de réduire les déchets et les pertes financières. Où les obtenir Présent dans la table de données de référence des lots MCH1 ou MCHA, champ VFDAT (Shelf Life Expiration Date). Exemples 2024-12-312025-06-302024-09-01 | |||
| Délai du cycle d’exécution de la commande OrderFulfillmentCycleTime | Durée de bout en bout entre le début du prélèvement et la sortie des marchandises pour livraison. | ||
| Description Il s’agit d’une mesure calculée qui évalue le temps total entre l’activité « Picking Initiated » et l’activité « Goods Issue for Delivery Posted ». Elle représente le temps total nécessaire à l’entrepôt pour préparer et expédier une commande client une fois le processus lancé. Cet attribut mesure directement le KPI « Order Fulfillment Cycle Time ». L’analyse de cette durée aide les entreprises à comprendre leur réactivité face à la demande client. Elle peut être ventilée par produit, entrepôt ou client afin d’identifier les points de retard dans le processus de prélèvement, de préparation et d’expédition, avec un impact direct sur la satisfaction client et l’efficacité logistique. Pourquoi c’est important Il mesure la rapidité et l’efficacité du processus de sortie de l’entrepôt, qui constituent des facteurs importants de la satisfaction client. Où les obtenir Il s’agit d’un attribut calculé, obtenu en calculant la différence de temps entre les événements « Picking Initiated » et « Goods Issue for Delivery Posted » pour chaque lot. Exemples 7200144003600 | |||
| 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 enregistre la date et l’heure de la dernière extraction ou mise à jour des données depuis le système source. Il fournit des métadonnées importantes sur l’actualité des informations analysées. Les utilisateurs peuvent ainsi déterminer s’ils consultent des données quasi en temps réel ou un instantané d’une période antérieure. Dans toute analyse, connaître l’actualité des données est essentiel pour tirer des conclusions pertinentes et exactes. Ce champ permet aux analystes et aux utilisateurs métier de vérifier que les données sont à jour. Il est souvent affiché dans les Dashboards afin de donner du contexte aux analyses présentées. Pourquoi c’est important Il informe les utilisateurs sur l’actualité des données et garantit que les analyses reposent sur des informations à jour. Où les obtenir Cet horodatage est généré et ajouté lors du processus d’extraction, de transformation et de chargement des données (ETL). Exemples 2024-05-21T08:00:00Z2024-05-20T08:00:00Z | |||
| Numéro du document article MaterialDocumentNumber | Numéro unique identifiant le document article qui enregistre le mouvement de marchandises. | ||
| Description Lorsqu’un mouvement de marchandises est comptabilisé dans SAP, le système génère un document article comme preuve du mouvement. Cet attribut est l’identifiant unique de ce document. Un même document article peut contenir plusieurs postes ou activités. Dans le Process Mining, le numéro du document article est un identifiant transactionnel essentiel pour regrouper les événements comptabilisés ensemble. Il est également indispensable pour l’audit et pour accéder, depuis l’analyse du processus, au système source afin d’examiner des transactions précises. Pourquoi c’est important Il sert de clé transactionnelle pour l’audit et permet de regrouper les activités exécutées ensemble. Où les obtenir Présent dans les tables MKPF (en-tête) et MSEG (poste), champ MBLNR (Number of Material Document). Exemples 490000123450000056784900002345 | |||
| Système source SourceSystem | Identifie le système source depuis lequel les données ont été extraites. | ||
| Description Cet attribut indique le système de référence dont proviennent les données de gestion des stocks. Dans ce contexte, il s’agit de l’instance SAP S/4HANA concernée. Cette information est essentielle lorsque les données proviennent de plusieurs ERP, systèmes de gestion d’entrepôt ou plateformes historiques. Même si cet attribut peut sembler statique dans une analyse portant sur un seul système, il devient indispensable lors de la fusion de données issues de sources différentes afin d’obtenir une vue globale du processus. Il contribue à la gouvernance des données, au diagnostic des problèmes d’extraction et à la traçabilité de leur origine. Pourquoi c’est important Il fournit le contexte sur l’origine des données, indispensable à la gouvernance des données et à l’analyse de plusieurs systèmes. Où les obtenir Il s’agit généralement d’une valeur codée en dur lors de la transformation des données afin d’identifier l’instance SAP S/4HANA concernée. Exemples S4H_PROD_100SAP_S4_FINANCES4HANA_GLOBAL | |||
| Type de stock StockType | Indique le statut du stock, par exemple non restreint, en contrôle qualité ou bloqué. | ||
| Description Stock Type catégorise le stock selon son utilisabilité. Les principaux types sont le stock à utilisation libre, disponible sans restriction, le stock en contrôle qualité, en attente de vérifications, et le stock bloqué, indisponible. Les mouvements de marchandises impliquent souvent une modification du type de stock. Le suivi des changements de type de stock est fondamental pour comprendre le processus de disponibilité des stocks. Il prend directement en charge des activités telles que « Stock Posted to Quality Inspection » et « Stock Status Changed to Blocked ». L’analyse du temps passé dans chaque type de stock, en particulier en contrôle qualité, est essentielle pour identifier les retards qui affectent la disponibilité des marchandises pour la vente ou la production. Pourquoi c’est important Il suit le statut d’utilisation du stock, essentiel pour analyser les retards du contrôle qualité et la disponibilité des stocks. Où les obtenir Présent dans la table des postes de documents article MSEG, champ INSMK (Stock Type). Exemples Utilisation sans restrictionContrôle qualitéStock bloqué | |||
| Unité de mesure UnitOfMeasure | Unité dans laquelle la quantité de matériel est mesurée, par exemple en pièces ou en kilogrammes. | ||
| Description L’unité de mesure précise l’unité associée à l’attribut « Quantity ». Les exemples courants sont les pièces (PC), les kilogrammes (KG), les litres (L) ou les boîtes (BOX). Elle fournit le contexte nécessaire à l’interprétation de la quantité. Bien qu’elle soit souvent utilisée comme simple libellé, cette information est importante pour garantir la qualité des données et réaliser des analyses nécessitant la conversion de différentes unités vers une référence commune. Par exemple, pour calculer précisément la valeur totale du stock mis au rebut, il faut comprendre les quantités exprimées dans différentes unités et, si nécessaire, les convertir. Pourquoi c’est important Elle fournit le contexte nécessaire à l’attribut « Quantity » et garantit une interprétation exacte des volumes de matériel. Où les obtenir Présent dans la table des postes de documents article MSEG, champ MEINS (Base Unit of Measure). Exemples PCKGEAM | |||
Activités de gestion des stocks
| Activité | Description | ||
|---|---|---|---|
| Ajustement de stock enregistré | Enregistre une modification de la quantité en stock résultant d’un inventaire physique ou d’un autre écart. Cet événement ajuste explicitement le stock comptable afin de le faire correspondre au comptage physique. | ||
| Pourquoi c’est important Ces ajustements sont essentiels pour maintenir l’exactitude des stocks. Une fréquence élevée d’ajustements indique des problèmes sous-jacents de gestion du stock, de sécurité ou de saisie des données. Où les obtenir Enregistré dans la table MATDOC. Identifié par les Movement Types (BWART) d’inventaire physique, tels que 701, correspondant à un gain d’inventaire, ou 702, correspondant à une perte d’inventaire. Collecte Extrait des documents article dans MATDOC avec les Movement Types d’ajustement d’inventaire physique, par exemple 701 et 702. Type d’événement explicit | |||
| Réception des marchandises enregistrée | Marque l’entrée initiale d’un lot de stock dans l’entrepôt, généralement en provenance d’un fournisseur ou de la production. Cet événement est explicitement enregistré dans SAP S/4HANA lorsqu’un document de matériel est créé à la réception des marchandises. | ||
| Pourquoi c’est important Il s’agit de l’événement de début principal du cycle de vie des stocks. L’analyse du temps écoulé entre cette activité et d’autres, comme la mise en stock, est essentielle pour mesurer l’efficacité des quais de réception. Où les obtenir Enregistré dans la table MATDOC. Identifié par des types de mouvements spécifiques (BWART), tels que 101 pour les réceptions liées à une commande d’achat ou 103 pour une réception en stock bloqué. Collecte Capturé à partir des documents de matériel dans MATDOC, avec les types de mouvements correspondant aux réceptions de marchandises. Type d’événement explicit | |||
| Sortie de marchandises pour livraison enregistrée | Enregistre l’étape finale du processus de sortie, au cours de laquelle la propriété du lot est transférée au client ou au transporteur. Il s’agit d’une transaction explicite qui réduit le stock et est comptabilisée. | ||
| Pourquoi c’est important Il s’agit d’un événement de clôture essentiel du processus d’exécution de la commande. Il est important pour mesurer les livraisons à temps et calculer le délai global d’exécution de la commande. Où les obtenir Enregistré dans la table MATDOC. Identifié par le Movement Type (BWART) correspondant à la sortie de marchandises pour une livraison liée à une commande client, généralement 601. Collecte Extrait des documents article dans MATDOC avec le Movement Type 601. Type d’événement explicit | |||
| Sortie de marchandises pour production enregistrée | Représente la consommation d’un lot de stock par un ordre de production ou de processus. Cette transaction réduit le stock et impute le coût du matériel à l’ordre de fabrication. | ||
| Pourquoi c’est important Il s’agit d’un événement de consommation principal, qui marque la fin du cycle de vie du stock pour les composants. Il est essentiel pour analyser la disponibilité des matériaux destinés à la production et les habitudes de consommation. Où les obtenir Enregistré dans la table MATDOC. Identifié par les Movement Types (BWART) correspondant à une sortie de marchandises pour un ordre, notamment 261. Collecte Extrait des documents article dans MATDOC avec le Movement Type 261. Type d’événement explicit | |||
| Stock de contrôle qualité libéré | Indique qu’un lot a passé le contrôle qualité et qu’il est désormais disponible pour être utilisé ou mis en stock. Cet événement est enregistré comme un transfert explicite du stock de contrôle qualité vers un autre type de stock, tel que le stock à utilisation libre. | ||
| Pourquoi c’est important Cette étape marque la fin du processus qualité et rend le stock disponible. Les retards à ce stade peuvent entraîner des problèmes importants en aval, dans la production ou l’exécution des commandes. Où les obtenir Enregistré dans la table MATDOC comme un transfert de stock. Généralement identifié par le type de mouvement (BWART) 321, qui transfère le stock du « Quality Inspection » vers le stock à « Unrestricted-use ». Collecte Capturé à partir des documents de matériel dans MATDOC avec le type de mouvement 321. Type d’événement explicit | |||
| Stock mis au rebut | Marque l’élimination définitive d’un lot de stock, qui est retiré de façon permanente des enregistrements d’inventaire. Cela concerne généralement des stocks périmés, endommagés ou obsolètes. | ||
| Pourquoi c’est important Il s’agit d’un événement de fin représentant une perte financière. L’analyse des mises au rebut permet d’identifier les problèmes liés au vieillissement des stocks, aux procédures de manutention ou aux prévisions de la demande. Où les obtenir Enregistré dans la table MATDOC. Identifié par les Movement Types (BWART) de mise au rebut, tels que 551 depuis le stock non restreint, 553 depuis le contrôle qualité ou 555 depuis le stock bloqué. Collecte Extrait des documents article dans MATDOC avec les Movement Types de mise au rebut, par exemple 551. Type d’événement explicit | |||
| Transfert de mise en stock enregistré | Représente le déplacement physique du lot depuis une zone de réception ou de transit vers son emplacement ou bac de stockage final. Ce déplacement est enregistré dans SAP sous la forme d’un document article de transfert. | ||
| Pourquoi c’est important Achève le processus de réception des marchandises. Le temps nécessaire à cette activité, appelé délai de mise en stock, constitue un KPI essentiel de l’efficacité de l’entrepôt. Où les obtenir Enregistré dans la table MATDOC comme un transfert, souvent entre emplacements de stockage, par exemple avec le Movement Type 311. Le mouvement précis peut varier selon la structure de l’entrepôt. Collecte Identifié par les documents de transfert dans MATDOC, qui déplacent le stock d’un SLoc intermédiaire ou de réception vers un SLoc de stockage final. Type d’événement explicit | |||
| Prélèvement lancé | Marque le début du processus d’exécution de la commande, lorsqu’une tâche d’entrepôt est créée pour prélever un lot dans son bac de stockage. Cet événement est souvent enregistré lors de la création d’un Transfer Order ou d’une Warehouse Task. | ||
| Pourquoi c’est important Cette activité déclenche le processus de prélèvement. L’analyse du temps écoulé entre cet événement et la fin du prélèvement permet de mesurer l’efficacité des opérateurs de l’entrepôt et d’identifier les retards. Où les obtenir Cet événement ne figure généralement pas dans MATDOC. Dans les systèmes utilisant Warehouse Management (WM/EWM), il est déduit de l’horodatage de création d’un Transfer Order, dans la table LTAK, ou d’une Warehouse Task. Collecte Déduit de l’enregistrement de création d’un Transfer Order dans WM ou d’une Warehouse Task dans EWM, associé au lot de matériel. Type d’événement inferred | |||
| Retour client reçu | Enregistre le retour en entrepôt d’un lot précédemment sorti et livré à un client. Il s’agit d’une transaction explicite qui augmente le stock. | ||
| Pourquoi c’est important Le suivi des retours est essentiel pour comprendre les problèmes de qualité des produits et l’insatisfaction des clients. Le traitement et la décision concernant les retours peuvent également être une source d’inefficacité. Où les obtenir Enregistré dans la table MATDOC. Identifié par les Movement Types (BWART) des retours clients, tels que 651, vers le stock non restreint, ou 653, vers le contrôle qualité. Collecte Extrait des documents article dans MATDOC avec les Movement Types des retours clients, par exemple 651 et 653. Type d’événement explicit | |||
| Statut du lot modifié | Reflète une modification de la fiche article du lot, par exemple le passage du statut « Unrestricted » à « Restricted ». Il ne s’agit pas d’un mouvement de stock, mais d’une modification des données de référence qui est journalisée. | ||
| Pourquoi c’est important Les changements de statut du lot ont une incidence directe sur son utilisation dans les ventes ou la production. Leur analyse peut révéler des problèmes liés aux stocks arrivant à expiration ou au contrôle qualité, sans mouvement physique. Où les obtenir Déduit des journaux de modification des tables de données de référence des lots (MCH1, MCHA). Les tables CDHDR et CDPOS suivent les modifications du champ de statut du lot (MCH1-ZUSTD). Collecte Dérivé des documents de modification dans CDHDR/CDPOS pour le champ de statut de la fiche article du lot (MCH1-ZUSTD). Type d’événement inferred | |||
| Statut du stock passé à bloqué | Représente une modification du statut du lot, qui le rend indisponible pour la sortie, souvent en raison d’un dommage, d’une demande de mise en attente ou d’un autre motif. Il s’agit d’un transfert explicite dans SAP. | ||
| Pourquoi c’est important Met en évidence les interruptions de disponibilité du stock. Une fréquence élevée d’événements de blocage peut signaler des problèmes de manutention, de conditions de stockage ou de qualité fournisseur. Où les obtenir Enregistré dans la table MATDOC comme un transfert. Le Movement Type (BWART) 344 est généralement utilisé pour déplacer le stock de « Blocked » vers « Unrestricted », et le 343 pour le déplacer de « Unrestricted » vers « Blocked ». Cette activité correspond au 343. Collecte Identifié par les documents article dans MATDOC avec le Movement Type 343. Type d’événement explicit | |||
| Statut du stock passé à non restreint | Représente une modification du statut du lot, qui est libéré d’un blocage ou d’une mise en attente qualité et redevient disponible. Cette modification est enregistrée comme un transfert explicite. | ||
| Pourquoi c’est important Cette activité marque la résolution d’une mise en attente du stock. Le temps passé par le stock à l’état bloqué peut être analysé afin d’améliorer les processus de résolution. Où les obtenir Enregistré dans la table MATDOC comme un transfert. Le Movement Type (BWART) 344 déplace le stock de « Blocked » vers « Unrestricted-use ». Collecte Identifié par les documents article dans MATDOC avec le Movement Type 344. Type d’événement explicit | |||
| Stock enregistré en contrôle qualité | Représente le transfert d’un lot réceptionné vers un statut de contrôle qualité, ce qui le rend indisponible jusqu’à sa validation. Il s’agit d’une transaction explicite dans SAP qui modifie le type de stock du lot. | ||
| Pourquoi c’est important Cette activité lance le processus de contrôle qualité. La durée entre cette étape et la libération du stock de contrôle qualité constitue un indicateur essentiel pour comprendre les retards liés à la qualité. Où les obtenir Enregistré dans la table MATDOC. Il peut s’agir d’un mouvement de réception, par exemple 101, avec le type de stock (INSMK) défini sur « Q » (contrôle qualité), ou d’un transfert de stock, par exemple 322. Collecte Identifié par les documents de matériel dans MATDOC qui placent le stock dans le type « Quality Inspection ». Type d’événement explicit | |||
| Transfert interne de stock enregistré | Enregistre le déplacement d’un lot de stock entre différents emplacements ou bacs de stockage au sein du même site. Il s’agit d’une transaction explicite qui crée un document article. | ||
| Pourquoi c’est important Le suivi des transferts internes permet d’analyser l’efficacité opérationnelle de l’entrepôt, d’identifier les déplacements inutiles et de mesurer le délai de réapprovisionnement du stock entre les emplacements. Où les obtenir Enregistré dans la table MATDOC. Généralement identifié par le Movement Type (BWART) 311 pour les transferts d’un emplacement de stockage à un autre. Collecte Extrait des documents article dans MATDOC avec les Movement Types correspondant aux mouvements internes de stock, par exemple 311. Type d’événement explicit | |||
Guides d’extraction
Étapes
- Établir l’accès au système : vérifiez que vous disposez d’un utilisateur possédant les autorisations nécessaires pour interroger les vues Core Data Services (CDS) du système SAP S/4HANA. Cet accès est généralement accordé par un administrateur système.
- Choisir un client SQL : sélectionnez un outil client SQL capable de se connecter à la base de données SAP HANA. Les outils couramment utilisés sont SAP HANA Studio, SAP HANA Database Explorer ou des outils tiers tels que DBeaver.
- Configurer la connexion à la base de données : créez une nouvelle connexion à la base de données dans votre client SQL. Vous aurez besoin du nom d’hôte de la base HANA, du numéro de port, généralement 3<instance_number>15, ainsi que des identifiants de votre utilisateur de base de données.
- Préparer la requête SQL : copiez la requête SQL complète fournie dans la section « query » de ce document dans l’éditeur de votre client SQL.
- Définir les paramètres de la requête : repérez les valeurs servant d’espaces réservés dans la requête. Vous devez remplacer
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'par la période souhaitée, par exempleBETWEEN '20230101' AND '20230630'. Mettez également à jour les filtres propres à l’entreprise ou au site, tels queMaterialDocumentItem.Plant IN ('Plant1', 'Plant2'), afin qu’ils correspondent à votre organisation. - Exécuter la requête : lancez la requête SQL modifiée sur la base de données S/4HANA. La durée d’exécution varie selon la période sélectionnée et le volume de données d’inventaire du système.
- Vérifier les données : une fois la requête terminée, examinez les résultats dans votre client SQL pour vous assurer qu’ils sont corrects et complets. Vérifiez la présence des différentes activités et le renseignement des attributs clés.
- Exporter l’Event Log : exportez l’ensemble des résultats depuis votre client SQL dans un fichier CSV. Vérifiez que les paramètres d’export utilisent l’encodage UTF-8 afin d’éviter les problèmes de caractères.
- Préparer le chargement : nommez les colonnes du fichier CSV exactement comme les alias définis dans la requête, par exemple
InventoryBatchLot,ActivityName,EventTime, etc. Le fichier est maintenant prêt à être chargé dans un outil de Process Mining.
Configuration
- Autorisations : l’utilisateur qui exécute la requête doit disposer des autorisations
SELECTsur les vues CDS suivantes :I_MaterialDocumentItem,I_BatchChangeDocumentetI_WarehouseTask. Un accès au schéma de base de données sous-jacent où résident ces vues est également requis. - Filtrage par période : il est essentiel d’appliquer un filtre de période aux champs
PostingDate,ChangeDocumentCreationDateouWarehouseTaskCreationDate. Une période de 3 à 12 mois est généralement adaptée à l’analyse. Une requête portant sur plusieurs années peut entraîner d’importants problèmes de performance. - Filtres organisationnels : pour améliorer les performances et cibler l’analyse, ajoutez des clauses
WHEREafin de filtrer parPlantouCompanyCode. Vous réduirez ainsi le volume de données et concentrerez l’extraction sur les périmètres pertinents. - Volume de données : gardez à l’esprit que les systèmes de gestion des stocks génèrent un volume important de données. Une période étendue peut produire des millions de lignes et affecter le système source pendant l’extraction ainsi que les performances de votre outil client.
- Extended Warehouse Management (EWM) : l’activité « Picking Initiated » repose sur la vue CDS
I_WarehouseTask, qui n’est alimentée que si vous utilisez SAP Extended Warehouse Management. Si votre organisation utilise l’ancien module Warehouse Management (WM) ou uniquement Inventory Management (IM), cette activité ne sera pas extraite.
a Exemple de requête sql
SELECT
mat_doc.Batch AS "InventoryBatchLot",
CASE
WHEN mat_doc.MovementType = '101' AND mat_doc.InventoryStockType = '2' THEN 'Stock Posted to Quality Inspection'
WHEN mat_doc.MovementType = '101' THEN 'Goods Receipt Posted'
WHEN mat_doc.MovementType = '321' THEN 'Quality Inspection Stock Released'
WHEN mat_doc.MovementType = '311' THEN 'Internal Stock Transfer Posted'
WHEN mat_doc.MovementType = '344' THEN 'Stock Status Changed to Blocked'
WHEN mat_doc.MovementType IN ('343', '322') THEN 'Stock Status Changed to Unrestricted'
WHEN mat_doc.MovementType IN ('701', '702') THEN 'Inventory Adjustment Posted'
WHEN mat_doc.MovementType = '601' THEN 'Goods Issue for Delivery Posted'
WHEN mat_doc.MovementType = '261' THEN 'Goods Issue for Production Posted'
WHEN mat_doc.MovementType IN ('651', '653') THEN 'Sales Return Received'
WHEN mat_doc.MovementType = '551' THEN 'Stock Scrapped'
WHEN mat_doc.MovementType = '313' THEN 'Put-Away Transfer Posted' -- Example for two-step transfers
ELSE 'Unknown Material Movement'
END AS "ActivityName",
TO_TIMESTAMP(mat_doc.PostingDate || LPAD(mat_doc.CreationTime, 6, '0'), 'YYYYMMDDHH24MISS') AS "EventTime",
mat_doc.Material AS "MaterialNumber",
mat_doc.CreatedByUser AS "UserName",
mat_doc.MovementType AS "MovementType",
mat_doc.Plant AS "Plant",
mat_doc.StorageLocation AS "StorageLocation",
mat_doc.QuantityInEntryUnit AS "Quantity",
mat_doc.ReasonForMovement AS "MovementReasonCode"
FROM
I_MaterialDocumentItem AS mat_doc
WHERE
mat_doc.Batch IS NOT NULL AND mat_doc.Batch <> ''
AND mat_doc.PostingDate BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
-- AND mat_doc.Plant IN ('Plant1', 'Plant2') -- Placeholder: Add filters for relevant plants
UNION ALL
SELECT
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 3) AS "InventoryBatchLot",
'Batch Status Changed' AS "ActivityName",
change_doc.ChangeDocumentCreationDateTime AS "EventTime",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 1) AS "MaterialNumber",
change_doc.ChangedByUser AS "UserName",
NULL AS "MovementType",
SPLIT_PART(change_doc.ChangeableObjectDescription, '/', 2) AS "Plant",
NULL AS "StorageLocation",
NULL AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_BatchChangeDocument AS change_doc
WHERE
change_doc.ChangeDocumentTable = 'MCHA' AND change_doc.ChangeDocumentTableFieldName = 'ZUSTD'
AND TO_VARCHAR(change_doc.ChangeDocumentCreationDate) BETWEEN '20230101' AND '20231231' -- Placeholder: Set your date range
UNION ALL
SELECT
wh_task.Batch AS "InventoryBatchLot",
'Picking Initiated' AS "ActivityName",
wh_task.WarehouseTaskCreationDateTime AS "EventTime",
wh_task.Product AS "MaterialNumber",
wh_task.CreatedByUser AS "UserName",
NULL AS "MovementType",
wh_task.Plant AS "Plant",
wh_task.SourceStorageLocation AS "StorageLocation",
wh_task.TargetQuantity AS "Quantity",
NULL AS "MovementReasonCode"
FROM
I_WarehouseTask AS wh_task
WHERE
wh_task.Batch IS NOT NULL AND wh_task.Batch <> ''
AND wh_task.WarehouseProcessType IN ('P210', 'P220') -- Placeholder: Adjust process types based on your picking configuration
AND TO_VARCHAR(wh_task.WarehouseTaskCreationDate) BETWEEN '20230101' AND '20231231'; -- Placeholder: Set your date range Étapes
- Vérifiez que l’accès direct à SAP HANA SQL est approuvé et que l’utilisateur chargé de l’extraction dispose d’un accès en lecture à MATDOC ainsi qu’aux tables de données de base des lots requises par le système. Identifiez le propriétaire du schéma physique et remplacez [Your SAP HANA schema] par le nom de schéma approuvé.
- Vérifiez les champs disponibles dans les tables MATDOC et des lots pour la version SAP S/4HANA cible. La requête ci-dessous utilise des champs MATDOC couramment disponibles ainsi que des champs MCHA, mais leur disponibilité et leur nom peuvent varier selon la version, le déploiement et le périmètre activé. Remplacez tout champ marqué [Configure based on your system] avant l’exécution.
- Définissez la période d’extraction en remplaçant [Start timestamp] et [End timestamp] par des valeurs d’horodatage ISO. Commencez par une période de trois à six mois, puis élargissez-la après avoir vérifié le volume et les performances.
- Exécutez la requête dans un client SQL approuvé, SAP HANA Database Explorer ou un outil de base de données équivalent et autorisé. Limitez les résultats aux codes société, sites, types de document ou types de mouvement requis en remplaçant les espaces réservés correspondants dans les filtres.
- Vérifiez la correspondance des types de mouvement dans le CTE des activités. Les types de mouvement dépendent de la configuration du système et de l’entreprise. Remplacez les listes d’exemple par les types de mouvement configurés dans le système cible pour la réception de marchandises, le contrôle qualité, la libération, la mise en stock, le transfert interne, le stock bloqué, le stock libre, l’ajustement d’inventaire, la préparation, la sortie pour livraison, la sortie pour production, le retour client et la mise au rebut.
- Vérifiez que chaque ligne de sortie contient InventoryBatchLot, ActivityName et EventTime. Confirmez que l’identifiant du lot est suffisamment stable pour servir d’identifiant de cas ProcessMind. Si le contexte métier exige de distinguer des valeurs de lot identiques entre plusieurs unités organisationnelles, utilisez l’identifiant de cas composite configuré plutôt que la seule valeur du lot.
- Vérifiez l’ordre des événements, les doublons, les documents d’annulation, les documents contre-passés et la gestion des fuseaux horaires. MATDOC enregistre les comptabilisations de documents : les écritures de contre-passation et d’annulation peuvent donc apparaître comme des événements distincts, sauf si elles sont explicitement exclues ou mappées.
- Exportez le résultat de la requête dans un fichier plat contenant une ligne par événement et les colonnes InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity et MovementReasonCode. Conservez les horodatages dans un format ISO 8601 cohérent et préservez les zéros initiaux des valeurs d’article, de lot, de site et d’emplacement de stockage.
- Chargez l’Event Log obtenu dans ProcessMind et mappez InventoryBatchLot comme identifiant de cas, ActivityName comme activité et EventTime comme horodatage de l’événement. Ne comptez pas sur ProcessMind pour déduire les activités, regrouper les enregistrements ou reconstituer les événements manquants.
Configuration
- Méthode d’extraction : requête SQL directe sur les données d’inventaire et de lots SAP HANA. La requête lit MATDOC et joint les données de base des lots provenant de MCHA. N’ajoutez MCH1 ou une autre table de lots qu’après avoir confirmé les champs pertinents et le niveau de gestion des lots dans le système cible.
- Période : commencez par trois à six mois. Utilisez EventTime, fondé sur la date et l’heure de comptabilisation du document article disponibles dans MATDOC. Pour les chargements incrémentiels, prévoyez une fenêtre de chevauchement maîtrisée afin de capturer les comptabilisations tardives, puis dédupliquez les résultats à l’aide des identifiants de document et de poste configurés.
- Filtres requis : configurez le code société, le site, le type de document article, le type de mouvement, la présence d’un lot et la date de comptabilisation selon le périmètre du processus. Les champs du code société et du type de document doivent être confirmés pour la version installée avant d’être ajoutés à la requête.
- Correspondance des activités : la signification des types de mouvement dépend de la configuration. Tenez à jour une table de correspondance approuvée ou remplacez les listes de types de mouvement de la requête par les valeurs utilisées par l’entreprise. Ne considérez pas les listes d’exemple comme une sémantique SAP universelle.
- Périmètre des lots : la requête exclut les lignes sans valeur de lot, car l’identifiant de cas est InventoryBatchLot. Si le lot doit être déduit d’une autre source, configurez explicitement cette source avant l’extraction.
- Granularité des événements : chaque poste MATDOC admissible produit une ligne d’événement. La requête ne déduit pas la préparation, les décisions qualité, les changements de statut des lots ni les autres activités à partir d’enregistrements ultérieurs.
- Modifications des données de base des lots : les changements de statut des lots ne sont pas représentés de manière fiable par MATDOC seul. Configurez une source de documents de modification ou d’historique des lots pour l’activité Batch Status Changed. La requête contient une branche réservée qui doit être reliée à une source vérifiée avant l’exécution.
- Préparation : le lancement de la préparation relève généralement des données d’exécution de l’entrepôt plutôt que d’une comptabilisation MATDOC. Configurez une source vérifiée de tâches d’entrepôt ou d’ordres de transfert et remplacez la branche réservée avant l’exécution.
- Performances : filtrez par horodatage ou date de comptabilisation, site, code société et types de mouvement pertinents. Sélectionnez uniquement les colonnes nécessaires, évitez les analyses historiques sans restriction et exécutez l’extraction pendant une plage de charge approuvée. Pour les volumes MATDOC importants, une extraction partitionnée ou incrémentielle est recommandée.
- Autorisations et prérequis : obtenez une connectivité à la base approuvée, l’accès au schéma, les autorisations de lecture, l’accès aux données d’inventaire SAP S/4HANA ainsi que l’accès à toute source d’exécution d’entrepôt ou d’historique des modifications utilisée pour les deux activités qui ne proviennent pas de MATDOC. Vérifiez que l’accès direct à la base respecte le modèle d’exploitation SAP et la politique de support de votre organisation.
- Fuseaux horaires : confirmez les fuseaux horaires de la base de données et de l’application. Convertissez EventTime de manière cohérente avant le chargement dans ProcessMind.
- Protection des données : appliquez les contrôles de votre organisation concernant les identifiants utilisateurs, les données articles, les données relatives aux clients et les identifiants de base de données. Ne placez pas d’identifiants dans le texte de la requête.
a Exemple de requête sql
WITH
params AS (
SELECT
TO_TIMESTAMP('[Start timestamp]') AS start_ts,
TO_TIMESTAMP('[End timestamp]') AS end_ts
FROM DUMMY
),
movement_map AS (
SELECT '101' AS movement_type, 'Goods Receipt Posted' AS activity_name FROM DUMMY
UNION ALL SELECT '105', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '107', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '109', 'Goods Receipt Posted' FROM DUMMY
UNION ALL SELECT '321', 'Stock Posted to Quality Inspection' FROM DUMMY
UNION ALL SELECT '322', 'Quality Inspection Stock Released' FROM DUMMY
UNION ALL SELECT '343', 'Stock Status Changed to Unrestricted' FROM DUMMY
UNION ALL SELECT '344', 'Stock Status Changed to Blocked' FROM DUMMY
UNION ALL SELECT '311', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '301', 'Internal Stock Transfer Posted' FROM DUMMY
UNION ALL SELECT '311', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '309', 'Put-Away Transfer Posted' FROM DUMMY
UNION ALL SELECT '701', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '702', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '703', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '704', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '705', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '706', 'Inventory Adjustment Posted' FROM DUMMY
UNION ALL SELECT '601', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '602', 'Goods Issue for Delivery Posted' FROM DUMMY
UNION ALL SELECT '261', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '262', 'Goods Issue for Production Posted' FROM DUMMY
UNION ALL SELECT '651', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '653', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '654', 'Sales Return Received' FROM DUMMY
UNION ALL SELECT '551', 'Stock Scrapped' FROM DUMMY
UNION ALL SELECT '552', 'Stock Scrapped' FROM DUMMY
),
matdoc_events AS (
SELECT
m.MATNR AS MaterialNumber,
m.CHARG AS InventoryBatchLot,
COALESCE(m.BUDAT_MKPF, m.BUDAT) AS EventTime,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(m.BWART AS NVARCHAR(3)) AS MovementType,
m.WERKS AS Plant,
m.LGORT AS StorageLocation,
m.MENGE AS Quantity,
m.GRUND AS MovementReasonCode,
mm.activity_name AS ActivityName,
m.MBLNR AS MaterialDocumentNumber,
m.MJAHR AS MaterialDocumentYear,
m.ZEILE AS MaterialDocumentItem
FROM [Your SAP HANA schema].MATDOC m
INNER JOIN movement_map mm
ON CAST(m.BWART AS NVARCHAR(3)) = mm.movement_type
CROSS JOIN params p
WHERE m.CHARG IS NOT NULL
AND TRIM(m.CHARG) <> ''
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) >= p.start_ts
AND COALESCE(m.BUDAT_MKPF, m.BUDAT) < p.end_ts
AND m.WERKS IN ([Configure based on your system])
),
batch_enriched_events AS (
SELECT
e.InventoryBatchLot,
e.ActivityName,
e.EventTime,
e.MaterialNumber,
e.UserName,
e.MovementType,
e.Plant,
e.StorageLocation,
e.Quantity,
e.MovementReasonCode,
e.MaterialDocumentNumber,
e.MaterialDocumentYear,
e.MaterialDocumentItem,
c.CUOBJ_BM AS BatchObjectNumber
FROM matdoc_events e
LEFT JOIN [Your SAP HANA schema].MCHA c
ON c.MATNR = e.MaterialNumber
AND c.CHARG = e.InventoryBatchLot
AND c.WERKS = e.Plant
),
verified_batch_status_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Batch Status Changed' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
verified_picking_events AS (
SELECT
CAST(NULL AS NVARCHAR(40)) AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS NVARCHAR(40)) AS MaterialNumber,
CAST(NULL AS NVARCHAR(80)) AS UserName,
CAST(NULL AS NVARCHAR(3)) AS MovementType,
CAST(NULL AS NVARCHAR(4)) AS Plant,
CAST(NULL AS NVARCHAR(4)) AS StorageLocation,
CAST(NULL AS DECIMAL(31,3)) AS Quantity,
CAST(NULL AS NVARCHAR(3)) AS MovementReasonCode,
CAST(NULL AS NVARCHAR(20)) AS MaterialDocumentNumber,
CAST(NULL AS NVARCHAR(4)) AS MaterialDocumentYear,
CAST(NULL AS NVARCHAR(6)) AS MaterialDocumentItem,
CAST(NULL AS NVARCHAR(40)) AS BatchObjectNumber
FROM DUMMY
WHERE 1 = 0
),
all_events AS (
SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM batch_enriched_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_batch_status_events
UNION ALL SELECT InventoryBatchLot, ActivityName, EventTime, MaterialNumber, UserName, MovementType, Plant, StorageLocation, Quantity, MovementReasonCode, MaterialDocumentNumber, MaterialDocumentYear, MaterialDocumentItem, BatchObjectNumber FROM verified_picking_events
)
SELECT
InventoryBatchLot,
ActivityName,
EventTime,
MaterialNumber,
UserName,
MovementType,
Plant,
StorageLocation,
Quantity,
MovementReasonCode
FROM all_events
WHERE InventoryBatchLot IS NOT NULL
AND EventTime IS NOT NULL
ORDER BY InventoryBatchLot, EventTime, MaterialDocumentYear, MaterialDocumentNumber, MaterialDocumentItem, ActivityName; Étapes
- Accéder à l’éditeur ABAP : connectez-vous à votre système SAP S/4HANA. Ouvrez l’éditeur ABAP à l’aide du code de transaction
SE38. - Créer un programme : saisissez le nom du nouveau programme dans le champ « Program », par exemple
Z_PM_INVENTORY_EXTRACT, puis cliquez sur le bouton « Create ». Indiquez un titre explicite, définissez le « Type » sur « Executable Program » et enregistrez le programme dans un package. - Définir les paramètres du programme : dans l’éditeur, définissez l’écran de sélection qui servira d’interface utilisateur pour l’extraction. Les utilisateurs pourront y préciser des paramètres tels que la période et le site.
- Implémenter la logique d’extraction : copiez l’intégralité du code ABAP fourni dans la section « Query » et collez-le dans l’éditeur ABAP. Ce code est conçu pour sélectionner les données correspondant aux 14 activités de gestion des stocks requises à partir de différentes tables SAP.
- Comprendre la logique principale : le programme sélectionne les données de chaque activité distincte dans ses tables sources, telles que
MKPFetMSEGpour les mouvements de stock, ouCDHDRetCDPOSpour les modifications des données de base. Chaque sélection est ensuite combinée au moyen deUNION ALLdans une table interne unique représentant l’Event Log. - Configurer la sortie fichier : la dernière partie du code écrit les données consolidées de la table interne dans un fichier. Elle utilise l’instruction
OPEN DATASETpour créer un fichier sur le serveur d’application SAP. Vous devez indiquer un chemin valide sur lequel l’utilisateur du système SAP dispose d’autorisations d’écriture. - Exécuter le programme : enregistrez et activez le programme ABAP avec Ctrl+F3. Exécutez-le en appuyant sur F8. Dans l’écran de sélection, saisissez la période souhaitée ainsi que les autres filtres pertinents, tels que le site ou le code société.
- Exécuter en tâche de fond : pour les volumes importants, il est essentiel d’exécuter le programme comme tâche de fond afin d’éviter les délais d’expiration de session. Depuis l’écran d’exécution (F8), ouvrez le menu
Program -> Execute in Background. Planifiez la tâche pendant une période creuse. - Récupérer le fichier de sortie : une fois la tâche terminée, localisez le fichier sur le serveur d’application SAP. Utilisez le code de transaction
AL11pour parcourir les répertoires du serveur et trouver votre fichier. Utilisez la transactionCG3Ypour le télécharger sur votre ordinateur. - Préparer le chargement : ouvrez le fichier téléchargé dans un éditeur de texte ou un tableur. Vérifiez qu’il est au format CSV, avec une ligne d’en-tête, une virgule comme séparateur et des guillemets doubles comme délimiteur de texte. Vérifiez que les noms de colonnes correspondent aux exigences avant de charger le fichier dans l’outil de Process Mining.
Configuration
- Période de date de comptabilisation : il s’agit du paramètre le plus important. Nous recommandons d’extraire les données par lots maîtrisables, par exemple 3 à 6 mois à la fois, afin de garantir de bonnes performances et d’éviter les délais d’expiration du système.
- Filtre sur le site : il est vivement conseillé de filtrer sur un ou plusieurs sites précis (
WERKS). Exécuter l’extraction sur tous les sites simultanément peut mobiliser énormément de ressources. - Filtre sur le code société : vous pouvez ajouter un filtre facultatif sur le code société (
BUKRS) afin de limiter davantage le périmètre si votre organisation exploite plusieurs codes société dans le même système. - Chemin du fichier sur le serveur d’application : le programme ABAP nécessite un chemin de répertoire valide et prédéfini sur le serveur d’application SAP. Vérifiez que l’utilisateur du système SAP (
SY-UNAME) dispose des autorisations nécessaires au niveau du système d’exploitation pour écrire dans ce répertoire. - Autorisations : l’utilisateur qui exécute l’extraction doit disposer des autorisations nécessaires pour la transaction
SE38, afin de créer et d’exécuter le programme, d’un accès en affichage aux tablesMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKetLTAP, ainsi que de l’autorisation de planifier des tâches de fond (SM36/SM37).
a Exemple de requête abap
REPORT Z_PM_INVENTORY_EXTRACT.
" ====================================================================
" SELECTION SCREEN
" ====================================================================
SELECT-OPTIONS: s_budat FOR sy-datum OBLIGATORY.
SELECT-OPTIONS: s_werks FOR mseg-werks.
PARAMETERS: p_fpath TYPE string DEFAULT '/usr/sap/trans/tmp/inventory_log.csv' OBLIGATORY.
" ====================================================================
" DATA STRUCTURES
" ====================================================================
TYPES: BEGIN OF ty_event_log,
InventoryBatchLot TYPE charg,
ActivityName TYPE string,
EventTime TYPE string,
MaterialNumber TYPE matnr,
UserName TYPE xubname,
MovementType TYPE bwart,
Plant TYPE werks_d,
StorageLocation TYPE lgort_d,
Quantity TYPE menge_d,
MovementReasonCode TYPE grund,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log.
" ====================================================================
" DATA SELECTION
" ====================================================================
START-OF-SELECTION.
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Receipt Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('101', '103', '105', '501', '521', '561')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~shkzg
WHEN 'H' THEN 'Stock Posted to Quality Inspection'
WHEN 'S' THEN 'Quality Inspection Stock Released'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '321' " For QI to Unrestricted
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Put-Away Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '311' AND mseg~shkzg = 'H' " Assume put-away is the credit side
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Internal Stock Transfer Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('301', '311', '313', '315')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
CASE mseg~bwart
WHEN '343' THEN 'Stock Status Changed to Blocked'
WHEN '344' THEN 'Stock Status Changed to Unrestricted'
END AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('343', '344')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Inventory Adjustment Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('701', '702', '711', '712')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Delivery Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '601'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Goods Issue for Production Posted' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '261'
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Sales Return Received' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart IN ('651', '653')
UNION ALL
SELECT
mseg~charg AS InventoryBatchLot,
'Stock Scrapped' AS ActivityName,
CONCAT( mkpf~cpudt, mkpf~cputm ) AS EventTime,
mseg~matnr AS MaterialNumber,
mkpf~usnam AS UserName,
mseg~bwart AS MovementType,
mseg~werks AS Plant,
mseg~lgort AS StorageLocation,
mseg~menge AS Quantity,
mseg~grund AS MovementReasonCode
FROM mseg
JOIN mkpf ON mkpf~mblnr = mseg~mblnr AND mkpf~mjahr = mseg~mjahr
WHERE mkpf~budat IN s_budat
AND mseg~werks IN s_werks
AND mseg~charg IS NOT NULL AND mseg~charg <> ''
AND mseg~bwart = '551'
UNION ALL
SELECT
ltap~charg AS InventoryBatchLot,
'Picking Initiated' AS ActivityName,
CONCAT( ltak~bdatu, ltak~bzeit ) AS EventTime,
ltap~matnr AS MaterialNumber,
ltak~bname AS UserName,
ltak~bwart AS MovementType,
ltap~werks AS Plant,
ltap~lgort AS StorageLocation,
ltap~nista AS Quantity,
'' AS MovementReasonCode
FROM ltap
JOIN ltak ON ltak~tanum = ltap~tanum
WHERE ltak~bdatu IN s_budat
AND ltap~werks IN s_werks
AND ltap~charg IS NOT NULL AND ltap~charg <> ''
UNION ALL
SELECT
SUBSTRING( cdhdr~objectid, 5, 18 ) AS InventoryBatchLot, " Object ID for BATCH is MATNR+WERKS+CHARG
'Batch Status Changed' AS ActivityName,
CONCAT( cdhdr~udate, cdhdr~utime ) AS EventTime,
SUBSTRING( cdhdr~objectid, 1, 4 ) AS MaterialNumber,
cdhdr~username AS UserName,
'' AS MovementType,
'' AS Plant,
'' AS StorageLocation,
0 AS Quantity,
'' AS MovementReasonCode
FROM cdhdr
JOIN cdpos ON cdpos~objectclas = cdhdr~objectclas
AND cdpos~objectid = cdhdr~objectid
AND cdpos~changenr = cdhdr~changenr
WHERE cdhdr~udate IN s_budat
AND cdhdr~objectclas = 'BATCH'
AND cdpos~tabname = 'MCH1'
AND cdpos~fname = 'ZUSTD'
INTO TABLE @lt_event_log.
" ====================================================================
" WRITE OUTPUT FILE
" ====================================================================
DATA: lv_string TYPE string.
DATA: lo_conv TYPE REF TO cl_abap_conv_out_ce.
lo_conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
RETURN.
ENDIF.
" Write Header
lv_string = 'InventoryBatchLot,ActivityName,EventTime,MaterialNumber,UserName,MovementType,Plant,StorageLocation,Quantity,MovementReasonCode'.
TRANSFER lv_string TO p_fpath.
" Write Data
LOOP AT lt_event_log ASSIGNING FIELD-SYMBOL(<fs_log>).
CONCATENATE
<fs_log>-InventoryBatchLot
<fs_log>-ActivityName
<fs_log>-EventTime
<fs_log>-MaterialNumber
<fs_log>-UserName
<fs_log>-MovementType
<fs_log>-Plant
<fs_log>-StorageLocation
<fs_log>-Quantity
<fs_log>-MovementReasonCode
INTO lv_string
SEPARATED BY ','.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
WRITE: 'Extraction complete. File written to:', p_fpath. Prêt à commencer ?
Utilisez ce template pour préparer vos données en toute confiance et obtenir des analyses utiles sur vos opérations de gestion des stocks. Commencez dès aujourd’hui à améliorer votre efficacité et à réduire vos coûts.
Optimisez votre gestion des stocks dans SAP S/4HANA
Repérez les inefficacités, réduisez la durée du cycle de 30 % et réalisez des économies.
Aucune carte bancaire requise • Configuration en quelques minutes