Su Plantilla de Datos para el Procesamiento de Pagos de Cuentas por Pagar
Su Plantilla de Datos para el Procesamiento de Pagos de Cuentas por Pagar
- Atributos clave para el análisis de proveedores y pagos
- Hitos esenciales del proceso para el ciclo de pago
- Lógica de extracción especializada para sistemas SAP S/4HANA
Atributos de Procesamiento de Pagos de Cuentas por Pagar
| Nombre | Descripción | ||
|---|---|---|---|
| Actividad Activity | El cambio de estado de tarea o `event` específico registrado para la factura. | ||
| Descripción Este atributo representa los distintos pasos del proceso que ocurren durante el ciclo de vida de la factura. Captura Para el análisis, este campo es crítico para mapear la variante del flujo de proceso. Permite que el motor de Por qué es importante Define los nodos en el mapa de procesos, permitiendo visualizar el flujo de trabajo y los cuellos de botella. Dónde obtener Derivado de Códigos de Transacción (TCODE) o Cabecera de Documento de Cambio (CDHDR) y Partida (CDPOS) Ejemplos Factura ContabilizadaBloqueo de Pago AplicadoEjecución de Lote de PagoFactura Compensada | |||
| Hora del Evento EventTime | El `timestamp` exacto cuando ocurrió la actividad. | ||
| Descripción La Hora del En el análisis, este atributo es esencial para calcular tiempos de ciclo, duración y rendimiento. Permite la medición de las brechas de tiempo entre pasos, como el tiempo transcurrido entre la recepción de la factura y la aprobación final, lo cual es crucial para identificar cuellos de botella y evaluar el rendimiento de los KPI como el Tiempo Promedio de Aprobación de Facturas. Por qué es importante Proporciona el orden cronológico de los eventos y es la base de todos los cálculos de rendimiento basados en el tiempo. Dónde obtener Campo CPUDT (Fecha de Entrada) y CPUTM (Hora de Entrada) de la tabla SAP BKPF, o campos UDATE y UTIME de CDHDR Ejemplos 2023-10-12T08:30:00.000Z2023-10-12T14:15:22.000Z2023-10-15T09:00:00.000Z | |||
| Número de Factura InvoiceNumber | El identificador único para la factura de proveedor que se está procesando. | ||
| Descripción El Número de Factura es la clave primaria para rastrear el ciclo de vida de una partida por pagar dentro del sistema SAP S/4HANA. Se refiere específicamente al número de documento contable generado al contabilizar la factura en el libro mayor. En la terminología estándar de SAP, esto corresponde al Número de Documento (BELNR) que se encuentra dentro de una Sociedad y un Año Fiscal específicos. En el análisis de procesos, este atributo sirve como ID de Por qué es importante Funciona como el Case ID definitivo, permitiendo la reconstrucción integral de todo el flujo de pagos. Dónde obtener Tabla SAP BKPF (Cabecera de Documento Contable) campo BELNR o campo BELNR de ACDOCA Ejemplos 1900000523510000289119000006015100003002 | |||
| Source System SourceSystem | El identificador de la instancia de SAP S/4HANA donde se originaron los datos. | ||
| Descripción Este atributo identifica la instalación o cliente ERP específico de donde se extrajeron los datos del proceso. En entornos con múltiples instancias SAP o sistemas heredados ejecutándose en paralelo, este campo asegura que se mantenga el linaje de los datos y permite comparaciones entre sistemas. Para el análisis, este campo actúa como un filtro de alto nivel. Ayuda a los analistas a segregar los datos al comparar el rendimiento entre diferentes instalaciones de sistemas regionales o al validar la consistencia de los datos durante proyectos de migración de sistemas. Asegura que cualquier variación del proceso atribuida a la configuración del sistema se contextualice adecuadamente. Por qué es importante Distingue las fuentes de datos en entornos multisistema, asegurando una segmentación precisa. Dónde obtener ID del Sistema (SY-SYSID) del contexto de instalación de SAP Ejemplos SAP_PROD_01S4H_NA_100ERP_EU_200 | |||
| Última actualización de datos LastDataUpdate | El `timestamp` que indica cuándo se extrajo o actualizó el registro por última vez. | ||
| Descripción La Última actualización de datos marca el momento exacto en que la información se cargó con éxito en la plataforma de process mining. No refleja la hora del evento de negocio, sino la actualidad del conjunto de datos. Esto es fundamental para mantener la confianza en los dashboards de análisis. Durante el análisis, este atributo ayuda a los usuarios a entender la vigencia de la información que consultan. Es vital al monitorizar tableros en tiempo casi real, como el de Análisis de bloqueos de pago, garantizando que las decisiones se tomen basándose en el estado más reciente de su sistema SAP S/4HANA. Por qué es importante Informa a los usuarios sobre la frescura de los datos, algo crítico para los dashboards operativos. Dónde obtener Generado por el proceso ETL / de extracción Ejemplos 2023-10-27T23:59:59.000Z2023-11-01T06:00:00.000Z | |||
| `Número de Proveedor` VendorNumber | El identificador único para el proveedor asociado a la factura. | ||
| Descripción El Número de Proveedor corresponde a la cuenta de acreedor específica en el submayor de SAP. Vincula la factura a los datos maestros que contienen las condiciones de pago, los datos bancarios y la información de contacto. En S/4HANA, esto a menudo está vinculado al concepto de En el análisis, este atributo es fundamental para el Por qué es importante Permite agrupar el desempeño por proveedor, algo fundamental para identificar las causas raíz de los retrasos. Dónde obtener Campo LIFNR de la tabla SAP BKPF o campo LIFNR de ACDOCA Ejemplos 100050VEND-US-99200400 | |||
| Condiciones de Pago PaymentTerms | La clave que representa las condiciones acordadas para el pago y los descuentos. | ||
| Descripción Las Condiciones de Pago definen cuándo vence una factura y si se aplican descuentos por pronto pago. Este código (p. ej., 'Z001') se asigna a reglas como 'Neto 30' o '2% 10, Neto 30'. Se copia del Maestro de Proveedores a la Factura, pero puede modificarse manualmente. En el análisis, este atributo es fundamental para los Por qué es importante Establece el cronograma previsto y los incentivos financieros, factores clave para el análisis de descuentos. Dónde obtener Campo ZTERM de la tabla SAP BSEG Ejemplos Z001NT300001 | |||
| Es Pago Atrasado IsLatePayment | Un indicador booleano que indica si el pago se realizó después de la fecha de vencimiento neta. | ||
| Descripción Este atributo calculado evalúa a verdadero si la Fecha de Compensación es estrictamente mayor que la Fecha de Vencimiento Neta. Sirve como un clasificador binario para el rendimiento del proceso. En el análisis, esta bandera se utiliza para contar el número de Por qué es importante Simplifica el cálculo de los KPIs de puntualidad. Dónde obtener Calculado: Fecha de Compensación > Fecha de Vencimiento Neta Ejemplos truefalse | |||
| Es Sin Intervención IsTouchless | Un indicador booleano que indica si la factura fue procesada sin intervención manual. | ||
| Descripción Este atributo se calcula analizando el En el análisis, esta es la métrica principal para el KPI de Tasa de Facturas sin Intervención Humana. Permite a la organización rastrear el éxito de las iniciativas de automatización e identificar qué Por qué es importante Es la métrica principal para medir la automatización y eficiencia del proceso. Dónde obtener Calculado basándose en la secuencia de actividades y tipos de usuario Ejemplos truefalse | |||
| Fecha de Compensación ClearingDate | La fecha en la que la factura fue compensada por el pago. | ||
| Descripción La Fecha de Compensación registra cuándo se liquidó la partida abierta en el libro mayor de cuentas por pagar, normalmente mediante un ciclo de pagos o una contabilización manual de pagos. Esto marca efectivamente el fin de la obligación. En el análisis, este atributo se utiliza para calcular el tiempo de ciclo final del proceso. Es el Por qué es importante Marca el final del proceso de pago y se utiliza para determinar la puntualidad del mismo. Dónde obtener Campo AUGDT de la tabla SAP BSEG o AUGDT Ejemplos 2023-11-012023-11-15 | |||
| Fecha de vencimiento neta NetDueDate | La fecha calculada en la que la factura debe ser pagada para evitar penalizaciones. | ||
| Descripción La Fecha de Vencimiento Neta es la fecha límite final para el pago. Se calcula sumando el número máximo de días de las condiciones de pago a la Fecha Base. Aunque a veces se almacena explícitamente, a menudo es un campo calculado en las vistas de análisis. En el análisis, este es el principal punto de referencia para el Rastreador de Pagos Atrasados y Penalizaciones. Comparar la Fecha de Compensación real con la Fecha de Vencimiento Neta genera la métrica 'Días de Pago Atrasado', que ayuda a cuantificar la eficiencia del equipo de Cuentas por Pagar y el riesgo de fricción con los proveedores. Por qué es importante Es la fecha límite del proceso; no cumplirla afecta la calificación crediticia y genera costes adicionales. Dónde obtener Calculado: Fecha Base + Días Máximos de Condiciones de Pago (ZBD1T/ZBD2T/ZBD3T) Ejemplos 2023-11-302023-12-01 | |||
| Importe de Factura InvoiceAmount | El importe bruto total de la factura en la moneda del documento. | ||
| Descripción Este atributo refleja el valor financiero de la factura tal como se registra en el documento fuente. Representa la obligación que debe liquidarse con el proveedor. En SAP S/4HANA, esto se almacena típicamente en el campo Cantidad en Moneda del Documento. En el análisis, el Monto de la Factura se utiliza para priorizar el trabajo. Por qué es importante Aporta el peso financiero de cada caso, algo fundamental para priorizar las ineficiencias de alto valor en el proceso. Dónde obtener Campo WRBTR de la tabla SAP BKPF o BSEG Ejemplos 1500.00250.5010000.00 | |||
| Motivo de bloqueo de pago PaymentBlockReason | El código que indica por qué una factura está bloqueada para el pago. | ||
| Descripción Este atributo contiene el código de motivo específico aplicado a una factura que impide que el ciclo de pago automático la procese. Los ejemplos incluyen 'A' para Bloqueado para Pago, 'R' para Verificación de Facturas, o bloqueos manuales establecidos por los usuarios. En el análisis, este campo es el impulsor principal del Por qué es importante Identifica la causa específica de las interrupciones del proceso, permitiendo un análisis de causa raíz enfocado. Dónde obtener Campo ZLSPR de la tabla SAP BSEG Ejemplos ABR* | |||
| Nombre de Usuario UserName | El ID del usuario que realizó la actividad específica. | ||
| Descripción El Nombre de Usuario captura el ID de En el análisis, este atributo permite el cálculo de la Tasa de Automatización de Actividades. Al distinguir entre usuarios humanos y cuentas de sistema, los analistas pueden medir el nivel de automatización en el proceso. También se utiliza en el Por qué es importante Distingue entre el trabajo manual y el automatizado, permitiendo calcular las tasas de automatización. Dónde obtener Campo USNAM de la tabla SAP BKPF o campo USERNAME de CDHDR Ejemplos BSMITHWF-BATCHRJONES | |||
| Sociedad CompanyCode | La unidad organizativa para la cual se crean el balance y la cuenta de resultados. | ||
| Descripción La Sociedad representa la entidad contable independiente dentro de la empresa. Es la unidad organizativa central en la contabilidad externa y se utiliza para estructurar los datos financieros. Cada factura se asigna a exactamente una Sociedad. En el análisis, este atributo permite la segmentación de KPIs por entidad legal o región. Se utiliza en Por qué es importante Segmenta el proceso por entidad legal, facilitando el benchmarking interno. Dónde obtener Campo BUKRS de la tabla SAP BKPF Ejemplos US01DE1010002000 | |||
| Tipo de Documento DocumentType | Clasifica el documento contable (ej., Factura de Proveedor, Pago, Nota de Crédito). | ||
| Descripción El Tipo de Documento es un código de dos caracteres en SAP que clasifica la transacción contable. Los tipos comunes incluyen 'KR' para Facturas de Proveedores, 'KZ' para Pagos a Proveedores y 'RE' para Recibo de Factura Bruta. Dicta el rango numérico y el estado de campo del documento. En el análisis, este atributo se utiliza para filtrar el alcance del proceso. Por ejemplo, un analista podría querer excluir las Notas de Crédito para centrarse únicamente en la eficiencia de los pagos salientes. También ayuda a identificar la combinación de tipos de transacción que se están procesando y apoya el Por qué es importante Categoriza el caso (factura vs. nota de crédito), permitiendo un análisis filtrado. Dónde obtener Campo BLART de la tabla SAP BKPF Ejemplos KRREKZKG | |||
| Días de Descuento por Pronto Pago 1 CashDiscountDays1 | El número de días a partir de la fecha base durante los cuales está disponible el primer descuento por pronto pago. | ||
| Descripción Este atributo define el período de tiempo para las condiciones de pago más favorables (p. ej., '10' en '2% 10, Neto 30'). Proviene de las condiciones almacenadas en la partida de la factura. En el análisis, esto ayuda a determinar la 'Fecha Objetivo' para el Optimizador de Descuentos por Pronto Pago. Si la factura se compensa dentro de esta ventana, el descuento se realiza. Este campo ayuda a medir el costo de oportunidad de los ciclos de procesamiento lentos. Por qué es importante Define la ventana de oportunidad para obtener ahorros financieros. Dónde obtener Campo ZBD1T de la tabla SAP BSEG Ejemplos 10140 | |||
| Documento de Compra PurchasingDocument | El número de Pedido de Compra asociado a la factura. | ||
| Descripción Este atributo vincula la factura al proceso de adquisición anterior. Contiene el número de Pedido de Compra (PO) contra el cual se está cotejando la factura. No todas las facturas (p. ej., gastos varios) tendrán una referencia de PO. En el análisis, este campo es vital para el Análisis de Tasa de Cotejo Triple. Permite a los analistas separar las facturas respaldadas por PO de las facturas sin PO, que normalmente tienen Por qué es importante Vincula Cuentas por Pagar con Compras, permitiendo el análisis de conciliación de tres vías (3-way match) y la extensión del proceso. Dónde obtener Campo EBELN de la tabla SAP BSEG Ejemplos 45000012344500009876 | |||
| Ejercicio Fiscal FiscalYear | El ejercicio fiscal al que pertenece la factura. | ||
| Descripción El Año Fiscal es un período de tiempo utilizado para informes financieros. Junto con la Sociedad y el Número de Documento, forma la clave primaria compuesta para un documento financiero en SAP. En el análisis, esto es una necesidad técnica para identificar Por qué es importante Requisito técnico para la identificación única de Dónde obtener Campo GJAHR de la tabla SAP BKPF Ejemplos 20232024 | |||
| Fecha Base BaselineDate | La fecha a partir de la cual se aplican las condiciones de pago y se calculan las fechas de vencimiento. | ||
| Descripción La Fecha Base es el punto de partida para calcular la fecha de vencimiento neta y los períodos de descuento por pronto pago. Suele ser la fecha de la factura o la fecha de contabilización, dependiendo de la configuración y los datos maestros del proveedor. En el análisis, esta fecha es un prerrequisito técnico para calcular el estado 'Está Atrasado'. Los errores en la fecha base a menudo conducen a pagos prematuros (impacto en el flujo de caja) o pagos atrasados (impacto en multas). Verificar la exactitud de esta fecha es parte del análisis de Por qué es importante Es el punto de referencia para todos los cálculos de fechas de vencimiento. Dónde obtener Campo ZFBDT de la tabla SAP BSEG Ejemplos 2023-10-012023-10-15 | |||
| Importe de Descuento Perdido DiscountLostAmount | El valor monetario de los descuentos por pronto pago que estaban disponibles pero no se aprovecharon. | ||
| Descripción Este atributo calculado representa el 'dinero dejado sobre la mesa'. Se deriva verificando si el pago se realizó después de la fecha límite del descuento y, en ese caso, calculando el valor del porcentaje de descuento perdido aplicado al importe de la factura. En el análisis, esta es una métrica financiera crítica para el Optimizador de Descuentos por Pronto Pago. Cuantifica el costo de la ineficiencia en moneda fuerte, proporcionando una convincente justificación económica para las mejoras del proceso. Por qué es importante Cuantifica la pérdida financiera directa ocasionada por los retrasos en el proceso. Dónde obtener Calculado: Si Fecha de Compensación > Fecha de Descuento, entonces Importe de Factura * % de Descuento Ejemplos 30.000.00150.00 | |||
| Moneda Currency | El código de moneda asociado con el importe de la factura. | ||
| Descripción El atributo Moneda especifica la denominación del Monto de la Factura, como USD, EUR o GBP. Permite la interpretación correcta de los valores financieros y es esencial al agregar datos en códigos de empresa internacionales. En el análisis, este campo asegura que los KPIs financieros se calculen correctamente. A menudo se utiliza para normalizar valores en una moneda de reporte para Por qué es importante Aporta contexto a los importes financieros, esencial para generar informes globales precisos. Dónde obtener Campo WAERS de la tabla SAP BKPF Ejemplos USDEURGBPJPY | |||
| Porcentaje de Descuento por Pronto Pago 1 CashDiscountPercentage1 | El porcentaje de descuento disponible si se paga dentro del primer período de descuento. | ||
| Descripción Este atributo representa la tasa de incentivo financiero ofrecida por el proveedor por pronto pago (p. ej., '2' en '2% 10'). En el análisis, esto se utiliza para calcular el valor del 'Descuento por Pronto Pago Potencial'. Al multiplicar este porcentaje por el Monto de la Factura, los Por qué es importante Cuantifica la tasa de ahorro potencial, algo básico para los cálculos de ROI. Dónde obtener Campo ZBD1P de la tabla SAP BSEG Ejemplos 2.03.00.0 | |||
Actividades de Procesamiento de Pagos de Cuentas por Pagar
| Actividad | Descripción | ||
|---|---|---|---|
| Bloqueo de Pago Aplicado | Significa que se ha establecido un bloqueo de pago en la partida de la factura, impidiendo que sea incluida en el ciclo de pagos. Esto se rastrea monitoreando los cambios en el campo ZLSPR de la tabla BSEG a través de documentos de cambio. | ||
| Por qué es importante Los bloqueos son la causa principal de los pagos atrasados y la fricción en el proceso, impactando directamente el Dónde obtener Tablas CDPOS y CDHDR (Documentos de Cambio), buscando actualizaciones en el campo BSEG-ZLSPR. Capturar Registrado cuando CDPOS detecta un cambio en ZLSPR Tipo de evento explicit | |||
| Bloqueo de Pago Eliminado | Indica que un bloqueo de pago previamente aplicado ha sido levantado, liberando efectivamente la factura para el pago. Esto se identifica cuando el campo ZLSPR en BSEG cambia de un valor a nulo o vacío. | ||
| Por qué es importante A menudo sirve como sustituto de 'Factura aprobada' en sistemas que no cuentan con logs de flujo de trabajo explícitos, marcando el final del cuello de botella. Dónde obtener Tablas CDPOS y CDHDR, buscando cambios en BSEG-ZLSPR a vacío. Capturar Registrado cuando CDPOS detecta la eliminación de ZLSPR Tipo de evento explicit | |||
| Documento de Pago Creado | La generación del documento contable que acredita al banco y debita al proveedor. Esto se encuentra en BKPF con un tipo de documento de pago (p. ej., ZP, KZ). | ||
| Por qué es importante La realización financiera del pago, utilizada para calcular los Días de Pago Pendiente (DPO). Dónde obtener Tabla BKPF, filtrada por Tipo de Documento (BLART) específico para pagos. Capturar Registrado cuando se crea el documento de pago en BKPF Tipo de evento explicit | |||
| Ejecución de Lote de Pago | Representa la ejecución del ciclo de pagos donde se generan las instrucciones de transferencia de dinero. Esto se rastrea mediante la actualización de estado en las tablas REGUH o REGUP. | ||
| Por qué es importante El compromiso operativo de pago, crítico para analizar la eficiencia del proceso de agrupación de pagos. Dónde obtener Tabla REGUH, normalmente correlacionada con la fecha y la identificación de la ejecución. Capturar Registrado cuando se actualiza el estado de la ejecución de pago Tipo de evento explicit | |||
| Factura Contabilizada | Representa el registro oficial del pasivo en el Libro Mayor General. Esta actividad se deriva del `timestamp` de creación en la tabla BKPF o de la fecha de entrada en la tabla ACDOCA. | ||
| Por qué es importante Este es el punto de partida principal para la línea de tiempo financiera, estableciendo la base para las fechas de vencimiento y el análisis de antigüedad. Dónde obtener Tabla BKPF, utilizando CPUDT (Fecha de Entrada) y CPUTM (Hora de Entrada). Capturar Registrado cuando se crea el registro en BKPF Tipo de evento explicit | |||
| Pago Liquidado | Marca la conciliación final donde la partida abierta en la cuenta del proveedor se compensa con el pago. Se captura desde el campo AUGDT (Fecha de compensación) en la tabla BSEG. | ||
| Por qué es importante El estado final del proceso, indicando que el ciclo de vida está completo y los libros están equilibrados. Las altas tasas de compensación manual indican ineficiencias en la conciliación. Dónde obtener Tabla BSEG, campo AUGDT (Fecha de Compensación). Capturar Registrado cuando se completa el campo AUGDT Tipo de evento explicit | |||
| Condiciones de Pago Cambiadas | Registra una actualización de las condiciones de pago en una factura abierta, lo que altera la fecha de vencimiento o la elegibilidad para descuentos. Esto se rastrea a través de los registros de cambios en el campo ZTERM de la tabla BSEG. | ||
| Por qué es importante Los cambios frecuentes sugieren errores en los Dónde obtener Tablas CDPOS y CDHDR, buscando actualizaciones en el campo BSEG-ZTERM. Capturar Registrado cuando CDPOS detecta un cambio en ZTERM Tipo de evento explicit | |||
| Descuento por Pronto Pago Perdido | Un evento calculado que marca la fecha en que expiró la elegibilidad para un descuento por pronto pago. Derivado al comparar la fecha de vencimiento del descuento con la fecha actual o la fecha de pago. | ||
| Por qué es importante Esencial para que el Optimizador de Descuentos por Pronto Pago visualice las oportunidades financieras perdidas. Dónde obtener Calculado: BSEG-ZFBDT + BSEG-ZBD1T (Días de Descuento 1). Capturar Derivar comparando la fecha con la Fecha de Vencimiento de Descuento Tipo de evento calculated | |||
| Factura Aparcada | Indica que se ha introducido una factura en SAP pero aún no se ha contabilizado en el Libro Mayor, a menudo utilizado para la entrada de `datos` preliminar. Esto se captura explícitamente de la tabla VBKPF o identificando documentos en BKPF con un código de estado de | ||
| Por qué es importante El "parking" indica el inicio de la fase de entrada de datos y ayuda a medir el tiempo de retraso entre la recepción y la obligación financiera. Dónde obtener Tabla VBKPF para datos de cabecera de documentos estacionados o BKPF con estado de documento específico (BSTAT = V). Capturar Registrado cuando se crea la entrada en VBKPF Tipo de evento explicit | |||
| Factura Revertida | Indica que el documento de factura fue anulado o cancelado. Se captura al verificar el campo STBLG (Documento de anulación) en la tabla BKPF. | ||
| Por qué es importante Representa el retrabajo y el fallo del proceso, identificando el desperdicio y el esfuerzo duplicado potencial. Dónde obtener Tabla BKPF, el campo STBLG no está vacío. Capturar Registrado cuando se completa el campo STBLG Tipo de evento explicit | |||
| Factura Vencida | Una marca de tiempo calculada que representa el momento en que la factura alcanzó su fecha de vencimiento neta. Esto se deriva al añadir los días de las condiciones de pago a la fecha base que se encuentra en la tabla BSEG. | ||
| Por qué es importante Actúa como punto de referencia para el Rendimiento de Pagos a Tiempo y el Rastreador de Penalizaciones por Pagos Atrasados. Dónde obtener Calculado: BSEG-ZFBDT (Fecha Base) + BSEG-ZBD1T/ZBD2T/ZBD3T (Días). Capturar Derivar comparando la fecha actual con la Fecha de Vencimiento Neta Tipo de evento calculated | |||
| Propuesta de Pago Creada | Significa que la factura ha sido incluida en una ejecución de propuesta de pago (F110), el primer paso del programa de pagos automatizado. Capturado de la tabla REGUH que almacena datos de liquidación. | ||
| Por qué es importante Indica que la factura ha sido seleccionada para el pago y ha superado las validaciones dentro del programa de pagos. Dónde obtener
Capturar Registrado cuando se crea el registro en REGUH Tipo de evento explicit | |||
| Variación de Cantidad Detectada | Actividad inferida que indica una discrepancia entre la cantidad facturada y la cantidad del recibo de mercancías. Se deriva al observar una Clave de bloqueo de pago específica (normalmente 'M' por Desviación de cantidad) aplicada a la partida. | ||
| Por qué es importante Crucial para analizar la eficiencia de la conciliación y la calidad de los Dónde obtener Inferido del valor BSEG-ZLSPR 'M' (o la configuración específica del sistema para bloqueos de cantidad). Capturar Compare el valor ZLSPR con 'M' Tipo de evento inferred | |||
| Variación de Precio Detectada | Actividad inferida que indica un descuadre entre el precio de la factura y el precio del pedido. Se obtiene al detectar una Clave de bloqueo de pago específica (normalmente 'R' para Verificación de facturas) aplicada automáticamente al contabilizar. | ||
| Por qué es importante Identifica las causas raíz del retrabajo manual y apoya el Análisis de la Tasa de Conciliación de Tres Vías. Dónde obtener Inferido del valor BSEG-ZLSPR 'R' (o la configuración específica del sistema para bloqueos de precio) al momento de la contabilización. Capturar Compare el valor ZLSPR con 'R' Tipo de evento inferred | |||
Guías de Extracción
Pasos
Identify Required CDS Views: Confirme la disponibilidad de las vistas CDS estándar de SAP S/4HANA. Las vistas principales necesarias son I_JournalEntry (Header), I_OperationalAcctgDocItem (Items/BSEG equivalent), I_SupplierInvoice (Logistics), I_PaymentProposalItem (F110) e I_ChangeDocument (para los logs).
Configure User Permissions: Asegúrese de que el usuario de la base de datos o el usuario del servicio técnico tenga privilegios SELECT en las vistas SQL DDL asociadas a las entidades CDS. Normalmente, esto se gestiona mediante SAP HANA Studio o ABAP Eclipse Development Tools (ADT).
Prepare the SQL Environment: Abra su interfaz SQL (por ejemplo, SAP HANA Studio, DBeaver conectado a HANA o un conector de Process Mining que admita SQL). Este método asume el acceso directo por SQL a la capa HANA donde las vistas CDS se exponen como vistas.
Define Scope: Determine el Código de Compañía (CompanyCode) y el rango del Ejercicio Fiscal para limitar el volumen de datos. Esto es fundamental para el rendimiento al consultar la vista Operational Accounting Document Item.
Implement Activity Logic: Copie la consulta SQL que se incluye a continuación. Esta consulta utiliza UNION ALL para combinar 14 bloques lógicos distintos en una única estructura de registro de eventos. Cada bloque se enfoca en una actividad específica (por ejemplo, Factura contabilizada, Pago compensado).
Handle Change Documents: La consulta incluye secciones para cambios en condiciones de pago y manipulación de bloqueos. Estos dependen de la vista I_ChangeDocument. Si esta vista no está activa en su versión específica de S/4, es posible que deba envolver las tablas subyacentes (CDHDR/CDPOS) en una vista CDS personalizada.
Address Calculated Events: Revise la lógica para Vencimiento de factura y Descuento por pronto pago perdido. Estos son eventos calculados que se generan sumando días a la fecha base que se encuentra en la vista de partidas operativas.
Execute Extraction: Ejecute la consulta. Para conjuntos de datos grandes, se recomienda encarecidamente particionar la extracción por Ejercicio Fiscal o Código de Compañía para evitar desbordamientos de memoria.
Verify Date Formats: Asegúrese de que la columna EventTime tenga el formato YYYY-MM-DD HH:MM:SS. SAP HANA SQL devuelve timestamps que podrían necesitar una conversión según su aplicación de destino.
Export Data: Guarde el conjunto de resultados como un archivo CSV o Parquet. Asegúrese de que los encabezados coincidan con las columnas definidas en la sentencia SELECT final.
Transform for Upload: Si su herramienta de process mining requiere un formato CSV específico (por ejemplo, una máscara de fecha concreta), aplique estas transformaciones en un script de post-procesamiento o dentro del SQL utilizando funciones TO_VARCHAR.
Final Validation: Cargue una muestra en ProcessMind y verifique que el Case ID (Número de factura) agrupe correctamente todas las actividades, desde la contabilización hasta la compensación.
Configuración
- Filtro por Sociedad: Restrinja la consulta a unidades organizativas específicas (CompanyCode = '1000') para mantener el contexto y el rendimiento.
- Rango de Fechas: Aplique un filtro en PostingDate o CreationDate (ej., últimos 12 meses) para gestionar el volumen de
datos. - Tipo de Cuenta: Filtre I_OperationalAcctgDocItem por FinancialAccountType = 'K' (Proveedor) para excluir líneas de GL y Cliente.
- Activación de Vistas CDS: Asegúrese de que las vistas I_JournalEntry, I_OperationalAcctgDocItem e I_PaymentProposalItem estén activas y liberadas para acceso SQL.
- Rendimiento del Registro de Cambios: Consultar I_ChangeDocument puede consumir muchos recursos. Limite estas subconsultas por ObjectClass 'BELEG' y nombres de campo específicos como ZLSPR y ZTERM.
a Consulta de ejemplo sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL Pasos
Identify Required CDS Views: Confirme la disponibilidad de las vistas CDS estándar de SAP S/4HANA. Las vistas principales necesarias son I_JournalEntry (Header), I_OperationalAcctgDocItem (Items/BSEG equivalent), I_SupplierInvoice (Logistics), I_PaymentProposalItem (F110) e I_ChangeDocument (para los logs).
Configure User Permissions: Asegúrese de que el usuario de la base de datos o el usuario del servicio técnico tenga privilegios SELECT en las vistas SQL DDL asociadas a las entidades CDS. Normalmente, esto se gestiona mediante SAP HANA Studio o ABAP Eclipse Development Tools (ADT).
Prepare the SQL Environment: Abra su interfaz SQL (por ejemplo, SAP HANA Studio, DBeaver conectado a HANA o un conector de Process Mining que admita SQL). Este método asume el acceso directo por SQL a la capa HANA donde las vistas CDS se exponen como vistas.
Define Scope: Determine el Código de Compañía (CompanyCode) y el rango del Ejercicio Fiscal para limitar el volumen de datos. Esto es fundamental para el rendimiento al consultar la vista Operational Accounting Document Item.
Implement Activity Logic: Copie la consulta SQL que se incluye a continuación. Esta consulta utiliza UNION ALL para combinar 14 bloques lógicos distintos en una única estructura de registro de eventos. Cada bloque se enfoca en una actividad específica (por ejemplo, Factura contabilizada, Pago compensado).
Handle Change Documents: La consulta incluye secciones para cambios en condiciones de pago y manipulación de bloqueos. Estos dependen de la vista I_ChangeDocument. Si esta vista no está activa en su versión específica de S/4, es posible que deba envolver las tablas subyacentes (CDHDR/CDPOS) en una vista CDS personalizada.
Address Calculated Events: Revise la lógica para Vencimiento de factura y Descuento por pronto pago perdido. Estos son eventos calculados que se generan sumando días a la fecha base que se encuentra en la vista de partidas operativas.
Execute Extraction: Ejecute la consulta. Para conjuntos de datos grandes, se recomienda encarecidamente particionar la extracción por Ejercicio Fiscal o Código de Compañía para evitar desbordamientos de memoria.
Verify Date Formats: Asegúrese de que la columna EventTime tenga el formato YYYY-MM-DD HH:MM:SS. SAP HANA SQL devuelve timestamps que podrían necesitar una conversión según su aplicación de destino.
Export Data: Guarde el conjunto de resultados como un archivo CSV o Parquet. Asegúrese de que los encabezados coincidan con las columnas definidas en la sentencia SELECT final.
Transform for Upload: Si su herramienta de process mining requiere un formato CSV específico (por ejemplo, una máscara de fecha concreta), aplique estas transformaciones en un script de post-procesamiento o dentro del SQL utilizando funciones TO_VARCHAR.
Final Validation: Cargue una muestra en ProcessMind y verifique que el Case ID (Número de factura) agrupe correctamente todas las actividades, desde la contabilización hasta la compensación.
Configuración
- Filtro por Sociedad: Restrinja la consulta a unidades organizativas específicas (CompanyCode = '1000') para mantener el contexto y el rendimiento.
- Rango de Fechas: Aplique un filtro en PostingDate o CreationDate (ej., últimos 12 meses) para gestionar el volumen de
datos. - Tipo de Cuenta: Filtre I_OperationalAcctgDocItem por FinancialAccountType = 'K' (Proveedor) para excluir líneas de GL y Cliente.
- Activación de Vistas CDS: Asegúrese de que las vistas I_JournalEntry, I_OperationalAcctgDocItem e I_PaymentProposalItem estén activas y liberadas para acceso SQL.
- Rendimiento del Registro de Cambios: Consultar I_ChangeDocument puede consumir muchos recursos. Limite estas subconsultas por ObjectClass 'BELEG' y nombres de campo específicos como ZLSPR y ZTERM.
a Consulta de ejemplo sql
/* SAP S/4HANA CDS View Extraction for Accounts Payable */
/* Combined Event Log Query */
/* 1. Invoice Parked */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Parked' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JE.CreationDateTime > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
'False' AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K' -- Vendor
AND JE.AccountingDocumentCategory = 'V' -- Parked Document
UNION ALL
/* 2. Invoice Posted */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Posted' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
JE.CreatedByUser AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
'False' AS IsLatePayment,
CASE WHEN JE.CreatedByUser = 'BATCH_USER' THEN 'True' ELSE 'False' END AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.AccountingDocumentCategory <> 'V' -- Exclude Parked
UNION ALL
/* 3. Price Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Price Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'R' -- Standard SAP Price Variance Block Key
UNION ALL
/* 4. Quantity Variance Detected (Inferred at Posting) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Quantity Variance Detected' AS Activity,
JE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
JEItem.PaymentBlockingReason AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.PaymentBlockingReason = 'M' -- Standard SAP Quantity Variance Block Key
UNION ALL
/* 5. Payment Block Applied (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Applied' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
CD.NewValue AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NULL AND CD.NewValue IS NOT NULL
UNION ALL
/* 6. Payment Block Removed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Block Removed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZLSPR'
AND CD.OldValue IS NOT NULL AND (CD.NewValue IS NULL OR CD.NewValue = '')
UNION ALL
/* 7. Payment Terms Changed (via Change Document) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Terms Changed' AS Activity,
CD.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
CD.NewValue AS PaymentTerms,
NULL AS PaymentBlockReason,
CD.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_ChangeDocument AS CD
JOIN I_JournalEntry AS JE ON CD.ObjectValue = CONCAT(JE.CompanyCode, JE.AccountingDocument)
JOIN I_OperationalAcctgDocItem AS JEItem ON JE.AccountingDocument = JEItem.AccountingDocument AND JE.CompanyCode = JEItem.CompanyCode
WHERE CD.ObjectClass = 'BELEG'
AND CD.TableName = 'BSEG'
AND CD.FieldName = 'ZTERM'
UNION ALL
/* 8. Invoice Due (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Due' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) < CURRENT_DATE
UNION ALL
/* 9. Cash Discount Lost (Calculated) */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Cash Discount Lost' AS Activity,
TO_TIMESTAMP(ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days))) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.CashDiscount1Days > 0
AND (JEItem.ClearingDate IS NULL OR JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.CashDiscount1Days)))
UNION ALL
/* 10. Payment Proposal Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Proposal Created' AS Activity,
PPI.ProposalRunDate AS EventTime, -- Often just a date, cast to timestamp if needed
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
AND PPI.FiscalYear = JE.FiscalYear
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JEItem.FinancialAccountType = 'K'
UNION ALL
/* 11. Payment Run Executed */
/* Derived from existence in payment tables with a run ID */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Run Executed' AS Activity,
PPI.PaymentRunDate AS EventTime,
JE.CompanyCode,
PPI.Supplier AS VendorNumber,
PPI.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PPI.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_PaymentProposalItem AS PPI
JOIN I_JournalEntry AS JE
ON PPI.CompanyCode = JE.CompanyCode
AND PPI.AccountingDocument = JE.AccountingDocument
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
WHERE PPI.PaymentRunID IS NOT NULL
UNION ALL
/* 12. Payment Document Created */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Document Created' AS Activity,
PayJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
PayJE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
PayJE.CreatedByUser AS UserName,
PayJE.PostingDate AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS PayJE
ON JEItem.ClearingJournalEntry = PayJE.AccountingDocument
AND JEItem.ClearingJournalEntryFiscalYear = PayJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingJournalEntry IS NOT NULL
UNION ALL
/* 13. Payment Cleared */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Payment Cleared' AS Activity,
TO_TIMESTAMP(JEItem.ClearingDate) AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
'System' AS UserName,
JEItem.ClearingDate,
ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) AS NetDueDate,
CASE WHEN JEItem.ClearingDate > ADD_DAYS(JEItem.DocumentItemDate, TO_INTEGER(JEItem.NetPaymentDays)) THEN 'True' ELSE 'False' END AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JEItem.ClearingDate IS NOT NULL
UNION ALL
/* 14. Invoice Reversed */
SELECT
JE.OriginalReferenceDocument AS InvoiceNumber,
'Invoice Reversed' AS Activity,
RevJE.CreationDateTime AS EventTime,
JE.CompanyCode,
JEItem.Supplier AS VendorNumber,
JEItem.AmountInTransactionCurrency AS InvoiceAmount,
JE.AccountingDocumentType AS DocumentType,
JEItem.PaymentTerms,
NULL AS PaymentBlockReason,
RevJE.CreatedByUser AS UserName,
NULL AS ClearingDate,
NULL AS NetDueDate,
NULL AS IsLatePayment,
NULL AS IsTouchless,
'S4HANA' AS SourceSystem,
CURRENT_TIMESTAMP AS LastDataUpdate
FROM I_JournalEntry AS JE
JOIN I_OperationalAcctgDocItem AS JEItem
ON JE.CompanyCode = JEItem.CompanyCode
AND JE.AccountingDocument = JEItem.AccountingDocument
AND JE.FiscalYear = JEItem.FiscalYear
JOIN I_JournalEntry AS RevJE
ON JE.ReverseDocument = RevJE.AccountingDocument
AND JE.ReverseDocumentFiscalYear = RevJE.FiscalYear
WHERE JEItem.FinancialAccountType = 'K'
AND JE.ReverseDocument IS NOT NULL