Su Plantilla de Datos de Pedido a Cobro - Facturación y Cobranza
Su Plantilla de Datos de Pedido a Cobro - Facturación y Cobranza
- Atributos recomendados para un análisis integral
- Pasos clave del proceso y hitos a seguir
- Guía práctica de extracción de datos para SAP ECC
Atributos de Pedido a Cobro - Facturación
| Nombre | Descripción | ||
|---|---|---|---|
| Actividad ActivityName | El nombre del evento de negocio o paso que ocurrió dentro del ciclo de vida de la factura. | ||
| Descripción Este atributo describe una acción específica o un cambio de estado en el proceso de facturación, como 'Factura Generada', 'Factura Contabilizada' o 'Pago de Cliente Recibido'. Estas actividades se derivan conceptualmente de varios eventos del sistema, cambios de estado en documentos o códigos de transacción específicos ejecutados por los usuarios. La secuencia de estas actividades forma el flujo del proceso, que es la base del análisis de Process Mining. Al examinar las actividades, las organizaciones pueden comprender qué pasos se toman, en qué orden y con qué frecuencia, revelando la ejecución real del proceso en comparación con el proceso diseñado. Por qué es importante Define los pasos en el mapa de proceso, lo que permite la visualización y el análisis de los flujos de proceso, las desviaciones y los cuellos de botella. Dónde obtener Este es un atributo conceptual derivado de múltiples fuentes, como códigos de transacción (CDHDR-TCODE), cambios de estado de documento (VBUK-FKSTK) y contabilizaciones de documentos contables. Ejemplos Factura GeneradaFactura ContabilizadaRecordatorio de Pago EmitidoFactura Compensada | |||
| Hora de Inicio EventTime | El timestamp que indica cuándo ocurrió una actividad o evento específico. | ||
| Descripción Tiempo de Evento captura la fecha y hora precisas de cada actividad en el ciclo de vida de la factura. Esta marca de tiempo es fundamental para todo análisis basado en el tiempo en el Process Mining, incluyendo el cálculo de tiempos de ciclo, la identificación de cuellos de botella y la monitorización del rendimiento del proceso frente a los acuerdos de nivel de servicio. Este atributo se construye típicamente combinando un campo de fecha, como Fecha de Contabilización (BUDAT), con un campo de hora (UZEIT) de varias tablas de SAP que registran cambios o la creación de documentos. Las marcas de tiempo precisas son críticas para construir un registro de eventos ( Por qué es importante Este atributo es la base para todo el análisis de rendimiento, permitiendo el cálculo de tiempos de ciclo, duraciones y tiempos de espera entre los pasos del proceso. Dónde obtener Construido a partir de varios campos de fecha y hora en múltiples tablas, como BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET), y tablas de registro de cambios como CDHDR (UDATE, UTIME). Ejemplos 2023-04-15T10:30:00Z2023-04-16T11:00:00Z2023-05-20T09:00:00Z | |||
| Número de Factura InvoiceNumber | El identificador único para el documento de facturación, que sirve como ID de caso principal para el proceso de facturación. | ||
| Descripción El Número de Factura, conocido como Número de Documento de Facturación en SAP, identifica de forma única cada factura. En Process Mining, actúa como el CaseId, agrupando todas las actividades relacionadas, como la creación, contabilización, envío, pago y compensación, en una única instancia de proceso de principio a fin. Analizar los procesos por Número de Factura permite una vista completa del ciclo de vida de cada transacción de facturación, desde su inicio hasta su liquidación final. Esto es crucial para calcular indicadores clave de rendimiento como los Días de Cartera (DSO) y el tiempo total del ciclo de la factura, proporcionando una base clara para la medición y mejora del rendimiento. Por qué es importante Es la clave esencial para rastrear el ciclo de vida completo de una factura, permitiendo el análisis de los tiempos de ciclo, los cuellos de botella y las variaciones para cada transacción de facturación individual. Dónde obtener Tabla SAP ECC: VBRK, Campo: VBELN Ejemplos 90001234900012359000123690001237 | |||
| Importe Total de la Factura TotalInvoiceAmount | El valor neto total del documento de facturación. | ||
| Descripción Este atributo representa el importe neto total de la factura, excluyendo impuestos. El importe de la factura es un dato financiero crítico asociado con el proceso de facturación. Se utiliza en varios análisis, como la segmentación de facturas en categorías de alto y bajo valor para ver si sus flujos de proceso difieren. También se puede usar para priorizar los esfuerzos de cobro o para investigar por qué las facturas de alto valor tardan más en ser aprobadas o pagadas. Este contexto financiero añade una capa significativa de profundidad al análisis de procesos. Por qué es importante Proporciona un contexto financiero esencial, permitiendo un análisis basado en el valor de la factura, como identificar si las facturas de alto valor siguen un proceso diferente o tardan más en liquidarse. Dónde obtener Tabla SAP ECC: VBRK, Campo: NETWR Ejemplos 1500.7525000.00500.0012345.67 | |||
| Nombre de Usuario UserName | El ID del usuario que ejecutó la actividad o creó el documento. | ||
| Descripción Este atributo captura el ID de usuario de SAP responsable de un evento dado, como crear una factura o contabilizar un pago. Es esencial para analizar el elemento humano del proceso. Con estos datos, es posible investigar variaciones de rendimiento entre usuarios o equipos, identificar necesidades de capacitación y detectar posibles problemas de cumplimiento. También se utiliza para diferenciar entre actividades manuales realizadas por usuarios humanos y pasos automatizados ejecutados por usuarios de sistema o de lote, lo cual es clave para calcular las tasas de automatización. Por qué es importante Permite el análisis del rendimiento del usuario, la distribución de la carga de trabajo y ayuda a distinguir entre actividades manuales y automatizadas, apoyando iniciativas de automatización y eficiencia. Dónde obtener Tabla SAP ECC: VBRK, Campo: ERNAM (Creado por) o BKPF, Campo: USNAM (Nombre de usuario) o CDHDR, Campo: USERNAME (Usuario). Ejemplos JSMITHBW_BATCHLROSSIMKUMAR | |||
| Número de Cliente CustomerNumber | Un número único que identifica al cliente al que se emite la factura. | ||
| Descripción El Número de Cliente vincula una factura a un cliente o socio comercial específico. Este atributo es crítico para segmentar y analizar el proceso de facturación en función de las características del cliente. Los analistas pueden usar este campo para comparar los Días de Cartera (DSO) entre diferentes clientes, identificar qué clientes pagan con frecuencia tarde o analizar el cumplimiento de los términos de pago. Comprender estos patrones es clave para gestionar las relaciones con los clientes y mejorar las estrategias de cobro de efectivo adaptadas a diferentes segmentos de clientes. Por qué es importante Permite un análisis centrado en el cliente, ayudando a identificar comportamientos de pago, evaluar el DSO por cliente y adaptar las estrategias de cobro. Dónde obtener Tabla SAP ECC: VBRK, Campo: KUNRG (Pagador) o KUNAG (Deudor). Ejemplos 100023200541CUST-A487910345 | |||
| Sociedad CompanyCode | El identificador de la entidad legal que emitió la factura. | ||
| Descripción La Sociedad (Company Code) representa una unidad legal y contable independiente en SAP. Todas las transacciones financieras, incluidas las facturas, se contabilizan en una sociedad específica. Este es un elemento de datos organizativo fundamental. En un contexto de Process Mining, la Sociedad se utiliza para analizar y comparar el rendimiento del proceso de facturación en diferentes entidades legales dentro de una corporación. Esto ayuda a identificar las mejores prácticas en una entidad que podrían aplicarse a otras y asegura que el análisis respete la estructura organizativa de la empresa. Por qué es importante Permite filtrar y comparar procesos entre diferentes entidades legales, lo cual es fundamental para el análisis financiero y el benchmarking organizacional. Dónde obtener Tabla SAP ECC: VBRK, Campo: BUKRS Ejemplos 10002000US01DE01 | |||
| Tipo de Documento de Facturación BillingDocumentType | Un código que categoriza el tipo de documento de facturación, como una factura, nota de crédito o nota de débito. | ||
| Descripción El Tipo de Documento de Facturación clasifica las transacciones en categorías distintas según su propósito comercial. Por ejemplo, 'F2' es una factura de cliente estándar, mientras que 'G2' representa una nota de crédito. Esta clasificación se configura en SAP para controlar cómo se procesan los diferentes documentos de facturación. Para Process Mining, este atributo es esencial para filtrar y comparar diferentes escenarios de facturación. Los analistas pueden examinar el proceso para facturas estándar por separado de las notas de crédito para comprender sus flujos únicos, tiempos de ciclo y desafíos, lo que lleva a mejoras de proceso más específicas. Por qué es importante Permite la segmentación y el análisis de diferentes procesos de facturación, como facturas estándar versus notas de crédito, que a menudo tienen flujos de proceso muy diferentes. Dónde obtener Tabla SAP ECC: VBRK, Campo: FKART Ejemplos F2G2L2IV | |||
| ¿Es Retrabajo? IsRework | Un indicador que señala si una actividad es un paso de retrabajo o corrección. | ||
| Descripción Este atributo calculado identifica actividades que representan retrabajo, como 'Factura Corregida' o anulaciones de documentos. Suele ser un indicador booleano derivado del nombre de la actividad o de los códigos de transacción asociados con correcciones y anulaciones, como 'VF11' para cancelar un documento de facturación. En Process Mining, este indicador es invaluable para cuantificar la cantidad de retrabajo en el proceso de facturación. Apoya directamente KPIs como la Tasa de Corrección de Facturas y ayuda a visualizar bucles de retrabajo en el mapa de procesos, destacando ineficiencias y problemas de calidad que aumentan los costos operativos y retrasan los pagos. Por qué es importante Ayuda a cuantificar las ineficiencias del proceso y los problemas de calidad al destacar el esfuerzo dedicado a corregir errores, apoyando directamente los KPIs de retrabajo. Dónde obtener Derivado del Nombre de Actividad o Código de Transacción. Por ejemplo, SI NombreDeActividad = 'Factura Corregida' O CódigoDeTransacción = 'VF11' ENTONCES verdadero SINO falso. Ejemplos truefalse | |||
| Automatizado IsAutomated | Un indicador que señala si una actividad fue realizada por un usuario del sistema o mediante automatización. | ||
| Descripción Este atributo calculado es un indicador booleano que distingue entre actividades manuales y automatizadas. Se deriva típicamente al verificar el atributo Nombre de Usuario contra una lista de IDs de usuario de sistema o de lote conocidos, como 'BATCHUSER' o 'SAPSYSTEM'. Este indicador es esencial para medir el nivel de automatización en el proceso de facturación, lo cual es un objetivo clave para muchas organizaciones que buscan mejorar la eficiencia y reducir costos. El KPI de Tasa de Facturación Automatizada se calcula directamente a partir de este atributo, helping to track the progress of automation initiatives. Por qué es importante Soporta directamente el cálculo de la tasa de facturación automatizada, ayudando a medir la eficiencia del proceso y a rastrear el impacto de los proyectos de automatización. Dónde obtener Derivado del atributo Nombre de Usuario. La lógica sería algo como: SI NombreDeUsuario ESTÁ EN ('BATCH', 'SYSTEM', 'RFCUSER') ENTONCES verdadero SINO falso. Ejemplos truefalse | |||
| Código de Transacción TransactionCode | El código de transacción de SAP utilizado para realizar una actividad. | ||
| Descripción El Código de Transacción, o T-Code, es un identificador único para una función o programa específico en SAP, como 'VF01' para crear un documento de facturación. Capturar el T-Code para cada evento proporciona una vista técnica y a nivel de sistema de cómo se ejecutó un proceso. Esta información es muy valiosa para el análisis de la causa raíz. Por ejemplo, si los errores son comunes, los analistas pueden verificar si se está utilizando un código de transacción no estándar. También ayuda a derivar el nombre de la actividad y a comprender qué funcionalidades del sistema se emplean en el proceso. Por qué es importante Proporciona el contexto técnico de cómo se realizó una actividad, permitiendo el análisis de la causa raíz de las desviaciones del proceso y ayudando a identificar acciones de usuario no estándar. Dónde obtener Tabla SAP ECC: CDHDR, Campo: TCODE Ejemplos VF01VF02FB01F-28 | |||
| Condiciones de Pago PaymentTerms | Las condiciones bajo las cuales un vendedor completará una venta, incluyendo el calendario de pagos. | ||
| Descripción Los Términos de Pago definen las reglas para cuándo vence un pago, como 'Neto 30' o 'Neto 60'. Estos términos se acuerdan con el cliente y son un factor clave para determinar el flujo de caja. Analizar el proceso por términos de pago puede revelar si ciertos términos están asociados con ciclos de pago más largos o tasas más altas de pagos atrasados. Esta información puede ayudar a la empresa a negociar mejores términos con los clientes o a ajustar su planificación financiera. También es un dato clave para calcular la fecha de vencimiento de la factura. Por qué es importante Ayuda a analizar el comportamiento de pago del cliente y el impacto en el flujo de caja, basándose en los términos negociados, y ofrece información clave para optimizar los acuerdos comerciales. Dónde obtener Tabla SAP ECC: VBRK, Campo: ZTERM Ejemplos Z030Z060Z001 | |||
| Fecha de Compensación ClearingDate | La fecha en que se recibió el pago y la factura se compensó de las cuentas por cobrar. | ||
| Descripción La Fecha de Compensación es la fecha en la que un elemento abierto, como una factura, se marca como pagado o 'compensado' en el sistema financiero. Esta fecha representa efectivamente cuándo se considera cobrado y conciliado el efectivo. Esta es una de las fechas más importantes en el ciclo de Pedido a Cobro. Sirve como punto final para calcular los Días de Cartera (DSO) y el tiempo total del ciclo de factura a efectivo. Analizar la fecha de compensación ayuda a medir la efectividad del proceso de cobro. Por qué es importante Marca el paso final del ciclo de vida de la factura, sirviendo como fecha de finalización para los cálculos de DSO y el tiempo de ciclo general, y reflejando la eficiencia del cobro de efectivo. Dónde obtener Tabla SAP ECC: BSAD, Campo: AUGDT Ejemplos 2023-05-142023-06-012023-06-25 | |||
| Fecha de Contabilización PostingDate | La fecha en la que el documento se contabiliza en los libros de contabilidad financiera. | ||
| Descripción La Fecha de Contabilización determina el período fiscal en el que se registra la transacción en el Libro Mayor. Es una fecha crítica para la contabilidad y la información financiera. Los retrasos entre la fecha de creación del documento y la fecha de contabilización pueden indicar ineficiencias en el manejo interno de los documentos de facturación. Desde la perspectiva de Process Mining, la fecha de contabilización marca un hito clave en el ciclo de vida de la factura. El desfase de tiempo entre la generación y la contabilización de la factura puede ser un indicador clave de rendimiento para la eficiencia del departamento de facturación. Por qué es importante Marca un hito financiero clave y es crucial para la contabilidad. El desfase de tiempo entre la creación y la contabilización de la factura es una medida clave de la eficiencia del procesamiento interno. Dónde obtener Tabla SAP ECC: BKPF, Campo: BUDAT Ejemplos 2023-04-152023-04-172023-05-21 | |||
| Fecha de Vencimiento de Factura InvoiceDueDate | La fecha en la que se espera que el cliente realice el pago. | ||
| Descripción La Fecha de Vencimiento de la Factura es la fecha límite para el pago, según lo especificado por los términos de pago. Esta fecha es fundamental para la gestión de cuentas por cobrar y el inicio de actividades de cobro. Este atributo se utiliza para calcular el KPI de Tasa de Pagos Puntuales, comparándolo con la fecha de pago real. Analizar las facturas por su fecha de vencimiento ayuda a pronosticar el flujo de caja y a priorizar los esfuerzos de cobro para pagos próximos o vencidos. Normalmente se deriva de la fecha base y los términos de pago. Por qué es importante Este es el punto de referencia para medir el rendimiento de los pagos puntuales y es esencial para la gestión de cuentas por cobrar y la previsión del flujo de caja. Dónde obtener Calculado basándose en la fecha base (BSEG-ZFBDT) y los términos de pago (BSEG-ZTERM). No siempre se almacena en un campo directo. Ejemplos 2023-05-152023-05-302023-06-20 | |||
| Fecha del Documento DocumentDate | La fecha en el documento original, proporcionada por el proveedor o creador. | ||
| Descripción La Fecha de Documento es la fecha en que se emitió el documento original. Para la facturación, esta es típicamente la fecha en que se creó la factura y a menudo se usa como base para calcular la fecha de vencimiento del pago. Esta fecha es crucial para la información financiera y para calcular métricas clave como los Días de Cartera (DSO). Representa el punto de partida del período de cobro desde el punto de vista del cliente. Analizar las discrepancias entre la fecha del documento y la fecha de contabilización puede revelar retrasos internos en el procesamiento de facturas entrantes. Por qué es importante Sirve como base para calcular la antigüedad de la factura y el DSO, proporcionando un punto de referencia crítico para el análisis financiero y de los términos de pago. Dónde obtener Tabla SAP ECC: VBRK, Campo: FKDAT (Fecha de Facturación) Ejemplos 2023-04-152023-04-162023-05-20 | |||
| Moneda Currency | El código de moneda para los importes especificados en la factura. | ||
| Descripción Este atributo indica la moneda de la transacción, como USD, EUR o JPY. Proporciona el contexto necesario para cualquier valor monetario, como el Importe Total de la Factura. Al analizar datos de una organización multinacional, el campo de moneda es esencial para interpretar y convertir correctamente las cifras financieras. Permite una elaboración de informes coherente y garantiza que los importes no se agreguen sin la conversión de moneda adecuada, lo que daría lugar a un análisis financiero incorrecto. Por qué es importante Proporciona el contexto necesario para todos los valores monetarios, asegurando un análisis financiero preciso, especialmente en un entorno multi-moneda. Dónde obtener Tabla SAP ECC: VBRK, Campo: WAERK Ejemplos USDEURGBPJPY | |||
| Número de Documento de Venta SalesDocumentNumber | El identificador del pedido de venta original que dio lugar a la factura. | ||
| Descripción Este atributo proporciona un vínculo directo desde la factura de vuelta al pedido de venta que inició la transacción. Esta trazabilidad es crucial para un análisis completo de Pedido a Cobro de principio a fin. Al conectar el proceso de facturación con el proceso de pedido de venta precedente, las organizaciones pueden analizar el tiempo total del ciclo desde el pedido del cliente hasta la recepción del efectivo. Ayuda a identificar si los retrasos en la facturación son causados por problemas en ventas, cumplimiento o en el propio departamento de facturación, proporcionando una visión más holística del proceso. Por qué es importante Vincula el proceso de facturación de nuevo al pedido de venta, lo que permite un verdadero análisis de Pedido a Cobro de principio a fin y ayuda a identificar retrasos entre departamentos. Dónde obtener Tabla SAP ECC: VBRP, Campo: VGBEL Ejemplos 100000451000004610000047 | |||
| Organización de Ventas SalesOrganization | La unidad organizacional responsable de la venta de productos o servicios. | ||
| Descripción La Organización de Ventas es una unidad organizativa en SAP responsable de distribuir bienes y servicios y negociar las condiciones de venta. Es un campo clave para estructurar las operaciones de ventas y distribución. En Process Mining, este atributo permite el análisis del proceso de facturación desde el punto de vista de la estructura de ventas. Permite la comparación del rendimiento entre diferentes organizaciones de ventas, helping to identify which regions or business lines are more efficient in their billing processes and supporting initiatives to standardize best practices. Por qué es importante Permite la evaluación comparativa del rendimiento y el análisis entre diferentes divisiones de ventas o regiones, ayudando a identificar mejores prácticas y áreas de mejora. Dónde obtener Tabla SAP ECC: VBRK, Campo: VKORG Ejemplos 1000NA01EU01AP01 | |||
| Source System SourceSystem | Identifica el sistema de origen del que se extrajeron los datos. | ||
| Descripción Este atributo especifica el sistema de registro de donde se originaron los datos. En un entorno corporativo con múltiples instancias de ERP o sistemas integrados, este campo ayuda a distinguir entre datos de diferentes fuentes. Para Process Mining, es esencial para la validación de datos y para análisis que comparan procesos entre diferentes sistemas o unidades organizativas. Normalmente se rellena como un valor estático durante el proceso de extracción de datos para etiquetar el conjunto de datos. Por qué es importante Proporciona contexto sobre el origen de los datos, lo cual es crucial en entornos con múltiples sistemas para garantizar la integridad de los datos y permitir un análisis específico del sistema. Dónde obtener Este es típicamente un valor estático añadido durante el proceso de extracción, transformación y carga (ETL) de datos, identificando la instancia específica de SAP ECC (por ejemplo, 'ECC_PROD_NA'). Ejemplos `SAP_ECC_PROD`ECC_EU_100SAP_US_FIN | |||
| Última actualización de datos LastDataUpdate | El timestamp de la actualización de datos o extracción más reciente del sistema de origen. | ||
| Descripción Este atributo indica la última vez que el conjunto de datos se actualizó desde el sistema de origen. Proporciona un contexto crucial para cualquier análisis, asegurando que los usuarios comprendan la actualidad de los datos que están viendo. En paneles de control e informes, esta marca de tiempo informa a las partes interesadas sobre la puntualidad de los datos y ayuda a gestionar las expectativas sobre la visibilidad de transacciones muy recientes. Normalmente se genera al final del proceso de extracción de datos. Por qué es importante Informa a los usuarios sobre la actualidad de los datos, lo cual es fundamental para tomar decisiones operativas basadas en el análisis. Dónde obtener Generado y almacenado durante el proceso de extracción, transformación y carga (ETL) de datos. Ejemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
Actividades de Pedido a Cobro - Facturación
| Actividad | Descripción | ||
|---|---|---|---|
| Factura Compensada | El estado final de una factura pagada con éxito, que indica que la partida abierta ha sido cerrada por un pago o nota de crédito correspondiente. La factura se considera totalmente saldada. | ||
| Por qué es importante Marca la finalización exitosa del ciclo de Pedido a Cobro para una factura. Este es el evento final principal para medir el Tiempo de Ciclo Promedio Total de la Factura. Dónde obtener Ocurre cuando los campos de documento de compensación (AUGBL) y fecha de compensación (AUGDT) se rellenan para la partida individual de la factura en la tabla BSEG. Capturar El evento ocurre en la fecha de compensación (AUGDT) registrada en la tabla BSEG para la partida individual de la factura. Tipo de evento explicit | |||
| Factura Contabilizada | La factura se registra formalmente en el sub-libro mayor de Cuentas por Cobrar y en el Libro Mayor General. Este evento hace que la factura sea legalmente vinculante y refleja la deuda del cliente. | ||
| Por qué es importante Este es un hito crítico que inicia oficialmente el reloj de cobro. El tiempo entre la generación y la contabilización puede resaltar retrasos internos de procesamiento que afectan el flujo de caja. Dónde obtener Registrado en la tabla BKPF. La fecha de contabilización (BUDAT) para el número de documento (BELNR) marca este evento. Para los documentos preliminares, es cuando se convierte en un documento contabilizado. Capturar De la fecha de contabilización (BUDAT) en la tabla BKPF para el documento de factura. Tipo de evento explicit | |||
| Factura enviada al cliente | Indica que la factura ha sido enviada al cliente a través de un canal de salida definido como impresión, correo electrónico o EDI. Esto se captura normalmente de los registros del sistema de gestión de salidas. | ||
| Por qué es importante Este evento es un hito clave que activa el reloj de los términos de pago del cliente. Los retrasos aquí impactan directamente cuándo se puede esperar un pago y afectan la eficiencia del cobro. Dónde obtener Se puede inferir de la fecha y hora de procesamiento en la tabla de estado de mensajes (NAST) para el tipo de salida correspondiente a la factura. Capturar Se infiere de la entrada de la tabla NAST con estado de procesamiento '1' (procesado con éxito). Tipo de evento inferred | |||
| Factura Generada | Marca la creación del documento de facturación en el sistema. Este evento se captura cuando se crea una nueva entrada en la tabla de cabecera de documento contable (BKPF) con un tipo de documento específico para facturas. | ||
| Por qué es importante Este es el punto de partida de todo el proceso de facturación. Analizar el tiempo desde este evento ayuda a medir el Tiempo de Ciclo de Creación de Facturas y es la base para calcular los Días de Cartera (DSO). Dónde obtener Registrado en la tabla BKPF. La fecha (CPUDT) y hora (CPUTM) de creación para un número de documento específico (BELNR) marcan este evento. El tipo de documento (BLART) lo identifica como una factura. Capturar Del timestamp de creación (CPUDT) en la tabla BKPF para el documento de factura. Tipo de evento explicit | |||
| Pago de cliente recibido | Se ha recibido un pago del cliente y se ha contabilizado en el sistema como un recibo de efectivo o depósito bancario. Esto crea un documento de pago separado que aún no se ha aplicado a la factura específica. | ||
| Por qué es importante Este es un hito importante en el ciclo de conversión de efectivo. El tiempo desde el envío de la factura hasta la recepción del pago es un componente principal de los Días de Cartera (DSO). Dónde obtener Registrado como un nuevo documento en BKPF y BSEG, típicamente con un tipo de documento que indica el pago del cliente, como 'DZ'. La fecha de contabilización (BUDAT) marca el evento. Capturar De la fecha de contabilización del documento de pago del cliente en BKPF. Tipo de evento explicit | |||
| Caso de Disputa Creado | Se ha registrado una disputa formal contra la factura, típicamente debido a quejas del cliente. Esto se registra en el sistema de Gestión de Disputas de SAP. | ||
| Por qué es importante Identifica facturas con riesgo de pago atrasado y resalta problemas subyacentes que causan insatisfacción del cliente. Marca el inicio de un importante proceso de gestión de excepciones. Dónde obtener Capturado desde la creación de un caso en la tabla de casos de disputa (UDM_CASE) vinculada al documento contable de la factura. Capturar Registrado cuando un usuario crea un caso de disputa a través de la transacción UDM_DISPUTE. Tipo de evento explicit | |||
| Factura Aparcada | El documento de factura se ha guardado en un estado preliminar sin ser contabilizado en el libro mayor. Esto se utiliza a menudo cuando la información está incompleta o requiere revisión antes de la contabilización final. | ||
| Por qué es importante Rastrea los pasos previos a la contabilización y posibles retrasos. Una larga duración en estado preliminar puede indicar problemas de calidad de datos o cuellos de botella en el proceso de pre-aprobación. Dónde obtener Los documentos preliminares se almacenan en la tabla VBKPF. La creación de un documento aquí, que posteriormente se contabiliza, significa esta actividad. Capturar Registrado al guardar un documento preliminar utilizando una transacción como FV70. Tipo de evento explicit | |||
| Factura Aprobada | Representa la aprobación formal de la factura, permitiendo que se contabilice o se envíe al cliente. Esto a menudo se infiere cuando un documento preliminar se convierte en un documento contabilizado. | ||
| Por qué es importante Rastrea el flujo de trabajo de aprobación interno, que es una fuente común de cuellos de botella. Analizar esta actividad ayuda a respaldar el panel de análisis del flujo de aprobación de facturas al identificar aprobadores lentos. Dónde obtener Se puede inferir por la transición de un documento de estado preliminar (en VBKPF) a estado contabilizado (en BKPF). Alternativamente, si se utiliza un sistema de flujo de trabajo, este puede ser un evento explícito en los registros de flujo de trabajo. Capturar Compare la fecha de creación del documento preliminar (VBKPF) con la fecha de contabilización del documento final (BKPF). Tipo de evento inferred | |||
| Factura Cancelada por Incobrable | Un estado final alternativo donde la factura se considera incobrable y el importe pendiente se compensa con una cuenta de deudas incobrables. Esto cierra la factura sin un pago del cliente. | ||
| Por qué es importante Representa un resultado negativo del proceso y una pérdida de ingresos. El seguimiento de estos eventos ayuda a analizar las razones de las deudas incobrables y a mejorar las políticas de gestión de crédito. Dónde obtener Se infiere analizando la transacción de compensación de la factura. Si el documento de compensación se contabiliza en una cuenta de mayor de gastos por deudas incobrables específica, la factura se considera incobrable. Capturar Se infiere cuando la transacción de compensación implica una contabilización en una cuenta de mayor de deudas incobrables designada. Tipo de evento inferred | |||
| Factura Corregida | Representa una actividad de retrabajo donde una factura inicial se encontró incorrecta y fue posteriormente anulada. Esto se captura identificando documentos de anulación vinculados a la factura original. | ||
| Por qué es importante Destaca ineficiencias del proceso y problemas de calidad. Una alta frecuencia de correcciones indica problemas en los datos de ventas o facturación previos, sirviendo de apoyo al panel de control de Tasas de Retrabajo y Errores en Facturas. Dónde obtener Se identifica al encontrar un documento de anulación donde BKPF-STBLG apunta al documento original. La creación de este documento de anulación es el evento. Capturar Registrado cuando se crea un documento de anulación (por ejemplo, a través de FB08). Tipo de evento explicit | |||
| Fecha de Vencimiento de Factura Alcanzada | Un evento calculado que marca el día en que el pago de la factura vence oficialmente según los términos de pago. No es una actividad realizada por un usuario o sistema, sino un punto crítico en el tiempo. | ||
| Por qué es importante Esencial para analizar el comportamiento de pago y el cumplimiento. Es la base para determinar los pagos a tiempo vs. atrasados y calcular el KPI de Tasa de Pago a Tiempo. Dónde obtener Derivado al comparar la fecha actual con la fecha de vencimiento neta. La fecha de vencimiento se encuentra en el campo BSEG-ZFBDT o se calcula a partir de la fecha base y los términos de pago. Capturar Compare la fecha del sistema con el campo de fecha de vencimiento neto en la partida individual de la factura (BSEG). Tipo de evento calculated | |||
| Pago Aplicado a la Factura | El pago del cliente recibido ha sido conciliado y aplicado contra la factura abierta específica, marcando la partida para su compensación. Este es el paso de conciliación que vincula el pago con la deuda. | ||
| Por qué es importante Esta actividad es crucial para medir el Tiempo de Ciclo de Aplicación de Efectivo. Los retrasos en la aplicación de efectivo pueden falsear el verdadero estado de las cuentas por cobrar y ocultar el efectivo disponible. Dónde obtener Se infiere de la transacción de compensación, por ejemplo, F-32, que rellena los campos de compensación en la partida individual de la factura. La marca de tiempo del evento es la fecha de compensación. Capturar Se infiere de la fecha de compensación (AUGDT) que se rellena en la tabla de partidas de factura (BSEG). Tipo de evento inferred | |||
| Recordatorio de Pago Emitido | El sistema ha generado y enviado un aviso de requerimiento de pago o recordatorio al cliente por una factura vencida. Esto se captura de los registros históricos de requerimientos. | ||
| Por qué es importante Ayuda a evaluar la efectividad de la estrategia de cobro. Analizar el tiempo desde el recordatorio hasta la recepción del pago es clave para el KPI de Eficacia de Recordatorios de Pago. Dónde obtener Registrado en las tablas de datos de requerimiento de pago, específicamente MHNK (Cabecera de datos de requerimiento de pago) y MHND (Partidas individuales de datos de requerimiento de pago), que se generan mediante la ejecución del requerimiento de pago (Transacción F150). Capturar Registrado al ejecutar una corrida de requerimiento de pago (F150) para el elemento vencido. Tipo de evento explicit | |||
Guías de Extracción
Pasos
- Acceder al Editor ABAP: Inicie sesión en su sistema SAP ECC. Navegue al Editor ABAP usando el código de transacción
SE38. - Crear Programa: Ingrese un nombre para su nuevo programa en el campo Programa, por ejemplo,
Z_PM_O2C_INVOICE_EXTRACT, y haga clic en el botón Crear. Proporcione un título descriptivo y establezca el Tipo de programa como 'Programa Ejecutable'. - Definir Pantalla de Selección: En el código fuente del programa, defina los parámetros de la pantalla de selección. Esto permite a los usuarios filtrar los datos para la extracción. Los parámetros clave incluyen el rango de fechas de creación del documento (
S_ERDAT), la Sociedad (S_BUKRS) y el Tipo de Documento de Facturación (S_VBTYP). - Definir Estructuras de Datos: Declare una estructura de tabla interna que contendrá los datos finales del registro de eventos (
event log). Esta estructura debe incluir campos paraInvoiceNumber,ActivityName,EventTimey atributos recomendados comoUserName,BillingDocumentType,CustomerNumber,CompanyCodeyTotalInvoiceAmount. - Implementar Lógica de Selección de Datos: Escriba la lógica ABAP principal para seleccionar datos. Primero, seleccione los documentos de facturación primarios de las tablas
VBRKyBKPFbasándose en las entradas de la pantalla de selección del usuario. Almacénelos en una tabla interna temporal. - Extraer Actividades: Recorra la lista inicial de documentos de facturación. Para cada documento, realice selecciones posteriores de varias tablas para identificar las 13 actividades requeridas. Por ejemplo, consulte la tabla
NASTpara eventos 'Factura Enviada al Cliente',BSEGpara información de compensación ('Factura Compensada', 'Pago Aplicado'), yMHNKpara datos de recordatorio ('Recordatorio de Pago Emitido'). - Construir la Tabla de Registro de Eventos: Para cada actividad encontrada en el paso anterior, complete un nuevo registro en su tabla interna final del registro de eventos. Asegúrese de que
InvoiceNumber,ActivityName,EventTimey otros atributos se mapeen correctamente desde las tablas de origen. - Escribir al Servidor de Aplicaciones: Una vez que el bucle se haya completado y la tabla final del registro de eventos esté completamente poblada, use las sentencias
OPEN DATASET,LOOP AT... TRANSFERyCLOSE DATASETpara escribir el contenido de la tabla interna en un archivo plano en el servidor de aplicaciones SAP. Especifique una ruta de archivo lógica que sea accesible. - Recuperar el Archivo: Use el código de transacción
AL11para navegar por los directorios del servidor de aplicaciones y localizar el archivo generado. Coordine con su equipo de SAP Basis para descargar el archivo del servidor a su máquina local o a una ubicación de red compartida. - Formato Final: Abra el archivo descargado y confirme que es un archivo de valores separados por comas (CSV) con una fila de encabezado. Asegúrese de que el archivo se guarde con codificación UTF-8 para ser compatible con ProcessMind para su carga.
Configuración
- Requisitos Previos: Acceso para crear y ejecutar programas ABAP (transacción SE38). Autorización para leer de tablas FI y SD, incluyendo
VBRK,VBRP,BKPF,BSEG,NAST,MHNK, yUDM_CASE_ATTR00(para Gestión de Disputas). - Selección de Rango de Fechas: El programa debe tener un parámetro de rango de fechas obligatorio, típicamente basado en la fecha de creación del documento (
ERDATen VBRK/BKPF). Para la extracción inicial, se recomienda un rango de 3 a 6 meses para mantener el conjunto de datos manejable. - Filtros Clave: Siempre filtre por
CompanyCode(BUKRS) para limitar el alcance de la extracción. También es muy recomendable filtrar por Tipo de Documento de Facturación (VBTYPde VBRK) o Tipo de Documento Contable (BLARTde BKPF) para incluir solo tipos de factura relevantes, por ejemplo, 'RV' para facturas contables estándar, y excluir notas de crédito u otros documentos. - Consideraciones de Rendimiento: Para grandes conjuntos de datos que cubren más de unos pocos meses, el programa debe ejecutarse como un job en segundo plano para evitar tiempos de espera de sesión. La lógica ABAP debe optimizarse para usar lecturas de tabla indexadas y evitar bucles anidados con selecciones de base de datos dentro de ellos. Seleccionar datos en tablas internas primero y luego procesarlos es el enfoque preferido.
- Configuración del Archivo de Salida: El código ABAP debe especificar la ruta del archivo de salida en el servidor de aplicaciones y el delimitador para el archivo CSV, típicamente una coma o un punto y coma. Asegúrese de que la ruta sea un directorio configurado globalmente y accesible.
a Consulta de ejemplo abap
REPORT Z_PM_O2C_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables
*&---------------------------------------------------------------------*
TABLES: VBRK, BKPF.
*&---------------------------------------------------------------------*
*& Type Definitions for Event Log Output
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
invoicenumber TYPE vbrk-vbeln,
activityname TYPE string,
eventtime TYPE timestamp,
username TYPE xubname,
billingdocumenttype TYPE vbrk-vbtyp,
customernumber TYPE vbrk-kunnr,
companycode TYPE vbrk-bukrs,
totalinvoiceamount TYPE vbrk-netwr,
END OF ty_event_log.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: BEGIN OF gs_invoice,
vbeln TYPE vbrk-vbeln, " SD Doc (Invoice)
awkey TYPE bkpf-awkey, " Accounting Doc Reference Key
bukrs TYPE vbrk-bukrs, " Company Code
kunnr TYPE vbrk-kunnr, " Customer
vbtyp TYPE vbrk-vbtyp, " SD Doc Type
netwr TYPE vbrk-netwr, " Net Value
waerk TYPE vbrk-waerk, " Currency
fkdat TYPE vbrk-fkdat, " Billing Date
erdat TYPE vbrk-erdat, " Creation Date
erzet TYPE vbrk-erzet, " Creation Time
ernam TYPE vbrk-ernam, " Creator
belnr TYPE bkpf-belnr, " Acct Doc
gjahr TYPE bkpf-gjahr, " Fiscal Year
cpudt TYPE bkpf-cpudt, " Acct Doc Entry Date
cputm TYPE bkpf-cputm, " Acct Doc Entry Time
usnam TYPE bkpf-usnam, " Acct Doc User
stblg TYPE bkpf-stblg, " Reversal Doc
END OF gs_invoice.
DATA: gt_invoices LIKE TABLE OF gs_invoice.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_erdat FOR vbrk-erdat OBLIGATORY,
s_bukrs FOR vbrk-bukrs OBLIGATORY,
s_vbtyp FOR vbrk-vbtyp.
PARAMETERS: p_path TYPE string DEFAULT '/usr/sap/trans/tmp/invoice_extract.csv' OBLIGATORY.
*&---------------------------------------------------------------------*
*& Main Processing Block
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" 1. Select base set of invoices
SELECT vbrk~vbeln, vbrk~bukrs, vbrk~kunnr, vbrk~vbtyp, vbrk~netwr, vbrk~waerk,
vbrk~fkdat, vbrk~erdat, vbrk~erzet, vbrk~ernam,
bkpf~belnr, bkpf~gjahr, bkpf~cpudt, bkpf~cputm, bkpf~usnam, bkpf~stblg, bkpf~awkey
INTO CORRESPONDING FIELDS OF TABLE gt_invoices
FROM vbrk
INNER JOIN bkpf ON bkpf~awkey = vbrk~vbeln AND bkpf~awtyp = 'VBRK'
WHERE vbrk~erdat IN s_erdat
AND vbrk~bukrs IN s_bukrs
AND vbrk~vbtyp IN s_vbtyp.
IF gt_invoices IS INITIAL.
MESSAGE 'No invoices found for the selected criteria.' TYPE 'I'.
RETURN.
ENDIF.
LOOP AT gt_invoices INTO gs_invoice.
CLEAR gs_event_log.
gs_event_log-invoicenumber = gs_invoice-vbeln.
gs_event_log-billingdocumenttype = gs_invoice-vbtyp.
gs_event_log-customernumber = gs_invoice-kunnr.
gs_event_log-companycode = gs_invoice-bukrs.
gs_event_log-totalinvoiceamount = gs_invoice-netwr.
" Activity: Invoice Generated (using accounting doc creation)
gs_event_log-activityname = 'Invoice Generated'.
gs_event_log-username = gs_invoice-usnam.
CONCATENATE gs_invoice-cpudt gs_invoice-cputm INTO DATA(lv_ts_gen).
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Posted (same as generated for non-parked docs)
gs_event_log-activityname = 'Invoice Posted'.
gs_event_log-username = gs_invoice-usnam.
CONVERT DATE gs_invoice-cpudt TIME gs_invoice-cputm INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Approved (inferred by posting)
gs_event_log-activityname = 'Invoice Approved'.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Sent To Customer
SELECT SINGLE addat, aduhr FROM nast
INTO (DATA(lv_nast_date), DATA(lv_nast_time))
WHERE kappl = 'V3' AND objky = gs_invoice-vbeln AND vszst > '0'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Sent To Customer'.
gs_event_log-username = sy-uname.
CONVERT DATE lv_nast_date TIME lv_nast_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Corrected / Reversed
IF gs_invoice-stblg IS NOT INITIAL.
SELECT SINGLE cpudt, cputm, usnam FROM bkpf
INTO (DATA(lv_rev_date), DATA(lv_rev_time), DATA(lv_rev_user))
WHERE belnr = gs_invoice-stblg AND gjahr = gs_invoice-gjahr.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Corrected'.
gs_event_log-username = lv_rev_user.
CONVERT DATE lv_rev_date TIME lv_rev_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
" Activity: Payment Applied, Cleared, Due Date, Written Off (from BSEG)
SELECT SINGLE augdt, augbl, zfBDT, hkont FROM bseg
INTO (DATA(lv_augdt), DATA(lv_augbl), DATA(lv_zfbdt), DATA(lv_hkont))
WHERE bukrs = gs_invoice-bukrs
AND belnr = gs_invoice-belnr
AND gjahr = gs_invoice-gjahr
AND koart = 'D'. " Customer line
IF sy-subrc = 0.
" Due Date Reached (Calculated event)
IF lv_zfbdt IS NOT INITIAL.
gs_event_log-activityname = 'Invoice Due Date Reached'.
gs_event_log-username = 'System'.
CONVERT DATE lv_zfbdt INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Cleared, Applied, Write-Off
IF lv_augdt IS NOT INITIAL.
SELECT SINGLE usnam, cpudt, cputm, blart FROM bkpf
INTO (DATA(lv_clear_user), DATA(lv_clear_date), DATA(lv_clear_time), DATA(lv_clear_type))
WHERE belnr = lv_augbl AND bukrs = gs_invoice-bukrs.
IF sy-subrc = 0.
gs_event_log-username = lv_clear_user.
CONVERT DATE lv_clear_date TIME lv_clear_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
IF lv_clear_type = 'DZ'. " Standard Customer Payment
gs_event_log-activityname = 'Customer Payment Received'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Payment Applied To Invoice'. APPEND gs_event_log TO gt_event_log.
gs_event_log-activityname = 'Invoice Cleared'. APPEND gs_event_log TO gt_event_log.
ELSE. " Assuming other clearing doc types could be write-offs
gs_event_log-activityname = 'Invoice Written Off'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDIF.
ENDIF.
" Activity: Payment Reminder Issued (Dunning)
SELECT COUNT(*) FROM mhnk WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
IF sy-subrc = 0 AND sy-dbcnt > 0.
SELECT SINGLE lafdn FROM mhnk
INTO DATA(lv_dunning_date)
WHERE kunnr = gs_invoice-kunnr AND bukrs = gs_invoice-bukrs AND lafdn > gs_invoice-cpudt.
gs_event_log-activityname = 'Payment Reminder Issued'.
gs_event_log-username = 'System'.
CONVERT DATE lv_dunning_date INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Parked (Example from VBKPF, may require system specific logic)
SELECT SINGLE cpudt, cputm, usnam FROM vbkpf
INTO (DATA(lv_park_date), DATA(lv_park_time), DATA(lv_park_user))
WHERE awkey = gs_invoice-vbeln AND awsys = 'LOG' AND bstat = 'V'.
IF sy-subrc = 0.
gs_event_log-activityname = 'Invoice Parked'.
gs_event_log-username = lv_park_user.
CONVERT DATE lv_park_date TIME lv_park_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Dispute Case Created (Requires Dispute Management module)
SELECT SINGLE create_date, create_time, create_user FROM udm_case_attr00
INTO (DATA(lv_disp_date), DATA(lv_disp_time), DATA(lv_disp_user))
WHERE [Your logic to link invoice to dispute case, e.g., via a custom field or object link].
IF sy-subrc = 0.
gs_event_log-activityname = 'Dispute Case Created'.
gs_event_log-username = lv_disp_user.
CONVERT DATE lv_disp_date TIME lv_disp_time INTO TIME STAMP gs_event_log-eventtime TIME ZONE sy-zonlo.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDLOOP.
*&---------------------------------------------------------------------*
*& Write data to file
*&---------------------------------------------------------------------*
OPEN DATASET p_path FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc <> 0.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.
" Header
DATA(lv_header) = 'InvoiceNumber,ActivityName,EventTime,UserName,BillingDocumentType,CustomerNumber,CompanyCode,TotalInvoiceAmount'.
TRANSFER lv_header TO p_path.
LOOP AT gt_event_log INTO gs_event_log.
DATA(lv_line) = |
{ gs_event_log-invoicenumber }|
,{ gs_event_log-activityname }|
,{ gs_event_log-eventtime }|
,{ gs_event_log-username }|
,{ gs_event_log-billingdocumenttype }|
,{ gs_event_log-customernumber }|
,{ gs_event_log-companycode }|
,{ gs_event_log-totalinvoiceamount }|.
TRANSFER lv_line TO p_path.
ENDLOOP.
CLOSE DATASET p_path.
WRITE: 'Extraction complete. File created at:', p_path. Pasos
- Requisitos Previos y Acceso: Asegúrese de tener un usuario de base de datos con acceso de solo lectura a las tablas necesarias de SAP ECC, incluyendo VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE y otras especificadas en la consulta. Este nivel de acceso generalmente se otorga solo a administradores de sistema o equipos específicos de análisis de datos.
- Conectar a la Base de Datos: Utilice una herramienta cliente SQL estándar, como DBeaver, Oracle SQL Developer o Microsoft SQL Server Management Studio, para establecer una conexión con la base de datos de SAP ECC.
- Preparar la Consulta SQL: Copie la consulta SQL completa proporcionada en la sección 'query' en el editor de su cliente SQL.
- Personalizar Marcadores de Posición: La consulta contiene varios marcadores de posición que debe reemplazar con valores específicos de su entorno. Estos incluyen:
'YYYYMMDD': Reemplace todas las instancias con las fechas de inicio y fin para su período de análisis deseado. Es crucial filtrar los datos a un marco de tiempo manejable.'XXXX': Reemplace con el Código de Sociedad(es) específico(s) que desea analizar.[Su Tipo de Salida de Factura]: Especifique el código de tipo de salida utilizado para enviar facturas a los clientes, por ejemplo, 'RD00'.[Su Cuenta de Mayor de Deudas Incobrables]: Ingrese el número de cuenta de mayor utilizado para la cancelación de facturas incobrables.[Su Atributo de Factura para Casos de Disputa]: Especifique el nombre del atributo utilizado para almacenar el número de factura en su configuración de Gestión de Disputas, por ejemplo, 'INVOICE_ID'.
- Revisar Funciones de Marca de Tiempo: La consulta utiliza una sintaxis genérica
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Es posible que necesite ajustarla para que coincida con su sistema de base de datos específico, por ejemplo, usandoTO_TIMESTAMPpara Oracle oDATETIMEFROMPARTSpara SQL Server. - Ejecutar la Consulta: Ejecute la consulta modificada. La ejecución puede tomar una cantidad significativa de tiempo dependiendo del tamaño de sus tablas SAP y el rango de fechas seleccionado.
- Inspeccionar los Resultados: Una vez que la consulta se complete, revise la salida para asegurarse de que contiene las columnas esperadas: InvoiceNumber, ActivityName, EventTime y los atributos recomendados. Verifique si hay errores o resultados vacíos.
- Exportar a CSV: Exporte el conjunto completo de resultados de su cliente SQL a un archivo CSV. Asegúrese de que el archivo utilice codificación UTF-8 para evitar problemas con caracteres especiales.
- Preparar para la Carga: Antes de cargar a una herramienta de Process Mining, confirme que los encabezados de columna CSV coinciden exactamente con los nombres de atributo requeridos, por ejemplo,
InvoiceNumber,ActivityName,EventTime,UserName.
Configuración
- Conexión a la Base de Datos: Se requiere una conexión SQL directa y de solo lectura a la base de datos subyacente de SAP ECC. Este método omite completamente la capa de aplicación de SAP.
- Autorización: El usuario de la base de datos debe tener permisos de
SELECTen todas las tablas utilizadas en la consulta, que abarcan los módulos FI, SD y potencialmente FSCM. - Rango de Fechas: Es fundamental filtrar la consulta por un rango de fechas específico para asegurar un rendimiento y volumen de datos razonables. Recomendamos empezar con un período de 3 a 6 meses. Los marcadores de posición de filtro de fecha
'YYYYMMDD'deben configurarse en varias partes de la consulta. - Filtro por Sociedad: La consulta está diseñada para ser filtrada por Sociedad (
BUKRS). Analizar una o pocas sociedades a la vez es una práctica habitual. - Configuración de Tipo de Documento: La lógica para identificar eventos como correcciones de facturas, bajas contables o documentos enviados depende de las configuraciones estándar de SAP. Es posible que deba ajustar la consulta si su organización utiliza tipos de documento personalizados (
BLART), tipos de salida (KSCHL) o cuentas de mayor para estos procesos. - Consideraciones de Rendimiento: Ejecutar esta consulta en un sistema SAP productivo en vivo puede consumir recursos significativos y puede afectar el rendimiento operativo. Se recomienda encarecidamente ejecutar extracciones grandes fuera del horario pico o en una réplica de informes dedicada de la base de datos.
a Consulta de ejemplo sql
WITH InvoiceBase AS (
SELECT
VBRK.VBELN AS InvoiceNumber,
VBRK.FKART AS BillingDocumentType,
VBRK.KUNRG AS CustomerNumber,
VBRK.BUKRS AS CompanyCode,
VBRK.NETWR AS TotalInvoiceAmount,
VBRK.ERNAM AS CreatorName,
VBRK.ERDAT AS CreationDate,
VBRK.ERZET AS CreationTime
FROM VBRK
WHERE VBRK.ERDAT BETWEEN '20230101' AND '20231231' -- Filter by Invoice Creation Date
AND VBRK.BUKRS IN ('1000') -- Filter by Company Code
AND VBRK.FKART NOT IN ('S1', 'S2') -- Exclude cancelled invoices
)
-- 1. Invoice Generated
SELECT
ib.InvoiceNumber,
'Invoice Generated' AS ActivityName,
CAST(CONCAT(ib.CreationDate, ib.CreationTime) AS TIMESTAMP) AS EventTime,
ib.CreatorName AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM InvoiceBase ib
UNION ALL
-- 2. Invoice Parked
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Parked' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = 'V' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 3. Invoice Posted
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Posted' AS ActivityName,
CAST(CONCAT(b.CPUDT, b.CPUTM) AS TIMESTAMP) AS EventTime,
b.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF b
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND b.BSTAT = '' AND b.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 4. Invoice Approved (from Parked to Posted)
SELECT
SUBSTRING(h.OBJECTID, 4, 10) AS InvoiceNumber,
'Invoice Approved' as ActivityName,
CAST(CONCAT(h.UDATE, h.UTIME) AS TIMESTAMP) AS EventTime,
h.USERNAME AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM CDHDR h
JOIN CDPOS p ON h.MANDANT = p.MANDANT AND h.OBJECTCLAS = p.OBJECTCLAS AND h.OBJECTID = p.OBJECTID AND h.CHANGENR = p.CHANGENR
JOIN InvoiceBase ib ON SUBSTRING(h.OBJECTID, 4, 10) = ib.InvoiceNumber
WHERE h.OBJECTCLAS = 'BELEGV'
AND p.TABNAME = 'BKPF'
AND p.FNAME = 'BSTAT'
AND p.VALUE_OLD = 'V'
AND p.VALUE_NEW = ' '
AND h.UDATE BETWEEN '20230101' AND '20231231'
UNION ALL
-- 5. Invoice Sent To Customer
SELECT
n.OBJKY AS InvoiceNumber,
'Invoice Sent To Customer' AS ActivityName,
CAST(CONCAT(n.DATVR, n.UHRVR) AS TIMESTAMP) AS EventTime,
n.VSTAT AS UserName, -- User who processed is not directly available, using processing status as a proxy
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM NAST n
JOIN InvoiceBase ib ON n.OBJKY = ib.InvoiceNumber
WHERE n.KSCHL = '[Your Invoice Output Type]' -- E.g., 'RD00'
AND n.VSTAT = '1' -- Processed successfully
AND n.DATVR BETWEEN '20230101' AND '20231231'
UNION ALL
-- 6. Invoice Corrected (Reversed)
SELECT
SUBSTRING(orig_doc.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Corrected' AS ActivityName,
CAST(CONCAT(rev_doc.CPUDT, rev_doc.CPUTM) AS TIMESTAMP) AS EventTime,
rev_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
rev_doc.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BKPF orig_doc
JOIN BKPF rev_doc ON orig_doc.STBLG = rev_doc.BELNR AND orig_doc.BUKRS = rev_doc.BUKRS AND orig_doc.GJAHR = rev_doc.STJAH
JOIN InvoiceBase ib ON SUBSTRING(orig_doc.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE orig_doc.AWTYP = 'VBRK' AND orig_doc.STBLG IS NOT NULL AND rev_doc.CPUDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 7. Invoice Due Date Reached
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Invoice Due Date Reached' AS ActivityName,
CAST(CONCAT(bs.ZFBDT, '000000') AS TIMESTAMP) AS EventTime,
'System' AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
b.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSEG bs
JOIN BKPF b ON bs.MANDT = b.MANDT AND bs.BUKRS = b.BUKRS AND bs.BELNR = b.BELNR AND bs.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE b.AWTYP = 'VBRK' AND bs.KOART = 'D' AND bs.ZFBDT BETWEEN '20230101' AND '20231231'
UNION ALL
-- 8. Payment Reminder Issued
SELECT
SUBSTRING(b.AWKEY, 1, 10) AS InvoiceNumber,
'Payment Reminder Issued' AS ActivityName,
CAST(CONCAT(h.LAUFD, '000000') AS TIMESTAMP) AS EventTime,
h.LAUFI AS UserName, -- Dunning Run ID
ib.BillingDocumentType,
ib.CustomerNumber,
d.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM MHND d
JOIN MHNK h ON d.MANDT = h.MANDT AND d.LAUFD = h.LAUFD AND d.LAUFI = h.LAUFI
JOIN BKPF b ON d.MANDT = b.MANDT AND d.BUKRS = b.BUKRS AND d.BELNR = b.BELNR AND d.GJAHR = b.GJAHR
JOIN InvoiceBase ib ON SUBSTRING(b.AWKEY, 1, 10) = ib.InvoiceNumber
WHERE h.LAUFD BETWEEN '20230101' AND '20231231'
UNION ALL
-- 9. Dispute Case Created
SELECT
attr.ATTR_VALUE AS InvoiceNumber,
'Dispute Case Created' AS ActivityName,
sc.CREATE_TIME AS EventTime,
sc.CREATED_BY AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
ib.CompanyCode,
ib.TotalInvoiceAmount
FROM SCMG_T_CASE_ATTR attr
JOIN SCASE sc ON attr.CASE_GUID = sc.CASE_GUID
JOIN InvoiceBase ib ON attr.ATTR_VALUE = ib.InvoiceNumber
WHERE attr.ATTR_NAME = '[Your Dispute Case Invoice Attribute]' -- e.g., 'INVOICE_ID'
AND CAST(sc.CREATE_TIME AS DATE) BETWEEN '20230101' AND '20231231'
UNION ALL
-- 10, 11, 12. Clearing Events (Payment, Clearing, Write-Off)
SELECT
InvoiceNumber,
ActivityName,
EventTime,
UserName,
BillingDocumentType,
CustomerNumber,
CompanyCode,
TotalInvoiceAmount
FROM (
SELECT
bsad.XBLNR AS InvoiceNumber,
CASE
WHEN clearing_item.HKONT = '[Your Bad Debt G/L Account]' THEN 'Invoice Written Off'
ELSE 'Customer Payment Received'
END AS ActivityName,
CAST(CONCAT(clearing_doc.CPUDT, clearing_doc.CPUTM) AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
LEFT JOIN BSEG clearing_item ON clearing_doc.MANDT = clearing_item.MANDT AND clearing_doc.BUKRS = clearing_item.BUKRS AND clearing_doc.BELNR = clearing_item.BELNR AND clearing_doc.GJAHR = clearing_item.GJAHR AND clearing_item.HKONT = '[Your Bad Debt G/L Account]' -- e.g. '148000'
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Payment Applied To Invoice' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '000000') AS TIMESTAMP) AS EventTime,
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
UNION ALL
SELECT
bsad.XBLNR AS InvoiceNumber,
'Invoice Cleared' AS ActivityName,
CAST(CONCAT(bsad.AUGDT, '235959') AS TIMESTAMP) AS EventTime, -- Add time to separate from 'Payment Applied'
clearing_doc.USNAM AS UserName,
ib.BillingDocumentType,
ib.CustomerNumber,
bsad.BUKRS AS CompanyCode,
ib.TotalInvoiceAmount
FROM BSAD bsad
JOIN InvoiceBase ib ON bsad.XBLNR = ib.InvoiceNumber
JOIN BKPF clearing_doc ON bsad.MANDT = clearing_doc.MANDT AND bsad.BUKRS = clearing_doc.BUKRS AND bsad.AUGBL = clearing_doc.BELNR AND bsad.AUGGJ = clearing_doc.GJAHR
WHERE bsad.AUGDT BETWEEN '20230101' AND '20231231' AND bsad.UMSKZ = ''
) AS ClearingEvents Pasos
- Requisitos Previos: Asegúrese de contar con una herramienta ETL con licencia y un conector SAP certificado (por ejemplo, Informatica PowerCenter con SAP Connector, Talend con SAP Connector, etc.). Verifique que tiene credenciales de usuario SAP con las autorizaciones necesarias para leer de las tablas financieras, de ventas y del sistema requeridas (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS).
- Establecer Conexión SAP: En su herramienta ETL, cree una nueva conexión a su sistema SAP ECC. Configure los detalles de la conexión, incluyendo el servidor de aplicaciones, el número de sistema, el cliente, el usuario y la contraseña. Pruebe la conexión para asegurarse de que sea exitosa.
- Definir Fuentes de Datos: Para cada actividad a extraer, defina la(s) tabla(s) SAP correspondiente(s) como fuente de datos en su trabajo ETL. Por ejemplo, agregue VBRK para la generación de facturas, BKPF para eventos de contabilización y NAST para la comunicación con el cliente.
- Construir Lógica de Extracción para Cada Actividad: Cree un flujo de datos o transformación separado para cada una de las 13 actividades requeridas. En cada flujo, aplique filtros para seleccionar los registros relevantes. Por ejemplo, filtre por Sociedad (BUKRS), tipo de documento (BLART) y un rango de fechas específico (por ejemplo, fecha de creación ERDAT).
- Mapear Campos y Transformar Datos: En cada flujo de datos, mapee los campos de las tablas SAP de origen a la estructura del registro de eventos de destino: InvoiceNumber, ActivityName, EventTime, UserName y otros atributos recomendados. Utilice lógica de transformación para codificar el 'ActivityName' para cada flujo y para formatear correctamente las fechas y marcas de tiempo.
- Manejar Actividades Complejas: Para eventos calculados como 'Fecha de Vencimiento de Factura Alcanzada', utilice la Fecha Base de Pago (ZFBDT) y la lógica de términos de pago para calcular la fecha de vencimiento, o simplemente extraiga la Fecha Neta de Vencimiento (NETDT) de BSEG. Para eventos derivados de registros de cambios como 'Factura Aprobada', es posible que necesite unir tablas como BKPF y CDHDR/CDPOS basándose en el número y la fecha del documento.
- Combinar Datos de Actividad: Utilice una transformación 'Union' o 'Merge' en su herramienta ETL para combinar las salidas de los 13 flujos de datos individuales en un único conjunto de datos. Asegúrese de que los nombres de las columnas y los tipos de datos sean consistentes en todos los flujos antes de la unión.
- Configurar Destino de Salida: Defina el destino de salida final para su registro de eventos. Esto podría ser un archivo plano (CSV), una tabla de base de datos o una conexión directa a un área de staging.
- Establecer Programación de Extracción: Configure los parámetros de rango de fechas para la extracción. Para la carga inicial, podría extraer de 6 a 12 meses de datos. Para cargas delta posteriores, configure el trabajo para extraer datos desde la última fecha de ejecución.
- Ejecutar y Exportar: Ejecute el trabajo ETL. Una vez completado, inspeccione el archivo de salida para asegurarse de que cumple con el formato requerido. La salida final debe ser un único archivo CSV con cada fila representando un evento único, listo para cargar en ProcessMind.
Configuración
- Conexión a SAP: Se requiere una conexión al servidor de aplicaciones al sistema SAP ECC de destino. El usuario de SAP necesita acceso RFC y autorizaciones para tablas como VBRK, BKPF, BSEG, NAST y otras especificadas en la consulta.
- Licencia de Herramienta ETL: Una licencia válida para la herramienta ETL comercial y su conector SAP específico es obligatoria.
- Rango de Fechas: Se recomienda extraer datos por un período de 3 a 6 meses para asegurar una muestra representativa para el análisis sin causar una carga excesiva en el sistema. Utilice un parámetro configurable para las fechas de inicio y fin.
- Filtros Clave: Siempre filtre por Sociedad (BUKRS) para limitar el alcance de la extracción. También es fundamental filtrar por los Tipos de Documento de Facturación relevantes (VBRK-FKART) y Tipos de Documento Contable (BKPF-BLART) para incluir solo facturas estándar y excluir otros tipos de documento como notas de crédito o documentos internos.
- Rendimiento: La extracción de tablas grandes como BSEG puede ser lenta. Utilice filtros selectivos, evite extraer campos innecesarios y programe la extracción durante horas de menor actividad para minimizar el impacto en el rendimiento del sistema SAP de origen.
a Consulta de ejemplo config
// ETL Data Extraction Logic for SAP Order-to-Cash Invoicing
// This represents the configuration logic within a graphical ETL tool.
// == Global Parameters ==
// $StartDate: '[Start Date]' (e.g., '2023-01-01')
// $EndDate: '[End Date]' (e.g., '2023-06-30')
// $CompanyCodes: '[Company Code(s)]' (e.g., '1000', '2000')
// $BillingDocTypes: '[Billing Document Type(s)]' (e.g., 'F1', 'F2')
// == Source 1: Invoice Generated ==
// Tables: VBRK
DATA_SOURCE generated_invoices FROM VBRK WHERE
ERDAT >= $StartDate AND ERDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND FKART IN ($BillingDocTypes)
MAP {
InvoiceNumber: VBELN,
ActivityName: 'Invoice Generated',
EventTime: ERDAT + ERZET, // Combine date and time
UserName: ERNAM,
BillingDocumentType: FKART,
CustomerNumber: KUNAG,
CompanyCode: BUKRS,
TotalInvoiceAmount: NETWR
}
// == Source 2: Invoice Posted ==
// Tables: BKPF joined with VBRK
DATA_SOURCE posted_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Posted',
EventTime: A.BUDAT + A.CPUTM, // Posting date and entry time
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 3: Invoice Parked ==
// Tables: BKPF joined with VBRK
DATA_SOURCE parked_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.CPUDT >= $StartDate AND A.CPUDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = 'V'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Parked',
EventTime: A.CPUDT + A.CPUTM,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 4: Invoice Approved (Transition from Parked to Posted) ==
// Tables: BKPF joined with VBRK
DATA_SOURCE approved_invoices FROM BKPF as A
INNER JOIN VBRK as B ON (A.AWKEY = B.VBELN AND A.AWTYP = 'VBRK')
WHERE A.BUDAT >= $StartDate AND A.BUDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.BSTAT = ' '
AND EXISTS (SELECT 1 FROM VBELEGV C WHERE C.BELNR = A.BELNR) // Check if it was ever parked
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Approved',
EventTime: A.BUDAT + A.CPUTM, // Use posting date as approval date
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 5: Invoice Sent To Customer ==
// Tables: NAST joined with VBRK
DATA_SOURCE sent_invoices FROM NAST as A
INNER JOIN VBRK as B ON (A.OBJKY = B.VBELN)
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND B.BUKRS IN ($CompanyCodes)
AND A.VSTAT = '1' // Successfully processed
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Sent To Customer',
EventTime: A.ERDAT + A.ERUHR,
UserName: A.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: B.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 6: Invoice Corrected (Reversed) ==
// Tables: VBRK (for the reversal document)
DATA_SOURCE corrected_invoices FROM VBRK as A
WHERE A.ERDAT >= $StartDate AND A.ERDAT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.SFAKN <> '' // SFAKN is the original cancelled invoice
MAP {
InvoiceNumber: A.SFAKN, // Case ID is the original invoice
ActivityName: 'Invoice Corrected',
EventTime: A.ERDAT + A.ERZET,
UserName: A.ERNAM,
BillingDocumentType: A.FKART,
CustomerNumber: A.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: NULL // Amount belongs to the reversal doc, not original
}
// == Source 7: Invoice Due Date Reached ==
// Tables: BSEG joined with VBRK
DATA_SOURCE due_invoices FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.NETDT >= $StartDate AND A.NETDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.KOART = 'D' // Customer line item
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Due Date Reached',
EventTime: A.NETDT, // Net due date
UserName: 'System',
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 8: Payment Reminder Issued ==
// Tables: MHNK, MHND, VBRK
DATA_SOURCE reminders FROM MHNK as A
INNER JOIN MHND as D ON (A.LAUFD = D.LAUFD AND A.LAUFI = D.LAUFI)
INNER JOIN VBRK as B ON (SUBSTRING(D.XBLNR, 1, 10) = B.VBELN) // XBLNR may need parsing
WHERE A.LAUFD >= $StartDate AND A.LAUFD <= $EndDate
AND D.BUKRS IN ($CompanyCodes)
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Reminder Issued',
EventTime: A.LAUFD, // Dunning date
UserName: A.IDAPS,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: D.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 9: Dispute Case Created ==
// Tables: UDM_CASE_ATTR00
DATA_SOURCE disputes FROM UDM_CASE_ATTR00 as A
WHERE A.CREATE_TIMESTAMP >= $StartDate // Timestamp format may vary
AND A.FIN_COMP_CODE IN ($CompanyCodes)
AND A.PROCESS = 'FIN_FSCM_DIS'
MAP {
InvoiceNumber: A.BILL_DOC_ID,
ActivityName: 'Dispute Case Created',
EventTime: A.CREATE_TIMESTAMP,
UserName: A.CREATE_USER,
BillingDocumentType: NULL,
CustomerNumber: A.BP_NUMBER,
CompanyCode: A.FIN_COMP_CODE,
TotalInvoiceAmount: A.DISPUTED_AMOUNT
}
// == Source 10: Customer Payment Received ==
// Tables: BKPF
DATA_SOURCE payments FROM BKPF
WHERE BUDAT >= $StartDate AND BUDAT <= $EndDate
AND BUKRS IN ($CompanyCodes)
AND BLART = 'DZ' // Example for Customer Payment
MAP {
InvoiceNumber: NULL, // Invoice not yet known
ActivityName: 'Customer Payment Received',
EventTime: BUDAT + CPUTM,
UserName: USNAM,
BillingDocumentType: NULL,
CustomerNumber: NULL, // Requires join to BSEG to get customer
CompanyCode: BUKRS,
TotalInvoiceAmount: NULL
}
// == Source 11 & 12: Payment Applied To Invoice & Invoice Cleared ==
// Tables: BSEG joined with VBRK
DATA_SOURCE cleared_items FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND A.AUGBL <> ''
// Generate two records from this source
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Payment Applied To Invoice',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM, // User from header of original invoice doc
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
UNION WITH {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Cleared',
EventTime: A.AUGDT, // Clearing Date
UserName: H.USNAM,
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Source 13: Invoice Written Off ==
// Tables: BSEG (for the invoice line) and BKPF (for clearing doc type)
DATA_SOURCE written_off FROM BSEG as A
INNER JOIN BKPF as H ON (A.BUKRS = H.BUKRS AND A.BELNR = H.BELNR AND A.GJAHR = H.GJAHR)
INNER JOIN VBRK as B ON (H.AWKEY = B.VBELN AND H.AWTYP = 'VBRK')
INNER JOIN BKPF as C ON (A.AUGBL = C.BELNR AND A.BUKRS = C.BUKRS AND A.AUGGJ = C.GJAHR)
WHERE A.AUGDT >= $StartDate AND A.AUGDT <= $EndDate
AND A.BUKRS IN ($CompanyCodes)
AND C.BLART = '[Your Write-Off Document Type]' // e.g., 'AB'
MAP {
InvoiceNumber: B.VBELN,
ActivityName: 'Invoice Written Off',
EventTime: A.AUGDT,
UserName: C.USNAM, // User who posted the write-off
BillingDocumentType: B.FKART,
CustomerNumber: B.KUNAG,
CompanyCode: A.BUKRS,
TotalInvoiceAmount: B.NETWR
}
// == Final Union of all sources ==
OUTPUT generated_invoices
UNION ALL posted_invoices
UNION ALL parked_invoices
UNION ALL approved_invoices
UNION ALL sent_invoices
UNION ALL corrected_invoices
UNION ALL due_invoices
UNION ALL reminders
UNION ALL disputes
UNION ALL payments
UNION ALL cleared_items
UNION ALL written_off