Votre modèle de données pour le traitement des paiements fournisseurs
Votre modèle de données pour le traitement des paiements fournisseurs
- Attributs propres au processus pour l’analyse financière
- Jalons d’activité essentiels pour suivre les paiements
- Instructions détaillées d’extraction pour Dynamics 365
Attributs du traitement des paiements des comptes fournisseurs
| Nom | Description | ||
|---|---|---|---|
| Activité Activity | Tâche précise ou changement de statut survenu. | ||
| Description Cet attribut décrit l’événement ou l’étape exécutée dans le processus, comme « Facture créée », « Facture approuvée » ou « Paiement comptabilisé ». Il transforme les types de transactions techniques et les changements de statut du flux de travail en événements métier lisibles. Dans Dynamics 365, ces activités sont souvent dérivées d’une combinaison d’insertions dans les tables, par exemple un nouvel enregistrement dans Pourquoi c’est important Il définit le flux du processus et la séquence des événements de la carte de processus. Où les obtenir Dérivé de différentes tables de transactions et de journaux d’historique du flux de travail Exemples Facture crééeFacture approuvéePaiement généré | |||
| Heure de l’événement EventTime | Horodatage auquel l’activité a eu lieu. | ||
| Description Cet attribut enregistre la date et l’heure exactes auxquelles une activité donnée s’est produite. Il sert à ordonner chronologiquement les événements et à calculer la durée entre les étapes. Dans Dynamics 365, il provient généralement de Pourquoi c’est important Essentiel pour calculer les délais de traitement, les temps de cycle et identifier les goulots d’étranglement. Où les obtenir Champs système CreatedDateTime ou ModifiedDateTime des tables de transactions Exemples 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Numéro de facture InvoiceNumber | Identifiant unique attribué à la facture fournisseur. | ||
| Description Invoice Number sert d’identifiant de cas de référence pour cette vue du processus. Il regroupe de manière unique tous les événements associés à une même facture fournisseur et permet d’analyser son parcours complet, de la réception au règlement. Dans Microsoft Dynamics 365, il correspond généralement au champ Pourquoi c’est important Il s’agit de la clé fondamentale qui relie les activités AP distinctes au sein d’une même instance de processus. Où les obtenir Table : VendInvoiceJour, champ : InvoiceId Exemples INV-2023-00198223344ACME-OCT-22 | |||
| Dernière mise à jour des données LastDataUpdate | Horodatage auquel les données ont été extraites ou actualisées. | ||
| Description Indique l’actualité des données utilisées pour l’analyse. Il aide les utilisateurs à déterminer s’ils consultent des données en temps réel ou un instantané d’une période précédente. Cet attribut est généralement généré par le processus ETL (Extract, Transform, Load), plutôt que par un champ propre à Dynamics 365. Pourquoi c’est important Essentiel pour établir la confiance dans les Dashboards et les KPI. Où les obtenir Généré par le script d’extraction Exemples 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Système source SourceSystem | Nom du système à l’origine des données. | ||
| Description Identifie le logiciel ou l’environnement source à partir duquel les données du processus ont été extraites. Dans ce contexte, il indiquera systématiquement l’instance Microsoft Dynamics 365. Cet attribut est particulièrement utile dans les environnements multisystèmes où les données peuvent provenir d’ERP et de solutions externes de numérisation. Pourquoi c’est important Garantit la traçabilité et la provenance des données dans les analyses multisystèmes. Où les obtenir Défini en dur ou configuré lors de l’extraction Exemples Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Code société CompanyCode | Identifiant de l’entité juridique ou de la filiale. | ||
| Description Représente l’entité juridique de l’organisation dans laquelle la facture est traitée. Dans Microsoft Dynamics 365, cet attribut est strictement géré par le champ système Il est essentiel pour l’« End to End Lead Time Analysis », qui permet de comparer les résultats entre différentes filiales ou unités géographiques. Pourquoi c’est important Permet de comparer les performances entre différentes unités opérationnelles ou différents pays. Où les obtenir Table : VendInvoiceJour, champ : DataAreaId Exemples USMFDEMFGBSI | |||
| Compte fournisseur VendorAccount | Numéro de compte unique du fournisseur. | ||
| Description Identifiant unique du fournisseur concerné par la transaction. Dans Dynamics 365, il correspond au champ Cet attribut est au cœur de la vue « Vendor Relationship Complexity View », qui permet d’analyser la performance et les points de friction de chaque relation fournisseur. Pourquoi c’est important Permet de segmenter la performance du processus par fournisseur. Où les obtenir Table : VendInvoiceJour, champ : InvoiceAccount ou OrderAccount Exemples US-101V000452001 | |||
| Date d’échéance DueDate | Date à laquelle la facture doit être payée au plus tard. | ||
| Description Date contractuelle à laquelle le paiement doit être réglé pour éviter les pénalités. Dans Dynamics 365, elle est enregistrée sous Elle constitue la référence principale du KPI « On-Time Payment Rate » et aide à hiérarchiser les tâches dans la vue « AP Process Throughput and Volume ». Pourquoi c’est important Référence pour mesurer la performance des paiements effectués à temps. Où les obtenir Table : VendInvoiceJour ou VendTrans, champ : DueDate Exemples 2023-11-302023-12-15 | |||
| Date de facture InvoiceDate | Date du document indiquée sur la facture. | ||
| Description Date imprimée sur la facture du fournisseur. Dans Dynamics 365, il s’agit du champ Utilisée dans l’analyse « Délai de bout en bout » pour mesurer le cycle de vie complet du point de vue du fournisseur. Pourquoi c’est important Définit le début de la période d’ancienneté de la facture. Où les obtenir Table : VendInvoiceJour, champ : InvoiceDate Exemples 2023-10-012023-10-15 | |||
| Identifiant utilisateur UserId | Identifiant de l’utilisateur ayant effectué l’activité. | ||
| Description Identifie l’utilisateur système responsable d’une activité donnée, par exemple l’approbation d’une facture ou la comptabilisation d’un paiement. Provient des champs Utilisé dans l’analyse « Payment Block and Friction Analysis » pour déterminer si certains opérateurs déclenchent davantage de blocages que d’autres. Pourquoi c’est important Permet d’analyser le comportement des ressources et la séparation des tâches. Où les obtenir Champs système CreatedBy/ModifiedBy dans les tables de transactions et d’historique Exemples jdoeadminworkflow_sys | |||
| Montant de la facture InvoiceAmount | Valeur monétaire totale de la facture. | ||
| Description Valeur totale de la facture dans la devise de transaction. Dans Dynamics 365, elle figure dans des champs tels que Utilisée dans le Dashboard « Duplicate Payment Risk Detection » pour mettre en relation les montants et les informations fournisseurs. Pourquoi c’est important Essentiel pour analyser le volume des dépenses et le risque financier. Où les obtenir Table : VendInvoiceJour, champ : InvoiceAmount Exemples 1500.00245.5010000.00 | |||
| Nom du fournisseur VendorName | Nom de l’organisation fournisseur. | ||
| Description Le nom descriptif du fournisseur. Dans D365, le compte fournisseur sert de clé étrangère vers le carnet d’adresses global ( Des noms lisibles facilitent la vue « Complexité des relations fournisseurs » et rendent les Dashboards accessibles aux utilisateurs métier. Pourquoi c’est important Fournit le contexte du numéro de compte fournisseur. Où les obtenir Table : DirPartyTable, via VendTable, champ : Name Exemples Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Numéro de commande d’achat PurchaseOrderNumber | Numéro de référence de la commande d’achat associée. | ||
| Description Relie la facture au document d’achat d’origine. Dans Dynamics 365, il s’agit du champ Cet attribut alimente le Dashboard « PO Match and Discrepancy Trends » en distinguant les factures associées à une commande d’achat des factures sans commande. Pourquoi c’est important Essentiel pour analyser le taux de rapprochement du processus procure-to-pay. Où les obtenir Table : VendInvoiceJour, champ : PurchId Exemples PO-000455000342PO-22-998 | |||
| Service Department | Service responsable du coût. | ||
| Description Dimension financière indiquant le service interne. Dans Dynamics 365, les dimensions sont stockées de manière dynamique, souvent dans Cet attribut est utilisé dans la vue « Complexité des relations fournisseurs » afin d’identifier les services internes qui génèrent le plus grand volume de dettes fournisseurs. Pourquoi c’est important Permet d’analyser l’organisation par niveau de détail et d’identifier les responsabilités. Où les obtenir Table : VendInvoiceJour, champ : DefaultDimension, nécessite la vue DimensionAttributeLevelValue Exemples InformatiqueFinanceOpérations | |||
| Conditions de paiement PaymentTerms | Code correspondant aux conditions de paiement convenues. | ||
| Description Code de configuration qui détermine les dates d’échéance et les remises, par exemple Net30. Dans Dynamics 365, il s’agit de Analysé avec le « Temps de cycle » pour vérifier si les retards du processus entraînent le non-respect des conditions convenues. Pourquoi c’est important Fournit le contexte nécessaire au calcul de la date d’échéance. Où les obtenir Table : VendInvoiceJour, champ : PaymTermId Exemples Net302%10Net30COD | |||
| Date de remise pour paiement comptant CashDiscountDate | Date limite à laquelle le paiement doit être effectué pour bénéficier d’une remise. | ||
| Description Date limite pour bénéficier des avantages liés au paiement anticipé. Dans Dynamics 365, il s’agit de Cet attribut alimente le Dashboard « Performance de récupération des remises pour paiement comptant », qui permet à l’organisation de quantifier les économies manquées. Pourquoi c’est important A une incidence directe sur le KPI d’efficacité financière du processus. Où les obtenir Table : VendInvoiceJour ou VendTrans, champ : CashDiscDate Exemples 2023-10-102023-10-20 | |||
| Devise Currency | Code devise de la facture. | ||
| Description Code ISO de la devise dans laquelle la facture a été émise. Dans Dynamics 365, il s’agit du champ Cet élément est important pour standardiser les montants dans le mapping « Montant de l’activité » lorsqu’une conversion multidevise est nécessaire. Pourquoi c’est important Contexte nécessaire à l’interprétation des valeurs financières. Où les obtenir Table : VendInvoiceJour, champ : CurrencyCode Exemples USDEURGBP | |||
| Mode de paiement PaymentMethod | Mode utilisé pour régler la facture, par exemple par chèque, virement ou EFT. | ||
| Description Définit la manière dont les fonds sont transférés au fournisseur. Dans Dynamics 365, il s’agit du champ Cet attribut est utilisé dans le Dashboard « Délais d’exécution des paiements » pour évaluer l’efficacité des différents types de lots de paiements. Pourquoi c’est important Explique les variations observées pendant la phase d’exécution du paiement. Où les obtenir Table : VendInvoiceJour, jointe aux informations PaymMode, ou VendTrans Exemples CHÈQUEACHVIREMENT | |||
| Numéro de pièce VoucherNumber | Numéro de pièce comptable associé à la transaction. | ||
| Description Identifiant interne du grand livre associé à l’écriture comptable. Dans Dynamics 365, le champ Bien qu’il soit technique, il est utile pour l’audit de conformité « Parcours du processus et audit de conformité », afin de remonter les écritures jusqu’au grand livre à des fins de rapprochement. Pourquoi c’est important Élément essentiel pour l’audit financier et le rapprochement. Où les obtenir Table : VendInvoiceJour, champ : LedgerVoucher Exemples VOU-10023INV-ACC-992 | |||
| Paiement bloqué IsPaymentBlocked | Indicateur précisant si la facture est actuellement bloquée pour paiement. | ||
| Description Indicateur booléen permettant d’identifier si la facture est en attente. Dans Dynamics 365, il est souvent dérivé du statut Il constitue le principal facteur de l’analyse « Blocage des paiements et points de friction », qui met en évidence les interruptions du processus. Pourquoi c’est important Identifie les points de friction immédiats et les interventions manuelles. Où les obtenir Table : VendTrans, champ : Approved, inversé, ou champs Hold spécialisés Exemples truefalse | |||
Activités du traitement des paiements des comptes fournisseurs
| Activité | Description | ||
|---|---|---|---|
| Facture approuvée | L’instance du flux de travail de la facture en attente atteint le statut Terminé ou Approuvé. La facture peut désormais être comptabilisée dans le grand livre. | ||
| Pourquoi c’est important Calcule le délai moyen d’approbation. Les retards à ce stade réduisent directement la possibilité de bénéficier de remises pour paiement anticipé. Où les obtenir WorkflowTrackingStatusTable.CreatedDateTime lorsque TrackingStatus est égal à Completed. Autre possibilité : VendInvoiceInfoTable.RequestStatus est égal à Approved. Collecte Enregistré lorsque l’instance du flux de travail se termine Type d’événement explicit | |||
| Facture comptabilisée | La facture est comptabilisée dans le grand livre, ce qui crée une dette dans le système. L’enregistrement passe des tables des éléments en attente aux tables des transactions comptabilisées. | ||
| Pourquoi c’est important Étape majeure marquant la reconnaissance comptable de la dette. Cette activité permet de sélectionner la facture pour paiement. Où les obtenir Création d’un enregistrement dans VendInvoiceJour et VendTrans. TransDate représente la date de comptabilisation. Collecte Enregistré lorsque la transaction X est exécutée Type d’événement explicit | |||
| Facture créée | Création initiale dans le système d’un enregistrement de facture fournisseur en attente. Cette étape marque l’entrée de la facture dans le flux de travail Dynamics 365, manuellement ou par importation d’une entité de données. | ||
| Pourquoi c’est important Définit l’heure de début du calcul du délai de traitement. Elle permet aux organisations de mesurer le temps pendant lequel les factures restent dans le système avant d’être traitées ou comptabilisées. Où les obtenir Horodatage de VendInvoiceInfoTable.CreatedDateTime ou de la création de VendInvoiceInfoTable.RecId. Il représente l’en-tête de la facture fournisseur en attente. Collecte Enregistré lors de la création de l’enregistrement dans VendInvoiceInfoTable Type d’événement explicit | |||
| Facture rapprochée avec la commande d'achat | Le système associe correctement la ligne de facture à une Purchase Order ou à un Product Receipt. Cette activité confirme la validation de la facture par rapport à la commande d’achat. | ||
| Pourquoi c’est important Essentiel pour le KPI First-Pass PO Matching Rate. Il permet de distinguer le traitement sans intervention manuelle des factures nécessitant une intervention manuelle. Où les obtenir VendInvoiceInfoLine.PurchId et VendInvoiceInfoTable.MatchStatus. Déduit lorsque MatchStatus passe à Passed. Collecte Comparer le champ MatchStatus avant et après Type d’événement inferred | |||
| Journal des paiements créé | La facture est sélectionnée et ajoutée à une ligne du journal des paiements. Cette étape indique l’intention de payer et lance généralement le flux de travail d’examen du paiement. | ||
| Pourquoi c’est important Marque le passage de la dette au traitement du décaissement. Utilisé pour mesurer les délais d’exécution des paiements. Où les obtenir LedgerJournalTrans.CreatedDateTime. La facture est associée via le champ MarkedInvoice ou les tables de règlement. Collecte Enregistré lors de la création de l’enregistrement dans LedgerJournalTrans Type d’événement explicit | |||
| Paiement comptabilisé | Le Payment Journal est comptabilisé dans le grand livre, ce qui règle la facture et solde le compte fournisseur. Le processus financier est alors terminé. | ||
| Pourquoi c’est important Dernière activité du délai moyen entre la facture et le paiement. Confirme que les écritures comptables liées à la diminution de la trésorerie sont finalisées. Où les obtenir LedgerJournalTrans est comptabilisé. VendTrans est mis à jour pour indiquer le règlement. L’événement réel correspond à la comptabilisation du journal. Collecte Enregistré lorsque la transaction X est exécutée Type d’événement explicit | |||
| Paiement généré | Le système génère le fichier de paiement (EFT, ISO20022) ou imprime les chèques. Le statut du paiement sur la ligne du journal passe à Sent ou Generated. | ||
| Pourquoi c’est important Alimente le KPI Approved-to-Executed Lag Time. Confirme que l’instruction de paiement a été générée. Où les obtenir LedgerJournalTrans.PaymentStatus passe à Sent/Recieved. Souvent déduit des mises à jour de la ligne. Collecte Comparer le champ PaymentStatus avant et après Type d’événement inferred | |||
| Blocage du paiement appliqué | Une retenue est appliquée à la transaction fournisseur, ce qui l’empêche d’être sélectionnée dans une proposition de paiement. Cette mesure est souvent prise manuellement en cas de litige. | ||
| Pourquoi c’est important Alimente l’analyse Payment Block and Friction Analysis. Révèle les interventions manuelles qui retardent les sorties de trésorerie. Où les obtenir L’indicateur VendTrans.Approved est défini sur No ou certains champs de statut OnHold sont renseignés. Le suivi des mises à jour de VendTrans est nécessaire. Collecte Comparer le champ de statut avant et après Type d’événement inferred | |||
| Échec du rapprochement de la facture | Le processus de rapprochement détecte un écart entre la facture et la PO ou le reçu, concernant le prix ou la quantité. Cela interrompt souvent le processus jusqu’à la résolution de l’écart. | ||
| Pourquoi c’est important Identifie les points de friction précis du processus de rapprochement. Alimente le Dashboard PO Match and Discrepancy Trends. Où les obtenir VendInvoiceInfoTable.MatchStatus passe à Failed ou Discrepancy. Également visible dans les écarts de rapprochement de VendInvoiceInfoLine. Collecte Comparer le champ MatchStatus avant et après Type d’événement inferred | |||
| Facture mise à jour | Enregistre les modifications apportées à l’en-tête ou aux lignes de la facture avant sa comptabilisation. Des mises à jour fréquentes peuvent indiquer des problèmes d’extraction des données ou des corrections manuelles nécessaires lors de la validation. | ||
| Pourquoi c’est important Une fréquence élevée de mises à jour suggère des boucles de reprise ou une qualité insuffisante des données sources, par exemple en raison d’erreurs d’OCR. Ces informations alimentent le Rework and Data Accuracy Monitor. Où les obtenir Journal de base de données (SysDatabaseLog) sur VendInvoiceInfoTable s’il est activé, ou déduction à partir des modifications de ModifiedDateTime si la fréquence d’interrogation est élevée. Collecte Comparer ModifiedDateTime lors des extractions successives Type d’événement inferred | |||
| Facture soumise pour approbation | La facture en attente est soumise au moteur de flux de travail pour examen. Cette étape marque le passage de la saisie et du rapprochement des données à la phase d’autorisation. | ||
| Pourquoi c’est important Marque le début du délai du cycle d’approbation. Essentiel pour analyser l’efficacité des hiérarchies internes. Où les obtenir WorkflowTrackingStatusTable.CreatedDateTime lorsque ContextTableId est égal à l’identifiant de VendInvoiceInfoTable et que Status est égal à Submitted. Collecte Enregistré lors de l’initiation de l’instance du flux de travail Type d’événement explicit | |||
| Journal des paiements approuvé | Le flux de travail du journal des paiements est approuvé, ce qui autorise la génération des paiements. Il s’agit de la dernière vérification avant la préparation des fonds à transférer. | ||
| Pourquoi c’est important Distingue la préparation administrative des paiements du goulot d’étranglement lié à l’autorisation. Où les obtenir WorkflowTrackingStatusTable associé à l’identifiant de LedgerJournalTable (en-tête). Status est égal à Completed. Collecte Enregistré lorsque l’instance du flux de travail se termine Type d’événement explicit | |||
Guides d’extraction
Étapes
Accéder à l’espace de travail Data Management : Connectez-vous à votre environnement Microsoft Dynamics 365 Finance. Accédez à Workspaces et sélectionnez Data Management. Il s’agit du centre de configuration des projets d’exportation de données.
Créer un projet d’exportation : Cliquez sur la vignette Export pour créer un nouveau projet de données. Donnez-lui un nom explicite, par exemple, ProcessMining_AP_Export. Dans le champ Target data format, sélectionnez le format de destination, par exemple Azure SQL DB pour BYOD ou CSV pour un export basé sur des fichiers.
Ajouter les entités de données : Ajoutez une par une les entités de données standard suivantes au projet : VendorInvoiceHeaderEntity (factures en attente), VendorInvoiceLineEntity (lignes de facture), VendorInvoiceJournalHeaderEntity (factures comptabilisées), VendorPaymentJournalLineEntity (paiements) et WorkflowHistoryEntity (journaux d’approbation). Si WorkflowHistoryEntity n’est pas disponible par défaut, vous devrez peut-être activer une entité personnalisée ou une entité système spécifique proposée pour l’exportation.
Configurer les filtres des entités : Pour chaque entité, cliquez sur l’icône Filter. Appliquez des filtres pour limiter les données à la CompanyInfo pertinente (DataAreaId) et définissez une période sur les champs CreatedDateTime ou InvoiceDate afin d’extraire uniquement les données correspondant à la période d’analyse souhaitée, par exemple les 12 derniers mois.
Configurer un export récurrent : Pour maintenir l’Event Log à jour, créez une tâche de données récurrente. Définissez la fréquence, par exemple quotidienne ou horaire, et activez Incremental push lorsque cette option est disponible. La charge du système est ainsi réduite, car seules les lignes modifiées sont exportées.
Exécuter l’export initial : Lancez manuellement le projet pour la première fois en cliquant sur Export now. Consultez le récapitulatif de l’exécution pour vérifier que toutes les lignes ont été exportées sans erreur.
Transformer les données : Une fois les données exportées vers votre destination, Azure SQL ou des fichiers, utilisez le script SQL fourni dans la section Query pour joindre ces tables. Cette logique de transformation convertit les enregistrements issus de différentes entités en un Event Log unique et chronologique.
Mettre en correspondance les Attributs : Vérifiez que le jeu de données obtenu associe InvoiceNumber à Case ID, EventTime à Timestamp et Activity à Activity Name, conformément aux exigences de l’outil de Process Mining.
Valider et importer : Exécutez les contrôles de validation ci-dessous pour confirmer l’exactitude des données. Après vérification, exportez le résultat final au format CSV ou Parquet, puis importez-le dans ProcessMind.
Configuration
- Sélection des entités : utilisez VendorInvoiceHeaderEntity et VendorInvoiceLineEntity pour les étapes du processus avant la comptabilisation. Utilisez VendorInvoiceJournalHeaderEntity pour le document légal comptabilisé. Utilisez VendorPaymentJournalLineEntity pour suivre les paiements.
- Importation incrémentielle : activez ce paramètre dans le projet de gestion des données afin d’exporter uniquement les enregistrements nouveaux ou modifiés après le chargement complet initial. Ce paramètre est essentiel aux performances.
- Plages de dates : filtrez avec InvoiceDate >= [Date de début]. Évitez les exportations sans limite, qui peuvent expirer.
- Filtre société : D365 est un système multi-entités. Filtrez toujours par DataAreaId afin d’éviter de mélanger les données de différentes entités juridiques, sauf si une analyse intersociétés est prévue.
- Historique du flux de travail : les entités standard de l’historique du flux de travail peuvent être volumineuses. Veillez à n’exporter que l’historique associé aux types VendInvoice afin de conserver un volume gérable.
a Exemple de requête sql
/*
SQL Transformation Script for D365 Finance AP Process
Assumes data is loaded into Staging tables in a SQL environment (BYOD/Data Lake)
*/
SELECT
I.InvoiceNumber AS [InvoiceNumber],
'Invoice Created' AS [Activity],
I.CreatedDateTime AS [EventTime],
I.DataAreaId AS [CompanyCode],
I.InvoiceAccount AS [VendorAccount],
I.InvoiceAmount AS [InvoiceAmount],
I.CurrencyCode AS [Currency],
'D365 FO' AS [SourceSystem],
GETDATE() AS [LastDataUpdate]
FROM Staging_VendorInvoiceHeaderEntity I
UNION ALL
/* Capture updates to invoice headers */
SELECT
I.InvoiceNumber,
'Invoice Updated',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.ModifiedDateTime > I.CreatedDateTime
UNION ALL
/* Invoice Matching Activities */
SELECT
I.InvoiceNumber,
'Invoice Matched to PO',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Matched' -- Adjust value based on system config
UNION ALL
SELECT
I.InvoiceNumber,
'Invoice Match Failed',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceHeaderEntity I
WHERE I.MatchStatus = 'Failed'
UNION ALL
/* Workflow Activities */
SELECT
RelatedContext AS InvoiceNumber,
CASE
WHEN Status = 'Submitted' THEN 'Invoice Submitted for Approval'
WHEN Status = 'Approved' THEN 'Invoice Approved'
ELSE 'Workflow Activity'
END AS [Activity],
CreatedDateTime AS [EventTime],
DataAreaId,
NULL AS [VendorAccount],
NULL AS [InvoiceAmount],
NULL AS [Currency],
'D365 FO',
GETDATE()
FROM Staging_WorkflowHistoryEntity
WHERE ContextTableId = 12345 -- Replace with TableId for VendInvoiceInfoTable
AND Status IN ('Submitted', 'Approved')
UNION ALL
/* Invoice Posted */
SELECT
J.InvoiceNumber,
'Invoice Posted',
J.PostedDateTime,
J.DataAreaId,
J.InvoiceAccount,
J.InvoiceAmount,
J.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity J
UNION ALL
/* Payment Block */
SELECT
I.InvoiceNumber,
'Payment Block Applied',
I.ModifiedDateTime,
I.DataAreaId,
I.InvoiceAccount,
I.InvoiceAmount,
I.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorInvoiceJournalHeaderEntity I
WHERE I.OnHold = 'Yes'
UNION ALL
/* Payment Activities */
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Created' AS [Activity],
P.CreatedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue AS [VendorAccount],
P.DebitAmount AS [InvoiceAmount],
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Journal Approved' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Approved'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Generated' AS [Activity],
P.ModifiedDateTime AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.PaymentStatus = 'Sent'
UNION ALL
SELECT
J.InvoiceId AS [InvoiceNumber],
'Payment Posted' AS [Activity],
P.PostedDate AS [EventTime],
P.DataAreaId,
P.AccountDisplayValue,
P.DebitAmount,
P.CurrencyCode,
'D365 FO',
GETDATE()
FROM Staging_VendorPaymentJournalLineEntity P
JOIN Staging_VendorInvoiceJournalHeaderEntity J ON P.InvoiceId = J.InvoiceNumber AND P.DataAreaId = J.DataAreaId
WHERE P.IsPosted = 'Yes' Étapes
Vérifier la connectivité BYOD : Vérifiez que SQL Server Management Studio (SSMS), ou un outil similaire, est installé et que vous pouvez vous connecter à la base de données Azure SQL configurée comme cible Bring Your Own Database (BYOD) pour votre environnement Dynamics 365 Finance & Operations.
Confirmer l’export des entités : Accédez à l’espace de travail Data Management dans Dynamics 365. Vérifiez que les entités suivantes, ou leurs tables sous-jacentes, sont configurées pour être exportées vers la base BYOD :
VendInvoiceInfoTable(factures en attente),VendInvoiceInfoLine(lignes en attente),VendInvoiceJour(factures comptabilisées),VendTrans(transactions fournisseurs),LedgerJournalTrans(lignes de journal),LedgerJournalTable(en-têtes de journal) etWorkflowTrackingStatusTable(historique des Workflows).Configurer la tâche d’exportation : Si ces tables ne sont pas actuellement exportées, créez une nouvelle tâche d’exportation. Définissez Target Data Format sur votre base de données SQL BYOD. Choisissez Incremental Push pour maintenir les données synchronisées sans effectuer de nouveaux exports complets. Exécutez la tâche pour alimenter les tables.
Préparer l’environnement SQL : Ouvrez SSMS et connectez-vous à la base Azure SQL BYOD. Ouvrez une nouvelle fenêtre de requête.
Définir les paramètres : Dans le script fourni ci-dessous, repérez la section de déclaration des variables en haut du fichier. Mettez à jour les variables
@StartDateet@EndDatepour les faire correspondre à la période à analyser. Pour filtrer une entité juridique précise, mettez à jour les conditions de filtrageDATAAREAID.Exécuter le script : Exécutez l’intégralité du script T-SQL. Celui-ci utilise
UNION ALLpour combiner les données de plusieurs tables dans un format d’Event Log standardisé.Valider les données : Vérifiez l’absence de valeurs nulles dans les colonnes
InvoiceNumberouEventTime. Assurez-vous que les factures comptabilisées, issues deVendInvoiceJour, et les factures en attente, issues deVendInvoiceInfoTable, apparaissent bien.Exporter le résultat : Cliquez avec le bouton droit sur la grille de résultats dans SSMS et sélectionnez Save Results As.... Enregistrez le fichier au format CSV (délimité par des virgules).
Préparer l’importation : Ouvrez le CSV dans Excel ou un éditeur de texte pour vérifier que les dates respectent le format ISO 8601 (YYYY-MM-DD HH:MM:SS), si ProcessMind l’exige. Aucune transformation supplémentaire ne devrait être nécessaire si le script s’est exécuté correctement.
Importer dans ProcessMind : Importez le fichier CSV dans ProcessMind en associant les colonnes
InvoiceNumberà Case ID,Activityà Activity Name etEventTimeà Timestamp.
Configuration
- Stratégie d’exportation : utilisez Push incrémentiel pour les tables volumineuses comme
LedgerJournalTransetVendTrans, afin de réduire la charge sur BYOD. Utilisez Push complet uniquement si vous suspectez des incohérences dans les données. - Gestion des fuseaux horaires : Dynamics 365 stocke les données en UTC. Le script part du principe que les données sont en UTC. Si votre analyse nécessite l’heure locale, appliquez un ajustement
DATEADDdans le script ou lors de l’importation dans ProcessMind. - Filtrage par société : la colonne
DataAreaIdreprésente l’entité juridique. Par défaut, le script extrait les données de toutes les entités. AjoutezWHERE DataAreaId = 'usmf'(exemple) pour filtrer une filiale précise. - Historique du flux de travail : la table
WorkflowTrackingStatusTableest essentielle pour les horodatages d’approbation. Vérifiez qu’elle est incluse dans votre configuration d’exportation BYOD, car elle est souvent omise par défaut. - Conservation des données : tenez compte des routines de nettoyage de D365 susceptibles de supprimer l’historique des flux de travail terminés ou les lignes de journal comptabilisées, ce qui limitera la profondeur historique de votre analyse de Process Mining.
a Exemple de requête sql
/* T-SQL Extraction Script for D365 AP Payment Processing */
/* Tables required: VendInvoiceInfoTable, VendInvoiceInfoLine, VendInvoiceJour, VendTrans, LedgerJournalTrans, LedgerJournalTable, WorkflowTrackingStatusTable */
DECLARE @StartDate DATETIME = '2023-01-01 00:00:00';
DECLARE @EndDate DATETIME = GETDATE();
WITH RawData AS (
/* 1. Invoice Created: Pending Invoice Header Creation */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Created' AS Activity,
T1.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.CreatedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 2. Invoice Updated: Modifications to Pending Invoice */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Updated' AS Activity,
T1.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
T1.ModifiedBy AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoTable T1
WHERE T1.ModifiedDateTime BETWEEN @StartDate AND @EndDate
AND T1.ModifiedDateTime > T1.CreatedDateTime
UNION ALL
/* 3. Invoice Matched to PO: Line Matching Success */
SELECT
H.Num AS InvoiceNumber,
'Invoice Matched to PO' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 1 /* 1 usually denotes Matched/Passed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 4. Invoice Match Failed: Line Matching Discrepancy */
SELECT
H.Num AS InvoiceNumber,
'Invoice Match Failed' AS Activity,
L.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
H.InvoiceAccount AS VendorAccount,
H.DataAreaId AS CompanyCode,
CAST(H.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
H.DueDate AS DueDate,
H.PurchId AS PurchaseOrderNumber,
L.ModifiedBy AS UserId,
H.VendorName AS VendorName,
H.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceInfoLine L
JOIN dbo.VendInvoiceInfoTable H ON L.TableRefId = H.TableRefId AND L.DataAreaId = H.DataAreaId
WHERE L.MatchStatus = 2 /* 2 usually denotes Failed in enum */
AND L.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 5. Invoice Submitted for Approval: Workflow Submission */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Submitted for Approval' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 1 /* Submitted */
AND W.ContextTableId = 1425 /* TableId for VendInvoiceInfoTable, adjust if different in version */
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 6. Invoice Approved: Workflow Completion */
SELECT
T1.Num AS InvoiceNumber,
'Invoice Approved' AS Activity,
W.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
T1.InvoiceAccount AS VendorAccount,
T1.DataAreaId AS CompanyCode,
CAST(T1.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
T1.DueDate AS DueDate,
T1.PurchId AS PurchaseOrderNumber,
W.User AS UserId,
T1.VendorName AS VendorName,
T1.DocumentDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.WorkflowTrackingStatusTable W
JOIN dbo.VendInvoiceInfoTable T1 ON W.ContextRecId = T1.RecId
WHERE W.TrackingStatus = 2 /* Completed/Approved */
AND W.ContextTableId = 1425
AND W.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 7. Invoice Posted: Creation of VendInvoiceJour */
SELECT
J.InvoiceId AS InvoiceNumber,
'Invoice Posted' AS Activity,
J.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
J.CreatedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendInvoiceJour J
WHERE J.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 8. Payment Block Applied: Updated on VendTrans */
SELECT
J.InvoiceId AS InvoiceNumber,
'Payment Block Applied' AS Activity,
VT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
J.InvoiceAccount AS VendorAccount,
J.DataAreaId AS CompanyCode,
CAST(J.InvoiceAmount AS DECIMAL(18,2)) AS InvoiceAmount,
J.DueDate AS DueDate,
J.PurchId AS PurchaseOrderNumber,
VT.ModifiedBy AS UserId,
J.InvoicingName AS VendorName,
J.InvoiceDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.VendTrans VT
JOIN dbo.VendInvoiceJour J ON VT.Invoice = J.InvoiceId AND VT.AccountNum = J.InvoiceAccount AND VT.DataAreaId = J.DataAreaId
WHERE VT.Approved = 0 /* 0 indicates Not Approved/Blocked */
AND VT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 9. Payment Journal Created: Line added to Journal */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Created' AS Activity,
LJT.CreatedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.CreatedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.AccountType = 2 /* Vendor */
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.CreatedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 10. Payment Journal Approved: Workflow on Journal Header */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Journal Approved' AS Activity,
LJH.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJH.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTable LJH
JOIN dbo.LedgerJournalTrans LJT ON LJH.JournalNum = LJT.JournalNum AND LJH.DataAreaId = LJT.DataAreaId
WHERE LJH.WorkflowApprovalStatus = 2 /* Approved */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJH.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 11. Payment Generated: Payment Status Changed to Sent */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Generated' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.PaymentStatus = 2 /* Sent/Generated */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
UNION ALL
/* 12. Payment Posted: Journal Line Posted */
SELECT
LJT.Invoice AS InvoiceNumber,
'Payment Posted' AS Activity,
LJT.ModifiedDateTime AS EventTime,
'D365 FO' AS SourceSystem,
GETDATE() AS LastDataUpdate,
LJT.AccountNum AS VendorAccount,
LJT.DataAreaId AS CompanyCode,
CAST(LJT.AmountCurCredit AS DECIMAL(18,2)) AS InvoiceAmount,
NULL AS DueDate,
NULL AS PurchaseOrderNumber,
LJT.ModifiedBy AS UserId,
NULL AS VendorName,
LJT.TransDate AS InvoiceDate,
'Unknown' AS Department
FROM dbo.LedgerJournalTrans LJT
WHERE LJT.Posted = 1 /* Posted */
AND LJT.AccountType = 2
AND LJT.Invoice IS NOT NULL AND LJT.Invoice <> ''
AND LJT.ModifiedDateTime BETWEEN @StartDate AND @EndDate
)
SELECT *
FROM RawData
WHERE InvoiceNumber IS NOT NULL AND InvoiceNumber <> ''
ORDER BY InvoiceNumber, EventTime; Prêt à commencer ?
Utilisez ce modèle pour établir une base de données fiable et commencer dès aujourd’hui à optimiser vos flux de travail de paiement. Notre équipe est à votre disposition si vous avez besoin d’aide pour associer vos tables Dynamics 365.
Optimisez dès maintenant le traitement des paiements fournisseurs
Réduisez les délais de cycle de 30 % et éliminez les retards liés à D365.
Aucune carte bancaire requise. Configuration en cinq minutes.