Votre modèle de données pour le traitement des retours et remboursements
Votre modèle de données pour le traitement des retours et remboursements
- Attributs recommandés à collecter
- Activités clés à suivre
- Guide d'extraction
Attributs de traitement des retours et remboursements
| Nom | Description | ||
|---|---|---|---|
| Heure de l'événement EventTime | La date et l'heure exactes de l'activité. | ||
| Description Cet horodatage marque le moment précis où un événement métier s'est produit. Il est enregistré pour chaque activité du processus, fournissant la séquence chronologique des événements au sein d'un dossier. L'heure de l'événement est critique pour toutes les analyses basées sur le temps, y compris le calcul des temps de cycle entre les activités, l'identification des goulots d'étranglement où du temps est passé à attendre, et la mesure de la durée globale du dossier. Il permet l'analyse des performances et les contrôles de conformité par rapport aux accords de niveau de service (SLA). Pourquoi c'est important Cet horodatage est essentiel pour le calcul de toutes les durées, l'analyse des performances du processus, l'identification des goulots d'étranglement et la compréhension de la chronologie de chaque dossier de retour. Où obtenir Provient de divers champs de date et d'heure à travers les tables SAP. Pour les événements de création, ce sont souvent les champs ERDAT et ERZET (par ex., dans VBAK). Pour les événements de modification, ce sont UDATE et UTIME dans la table CDHDR. Exemples 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| ID du dossier de retour ReturnCaseId | L'identifiant unique pour la demande de retour d'un client, reliant toutes les activités et tous les documents connexes. | ||
| Description L'ID du dossier de retour sert de clé primaire pour le suivi de l'ensemble du cycle de vie d'un processus de retour, de l'initiation à la clôture. Chaque ID correspond à un retour client spécifique, englobant tous les événements associés tels que la création de commande, la livraison, l'inspection et le traitement de l'avoir. Dans l'analyse des processus, cet attribut est fondamental pour la construction de la carte des processus. Il permet au système de regrouper les événements individuels en parcours de dossier de bout en bout, permettant l'analyse des variantes de processus, des temps de cycle et des goulots d'étranglement pour chaque instance de retour distincte. Pourquoi c'est important C'est l'identifiant essentiel du dossier qui relie toutes les étapes d'un parcours de retour, permettant d'analyser le flux de processus de bout en bout et la performance. Où obtenir C'est généralement le numéro de commande de retour du module Ventes et Distribution (SD). Trouvé dans la table VBAK (Données d'en-tête de document de vente), champ VBELN, où la catégorie de document (VBAK-VBTYP) est 'H' pour les retours. Exemples 600001236000045660000789 | |||
| Nom de l'activité ActivityName | Le nom d'un événement métier ou d'une étape spécifique qui s'est produit au sein du processus de retours. | ||
| Description Cet attribut décrit une action unique et distincte ou un changement de statut dans le cycle de vie du retour, comme 'Commande de retour créée', 'Réception de marchandises comptabilisée' ou 'Avoir créé'. Ces activités constituent les éléments fondamentaux de la carte des processus. L'analyse de la séquence et de la fréquence de ces activités aide à identifier les parcours de processus les plus courants, les écarts et les boucles de retravail. Il est crucial pour comprendre ce qui se passe au sein d'un dossier et dans quel ordre, constituant la base de toute analyse de Process Mining. Pourquoi c'est important Les activités définissent les étapes du processus. L'analyse de leur séquence, de leur durée et de leur fréquence est au cœur du Process Mining et révèle comment le travail est réellement effectué. Où obtenir Dérivé des changements de statut dans des tables comme VBUK/VBUP, des événements de création de documents (par exemple, dans VBAK, LIKP, VBRK), ou des journaux de modifications dans les tables CDHDR/CDPOS. Exemples Commande de retour crééeRéception de marchandises enregistréeAvoir émisArticle de commande de retour complété | |||
| Dernière mise à jour des données LastDataUpdate | L'horodatage indiquant la dernière actualisation des données pour ce processus. | ||
| Description Cet attribut enregistre la date et l'heure de la dernière extraction ou mise à jour des données. Il offre une transparence sur la fraîcheur des données analysées. En analyse, c'est important pour comprendre l'actualité des informations. Les utilisateurs peuvent voir à quel point les données sont à jour, ce qui affecte la pertinence de toute découverte, en particulier pour le suivi des opérations en cours. Pourquoi c'est important Indique la fraîcheur des données, garantissant que les utilisateurs comprennent à quel point l'analyse du processus est actuelle et quand la prochaine mise à jour peut être attendue. Où obtenir C'est un attribut de métadonnées populé avec l'horodatage d'exécution du job d'extraction de données. Exemples 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| Système source SourceSystem | Le système d'où les données ont été extraites. | ||
| Description Cet attribut identifie l'origine des données, ce qui est essentiel dans les environnements multi-systèmes. Il fournit un contexte et aide à garantir la lignée et l'intégrité des données. Pour l'analyse, il est utilisé pour segmenter ou filtrer les données lors de la combinaison de processus provenant de différents systèmes sources. Il confirme que les événements proviennent de l'application attendue, dans ce cas, SAP ECC. Pourquoi c'est important Identifie l'origine des données, ce qui est crucial pour la gouvernance des données et pour les analyses couvrant plusieurs systèmes d'entreprise. Où obtenir C'est une valeur statique définie lors de l'extraction de données pour identifier l'instance SAP ECC spécifique (par ex., 'ECC_PROD_100'). Exemples SAP_ECC_PRODSAPECC_FINANCE_200 | |||
| `Numéro d'article` MaterialNumber | L'identifiant unique du produit retourné. | ||
| Description Le numéro de matériau, ou SKU, spécifie l'article exact impliqué dans le retour. Ceci permet une analyse détaillée au niveau du produit. En analysant les retours par numéro de matériau, les entreprises peuvent identifier les produits présentant des taux de retour élevés, ce qui peut indiquer des problèmes de qualité, des descriptions imprécises ou des défauts de fabrication. C'est essentiel pour des Pourquoi c'est important Identifie les produits qui sont retournés, mettant en évidence les problèmes potentiels de contrôle qualité ou les descriptions de produits inexactes. Où obtenir Trouvé dans la table des postes de document de vente VBAP, champ MATNR. Exemples RM-1025FG-2050-BACC-5591 | |||
| Agent de traitement ProcessingAgent | L'ID utilisateur de l'employé ayant effectué l'activité. | ||
| Description Cet attribut capture le nom d'utilisateur de la personne responsable de l'exécution d'une étape de processus spécifique, telle que la création de la commande de retour ou la comptabilisation de l'entrée de marchandises. Il est souvent désigné comme l'utilisateur 'Modifié par' ou 'Créé par'. L'analyse par agent de traitement est essentielle pour la gestion des performances et l'analyse des ressources. Elle aide à identifier les meilleurs performeurs, les agents pouvant nécessiter une formation supplémentaire et la répartition de la charge de travail au sein d'une équipe. Elle est utilisée dans des Pourquoi c'est important Suit l'implication des utilisateurs, permettant l'analyse des performances d'équipe, de la répartition de la charge de travail et l'identification des besoins en formation ou des meilleures pratiques. Où obtenir Généralement trouvé dans des champs comme ERNAM (Créé par) ou AENAM (Modifié par) dans les tables d'en-tête comme VBAK, LIKP, VBRK. Pour les événements de modification, c'est USERNAME dans CDHDR. Exemples CBURNSDSCRANTONJHALPERT | |||
| Canal de retour ReturnChannel | Le canal par lequel le retour a été initié, tel qu'en ligne, en magasin ou par centre d'appels. | ||
| Description Cet attribut spécifie l'origine ou la méthode de prise en charge de la demande de retour. Il aide à différencier les retours initiés via un portail web, un magasin physique ou par un représentant du service client. La segmentation du processus par canal de retour est cruciale pour comprendre les différences opérationnelles et l'allocation des ressources. Par exemple, les retours en magasin peuvent avoir des temps d'inspection plus rapides mais des étapes de documentation différentes par rapport aux retours en ligne. C'est une dimension clé pour le Pourquoi c'est important Distingue la manière dont les retours sont initiés, ce qui impacte souvent le flux de processus, les besoins en ressources et les temps de cycle pour les différents canaux. Où obtenir Ce n'est souvent pas un champ standard dans SAP ECC et peut nécessiter d'être extrait d'un champ personnalisé (par ex., dans VBAK) ou inféré à partir d'autres données comme l'Organisation commerciale (VKORG) ou le Canal de distribution (VTWEG). Consultez la documentation SAP ECC pour une implémentation spécifique. Exemples Portail en ligneEn magasinCentre d'appels | |||
| Montant de remboursement demandé RequestedRefundAmount | La valeur attendue du remboursement, généralement basée sur la valeur nette du ou des articles retournés. | ||
| Description Cet attribut représente la valeur monétaire initiale du retour, telle qu'enregistrée dans la commande de retour. Il sert de base pour l'analyse financière et la réconciliation. Ce montant est comparé à l''Actual Refund Amount' pour suivre les écarts, une métrique clé pour le Pourquoi c'est important Établit la valeur financière initiale du retour, ce qui est crucial pour suivre les écarts financiers et comprendre la valeur totale des marchandises retournées. Où obtenir Cette valeur est généralement la valeur nette au niveau de la ligne de la commande de retour. Trouvé dans la table VBAP, champ NETWR. Exemples 150.0049.991250.75 | |||
| Montant réel remboursé ActualRefundAmount | Le montant final crédité au client, tel qu'enregistré dans les documents financiers. | ||
| Description Cet attribut est la valeur finale et confirmée du remboursement qui a été traitée et comptabilisée dans le système comptable. Ce montant peut différer du montant demandé en raison de frais de réapprovisionnement, d'ajustements basés sur l'état de l'article ou d'autres applications de politique. C'est un attribut critique pour le Pourquoi c'est important Représente le résultat financier final du retour. Le comparer au montant demandé aide à garantir l'exactitude et à identifier les fuites financières. Où obtenir Provient du document financier associé à l'avoir. Généralement trouvé dans la table BSEG (Segment de document comptable), champ WRBTR (Montant en devise du document), pour l'enregistrement du compte général pertinent. Exemples 150.0045.001200.75 | |||
| Motif de retour ReturnReason | Le code motif fourni par le client pour le retour de l'article. | ||
| Description Cet attribut indique pourquoi un produit a été retourné, en utilisant des codes motif prédéfinis dans SAP. Des exemples incluent 'Endommagé pendant le transport', 'Mauvais article expédié' ou 'Ne convient pas'. C'est une dimension critique pour l'analyse des causes profondes. En filtrant la carte des processus ou les KPI par motif de retour, les analystes peuvent identifier si certains motifs sont associés à des temps de traitement plus longs, à des taux d'échec d'inspection plus élevés ou à des écarts de processus spécifiques. Cette information peut stimuler des améliorations dans la qualité des produits, la logistique ou les processus de vente. Pourquoi c'est important Explique pourquoi les retours se produisent, permettant une analyse des causes profondes pour réduire les taux de retour en s'attaquant aux problèmes de qualité des produits, d'expédition ou de description. Où obtenir Trouvé dans la table des postes de document de vente VBAP, champ ABGRU (Motif de rejet des documents de vente). Exemples 001 - Produit endommagé002 - Mauvais produit005 - Arrivé trop tard | |||
| Adhésion à la politique de retour ReturnPolicyAdherence | Un indicateur signalant si le retour est conforme à toutes les règles et politiques commerciales définies. | ||
| Description Cet attribut booléen calculé indique si un dossier de retour a suivi les politiques d'entreprise standard prescrites. La logique pourrait impliquer la vérification de multiples conditions, telles que si le retour a été initié dans le délai autorisé, si le code motif est valide pour le produit, ou si l'approbation du manager a été obtenue pour une exception. Cet attribut alimente le Pourquoi c'est important Mesure la conformité aux règles commerciales, aidant à appliquer les politiques de manière cohérente et à identifier les cas nécessitant un examen ou une approbation spéciale. Où obtenir C'est un attribut dérivé basé sur un ensemble de règles métier. Par exemple : (Date d'initiation du retour - Date d'achat originale) <= 30 jours ET ReturnReason N'EST PAS NUL. Exemples truefaux | |||
| Code société CompanyCode | L'entité juridique ou l'entreprise responsable de la transaction. | ||
| Description Le code société représente une unité comptable autonome au sein de SAP. Toutes les transactions financières, y compris les retours et les remboursements, sont comptabilisées sur un code société spécifique. Cet attribut est essentiel pour le reporting financier et pour la segmentation du processus dans les organisations multinationales ou multi-entités. L'analyse par code société permet de comparer la performance du processus de retour entre différentes entités juridiques au sein de l'entreprise. Pourquoi c'est important Permet de filtrer et de comparer les processus de retour entre différentes entités juridiques au sein d'une organisation, ce qui est crucial pour l'analyse financière. Où obtenir Trouvé dans la table d'en-tête de document de vente VBAK, champ BUKRS_VF (Code société pour la facturation). Exemples 10002000US01 | |||
| Date cible SLA de remboursement RefundSLATargetDate | La date à laquelle le remboursement doit être traité conformément aux accords de niveau de service. | ||
| Description Cet attribut définit la date limite pour l'achèvement du processus de remboursement pour un dossier de retour donné. Elle est généralement calculée sur la base de règles métier, telles que '5 jours ouvrables à compter de la réception des marchandises'. Cette date cible est la référence par rapport à laquelle la performance réelle est mesurée. C'est le composant central du Pourquoi c'est important Définit l'objectif de performance pour le traitement des remboursements, permettant à l'entreprise de mesurer et de rendre compte de la conformité aux SLA et de prioriser les cas en retard. Où obtenir Ce n'est généralement pas un champ SAP standard et devrait être dérivé sur la base de règles métier. Il pourrait être calculé à partir d'un champ de date clé (par ex., date de réception des marchandises de MKPF) plus une durée configurée. Consultez la documentation SAP ECC ou les exigences métier. Exemples 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| Document de vente original OriginalSalesDocument | Le numéro de la commande client originale contre laquelle le retour est effectué. | ||
| Description Cet attribut fournit un lien direct vers l'achat initial du client. C'est un document de référence qui relie le retour aux détails de la transaction originale. Disposer de ce lien est extrêmement précieux pour une analyse plus approfondie. Il permet aux analystes d'enquêter sur les raisons pour lesquelles les ventes de certaines commandes sont retournées, de vérifier les prix et les conditions d'origine, et de comprendre le cycle de vie complet du client, de la commande au retour. Il peut aider à répondre à des questions sur la question de savoir si les produits vendus via des campagnes ou des canaux spécifiques ont des taux de retour plus élevés. Pourquoi c'est important Lie le retour à la vente originale, permettant une vue complète de la transaction client et une analyse plus approfondie des causes profondes. Où obtenir Cette référence est stockée au niveau de la ligne de la commande de retour. Elle se trouve dans la table VBAP, champ VGBEL (Numéro de document du document de référence). Exemples 100034561000987110012345 | |||
| Écart de montant de remboursement RefundAmountDiscrepancy | La différence calculée entre les montants de remboursement réel et demandé. | ||
| Description Cette métrique calculée quantifie la différence monétaire entre ce qui a été initialement demandé dans la commande de retour et ce qui a finalement été émis dans l'avoir. Une valeur positive pourrait indiquer un remboursement partiel, tandis qu'une valeur négative est inhabituelle mais pourrait indiquer un trop-payé. Cet attribut est la mesure clé pour le Pourquoi c'est important Mesure directement les écarts financiers dans le processus de remboursement, aidant à identifier les non-conformités aux politiques, les erreurs de traitement ou les fuites financières. Où obtenir Champ calculé : Montant réel remboursé - Montant du remboursement demandé. Exemples 0.00-4.99-50.00 | |||
| Est conforme aux SLA IsSLACompliant | Un indicateur signalant si le remboursement a été traité dans le respect de l'accord de niveau de service (SLA) convenu. | ||
| Description C'est un attribut booléen calculé qui compare la date réelle de l'activité 'Remboursement traité' avec la 'Date cible SLA de remboursement'. Il est vrai si le remboursement a été effectué à temps et faux sinon. Cet attribut simplifie l'analyse et le reporting en fournissant un résultat clair et binaire pour la performance SLA de chaque dossier. Il est utilisé pour calculer le taux global de 'Conformité au SLA de traitement des remboursements' et permet un filtrage facile pour isoler et analyser les cas non conformes. Pourquoi c'est important Fournit un indicateur binaire clair de la performance des SLA pour chaque dossier, simplifiant le suivi de la conformité et le reporting. Où obtenir C'est un attribut calculé. La logique est : 'Remboursement traité' EventTime <= RefundSLATargetDate. Exemples truefaux | |||
| ID client CustomerId | L'identifiant unique du client initiant le retour. | ||
| Description Cet attribut identifie le client spécifique (le 'Client facturé' en termes SAP) qui retourne le produit. Il relie la transaction de retour aux données de base client. L'analyse par ID client aide à identifier les clients avec des retours fréquents, ce qui pourrait signaler une insatisfaction ou une utilisation abusive potentielle des politiques de retour. Il peut également être utilisé avec des données de segmentation client pour comprendre si certains groupes de clients ont des comportements de retour ou des expériences de processus différents. Pourquoi c'est important Lie les retours à des clients spécifiques, permettant l'analyse du comportement client, l'identification des clients retournant fréquemment des articles et l'impact sur les relations client. Où obtenir Trouvé dans la table d'en-tête de document de vente VBAK, champ KUNNR (Client donneur d'ordre). Exemples CUST-100432CUST-203991CUST-831102 | |||
| Numéro d'avoir CreditMemoNumber | L'identifiant unique pour le document d'avoir émis pour le remboursement. | ||
| Description L'avoir est le document de facturation officiel dans SAP qui formalise le remboursement à effectuer au client. Ce numéro identifie de manière unique ce document financier. Cet attribut est essentiel pour la réconciliation financière et pour le suivi du processus, du retour opérationnel au règlement financier. Il sert de jalon clé dans le processus et est utilisé pour trouver les documents comptables associés pour des attributs tels que 'Montant de remboursement réel'. Pourquoi c'est important Fournit un lien direct vers le document financier autorisant le remboursement client, ce qui est essentiel pour l'audit financier et la réconciliation. Où obtenir L'avoir est un document de facturation. Son numéro se trouve dans la table VBRK (Données d'en-tête du document de facturation), champ VBELN. Le lien est trouvé via le flux de documents de la commande de retour. Exemples 900011229000334490005566 | |||
| Statut de la commande de retour ReturnOrderStatus | Le statut global de traitement du dossier de commande de retour. | ||
| Description Cet attribut fournit un aperçu de l'état actuel du dossier de retour, tel que 'Ouvert', 'En cours' ou 'Terminé'. Il est dérivé de la combinaison des statuts au niveau de l'en-tête ou de l'article du document de vente. En analyse, cet attribut est utile pour filtrer les dossiers afin de se concentrer sur les retours actifs ou terminés. Il peut aider à surveiller la charge de travail globale et l'avancement des dossiers ouverts et fournit un résultat de haut niveau pour chaque parcours de retour. Pourquoi c'est important Offre une vue d'ensemble de l'emplacement d'un dossier dans son cycle de vie, permettant le filtrage et l'analyse des retours ouverts, en cours ou clôturés. Où obtenir Dérivé des champs de statut dans les tables VBUK (Statut d'en-tête) et VBUP (Statut d'article). Par exemple, VBUK-GBSTK est le statut de traitement global du document. Exemples OuvertEn coursTerminé | |||
| Temps de cycle de bout en bout EndToEndCycleTime | Le temps total écoulé entre la première et la dernière activité pour un dossier de retour. | ||
| Description C'est une métrique au niveau du dossier calculée comme la durée entre le tout premier événement (par ex., 'Commande de retour créée') et l'événement final (par ex., 'Commande de retour complétée' ou 'Avoir soldé'). Elle représente le temps total qu'un retour passe dans le processus. C'est un indicateur de performance clé pour l'efficacité globale du processus. Il est utilisé dans l'analyse des tendances et le benchmarking pour suivre les améliorations au fil du temps. L'analyse de la distribution de cette métrique aide à identifier les facteurs, tels que le type de produit ou le motif de retour, qui sont corrélés avec des temps de résolution plus longs ou plus courts. Pourquoi c'est important Mesure la durée totale du processus de retour, fournissant un indicateur clé de l'efficacité globale du processus et de l'expérience client. Où obtenir C'est une métrique calculée. C'est l'horodatage de la dernière activité d'un dossier moins l'horodatage de la première activité. Exemples 5 jours 4 heures12 jours 8 heures3 jours 2 heures | |||
| Usine Plant | Le lieu physique ou l'installation où l'article retourné est reçu et traité. | ||
| Description Le site (Plant) dans SAP représente un emplacement physique, tel qu'un entrepôt ou un centre de distribution, où les marchandises sont gérées. Pour les retours, c'est généralement l'emplacement où l'article est reçu et inspecté. L'analyse du processus par site (Plant) aide à identifier les variations de performance entre les différentes installations. Elle peut mettre en évidence quels entrepôts sont plus efficaces pour l'inspection des articles ou ont un débit plus élevé, soutenant le Pourquoi c'est important Identifie l'emplacement physique traitant le retour, permettant une comparaison des performances entre différents entrepôts ou centres de distribution. Où obtenir Trouvé au niveau du poste dans la commande de retour, table VBAP, champ WERKS. Exemples PL01WH02DC05 | |||
Activités de traitement des retours et remboursements
| Activité | Description | ||
|---|---|---|---|
| Avoir émis | Un document de facturation (note de crédit) est généré pour autoriser le crédit financier au client. C'est le document financier officiel qui formalise le montant du remboursement. | ||
| Pourquoi c'est important C'est un jalon financier majeur dans le processus. L'analyse du temps de création de l'avoir aide à identifier les retards dans le traitement des documents financiers après la réception des marchandises et l'inspection. Où obtenir C'est un événement explicite enregistré dans la table VBRK (En-tête de document de facturation). La date de création est VBRK-ERDAT. L'avoir est lié à la commande de retour ou à la demande d'avoir dans le flux de documents. Capture Utilisez l'horodatage de création (ERDAT) de la table VBRK pour le document de facturation pertinent. Type d'événement explicit | |||
| Avoir enregistré en FI | L'avoir est libéré pour la comptabilité financière, en faisant un enregistrement officiel des créances clients. Cette étape déclenche le processus de paiement de remboursement effectif au client. | ||
| Pourquoi c'est important Cette activité marque le moment où le remboursement est reconnu financièrement par l'entreprise. Les retards entre la création et la comptabilisation de l'avoir peuvent ralentir le remboursement effectif au client. Où obtenir C'est un événement inféré, identifié lorsque le statut de comptabilisation dans l'en-tête du document de facturation (VBRK-RFBSK) est mis à jour à 'C' (Document de comptabilisation créé). La date de création réelle du document comptable se trouve dans la table BKPF. Capture Identifier l'horodatage lorsque VBRK-RFBSK est défini sur 'C', ou utiliser la date de création (CPUDT) du document comptable BKPF lié. Type d'événement inferred | |||
| Commande de retour complétée | Cette activité marque la fin du processus de retours du point de vue des ventes et de la distribution. Elle se produit lorsque toutes les lignes de la commande de retour sont entièrement traitées et clôturées. | ||
| Pourquoi c'est important C'est l'événement de fin principal du processus. Mesurer le temps entre 'Commande de retour créée' et cette activité donne le temps de cycle de bout en bout pour le dossier de retour. Où obtenir C'est un événement inféré des tables de statut. Il est capturé lorsque le statut global de l'en-tête du document de vente (VBUK-GBSTK) est mis à jour à 'C' (Entièrement traité). Capture Identifier l'horodatage des documents de modification (CDHDR/CDPOS) lorsque le champ de statut d'en-tête VBUK-GBSTK passe à 'C'. Type d'événement inferred | |||
| Commande de retour créée | Cette activité marque le début du processus de retour lorsqu'un client demande à retourner un produit. Elle est enregistrée lorsqu'un nouveau document de vente de type 'Retour' (par ex., RE) est créé dans SAP ECC. | ||
| Pourquoi c'est important C'est l'événement de début principal du processus de retours. L'analyse du temps écoulé entre cette activité et d'autres aide à mesurer le temps de cycle total et à identifier les retards de traitement initiaux. Où obtenir C'est un événement explicite enregistré dans la table VBAK (En-tête de document de vente). L'horodatage de création est stocké dans VBAK-ERDAT et VBAK-ERZET pour le numéro de document de vente correspondant (VBAK-VBELN) avec le type de commande VBAK-AUART = 'RE'. Capture Utilisez l'horodatage de création (ERDAT, ERZET) de la table VBAK pour le type de document de vente 'RE'. Type d'événement explicit | |||
| Décision d'utilisation prise | Après inspection, un ingénieur qualité ou un inspecteur prend une décision formelle sur l'état de l'article retourné. Cette décision détermine le processus ultérieur, tel que le retour en stock, la mise au rebut ou la réparation. | ||
| Pourquoi c'est important Cette activité est cruciale pour comprendre l'efficacité de l'inspection et ses résultats. La décision a un impact direct sur le montant du remboursement et la gestion des stocks. Où obtenir Si SAP QM est utilisé, il s'agit d'un événement explicite enregistré dans la table QAVE (Décision d'utilisation du traitement d'inspection). L'heure de décision est stockée dans QAVE-VDATUM. Le lien vers la livraison se trouve dans la table QALS. Capture Utilisez la date de décision d'utilisation (VDATUM) de la table QAVE, liée via le lot de contrôle (QALS-PRUEFLOS). Type d'événement explicit | |||
| Réception de marchandises enregistrée | Cette activité se produit lorsque l'article physique retourné est reçu à l'entrepôt ou au centre de traitement. Elle est enregistrée par la comptabilisation d'un document de mouvement de marchandises contre la livraison de retour. | ||
| Pourquoi c'est important Une étape clé indiquant que l'entreprise a pris possession de l'article retourné. C'est le point de départ de l'inspection physique et cela affecte la précision des stocks. Où obtenir Cet événement peut être déduit du statut du mouvement de marchandises de la ligne de livraison de retour dans la table VBUP (par ex., WBSTA = 'C'). L'horodatage exact se trouve dans l'en-tête du document article (MKPF-BUDAT) pour la réception de marchandises correspondante. Capture Trouvez la date de comptabilisation (BUDAT) de la table MKPF pour le document article lié à la livraison de retour. Type d'événement inferred | |||
| Article de commande de retour complété | Un poste individuel de la commande de retour est marqué comme entièrement traité. Cela se produit généralement après que tous les documents de suivi logistiques et financiers pour cet article ont été complétés. | ||
| Pourquoi c'est important Le suivi au niveau de l'article aide à identifier quels produits ou motifs de retour causent les plus longs retards. Il offre une vue plus granulaire de l'achèvement du processus. Où obtenir C'est un événement inféré des tables de statut. Il est capturé lorsque le statut global de la ligne de document de vente (VBUP-GBSTK) est mis à jour à 'C' (Entièrement traité). Capture Identifier l'horodatage des documents de modification (CDHDR/CDPOS) lorsque le champ de statut de poste VBUP-GBSTK passe à 'C'. Type d'événement inferred | |||
| Article de commande de retour refusé | Un article spécifique de la commande de retour est rejeté, soit lors de l'examen initial, soit après l'inspection. Cela signifie qu'aucun traitement ultérieur, tel qu'un remboursement, ne sera effectué pour cet article. | ||
| Pourquoi c'est important L'analyse des rejets aide à identifier les demandes de retour invalides et peut éclairer la communication sur la politique client. C'est une voie clé dans le processus qui ne mène pas à un remboursement. Où obtenir C'est un événement inféré. Il est généralement capturé par l'attribution d'un code 'Motif de rejet' unique pour l'article dans la table VBAP (VBAP-ABGRU). L'horodatage doit être extrait des journaux de modifications. Capture Identifier l'horodatage des documents de modification (CDHDR/CDPOS) lorsque le champ VBAP-ABGRU est renseigné pour un article de retour. Type d'événement inferred | |||
| Avoir apuré | L'élément d'avoir ouvert dans les comptes clients est soldé, généralement par un paiement sortant au client. Cet événement marque la clôture financière finale du remboursement. | ||
| Pourquoi c'est important Cette activité confirme l'événement de décaissement et complète l'aspect financier du processus. C'est la véritable fin du parcours de remboursement du point de vue client. Où obtenir C'est un événement explicite du module FI. La date de compensation du document comptable est stockée dans la table BSEG (BSEG-AUGDT) pour la ligne client correspondante. Capture Utilisez la date de compensation (AUGDT) des tables BSEG ou BSAD pour le document comptable lié à l'avoir. Type d'événement explicit | |||
| Blocage de la commande de retour levé | Représente l'approbation de la demande de retour, lui permettant de passer à l'étape suivante. Ceci est généralement capturé par un changement du statut du document ou la levée d'un blocage de livraison ou de facturation. | ||
| Pourquoi c'est important Cette activité est un jalon d'approbation crucial. Mesurer le temps nécessaire pour atteindre cette étape aide à identifier les goulots d'étranglement dans le processus d'autorisation et d'approbation des retours. Où obtenir C'est un événement inféré, dérivé des journaux de modifications pour le document de vente. Vérifiez les tables CDHDR et CDPOS pour les modifications apportées aux champs de blocage dans VBAK ou VBAP, ou aux champs de statut dans VBUK/VBUP. Capture Identifier l'horodatage des tables de documents de modification (CDHDR/CDPOS) lorsqu'un statut de blocage pertinent est supprimé. Type d'événement inferred | |||
| Demande d'avoir créée | Une demande d'avoir est créée pour documenter formellement le besoin d'un remboursement. Dans de nombreuses configurations, la commande de retour elle-même sert de demande d'avoir. | ||
| Pourquoi c'est important C'est le début formel de la partie règlement financier du processus de retours. Il fournit un déclencheur pour les approbations financières et la création de documents ultérieures. Où obtenir Ceci peut être un événement explicite dans VBAK pour un document de vente de type 'Demande d'avoir' (par ex., CR), ou il peut s'agir du même événement que 'Commande de retour créée' si le type de commande est configuré pour une facturation liée à la commande. Capture Utilisez l'horodatage de création (ERDAT) de VBAK pour le type de document 'CR', ou réutilisez l'événement de création de commande de retour. Type d'événement explicit | |||
| Retour de livraison créé | Un document de livraison est généré pour gérer la réception physique des marchandises retournées. Cet événement signifie que le processus logistique de retour a été initié. | ||
| Pourquoi c'est important Suit la transition du traitement administratif à la logistique physique. Les retards ici peuvent impacter la planification de l'entrepôt et le temps de cycle global des retours. Où obtenir C'est un événement explicite enregistré dans la table LIKP (En-tête de livraison). L'horodatage de création se trouve dans LIKP-ERDAT. Le lien vers la commande de retour source se trouve dans la table LIPS (LIPS-VGBEL). Capture Utilisez l'horodatage de création (ERDAT) de la table LIKP pour la livraison associée à la commande de retour. Type d'événement explicit | |||
Guides d'extraction
Étapes
- Créer un programme ABAP : Utilisez le code de transaction
SE38pour créer un nouveau programme ABAP exécutable, par exemple,Z_PM_RETURN_EXTRACTION. Fournissez un titre descriptif et enregistrez-le en tant qu'objet local ou dans un package de développement. - Définir l'écran de sélection : Dans le programme, définissez un écran de sélection pour permettre aux utilisateurs de filtrer les données. Les filtres clés incluent la plage de dates de création pour les commandes de retour (
S_ERDAT), le type de document de vente pour les retours (S_AUART, par exemple 'RE'), et le code de société (P_BUKRS). - Définir les structures de données : Créez un type de structure local qui correspond au format requis du journal d'événements. Cette structure doit inclure les champs pour
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReasonet d'autres attributs requis. - Implémenter la logique de sélection des données : Écrivez la logique ABAP principale pour sélectionner les données pour chacune des 12 activités requises. Cela implique d'interroger diverses tables SAP telles que VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR et CDPOS. Utilisez la table de flux de documents (VBFA) pour lier les documents connexes comme les livraisons et les notes de crédit à la commande de retour originale.
- Extraire 'Commande de retour créée' : Sélectionnez les enregistrements des tables
VBAKetVBAPen fonction des critères de l'écran de sélection. Le numéro de document de vente (VBAK-VBELN) servira deReturnCaseId. - Extraire les changements de statut et les événements clés : Pour les activités comme 'Blocage commande de retour levé' ou 'Article de commande de retour rejeté', interrogez les tables de documents de modification (
CDHDR,CDPOS) ou les champs de statut dans des tables commeVBAP(ABGRU). Pour les activités de suivi logistiques et financières, sélectionnez parmi des tables commeLIKP,MKPF,VBRKetBKPF, en utilisantVBFApour vous assurer qu'elles sont liées à l'ensemble initial des commandes de retour. - Remplir la table du journal d'événements : Pour chaque activité récupérée, créez un nouvel enregistrement dans une table interne définie avec votre structure de journal d'événements. Mappez les données des tables source SAP aux champs correspondants, par exemple, mappez
VBAK-ERNAMàProcessingAgentetVBAK-ERDATetVBAK-ERZETàEventTime. - Combiner les données d'activité : Assurez-vous que chaque instruction SELECT pour une activité ajoute ses résultats à la seule table interne principale. Cela crée la structure de fichier plat finale où chaque ligne représente un événement.
- Gérer les horodatages et les informations système : Utilisez les champs système
SY-DATUMetSY-UZEITpour renseigner l'horodatageLastDataUpdatepour chaque ligne. UtilisezSY-SYSIDpour renseigner leSourceSystem. - Implémenter la fonctionnalité de sortie : Ajoutez des fonctionnalités pour afficher les résultats dans une grille ALV (SAP List Viewer) pour une analyse en ligne à l'aide de modules de fonction comme
REUSE_ALV_GRID_DISPLAY. Fournissez une option pour télécharger la table interne finale sous forme de fichier CSV ou de fichier texte plat sur la machine locale de l'utilisateur. - Exécuter et exporter : Exécutez le programme via
SE38. Saisissez les critères de sélection souhaités et exécutez. Une fois les données affichées ou traitées, utilisez la fonction d'exportation du programme pour enregistrer le fichier journal d'événements. Assurez-vous que le fichier est enregistré dans un format compatible avec ProcessMind, généralement CSV avec une ligne d'en-tête.
Configuration
- Plage de dates : Sur l'écran de sélection, spécifiez une plage de dates pour la date de création de la commande de retour. Une période de 3 à 6 mois est recommandée pour une analyse initiale afin d'équilibrer le volume de données et la pertinence des informations sur le processus.
- Type de document de retour : Filtrez par le type de document de vente spécifique utilisé pour les retours dans votre système, par exemple, 'RE' pour les Retours, 'CR' pour une Demande d'avoir. C'est un filtre essentiel pour isoler le processus correct. Saisissez ces valeurs dans l'option de sélection
S_AUART. - Code de société : Spécifiez le code de société pertinent (
P_BUKRS) pour limiter les données à une entité juridique spécifique. C'est essentiel dans les environnements multi-sociétés. - Prérequis : L'utilisateur exécutant le programme requiert des autorisations pour
SE38(exécution de programme) et un accès aux tables SD, MM et FI sous-jacentes (par exemple, VBAK, LIKP, VBRK, BKPF, CDHDR). Le développement requiert un rôle de développeur ABAP. - Performance : Pour de très grands ensembles de données s'étendant sur plusieurs années, le programme peut avoir des temps d'exécution longs. Envisagez de l'exécuter en tâche de fond (
SM36) et d'écrire la sortie dans le système de fichiers du serveur d'applications au lieu de l'afficher en ligne.
a Exemple de requête abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). Étapes
- Prérequis : Assurez-vous de disposer d'un utilisateur de base de données avec un accès en lecture aux tables SAP ECC requises. Cela inclut les tables des modules Ventes et Distribution (SD), Gestion des articles (MM) et Comptabilité financière (FI). Vous aurez besoin d'un outil client SQL approprié comme DBeaver, SAP HANA Studio ou Oracle SQL Developer pour vous connecter à la base de données.
- Identifier les spécificités du système : Avant d'exécuter la requête, vous devez identifier les types de documents spécifiques utilisés pour les retours dans votre organisation. La requête utilise un espace réservé
[YOUR_RETURN_ORDER_TYPES], que vous devez remplacer par des valeurs réelles, telles que 'RE' pour les retours standards. - Préparer la requête : Copiez la requête SQL complète fournie dans la section 'query' dans votre client SQL.
- Configurer les paramètres : Localisez l'expression de table commune (CTE) nommée
BaseReturnOrdersau début de la requête. Modifiez la clauseWHEREpour spécifier la plage de dates souhaitée en remplaçant[START_DATE]et[END_DATE]. Mettez à jour la liste des types de commandes de retour et, si nécessaire, filtrez par un code de société spécifique (BUKRS_VF). - Exécuter la requête : Exécutez la requête modifiée sur la base de données SAP ECC. Le temps d'exécution peut varier en fonction de la plage de dates sélectionnée et de la taille de la base de données.
- Examiner les données brutes : Une fois la requête terminée, effectuez un examen rapide de la sortie. Vérifiez que les colonnes
ReturnCaseId,ActivityNameetEventTimesont renseignées et que les données apparaissent pour plusieurs activités. - Exporter au format CSV : Exportez l'ensemble du jeu de résultats de votre client SQL vers un fichier CSV. Utilisez l'encodage UTF-8 pour vous assurer que tous les caractères sont correctement conservés.
- Préparer le téléversement : Ouvrez le fichier CSV et vérifiez que les en-têtes de colonne correspondent exactement aux attributs requis :
ReturnCaseId,ActivityName,EventTime,SourceSystem, etc. Ajustez les en-têtes si votre client SQL les a modifiés pendant l'exportation. - Téléversement final : Téléversez le fichier CSV propre sur la plateforme ProcessMind pour analyse.
Configuration
- Types de documents de retour : La requête doit être configurée avec les types de documents de vente spécifiques qui représentent les commandes de retour dans votre système SAP. Cela se fait en remplaçant l'espace réservé
[YOUR_RETURN_ORDER_TYPES]. Les exemples courants incluent 'RE' ou les types 'Z' personnalisés. - Plage de dates : Il est crucial de définir une plage de dates appropriée pour l'extraction. Une période de 3 à 6 mois de données est généralement recommandée pour une analyse initiale. Définissez-la en utilisant les espaces réservés
[START_DATE]et[END_DATE]au format 'YYYYMMDD'. - Code de société : Pour les organisations avec plusieurs codes de société, filtrer les données est essentiel pour une analyse ciblée. Vous pouvez ajouter un filtre comme
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'dans le CTE initial pour limiter la portée. - Dialecte de base de données : La requête fournie utilise des fonctions SQL courantes. Cependant, les conversions de date et d'heure, telles que
TO_TIMESTAMPet la concaténation de chaînes (CONCAT), peuvent nécessiter de légers ajustements de syntaxe en fonction du système de base de données sous-jacent (par exemple, Oracle, HANA, DB2). - Autorisations requises : L'utilisateur de la base de données a besoin d'un accès en lecture aux tables clés suivantes : VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR et CDPOS.
a Exemple de requête sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR;