Il Suo Template di Dati per il Processo di Pagamento dei Conti Fornitori
Il Suo Template di Dati per il Processo di Pagamento dei Conti Fornitori
- Attributi specifici del processo per l'analisi finanziaria
- Pietre miliari delle attività critiche per il tracciamento dei pagamenti
- Istruzioni dettagliate per l'estrazione per Dynamics 365
Attributi di Elaborazione dei Pagamenti Fornitori
| Nome | Descrizione | ||
|---|---|---|---|
| Activity Activity | Il compito specifico o il cambiamento di stato che si è verificato. | ||
| Descrizione Questo attributo descrive l'evento o il passaggio eseguito nel processo, come 'Fattura Creata', 'Fattura Approvata' o 'Pagamento Contabilizzato'. Trasforma i tipi di transazione tecnici e i cambiamenti di stato del workflow in eventi aziendali leggibili. In Dynamics 365, queste attività sono spesso derivate da una combinazione di inserimenti in tabelle (es. un nuovo record in Perché è importante Definisce il flusso di processo e la sequenza degli Dove trovare Derivato da varie tabelle di transazione e Esempi Fattura CreataFattura ApprovataPagamento Generato | |||
| Numero fattura InvoiceNumber | L'identificatore univoco assegnato alla fattura del fornitore. | ||
| Descrizione Il Numero di Fattura serve come identificatore di caso definitivo per questa vista di processo. Raggruppa in modo univoco tutti gli eventi relativi a una singola fattura fornitore, consentendo un'analisi completa del suo percorso dalla ricezione alla liquidazione. In Microsoft Dynamics 365, questo corrisponde tipicamente al campo Perché è importante È la chiave fondamentale per collegare attività AP disgiunte in una singola istanza di processo. Dove trovare Table: VendInvoiceJour, Field: InvoiceId Esempi INV-2023-00198223344ACME-OCT-22 | |||
| Timestamp Evento EventTime | Il timestamp quando l'attività si è verificata. | ||
| Descrizione Questo attributo registra la data e l'ora esatte in cui un'attività specifica ha avuto luogo. Viene utilizzato per sequenziare gli eventi cronologicamente e calcolare le durate tra i passaggi. Per Dynamics 365, questo è solitamente ottenuto da Perché è importante Essenziale per calcolare i tempi di ciclo, i Dove trovare System fields CreatedDateTime or ModifiedDateTime on transaction tables Esempi 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Sistema di Origine SourceSystem | Il nome del sistema da cui provengono i dati. | ||
| Descrizione Identifica il software o l'ambiente sorgente da cui sono stati estratti i Questo è particolarmente utile in architetture multi-sistema dove i Perché è importante Garantisce la Dove trovare Codificato o configurato durante l'estrazione Esempi Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Ultimo `Data Update` LastDataUpdate | Il timestamp quando i dati sono stati estratti o aggiornati. | ||
| Descrizione Indica la freschezza dei Questo è tipicamente generato dal processo ETL (Extract, Transform, Load) piuttosto che essere un campo all'interno di Dynamics 365 stesso. Perché è importante Critico per stabilire fiducia nei Dove trovare Generato dallo script di estrazione Esempi 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Codice Società CompanyCode | L'identificatore dell'entità legale o della filiale. | ||
| Descrizione Rappresenta l'entità legale all'interno dell'organizzazione dove la fattura viene elaborata. In Microsoft Dynamics 365, questo è strettamente applicato tramite il campo di sistema Questo attributo è essenziale per l' Perché è importante Consente un'analisi comparativa tra diverse unità di Dove trovare Table: VendInvoiceJour, Field: DataAreaId Esempi USMFDEMFGBSI | |||
| Conto Fornitore VendorAccount | Il numero di conto univoco per il fornitore. | ||
| Descrizione L'identificatore univoco per il fornitore coinvolto nella transazione. In Dynamics 365, questo corrisponde al campo Questo attributo è centrale per la 'Vista della Complessità delle Relazioni con i Fornitori', consentendo l'analisi delle prestazioni e dell'attrito per relazione specifica con il fornitore. Perché è importante Consente la segmentazione delle prestazioni di processo per fornitore. Dove trovare Table: VendInvoiceJour, Field: InvoiceAccount or OrderAccount Esempi US-101V000452001 | |||
| Data di Scadenza DueDate | La data entro cui la fattura dovrebbe essere pagata. | ||
| Descrizione La data contrattuale entro cui il pagamento deve essere saldato per evitare penali. In Dynamics 365, è memorizzata come È la base principale per il KPI 'Tasso di Pagamento Puntuale' e aiuta a dare priorità al lavoro nella vista 'Throughput e Volume del Processo AP'. Perché è importante Il benchmark per misurare le prestazioni di pagamento puntuale. Dove trovare Table: VendInvoiceJour or VendTrans, Field: DueDate Esempi 2023-11-302023-12-15 | |||
| Data Fattura InvoiceDate | La data del documento indicata sulla fattura. | ||
| Descrizione La data stampata sulla fattura del fornitore. In Dynamics 365, questo è il campo Utilizzato nell' Perché è importante Definisce l'inizio del periodo di invecchiamento per la fattura. Dove trovare Table: VendInvoiceJour, Field: InvoiceDate Esempi 2023-10-012023-10-15 | |||
| Dipartimento Department | Il dipartimento responsabile del costo. | ||
| Descrizione La dimensione finanziaria che indica il dipartimento interno. In Dynamics 365, le dimensioni sono memorizzate dinamicamente (spesso in Questo attributo è utilizzato nella 'Vista della Complessità delle Relazioni con i Fornitori' per vedere quali dipartimenti interni generano il maggior volume di AP. Perché è importante Consente l'analisi dettagliata e la responsabilità organizzativa. Dove trovare Table: VendInvoiceJour, Field: DefaultDimension (Requires DimensionAttributeLevelValue view) Esempi ITFinanzaOperazioni | |||
| ID Utente UserId | L'identificatore dell'utente che ha eseguito l'attività. | ||
| Descrizione Identifica l'utente del sistema responsabile di una specifica attività, come l'approvazione di una fattura o la registrazione di un pagamento. Ricavato dai campi Utilizzato nell''Analisi di Blocco Pagamenti e Attrito' per vedere se processori specifici attivano più blocchi di altri. Perché è importante Consente l'analisi del comportamento delle risorse e la segregazione dei compiti. Dove trovare System fields CreatedBy/ModifiedBy on transaction/history tables Esempi jdoeadminworkflow_sys | |||
| Importo Fattura InvoiceAmount | Il valore monetario totale della fattura. | ||
| Descrizione Il valore totale della fattura nella valuta della transazione. In Dynamics 365, questo si trova in campi come Utilizzato nella dashboard 'Rilevamento Rischio Pagamento Duplicato' per correlare gli importi con i dettagli del fornitore. Perché è importante Critico per l'analisi del volume di spesa e del rischio finanziario. Dove trovare Table: VendInvoiceJour, Field: InvoiceAmount Esempi 1500.00245.5010000.00 | |||
| Nome Fornitore VendorName | Il nome dell'organizzazione del fornitore. | ||
| Descrizione Il nome descrittivo del fornitore. In D365, il conto fornitore agisce come chiave esterna alla Rubrica Indirizzi Globale ( Fornire nomi leggibili facilita la 'Vista della Complessità delle Relazioni con i Fornitori' e rende le dashboard accessibili agli utenti aziendali. Perché è importante Fornisce contesto per il numero di conto del fornitore. Dove trovare Table: DirPartyTable (via VendTable), Field: Name Esempi Contoso Office SupplyFabrikam ElectronicsLitware Inc. | |||
| Numero Ordine d'Acquisto PurchaseOrderNumber | Il numero di riferimento dell'ordine di acquisto associato. | ||
| Descrizione Collega la fattura al documento di acquisto originale. In Dynamics 365, questo è il campo Questo Perché è importante Essenziale per analizzare il tasso di corrispondenza Dove trovare Table: VendInvoiceJour, Field: PurchId Esempi PO-000455000342PO-22-998 | |||
| Data Sconto Cassa CashDiscountDate | La data entro cui il pagamento deve avvenire per ricevere uno sconto. | ||
| Descrizione La scadenza per catturare gli incentivi di pagamento anticipato. In Dynamics 365, questo è il Questo attributo alimenta la dashboard 'Performance di Acquisizione Sconti in Contanti', consentendo all'organizzazione di quantificare le opportunità di risparmio mancate. Perché è importante Influisce direttamente sul KPI dell'efficienza finanziaria del processo. Dove trovare Table: VendInvoiceJour or VendTrans, Field: CashDiscDate Esempi 2023-10-102023-10-20 | |||
| Metodo di Pagamento PaymentMethod | Il metodo utilizzato per pagare la fattura (es. Assegno, Bonifico, EFT). | ||
| Descrizione Definisce come i fondi vengono trasferiti al fornitore. In Dynamics 365, questo è il campo Questo Perché è importante Spiega le variazioni nella fase di esecuzione del pagamento. Dove trovare Table: VendInvoiceJour (joined to PaymMode info) or VendTrans Esempi ASSEGNOACHWIRE | |||
| Numero Voucher VoucherNumber | Il numero di voucher contabile associato alla transazione. | ||
| Descrizione L'identificatore interno del Libro Mastro Generale per la registrazione contabile. In Dynamics 365, il campo Sebbene tecnico, è utile per l' Perché è importante Chiave per l' Dove trovare Table: VendInvoiceJour, Field: LedgerVoucher Esempi VOU-10023INV-ACC-992 | |||
| Pagamento Bloccato IsPaymentBlocked | Indicatore che segnala se la fattura è attualmente bloccata per il pagamento. | ||
| Descrizione Un indicatore booleano che identifica se la fattura è in sospeso. In Dynamics 365, questo è spesso derivato dallo stato Questo è il driver principale per l''Analisi di Blocco Pagamenti e Attrito', evidenziando le interruzioni di processo. Perché è importante Identifica i punti di attrito immediati e gli interventi manuali. Dove trovare Table: VendTrans, Field: Approved (inverted) or specialized Hold fields Esempi truefalse | |||
| Termini di Pagamento PaymentTerms | Il codice che rappresenta i termini di pagamento concordati. | ||
| Descrizione Il codice di configurazione che stabilisce le date di scadenza e gli sconti (es. Net30). In Dynamics 365, questo è il Analizzato insieme al 'Cycle Time' per vedere se i ritardi di processo violano i termini concordati. Perché è importante Fornisce contesto per il calcolo della data di scadenza. Dove trovare Table: VendInvoiceJour, Field: PaymTermId Esempi Net302%10Net30COD | |||
| Valuta Currency | Il codice valuta della fattura. | ||
| Descrizione Il codice ISO della valuta in cui è stata emessa la fattura. In Dynamics 365, questo è il campo Importante per la standardizzazione degli importi nella mappatura 'Importo Attività' se è richiesta la normalizzazione multi-valuta. Perché è importante Contesto necessario per interpretare i valori finanziari. Dove trovare Table: VendInvoiceJour, Field: CurrencyCode Esempi USDEURGBP | |||
Attività di Elaborazione dei Pagamenti Fornitori
| Activity | Descrizione | ||
|---|---|---|---|
| Fattura Abbinata all'Ordine di Acquisto | Il sistema collega con successo la riga della fattura a un Ordine di Acquisto o a una Ricevuta di Prodotto. Questa attività significa la convalida della fattura rispetto all'ordine di approvvigionamento. | ||
| Perché è importante Critico per il KPI del tasso di corrispondenza PO al primo passaggio. Differenzia tra l'elaborazione Dove trovare VendInvoiceInfoLine.PurchId e VendInvoiceInfoTable.MatchStatus. Valore dedotto quando MatchStatus passa allo stato Passed. Acquisisci Confrontare il campo MatchStatus prima/dopo Tipo di evento inferred | |||
| Fattura Approvata | L'istanza del workflow per la fattura pendente raggiunge uno stato completato o approvato. La fattura è ora pronta per essere contabilizzata nel libro mastro. | ||
| Perché è importante Calcola il Tempo Medio di Approvazione. I ritardi qui influiscono direttamente sulla capacità di catturare sconti per pagamento anticipato. Dove trovare WorkflowTrackingStatusTable.CreatedDateTime con TrackingStatus impostato su Completed. In alternativa, VendInvoiceInfoTable.RequestStatus è uguale a Approved. Acquisisci Registrato quando l'istanza Tipo di evento explicit | |||
| Fattura Creata | La creazione iniziale di un record di fattura fornitore pendente nel sistema. Questo segna l'ingresso della fattura nel workflow di Dynamics 365, sia manualmente che tramite importazione di entità dati. | ||
| Perché è importante Stabilisce l'ora di inizio per i calcoli del Dove trovare VendInvoiceInfoTable.CreatedDateTime o timestamp di creazione di VendInvoiceInfoTable.RecId. Rappresenta l'intestazione della fattura fornitore in sospeso. Acquisisci Registrato quando il record è creato in Tipo di evento explicit | |||
| Fattura Registrata | La fattura viene contabilizzata nel Libro Mastro Generale, creando una passività nel sistema. Il record si sposta dalle tabelle in sospeso alle tabelle delle transazioni contabilizzate. | ||
| Perché è importante Una pietra miliare significativa che indica il riconoscimento finanziario del debito. Questa attività abilita la selezione della fattura per il pagamento. Dove trovare Creazione del record in Acquisisci Registrato quando la transazione X è stata eseguita Tipo di evento explicit | |||
| Giornale di Pagamento Creato | La fattura viene selezionata e aggiunta a una riga del Giornale di Pagamento. Questo indica l'intenzione di pagare e di solito avvia il workflow di revisione del pagamento. | ||
| Perché è importante Segna il passaggio dalla registrazione del debito all'elaborazione dell'erogazione di cassa. Utilizzato per misurare i tempi di esecuzione del pagamento. Dove trovare
Acquisisci Registrato quando il record è creato in 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 si aggiorna a Inviato o Generato. | ||
| Perché è importante Supporta il KPI del tempo di ritardo Dove trovare
Acquisisci Confrontare il campo PaymentStatus prima/dopo Tipo di evento inferred | |||
| Pagamento Registrato | Il Giornale di Pagamento viene contabilizzato nel Libro Mastro Generale, saldando la fattura e azzerando il saldo del fornitore. Questo completa il processo finanziario. | ||
| Perché è importante L'attività finale per il 'Tempo di Ciclo Medio dalla Fattura al Pagamento'. Conferma che le registrazioni contabili per la riduzione di cassa sono state finalizzate. Dove trovare
Acquisisci Registrato quando la transazione X è stata eseguita Tipo di evento explicit | |||
| Blocco Pagamento Applicato | Viene posto un blocco sulla transazione fornitore impedendone la selezione in una proposta di pagamento. Questo viene spesso fatto manualmente per le controversie. | ||
| Perché è importante Supporta l'analisi dei blocchi di pagamento e dell'attrito. Rivela interventi manuali che ritardano il flusso di cassa in uscita. Dove trovare Il flag VendTrans.Approved è impostato su No, oppure i campi di stato OnHold risultano popolati. Richiede il monitoraggio degli aggiornamenti in VendTrans. Acquisisci Confrontare il campo Tipo di evento inferred | |||
| Corrispondenza Fattura Fallita | Il processo di riconciliazione identifica una discrepanza tra la fattura e l'ordine di acquisto/ricevuta (varianza di prezzo o quantità). Questo spesso blocca il processo fino alla risoluzione. | ||
| Perché è importante Identifica specifici punti di attrito nel processo di corrispondenza. Supporta il Dove trovare VendInvoiceInfoTable.MatchStatus passa a Failed o Discrepancy. Visibile anche nelle varianze di matching di VendInvoiceInfoLine. Acquisisci Confrontare il campo MatchStatus prima/dopo Tipo di evento inferred | |||
| Fattura Aggiornata | Registra le modifiche apportate all'intestazione o alle righe della fattura prima della contabilizzazione. Aggiornamenti frequenti possono indicare problemi di estrazione dati o correzioni manuali richieste durante la convalida. | ||
| Perché è importante Un'alta frequenza di aggiornamenti suggerisce cicli di rilavorazione o scarsa qualità dei Dove trovare
Acquisisci Confrontare ModifiedDateTime su estrazioni successive Tipo di evento inferred | |||
| Fattura Sottoposta ad Approvazione | La fattura pendente viene sottomessa al motore di workflow per la revisione. Questo segna il passaggio dall'inserimento dati/riconciliazione alla fase di autorizzazione. | ||
| Perché è importante Segna l'inizio del tempo di ciclo di approvazione. Essenziale per analizzare l'efficienza delle gerarchie interne. Dove trovare WorkflowTrackingStatusTable.CreatedDateTime where ContextTableId equals VendInvoiceInfoTable ID and Status is Submitted. Acquisisci Registrato quando l'istanza Tipo di evento explicit | |||
| Giornale di Pagamento Approvato | Il workflow del Giornale di Pagamento è approvato, autorizzando la generazione dei pagamenti. Questo è il controllo finale prima che i fondi siano preparati per il trasferimento. | ||
| Perché è importante Separa la preparazione amministrativa dei pagamenti dal bottleneck dell'autorizzazione. Dove trovare WorkflowTrackingStatusTable linking to the LedgerJournalTable (Header) ID. Status is Completed. Acquisisci Registrato quando l'istanza Tipo di evento explicit | |||
Guide all'Estrazione
Fasi
Accedere all'Area di Lavoro Gestione
Dati: Accedere all'ambiente Microsoft Dynamics 365 Finance. Navigare su Aree di Lavoro e selezionare GestioneDati. Questo è l'hub centrale per la configurazione dei progetti di esportazionedati.Creare un Progetto di Esportazione: Cliccare sul riquadro Esporta per creare un nuovo progetto
dati. Assegnare un nome chiaro al progetto, ad esempio, ProcessMining_AP_Export. Nel campo Formatodatidi destinazione, selezionare il formato di destinazione (ad es., Azure SQL DB per BYOD o CSV per esportazione basata su file).Aggiungere Entità
Dati: Aggiungere le seguenti entitàdatistandard al progetto una per una: VendorInvoiceHeaderEntity (per fatture in sospeso), VendorInvoiceLineEntity (per righe fattura), VendorInvoiceJournalHeaderEntity (per fatture registrate), VendorPaymentJournalLineEntity (per pagamenti) e WorkflowHistoryEntity (per registri di approvazione). Se WorkflowHistoryEntity non è disponibile per impostazione predefinita, potrebbe essere necessario abilitare un'entità personalizzata o un'entità di sistema specifica esposta per l'esportazione.Configurare i Filtri Entità: Per ogni entità, cliccare sull'icona Filtro. Applicare filtri per limitare i
datial CompanyInfo (DataAreaId) pertinente e impostare un intervallo di date sui campi CreatedDateTime o InvoiceDate per estrarre idatisolo per il periodo di analisi desiderato (ad es., ultimi 12 mesi).Impostare l'Esportazione Ricorrente: Per assicurarsi che l'
event logrimanga aggiornato, creare un processodatiricorrente. Definire la frequenza di ricorrenza (ad es., giornaliera o oraria) e abilitare Incremental Push dove supportato. Ciò riduce il carico del sistema esportando solo i record modificati.Eseguire l'Esportazione Iniziale: Eseguire il progetto manualmente per la prima volta cliccando su Esporta ora. Monitorare il riepilogo dell'esecuzione per assicurarsi che tutti i record siano esportati correttamente senza errori.
Trasformare i
Dati: Una volta che idatisono stati esportati nella Sua destinazione (Azure SQL o file), utilizzare lo script SQL fornito nella sezione Query per unire queste tabelle. Questa logica di trasformazione converte i record di entità disparate in un unicoevent logcronologico.Mappare gli Attributi: Assicurarsi che il
datasetrisultante mappi InvoiceNumber a Case ID, EventTime a Timestamp e Activity ad Activity Name secondo i requisiti dello strumento di Process Mining.Convalidare e Caricare: Eseguire i controlli di convalida elencati di seguito per confermare l'accuratezza dei
dati. Una volta verificato, esportare il risultato finale come file CSV o Parquet e caricarlo su ProcessMind.
Configurazione
- Selezione Entità: Utilizzare VendorInvoiceHeaderEntity e VendorInvoiceLineEntity per le fasi di processo precedenti alla registrazione. Utilizzare VendorInvoiceJournalHeaderEntity per il documento legale registrato. Utilizzare VendorPaymentJournalLineEntity per il tracciamento dei pagamenti.
- Incremental Push: Abilitare questa impostazione nel progetto
Data Managementper esportare solo i record nuovi o modificati dopo il carico iniziale completo. Questo è fondamentale per le prestazioni. - Intervalli di Date: Filtrare per InvoiceDate >= [Data Inizio]. Evitare esportazioni illimitate che possono causare
timeout. - Filtro Azienda: D365 è un sistema multi-entità. Filtrare sempre per DataAreaId per evitare di mescolare
datidi diverse entità legali, a meno che non sia prevista un'analisi interaziendale. - Storia del Workflow: Le entità standard per la storia del
workflowpossono essere pesanti. Assicurarsi di esportare solo la storia relativa ai tipi VendInvoice per mantenere il volume gestibile.
a Query di Esempio config
/*
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' Fasi
Verificare la Connettività BYOD: Assicurarsi di avere SQL Server Management Studio (SSMS) o uno strumento simile installato e di potersi connettere al database Azure SQL configurato come target
Bring Your Own Database(BYOD) per il proprio ambiente Dynamics 365 Finance & Operations.Confermare l'Esportazione delle Entità: Navigare nell'area di lavoro Gestione
Datiin Dynamics 365. Verificare che le seguenti entità (o le loro tabelle sottostanti) siano configurate per l'esportazione nel database BYOD:VendInvoiceInfoTable(Fatture in sospeso),VendInvoiceInfoLine(Righe in sospeso),VendInvoiceJour(Fatture registrate),VendTrans(Transazioni fornitore),LedgerJournalTrans(Righe di giornale),LedgerJournalTable(Intestazioni di giornale) eWorkflowTrackingStatusTable(Cronologia delWorkflow).Configurare il Lavoro di Esportazione: Se queste tabelle non vengono attualmente esportate, creare un nuovo lavoro di esportazione. Impostare il Formato
Datidi Destinazione sul proprio database BYOD SQL. Scegliere Incremental Push per mantenere idatisincronizzati senza riesportazioni complete. Eseguire il lavoro per popolare le tabelle.Preparare l'Ambiente SQL: Aprire SSMS e connettersi al database Azure SQL BYOD. Aprire una nuova finestra di query.
Impostare i Parametri: Nello script fornito di seguito, individuare la sezione di dichiarazione delle variabili in alto. Aggiornare le variabili
@StartDatee@EndDateper corrispondere al periodo che si desidera analizzare. Se è necessario filtrare per una specifica entità legale, aggiornare le condizioni di filtroDATAAREAID.Eseguire lo Script: Eseguire lo script T-SQL completo. Questo script utilizza
UNION ALLper combinaredatida più tabelle in un unico formatoevent logstandardizzato.Validare i
Dati: Controllare i risultati per valorinullnelle colonneInvoiceNumberoEventTime. Assicurarsi che appaiano sia le fatture registrate (daVendInvoiceJour) che quelle in sospeso (daVendInvoiceInfoTable).Esportare il Risultato: Cliccare con il tasto destro sulla griglia dei risultati in SSMS e selezionare Salva Risultati come.... Salvare il file come file CSV (
Comma Delimited).Formattare per il Caricamento: Aprire il CSV in Excel o un editor di testo per assicurarsi che i formati data siano conformi a ISO 8601 (AAAA-MM-GG HH:MM:SS) se richiesto da ProcessMind. Non dovrebbe essere necessaria alcuna ulteriore trasformazione se lo script è stato eseguito con successo.
Caricare su ProcessMind: Importare il file CSV in ProcessMind, mappando le colonne
InvoiceNumbera Case ID,Activitya Activity Name eEventTimea Timestamp.
Configurazione
- Strategia di Esportazione: Utilizzare Incremental Push per tabelle ad alto volume come
LedgerJournalTranseVendTransper minimizzare il carico BYOD. Utilizzare Full Push solo se si sospettano incongruenze neidati. - Gestione dei Fusi Orari: Dynamics 365 memorizza i
datiin UTC. Lo script assume UTC. Se la Sua analisi richiede l'ora locale, applicare una regolazioneDATEADDnello script o durante l'importazione in ProcessMind. - Filtro Aziendale: La colonna
DataAreaIdrappresenta l'Entità Legale. Lo script estrae idatiper tutte le entità per impostazione predefinita. AggiungereWHERE DataAreaId = 'usmf'(esempio) per filtrare una sussidiaria specifica. - Storia del Workflow: La tabella
WorkflowTrackingStatusTableè fondamentale per itimestampdi approvazione. Assicurarsi che questa tabella sia inclusa nella configurazione di esportazione BYOD, poiché spesso viene omessa per impostazione predefinita. - Conservazione dei Dati: Prestare attenzione a eventuali routine di pulizia in D365 che potrebbero eliminare la cronologia del
workflowcompletata o le righe di giornale registrate, poiché ciò limiterà 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;