Il Suo template dei dati per l’elaborazione dei pagamenti ai fornitori
Il Suo template dei dati per l’elaborazione dei pagamenti ai fornitori
- Attributi specifici del processo per l’analisi finanziaria
- Attività fondamentali per monitorare i pagamenti
- Istruzioni dettagliate per l’estrazione da Dynamics 365
Attributi del processo di elaborazione dei pagamenti ai fornitori
| Nome | Descrizione | ||
|---|---|---|---|
| Attività Activity | L’attività specifica o la modifica di stato che si è verificata. | ||
| Descrizione Questo attributo descrive l’evento o il passaggio eseguito nel processo, ad esempio 'Fattura creata', 'Fattura approvata' o 'Pagamento registrato'. Converte i tipi di transazione tecnici e le modifiche di stato del flusso di lavoro in eventi aziendali comprensibili. In Dynamics 365, queste attività derivano spesso dalla combinazione di inserimenti nelle tabelle, ad esempio un nuovo record in Perché è importante Definisce il flusso del processo e la sequenza degli eventi nella mappa di processo. Dove reperirli Ricavato da diverse tabelle delle transazioni e dai log della cronologia del flusso di lavoro Esempi Fattura creataFattura approvataPagamento generato | |||
| Numero di fattura InvoiceNumber | Identificativo univoco assegnato alla fattura del fornitore. | ||
| Descrizione Il numero di fattura è l’identificativo univoco del caso per questa vista del processo. Raggruppa tutti gli eventi relativi a una singola fattura del fornitore, consentendo di analizzarne l’intero percorso, dalla ricezione alla liquidazione. In Microsoft Dynamics 365 corrisponde in genere al campo Perché è importante È la chiave fondamentale per collegare le diverse attività di gestione dei debiti verso fornitori in un’unica istanza di processo. Dove reperirli Tabella: VendInvoiceJour, campo: InvoiceId Esempi INV-2023-00198223344ACME-OCT-22 | |||
| Ora dell’evento EventTime | Data e ora in cui si è verificata l’attività. | ||
| Descrizione Questo attributo registra la data e l’ora esatte in cui si è verificata una specifica attività. Serve a ordinare cronologicamente gli eventi e a calcolare la durata tra un passaggio e l’altro. In Dynamics 365, il dato proviene in genere da Perché è importante È essenziale per calcolare i tempi di ciclo e di attraversamento e individuare i colli di bottiglia. Dove reperirli Campi di sistema CreatedDateTime o ModifiedDateTime nelle tabelle delle transazioni Esempi 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Sistema di origine SourceSystem | Nome del sistema da cui provengono i dati. | ||
| Descrizione Identifica il software o l’ambiente di origine da cui sono stati estratti i dati del processo. In questo caso, indica sempre l’istanza di Microsoft Dynamics 365. È particolarmente utile nelle architetture con più sistemi, in cui i dati possono provenire da sistemi ERP e soluzioni esterne di scansione. Perché è importante Garantisce la tracciabilità e la provenienza dei dati nelle analisi che coinvolgono più sistemi. Dove reperirli Impostato in modo fisso o configurato durante l’estrazione Esempi Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Ultimo aggiornamento dei dati LastDataUpdate | Data e ora in cui i dati sono stati estratti o aggiornati. | ||
| Descrizione Indica quanto sono aggiornati i dati utilizzati nell’analisi. Aiuta a capire se si stanno consultando dati in tempo reale o un’istantanea relativa a un periodo precedente. In genere, questo dato viene generato dal processo ETL (Extract, Transform, Load) e non è un campo di Dynamics 365. Perché è importante È fondamentale per garantire l’affidabilità delle Dashboard e dei KPI. Dove reperirli Generato dallo script di estrazione Esempi 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Codice azienda CompanyCode | Identificativo dell’entità giuridica o della società controllata. | ||
| Descrizione Indica l’entità giuridica dell’organizzazione in cui viene elaborata la fattura. In Microsoft Dynamics 365, è gestita tramite il campo di sistema Questo attributo è essenziale per l’analisi del tempo di attraversamento complessivo, che consente di confrontare diverse società controllate o unità geografiche. Perché è importante Consente di confrontare diverse unità aziendali o paesi. Dove reperirli Tabella: VendInvoiceJour, campo: DataAreaId Esempi USMFDEMFGBSI | |||
| Conto del fornitore VendorAccount | Numero di conto univoco del fornitore. | ||
| Descrizione Identificativo univoco del fornitore coinvolto nella transazione. In Dynamics 365 corrisponde al campo Questo attributo è centrale nella vista della complessità dei rapporti con i fornitori e consente di analizzare le prestazioni e i punti critici di ogni rapporto. Perché è importante Consente di segmentare le prestazioni del processo in base al fornitore. Dove reperirli Tabella: VendInvoiceJour, campo: InvoiceAccount o OrderAccount Esempi US-101V000452001 | |||
| Data della fattura InvoiceDate | La data del documento indicata sulla fattura. | ||
| Descrizione La data riportata sulla fattura del fornitore. In Dynamics 365 corrisponde al campo Viene utilizzata nell’analisi «Tempi di attraversamento end-to-end» per misurare l’intero ciclo dal punto di vista del fornitore. Perché è importante Definisce l’inizio del periodo di anzianità della fattura. Dove reperirli Tabella: VendInvoiceJour, campo: InvoiceDate Esempi 2023-10-012023-10-15 | |||
| Data di scadenza DueDate | Data entro cui la fattura dovrebbe essere pagata. | ||
| Descrizione La data contrattuale entro cui il pagamento deve essere effettuato per evitare penali. In Dynamics 365 è memorizzata nel campo È il principale valore di riferimento per il KPI «Percentuale di pagamenti puntuali» e aiuta a stabilire le priorità nella vista «Volume e produttività del processo AP». Perché è importante Il valore di riferimento per misurare la puntualità dei pagamenti. Dove reperirli Tabella: VendInvoiceJour o VendTrans, campo: DueDate Esempi 2023-11-302023-12-15 | |||
| ID utente UserId | L’identificativo dell’utente che ha eseguito l’attività. | ||
| Descrizione Identifica l’utente di sistema responsabile di una specifica attività, ad esempio l’approvazione di una fattura o la registrazione di un pagamento. Il dato proviene dai campi Nell’analisi «Blocchi dei pagamenti e ostacoli» consente di verificare se alcuni addetti causano più blocchi di altri. Perché è importante Consente di analizzare il comportamento delle risorse e la separazione dei compiti. Dove reperirli Campi di sistema CreatedBy/ModifiedBy nelle tabelle delle transazioni e della cronologia Esempi jdoeamministratoreworkflow_sys | |||
| Importo della fattura InvoiceAmount | Valore monetario totale della fattura. | ||
| Descrizione Valore totale della fattura nella valuta della transazione. In Dynamics 365 si trova in campi come Viene utilizzato nella Dashboard di rilevamento del rischio di pagamenti duplicati per correlare gli importi ai dati dei fornitori. Perché è importante È fondamentale per analizzare il volume delle spese e il rischio finanziario. Dove reperirli Tabella: VendInvoiceJour, campo: InvoiceAmount Esempi 1500.00245.5010000.00 | |||
| Nome del fornitore VendorName | Il nome dell’organizzazione fornitrice. | ||
| Descrizione Il nome descrittivo del fornitore. In D365, il conto fornitore funge da chiave esterna per la rubrica globale ( L’uso di nomi facilmente riconoscibili facilita la consultazione della vista «Complessità delle relazioni con i fornitori» e rende le Dashboard accessibili agli utenti aziendali. Perché è importante Fornisce il contesto necessario per interpretare il numero del conto fornitore. Dove reperirli Tabella: DirPartyTable (tramite VendTable), campo: Nome Esempi Contoso forniture per ufficioFabrikam ElectronicsLitware Inc. | |||
| Numero dell’ordine di acquisto PurchaseOrderNumber | Il numero di riferimento dell’ordine di acquisto associato. | ||
| Descrizione Collega la fattura al documento di acquisto originale. In Dynamics 365 corrisponde al campo Questo attributo alimenta la Dashboard «Tendenze di corrispondenza e discrepanze degli ordini di acquisto», distinguendo le fatture associate a un ordine di acquisto da quelle che ne sono prive. Perché è importante È essenziale per analizzare il tasso di corrispondenza del processo procure-to-pay. Dove reperirli Tabella: VendInvoiceJour, campo: PurchId Esempi PO-000455000342PO-22-998 | |||
| Reparto Department | Il reparto responsabile del costo. | ||
| Descrizione La dimensione finanziaria che identifica il reparto interno. In Dynamics 365 le dimensioni sono memorizzate dinamicamente, spesso in Questo attributo viene utilizzato nella vista «Complessità delle relazioni con i fornitori» per individuare i reparti interni che generano il maggior volume di attività AP. Perché è importante Consente di approfondire i dati per struttura organizzativa e di analizzare le responsabilità. Dove reperirli Tabella: VendInvoiceJour, campo: DefaultDimension (richiede la vista DimensionAttributeLevelValue) Esempi ITFinanzaOperazioni | |||
| Data per lo sconto cassa CashDiscountDate | La data entro cui effettuare il pagamento per ottenere uno sconto. | ||
| Descrizione La scadenza per usufruire degli incentivi legati al pagamento anticipato. In Dynamics 365 corrisponde al campo Questo attributo alimenta la Dashboard «Risultati nell’ottenimento degli sconti cassa» e consente all’organizzazione di quantificare le opportunità di risparmio perse. Perché è importante Incide direttamente sul KPI di efficienza finanziaria del processo. Dove reperirli Tabella: VendInvoiceJour o VendTrans, campo: CashDiscDate Esempi 2023-10-102023-10-20 | |||
| Metodo di pagamento PaymentMethod | Il metodo utilizzato per pagare la fattura, ad esempio assegno, bonifico o EFT. | ||
| Descrizione Indica come vengono trasferiti i fondi al fornitore. In Dynamics 365 corrisponde al campo Questo attributo viene utilizzato nella Dashboard «Tempi di esecuzione dei pagamenti» per valutare l’efficienza dei diversi tipi di lotti di pagamento. Perché è importante Aiuta a spiegare le differenze nella fase di esecuzione dei pagamenti. Dove reperirli Tabella: VendInvoiceJour (collegata alle informazioni PaymMode) o VendTrans Esempi ASSEGNOACHBONIFICO | |||
| Numero del giustificativo VoucherNumber | Il numero del giustificativo contabile associato alla transazione. | ||
| Descrizione L’identificativo interno della registrazione contabile nel libro mastro generale. In Dynamics 365, il campo Pur essendo un dato tecnico, è utile per la «Verifica del percorso del processo e della conformità», perché consente di risalire alle registrazioni nel libro mastro generale ai fini della riconciliazione. Perché è importante È un riferimento essenziale per le verifiche contabili e la riconciliazione. Dove reperirli Tabella: VendInvoiceJour, campo: LedgerVoucher Esempi VOU-10023INV-ACC-992 | |||
| Pagamento bloccato IsPaymentBlocked | Indicatore che segnala se il pagamento della fattura è attualmente bloccato. | ||
| Descrizione Indicatore booleano che segnala se la fattura è sospesa. In Dynamics 365 si ricava spesso dallo stato È il fattore principale dell’analisi «Blocchi dei pagamenti e ostacoli» e mette in evidenza le interruzioni del processo. Perché è importante Individua gli ostacoli immediati e gli interventi manuali. Dove reperirli Tabella: VendTrans, campo: Approved (invertito) o campi specifici relativi alla sospensione Esempi truefalse | |||
| Termini di pagamento PaymentTerms | Il codice che rappresenta i termini di pagamento concordati. | ||
| Descrizione Il codice di configurazione che determina le scadenze e gli sconti, ad esempio Net30. In Dynamics 365 corrisponde al campo Viene analizzato insieme al «Tempo di ciclo» per verificare se i ritardi del processo comportano il mancato rispetto dei termini concordati. Perché è importante Fornisce il contesto per il calcolo della data di scadenza. Dove reperirli Tabella: VendInvoiceJour, campo: PaymTermId Esempi Net302%10Net30COD | |||
| Valuta Currency | Il codice della valuta della fattura. | ||
| Descrizione Il codice ISO della valuta in cui è stata emessa la fattura. In Dynamics 365 corrisponde al campo È importante per uniformare gli importi nella mappatura «Importo attività», quando è necessario normalizzare i dati relativi a più valute. Perché è importante Fornisce il contesto necessario per interpretare i valori finanziari. Dove reperirli Tabella: VendInvoiceJour, campo: CurrencyCode Esempi USDEURGBP | |||
Attività del processo di elaborazione dei pagamenti ai fornitori
| Attività | Descrizione | ||
|---|---|---|---|
| Fattura approvata | L’istanza del flusso di lavoro relativa alla fattura in attesa raggiunge lo stato completato o approvato. La fattura è pronta per essere registrata nel libro mastro. | ||
| Perché è importante Consente di calcolare il tempo medio di approvazione. I ritardi in questa fase incidono direttamente sulla possibilità di ottenere sconti sui pagamenti anticipati. Dove reperirli WorkflowTrackingStatusTable.CreatedDateTime, dove TrackingStatus è Completed. In alternativa, VendInvoiceInfoTable.RequestStatus corrisponde ad Approved. Acquisizione Registrato al completamento dell’istanza del flusso di lavoro Tipo di evento explicit | |||
| Fattura creata | Creazione iniziale nel sistema di un record di fattura del fornitore in attesa. Segna l’ingresso della fattura nel flusso di lavoro di Dynamics 365, tramite inserimento manuale o importazione di un’entità dati. | ||
| Perché è importante Definisce l’ora di inizio per il calcolo del tempo di attraversamento del processo. Consente alle organizzazioni di misurare per quanto tempo le fatture restano nel sistema prima di essere elaborate o registrate. Dove reperirli Timestamp di creazione di VendInvoiceInfoTable.CreatedDateTime o di VendInvoiceInfoTable.RecId. Rappresenta l’intestazione della fattura del fornitore in attesa. Acquisizione Registrato al momento della creazione del record in VendInvoiceInfoTable Tipo di evento explicit | |||
| Fattura registrata | La fattura viene registrata nel libro mastro generale, creando una passività nel sistema. Il record passa dalle tabelle delle fatture in attesa a quelle delle transazioni registrate. | ||
| Perché è importante Una tappa fondamentale che segna la rilevazione contabile del debito. Questa attività consente di selezionare la fattura per il pagamento. Dove reperirli Creazione del record in VendInvoiceJour e VendTrans. TransDate indica la data di registrazione. Acquisizione Registrato all’esecuzione della transazione X Tipo di evento explicit | |||
| Fattura riconciliata con l’ordine di acquisto | Il sistema collega correttamente la riga della fattura a un ordine di acquisto o a una ricevuta di prodotto. Questa attività indica che la fattura è stata convalidata rispetto all’ordine di approvvigionamento. | ||
| Perché è importante È un dato fondamentale per il KPI della percentuale di riconciliazioni degli ordini di acquisto corrette al primo tentativo. Permette di distinguere l’elaborazione senza interventi manuali dalle fatture che richiedono un intervento manuale. Dove reperirli VendInvoiceInfoLine.PurchId e VendInvoiceInfoTable.MatchStatus. Dedotto quando MatchStatus passa a Passed. Acquisizione Confrontare il campo MatchStatus prima e dopo Tipo di evento inferred | |||
| Giornale pagamenti creato | La fattura viene selezionata e aggiunta a una riga del giornale pagamenti. Questo indica l’intenzione di pagare e di solito avvia il flusso di lavoro di revisione del pagamento. | ||
| Perché è importante Segna il passaggio dalla registrazione della passività all’elaborazione dell’esborso. Viene utilizzato per misurare i tempi di esecuzione dei pagamenti. Dove reperirli LedgerJournalTrans.CreatedDateTime. La fattura è collegata tramite il campo MarkedInvoice o le tabelle di liquidazione. Acquisizione Registrato al momento della creazione del record in LedgerJournalTrans Tipo di evento explicit | |||
| Pagamento generato | Il sistema genera il file di pagamento (EFT, ISO20022) o stampa gli assegni. Lo stato del pagamento sulla riga del giornale viene aggiornato a Sent o Generated. | ||
| Perché è importante Alimenta il KPI del tempo tra approvazione ed esecuzione. Conferma che è stata generata l’istruzione di pagamento. Dove reperirli LedgerJournalTrans.PaymentStatus passa a Sent/Recieved. Spesso è dedotto dagli aggiornamenti della riga. Acquisizione Confrontare il campo PaymentStatus prima e dopo Tipo di evento inferred | |||
| Pagamento registrato | Il giornale pagamenti viene registrato nel libro mastro generale, liquidando la fattura e azzerando il saldo del fornitore. In questo modo si conclude il processo finanziario. | ||
| Perché è importante È l’attività finale per il tempo medio di ciclo dalla fattura al pagamento. Conferma che le registrazioni contabili relative alla riduzione della liquidità sono state completate. Dove reperirli LedgerJournalTrans viene registrata. VendTrans viene aggiornata per indicare la liquidazione. L’evento effettivo è la registrazione del giornale. Acquisizione Registrato all’esecuzione della transazione X Tipo di evento explicit | |||
| Blocco del pagamento applicato | La transazione del fornitore viene sospesa e non può essere selezionata in una proposta di pagamento. Spesso il blocco viene applicato manualmente in caso di controversie. | ||
| Perché è importante Alimenta l’analisi dei blocchi di pagamento e dei punti critici. Evidenzia gli interventi manuali che ritardano le uscite di cassa. Dove reperirli Il flag VendTrans.Approved è impostato su No oppure vengono compilati specifici campi di stato OnHold. È necessario monitorare gli aggiornamenti di VendTrans. Acquisizione Confrontare il campo di stato prima e dopo Tipo di evento inferred | |||
| Fattura aggiornata | Registra le modifiche apportate all’intestazione o alle righe della fattura prima della registrazione contabile. Aggiornamenti frequenti possono indicare problemi nell’estrazione dei dati o correzioni manuali necessarie durante la convalida. | ||
| Perché è importante Un’elevata frequenza di aggiornamenti può indicare cicli di rilavorazione o una scarsa qualità dei dati di origine, ad esempio a causa di errori OCR. Questo dato alimenta il monitoraggio delle rilavorazioni e dell’accuratezza dei dati. Dove reperirli Log del database (SysDatabaseLog) su VendInvoiceInfoTable, se abilitato, oppure deduzione dalle modifiche a ModifiedDateTime se la frequenza di rilevamento è elevata. Acquisizione Confrontare ModifiedDateTime tra estrazioni successive Tipo di evento inferred | |||
| Fattura inviata per l’approvazione | La fattura in attesa viene inviata al motore del flusso di lavoro per la revisione. Segna il passaggio dall’inserimento e dalla riconciliazione dei dati alla fase di autorizzazione. | ||
| Perché è importante Segna l’inizio del tempo di ciclo dell’approvazione. È essenziale per analizzare l’efficienza delle gerarchie interne. Dove reperirli WorkflowTrackingStatusTable.CreatedDateTime, dove ContextTableId corrisponde all’ID di VendInvoiceInfoTable e Status è Submitted. Acquisizione Registrato all’avvio dell’istanza del flusso di lavoro Tipo di evento explicit | |||
| Giornale pagamenti approvato | Il flusso di lavoro del giornale pagamenti viene approvato, autorizzando la generazione dei pagamenti. È l’ultimo controllo prima di predisporre il trasferimento dei fondi. | ||
| Perché è importante Distingue la preparazione amministrativa dei pagamenti dal collo di bottiglia dell’autorizzazione. Dove reperirli WorkflowTrackingStatusTable collegata all’ID della LedgerJournalTable (intestazione). Lo stato è Completed. Acquisizione Registrato al completamento dell’istanza del flusso di lavoro Tipo di evento explicit | |||
| Riconciliazione della fattura non riuscita | La riconciliazione rileva una discrepanza tra la fattura e l’ordine di acquisto o la ricevuta, ad esempio una differenza di prezzo o quantità. Spesso il processo si interrompe finché il problema non viene risolto. | ||
| Perché è importante Individua i punti critici specifici nella riconciliazione. Alimenta la Dashboard relativa alla riconciliazione degli ordini di acquisto e all’andamento delle discrepanze. Dove reperirli VendInvoiceInfoTable.MatchStatus passa a Failed o Discrepancy. Le discrepanze sono visibili anche nei dati di riconciliazione di VendInvoiceInfoLine. Acquisizione Confrontare il campo MatchStatus prima e dopo Tipo di evento inferred | |||
Guide all’estrazione
Passaggi
Acceda all’area di lavoro Data Management: acceda all’ambiente Microsoft Dynamics 365 Finance. Apra Workspaces e selezioni Data Management. Questa è l’area centrale per configurare i progetti di esportazione dei dati.
Crei un progetto di esportazione: selezioni il riquadro Export per creare un nuovo progetto dati. Assegni al progetto un nome descrittivo, ad esempio ProcessMining_AP_Export. Nel campo Target data format, selezioni il formato di destinazione, ad esempio Azure SQL DB per BYOD o CSV per l’esportazione su file.
Aggiunga le entità dati: aggiunga al progetto, una alla volta, le seguenti entità dati standard: VendorInvoiceHeaderEntity (fatture in sospeso), VendorInvoiceLineEntity (righe fattura), VendorInvoiceJournalHeaderEntity (fatture registrate), VendorPaymentJournalLineEntity (pagamenti) e WorkflowHistoryEntity (registri delle approvazioni). Se WorkflowHistoryEntity non è disponibile per impostazione predefinita, potrebbe essere necessario abilitare un’entità personalizzata o un’entità di sistema specifica esposta per l’esportazione.
Configuri i filtri delle entità: per ciascuna entità, selezioni l’icona Filter. Applichi filtri per limitare i dati alla CompanyInfo pertinente (DataAreaId) e imposti un intervallo di date nei campi CreatedDateTime o InvoiceDate, così da estrarre i dati solo per il periodo di analisi desiderato, ad esempio gli ultimi 12 mesi.
Imposti un’esportazione ricorrente: per mantenere aggiornato l’Event Log, crei un processo dati ricorrente. Definisca la frequenza, ad esempio giornaliera o oraria, e attivi Incremental push, se supportato. In questo modo si riduce il carico sul sistema, esportando solo i record modificati.
Esegua la prima esportazione: avvii manualmente il progetto per la prima volta selezionando Export now. Controlli il riepilogo dell’esecuzione per verificare che tutti i record siano stati esportati senza errori.
Trasformi i dati: dopo aver esportato i dati nella destinazione scelta, Azure SQL o file, utilizzi lo script SQL fornito nella sezione Query per unire queste tabelle. La logica di trasformazione converte i record delle diverse entità in un unico Event Log cronologico.
Mappi gli attributi: verifichi che il set di dati risultante associ InvoiceNumber a ID del caso, EventTime a Timestamp e Activity ad Attività, come richiesto dallo strumento di Process Mining.
Convalidi e carichi i dati: esegua i controlli di convalida riportati di seguito per verificarne l’accuratezza. Una volta verificati, esporti il risultato finale in formato CSV o Parquet e lo carichi in ProcessMind.
Configurazione
- Selezione delle entità: utilizzi VendorInvoiceHeaderEntity e VendorInvoiceLineEntity per le fasi del processo precedenti alla registrazione. Utilizzi VendorInvoiceJournalHeaderEntity per il documento ufficiale registrato e VendorPaymentJournalLineEntity per monitorare i pagamenti.
- Incremental Push: attivi questa impostazione nel progetto Data Management per esportare solo i record nuovi o modificati dopo il caricamento iniziale completo. È essenziale per le prestazioni.
- Intervalli di date: applichi il filtro InvoiceDate >= [Start Date]. Eviti esportazioni senza limiti temporali, che potrebbero andare in timeout.
- Filtro aziendale: D365 è un sistema multi-entità. Applichi sempre un filtro per DataAreaId per evitare di mescolare i dati di entità giuridiche diverse, a meno che l’analisi non debba includerle tutte.
- Cronologia del flusso di lavoro: le entità standard per la cronologia del flusso di lavoro possono generare volumi elevati. Esporti solo la cronologia relativa ai tipi VendInvoice per mantenere gestibile il volume dei dati.
a Query di esempio 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' Passaggi
Verifichi la connettività BYOD: verifichi di avere installato SQL Server Management Studio (SSMS) o uno strumento simile e di potersi connettere al database Azure SQL configurato come destinazione Bring Your Own Database (BYOD) per l’ambiente Dynamics 365 Finance & Operations.
Confermi l’esportazione delle entità: apra l’area di lavoro Data Management in Dynamics 365. Verifichi che le seguenti entità, o le tabelle sottostanti, siano configurate per l’esportazione nel database BYOD:
VendInvoiceInfoTable(fatture in sospeso),VendInvoiceInfoLine(righe in sospeso),VendInvoiceJour(fatture registrate),VendTrans(transazioni fornitori),LedgerJournalTrans(righe di giornale),LedgerJournalTable(intestazioni di giornale) eWorkflowTrackingStatusTable(cronologia del flusso di lavoro).Configuri il processo di esportazione: se queste tabelle non sono attualmente esportate, crei un nuovo processo di esportazione. Imposti Target Data Format sul database SQL BYOD e selezioni Incremental Push per mantenere i dati sincronizzati senza ripetere l’esportazione completa. Esegua il processo per popolare le tabelle.
Prepari l’ambiente SQL: apra SSMS e si connetta al database Azure SQL BYOD. Apra una nuova finestra di query.
Imposti i parametri: nello script riportato di seguito, individui la sezione iniziale in cui sono dichiarate le variabili. Aggiorni le variabili
@StartDatee@EndDatein base al periodo che desidera analizzare. Se deve filtrare per una specifica entità giuridica, aggiorni le condizioni di filtroDATAAREAID.Esegua lo script: esegua l’intero script T-SQL. Lo script usa
UNION ALLper combinare i dati di più tabelle in un unico formato standard di Event Log.Convalidi i dati: controlli che le colonne
InvoiceNumberoEventTimenon contengano valori nulli. Verifichi che siano presenti sia le fatture registrate (daVendInvoiceJour) sia quelle in sospeso (daVendInvoiceInfoTable).Esporti il risultato: faccia clic con il pulsante destro del mouse sulla griglia dei risultati in SSMS e selezioni Save Results As.... Salvi il file in formato CSV (delimitato da virgole).
Prepari il file per il caricamento: apra il CSV in Excel o in un editor di testo e verifichi che, se richiesto da ProcessMind, le date siano nel formato ISO 8601 (YYYY-MM-DD HH:MM:SS). Se lo script è stato eseguito correttamente, non dovrebbero essere necessarie altre trasformazioni.
Carichi i dati in ProcessMind: importi il file CSV in ProcessMind e associ le colonne
InvoiceNumbera ID del caso,Activityad Attività eEventTimea Timestamp.
Configurazione
- Strategia di esportazione: utilizzi Incremental Push per le tabelle con volumi elevati, come
LedgerJournalTranseVendTrans, così da ridurre al minimo il carico BYOD. Ricorra a Full Push solo se sospetta incongruenze nei dati. - Gestione del fuso orario: Dynamics 365 archivia i dati in UTC. Lo script presuppone che siano in UTC. Se l’analisi richiede l’ora locale, applichi una correzione
DATEADDnello script o durante l’importazione in ProcessMind. - Filtro per azienda: la colonna
DataAreaIdidentifica l’entità giuridica. Per impostazione predefinita, lo script estrae i dati di tutte le entità. AggiungaWHERE DataAreaId = 'usmf'(ad esempio) per filtrare una specifica controllata. - Cronologia del flusso di lavoro: la tabella
WorkflowTrackingStatusTableè fondamentale per ottenere le date e gli orari delle approvazioni. Si assicuri che sia inclusa nella configurazione di esportazione BYOD, perché spesso viene omessa per impostazione predefinita. - Conservazione dei dati: tenga conto delle eventuali procedure di pulizia in D365 che potrebbero eliminare la cronologia dei flussi di lavoro completati o le righe di giornale registrate, limitando così la profondità storica dell’analisi di Process Mining.
a Query di esempio 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; È pronto a iniziare?
Utilizzi questo template per creare una solida base di dati e iniziare subito a ottimizzare i flussi di lavoro dei pagamenti. Se ha bisogno di aiuto per mappare le tabelle specifiche di Dynamics 365, il nostro team è a Sua disposizione.
Ottimizzi subito l’elaborazione dei pagamenti ai fornitori
Riduca del 30% i tempi di ciclo ed elimini i ritardi di D365.
Non è richiesta alcuna carta di credito. Configurazione in cinque minuti.