Su Template de datos de Order to Cash: facturación y emisión de facturas
Su Template de datos de Order to Cash: facturación y emisión de facturas
- Atributos recomendados para un análisis completo
- Pasos e hitos clave del proceso que debe supervisar
- Orientación práctica para extraer datos de SAP ECC
Atributos de Order to Cash: facturación y emisión de facturas
| Nombre | Descripción | ||
|---|---|---|---|
| Actividad ActivityName | El 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 concreta 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 diversos eventos del sistema, cambios de estado en documentos o códigos de transacción específicos ejecutados por personas usuarias. La secuencia de estas actividades forma el flujo del proceso, que constituye la base del análisis de Process Mining. Al examinar las actividades, las organizaciones pueden comprender qué pasos se realizan, en qué orden y con qué frecuencia, y 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 del proceso. Dónde obtenerlo Es un atributo conceptual derivado de varias fuentes, como los códigos de transacción (CDHDR-TCODE), los cambios de estado de los documentos (VBUK-FKSTK) y las contabilizaciones de documentos contables. Ejemplos Factura generadaFactura contabilizadaRecordatorio de pago emitidoFactura compensada | |||
| Hora de inicio EventTime | La marca de tiempo que indica cuándo tuvo lugar una actividad o un evento concreto. | ||
| 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, incluido el cálculo de tiempos de ciclo, la identificación de cuellos de botella y la supervisión del rendimiento del proceso frente a los acuerdos de nivel de servicio. Este atributo suele construirse 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 cualquier análisis de rendimiento. Por qué es importante Este atributo es la base de todo 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 diversos campos de fecha y hora de varias tablas, como BKPF (BUDAT, CPUTM), VBRK (ERDAT, ERZET) y tablas de registros 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 del documento de facturación, que actúa como ID de caso principal del proceso de facturación. | ||
| Descripción El número de factura, conocido en SAP como número de documento de facturación, identifica de forma única cada factura. En Process Mining, actúa como CaseId y agrupa todas las actividades relacionadas, como la creación, la contabilización, el envío, el pago y la compensación, en una única instancia del proceso de principio a fin. Analizar los procesos por número de factura permite obtener una visión completa del ciclo de vida de cada transacción de facturación, desde su inicio hasta su liquidación definitiva. Esto es fundamental para calcular indicadores clave de rendimiento, como los días de ventas pendientes de cobro (DSO) y el tiempo total del ciclo de facturación, y proporciona 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 permite 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 | El 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 asociado al proceso de facturación. Se utiliza en diversos análisis, como la segmentación de facturas en categorías de alto y bajo valor para comprobar si sus flujos de proceso difieren. También puede utilizarse para priorizar las gestiones de cobro o investigar por qué las facturas de alto valor tardan más en aprobarse o pagarse. Este contexto financiero aporta una dimensión significativa al análisis del proceso. Por qué es importante Aporta un contexto financiero esencial y permite analizar los procesos según el valor de la factura, por ejemplo, para identificar si las facturas de alto valor siguen un proceso diferente o tardan más en liquidarse. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: NETWR Ejemplos 1500.7525000.00500.0012345.67 | |||
| Nombre de usuario UserName | El ID de la persona usuaria que ejecutó la actividad o creó el documento. | ||
| Descripción Este atributo registra el ID de usuario de SAP responsable de un evento determinado, como crear una factura o contabilizar un pago. Es esencial para analizar el componente humano del proceso. Con estos datos es posible investigar las diferencias de rendimiento entre personas usuarias o equipos, identificar necesidades de formación y detectar posibles problemas de cumplimiento. También se utiliza para diferenciar las actividades manuales realizadas por personas de los pasos automatizados ejecutados por usuarios del sistema o por procesos por lotes, algo clave para calcular las tasas de automatización. Por qué es importante Permite analizar el rendimiento de las personas usuarias y la distribución de la carga de trabajo, así como distinguir entre actividades manuales y automatizadas, lo que respalda 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 | Un 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 concreto. Este atributo es fundamental para segmentar y analizar el proceso de facturación según las características del cliente. Las personas analistas pueden utilizar este campo para comparar los días de ventas pendientes de cobro (DSO) entre distintos clientes, identificar qué clientes pagan tarde con frecuencia o analizar el cumplimiento de las condiciones de pago. Comprender estos patrones es clave para gestionar las relaciones con los clientes y mejorar las estrategias de cobro adaptadas a cada segmento. Por qué es importante Permite realizar análisis centrados en el cliente, identificar comportamientos de pago, evaluar el DSO por cliente y adaptar las estrategias de cobro. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: KUNRG (pagador) o KUNAG (cliente solicitante). Ejemplos 100023200541CUST-A487910345 | |||
| Sociedad CompanyCode | El identificador de la entidad jurídica que emitió la factura. | ||
| Descripción La sociedad representa una unidad jurídica y contable independiente en SAP. Todas las transacciones financieras, incluidas las facturas, se contabilizan en una sociedad específica. Es un elemento fundamental de los datos organizativos. En el contexto de Process Mining, la sociedad se utiliza para analizar y comparar el rendimiento del proceso de facturación entre distintas entidades jurídicas de una corporación. Esto ayuda a identificar las mejores prácticas de una entidad que podrían aplicarse a otras y garantiza que el análisis respete la estructura organizativa de la empresa. Por qué es importante Permite filtrar y comparar procesos entre distintas entidades jurídicas, algo fundamental para el análisis financiero y la comparación del rendimiento organizativo. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: BUKRS Ejemplos 10002000US01DE01 | |||
| Tipo de documento de facturación BillingDocumentType | Un código que clasifica el tipo de documento de facturación, como una factura, una nota de crédito o una nota de débito. | ||
| Descripción El tipo de documento de facturación clasifica las transacciones en categorías diferenciadas según su finalidad empresarial. Por ejemplo, «F2» es una factura estándar de cliente, mientras que «G2» representa una nota de crédito. Esta clasificación se configura en SAP para controlar cómo se procesan los distintos documentos de facturación. En Process Mining, este atributo es esencial para filtrar y comparar diferentes escenarios de facturación. Las personas analistas pueden examinar por separado el proceso de las facturas estándar y el de las notas de crédito para comprender sus flujos, tiempos de ciclo y dificultades específicos, lo que permite realizar mejoras más específicas. Por qué es importante Permite segmentar y analizar distintos procesos de facturación, como las facturas estándar frente a las notas de crédito, que a menudo presentan flujos de proceso muy diferentes. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: FKART Ejemplos F2G2L2IV | |||
| 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 de una función o programa específico de SAP, como «VF01» para crear un documento de facturación. Registrar el T-Code de cada evento proporciona una visión técnica del sistema sobre la forma en que se ejecutó el proceso. Esta información resulta muy valiosa para el análisis de causas raíz. Por ejemplo, si los errores son frecuentes, las personas analistas pueden comprobar 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 utilizan en el proceso. Por qué es importante Proporciona 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 de usuario no estándar. Dónde obtenerlo Tabla de SAP ECC: CDHDR, campo: TCODE Ejemplos VF01VF02FB01F-28 | |||
| Condiciones de pago PaymentTerms | Las condiciones en las que el vendedor completa una venta, incluido el calendario de pagos. | ||
| Descripción Las condiciones de pago definen cuándo debe realizarse un pago, por ejemplo, «neto a 30 días» o «neto a 60 días». Estas condiciones 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 determinadas condiciones están asociadas a ciclos de pago más largos o a un mayor porcentaje de pagos atrasados. Esta información puede ayudar a la empresa a negociar mejores condiciones con sus 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 el comportamiento de pago de los clientes y el impacto en el flujo de caja según las condiciones negociadas, y proporciona información para optimizar los acuerdos comerciales. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: ZTERM Ejemplos Z030Z060Z001 | |||
| Es un reproceso IsRework | Un indicador que señala si una actividad es un paso de reproceso o corrección. | ||
| Descripción Este atributo calculado identifica las actividades que representan un reproceso, como «Factura corregida» o las anulaciones de documentos. Normalmente es un indicador booleano derivado del nombre de la actividad o de códigos de transacción asociados a correcciones y cancelaciones, como «VF11» para cancelar un documento de facturación. En Process Mining, este indicador resulta muy valioso para cuantificar el reproceso en el proceso de facturación. Permite calcular directamente KPI como el porcentaje de correcciones de facturas y ayuda a visualizar los bucles de reproceso en el mapa de procesos, poniendo de relieve las ineficiencias y los 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 reproceso. Dónde obtenerlo Se obtiene 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 | |||
| Está 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. Normalmente se obtiene comparando el atributo Nombre de usuario con una lista de identificadores 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 porcentaje de facturación automatizada se calcula directamente a partir de este atributo y ayuda a realizar un seguimiento del avance de las iniciativas de automatización. Por qué es importante Permite calcular directamente el porcentaje de facturación automatizada, ayuda a medir la eficiencia del proceso y facilita el seguimiento del impacto de los proyectos de automatización. Dónde obtenerlo Se obtiene del atributo Nombre de usuario. La lógica sería similar a: IF UserName IN ('BATCH', 'SYSTEM', 'RFCUSER') THEN true ELSE false. Ejemplos truefalse | |||
| Fecha de compensación ClearingDate | La fecha en la que se recibe el pago y la factura se compensa en las cuentas por cobrar. | ||
| Descripción La fecha de compensación es la fecha en la que una partida abierta, como una factura, se marca como pagada o «compensada» en el sistema financiero. Esta fecha representa el momento en que el efectivo se considera cobrado y conciliado. Es una de las fechas más importantes del ciclo Order to Cash. Sirve como punto final para calcular los días de ventas pendientes de cobro (DSO) y el tiempo total del ciclo de factura a cobro. Analizar la fecha de compensación ayuda a medir la eficacia del proceso de cobro. Por qué es importante Marca el último paso del ciclo de vida de la factura, sirve como fecha final para calcular el DSO y el tiempo total del ciclo, y 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 | La fecha en la que el documento se contabiliza en los libros de contabilidad financiera. | ||
| Descripción La fecha de contabilización determina el periodo fiscal en el que se registra la transacción en el libro mayor. Es una fecha fundamental para la contabilidad y los informes financieros. Los retrasos entre la fecha de creación del documento y la fecha de 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 clave en el ciclo de vida de la factura. El tiempo transcurrido entre la generación de la factura y su contabilización puede ser un indicador clave de la eficiencia del departamento de facturación. Por qué es importante Marca un hito financiero clave y es fundamental para la contabilidad. El tiempo transcurrido entre la creación y la contabilización de la factura es una medida importante de 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 | La fecha límite en la que se espera que el cliente realice el pago. | ||
| Descripción La fecha de vencimiento de la factura es el plazo de pago establecido en las condiciones de pago. Esta fecha es fundamental para gestionar las cuentas por cobrar e iniciar las gestiones de cobro. Este atributo se utiliza para calcular el KPI de porcentaje de pagos puntuales, comparándolo con la fecha de pago real. 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 o vencidos. Normalmente se calcula a partir de la fecha base y las condiciones de pago. Por qué es importante Es la referencia para medir el rendimiento de los pagos puntuales 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 | La fecha del documento original, proporcionada por el proveedor o la persona que lo creó. | ||
| Descripción La fecha del documento es la fecha en la que se emitió el documento original. En facturación, normalmente corresponde a la fecha de creación de la factura y suele utilizarse 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 de ventas pendientes de cobro (DSO). Representa el inicio del periodo de cobro desde la perspectiva del cliente. Analizar las discrepancias entre la fecha del documento y la fecha de contabilización puede revelar retrasos internos en la gestión de las facturas recibidas. Por qué es importante Sirve como referencia para calcular la antigüedad de la factura y el DSO, y proporciona un punto de referencia fundamental 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 | El código de moneda de 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 interpretar 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 elaborar informes coherentes y garantiza que los importes no se agreguen sin realizar la conversión de moneda correspondiente, lo que daría lugar a un análisis financiero incorrecto. Por qué es importante Proporciona el contexto necesario para todos los valores monetarios y garantiza un análisis financiero preciso, especialmente en entornos con varias monedas. Dónde obtenerlo Tabla de SAP ECC: VBRK, campo: WAERK Ejemplos USDEURGBPJPY | |||
| Número del documento de ventas SalesDocumentNumber | El identificador del pedido de ventas original que dio lugar a la factura. | ||
| Descripción Este atributo proporciona un vínculo directo desde la factura hasta el pedido de ventas que inició la transacción. Esta trazabilidad es fundamental para realizar un análisis completo de Order to Cash de principio a fin. Al conectar el proceso de facturación con el proceso anterior del pedido de ventas, las organizaciones pueden analizar el tiempo total del ciclo desde el pedido del cliente hasta la recepción del efectivo. Esto ayuda a identificar si los retrasos en la facturación se deben a problemas en ventas, cumplimiento o en el propio departamento de facturación, y proporciona una visión más completa del proceso. Por qué es importante Conecta el proceso de facturación con el pedido de ventas y permite realizar un análisis de Order to Cash de principio a fin, además de ayudar a identificar retrasos entre departamentos. Dónde obtenerlo Tabla de SAP ECC: VBRP, campo: VGBEL Ejemplos 100000451000004610000047 | |||
| Organización de ventas SalesOrganization | La 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 de ventas y 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, ayuda a identificar qué regiones o líneas de negocio son más eficientes en sus procesos de facturación y respalda las iniciativas para estandarizar las mejores prácticas. Por qué es importante Permite comparar y analizar el rendimiento de distintas divisiones o regiones de ventas, ayudando a identificar las mejores prácticas y las áreas 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 en el que se originaron los datos. En un entorno corporativo con varias instancias de ERP o sistemas integrados, este campo ayuda a distinguir los datos procedentes de distintas fuentes. En Process Mining, es esencial para validar los datos y realizar análisis que comparen procesos entre diferentes sistemas o unidades organizativas. Normalmente se completa con un valor estático durante la extracción de datos para identificar el conjunto de datos. Por qué es importante Proporciona contexto sobre el origen de los datos, algo fundamental en entornos con varios sistemas para garantizar su integridad y permitir análisis específicos de cada sistema. Dónde obtenerlo Normalmente es un valor estático que se añade durante el proceso de extracción, transformación y carga (ETL) de datos para identificar la instancia concreta de SAP ECC, por ejemplo, «ECC_PROD_NA». Ejemplos SAP_ECC_PRODECC_EU_100SAP_US_FIN | |||
| Última actualización de datos LastDataUpdate | La marca de tiempo de la actualización o extracción más reciente de datos 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 esencial para cualquier análisis, ya que permite comprender la actualidad de los datos consultados. En los Dashboards y los informes, esta marca de tiempo informa a las partes interesadas sobre la vigencia de los datos y ayuda a gestionar sus expectativas respecto a la visibilidad de las transacciones más recientes. Normalmente se genera al final del proceso de 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 de Order to Cash: facturación y emisión de facturas
| Actividad | Descripción | ||
|---|---|---|---|
| Factura compensada | Es el estado final de una factura pagada correctamente e indica que la partida abierta se ha cerrado mediante un pago o una nota de crédito correspondiente. La factura se considera totalmente liquidada. | ||
| Por qué es importante Marca la finalización correcta del ciclo Order to Cash de una factura. Es el evento final principal para medir el tiempo medio total del ciclo de facturación. Dónde obtenerlo Se produce cuando los campos del documento de compensación (AUGBL) y de la fecha de compensación (AUGDT) se completan para la posición de factura en la tabla BSEG. Recopilar El evento se produce en la fecha de compensación (AUGDT) registrada en la tabla BSEG para la posición de factura. Tipo de evento explicit | |||
| Factura contabilizada | La factura se registra formalmente en el sublibro de cuentas por cobrar y en el libro mayor. Este evento hace que la factura sea jurídicamente 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 transcurrido entre la generación y la contabilización puede revelar retrasos internos que afectan a la liquidez. 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 documentos aparcados, corresponde al momento en que se convierten en documentos contabilizados. Recopilar A partir de la fecha de contabilización (BUDAT) de la tabla BKPF correspondiente al documento de factura. Tipo de evento explicit | |||
| Factura enviada al cliente | Indica que la factura se ha enviado al cliente a través de un canal de salida definido, como impresión, correo electrónico o EDI. Normalmente se registra a partir 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. Los retrasos en este punto afectan directamente a la fecha prevista de recepción del pago y a la eficiencia del cobro. Dónde obtenerlo Puede inferirse a partir de la fecha y hora de procesamiento de la tabla de estados de mensajes (NAST) para el tipo de salida correspondiente a la factura. Recopilar Se infiere a partir de una entrada de la tabla NAST con estado de procesamiento «1» (procesado correctamente). Tipo de evento inferred | |||
| Factura generada | Indica la creación del documento de facturación en el sistema. Este evento se registra cuando se crea una nueva entrada 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 ayuda a medir el tiempo del ciclo de creación de facturas y constituye la base para calcular los días de ventas 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 específico (BELNR) marcan este evento. El tipo de documento (BLART) lo identifica como una factura. Recopilar A partir de la marca de tiempo de creación (CPUDT) de la tabla BKPF correspondiente al documento de factura. Tipo de evento explicit | |||
| Pago del cliente recibido | Se ha recibido un pago del cliente y se ha contabilizado en el sistema como cobro en efectivo o 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 de ventas 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 de cliente, como «DZ». La fecha de contabilización (BUDAT) marca el evento. Recopilar 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 contra la factura, normalmente debido a reclamaciones del cliente. Esto se registra en el sistema SAP Dispute Management. | ||
| Por qué es importante Identifica las facturas con riesgo de retraso en el pago y pone de relieve los problemas subyacentes que provocan la insatisfacción del cliente. Marca el inicio de un proceso importante de gestión de excepciones. Dónde obtenerlo Se captura a partir de la creación de un caso en la tabla de casos de disputa (UDM_CASE) vinculada al documento contable de la factura. Recopilar Se registra cuando una persona usuaria 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 un estado preliminar sin contabilizarse en el libro mayor. Esto suele utilizarse cuando la información está incompleta o requiere revisión antes de la contabilización definitiva. | ||
| Por qué es importante Registra los pasos previos a la contabilización y los posibles retrasos. Una permanencia prolongada en el estado aparcado puede indicar problemas de calidad de datos o cuellos de botella en el proceso de preaprobación. Dónde obtenerlo Los documentos aparcados se almacenan en la tabla VBKPF. La creación de un documento en esta tabla que posteriormente se contabiliza representa esta actividad. Recopilar 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 infiere cuando un documento aparcado se convierte en un documento contabilizado. | ||
| Por qué es importante Registra el Workflow de aprobación interna, una fuente habitual de cuellos de botella. Analizar esta actividad ayuda a respaldar el Dashboard de análisis del flujo de aprobación de facturas al identificar a las personas aprobadoras más lentas. Dónde obtenerlo Puede inferirse a partir de la transición de un documento del estado aparcado (en VBKPF) al estado contabilizado (en BKPF). Como alternativa, si se utiliza un sistema de Workflow, puede tratarse de un evento explícito en los registros del Workflow. Recopilar 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 reprocesamiento en la que se detectó que una factura inicial era incorrecta y posteriormente se revirtió. Se registra identificando los documentos de reversió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 origen y respalda el Dashboard de reprocesamiento y tasas de error de facturas. Dónde obtenerlo Se identifica al encontrar un documento de reversión cuyo campo BKPF-STBLG apunta al documento original. El evento es la creación de este documento de reversión. Recopilar Se registra cuando se crea un documento de reversión, por ejemplo, mediante FB08. Tipo de evento explicit | |||
| Factura dada de baja | Es un estado final alternativo en el que la factura se considera incobrable y el importe pendiente se compensa contra una cuenta de insolvencias. 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 insolvencias y 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 de gastos por insolvencias del libro mayor, la factura se considera dada de baja. Recopilar Se infiere cuando la transacción de compensación incluye una contabilización en una cuenta designada de insolvencias del libro mayor. Tipo de evento inferred | |||
| Pago aplicado a la factura | El pago recibido del cliente se ha cotejado y aplicado contra la factura abierta correspondiente, 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 fundamental para medir el tiempo del ciclo de aplicación de pagos. Los retrasos en la aplicación del efectivo pueden distorsionar el estado real de las cuentas por cobrar y ocultar la liquidez disponible. Dónde obtenerlo Se infiere a partir de la transacción de compensación, por ejemplo, F-32, que completa los campos de compensación de la posición de factura. La marca de tiempo del evento es la fecha de compensación. Recopilar Se infiere cuando se completa la fecha de compensación (AUGDT) en la tabla de posiciones de factura (BSEG). Tipo de evento inferred | |||
| Recordatorio de pago emitido | El sistema ha generado y enviado al cliente un aviso de reclamación o recordatorio de pago por una factura vencida. Esto se registra a partir 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 fundamental para el KPI de eficacia de los recordatorios de pago. Dónde obtenerlo Se registra en las tablas de datos de reclamaciones, concretamente MHNK (cabecera de datos de reclamación) y MHND (posiciones de datos de reclamación), que genera la ejecución de reclamaciones (transacción F150). Recopilar Se registra al ejecutar una reclamación (F150) para la partida vencida. Tipo de evento explicit | |||
| Se alcanza la fecha de vencimiento de la factura | Es un 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 una persona usuaria o un sistema, sino un momento crítico. | ||
| Por qué es importante Es esencial para analizar el comportamiento de pago y el cumplimiento. Constituye la referencia para determinar si los pagos son puntuales o atrasados y calcular el KPI de tasa de pagos puntuales. Dónde obtenerlo Se obtiene comparando la fecha actual con la fecha neta de vencimiento. La fecha de vencimiento se encuentra en el campo BSEG-ZFBDT o se calcula a partir de la fecha base y las condiciones de pago. Recopilar Compare la fecha del sistema con el campo de fecha neta de vencimiento de la posición de factura (BSEG). Tipo de evento calculated | |||
Guías de extracción
Pasos
- Acceder al editor ABAP: Inicie sesión en su sistema SAP ECC. Acceda al editor ABAP mediante el código de transacción
SE38. - Crear el programa: Introduzca un nombre para el 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 la pantalla de selección: En el código fuente del programa, defina los parámetros de la pantalla de selección. Esto permite filtrar los datos que se extraerán. Entre los parámetros principales se incluyen el intervalo de fechas de creación del documento (
S_ERDAT), la sociedad (S_BUKRS) y el tipo de documento de facturación (S_VBTYP). - Definir las estructuras de datos: Declare una estructura de tabla interna que contenga los datos finales del registro de eventos. Debe incluir los campos
InvoiceNumber,ActivityNameyEventTime, además de Atributos recomendados comoUserName,BillingDocumentType,CustomerNumber,CompanyCodeyTotalInvoiceAmount. - Implementar 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 valores introducidos en la pantalla de selección. Guárdelos en una tabla interna temporal. - Extraer las actividades: Recorra la lista inicial de documentos de facturación. Para cada documento, realice selecciones posteriores 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»). - Crear la tabla del registro de eventos: Para cada actividad encontrada en el paso anterior, complete un nuevo registro en la tabla interna final del registro de eventos. Asegúrese de asignar correctamente
InvoiceNumber,ActivityName,EventTimey los demás Atributos desde las tablas de origen. - Escribir en el servidor de aplicaciones: Una vez completado el recorrido y rellenada la tabla final del registro de eventos, utilice las instrucciones
OPEN DATASET,LOOP AT... TRANSFERyCLOSE DATASETpara escribir el contenido de la tabla interna en un archivo plano del servidor de aplicaciones SAP. Especifique una ruta lógica accesible. - Recuperar el archivo: Utilice el código de transacción
AL11para acceder a 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 local o a una ubicación de red compartida. - Dar formato final: Abra el archivo descargado y confirme que es un archivo de valores separados por comas (CSV) con una fila de encabezados. Asegúrese de guardarlo con codificación UTF-8 para que sea compatible con ProcessMind durante la carga.
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 Dispute Management). - Selección del intervalo de fechas: El programa debe incluir un parámetro obligatorio de 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 el volumen de datos bajo control. - Filtros principales: Filtre siempre por sociedad (
BUKRS) para limitar el alcance de la extracción. También se recomienda encarecidamente filtrar por tipo de documento de facturación (VBTYPde VBRK) o tipo de documento contable (BLARTde BKPF) para incluir únicamente los tipos de factura relevantes, por ejemplo, «RV» para facturas contables estándar, y excluir abonos u otros documentos. - Consideraciones de rendimiento: Para grandes volúmenes de datos que abarquen más de unos meses, el programa debe ejecutarse como un job en segundo plano para evitar tiempos de espera de la sesión. La lógica ABAP debe optimizarse mediante lecturas indexadas de tablas y evitando bucles anidados con selecciones en la base de datos dentro de ellos. Se recomienda 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 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 disponer de un usuario de base de datos con acceso de solo lectura a las tablas de SAP ECC necesarias, 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 equipos específicos de análisis de datos.
- Conectarse 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 los marcadores de posición: La consulta contiene varios marcadores de posición que debe sustituir por valores específicos de su entorno. Estos incluyen:
'YYYYMMDD': Sustituya todas las apariciones por las fechas de inicio y fin del periodo de análisis deseado. Es fundamental limitar los datos a un intervalo manejable.'XXXX': Sustitúyalo por la sociedad o sociedades que desea analizar.[Your Invoice Output Type]: Especifique el código del tipo de salida utilizado para enviar facturas a los clientes, por ejemplo, «RD00».[Your Bad Debt G/L Account]: Introduzca el número de la cuenta de mayor utilizada para dar de baja facturas incobrables.[Your Dispute Case Invoice Attribute]: Especifique el nombre del Atributo utilizado para almacenar el número de factura en su configuración de Dispute Management, por ejemplo, «INVOICE_ID».
- Revisar las funciones de marca de tiempo: La consulta utiliza la sintaxis genérica
CAST(CONCAT(date_field, time_field) AS TIMESTAMP). Es posible que deba adaptarla a su sistema de base de datos específico, por ejemplo, medianteTO_TIMESTAMPen Oracle oDATETIMEFROMPARTSen SQL Server. - Ejecutar 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.
- Revisar los resultados: Cuando finalice la consulta, revise la salida para confirmar que contiene las columnas esperadas: InvoiceNumber, ActivityName, EventTime y los Atributos recomendados. Compruebe que no haya errores ni resultados vacíos.
- Exportar 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.
- Preparar la carga: Antes de cargar los datos en una herramienta de Process Mining, confirme que los encabezados de las columnas CSV coincidan 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 con la base de datos SAP ECC subyacente. 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 utilizadas en la consulta, que abarcan los módulos FI, SD y, posiblemente, FSCM. - Intervalo de fechas: Es fundamental filtrar la consulta por un intervalo de fechas específico para mantener un rendimiento y un volumen de datos razonables. Recomendamos comenzar con un periodo de 3 a 6 meses. Los marcadores de posición del filtro de fechas
'YYYYMMDD'deben configurarse en varias partes de la consulta. - Filtro por sociedad: La consulta está diseñada para filtrarse por sociedad (
BUKRS). Analizar una o varias sociedades a la vez es una práctica habitual. - 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. 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 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 punta 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 disponer de una herramienta ETL con licencia y un conector SAP certificado, por ejemplo, Informatica PowerCenter con SAP Connector o Talend con SAP Connector. Verifique que cuenta con credenciales de usuario SAP y las autorizaciones necesarias para leer las tablas financieras, comerciales y del sistema requeridas (BKPF, BSEG, VBRK, NAST, MHNK, UDM_CASE_ATTR00, CDHDR, CDPOS).
- Establecer 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 mandante, el usuario y la contraseña. Pruebe la conexión para confirmar que funciona correctamente.
- Definir las fuentes de datos: Para cada actividad que se extraerá, defina las tablas SAP correspondientes como fuentes de datos en su job 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 clientes.
- Crear la lógica de extracción para cada actividad: Cree un flujo de datos o una transformación independiente 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 intervalo de fechas específico, como la fecha de creación ERDAT.
- Asignar campos y transformar 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 establecer ActivityName de forma fija en cada flujo y dar el formato correcto a las fechas y marcas de tiempo.
- Gestionar actividades complejas: Para eventos calculados como «Se alcanza la fecha de vencimiento de la factura», utilice la fecha de pago base (ZFBDT) y la lógica de condiciones de pago para calcular la fecha de vencimiento, o extraiga directamente la fecha de vencimiento neta (NETDT) de BSEG. Para eventos derivados de registros de cambios, como «Factura aprobada», puede ser necesario combinar tablas como BKPF y CDHDR/CDPOS según el número y la fecha del documento.
- Combinar 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. Asegúrese de que los nombres y tipos de datos de las columnas sean coherentes en todos los flujos antes de unirlos.
- Configurar 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 con un área de preparación.
- Configurar la programación de la extracción: Configure los parámetros del intervalo de fechas de la extracción. Para la carga inicial, puede extraer entre 6 y 12 meses de datos. Para las cargas delta posteriores, configure el job para extraer los datos desde la fecha de la última ejecución.
- Ejecutar y exportar: Ejecute el job ETL. Cuando finalice, revise el archivo de salida para confirmar que cumple el formato requerido. La salida final debe ser un único archivo CSV, con una fila por cada evento único, listo para cargarlo en ProcessMind.
Configuración
- Conexión con SAP: Se requiere una conexión con el servidor de aplicaciones del sistema SAP ECC de destino. El usuario 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 SAP específico.
- Intervalo de fechas: Se recomienda extraer datos de un periodo de 3 a 6 meses para obtener una muestra representativa para el análisis sin generar una carga excesiva en el sistema. Utilice un parámetro configurable para las fechas de inicio y fin.
- Filtros principales: Filtre siempre 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 los tipos de documento contable (BKPF-BLART) para incluir únicamente facturas estándar y excluir otros tipos de documento, como abonos 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 punta 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 ¿Listo para comenzar?
Aproveche este Template para agilizar la preparación de sus datos y obtener información valiosa sobre su proceso de facturación y emisión de facturas. Comience hoy su camino hacia un flujo de caja más rápido.
Libere un flujo de caja más rápido: ¡optimice hoy su facturación y emisión de facturas!
Elimine las ineficiencias, reduzca el tiempo del ciclo un 30 % y mejore su flujo de caja.
No se requiere tarjeta de crédito. Empiece a optimizar en cuestión de minutos.