Votre modèle de données pour la gestion des stocks
Votre modèle de données pour la gestion des stocks
- Attributs recommandés à collecter
- Activités clés à suivre pour découvrir le processus
- Instructions d’extraction adaptées à 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 gestion des stocks a été enregistrée dans le système. | ||
| Description L’heure de l’événement est l’horodatage qui indique précisément quand une activité a eu lieu. Cette donnée permet de classer les événements par ordre chronologique et de reconstituer le déroulement du processus pour chaque lot de stock. Elle sert de base à toutes les analyses de Process Mining fondées sur le temps. La précision de cet horodatage est essentielle pour calculer des indicateurs clés tels que les temps de cycle, les délais et les durées. Elle permet d’analyser les performances du processus sur différentes périodes, de repérer les moments où surviennent 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 est-ce important ? Cet horodatage classe les événements par ordre chronologique et sert de base à tous les calculs de durée et de performance. Où trouver ces données Il s’agit généralement de la date comptable (MKPF-BUDAT) et de l’heure de saisie (MKPF-CPUTM) combinées, à partir de l’en-tête du document article dans la table MKPF. Exemples 2023-10-26T09:00:00Z2023-11-15T14:35:10Z2024-01-05T23:15:00Z | |||
| Lot de stock InventoryBatchLot | Identifiant unique d’une quantité précise d’un produit, utilisé comme ID de cas pour suivre son cycle de vie. | ||
| Description Le numéro de lot 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 retracer chronologiquement le parcours complet d’une quantité en 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, la production ou son élimination. En analyse de processus, cet attribut est fondamental. Il permet de suivre le parcours de chaque lot de bout en bout, de mesurer précisément les temps de cycle, de repérer les variations du processus et de comprendre comment les différents lots sont traités. L’analyse à l’échelle du lot est essentielle dans les secteurs où la traçabilité, le contrôle qualité et la gestion des dates de péremption sont importants, notamment dans l’industrie pharmaceutique, l’agroalimentaire et la chimie. Pourquoi est-ce important ? Cet identifiant central relie tous les événements associés au stock dans un même cas et rend possible l’analyse du processus de bout en bout. Où trouver ces données Il s’agit généralement du numéro de lot, présent dans des tables SAP telles que MCHA (fiche article du lot) ou MCH1 (lots), 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 Activité décrit une étape ou un événement du cycle de vie d’un lot de stock. Il peut s’agir d’actions métier importantes, comme la réception de marchandises, le déplacement du stock, un contrôle qualité ou la sortie de matières. Chaque activité consigne un événement survenu à un moment précis dans le parcours du lot. L’analyse des activités est le fondement du Process Mining. Elle permet de visualiser le déroulement du processus, de repérer les parcours fréquents ou rares, de détecter les goulots d’étranglement dus à des retards et d’analyser les boucles de reprise. En étudiant l’ordre et la fréquence d’activités telles que « Stock mis au rebut » ou « Contrôle qualité », les entreprises peuvent cibler les améliorations à apporter aux processus et à l’efficacité opérationnelle. Pourquoi est-ce important ? Il définit les étapes du processus et permet de visualiser et d’analyser le cycle de vie des stocks. Où trouver ces données Cet attribut est dérivé et souvent associé à des noms plus explicites à partir des types de mouvements SAP (MSEG-BWART) ou des codes de transaction (MKPF-TCODE2). Exemples Entrée de marchandises enregistréeTransfert vers l’emplacement de stockage enregistréSortie de marchandises pour livraison enregistréeStock mis au rebut | |||
| Code motif du mouvement MovementReasonCode | Code indiquant le motif d’un mouvement de stock. | ||
| Description Le code motif du mouvement précise pourquoi un mouvement de marchandises a été effectué. Il sert souvent à expliquer les mouvements imprévus, comme les ajustements de stock, les retours ou les mises au rebut. Cet attribut est particulièrement utile pour rechercher les causes profondes. Dans le Dashboard « Causes des ajustements manuels de stock », l’analyse par code motif peut révéler l’origine des écarts, par exemple des dommages, des vols ou des erreurs de saisie. Ces éléments aident les entreprises à traiter les problèmes sous-jacents plutôt qu’à en corriger uniquement les conséquences. Pourquoi est-ce important ? Il explique les raisons des mouvements de stock imprévus et permet de rechercher leurs causes de manière ciblée. Où trouver ces données Dans la table des postes de documents article MSEG, champ GRUND (motif du mouvement). Exemples 00010005102 | |||
| Magasin StorageLocation | Emplacement précis au sein d’une usine où le stock est entreposé physiquement. | ||
| Description Un magasin est une unité organisationnelle qui permet de distinguer les stocks de matières au sein d’une usine. Par exemple, une usine peut disposer de magasins distincts pour les matières premières, les produits finis et les articles en attente de contrôle qualité. Cet attribut fournit un niveau de détail plus précis que l’usine pour localiser le stock. Il permet d’analyser les mouvements entre différentes zones de stockage, par exemple le délai de transfert entre la zone de réception et l’entrepôt principal. L’analyse du taux d’utilisation des espaces et de la fréquence des mouvements par magasin aide à optimiser l’agencement de l’entrepôt et la logistique interne. Pourquoi est-ce important ? Il permet de localiser le stock dans une usine avec précision et d’analyser les mouvements internes ainsi que l’efficacité du stockage. Où trouver ces données Dans la table des postes de documents article MSEG, champ LGORT (magasin). Exemples 0001RM01FG01QI01 | |||
| Nom d’utilisateur UserName | ID de l’utilisateur qui a exécuté la transaction dans SAP. | ||
| Description Cet attribut contient l’ID SAP de l’employé qui a enregistré le document ou exécuté l’activité. Il assure la traçabilité en indiquant qui est responsable de chaque action dans le processus de gestion des stocks. L’analyse par utilisateur est essentielle pour comprendre les performances, la conformité et les besoins de formation. Par exemple, le Dashboard « Causes des ajustements manuels des stocks » utilise cet attribut pour repérer les personnes qui effectuent le plus d’ajustements. Il peut aider à déterminer qui a besoin d’une formation complémentaire, à détecter des activités non autorisées ou à reconnaître les meilleurs résultats. Pourquoi est-ce important ? Il permet de déterminer les responsabilités et de repérer les comportements propres à certains utilisateurs, les besoins de formation ou les problèmes de conformité. Où trouver ces données Présent dans la table d’en-tête des documents article MKPF, champ USNAM (nom d’utilisateur). Exemples JSMITHMBROWNWAREHOUSE_OPS | |||
| Numéro d’article MaterialNumber | Identifiant unique du produit ou de la matière géré. | ||
| Description Le numéro d’article, souvent appelé SKU (Stock Keeping Unit), est le code unique attribué à un produit précis. Il s’agit d’un élément fondamental des données de base de la gestion des stocks, utilisé pour suivre les quantités, les valeurs et les mouvements de marchandises. Dans le cadre du Process Mining, l’analyse par numéro d’article permet d’étudier les processus de gestion des stocks du point de vue des produits. Vous pouvez ainsi déterminer 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 repérer les problèmes propres à certains produits et adapter les stratégies de gestion des stocks aux différentes catégories de marchandises. Pourquoi est-ce important ? Il permet de segmenter l’analyse par produit et de repérer les tendances et les problèmes propres à certains articles. Où trouver ces données Présent dans la table des postes de documents article MSEG, champ MATNR. Les données de base se trouvent dans la table MARA. Exemples RM-1001FG-2050-B100-400-A | |||
| Quantité Quantity | Quantité de matière concernée par le mouvement de stock. | ||
| Description Cet attribut indique la quantité de matière déplacée, réceptionnée, sortie ou ajustée lors d’une activité. Elle est enregistrée dans l’unité de mesure de base de la matière. L’analyse des quantités permet de comprendre l’ampleur et l’incidence des processus de gestion des stocks. Elle sert à créer des Dashboards qui visualisent les volumes traités, par exemple le débit des sorties de marchandises par référence. Elle permet également de calculer des indicateurs tels que le ratio de stock mis au rebut ou éliminé, et d’ajouter une dimension quantitative à l’analyse des processus, au-delà du simple décompte des événements. Pourquoi est-ce important ? Il quantifie le volume de matière associé à chaque activité et permet d’analyser le débit, les quantités mises au rebut et l’incidence des ajustements. Où trouver ces données Dans la table des postes de documents article MSEG, champ MENGE (quantité). Exemples 10012.55000-10 | |||
| Site Plant | Unité organisationnelle correspondant à un établissement où se trouve le stock, par exemple une usine ou un centre de distribution. | ||
| Description Une usine est une unité organisationnelle centrale dans SAP. Elle peut désigner un site de production, un lieu de stockage central ou le siège d’une entreprise. Tout le stock est situé physiquement ou logiquement dans une usine. L’analyse par usine est essentielle pour comparer les performances des processus entre différents sites. Elle permet de répondre à des questions telles que : « Dans quelle usine le temps de cycle de mise en stock est-il le plus long ? » ou « Le taux d’écarts de stock est-il plus élevé dans l’usine A que dans l’usine B ? ». Cette segmentation géographique ou organisationnelle aide à repérer les problèmes propres à chaque site et à partager les bonnes pratiques dans toute l’entreprise. Pourquoi est-ce important ? Elle permet de comparer les processus de gestion des stocks et leurs performances entre les différents sites de l’entreprise. Où trouver ces données Dans la table des postes de documents article MSEG, champ WERKS (usine). Exemples 10001710DE01US01 | |||
| Type de mouvement MovementType | Code SAP à trois chiffres qui détermine la manière dont un mouvement de marchandises est enregistré. | ||
| Description Le type de mouvement est un code de contrôle important dans la gestion des stocks SAP. Il détermine les caractéristiques d’un mouvement de marchandises : les comptes mis à jour, la présentation de l’écran de transaction et les champs de quantité ou de valeur concernés. Par exemple, « 101 » correspond à une entrée de marchandises, « 311 » à un transfert de stock et « 551 » à une mise au rebut. Cet attribut sert souvent à déduire le nom plus explicite de l’activité. L’analyse des processus par type de mouvement donne une vue technique détaillée des flux de stock. Elle est essentielle pour vérifier l’exactitude de la cartographie du processus et repérer les types de transactions susceptibles de provoquer des goulots d’étranglement ou des écarts. Pourquoi est-ce important ? Il fournit une classification technique précise de chaque événement de stock, essentielle pour déduire les activités et réaliser des analyses détaillées. Où trouver ces données Présent dans la table des postes de documents article MSEG, champ BWART (type de mouvement). Exemples 101311261551601 | |||
| Date de péremption ExpirationDate | Date à laquelle un lot de matière arrive à expiration et ne peut plus être utilisé. | ||
| Description La date limite de conservation (SLED) est une donnée de base essentielle pour les produits périssables ou soumis à une durée de conservation limitée. Elle est gérée au niveau du lot et détermine à partir de quelle date un produit ne peut plus être vendu ni consommé. Cet attribut est indispensable au Dashboard « Analyse des stocks obsolètes et périmés ». En analysant les activités en fonction de la date de péremption, les entreprises peuvent repérer les lots susceptibles d’arriver à expiration et prendre des mesures préventives. Il permet d’évaluer l’efficacité des règles de rotation des stocks, comme le principe FEFO (premier périmé, premier sorti), et de quantifier les pertes dues aux stocks périmés mis au rebut. Pourquoi est-ce important ? Il permet d’analyser les stocks obsolètes et périmés afin de limiter le gaspillage et les pertes financières. Où trouver ces données Dans la table des données de base des lots MCH1 ou MCHA, champ VFDAT (date limite de conservation). Exemples 2024-12-312025-06-302024-09-01 | |||
| 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 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 leur fraîcheur et permet de savoir si vous consultez des données presque en temps réel ou un instantané d’une période antérieure. Pour tirer des conclusions pertinentes et précises, il est essentiel de connaître l’actualité des données. Ce champ permet aux analystes et aux utilisateurs métier de vérifier qu’elles sont à jour. Il est souvent affiché dans les Dashboards pour contextualiser les analyses présentées. Pourquoi est-ce important ? Il indique aux utilisateurs si les données sont récentes et permet de vérifier que les analyses reposent sur des informations à jour. Où trouver ces données 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 | |||
| Durée du cycle d’exécution des commandes OrderFulfillmentCycleTime | Durée totale entre le début du prélèvement et la sortie des marchandises pour livraison. | ||
| Description Cette métrique calculée mesure le temps écoulé entre l’activité « Prélèvement lancé » et l’activité « Sortie de marchandises pour livraison comptabilisée ». Elle correspond au 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 l’indicateur de durée du cycle d’exécution des commandes. Son analyse aide les entreprises à évaluer leur capacité à répondre à la demande des clients. La durée peut être ventilée par produit, entrepôt ou client afin de repérer les retards dans le prélèvement, l’emballage et l’expédition, qui ont une incidence directe sur la satisfaction client et l’efficacité logistique. Pourquoi est-ce important ? Il mesure la rapidité et l’efficacité des sorties de l’entrepôt, qui influent directement sur la satisfaction client. Où trouver ces données Cet attribut calculé correspond à la différence de temps entre les événements « Prélèvement lancé » et « Sortie de marchandises pour livraison comptabilisée » pour chaque lot. Exemples 7200144003600 | |||
| Emplacement de stockage StorageBin | Unité de stockage la plus précise d’un entrepôt, où les matières sont entreposées physiquement. | ||
| Description Un emplacement de stockage correspond à une coordonnée précise dans un entrepôt, par exemple une position dans un rayonnage. Ce niveau de détail est généralement utilisé lorsque SAP Warehouse Management (WM) ou Extended Warehouse Management (EWM) est déployé. Cet attribut est essentiel au Dashboard « Utilisation de l’espace d’entreposage ». Il permet d’analyser l’utilisation de l’espace, de repérer les zones susceptibles d’être encombrées et de détecter les parcours inefficaces lors du rangement ou du prélèvement. L’analyse des mouvements entre emplacements aide à optimiser l’agencement de l’entrepôt et à réduire les déplacements des opérateurs. Pourquoi est-ce important ? Il fournit les données de localisation les plus précises et permet d’analyser l’utilisation de l’espace d’entreposage ainsi que l’efficacité des opérations. Où trouver ces données Avec WM, ces données figurent dans les tables des ordres de transfert, telles que LTAK/LTAP. Pour les documents de stock, elles peuvent se trouver dans MSEG-LGPBE. Consultez la documentation SAP S/4HANA. Exemples A-01-01-AB-05-10-CZONE-REC-01 | |||
| Numéro de 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 qui en constitue la preuve. Cet attribut est l’identifiant unique de ce document. Un même document article peut contenir plusieurs postes ou activités. En Process Mining, le numéro de document article est un identifiant transactionnel clé qui permet de regrouper les événements comptabilisés ensemble. Il est également essentiel pour les audits et pour remonter de l’analyse du processus au système source afin d’examiner des transactions précises. Pourquoi est-ce important ? Il sert de référence transactionnelle pour les audits et permet de regrouper les activités exécutées ensemble. Où trouver ces données Dans les tables MKPF (en-tête) et MSEG (poste), champ MBLNR (numéro de document article). Exemples 490000123450000056784900002345 | |||
| Système source SourceSystem | Identifie le système source dont les données ont été extraites. | ||
| Description Cet attribut indique le système de référence d’où 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 importante lorsque les données proviennent de plusieurs ERP, systèmes de gestion d’entrepôt ou plateformes existantes. Même si elle peut sembler fixe dans une analyse portant sur un seul système, elle devient essentielle lorsque vous regroupez des données de différentes sources pour obtenir une vue complète du processus. Elle contribue à la gouvernance des données, au diagnostic des problèmes d’extraction et à la traçabilité de leur origine. Pourquoi est-ce important ? Il précise l’origine des données, une information essentielle pour la gouvernance des données et l’analyse de plusieurs systèmes. Où trouver ces données 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 disponible sans restriction, en contrôle qualité ou bloqué. | ||
| Description Le type de stock classe les articles selon leur disponibilité. Les principales catégories sont le stock à utilisation libre (disponible sans restriction), le stock en contrôle qualité (en attente de vérification) et le stock bloqué (indisponible). Les mouvements de marchandises entraînent souvent un changement de type de stock. Le suivi de ces changements est essentiel pour comprendre le processus de disponibilité des stocks. Il permet notamment d’analyser les activités « Stock comptabilisé en contrôle qualité » et « Statut du stock passé à bloqué ». L’analyse du temps passé dans chaque type de stock, en particulier en contrôle qualité, aide à repérer les retards qui affectent la disponibilité des marchandises pour la vente ou la production. Pourquoi est-ce important ? Il suit le statut de disponibilité du stock et permet d’analyser les retards liés au contrôle qualité ainsi que la disponibilité des articles. Où trouver ces données Dans la table des postes de documents article MSEG, champ INSMK (type de stock). Exemples Utilisation libreContrôle qualitéStock bloqué | |||
| Unité de mesure UnitOfMeasure | Unité utilisée pour mesurer la quantité de matière, par exemple en pièces ou en kilogrammes. | ||
| Description L’unité de mesure précise l’unité utilisée pour l’attribut « Quantité ». Les unités courantes comprennent les pièces (PC), les kilogrammes (KG), les litres (L) et les boîtes (BOX). Elle apporte un contexte essentiel à la quantité enregistrée. Même si cet attribut sert souvent de simple indication, il est important pour garantir la qualité des données et mener des analyses nécessitant la conversion de différentes unités vers une référence commune. Par exemple, pour calculer avec précision la valeur totale du stock mis au rebut, il faut interpréter les quantités exprimées dans différentes unités et, au besoin, les convertir. Pourquoi est-ce important ? Il apporte un contexte essentiel à l’attribut « Quantité » et permet d’interpréter correctement les volumes de matière. Où trouver ces données Dans la table des postes de documents article MSEG, champ MEINS (unité de mesure de base). Exemples PièceKilogrammeUnitéMètre | |||
Activités de gestion des stocks
| Activité | Description | ||
|---|---|---|---|
| Ajustement de stock enregistré | Enregistre une modification de la quantité en stock à la suite d’un inventaire physique ou d’un autre écart. Cet événement ajuste explicitement le stock comptable pour le faire correspondre au comptage physique. | ||
| Pourquoi est-ce important ? Ces ajustements sont essentiels pour garantir la fiabilité des stocks. Des ajustements fréquents signalent des problèmes sous-jacents de manutention, de sécurité ou de saisie des données. Où trouver ces données Enregistré dans la table MATDOC. Identifié par les types de mouvements d’inventaire physique (BWART), par exemple 701 pour un excédent ou 702 pour une perte de stock. Données à recueillir Extrait des documents article de MATDOC correspondant aux types de mouvements d’ajustement d’inventaire physique (par exemple, 701, 702). Type d’événement explicit | |||
| Entrée de marchandises enregistrée | Indique l’entrée initiale d’un lot de stock dans l’entrepôt, généralement depuis un fournisseur ou la production. SAP S/4HANA enregistre explicitement cet événement en créant un document article à la réception des marchandises. | ||
| Pourquoi est-ce important ? Il s’agit du principal événement de début du cycle de vie des stocks. Le temps écoulé entre cette activité et d’autres étapes, comme le rangement, est essentiel pour mesurer l’efficacité du quai de réception. Où trouver ces données Enregistré dans la table MATDOC. L’événement est identifié par des types de mouvements spécifiques (BWART), par exemple 101 pour une réception de commande d’achat ou 103 pour une entrée de marchandises en stock bloqué. Données à recueillir Extrait des documents article de MATDOC correspondant aux types de mouvements d’entrée de marchandises. Type d’événement explicit | |||
| Sortie de marchandises pour livraison enregistrée | Enregistre la dernière étape du processus de sortie, au cours de laquelle la propriété du lot est transférée à un client ou à un transporteur. Cette opération explicite réduit le stock et donne lieu à une écriture comptable. | ||
| Pourquoi est-ce important ? Il s’agit d’un événement clé marquant la fin de l’exécution d’une commande. Il est essentiel pour mesurer le respect des délais de livraison et calculer la durée totale du cycle d’exécution des commandes. Où trouver ces données Enregistré dans la table MATDOC. Identifié par le type de mouvement (BWART) correspondant à la sortie de marchandises pour une livraison liée à une commande client, généralement 601. Données à recueillir Extrait des documents article de MATDOC correspondant au type de mouvement 601. Type d’événement explicit | |||
| Sortie de marchandises pour ordre de fabrication enregistrée | Correspond à la consommation d’un lot de stock par un ordre de fabrication ou de processus. Cette opération réduit le stock et affecte le coût des matières à l’ordre de fabrication. | ||
| Pourquoi est-ce important ? Il s’agit d’un événement majeur de consommation, qui marque la fin du cycle de vie des composants en stock. Il est essentiel pour analyser la disponibilité des matières pour la production et les habitudes de consommation. Où trouver ces données Enregistré dans la table MATDOC. Identifié par les types de mouvements (BWART) correspondant à une sortie de marchandises pour un ordre, par exemple 261. Données à recueillir Extrait des documents article de MATDOC correspondant au type de mouvement 261. Type d’événement explicit | |||
| Stock de contrôle qualité libéré | Indique qu’un lot a passé le contrôle qualité et peut désormais être utilisé ou rangé. Cette étape est enregistrée explicitement comme un transfert du stock en contrôle qualité vers un autre type de stock, par exemple le stock à utilisation libre. | ||
| Pourquoi est-ce important ? Cette étape marque la fin du contrôle qualité et rend le stock disponible. Tout retard à ce stade peut entraîner des problèmes importants en aval, en production ou lors de l’exécution des commandes. Où trouver ces données Enregistré dans la table MATDOC comme un transfert de stock. Le type de mouvement (BWART) 321 indique généralement le transfert du stock « Contrôle qualité » vers le stock « Utilisation libre ». Données à recueillir Extrait des documents article de MATDOC correspondant au 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 alors supprimé des registres. Cela concerne généralement des stocks périmés, endommagés ou obsolètes. | ||
| Pourquoi est-ce important ? Il s’agit d’un événement de fin qui représente une perte financière. L’analyse des mises au rebut aide à repérer les problèmes liés au vieillissement des stocks, aux procédures de manutention ou aux prévisions de la demande. Où trouver ces données Enregistré dans la table MATDOC. Identifié par les types de mouvements (BWART) correspondant aux mises au rebut, par exemple 551 (depuis le stock à utilisation libre), 553 (depuis le stock en contrôle qualité) ou 555 (depuis le stock bloqué). Données à recueillir Extrait des documents article de MATDOC correspondant aux types de mouvements de mise au rebut (par exemple, 551). Type d’événement explicit | |||
| Transfert vers l’emplacement de stockage enregistré | Correspond au déplacement physique du lot depuis une zone de réception ou de transit vers son emplacement de stockage définitif. Dans SAP, cette opération est enregistrée dans un document article de transfert de stock. | ||
| Pourquoi est-ce important ? Cette étape termine le processus de réception des marchandises. Le temps nécessaire, appelé temps de rangement, est un indicateur clé de l’efficacité de l’entrepôt. Où trouver ces données Enregistré dans la table MATDOC comme un transfert de stock, souvent entre emplacements de stockage (par exemple, type de mouvement 311). Le mouvement précis peut varier selon la structure de l’entrepôt. Données à recueillir Identifié dans les documents de transfert de stock de MATDOC qui déplacent le stock d’un emplacement de stockage temporaire ou de réception vers son emplacement définitif. Type d’événement explicit | |||
| Préparation de commande lancée | Marque le début de l’exécution d’une commande : une tâche d’entrepôt est créée pour prélever un lot dans son casier de stockage. L’événement est souvent enregistré lors de la création d’un ordre de transfert ou d’une tâche d’entrepôt. | ||
| Pourquoi est-ce important ? Cette activité déclenche la préparation de commande. Le 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 de repérer les retards. Où trouver ces données Cet événement n’est généralement pas enregistré dans MATDOC. Dans les systèmes de gestion d’entrepôt (WM/EWM), il est déduit de l’horodatage de création d’un ordre de transfert (table LTAK) ou d’une tâche d’entrepôt. Données à recueillir Déduit de l’enregistrement de création d’un ordre de transfert (dans WM) ou d’une tâche d’entrepôt (dans EWM) associé au lot de marchandises. Type d’événement inferred | |||
| Retour client reçu | Enregistre le retour à l’entrepôt d’un lot précédemment sorti et renvoyé par un client. Cette opération explicite augmente le stock. | ||
| Pourquoi est-ce important ? Le suivi des retours est essentiel pour comprendre les problèmes de qualité des produits et l’insatisfaction des clients. Le traitement des retours et la décision concernant leur destination peuvent également être sources d’inefficacité. Où trouver ces données Enregistré dans la table MATDOC. Identifié par les types de mouvements (BWART) correspondant aux retours clients, par exemple 651 (vers le stock à utilisation libre) ou 653 (vers le stock en contrôle qualité). Données à recueillir Extrait des documents article de MATDOC correspondant aux types de mouvements de retour client (par exemple, 651, 653). Type d’événement explicit | |||
| Statut du lot modifié | Indique une modification de la fiche article du lot, par exemple le passage du statut « Utilisation libre » au statut « Restreint ». Il ne s’agit pas d’un mouvement de stock, mais d’une modification des données de base qui est consignée. | ||
| Pourquoi est-ce important ? Les changements de statut d’un lot ont une incidence directe sur son utilisation pour la vente ou la production. Leur analyse peut révéler des problèmes liés aux stocks périmés ou au contrôle qualité, même en l’absence de mouvement physique. Où trouver ces données Déduit des journaux de modification des tables de gestion des lots (MCH1, MCHA). Les tables CDHDR et CDPOS enregistrent les changements apportés au champ de statut du lot (MCH1-ZUSTD). Données à recueillir Déduit 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é | Indique un changement de statut du lot qui le rend indisponible pour une sortie, souvent en raison d’un dommage, d’une demande de mise en attente ou d’un autre motif. Dans SAP, cette opération est enregistrée explicitement comme un transfert de stock. | ||
| Pourquoi est-ce important ? Met en évidence les interruptions de disponibilité des stocks. Une fréquence élevée de blocages peut signaler des problèmes de manutention, de conditions de stockage ou de qualité fournisseur. Où trouver ces données Enregistré dans la table MATDOC comme un transfert de stock. Le type de mouvement (BWART) 344 sert généralement à passer du stock « Bloqué » au stock « Utilisation libre », et le type 343 à effectuer le mouvement inverse. Cette activité correspond au type 343. Données à recueillir Identifié dans les documents article de MATDOC correspondant au type de mouvement 343. Type d’événement explicit | |||
| Statut du stock passé à utilisation libre | Indique un changement de statut du lot qui le libère d’un blocage ou d’une mise en attente pour contrôle qualité et le rend disponible. Cette opération est enregistrée explicitement comme un transfert de stock. | ||
| Pourquoi est-ce important ? Cette activité marque la levée d’une mise en attente du stock. Vous pouvez analyser le temps passé en statut bloqué afin d’améliorer le processus de résolution. Où trouver ces données Enregistré dans la table MATDOC comme un transfert de stock. Le type de mouvement (BWART) 344 fait passer le stock de « Bloqué » à « Utilisation libre ». Données à recueillir Identifié dans les documents article de MATDOC correspondant au type de mouvement 344. Type d’événement explicit | |||
| Stock transféré en contrôle qualité | Correspond au transfert d’un lot reçu vers un statut de contrôle qualité, où il reste indisponible jusqu’à sa libération. Dans SAP, cette opération est enregistrée explicitement et modifie le type de stock du lot. | ||
| Pourquoi est-ce important ? Cette activité marque le début du contrôle qualité. Le délai entre cette étape et la libération du stock après contrôle est un indicateur important pour comprendre les retards liés à la qualité. Où trouver ces données Enregistré dans la table MATDOC. Il peut s’agir d’un mouvement d’entrée de marchandises (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). Données à recueillir Identifié dans les documents article de MATDOC qui affectent le stock au type « Contrôle qualité ». Type d’événement explicit | |||
| Transfert interne de stock enregistré | Enregistre le déplacement d’un lot entre différents emplacements ou casiers de stockage au sein d’un même site. Cette opération explicite entraîne la création d’un document article. | ||
| Pourquoi est-ce important ? Le suivi des transferts internes permet d’analyser l’efficacité opérationnelle de l’entrepôt, de repérer les déplacements inutiles et de mesurer le délai de réapprovisionnement entre les emplacements. Où trouver ces données Enregistré dans la table MATDOC. Le type de mouvement (BWART) 311 identifie généralement les transferts entre emplacements de stockage. Données à recueillir Extrait des documents article de MATDOC correspondant aux types de mouvements internes de stock (par exemple, 311). Type d’événement explicit | |||
Guides d’extraction
Étapes
- Configurer l’accès au système : vérifiez que vous disposez d’un utilisateur doté des autorisations nécessaires pour interroger les vues Core Data Services (CDS) du système SAP S/4HANA. Ces autorisations sont généralement accordées 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. Parmi les options courantes figurent SAP HANA Studio, SAP HANA Database Explorer et des outils tiers comme DBeaver.
- Configurer la connexion à la base de données : créez une nouvelle connexion dans votre client SQL. Vous aurez besoin du nom d’hôte de la base de données HANA, du numéro de port (généralement 3<instance_number>15) et 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 et collez-la dans l’éditeur de votre client SQL.
- Définir les paramètres de la requête : repérez les valeurs de remplacement dans la requête. Remplacez
I_MaterialDocumentItem.PostingDate BETWEEN 'YYYYMMDD' AND 'YYYYMMDD'par la période souhaitée, par exempleBETWEEN '20230101' AND '20230630'. Adaptez également les filtres propres à l’entreprise ou à l’usine, commeMaterialDocumentItem.Plant IN ('Plant1', 'Plant2'), à votre organisation. - Exécuter la requête : lancez la requête SQL modifiée sur la base de données S/4HANA. Le temps d’exécution dépendra de la période choisie et du volume de données de stock dans votre système.
- Vérifier les données : une fois la requête terminée, examinez les résultats dans votre client SQL pour vérifier qu’ils sont corrects et complets. Vérifiez la présence de différentes activités et le renseignement des principaux attributs.
- Exporter le journal d’événements : exportez l’ensemble des résultats de votre client SQL dans un fichier CSV. Choisissez l’encodage UTF-8 pour éviter les problèmes de caractères.
- Préparer l’importation : nommez les colonnes du fichier CSV exactement comme dans les alias de la requête, par exemple
InventoryBatchLot,ActivityName,EventTime, etc. Le fichier est alors prêt à être importé 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. Il doit également avoir accès au schéma de base de données sous-jacent où se trouvent ces vues. - Filtrage par période : il est essentiel de filtrer les champs
PostingDate,ChangeDocumentCreationDateouWarehouseTaskCreationDatepar période. Une période de 3 à 12 mois convient généralement à l’analyse. Une requête portant sur plusieurs années peut entraîner d’importants problèmes de performances. - Filtres organisationnels : pour améliorer les performances et cibler l’analyse, ajoutez des clauses
WHEREafin de filtrer les données parPlantouCompanyCode. Vous réduirez ainsi le volume de données et limiterez l’extraction aux parties pertinentes de l’entreprise. - Volume de données : 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 les performances du système source pendant l’extraction ainsi que celles de votre outil client.
- Extended Warehouse Management (EWM) : l’activité « Prélèvement lancé » repose sur la vue CDS
I_WarehouseTask, qui n’est alimentée que si vous utilisez SAP Extended Warehouse Management. Si votre entreprise utilise l’ancien module Warehouse Management (WM) ou uniquement Inventory Management (IM), cette activité ne sera pas extraite.
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 par SQL est autorisé et que l’utilisateur d’extraction dispose d’un accès en lecture à MATDOC et 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 cible de SAP S/4HANA. La requête ci-dessous utilise des champs couramment disponibles dans MATDOC et MCHA, mais leur disponibilité et leur nom peuvent varier selon la version, le déploiement et le périmètre activé. Remplacez chaque 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 horodatages au format ISO. Pour la première extraction, choisissez une période de trois à six mois, puis étendez-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 dûment autorisé. Limitez les résultats aux codes société, usines, types de documents ou types de mouvement requis en remplaçant les valeurs de filtre correspondantes.
- Vérifiez l’association entre les types de mouvement et les activités dans la CTE correspondante. La signification des types de mouvement dépend de la configuration du système et de l’entreprise. Remplacez les exemples de listes par les types de mouvement configurés dans le système cible pour les réceptions de marchandises, le contrôle qualité, la libération, la mise en stock, les transferts internes, le stock bloqué, le stock à utilisation libre, les ajustements de stock, le prélèvement, la sortie pour livraison, la sortie pour production, les retours de vente et les mises au rebut.
- Vérifiez que chaque ligne de sortie contient InventoryBatchLot, ActivityName et EventTime. Confirmez que l’identifiant de lot est suffisamment stable pour servir d’identifiant de cas dans ProcessMind. Si l’analyse nécessite de distinguer des valeurs de lot identiques selon la matière, l’usine ou le magasin, 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 ou de contrepassation et la gestion des fuseaux horaires. MATDOC enregistre les comptabilisations de documents : les contrepassations et les annulations peuvent donc apparaître comme des événements distincts, sauf si elles sont explicitement exclues ou associées à une activité.
- 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 un format ISO 8601 cohérent pour les horodatages et les zéros initiaux des valeurs de matière, de lot, d’usine et de magasin.
- Importez le journal d’événements dans ProcessMind et associez InventoryBatchLot à l’identifiant de cas, ActivityName à l’activité et EventTime à l’horodatage de l’événement. Ne comptez pas sur ProcessMind pour déduire les activités, regrouper les enregistrements ou générer les événements manquants.
Configuration
- Méthode d’extraction : requête SQL directe sur les données de stock et de lots de SAP HANA. La requête lit MATDOC et joint les données de base des lots de MCHA. N’ajoutez MCH1 ou une autre table de lots qu’après avoir vérifié les champs concernés et le niveau de gestion des lots dans le système cible.
- Période : commencez par trois à six mois. Définissez EventTime à partir de la date et de l’heure de comptabilisation du document article disponibles dans MATDOC. Pour les chargements incrémentiels, prévoyez une période de chevauchement contrôlée afin de récupérer les comptabilisations tardives, puis éliminez les doublons à l’aide des identifiants de document et de poste configurés.
- Filtres requis : configurez le code société, l’usine, 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. Vérifiez les champs du code société et du type de document pour la version installée avant de les ajouter à la requête.
- Association des activités : la signification des types de mouvement dépend de la configuration. Tenez à jour une table d’association 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 exemples comme des règles SAP universelles.
- Périmètre des lots : la requête exclut les lignes sans valeur de lot, car InventoryBatchLot sert d’identifiant de cas. Si le lot doit être déterminé à partir 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 les prélèvements, les décisions de contrôle 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é « Statut du lot modifié ». La requête contient une branche provisoire qui doit être reliée à une source vérifiée avant l’exécution.
- Prélèvement : le lancement du prélèvement relève généralement des données d’exécution de l’entrepôt plutôt que des comptabilisations MATDOC. Configurez une source vérifiée de tâches d’entrepôt ou d’ordres de transfert et remplacez la branche provisoire avant l’exécution.
- Performances : filtrez les données par horodatage ou date de comptabilisation, usine, code société et types de mouvement pertinents. Ne sélectionnez que les colonnes nécessaires, évitez les analyses historiques sans restriction et exécutez la requête pendant une plage de charge approuvée. Pour les volumes MATDOC importants, privilégiez une extraction partitionnée ou incrémentielle.
- Autorisations et prérequis : obtenez les autorisations nécessaires pour la connectivité à la base de données, l’accès au schéma, la lecture des données de stock SAP S/4HANA et l’accès aux sources d’exécution d’entrepôt ou d’historique des modifications utilisées pour les deux activités qui ne proviennent pas de MATDOC. Vérifiez que l’accès direct à la base de données respecte le modèle d’exploitation SAP et les règles d’assistance de l’entreprise.
- Fuseaux horaires : vérifiez les fuseaux horaires de la base de données et de l’application. Convertissez EventTime de manière cohérente avant l’importation dans ProcessMind.
- Protection des données : appliquez les contrôles de l’entreprise aux identifiants utilisateur, aux données de matière, aux données liées aux clients et aux identifiants de base de données. N’inscrivez pas d’identifiants dans le texte de la requête.
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édez à l’éditeur ABAP : connectez-vous à votre système SAP S/4HANA. Ouvrez l’éditeur ABAP à l’aide du code de transaction
SE38. - Créez un programme : saisissez le nom du nouveau programme dans le champ « Program », par exemple
Z_PM_INVENTORY_EXTRACT, puis cliquez sur le bouton « Create ». Donnez-lui un titre explicite, définissez le « Type » sur « Executable Program », puis enregistrez-le dans un package. - Définissez les paramètres du programme : dans l’éditeur, créez l’écran de sélection qui servira d’interface utilisateur pour l’extraction. Les utilisateurs pourront ainsi préciser des paramètres tels que la période et l’usine concernées par l’extraction.
- Mettez en œuvre 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 sélectionne les données correspondant aux 14 activités de stock requises dans différentes tables SAP.
- Comprenez la logique principale : le programme sélectionne les données de chaque activité de stock dans les tables sources correspondantes, par exemple
MKPFetMSEGpour les mouvements de matériel, ouCDHDRetCDPOSpour les modifications des données de base. Les résultats de chaque sélection sont ensuite réunis à l’aide deUNION ALLdans une table interne unique qui représente le journal d’événements. - Configurez la sortie fichier : la dernière partie du code écrit les données consolidées de la table interne dans un fichier. L’instruction
OPEN DATASETcrée ce fichier sur le serveur d’applications SAP. Vous devez indiquer un chemin valide sur le serveur, où l’utilisateur du système SAP dispose des droits d’écriture. - Exécutez le programme : enregistrez et activez le programme ABAP (Ctrl+F3), puis exécutez-le en appuyant sur F8. Sur l’écran de sélection, indiquez la période souhaitée et les autres filtres pertinents, comme l’usine ou la société.
- Lancez le programme en arrière-plan : pour les volumes de données importants, il est essentiel d’exécuter le programme en arrière-plan afin d’éviter l’expiration de la session. Depuis l’écran d’exécution (F8), sélectionnez
Program -> Execute in Backgrounddans le menu. Planifiez l’exécution en dehors des heures de pointe. - Récupérez le fichier de sortie : une fois le traitement terminé, recherchez le fichier sur le serveur d’applications SAP. Utilisez le code de transaction
AL11pour parcourir les répertoires du serveur et trouver le fichier. Utilisez la transactionCG3Ypour le télécharger sur votre ordinateur. - Préparez l’importation : 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élimiteurs de texte. Avant de l’importer dans l’outil de Process Mining, vérifiez que les noms de colonnes sont conformes aux exigences.
Configuration
- Période de dates comptables : il s’agit du paramètre le plus important. Pour garantir de bonnes performances et éviter les délais d’expiration du système, nous recommandons d’extraire les données par périodes raisonnables, par exemple de 3 à 6 mois.
- Filtre sur l’usine : il est vivement conseillé de sélectionner une ou plusieurs usines précises (
WERKS). Lancer l’extraction pour toutes les usines à la fois peut mobiliser énormément de ressources. - Filtre sur la société : vous pouvez ajouter un filtre facultatif sur la société (
BUKRS) pour réduire davantage le périmètre des données si votre organisation utilise plusieurs sociétés dans le même système. - Chemin du fichier sur le serveur d’applications : le programme ABAP nécessite un chemin de répertoire prédéfini et valide sur le serveur d’applications 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 des fichiers dans ce répertoire. - Autorisations : l’utilisateur qui exécute l’extraction doit être autorisé à utiliser la transaction
SE38(pour créer et exécuter le programme), à afficher les tablesMKPF,MSEG,MCH1,CDHDR,CDPOS,LTAKetLTAP, et à planifier des traitements en arrière-plan (SM36/SM37).
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 modèle pour préparer vos données en toute confiance et mieux comprendre vos opérations de gestion des stocks. Commencez dès aujourd’hui à améliorer l’efficacité et à réduire les coûts.
Optimisez la gestion de vos stocks dans SAP S/4HANA
Repérez les inefficacités, réduisez le temps de cycle de 30 % et réalisez des économies.
Aucune carte bancaire requise • Configuration en quelques minutes