Su Template de datos para el proceso de pedido a cobro: facturación y emisión de facturas
Su Template de datos para el proceso de pedido a cobro: facturación y emisión de facturas
- Atributos recomendados para un análisis integral
- Pasos clave e hitos del proceso que debe registrar
- Guía práctica para extraer datos de SAP ECC
Atributos del proceso de pedido a cobro: facturación y emisión de facturas
| Nombre | Descripción | ||
|---|---|---|---|
| Actividad ActivityName | Nombre del evento o paso de negocio que tuvo lugar durante el 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 del cliente recibido». Estas actividades se derivan conceptualmente de distintos eventos del sistema, cambios en el estado de los documentos o códigos de transacción ejecutados por los usuarios. La secuencia de actividades forma el flujo del proceso, que constituye la base del análisis de Process Mining. Al examinar las actividades, las organizaciones pueden entender qué pasos se realizan, en qué orden y con qué frecuencia. Así pueden comparar la ejecución real del proceso con el proceso diseñado. Por qué es importante Define los pasos del mapa de procesos y permite visualizar y analizar los flujos, las desviaciones y los cuellos de botella. Dónde obtenerlo Este atributo conceptual se deriva de varias fuentes, como los códigos de transacción (CDHDR-TCODE), los cambios en el estado de los documentos (VBUK-FKSTK) y las contabilizaciones de documentos contables. Ejemplos Factura generadaFactura contabilizadaRecordatorio de pago enviadoFactura compensada | |||
| Hora de inicio EventTime | Marca de tiempo que indica cuándo tuvo lugar una actividad o un evento específico. | ||
| Descripción La hora del evento registra la fecha y hora exactas de cada actividad del ciclo de vida de la factura. Esta marca de tiempo es fundamental para todos los análisis temporales de Process Mining, incluidos el cálculo de los tiempos de ciclo, la identificación de cuellos de botella y el seguimiento del rendimiento del proceso frente a los acuerdos de nivel de servicio. Por lo general, este atributo se construye combinando un campo de fecha, como la fecha de contabilización (BUDAT), con un campo de hora (UZEIT) de distintas tablas de SAP que registran cambios o la creación de documentos. Las marcas de tiempo precisas son esenciales para crear un Registro de eventos fiable y garantizar la validez de los análisis de rendimiento. Por qué es importante Este atributo es la base de todos los análisis de rendimiento, ya que permite calcular los tiempos de ciclo, las duraciones y los tiempos de espera entre los pasos del proceso. Dónde obtenerlo Se construye a partir de varios campos de fecha y hora de distintas 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 | Identificador único del documento de facturación, que sirve como ID del caso principal del proceso de facturación. | ||
| Descripción El número de factura, denominado número de documento de facturación en SAP, identifica de forma única cada factura. En Process Mining, funciona como CaseId y agrupa en una sola instancia de proceso todas las actividades relacionadas, como la creación, la contabilización, el envío, el pago y la compensación. El análisis de los procesos por número de factura permite ver el ciclo de vida completo de cada transacción de facturación, desde su inicio hasta su liquidación final. Esto es fundamental para calcular indicadores clave de rendimiento, como los días pendientes de cobro (DSO) y el tiempo total del ciclo de facturación, y ofrece una base clara para medir y mejorar el rendimiento. Por qué es importante Es la clave esencial para seguir todo el recorrido de una factura y analizar los tiempos de ciclo, los cuellos de botella y las variaciones de cada transacción de facturación. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: VBELN Ejemplos 90001234900012359000123690001237 | |||
| Importe total de la factura TotalInvoiceAmount | Valor neto total del documento de facturación. | ||
| Descripción Este atributo representa el importe neto total de la factura, sin incluir impuestos. El importe de la factura es un dato financiero fundamental del proceso de facturación. Se utiliza en distintos análisis, por ejemplo, para clasificar las facturas por importe y comprobar si siguen flujos diferentes. También permite priorizar las gestiones de cobro o investigar por qué las facturas de importe elevado tardan más en aprobarse o pagarse. Este contexto financiero aporta mayor profundidad al análisis del proceso. Por qué es importante Aporta contexto financiero esencial y permite analizar las facturas según su importe, por ejemplo, para determinar si las de importe elevado siguen un proceso distinto o tardan más en compensarse. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: NETWR Ejemplos 1500.7525000.00500.0012345.67 | |||
| Nombre de usuario UserName | ID del usuario que ejecutó la actividad o creó el documento. | ||
| Descripción Este atributo registra el ID de usuario de SAP responsable de un evento, como la creación de una factura o la contabilización de un pago. Es esencial para analizar el componente humano del proceso. Estos datos permiten investigar las diferencias de rendimiento entre usuarios o equipos, detectar necesidades de formación y descubrir posibles problemas de cumplimiento. También permiten distinguir las actividades manuales realizadas por personas de los pasos automatizados ejecutados por usuarios del sistema o de procesos por lotes, algo clave para calcular las tasas de automatización. Por qué es importante Permite analizar el rendimiento de los usuarios y la distribución de la carga de trabajo, así como distinguir las actividades manuales de las automatizadas. Esto facilita las iniciativas de automatización y eficiencia. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: ERNAM (creado por); BKPF, campo: USNAM (nombre de usuario); o CDHDR, campo: USERNAME (usuario). Ejemplos JSMITHBW_BATCHLROSSIMKUMAR | |||
| Número de cliente CustomerNumber | Número único que identifica al cliente al que se emite la factura. | ||
| Descripción El número de cliente vincula una factura con un cliente o socio comercial específico. Este atributo es clave para segmentar y analizar el proceso de facturación según las características de cada cliente. Los analistas pueden utilizar este campo para comparar los días pendientes de cobro (DSO) entre distintos clientes, identificar quiénes suelen pagar tarde o analizar el cumplimiento de las condiciones de pago. Entender estos patrones es fundamental para gestionar las relaciones con los clientes y mejorar las estrategias de cobro según cada segmento. Por qué es importante Permite realizar análisis centrados en los clientes, identificar sus hábitos de pago, evaluar los DSO por cliente y adaptar las estrategias de cobro. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: KUNRG (pagador) o KUNAG (solicitante). Ejemplos 100023200541CUST-A487910345 | |||
| Sociedad CompanyCode | Identificador de la entidad legal que emitió la factura. | ||
| Descripción La sociedad representa una unidad legal y contable independiente en SAP. Todas las transacciones financieras, incluidas las facturas, se contabilizan en una sociedad específica. Es un elemento de datos organizativos fundamental. En Process Mining, la sociedad permite analizar y comparar el rendimiento del proceso de facturación entre distintas entidades legales de una empresa. Esto ayuda a identificar buenas prácticas que podrían aplicarse en otras entidades y garantiza que el análisis tenga en cuenta la estructura organizativa de la empresa. Por qué es importante Permite filtrar y comparar procesos entre distintas entidades legales, algo fundamental para el análisis financiero y la comparación del rendimiento entre unidades. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: BUKRS Ejemplos 10002000US01DE01 | |||
| Tipo de documento de facturación BillingDocumentType | Código que clasifica el documento de facturación, por ejemplo, como factura, nota de crédito o nota de débito. | ||
| Descripción El tipo de documento de facturación clasifica las transacciones en distintas categorías según su finalidad comercial. Por ejemplo, «F2» corresponde a una factura estándar para clientes y «G2», a una nota de crédito. En SAP, esta clasificación se configura para controlar el procesamiento de los distintos documentos de facturación. En Process Mining, este atributo es esencial para filtrar y comparar distintos escenarios de facturación. Los analistas pueden examinar por separado el proceso de las facturas estándar y el de las notas de crédito para entender sus flujos, tiempos de ciclo y dificultades particulares, y así orientar mejor las mejoras del proceso. Por qué es importante Permite segmentar y analizar distintos procesos de facturación, como el de las facturas estándar y el de las notas de crédito, que suelen seguir flujos muy diferentes. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: FKART Ejemplos F2G2L2IV | |||
| Código de transacción TransactionCode | 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 de una función o un programa específico de SAP, como «VF01» para crear un documento de facturación. Registrar el T-Code de cada evento ofrece una perspectiva técnica, a nivel de sistema, sobre cómo se ejecutó un proceso. Esta información es muy útil para analizar las causas raíz. Por ejemplo, si se producen errores con frecuencia, los analistas pueden comprobar si se está utilizando un código de transacción no estándar. También ayuda a determinar el nombre de la actividad y a entender qué funciones del sistema se utilizan en el proceso. Por qué es importante Aporta contexto técnico sobre cómo se realizó una actividad, permite analizar las causas raíz de las desviaciones del proceso y ayuda a identificar acciones no estándar de los usuarios. Dónde obtenerlo Tabla de SAP ECC: CDHDR, campo: TCODE Ejemplos VF01VF02FB01F-28 | |||
| Condiciones de pago PaymentTerms | Condiciones que establecen cómo se completa una venta, incluido el calendario de pagos. | ||
| Descripción Las condiciones de pago establecen cuándo debe realizarse un pago, por ejemplo, «neto a 30 días» o «neto a 60 días». Se acuerdan con el cliente y son un factor clave para determinar el flujo de caja. Analizar el proceso según las condiciones de pago puede revelar si algunas están asociadas con ciclos de pago más largos o más pagos atrasados. Esta información puede ayudar a la empresa a negociar mejores condiciones con los clientes o 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 los hábitos de pago de los clientes y el efecto de las condiciones negociadas en el flujo de caja, y aporta información para optimizar los acuerdos comerciales. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: ZTERM Ejemplos Z030Z060Z001 | |||
| Es automatizada IsAutomated | Indicador que señala si una actividad la realizó un usuario del sistema o se ejecutó mediante automatización. | ||
| Descripción Este atributo calculado es un indicador booleano que distingue las actividades manuales de las automatizadas. Suele obtenerse comparando el atributo Nombre de usuario con una lista de ID de usuarios del sistema o de procesos por lotes conocidos, como «BATCHUSER» o «SAPSYSTEM». Este indicador es esencial para medir el nivel de automatización del proceso de facturación, un objetivo clave para muchas organizaciones que buscan mejorar la eficiencia y reducir costes. El KPI de tasa de facturación automatizada se calcula directamente a partir de este atributo y permite seguir el avance de las iniciativas de automatización. Por qué es importante Permite calcular directamente la tasa de facturación automatizada, medir la eficiencia del proceso y hacer seguimiento del impacto de los proyectos de automatización. Dónde obtenerlo Se deriva del atributo Nombre de usuario. La lógica podría ser similar a: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Ejemplos truefalse | |||
| Es retrabajo IsRework | Indicador que señala si una actividad corresponde a un paso de retrabajo o corrección. | ||
| Descripción Este atributo calculado identifica las actividades que representan retrabajo, como «Factura corregida» o las reversiones de documentos. Suele ser un indicador booleano derivado del nombre de la actividad o de códigos de transacción asociados con correcciones y cancelaciones, como «VF11» para cancelar un documento de facturación. En Process Mining, este indicador es muy útil para cuantificar el retrabajo en el proceso de facturación. Permite calcular directamente KPI como la tasa de corrección de facturas y visualizar los ciclos de retrabajo en el mapa de procesos, lo que pone de manifiesto ineficiencias y problemas de calidad que aumentan los costes operativos y retrasan los pagos. Por qué es importante Ayuda a cuantificar las ineficiencias del proceso y los problemas de calidad al mostrar cuánto esfuerzo se dedica a corregir errores, y respalda directamente los KPI de retrabajo. Dónde obtenerlo Se deriva del nombre de la actividad o del código de transacción. Por ejemplo: IF ActivityName = 'Invoice Corrected' OR TransactionCode = 'VF11' THEN true ELSE false. Ejemplos truefalse | |||
| Fecha de compensación ClearingDate | Fecha en que se recibió el pago y se compensó la factura en las cuentas por cobrar. | ||
| Descripción La fecha de compensación es el día en que una partida abierta, como una factura, se marca como pagada o «compensada» en el sistema financiero. Esta fecha representa el momento en que se considera que el efectivo se ha cobrado y conciliado. Es una de las fechas más importantes del ciclo de pedido a cobro. Marca el final del período para calcular los días pendientes de cobro (DSO) y el tiempo total del ciclo de facturación a cobro. Analizarla ayuda a medir la eficacia del proceso de cobro. Por qué es importante Marca el paso final del ciclo de vida de la factura y sirve como fecha de cierre para calcular los DSO y el tiempo total del ciclo. También refleja la eficiencia del cobro. Dónde obtenerlo Tabla de SAP ECC: BSAD, campo: AUGDT Ejemplos 2023-05-142023-06-012023-06-25 | |||
| Fecha de contabilización PostingDate | Fecha en 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 clave para la contabilidad y los informes financieros. Las demoras entre la creación del documento y su contabilización pueden indicar ineficiencias en la gestión interna de los documentos de facturación. Desde la perspectiva de Process Mining, la fecha de contabilización marca un hito importante en el ciclo de vida de la factura. El tiempo transcurrido entre la generación y la contabilización de la factura puede ser un indicador clave del rendimiento del departamento de facturación. Por qué es importante Marca un hito financiero importante y es fundamental para la contabilidad. El tiempo transcurrido entre la creación y la contabilización de la factura permite medir la eficiencia del procesamiento interno. Dónde obtenerlo Tabla de SAP ECC: BKPF, campo: BUDAT Ejemplos 2023-04-152023-04-172023-05-21 | |||
| Fecha de vencimiento de la factura InvoiceDueDate | Fecha límite 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 de pago establecida en las condiciones de pago. Es fundamental para gestionar las cuentas por cobrar e iniciar las gestiones de cobro. Este atributo se utiliza para calcular el KPI de pagos puntuales, comparándolo con la fecha real de pago. Analizar las facturas según su fecha de vencimiento ayuda a prever el flujo de caja y a priorizar las gestiones de cobro de los pagos próximos a vencer o vencidos. Suele calcularse a partir de la fecha base y las condiciones de pago. Por qué es importante Es la referencia para medir el cumplimiento de los plazos de pago y resulta esencial para gestionar las cuentas por cobrar y prever el flujo de caja. Dónde obtenerlo Se calcula a partir de la fecha base (BSEG-ZFBDT) y las condiciones de pago (BSEG-ZTERM). No siempre se almacena en un campo directo. Ejemplos 2023-05-152023-05-302023-06-20 | |||
| Fecha del documento DocumentDate | Fecha del documento original, indicada por el proveedor o la persona que lo creó. | ||
| Descripción La fecha del documento es la fecha de emisión del documento original. En facturación, suele coincidir con la fecha de creación de la factura y se utiliza a menudo como base para calcular la fecha de vencimiento del pago. Esta fecha es fundamental para los informes financieros y para calcular métricas clave, como los días pendientes de cobro (DSO). Marca el inicio del período de cobro desde la perspectiva del cliente. Analizar las diferencias entre la fecha del documento y la fecha de contabilización puede revelar demoras internas en el procesamiento de las facturas recibidas. Por qué es importante Sirve de referencia para calcular la antigüedad de las facturas y los DSO, y es un dato clave para analizar las finanzas y las condiciones de pago. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: FKDAT (fecha de facturación) Ejemplos 2023-04-152023-04-162023-05-20 | |||
| Moneda Currency | Código de la moneda de los importes indicados en la factura. | ||
| Descripción Este atributo indica la moneda de la transacción, como USD, EUR o JPY. Aporta el contexto necesario para interpretar los valores monetarios, como el importe total de la factura. Al analizar datos de una empresa multinacional, el campo de moneda es esencial para interpretar y convertir correctamente las cifras financieras. Permite generar informes coherentes y evita sumar importes sin convertirlos antes a una moneda común, lo que daría lugar a análisis financieros incorrectos. Por qué es importante Aporta el contexto necesario para interpretar todos los valores monetarios y garantiza un análisis financiero preciso, especialmente cuando se utilizan varias monedas. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: WAERK Ejemplos USDEURGBPJPY | |||
| Número de documento de ventas SalesDocumentNumber | Identificador del pedido de ventas original que dio lugar a la factura. | ||
| Descripción Este atributo vincula directamente la factura con el pedido de ventas que inició la transacción. Esta trazabilidad es fundamental para analizar de principio a fin el ciclo de pedido a cobro. Al conectar el proceso de facturación con el proceso previo del pedido de ventas, las organizaciones pueden analizar el tiempo total del ciclo desde el pedido del cliente hasta el cobro. Esto ayuda a determinar si las demoras en la facturación se deben a problemas en ventas, cumplimiento de pedidos o facturación, y ofrece una visión más completa del proceso. Por qué es importante Vincula el proceso de facturación con el pedido de ventas y permite analizar de principio a fin el ciclo de pedido a cobro e identificar demoras entre departamentos. Dónde obtenerlo Tabla de SAP ECC: VBRP, campo: VGBEL Ejemplos 100000451000004610000047 | |||
| Organización de ventas SalesOrganization | Unidad organizativa responsable de la venta de productos o servicios. | ||
| Descripción La organización de ventas es una unidad organizativa de SAP responsable de distribuir bienes y servicios y negociar las condiciones de venta. Es un campo clave para estructurar las operaciones comerciales y de distribución. En Process Mining, este atributo permite analizar el proceso de facturación desde la perspectiva de la estructura comercial. Facilita la comparación del rendimiento entre distintas organizaciones de ventas y ayuda a identificar qué regiones o líneas de negocio facturan con mayor eficiencia, además de respaldar iniciativas para estandarizar las buenas prácticas. Por qué es importante Permite comparar y analizar el rendimiento entre distintas divisiones comerciales o regiones, y ayuda a identificar buenas prácticas y oportunidades de mejora. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: VKORG Ejemplos 1000NA01EU01AP01 | |||
| Sistema de origen SourceSystem | Identifica el sistema de origen del que se extrajeron los datos. | ||
| Descripción Este atributo especifica el sistema de registro donde se originaron los datos. En una empresa con varias instancias de ERP o sistemas integrados, este campo permite distinguir los datos de cada fuente. En Process Mining, es esencial para validar los datos y comparar procesos entre distintos sistemas o unidades organizativas. Suele asignarse como valor estático durante la extracción para identificar el conjunto de datos. Por qué es importante Aporta contexto sobre el origen de los datos, algo fundamental para garantizar su integridad y realizar análisis específicos por sistema en entornos con varios sistemas. Dónde obtenerlo Suele ser un valor estático que se añade durante el proceso de extracción, transformación y carga (ETL) para identificar una instancia específica de SAP ECC (por ejemplo, «ECC_PROD_NA»). Ejemplos SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
| Última actualización de datos LastDataUpdate | Marca de tiempo de la actualización o extracción más reciente de datos del sistema de origen. | ||
| Descripción Este atributo indica cuándo se actualizó por última vez el conjunto de datos desde el sistema de origen. Aporta contexto esencial para el análisis, ya que permite saber si los datos consultados están actualizados. En Dashboards e informes, esta marca de tiempo informa a las partes interesadas sobre la actualidad de los datos y ayuda a establecer expectativas sobre la visibilidad de las transacciones más recientes. Suele generarse al finalizar la extracción de datos. Por qué es importante Informa sobre la actualidad de los datos, un aspecto fundamental para tomar decisiones operativas basadas en el análisis. Dónde obtenerlo Se genera y almacena durante el proceso de extracción, transformación y carga (ETL) de datos. Ejemplos 2023-10-27T02:00:00Z2023-10-28T02:00:00Z | |||
Actividades del proceso de pedido a cobro: facturación y emisión de facturas
| Actividad | Descripción | ||
|---|---|---|---|
| Factura compensada | Estado final de una factura pagada correctamente. Indica que la partida abierta se ha cerrado mediante el pago correspondiente o una nota de crédito. La factura se considera totalmente liquidada. | ||
| Por qué es importante Marca la finalización satisfactoria del ciclo de pedido a cobro de una factura. Es el evento de fin principal para medir el tiempo medio del ciclo de facturación. Dónde obtenerlo Se produce cuando se completan los campos del documento de compensación (AUGBL) y la fecha de compensación (AUGDT) de la partida de factura en la tabla BSEG. Capturar El evento se produce en la fecha de compensación (AUGDT) registrada en la tabla BSEG para la partida de factura. Tipo de evento explicit | |||
| Factura contabilizada | La factura se registra formalmente en el libro auxiliar de cuentas por cobrar y en el libro mayor. 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 plazo de cobro. El tiempo entre la generación y la contabilización puede revelar demoras internas de procesamiento que afectan al flujo de caja. Dónde obtenerlo Se registra en la tabla BKPF. La fecha de contabilización (BUDAT) del número de documento (BELNR) marca este evento. En el caso de los documentos aparcados, corresponde al momento en que se convierten en documentos contabilizados. Capturar A partir de la fecha de contabilización (BUDAT) del documento de factura en la tabla BKPF. Tipo de evento explicit | |||
| Factura enviada al cliente | Indica que la factura se ha enviado al cliente mediante un canal de salida definido, como la impresión, el correo electrónico o EDI. Normalmente, este evento se obtiene de los registros del sistema de gestión de salidas. | ||
| Por qué es importante Este evento es un hito clave que inicia el cómputo del plazo de pago del cliente. Las demoras en este punto afectan directamente a la fecha prevista de pago y a la eficiencia del cobro. Dónde obtenerlo Puede deducirse de la fecha y hora de procesamiento de la tabla de estado de mensajes (NAST) para el tipo de salida correspondiente a la factura. Capturar Se deduce de una entrada en la tabla NAST con el estado de procesamiento «1» (procesado correctamente). Tipo de evento inferred | |||
| Factura generada | Indica que el documento de facturación se ha creado en el sistema. Este evento se registra cuando se crea una entrada nueva en la tabla de cabecera de documentos contables (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 transcurrido desde este evento permite medir el tiempo de ciclo de creación de facturas y sirve de base para calcular los días pendientes de cobro (DSO). Dónde obtenerlo Se registra en la tabla BKPF. La fecha (CPUDT) y la hora (CPUTM) de creación de un número de documento concreto (BELNR) marcan este evento. El tipo de documento (BLART) permite identificarlo como factura. Capturar A partir de la marca de tiempo de creación (CPUDT) del documento de factura en la tabla BKPF. Tipo de evento explicit | |||
| Pago del cliente recibido | Se ha recibido un pago del cliente y se ha contabilizado en el sistema como un cobro en efectivo o un depósito bancario. Esto crea un documento de pago independiente que todavía no se ha aplicado a una factura concreta. | ||
| Por qué es importante Este es un hito importante del ciclo de conversión de efectivo. El tiempo transcurrido entre el envío de la factura y la recepción del pago es un componente principal de los días pendientes de cobro (DSO). Dónde obtenerlo Se registra como un documento nuevo en BKPF y BSEG, normalmente con un tipo de documento que indica un pago del cliente, como «DZ». La fecha de contabilización (BUDAT) marca el evento. Capturar A partir 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 relacionada con la factura, normalmente a raíz de una reclamación del cliente. Se registra en el sistema SAP Dispute Management. | ||
| Por qué es importante Identifica las facturas con riesgo de retraso en el pago y destaca los problemas subyacentes que causan insatisfacción en los clientes. Marca el inicio de un proceso importante de gestión de excepciones. Dónde obtenerlo Se obtiene de la creación de un caso en la tabla de casos de disputa (UDM_CASE) vinculado al documento contable de la factura. Capturar Se registra cuando un usuario crea un caso de disputa mediante la transacción UDM_DISPUTE. Tipo de evento explicit | |||
| Factura aparcada | El documento de factura se ha guardado en estado preliminar, sin contabilizarse en el libro mayor. Esto suele hacerse cuando falta información o es necesario revisar el documento antes de contabilizarlo definitivamente. | ||
| Por qué es importante Permite seguir los pasos previos a la contabilización y detectar posibles demoras. Un periodo prolongado en estado de aparcamiento puede indicar problemas de calidad de los datos o cuellos de botella en el proceso de aprobación previa. Dónde obtenerlo Los documentos aparcados se almacenan en la tabla VBKPF. Esta actividad se identifica cuando se crea allí un documento que posteriormente se contabiliza. Capturar Se registra al guardar un documento aparcado mediante una transacción como FV70. Tipo de evento explicit | |||
| Factura aprobada | Representa la aprobación formal de la factura, que permite contabilizarla o enviarla al cliente. A menudo se deduce cuando un documento aparcado se convierte en un documento contabilizado. | ||
| Por qué es importante Permite seguir el flujo de trabajo de aprobación interna, una fuente habitual de cuellos de botella. Analizar esta actividad ayuda a utilizar el Dashboard de análisis del flujo de aprobación de facturas para identificar a quienes tardan en aprobar. Dónde obtenerlo Puede deducirse de la transición de un documento del estado aparcado (en VBKPF) al estado contabilizado (en BKPF). Si se utiliza un sistema de flujo de trabajo, también puede ser un evento explícito en sus registros. Capturar Compare la fecha de creación del documento aparcado (VBKPF) con la fecha de contabilización del documento definitivo (BKPF). Tipo de evento inferred | |||
| Factura corregida | Representa una actividad de retrabajo: se detectó un error en la factura inicial y posteriormente se anuló. Se identifica mediante los documentos de anulación vinculados a la factura original. | ||
| Por qué es importante Pone de manifiesto ineficiencias del proceso y problemas de calidad. Una frecuencia elevada de correcciones indica problemas en los datos de ventas o facturación de etapas anteriores y ayuda a analizar el Dashboard de retrabajo y errores en las facturas. Dónde obtenerlo Se identifica buscando un documento de anulación en el que BKPF-STBLG apunte al documento original. La creación de este documento de anulación constituye el evento. Capturar Se registra cuando se crea un documento de anulación, por ejemplo, mediante FB08. Tipo de evento explicit | |||
| Factura dada de baja | Estado final alternativo que indica que la factura se considera incobrable y que el importe pendiente se compensa contra una cuenta de deudas incobrables. La factura se cierra sin que el cliente haya realizado un pago. | ||
| 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 causas de las deudas incobrables y a mejorar las políticas de gestión del crédito. Dónde obtenerlo Se infiere al analizar la transacción de compensación de la factura. Si el documento de compensación se contabiliza en una cuenta específica del libro mayor (G/L) para gastos por deudas incobrables, se considera que la factura se ha dado de baja. Capturar Se infiere cuando la transacción de compensación incluye una contabilización en una cuenta designada del libro mayor (G/L) para deudas incobrables. Tipo de evento inferred | |||
| Fecha de vencimiento de la factura alcanzada | Evento calculado que marca el día en que vence oficialmente el pago de la factura según las condiciones de pago. No es una actividad realizada por un usuario o sistema, sino un momento clave. | ||
| Por qué es importante Es esencial para analizar el comportamiento de pago y el cumplimiento. Sirve de referencia para determinar si los pagos son puntuales o tardíos y calcular el KPI de pagos puntuales. Dónde obtenerlo Se obtiene al comparar la fecha actual con la fecha neta de vencimiento. Esta fecha se encuentra en el campo BSEG-ZFBDT o se calcula a partir de la fecha de referencia y las condiciones de pago. Capturar Compare la fecha del sistema con el campo de fecha neta de vencimiento de la partida de factura (BSEG). Tipo de evento calculated | |||
| Pago aplicado a la factura | El pago recibido del cliente se ha conciliado y aplicado a la factura pendiente correspondiente, que queda marcada para su compensación. Este paso de conciliación vincula el pago con la deuda. | ||
| Por qué es importante Esta actividad es fundamental para medir el tiempo de ciclo de aplicación de pagos. Las demoras al aplicar los pagos pueden distorsionar el estado real de las cuentas por cobrar y ocultar el efectivo disponible. Dónde obtenerlo Se deduce de la transacción de compensación, por ejemplo, F-32, que completa los campos de compensación de la partida de factura. La marca de tiempo del evento corresponde a la fecha de compensación. Capturar Se deduce cuando se completa la fecha de compensación (AUGDT) en la tabla de partidas de factura (BSEG). Tipo de evento inferred | |||
| Recordatorio de pago enviado | El sistema ha generado y enviado al cliente un aviso de reclamación o recordatorio de pago por una factura vencida. Este evento se obtiene de los registros del historial de reclamaciones. | ||
| Por qué es importante Ayuda a evaluar la eficacia de la estrategia de cobro. Analizar el tiempo transcurrido entre el recordatorio y la recepción del pago es clave para el KPI de eficacia de los recordatorios de pago. Dónde obtenerlo Se registra en las tablas de datos de reclamaciones, en concreto MHNK (cabecera de datos de reclamación) y MHND (partidas de datos de reclamación), que se generan al ejecutar el proceso de reclamación (transacción F150). Capturar Se registra al ejecutar un proceso de reclamación (F150) para la partida vencida. Tipo de evento explicit | |||
Guías de extracción
Pasos
- Acceda al editor ABAP: Inicie sesión en su sistema SAP ECC. Abra el editor ABAP con el código de transacción
SE38. - Cree un programa: Escriba un nombre para el nuevo programa en el campo Program, por ejemplo,
Z_PM_O2C_INVOICE_EXTRACT, y haga clic en el botón de creación. Asígnele un título descriptivo y seleccione 'Executable Program' como tipo de programa. - Defina la pantalla de selección: En el código fuente del programa, defina los parámetros de la pantalla de selección. Así, los usuarios podrán filtrar los datos que se extraerán. Entre los parámetros clave se incluyen el intervalo de fechas de creación del documento (
S_ERDAT), el código de empresa (S_BUKRS) y el tipo de documento de facturación (S_VBTYP). - Defina las estructuras de datos: Declare una estructura de tabla interna para almacenar los datos finales del Registro de eventos. Debe incluir los campos
InvoiceNumber,ActivityNameyEventTime, además de atributos recomendados comoUserName,BillingDocumentType,CustomerNumber,CompanyCodeyTotalInvoiceAmount. - Implemente la lógica de selección de datos: Escriba la lógica ABAP principal para seleccionar los datos. Primero, seleccione los documentos de facturación principales de las tablas
VBRKyBKPFsegún los criterios de la pantalla de selección. Guárdelos en una tabla interna temporal. - Extraiga las actividades: Recorra la lista inicial de documentos de facturación. Para cada documento, realice selecciones adicionales en distintas tablas a fin de identificar las 13 actividades requeridas. Por ejemplo, consulte la tabla
NASTpara los eventos 'Factura enviada al cliente',BSEGpara la información de compensación ('Factura compensada', 'Pago aplicado') yMHNKpara los datos de reclamación ('Recordatorio de pago emitido'). - Genere la tabla del Registro de eventos: Por cada actividad identificada en el paso anterior, añada un registro a la tabla interna final del Registro de eventos. Asegúrese de asignar correctamente a partir de las tablas de origen los campos
InvoiceNumber,ActivityName,EventTimey los demás atributos. - Escriba en el servidor de aplicaciones: Cuando termine el recorrido y la tabla final del Registro de eventos esté completa, utilice las instrucciones
OPEN DATASET,LOOP AT... TRANSFERyCLOSE DATASETpara escribir su contenido en un archivo plano en el servidor de aplicaciones de SAP. Especifique una ruta lógica a la que se pueda acceder. - Recupere el archivo: Utilice el código de transacción
AL11para abrir los directorios del servidor de aplicaciones y localizar el archivo generado. Coordine con el equipo de SAP Basis para descargarlo del servidor a su equipo o a una ubicación de red compartida. - Dé formato al archivo: Abra el archivo descargado y confirme que sea un archivo CSV con una fila de encabezados. Compruebe que esté guardado con codificación UTF-8 para que ProcessMind pueda cargarlo.
Configuración
- Requisitos previos: Acceso para crear y ejecutar programas ABAP (transacción SE38). Autorización para leer tablas de FI y SD, incluidas
VBRK,VBRP,BKPF,BSEG,NAST,MHNKyUDM_CASE_ATTR00(para la gestión de disputas). - Selección del intervalo de fechas: El programa debe incluir un parámetro obligatorio para el intervalo de fechas, normalmente basado en la fecha de creación del documento (
ERDATen VBRK/BKPF). Para la extracción inicial, se recomienda un intervalo de 3 a 6 meses para mantener un volumen de datos manejable. - Filtros clave: Filtre siempre por
CompanyCode(BUKRS) para limitar el alcance de la extracción. También se recomienda filtrar por tipo de documento de facturación (VBTYPde VBRK) o tipo de documento contable (BLARTde BKPF) para incluir solo las facturas pertinentes, por ejemplo, 'RV' para las facturas contables estándar, y excluir notas de crédito y otros documentos. - Consideraciones de rendimiento: Si el conjunto de datos abarca más de unos pocos meses, ejecute el programa como un proceso en segundo plano para evitar que se agote el tiempo de la sesión. Optimice la lógica ABAP para usar lecturas de tablas indexadas y evitar bucles anidados con selecciones a la base de datos. Es preferible seleccionar primero los datos en tablas internas y procesarlos después.
- 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 del archivo CSV, normalmente una coma o un punto y coma. Asegúrese de que la ruta corresponda a un directorio configurado y accesible globalmente.
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, incluidas VBRK, BKPF, BSAD, NAST, CDHDR, CDPOS, SCASE y otras especificadas en la consulta. Este nivel de acceso suele concederse únicamente a administradores del sistema o a determinados equipos de análisis de datos.
- Conéctese a la base de datos: Utilice un cliente SQL estándar, como DBeaver, Oracle SQL Developer o Microsoft SQL Server Management Studio, para conectarse a la base de datos de SAP ECC.
- Prepare la consulta SQL: Copie la consulta SQL completa de la sección 'query' en el editor de su cliente SQL.
- Personalice los marcadores de posición: La consulta contiene varios marcadores de posición que debe sustituir por valores específicos de su entorno. Estos son:
'YYYYMMDD': Sustituya todas las apariciones por las fechas de inicio y fin del período que desea analizar. Es fundamental limitar los datos a un intervalo manejable.'XXXX': Sustitúyalo por el código o los códigos de empresa que desea analizar.[Your Invoice Output Type]: Especifique el código del tipo de salida que se utiliza para enviar facturas a los clientes, por ejemplo, 'RD00'.[Your Bad Debt G/L Account]: Introduzca el número de la cuenta del libro mayor que se utiliza para dar de baja las facturas incobrables.[Your Dispute Case Invoice Attribute]: Especifique el nombre del atributo donde se almacena el número de factura en la configuración de gestión de disputas, por ejemplo, 'INVOICE_ID'.
- Revise las funciones de marca de tiempo: La consulta utiliza una sintaxis genérica
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Quizá deba adaptarla a su sistema de base de datos, por ejemplo, conTO_TIMESTAMPen Oracle oDATETIMEFROMPARTSen SQL Server. - Ejecute la consulta: Ejecute la consulta modificada. El proceso puede tardar bastante, según el tamaño de las tablas de SAP y el intervalo de fechas seleccionado.
- Revise los resultados: Cuando termine la consulta, compruebe que la salida incluya las columnas previstas: InvoiceNumber, ActivityName, EventTime y los atributos recomendados. Verifique que no haya errores ni resultados vacíos.
- Exporte a CSV: Exporte el conjunto completo de resultados desde su cliente SQL a un archivo CSV. Asegúrese de que el archivo utilice codificación UTF-8 para evitar problemas con caracteres especiales.
- Prepárelo para cargarlo: Antes de cargar el archivo en una herramienta de Process Mining, confirme que los encabezados de las columnas CSV coincidan exactamente con los nombres de atributos requeridos, por ejemplo,
InvoiceNumber,ActivityName,EventTimeyUserName.
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 por completo la capa de aplicaciones de SAP.
- Autorización: El usuario de la base de datos debe tener permisos
SELECTen todas las tablas de la consulta, que abarcan los módulos FI, SD y, posiblemente, FSCM. - Intervalo de fechas: Es fundamental limitar la consulta a un intervalo de fechas concreto para mantener un rendimiento y un volumen de datos razonables. Se recomienda empezar con un período de 3 a 6 meses. Debe establecer los marcadores de posición de fecha
'YYYYMMDD'en varias partes de la consulta. - Filtro por código de empresa: La consulta está diseñada para filtrarse por código de empresa (
BUKRS). Lo habitual es analizar uno o unos pocos códigos de empresa a la vez. - Configuración de tipos de documento: La lógica para identificar eventos como correcciones de facturas, bajas contables o documentos enviados depende de la configuración estándar de SAP. Quizá deba adaptar la consulta si su organización utiliza tipos de documento personalizados (
BLART), tipos de salida (KSCHL) o cuentas del libro mayor específicas para estos procesos. - Consideraciones de rendimiento: Ejecutar esta consulta en un sistema SAP de producción activo puede consumir muchos recursos y afectar al rendimiento operativo. Se recomienda encarecidamente realizar las extracciones grandes fuera de las horas de mayor actividad o en una réplica de base de datos dedicada a informes.
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 tener una licencia de una herramienta ETL con un conector certificado para SAP (por ejemplo, Informatica PowerCenter con SAP Connector o Talend con SAP Connector). Compruebe que dispone de credenciales de usuario de SAP con las autorizaciones necesarias para leer las tablas financieras, de ventas y del sistema requeridas (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR y CDPOS).
- Establezca la conexión con SAP: En su herramienta ETL, cree una conexión nueva con su sistema SAP ECC. Configure los datos de conexión, incluidos el servidor de aplicaciones, el número de sistema, el cliente, el usuario y la contraseña. Pruebe la conexión para comprobar que funcione.
- Defina las fuentes de datos: Para cada actividad que vaya a extraer, defina las tablas SAP correspondientes como fuentes de datos en el trabajo ETL. Por ejemplo, añada VBRK para la generación de facturas, BKPF para los eventos de contabilización y NAST para las comunicaciones con los clientes.
- Cree la lógica de extracción para cada actividad: Configure un flujo de datos o una transformación independiente para cada una de las 13 actividades requeridas. Aplique filtros en cada flujo para seleccionar los registros pertinentes. Por ejemplo, filtre por código de empresa (BUKRS), tipo de documento (BLART) e intervalo de fechas específico (como la fecha de creación ERDAT).
- Asigne los campos y transforme los datos: En cada flujo de datos, asigne los campos de las tablas SAP de origen a la estructura de destino del Registro de eventos: InvoiceNumber, ActivityName, EventTime, UserName y otros atributos recomendados. Utilice la lógica de transformación para asignar un valor fijo a 'ActivityName' en cada flujo y dar el formato correcto a las fechas y marcas de tiempo.
- Procese las actividades complejas: Para eventos calculados como 'Fecha de vencimiento de la factura alcanzada', utilice la fecha de pago de referencia (ZFBDT) y la lógica de condiciones de pago para calcular la fecha de vencimiento, o extraiga directamente la fecha neta de vencimiento (NETDT) de BSEG. Para eventos derivados de registros de cambios, como 'Factura aprobada', quizá deba combinar tablas como BKPF y CDHDR/CDPOS usando el número y la fecha del documento.
- Combine los datos de las actividades: 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. Antes de unirlos, compruebe que los nombres de las columnas y los tipos de datos sean coherentes en todos los flujos.
- Configure el destino: Defina el destino final del Registro de eventos. Puede ser un archivo plano (CSV), una tabla de base de datos o una conexión directa a un área de preparación.
- Configure el calendario de extracción: Defina los parámetros del intervalo de fechas para la extracción. En la carga inicial, puede extraer entre 6 y 12 meses de datos. Para las cargas incrementales posteriores, configure el trabajo para que extraiga los datos desde la fecha de la última ejecución.
- Ejecute y exporte: Ejecute el trabajo ETL. Al finalizar, revise el archivo de salida para comprobar que tenga el formato requerido. El resultado debe ser un único archivo CSV, con una fila por evento, listo para cargarlo en ProcessMind.
Configuración
- Conexión a SAP: Se requiere una conexión al servidor de aplicaciones del 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 la herramienta ETL: Es obligatoria una licencia válida de la herramienta ETL comercial y de su conector específico para SAP.
- Intervalo de fechas: Se recomienda extraer datos de un período de 3 a 6 meses para obtener una muestra representativa para el análisis sin sobrecargar el sistema. Utilice un parámetro configurable para las fechas de inicio y fin.
- Filtros clave: Filtre siempre por código de empresa (BUKRS) para limitar el alcance de la extracción. También es fundamental filtrar por los tipos de documento de facturación pertinentes (VBRK-FKART) y los tipos de documento contable (BKPF-BLART) para incluir solo facturas estándar y excluir otros documentos, 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 fuera de las horas de mayor actividad para reducir al mínimo el impacto en el rendimiento del sistema SAP de origen.
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 ¿Listo para comenzar?
Utilice este Template para agilizar la preparación de los datos y obtener información valiosa sobre el proceso de facturación y emisión de facturas. Empiece hoy a mejorar el flujo de caja.
¡Mejore el flujo de caja: optimice hoy la facturación y la emisión de facturas!
Elimine ineficiencias, reduzca el tiempo de ciclo un 30 % y mejore su flujo de caja.
No se requiere tarjeta de crédito. Empiece a optimizar en cuestión de minutos.