Su Template de datos para el procesamiento de pagos de cuentas por pagar
Su Template de datos para el procesamiento de pagos de cuentas por pagar
- Atributos específicos del proceso para el análisis financiero
- Hitos clave de actividad para el seguimiento de pagos
- Instrucciones detalladas para extraer datos de Dynamics 365
Atributos del procesamiento de pagos de cuentas por pagar
| Nombre | Descripción | ||
|---|---|---|---|
| Actividad Activity | La tarea concreta o el cambio de estado que se produjo. | ||
| Descripción Este atributo describe el evento o paso del proceso, como «Factura creada», «Factura aprobada» o «Pago contabilizado». Convierte los tipos de transacción técnicos y los cambios de estado del flujo de trabajo en eventos de negocio fáciles de entender. En Dynamics 365, estas actividades suelen derivarse de una combinación de inserciones en tablas, como un nuevo registro en Por qué es importante Define el flujo del proceso y la secuencia de eventos del mapa de procesos. Dónde obtenerlo Se deriva de varias tablas de transacciones y registros del historial del flujo de trabajo Ejemplos Factura creadaFactura aprobadaPago generado | |||
| Hora del evento EventTime | La marca de tiempo en que se produjo la actividad. | ||
| Descripción Este atributo registra la fecha y hora exactas en que tuvo lugar una actividad concreta. Se utiliza para ordenar cronológicamente los eventos y calcular el tiempo transcurrido entre pasos. En Dynamics 365, suele obtenerse de Por qué es importante Esencial para calcular los tiempos de ciclo y de entrega, e identificar cuellos de botella. Dónde obtenerlo Campos del sistema CreatedDateTime o ModifiedDateTime en las tablas de transacciones Ejemplos 2023-10-01T08:30:00Z2023-10-01T14:15:22Z2023-10-05T09:00:00Z | |||
| Número de factura InvoiceNumber | Identificador único asignado a la factura del proveedor. | ||
| Descripción El número de factura es el identificador definitivo del caso en esta vista del proceso. Agrupa de forma única todos los eventos relacionados con una factura de proveedor, lo que permite analizar en detalle su recorrido desde la recepción hasta la liquidación. En Microsoft Dynamics 365, suele corresponder al campo Por qué es importante Es la clave fundamental para vincular actividades de cuentas por pagar que, de otro modo, quedarían separadas, en una sola instancia del proceso. Dónde obtenerlo Tabla: VendInvoiceJour, campo: InvoiceId Ejemplos INV-2023-00198223344ACME-OCT-22 | |||
| Sistema de origen SourceSystem | Nombre del sistema del que proceden los datos. | ||
| Descripción Identifica el software o entorno de origen del que se extrajeron los datos del proceso. En este caso, indicará siempre la instancia de Microsoft Dynamics 365. Resulta especialmente útil en entornos con varios sistemas, donde pueden combinarse datos de ERP y soluciones externas de digitalización. Por qué es importante Garantiza la trazabilidad y el seguimiento del origen de los datos en análisis de varios sistemas. Dónde obtenerlo Definido en el código o configurado durante la extracción Ejemplos Dynamics 365 F&OD365 PRODMicrosoft Dynamics | |||
| Última actualización de datos LastDataUpdate | La marca de tiempo en que se extrajeron o actualizaron los datos. | ||
| Descripción Indica la actualidad de los datos utilizados en el análisis. Ayuda a saber si se están consultando datos en tiempo real o una instantánea de un periodo anterior. Normalmente, este dato lo genera el proceso ETL (extracción, transformación y carga), no un campo de Dynamics 365. Por qué es importante Es fundamental para generar confianza en los Dashboards y los KPI. Dónde obtenerlo Generado por el script de extracción Ejemplos 2023-10-25T12:00:00Z2023-11-01T06:00:00Z | |||
| Código de empresa CompanyCode | Identificador de la entidad jurídica o filial. | ||
| Descripción Representa la entidad jurídica de la organización en la que se procesa la factura. En Microsoft Dynamics 365, se define mediante el campo del sistema Este atributo es esencial para el análisis del tiempo de entrega de principio a fin, ya que permite comparar distintas filiales o unidades geográficas. Por qué es importante Permite comparar distintas unidades de negocio o países. Dónde obtenerlo Tabla: VendInvoiceJour, campo: DataAreaId Ejemplos USMFDEMFGBSI | |||
| Cuenta del proveedor VendorAccount | Número de cuenta único del proveedor. | ||
| Descripción Identificador único del proveedor que participa en la transacción. En Dynamics 365, corresponde al campo Este atributo es fundamental para la vista «Complejidad de las relaciones con proveedores», que permite analizar el rendimiento y los puntos de fricción de cada relación con un proveedor. Por qué es importante Permite segmentar el rendimiento del proceso por proveedor. Dónde obtenerlo Tabla: VendInvoiceJour, campo: InvoiceAccount u OrderAccount Ejemplos US-101V000452001 | |||
| Departamento Department | El departamento responsable del coste. | ||
| Descripción La dimensión financiera que identifica el departamento interno. En Dynamics 365, las dimensiones se almacenan de forma dinámica (a menudo en Este atributo se utiliza en la vista «Complejidad de las relaciones con proveedores» para identificar qué departamentos internos generan más volumen de cuentas por pagar. Por qué es importante Permite analizar la organización con más detalle y determinar responsabilidades. Dónde obtenerlo Tabla: VendInvoiceJour, campo: DefaultDimension (requiere la vista DimensionAttributeLevelValue) Ejemplos TIFinanzasOperaciones | |||
| Fecha de factura InvoiceDate | La fecha del documento que figura en la factura. | ||
| Descripción La fecha impresa en la factura del proveedor. En Dynamics 365, corresponde al campo Se utiliza en «Análisis del tiempo total de principio a fin» para medir el ciclo completo desde la perspectiva del proveedor. Por qué es importante Determina el inicio del período de antigüedad de la factura. Dónde obtenerlo Tabla: VendInvoiceJour, campo: InvoiceDate Ejemplos 2023-10-012023-10-15 | |||
| Fecha de vencimiento DueDate | Fecha límite en la que debe pagarse la factura. | ||
| Descripción La fecha contractual límite para liquidar el pago y evitar penalizaciones. En Dynamics 365, se almacena como Es la referencia principal para el KPI «Porcentaje de pagos puntuales» y ayuda a priorizar el trabajo en la vista «Rendimiento y volumen del proceso de cuentas por pagar». Por qué es importante La referencia para medir el rendimiento de los pagos puntuales. Dónde obtenerlo Tabla: VendInvoiceJour o VendTrans, campo: DueDate Ejemplos 2023-11-302023-12-15 | |||
| ID de usuario UserId | El identificador del usuario que realizó la actividad. | ||
| Descripción Identifica al usuario del sistema responsable de una actividad concreta, como aprobar una factura o contabilizar un pago. Se obtiene de los campos Se utiliza en «Análisis de bloqueos de pago y obstáculos» para comprobar si ciertos responsables de procesamiento generan más bloqueos que otros. Por qué es importante Permite analizar el comportamiento de los recursos y la segregación de funciones. Dónde obtenerlo Campos del sistema CreatedBy/ModifiedBy en tablas de transacciones e historial Ejemplos jdoeadministradorsistema_flujo_trabajo | |||
| Importe de la factura InvoiceAmount | Valor monetario total de la factura. | ||
| Descripción Valor total de la factura en la moneda de la transacción. En Dynamics 365, se encuentra en campos como Se utiliza en el Dashboard de detección del riesgo de pagos duplicados para relacionar los importes con los datos de los proveedores. Por qué es importante Es fundamental para analizar el volumen de gasto y el riesgo financiero. Dónde obtenerlo Tabla: VendInvoiceJour, campo: InvoiceAmount Ejemplos 1500.00245.5010000.00 | |||
| Nombre del proveedor VendorName | El nombre de la organización proveedora. | ||
| Descripción El nombre descriptivo del proveedor. En D365, la cuenta del proveedor funciona como clave externa de la libreta global de direcciones ( Los nombres fáciles de reconocer ayudan a consultar la vista «Complejidad de las relaciones con proveedores» y facilitan el acceso a los Dashboards para los usuarios de negocio. Por qué es importante Aporta contexto al número de cuenta del proveedor. Dónde obtenerlo Tabla: DirPartyTable (a través de VendTable), campo: Name Ejemplos Suministros de oficina ContosoElectrónica FabrikamLitware Inc. | |||
| Número de orden de compra PurchaseOrderNumber | El número de referencia de la orden de compra asociada. | ||
| Descripción Vincula la factura con el documento de compra original. En Dynamics 365, corresponde al campo Este atributo permite distinguir las facturas asociadas a una orden de compra de las que no lo están en el Dashboard «Tendencias de coincidencias y discrepancias en órdenes de compra». Por qué es importante Esencial para analizar el porcentaje de coincidencias en el proceso de compra a pago. Dónde obtenerlo Tabla: VendInvoiceJour, campo: PurchId Ejemplos OC-000455000342OC-22-998 | |||
| ¿Está bloqueado el pago? IsPaymentBlocked | Indicador que señala si la factura está bloqueada actualmente para el pago. | ||
| Descripción Indicador booleano que señala si la factura está retenida. En Dynamics 365, suele derivarse del estado Es el factor principal del «Análisis de bloqueos de pago y obstáculos», que pone de relieve las interrupciones del proceso. Por qué es importante Permite detectar obstáculos inmediatos e intervenciones manuales. Dónde obtenerlo Tabla: VendTrans, campo: Approved (invertido) o campos específicos de retención Ejemplos truefalse | |||
| Condiciones de pago PaymentTerms | El código que representa las condiciones de pago acordadas. | ||
| Descripción El código de configuración que determina las fechas de vencimiento y los descuentos (por ejemplo, Net30). En Dynamics 365, corresponde a Se analiza junto con «Tiempo de ciclo» para comprobar si los retrasos del proceso incumplen las condiciones acordadas. Por qué es importante Aporta contexto para calcular la fecha de vencimiento. Dónde obtenerlo Tabla: VendInvoiceJour, campo: PaymTermId Ejemplos Neto a 30 días2 % a 10 días, neto a 30 díasCOD | |||
| Fecha límite para el descuento por pronto pago CashDiscountDate | La fecha límite para pagar y obtener un descuento. | ||
| Descripción La fecha límite para aprovechar los incentivos por pronto pago. En Dynamics 365, corresponde a Este atributo alimenta el Dashboard «Rendimiento de los descuentos por pronto pago» y permite cuantificar las oportunidades de ahorro perdidas. Por qué es importante Afecta directamente al KPI de eficiencia financiera del proceso. Dónde obtenerlo Tabla: VendInvoiceJour o VendTrans, campo: CashDiscDate Ejemplos 2023-10-102023-10-20 | |||
| Método de pago PaymentMethod | El método utilizado para pagar la factura (por ejemplo, cheque, transferencia bancaria o transferencia electrónica de fondos). | ||
| Descripción Define cómo se transfieren los fondos al proveedor. En Dynamics 365, corresponde al campo Este atributo se utiliza en el Dashboard «Tiempos de ejecución de los pagos» para evaluar la eficiencia de los distintos tipos de lotes de pago. Por qué es importante Explica las variaciones en la fase de ejecución del pago. Dónde obtenerlo Tabla: VendInvoiceJour (unida a la información de PaymMode) o VendTrans Ejemplos CHEQUEACHTRANSFERENCIA | |||
| Moneda Currency | El código de moneda de la factura. | ||
| Descripción El código ISO de la moneda en la que se emitió la factura. En Dynamics 365, corresponde al campo Es importante para estandarizar los importes en la asignación «Importe de la actividad» cuando se requiere normalizar varias monedas. Por qué es importante Contexto necesario para interpretar los valores financieros. Dónde obtenerlo Tabla: VendInvoiceJour, campo: CurrencyCode Ejemplos USDEURGBP | |||
| Número de comprobante VoucherNumber | El número de comprobante contable asociado a la transacción. | ||
| Descripción El identificador interno del asiento en el libro mayor. En Dynamics 365, el campo Aunque es un dato técnico, resulta útil para «Análisis de la ruta del proceso y auditoría de cumplimiento», ya que permite rastrear los asientos hasta el libro mayor para conciliarlos. Por qué es importante Clave para la auditoría financiera y la conciliación. Dónde obtenerlo Tabla: VendInvoiceJour, campo: LedgerVoucher Ejemplos COMP-10023FAC-CONT-992 | |||
Actividades del procesamiento de pagos de cuentas por pagar
| Actividad | Descripción | ||
|---|---|---|---|
| Diario de pagos creado | La factura se selecciona y se añade a una línea del diario de pagos. Esto indica la intención de pagar y suele iniciar el flujo de revisión del pago. | ||
| Por qué es importante Marca la transición de la obligación al procesamiento del desembolso. Se utiliza para medir los tiempos de ejecución del pago. Dónde obtenerlo LedgerJournalTrans.CreatedDateTime. La factura se vincula mediante el campo MarkedInvoice o las tablas de liquidación. Capturar Se registra al crear un registro en LedgerJournalTrans Tipo de evento explicit | |||
| Factura aprobada | La instancia del flujo de trabajo de la factura pendiente alcanza el estado completado o aprobado. La factura ya está lista para contabilizarse en el libro mayor. | ||
| Por qué es importante Calcula el tiempo medio de aprobación. Las demoras en esta etapa afectan directamente a la posibilidad de aprovechar descuentos por pronto pago. Dónde obtenerlo WorkflowTrackingStatusTable.CreatedDateTime, donde TrackingStatus es Completed. Como alternativa, VendInvoiceInfoTable.RequestStatus es igual a Approved. Capturar Se registra cuando se completa la instancia del flujo de trabajo Tipo de evento explicit | |||
| Factura conciliada con la orden de compra | El sistema vincula correctamente la línea de factura con una orden de compra o una recepción de productos. Esta actividad indica que la factura se ha validado frente a la orden de compra. | ||
| Por qué es importante Es fundamental para el KPI de tasa de conciliación de órdenes de compra al primer intento. Permite distinguir entre el procesamiento sin intervención manual y las facturas que requieren intervención manual. Dónde obtenerlo VendInvoiceInfoLine.PurchId y VendInvoiceInfoTable.MatchStatus. Se infiere cuando MatchStatus cambia a Passed. Capturar Compare el campo MatchStatus antes y después Tipo de evento inferred | |||
| Factura contabilizada | La factura se contabiliza en el libro mayor general y genera una obligación en el sistema. El registro pasa de las tablas de pendientes a las tablas de transacciones contabilizadas. | ||
| Por qué es importante Hito importante que indica el reconocimiento financiero de la deuda. Esta actividad permite seleccionar la factura para el pago. Dónde obtenerlo Creación de un registro en VendInvoiceJour y VendTrans. TransDate representa la fecha de contabilización. Capturar Se registra cuando se ejecuta la transacción X Tipo de evento explicit | |||
| Factura creada | Creación inicial en el sistema de un registro de factura de proveedor pendiente. Este evento marca la entrada de la factura en el flujo de trabajo de Dynamics 365, ya sea mediante registro manual o importación de una entidad de datos. | ||
| Por qué es importante Establece la hora de inicio para calcular el tiempo de entrega del proceso. Permite a las organizaciones medir cuánto tiempo permanecen las facturas en el sistema antes de procesarse o contabilizarse. Dónde obtenerlo Marca de tiempo de creación de VendInvoiceInfoTable.CreatedDateTime o VendInvoiceInfoTable.RecId. Corresponde a la cabecera de la factura de proveedor pendiente. Capturar Se registra al crear un registro en VendInvoiceInfoTable Tipo de evento explicit | |||
| Pago contabilizado | El diario de pagos se contabiliza en el libro mayor general, liquida la factura y salda el saldo del proveedor. Así concluye el proceso financiero. | ||
| Por qué es importante Actividad final para calcular el tiempo medio del ciclo desde la factura hasta el pago. Confirma que se han finalizado los asientos contables de la reducción de efectivo. Dónde obtenerlo Se contabiliza LedgerJournalTrans. Se actualiza VendTrans para reflejar la liquidación. El evento real es la contabilización del diario. Capturar Se registra cuando se ejecuta la transacción X Tipo de evento explicit | |||
| Pago generado | El sistema genera el archivo de pago (EFT, ISO20022) o imprime los cheques. El estado del pago en la línea del diario se actualiza a Sent o Generated. | ||
| Por qué es importante Sirve de apoyo al KPI del tiempo transcurrido entre la aprobación y la ejecución. Confirma que se ha generado la instrucción de pago. Dónde obtenerlo LedgerJournalTrans.PaymentStatus cambia a Sent/Recieved. A menudo se infiere a partir de las actualizaciones de la línea. Capturar Compare el campo PaymentStatus antes y después Tipo de evento inferred | |||
| Bloqueo de pago aplicado | Se bloquea la transacción del proveedor para impedir que se seleccione en una propuesta de pago. A menudo, se hace manualmente cuando hay una disputa. | ||
| Por qué es importante Sirve de apoyo al análisis de bloqueos de pago y puntos de fricción. Revela intervenciones manuales que retrasan las salidas de efectivo. Dónde obtenerlo El indicador VendTrans.Approved se establece en No o se rellenan campos de estado OnHold específicos. Es necesario hacer un seguimiento de las actualizaciones de VendTrans. Capturar Compare el campo de estado antes y después Tipo de evento inferred | |||
| Diario de pagos aprobado | Se aprueba el flujo de trabajo del diario de pagos y se autoriza la generación de los pagos. Es la última comprobación antes de preparar la transferencia de fondos. | ||
| Por qué es importante Permite distinguir la preparación administrativa de los pagos del cuello de botella de autorización. Dónde obtenerlo WorkflowTrackingStatusTable vinculado al ID de LedgerJournalTable (cabecera). El estado es Completed. Capturar Se registra cuando se completa la instancia del flujo de trabajo Tipo de evento explicit | |||
| Error al conciliar la factura | El proceso de conciliación detecta una discrepancia entre la factura y la orden de compra o la recepción, ya sea en el precio o en la cantidad. A menudo, el proceso se detiene hasta que se resuelve. | ||
| Por qué es importante Identifica puntos de fricción concretos en el proceso de conciliación. Sirve de apoyo al Dashboard de conciliación de órdenes de compra y tendencias de discrepancias. Dónde obtenerlo VendInvoiceInfoTable.MatchStatus cambia a Failed o Discrepancy. También puede observarse en las diferencias de conciliación de VendInvoiceInfoLine. Capturar Compare el campo MatchStatus antes y después Tipo de evento inferred | |||
| Factura actualizada | Registra los cambios realizados en la cabecera o las líneas de la factura antes de contabilizarla. Las actualizaciones frecuentes pueden indicar problemas de extracción de datos o correcciones manuales necesarias durante la validación. | ||
| Por qué es importante Una frecuencia elevada de actualizaciones puede indicar ciclos de retrabajo o una mala calidad de los datos de origen, por ejemplo, errores de OCR. Esto sirve de apoyo al monitor de retrabajo y precisión de los datos. Dónde obtenerlo Registro de base de datos (SysDatabaseLog) en VendInvoiceInfoTable, si está habilitado, o inferido a partir de los cambios en ModifiedDateTime cuando la frecuencia de consulta es alta. Capturar Compare ModifiedDateTime entre extracciones consecutivas Tipo de evento inferred | |||
| Factura enviada para aprobación | La factura pendiente se envía al motor de flujo de trabajo para su revisión. Esto marca la transición del registro y la conciliación de datos a la fase de autorización. | ||
| Por qué es importante Marca el inicio del tiempo de ciclo de aprobación. Es esencial para analizar la eficiencia de las jerarquías internas. Dónde obtenerlo WorkflowTrackingStatusTable.CreatedDateTime, donde ContextTableId es igual al ID de VendInvoiceInfoTable y el estado es Submitted. Capturar Se registra cuando se inicia la instancia del flujo de trabajo Tipo de evento explicit | |||
Guías de extracción
Pasos
Acceda al espacio de trabajo de administración de datos: Inicie sesión en su entorno de Microsoft Dynamics 365 Finance. Vaya a Workspaces y seleccione Data Management. Este es el centro desde el que se configuran los proyectos de exportación de datos.
Cree un proyecto de exportación: Haga clic en el mosaico Export para crear un proyecto de datos. Asígnele un nombre claro, por ejemplo, ProcessMining_AP_Export. En el campo Target data format, seleccione el formato de destino (por ejemplo, Azure SQL DB para BYOD o CSV para exportar a un archivo).
Añada entidades de datos: Añada al proyecto, una por una, las siguientes entidades de datos estándar: VendorInvoiceHeaderEntity (facturas pendientes), VendorInvoiceLineEntity (líneas de factura), VendorInvoiceJournalHeaderEntity (facturas registradas), VendorPaymentJournalLineEntity (pagos) y WorkflowHistoryEntity (registros de aprobación). Si WorkflowHistoryEntity no está disponible de forma predeterminada, quizá deba habilitar una entidad personalizada o una entidad del sistema específica expuesta para la exportación.
Configure los filtros de las entidades: En cada entidad, haga clic en el icono Filter. Aplique filtros para limitar los datos a la CompanyInfo pertinente (DataAreaId) y establezca un intervalo de fechas en los campos CreatedDateTime o InvoiceDate para extraer solo los datos del período que desea analizar (por ejemplo, los últimos 12 meses).
Configure una exportación recurrente: Para mantener actualizado el registro de eventos, cree un trabajo de datos recurrente. Defina la frecuencia (por ejemplo, diaria o cada hora) y habilite Incremental push cuando esté disponible. Así se reduce la carga del sistema, ya que solo se exportan los registros modificados.
Ejecute la exportación inicial: Ejecute el proyecto manualmente por primera vez haciendo clic en Export now. Revise el resumen de ejecución para confirmar que todos los registros se exportaron correctamente y sin errores.
Transforme los datos: Una vez exportados los datos al destino (Azure SQL o archivos), utilice el script SQL de la sección Query para combinar estas tablas. Esta lógica de transformación convierte los registros de distintas entidades en un único registro de eventos cronológico.
Asigne los atributos: Asegúrese de que el conjunto de datos resultante asigne InvoiceNumber a Case ID, EventTime a Timestamp y Activity a Actividad Name, según los requisitos de la herramienta de Process Mining.
Valide y cargue los datos: Ejecute las comprobaciones de validación que se indican a continuación para confirmar que los datos son correctos. Una vez verificados, exporte el resultado final como archivo CSV o Parquet y cárguelo en ProcessMind.
Configuración
- Selección de entidades: Utilice VendorInvoiceHeaderEntity y VendorInvoiceLineEntity para los pasos del proceso anteriores al registro. Utilice VendorInvoiceJournalHeaderEntity para el documento legal registrado y VendorPaymentJournalLineEntity para el seguimiento de pagos.
- Envío incremental: Habilite esta opción en el proyecto de administración de datos para exportar solo los registros nuevos o modificados después de la carga completa inicial. Es fundamental para el rendimiento.
- Intervalos de fechas: Filtre por InvoiceDate >= [Start Date]. Evite las exportaciones sin límites, ya que pueden agotar el tiempo de espera.
- Filtro de empresa: D365 es un sistema multiempresa. Filtre siempre por DataAreaId para evitar mezclar datos de distintas entidades legales, salvo que necesite un análisis entre empresas.
- Historial de Workflow: Las entidades estándar para el historial de Workflow pueden generar un gran volumen de datos. Para mantenerlo manejable, asegúrese de exportar solo el historial relacionado con los tipos VendInvoice.
Consulta de ejemplo 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' Pasos
Compruebe la conectividad de BYOD: Asegúrese de tener instalado SQL Server Management Studio (SSMS) o una herramienta similar y de poder conectarse a la base de datos Azure SQL configurada como destino Bring Your Own Database (BYOD) para su entorno de Dynamics 365 Finance & Operations.
Confirme la exportación de entidades: Vaya al espacio de trabajo Data Management en Dynamics 365. Compruebe que las siguientes entidades (o sus tablas subyacentes) estén configuradas para exportarse a la base de datos BYOD:
VendInvoiceInfoTable(facturas pendientes),VendInvoiceInfoLine(líneas pendientes),VendInvoiceJour(facturas registradas),VendTrans(transacciones de proveedores),LedgerJournalTrans(líneas de diario),LedgerJournalTable(encabezados de diario) yWorkflowTrackingStatusTable(historial de Workflow).Configure el trabajo de exportación: Si estas tablas no se están exportando, cree un nuevo trabajo de exportación. Establezca Target Data Format en su base de datos SQL de BYOD. Elija Incremental Push para mantener los datos sincronizados sin volver a exportarlos por completo. Ejecute el trabajo para cargar las tablas.
Prepare el entorno SQL: Abra SSMS y conéctese a la base de datos Azure SQL de BYOD. Abra una nueva ventana de consulta.
Defina los parámetros: En el script que aparece a continuación, localice al principio la sección de declaración de variables. Actualice las variables
@StartDatey@EndDatepara que correspondan al período que desea analizar. Si necesita filtrar por una entidad legal específica, actualice las condiciones del filtroDATAAREAID.Ejecute el script: Ejecute el script T-SQL completo. El script utiliza
UNION ALLpara combinar datos de varias tablas en un único formato estandarizado de registro de eventos.Valide los datos: Compruebe si hay valores nulos en las columnas
InvoiceNumberoEventTime. Confirme que aparezcan tanto las facturas registradas (deVendInvoiceJour) como las pendientes (deVendInvoiceInfoTable).Exporte el resultado: Haga clic con el botón derecho en la cuadrícula de resultados de SSMS y seleccione Save Results As.... Guarde el archivo en formato CSV (delimitado por comas).
Prepare el formato para la carga: Abra el archivo CSV en Excel o en un editor de texto y compruebe que los formatos de fecha cumplan con ISO 8601 (YYYY-MM-DD HH:MM:SS), si ProcessMind lo requiere. Si el script se ejecutó correctamente, no debería ser necesario realizar más transformaciones.
Cargue los datos en ProcessMind: Importe el archivo CSV en ProcessMind y asigne las columnas
InvoiceNumbera Case ID,Activitya Nombre de actividad yEventTimea Timestamp.
Configuración
- Estrategia de exportación: Utilice Incremental Push en tablas de gran volumen, como
LedgerJournalTransyVendTrans, para reducir la carga de BYOD. Recurra a Full Push solo si sospecha que hay incoherencias en los datos. - Gestión de zonas horarias: Dynamics 365 almacena los datos en UTC. El script presupone que se utiliza UTC. Si el análisis requiere la hora local, aplique un ajuste
DATEADDen el script o durante la importación a ProcessMind. - Filtro de empresa: La columna
DataAreaIdrepresenta la entidad legal. De forma predeterminada, el script extrae datos de todas las entidades. AñadaWHERE DataAreaId = 'usmf'(por ejemplo) para filtrar una filial específica. - Historial de Workflow: La tabla
WorkflowTrackingStatusTablees fundamental para obtener las marcas de tiempo de aprobación. Asegúrese de incluirla en la configuración de exportación de BYOD, ya que suele quedar excluida de forma predeterminada. - Retención de datos: Tenga en cuenta que algunas rutinas de limpieza de D365 pueden eliminar el historial de Workflow completado o las líneas de diario registradas, lo que limitaría el alcance histórico del análisis de Process Mining.
Consulta de ejemplo 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; ¿Todo listo para empezar?
Utilice este Template para crear una base sólida de datos y empezar hoy mismo a optimizar sus flujos de trabajo de pago. Si necesita ayuda para identificar las tablas específicas de Dynamics 365, nuestro equipo está a su disposición.
Optimice ahora el procesamiento de pagos de cuentas por pagar
Reduzca los tiempos de ciclo un 30 % y elimine los retrasos de D365.
No se requiere tarjeta de crédito. Configuración en cinco minutos.