Su Plantilla de Datos para el Procesamiento de Devoluciones y Reembolsos
Su Plantilla de Datos para el Procesamiento de Devoluciones y Reembolsos
- Atributos recomendados para recopilar
- Actividades clave para el seguimiento
- Guía de Extracción
Atributos de Gestión de Devoluciones y Reembolsos
| Nombre | Descripción | ||
|---|---|---|---|
| Hora del Evento EventTime | La fecha y hora exactas en que ocurrió la actividad. | ||
| Descripción Esta marca de tiempo marca el momento preciso en que ocurrió un evento de negocio. Se registra para cada actividad en el proceso, proporcionando la secuencia cronológica de eventos dentro de un caso. El Tiempo del Evento es crítico para todo análisis basado en el tiempo, incluyendo el cálculo de tiempos de ciclo entre actividades, la identificación de cuellos de botella donde se pasa tiempo esperando y la medición de la duración total del caso. Permite el análisis de rendimiento y las comprobaciones de cumplimiento contra acuerdos de nivel de servicio (SLA). Por qué es importante Esta marca de tiempo es esencial para calcular todas las duraciones, analizar el rendimiento del proceso, identificar cuellos de botella y comprender la línea de tiempo de cada caso de devolución. Dónde obtener Obtenido de varios campos de fecha y hora en las tablas de SAP. Para eventos de creación, a menudo son los campos ERDAT y ERZET (por ejemplo, en VBAK). Para eventos de cambio, son UDATE y UTIME en la tabla CDHDR. Ejemplos 2023-04-15T10:22:05Z2023-04-16T14:01:30Z2023-04-18T09:15:00Z | |||
| ID de Caso de Devolución ReturnCaseId | El identificador único para la solicitud de devolución de un cliente, vinculando todas las actividades y documentos relacionados. | ||
| Descripción El ID de Caso de Devolución sirve como clave principal para rastrear todo el ciclo de vida de un proceso de devolución desde su inicio hasta su cierre. Cada ID corresponde a una devolución específica del cliente, abarcando todos los eventos asociados como la creación del pedido, la entrega, la inspección y el procesamiento de la nota de crédito. En el análisis de procesos, este atributo es fundamental para la construcción del mapa de proceso. Permite al sistema agrupar eventos individuales en recorridos de casos de principio a fin, posibilitando el análisis de variantes de proceso, tiempos de ciclo y cuellos de botella para cada instancia de devolución distinta. Por qué es importante Este es el identificador de caso esencial que conecta todos los pasos de un recorrido de devolución, haciendo posible analizar el flujo de proceso de principio a fin y el rendimiento. Dónde obtener Este es típicamente el número de Pedido de Devolución del módulo de Ventas y Distribución (SD). Se encuentra en la tabla VBAK (Datos de Cabecera del Documento de Ventas), campo VBELN, donde la categoría de documento (VBAK-VBTYP) es 'H' para Devoluciones. Ejemplos 600001236000045660000789 | |||
| Nombre de la Actividad ActivityName | El nombre de un evento de negocio o paso específico que ocurrió dentro del proceso de devoluciones. | ||
| Descripción Este atributo describe una acción única y distinta o un cambio de estado en el ciclo de vida de la devolución, como 'Pedido de Devolución Creado', 'Entrada de Mercancías Contabilizada' o 'Nota de Crédito Creada'. Estas actividades forman los bloques de construcción del mapa de proceso. Analizar la secuencia y frecuencia de estas actividades ayuda a identificar las rutas de proceso más comunes, desviaciones y bucles de retrabajo. Es crucial para comprender qué sucede dentro de un caso y en qué orden, formando la base para todo el análisis de Process Mining. Por qué es importante Las actividades definen los pasos en el proceso. Analizar su secuencia, duración y frecuencia es el núcleo del Process Mining y revela cómo se realiza realmente el trabajo. Dónde obtener Derivado de cambios de estado en tablas como VBUK/VBUP, eventos de creación de documentos (por ejemplo, en VBAK, LIKP, VBRK) o registros de cambios en tablas CDHDR/CDPOS. Ejemplos Pedido de Devolución CreadoEntrada de Mercancías RegistradaNota de Crédito CreadaArtículo de Pedido de Devolución Completado | |||
| Source System SourceSystem | El sistema del cual se extrajo la data. | ||
| Descripción Este atributo identifica el origen de los datos, lo cual es esencial en entornos con múltiples sistemas. Proporciona contexto y ayuda a asegurar la trazabilidad e integridad de los datos. Para el análisis, se utiliza para segmentar o filtrar datos al combinar procesos de diferentes sistemas de origen. Confirma que los eventos provienen de la aplicación esperada, en este caso, SAP ECC. Por qué es importante Identifica el origen de los datos, lo cual es crucial para la gobernanza de datos y para análisis que abarcan múltiples sistemas empresariales. Dónde obtener Este es un valor estático definido durante la extracción de datos para identificar la instancia específica de SAP ECC (por ejemplo, 'ECC_PROD_100'). Ejemplos `SAP_ECC_PROD`SAPECC_FINANCE_200 | |||
| Última actualización de datos LastDataUpdate | La marca de tiempo que indica cuándo se actualizaron por última vez los datos para este proceso. | ||
| Descripción Este atributo registra la fecha y hora de la extracción o actualización de datos más reciente. Proporciona transparencia sobre la frescura de los datos que se analizan. En el análisis, esto es importante para comprender la actualidad de los insights. Los usuarios pueden ver cuán actuales son los datos, lo que afecta la relevancia de cualquier hallazgo, especialmente para el monitoreo de operaciones en curso. Por qué es importante Indica la frescura de los datos, asegurando que los usuarios comprendan cuán actual es el análisis del proceso y cuándo se puede esperar la próxima actualización. Dónde obtener Este es un atributo de metadatos poblado con la marca de tiempo de ejecución del trabajo de extracción de datos. Ejemplos 2023-05-20T02:00:00Z2023-05-21T02:00:00Z | |||
| Agente de Procesamiento ProcessingAgent | El ID de usuario del empleado que realizó la actividad. | ||
| Descripción Este atributo captura el nombre de usuario de la persona responsable de ejecutar un paso de proceso específico, como crear el pedido de devolución o contabilizar la entrada de mercancías. A menudo se le denomina el usuario 'Modificado por' o 'Creado por'. El análisis por Agente de Procesamiento es clave para la gestión del rendimiento y el análisis de recursos. Ayuda a identificar a los mejores agentes, a aquellos que pueden requerir formación adicional y la distribución de la carga de trabajo en un equipo. Se utiliza en dashboards como 'Rendimiento del Agente en el Procesamiento de Devoluciones' para comparar tiempos de ciclo y rendimiento. Por qué es importante Rastrea la participación del usuario, permitiendo el análisis del rendimiento del equipo, la distribución de la carga de trabajo y la identificación de necesidades de capacitación o mejores prácticas. Dónde obtener Típicamente se encuentra en campos como ERNAM (Creado por) o AENAM (Modificado por) en tablas de cabecera como VBAK, LIKP, VBRK. Para eventos de cambio, es USERNAME en CDHDR. Ejemplos `CBURNS`DSCRANTONJHALPERT | |||
| Canal de Devolución ReturnChannel | El canal a través del cual se inició la devolución, como en línea, en tienda o centro de llamadas. | ||
| Descripción Este atributo especifica el origen o método de entrada para la solicitud de devolución. Ayuda a diferenciar entre devoluciones iniciadas a través de un portal web, una tienda física o mediante un representante de servicio al cliente. Segmentar el proceso por Canal de Devolución es crucial para comprender las diferencias operativas y la asignación de recursos. Por ejemplo, las devoluciones en tienda podrían tener tiempos de inspección más rápidos pero diferentes pasos de documentación en comparación con las devoluciones en línea. Esta es una dimensión clave para el dashboard 'Tendencias de Rendimiento del Proceso de Devoluciones'. Por qué es importante Distingue cómo se inician las devoluciones, lo que a menudo impacta el flujo del proceso, las necesidades de recursos y los tiempos de ciclo para diferentes canales. Dónde obtener Esto a menudo no es un campo estándar en SAP ECC y puede que deba obtenerse de un campo personalizado (por ejemplo, en VBAK) o inferirse de otros datos como la Organización de Ventas (VKORG) o el Canal de Distribución (VTWEG). Consulte la documentación de SAP ECC para una implementación específica. Ejemplos Portal en LíneaEn TiendaCentro de Llamadas | |||
| Importe de Reembolso Solicitado RequestedRefundAmount | El valor esperado del reembolso, basado típicamente en el valor neto del/de los artículo(s) devuelto(s). | ||
| Descripción Este atributo representa el valor monetario inicial de la devolución, tal como se captura en el pedido de devolución. Sirve como base para el análisis y la conciliación financiera. Este importe se compara con el 'Importe de Reembolso Real' para rastrear discrepancias, una métrica clave para el dashboard 'Seguimiento de Discrepancias en el Importe de Reembolso'. Analizar este valor ayuda a monitorear el impacto financiero de las devoluciones e identificar posibles problemas en la fijación de precios o el cálculo de créditos. Por qué es importante Establece el valor financiero inicial de la devolución, lo cual es crucial para el seguimiento de las discrepancias financieras y la comprensión del valor total de las mercancías devueltas. Dónde obtener Este valor es típicamente el valor neto a nivel de posición del pedido de devolución. Se encuentra en la tabla VBAP, campo NETWR. Ejemplos 150.0049.991250.75 | |||
| Monto de Reembolso Real ActualRefundAmount | El importe final abonado al cliente, tal como se contabiliza en los documentos financieros. | ||
| Descripción Este atributo es el valor final y confirmado del reembolso que fue procesado y contabilizado en el sistema contable. Este importe puede diferir del monto solicitado debido a tarifas de reabastecimiento, ajustes basados en la condición del artículo u otras aplicaciones de políticas. Este es un atributo crítico para el dashboard 'Seguimiento de Discrepancias en el Importe de Reembolso'. Comparar esto con el importe solicitado ayuda a identificar problemas sistémicos en el proceso de cálculo y aprobación del reembolso, asegurando la precisión financiera. Por qué es importante Representa el resultado financiero final de la devolución. Compararlo con el importe solicitado ayuda a asegurar la precisión y a identificar fugas financieras. Dónde obtener Obtenido del documento financiero asociado a la nota de crédito. Normalmente se encuentra en la tabla BSEG (Segmento del Documento Contable), campo WRBTR (Importe en moneda del documento), para la contabilización de la cuenta de mayor relevante. Ejemplos 150.0045.001200.75 | |||
| Motivo de Devolución ReturnReason | El código de motivo proporcionado por el cliente para devolver el artículo. | ||
| Descripción Este atributo indica por qué se devolvió un producto, utilizando códigos de motivo predefinidos en SAP. Ejemplos incluyen 'Dañado en tránsito', 'Artículo incorrecto enviado' o 'No encaja'. Esta es una dimensión crítica para el análisis de la causa raíz. Al filtrar el mapa de proceso o los KPI por Motivo de Devolución, los analistas pueden identificar si ciertos motivos están asociados con tiempos de procesamiento más largos, mayores tasas de fallo en la inspección o desviaciones específicas del proceso. Este insight puede impulsar mejoras en la calidad del producto, la logística o los procesos de venta. Por qué es importante Explica por qué ocurren las devoluciones, permitiendo un análisis de causa raíz para reducir las tasas de devolución al abordar problemas de calidad del producto, envío o descripción. Dónde obtener Se encuentra en la tabla de posiciones del documento de ventas VBAP, campo ABGRU (Motivo de rechazo de documentos de ventas). Ejemplos 001 - Producto dañado002 - Producto incorrecto005 - Llegó demasiado tarde | |||
| Número de Material MaterialNumber | El identificador único para el producto que se devuelve. | ||
| Descripción El Número de Material, o SKU, especifica el artículo exacto involucrado en la devolución. Esto permite un análisis detallado a nivel de producto. Al analizar las devoluciones por Número de Material, las empresas pueden identificar productos con altas tasas de devolución, lo que puede indicar problemas de calidad, descripciones inexactas o defectos de fabricación. Es esencial para dashboards como 'Impacto de las Devoluciones en el Inventario' y para comprender cómo diferentes productos se mueven a través del proceso de devoluciones. Por qué es importante Identifica qué productos están siendo devueltos, destacando posibles problemas de control de calidad o descripciones de producto inexactas. Dónde obtener Se encuentra en la tabla de posiciones del documento de ventas VBAP, campo MATNR. Ejemplos RM-1025FG-2050-BACC-5591 | |||
| Adherencia a la Política de Devoluciones ReturnPolicyAdherence | Un indicador que señala si la devolución cumple con todas las reglas y políticas de negocio definidas. | ||
| Descripción Este atributo booleano calculado indica si un caso de devolución siguió las políticas estándar prescritas de la empresa. La lógica podría implicar verificar múltiples condiciones, como si la devolución se inició dentro del plazo permitido, si el código de motivo es válido para el producto o si se obtuvo la aprobación del gerente para una excepción. Este atributo impulsa el dashboard 'Cumplimiento de la Política de Aprobación de Devoluciones'. Permite la medición directa de la tasa de cumplimiento y ayuda a identificar qué políticas se eluden con mayor frecuencia, posibilitando una mejora del proceso o una capacitación dirigida. Por qué es importante Mide el cumplimiento con las reglas de negocio, ayudando a aplicar las políticas de manera consistente e identificar casos que requieren revisión o aprobación especial. Dónde obtener Este es un atributo derivado basado en un conjunto de reglas de negocio. Por ejemplo: (Fecha de Inicio de Devolución - Fecha de Compra Original) <= 30 días Y ReturnReason IS NOT NULL. Ejemplos truefalse | |||
| Cumple con el SLA IsSLACompliant | Un indicador que señala si el reembolso fue procesado dentro del acuerdo de nivel de servicio (SLA) acordado. | ||
| Descripción Este es un atributo booleano calculado que compara la fecha real de la actividad 'Reembolso Procesado' con la 'Fecha Objetivo del SLA de Reembolso'. Se resuelve como verdadero si el reembolso se completó a tiempo y falso en caso contrario. Este atributo simplifica el análisis y la elaboración de informes al proporcionar un resultado binario claro para el rendimiento del SLA de cada caso. Se utiliza para calcular la tasa general de 'Cumplimiento del SLA de Procesamiento de Reembolsos' y permite un filtrado sencillo para aislar y analizar casos no conformes. Por qué es importante Proporciona un indicador binario claro del rendimiento del SLA para cada caso, simplificando el monitoreo del cumplimiento y la elaboración de informes. Dónde obtener Este es un atributo calculado. La lógica es: 'Tiempo del Evento de Reembolso Procesado' <= RefundSLATargetDate. Ejemplos truefalse | |||
| Discrepancia en el Importe del Reembolso RefundAmountDiscrepancy | La diferencia calculada entre los importes de reembolso real y solicitado. | ||
| Descripción Esta métrica calculada cuantifica la diferencia monetaria entre lo solicitado inicialmente en el pedido de devolución y lo finalmente emitido en la nota de crédito. Un valor positivo podría indicar un reembolso parcial, mientras que un valor negativo es inusual pero podría indicar un pago en exceso. Este atributo es la medida clave para el dashboard 'Seguimiento de Discrepancias en el Importe de Reembolso'. Ayuda a identificar y analizar rápidamente casos con desviaciones financieras, que podrían deberse a evaluaciones de la condición del artículo, tarifas de reabastecimiento o errores. Monitorear esto ayuda a asegurar el control financiero y la adherencia a las políticas. Por qué es importante Mide directamente las desviaciones financieras en el proceso de reembolso, ayudando a identificar el incumplimiento de políticas, errores de procesamiento o fugas financieras. Dónde obtener Campo calculado: ActualRefundAmount - RequestedRefundAmount. Ejemplos 0.00-4.99-50.00 | |||
| Documento de Ventas Original OriginalSalesDocument | El número del pedido de venta original contra el cual se está realizando la devolución. | ||
| Descripción Este atributo proporciona un enlace directo a la compra inicial del cliente. Es un documento de referencia que conecta la devolución con los detalles de la transacción original. Tener este enlace es extremadamente valioso para un análisis más profundo. Permite a los analistas investigar por qué se devuelven ventas de ciertos pedidos, verificar precios y términos originales, y comprender el ciclo de vida completo del pedido a devolución del cliente. Puede ayudar a responder preguntas sobre si los productos vendidos a través de campañas o canales específicos tienen tasas de devolución más altas. Por qué es importante Vincula la devolución con la venta original, permitiendo una vista completa del ciclo de la transacción del cliente y un análisis de causa raíz más profundo. Dónde obtener Esta referencia se almacena a nivel de posición del pedido de devolución. Se puede encontrar en la tabla VBAP, campo VGBEL (Número de documento del documento de referencia). Ejemplos 100034561000987110012345 | |||
| Estado del Pedido de Devolución ReturnOrderStatus | El estado general de procesamiento del caso de pedido de devolución. | ||
| Descripción Este atributo proporciona una instantánea del estado actual del caso de devolución, como 'Abierto', 'En Proceso' o 'Completado'. Se deriva de la combinación de estados a nivel de cabecera o de posición del documento de ventas. En el análisis, este atributo es útil para filtrar casos y centrarse en devoluciones activas o completadas. Puede ayudar a monitorear la carga de trabajo general y el progreso de los casos abiertos y proporciona un resultado de alto nivel para cada recorrido de devolución. Por qué es importante Proporciona una vista general de la etapa de un caso en su ciclo de vida, lo que permite filtrar y analizar las devoluciones abiertas, en curso o cerradas. Dónde obtener Derivado de los campos de estado en las tablas VBUK (Estado de Cabecera) y VBUP (Estado de Posición). Por ejemplo, VBUK-GBSTK es el estado de procesamiento general del documento. Ejemplos AbiertoEn ProcesoCompletado | |||
| Fecha Objetivo del SLA de Reembolso RefundSLATargetDate | La fecha en la que se espera que se procese el reembolso según los acuerdos de nivel de servicio. | ||
| Descripción Este atributo define la fecha límite para completar el proceso de reembolso de un caso de devolución determinado. Normalmente se calcula basándose en reglas de negocio, como '5 días hábiles desde la recepción de la mercancía'. Esta fecha objetivo es el punto de referencia con el que se mide el rendimiento real. Es el componente central para el dashboard 'Cumplimiento del SLA de Procesamiento de Reembolsos', permitiendo a la empresa monitorear la adherencia a los compromisos con el cliente e identificar casos que están en riesgo de incumplir su SLA. Por qué es importante Establece el objetivo de rendimiento para el procesamiento de reembolsos, permitiendo a la empresa medir e informar sobre el cumplimiento del SLA y priorizar los casos atrasados. Dónde obtener Este típicamente no es un campo estándar de SAP y necesitaría ser derivado en base a reglas de negocio. Podría calcularse a partir de un campo de fecha clave (por ejemplo, fecha de entrada de mercancías de MKPF) más una duración configurada. Consulte la documentación de SAP ECC o los requisitos de negocio. Ejemplos 2023-04-25T23:59:59Z2023-04-28T23:59:59Z2023-05-02T23:59:59Z | |||
| ID de cliente CustomerId | El identificador único para el cliente que inicia la devolución. | ||
| Descripción Este atributo identifica al cliente específico (el 'Destinatario de Mercancías' en términos de SAP) que está devolviendo el producto. Vincula la transacción de devolución a los datos maestros del cliente. El análisis por ID de Cliente ayuda a identificar clientes con devoluciones frecuentes, lo que podría señalar insatisfacción o un posible uso indebido de las políticas de devolución. También puede utilizarse con datos de segmentación de clientes para comprender si ciertos grupos de clientes tienen diferentes comportamientos de devolución o experiencias de proceso. Por qué es importante Vincula las devoluciones a clientes específicos, permitiendo el análisis del comportamiento del cliente, la identificación de clientes que devuelven repetidamente y el impacto en las relaciones con los clientes. Dónde obtener Se encuentra en la tabla de cabecera del documento de ventas VBAK, campo KUNNR (Interlocutor comercial). Ejemplos CUST-100432CUST-203991CUST-831102 | |||
| Número de Nota de Crédito CreditMemoNumber | El identificador único para el documento de nota de crédito emitido para el reembolso. | ||
| Descripción La Nota de Crédito es el documento de facturación oficial en SAP que formaliza el reembolso a pagar al cliente. Este número identifica de forma única dicho documento financiero. Este atributo es esencial para la conciliación financiera y para el seguimiento del proceso desde la devolución operativa hasta la liquidación financiera. Sirve como un hito clave en el proceso y se utiliza para encontrar documentos contables relacionados para atributos como 'Importe de Reembolso Real'. Por qué es importante Proporciona un enlace directo al documento financiero que autoriza el reembolso al cliente, lo cual es esencial para la auditoría y conciliación financiera. Dónde obtener La nota de crédito es un documento de facturación. Su número se encuentra en la tabla VBRK (Datos de cabecera del documento de facturación), campo VBELN. El enlace se encuentra a través del flujo de documentos del pedido de devolución. Ejemplos 900011229000334490005566 | |||
| Planta Plant | La ubicación física o instalación donde se recibe y procesa el artículo devuelto. | ||
| Descripción El Centro en SAP representa una ubicación física, como un almacén o centro de distribución, donde se manejan las mercancías. Para las devoluciones, esta es típicamente la ubicación donde se recibe e inspecciona el artículo. Analizar el proceso por Centro ayuda a identificar variaciones de rendimiento entre diferentes instalaciones. Puede destacar qué almacenes son más eficientes en la inspección de artículos o tienen mayor rendimiento, lo que respalda el dashboard 'Rendimiento y Eficiencia de la Inspección de Artículos'. Por qué es importante Identifica la ubicación física que procesa la devolución, permitiendo la comparación de rendimiento entre diferentes almacenes o centros de distribución. Dónde obtener Se encuentra a nivel de posición en el pedido de devolución, tabla VBAP, campo WERKS. Ejemplos PL01WH02DC05 | |||
| Sociedad CompanyCode | La entidad legal o empresa responsable de la transacción. | ||
| Descripción El Código de Sociedad representa una unidad contable autónoma dentro de SAP. Todas las transacciones financieras, incluyendo devoluciones y reembolsos, se contabilizan en un código de sociedad específico. Este atributo es esencial para la elaboración de informes financieros y para segmentar el proceso en organizaciones multinacionales o con múltiples entidades. El análisis por Código de Sociedad permite comparar el rendimiento del proceso de devolución entre diferentes entidades legales dentro de la corporación. Por qué es importante Permite filtrar y comparar procesos de devolución entre diferentes entidades legales dentro de una organización, lo cual es crítico para el análisis financiero. Dónde obtener Se encuentra en la tabla de cabecera del documento de ventas VBAK, campo BUKRS_VF (Sociedad para la facturación). Ejemplos 10002000US01 | |||
| Tiempo de Ciclo de Extremo a Extremo EndToEndCycleTime | El tiempo total transcurrido desde la primera hasta la última actividad para un caso de devolución. | ||
| Descripción Esta es una métrica a nivel de caso calculada como la duración entre el primer evento (por ejemplo, 'Pedido de Devolución Creado') y el evento final (por ejemplo, 'Pedido de Devolución Completado' o 'Nota de Crédito Compensada'). Representa el tiempo total que una devolución pasa en el proceso. Este es un indicador clave de rendimiento primario para la eficiencia general del proceso. Se utiliza en el análisis de tendencias y benchmarking para rastrear mejoras a lo largo del tiempo. Analizar la distribución de esta métrica ayuda a identificar los factores, como el tipo de producto o el motivo de devolución, que se correlacionan con tiempos de resolución más largos o más cortos. Por qué es importante Mide la duración total del proceso de devolución, proporcionando un indicador clave de la eficiencia general del proceso y la experiencia del cliente. Dónde obtener Esta es una métrica calculada. Es la marca de tiempo de la última actividad en un caso menos la marca de tiempo de la primera actividad. Ejemplos 5 días 4 horas12 días 8 horas3 días 2 horas | |||
Actividades de Gestión de Devoluciones y Reembolsos
| Actividad | Descripción | ||
|---|---|---|---|
| `Decisión de Uso Realizada` | Después de la inspección, un ingeniero o inspector de calidad toma una decisión formal sobre el estado del artículo devuelto. Esta decisión determina el proceso subsiguiente, como la devolución a stock, el desguace o la reparación. | ||
| Por qué es importante Esta actividad es crucial para comprender la eficiencia de la inspección y sus resultados. La decisión impacta directamente el importe del reembolso y la gestión del inventario. Dónde obtener Si se utiliza SAP QM, este es un evento explícito capturado en la tabla QAVE (Decisión de uso del procesamiento de inspección). El tiempo de decisión se almacena en QAVE-VDATUM. El enlace a la entrega está en la tabla QALS. Capturar Utilice la fecha de decisión de uso (VDATUM) de la tabla QAVE, vinculada a través del lote de inspección (QALS-PRUEFLOS). Tipo de evento explicit | |||
| Entrada de Mercancías Registrada | Esta actividad ocurre cuando se recibe el artículo físico devuelto en el almacén o centro de procesamiento. Se captura mediante la contabilización de un documento de movimiento de mercancías contra la entrega de devolución. | ||
| Por qué es importante Un hito clave que indica que la empresa ha tomado posesión del artículo devuelto. Es el punto de partida para la inspección física y afecta la precisión del inventario. Dónde obtener Este evento se puede inferir del estado de movimiento de mercancías de la posición de entrega de devolución en la tabla VBUP (por ejemplo, WBSTA = 'C'). La marca de tiempo exacta se encuentra en la cabecera del documento de material (MKPF-BUDAT) para la entrada de mercancías correspondiente. Capturar Encuentre la fecha de contabilización (BUDAT) de la tabla MKPF para el documento de material vinculado a la entrega de devolución. Tipo de evento inferred | |||
| Nota de Crédito Contabilizada en FI | La nota de crédito se libera a la contabilidad financiera, convirtiéndose en un asiento oficial de cuentas por cobrar. Este paso desencadena el proceso de pago real del reembolso al cliente. | ||
| Por qué es importante Esta actividad marca el punto donde el reembolso es reconocido financieramente por la empresa. Los retrasos entre la creación y la contabilización de la nota de crédito pueden ralentizar el reembolso real al cliente. Dónde obtener Este es un evento inferido, identificado cuando el estado de contabilización en la cabecera del documento de facturación (VBRK-RFBSK) se actualiza a 'C' (Se ha creado el documento de contabilización). La fecha de creación real del documento contable está en la tabla BKPF. Capturar Identifique la marca de tiempo cuando VBRK-RFBSK se establece en 'C', o utilice la fecha de creación (CPUDT) del documento contable BKPF vinculado. Tipo de evento inferred | |||
| Nota de Crédito Creada | Se genera un documento de facturación (nota de crédito) para autorizar el abono financiero al cliente. Este es el documento financiero oficial que formaliza el monto del reembolso. | ||
| Por qué es importante Este es un hito financiero importante en el proceso. Analizar el tiempo para crear la nota de crédito ayuda a identificar retrasos en el procesamiento de documentos financieros después de la recepción de mercancías y la inspección. Dónde obtener Este es un evento explícito registrado en la tabla VBRK (Cabecera del Documento de Facturación). La fecha de creación es VBRK-ERDAT. La nota de crédito está vinculada al pedido de devolución o a la solicitud de nota de crédito en el flujo de documentos. Capturar Utilice la marca de tiempo de creación (ERDAT) de la tabla VBRK para el documento de facturación relevante. Tipo de evento explicit | |||
| Pedido de Devolución Completado | Esta actividad marca el fin del proceso de devoluciones desde la perspectiva de ventas y distribución. Ocurre cuando todos los artículos de línea del pedido de devolución están completamente procesados y cerrados. | ||
| Por qué es importante Este es el evento final primario para el proceso. Medir el tiempo desde 'Pedido de Devolución Creado' hasta esta actividad proporciona el tiempo de ciclo de principio a fin para el caso de devolución. Dónde obtener Este es un evento inferido de las tablas de estado. Se captura cuando el estado general de la cabecera del documento de ventas (VBUK-GBSTK) se actualiza a 'C' (Completamente procesado). Capturar Identifique la marca de tiempo de los documentos de cambio (CDHDR/CDPOS) cuando el campo de estado de cabecera VBUK-GBSTK cambia a 'C'. Tipo de evento inferred | |||
| Pedido de Devolución Creado | Esta actividad marca el inicio del proceso de devolución cuando un cliente solicita devolver un producto. Se captura cuando se crea un nuevo documento de ventas de tipo 'Devolución' (por ejemplo, RE) en SAP ECC. | ||
| Por qué es importante Este es el evento de inicio primario para el proceso de devoluciones. Analizar el tiempo desde esta actividad hasta otras ayuda a medir el tiempo de ciclo total e identificar los retrasos iniciales en el procesamiento. Dónde obtener Este es un evento explícito registrado en la tabla VBAK (Cabecera del Documento de Ventas). La marca de tiempo de creación se almacena en VBAK-ERDAT y VBAK-ERZET para el número de documento de ventas correspondiente (VBAK-VBELN) con tipo de pedido VBAK-AUART = 'RE'. Capturar Utilice la marca de tiempo de creación (ERDAT, ERZET) de la tabla VBAK para el tipo de documento de ventas 'RE'. Tipo de evento explicit | |||
| Artículo de Pedido de Devolución Completado | Una línea de artículo individual dentro del pedido de devolución se marca como completamente procesada. Esto ocurre típicamente después de que todos los documentos logísticos y financieros de seguimiento para ese artículo se han completado. | ||
| Por qué es importante El seguimiento a nivel de artículo ayuda a identificar qué productos o motivos de devolución causan los mayores retrasos. Proporciona una vista más granular de la finalización del proceso. Dónde obtener Este es un evento inferido de las tablas de estado. Se captura cuando el estado general de la posición del documento de ventas (VBUP-GBSTK) se actualiza a 'C' (Completamente procesado). Capturar Identifique la marca de tiempo de los documentos de cambio (CDHDR/CDPOS) cuando el campo de estado de posición VBUP-GBSTK cambia a 'C'. Tipo de evento inferred | |||
| Artículo de Pedido de Devolución Rechazado | Un artículo específico del pedido de devolución es rechazado, ya sea durante la revisión inicial o después de la inspección. Esto significa que no se realizará ningún procesamiento adicional, como un reembolso, para este artículo. | ||
| Por qué es importante Analizar los rechazos ayuda a identificar solicitudes de devolución inválidas y puede informar la comunicación de políticas al cliente. Es una ruta clave en el proceso que no conduce a un reembolso. Dónde obtener Este es un evento inferido. Típicamente se captura mediante el establecimiento de un código único de 'Motivo de Rechazo' para la posición en la tabla VBAP (VBAP-ABGRU). La marca de tiempo debe obtenerse de los logs de cambios. Capturar Identifique la marca de tiempo de los documentos de cambio (CDHDR/CDPOS) cuando el campo VBAP-ABGRU se rellena para un artículo de devolución. Tipo de evento inferred | |||
| Bloqueo de Pedido de Devolución Eliminado | Representa la aprobación de la solicitud de devolución, lo que permite que esta pase a la siguiente etapa. Esto se suele capturar mediante un cambio en el estado del documento o la eliminación de un bloqueo de entrega o facturación. | ||
| Por qué es importante Esta actividad es un hito crítico de aprobación. Medir el tiempo que se tarda en llegar a este paso ayuda a identificar cuellos de botella en el proceso de autorización y aprobación de devoluciones. Dónde obtener Este es un evento inferido, derivado de los logs de cambios para el documento de ventas. Verificar tablas CDHDR y CDPOS para cambios en los campos de bloqueo en VBAK o VBAP, o campos de estado en VBUK/VBUP. Capturar Identifique la marca de tiempo de las tablas de documentos de cambio (CDHDR/CDPOS) cuando se elimina un estado de bloqueo relevante. Tipo de evento inferred | |||
| Entrega de Devolución Creada | Se genera un documento de entrega para gestionar la recepción física de las mercancías devueltas. Este evento significa que el proceso logístico para la devolución se ha iniciado. | ||
| Por qué es importante Rastrea la transición del procesamiento administrativo a la logística física. Los retrasos aquí pueden impactar la planificación del almacén y el tiempo de ciclo total de devolución. Dónde obtener Este es un evento explícito registrado en la tabla LIKP (Cabecera de Entrega). La marca de tiempo de creación está en LIKP-ERDAT. El enlace al pedido de devolución de origen se encuentra en la tabla LIPS (LIPS-VGBEL). Capturar Utilice la marca de tiempo de creación (ERDAT) de la tabla LIKP para la entrega asociada con el pedido de devolución. Tipo de evento explicit | |||
| Nota de Crédito Compensada | La partida de crédito abierta en cuentas por cobrar se compensa, típicamente mediante un pago saliente al cliente. Este evento marca el cierre financiero final del reembolso. | ||
| Por qué es importante Esta actividad confirma el evento de salida de efectivo y completa la parte financiera del proceso. Es el verdadero fin del recorrido del reembolso desde la perspectiva del cliente. Dónde obtener Este es un evento explícito del módulo FI. La fecha de compensación del documento contable se almacena en la tabla BSEG (BSEG-AUGDT) para la partida individual de cliente correspondiente. Capturar Utilice la fecha de compensación (AUGDT) de la tabla BSEG o BSAD para el documento contable vinculado a la nota de crédito. Tipo de evento explicit | |||
| Solicitud de Nota de Crédito Creada | Se crea una solicitud de nota de crédito para documentar formalmente la necesidad de un reembolso. En muchas configuraciones, el propio pedido de devolución sirve como solicitud de nota de crédito. | ||
| Por qué es importante Este es el inicio formal de la parte de liquidación financiera del proceso de devoluciones. Proporciona un disparador para las subsiguientes aprobaciones financieras y la creación de documentos. Dónde obtener Esto puede ser un evento explícito en VBAK para un documento de ventas de tipo 'Solicitud de Nota de Crédito' (por ejemplo, CR), o puede ser el mismo evento que 'Pedido de Devolución Creado' if el tipo de pedido está configurado para ser facturación relacionada con el pedido. Capturar Utilice la marca de tiempo de creación (ERDAT) de VBAK para el tipo de documento 'CR', o reutilice el evento de creación del pedido de devolución. Tipo de evento explicit | |||
Guías de Extracción
Pasos
- Crear Programa ABAP: Utilice la transacción
SE38para crear un nuevo programa ABAP ejecutable, por ejemplo,Z_PM_RETURN_EXTRACTION. Proporcione un título descriptivo y guárdelo como un objeto local o dentro de un paquete de desarrollo. - Definir Pantalla de Selección: En el programa, defina una pantalla de selección para permitir a los usuarios filtrar los datos. Los filtros clave incluyen el rango de fechas de creación para los pedidos de devolución (
S_ERDAT), el tipo de documento de ventas para devoluciones (S_AUART, por ejemplo, 'RE') y la sociedad (P_BUKRS). - Definir Estructuras de Datos: Cree un tipo de estructura local que coincida con el formato de registro de eventos requerido. Esta estructura debe incluir campos para
ReturnCaseId,ActivityName,EventTime,SourceSystem,LastDataUpdate,ProcessingAgent,ReturnReasony otros atributos requeridos. - Implementar Lógica de Selección de Datos: Escriba la lógica ABAP central para seleccionar datos para cada una de las 12 actividades requeridas. Esto implica consultar varias tablas de SAP como VBAK, VBAP, LIKP, VBRK, BKPF, CDHDR y CDPOS. Utilice la tabla de flujo de documentos (VBFA) para vincular documentos relacionados como entregas y notas de crédito al pedido de devolución original.
- Extraer 'Pedido de Devolución Creado': Seleccione registros de las tablas
VBAKyVBAPbasándose en los criterios de la pantalla de selección. El número de documento de ventas (VBAK-VBELN) servirá comoReturnCaseId. - Extraer Cambios de Estado y Eventos Clave: Para actividades como 'Bloqueo de Pedido de Devolución Eliminado' o 'Artículo de Pedido de Devolución Rechazado', consulte las tablas de documentos de cambio (
CDHDR,CDPOS) o los campos de estado en tablas comoVBAP(ABGRU). Para actividades logísticas y financieras posteriores, seleccione de tablas comoLIKP,MKPF,VBRKyBKPF, utilizandoVBFApara asegurar que estén vinculadas al conjunto inicial de pedidos de devolución. - Rellenar la Tabla de Registro de Eventos: Para cada actividad recuperada, cree un nuevo registro en una tabla interna definida con la estructura de su registro de eventos. Asigne los datos de las tablas SAP de origen a los campos correspondientes, por ejemplo, asigne
VBAK-ERNAMaProcessingAgentyVBAK-ERDATyVBAK-ERZETaEventTime. - Combinar Datos de Actividad: Asegúrese de que cada sentencia SELECT para una actividad añada sus resultados a la tabla interna principal única. Esto crea la estructura de archivo plano final donde cada fila representa un evento.
- Manejar Marcas de Tiempo e Información del Sistema: Utilice los campos del sistema
SY-DATUMySY-UZEITpara rellenar la marca de tiempoLastDataUpdatepara cada fila. UtiliceSY-SYSIDpara rellenar elSourceSystem. - Implementar Funcionalidad de Salida: Añada funcionalidad para mostrar los resultados en una cuadrícula ALV (SAP List Viewer) para análisis en línea utilizando módulos de función como
REUSE_ALV_GRID_DISPLAY. Proporcione una opción para descargar la tabla interna final como un archivo CSV o de texto plano a la máquina local del usuario. - Ejecutar y Exportar: Ejecute el programa a través de
SE38. Ingrese los criterios de selección deseados y ejecute. Una vez que los datos se muestren o procesen, utilice la función de exportación del programa para guardar el archivo de registro de eventos. Asegúrese de que el archivo se guarde en un formato compatible con ProcessMind, típicamente CSV con una fila de encabezado.
Configuración
- Rango de Fechas: En la pantalla de selección, especifique un rango de fechas para la fecha de creación del pedido de devolución. Se recomienda un rango de 3 a 6 meses para el análisis inicial, equilibrando el volumen de datos y la visibilidad del proceso.
- Tipo de Documento de Devolución: Filtre por el tipo de documento de ventas específico utilizado para devoluciones en su sistema, por ejemplo, 'RE' para Devoluciones, 'CR' para Solicitud de Nota de Crédito. Este es un filtro crucial para aislar el proceso correcto. Ingrese estos valores en la opción de selección
S_AUART. - Sociedad: Especifique la sociedad relevante (
P_BUKRS) para limitar los datos a una entidad legal específica. Esto es esencial en entornos multiempresa. - Prerrequisitos: El usuario que ejecuta el programa requiere autorizaciones para
SE38(ejecución de programas) y acceso a las tablas subyacentes de SD, MM y FI (por ejemplo, VBAK, LIKP, VBRK, BKPF, CDHDR). El desarrollo requiere un rol de desarrollador ABAP. - Rendimiento: Para conjuntos de datos muy grandes que abarcan varios años, el programa puede experimentar largos tiempos de ejecución. Considere ejecutarlo como un proceso en segundo plano (
SM36) y escribir la salida en el sistema de archivos del servidor de aplicaciones en lugar de mostrarla en línea.
a Consulta de ejemplo abap
REPORT Z_PM_RETURN_EXTRACTION.
" =======================================================================
" DATA DECLARATIONS
" =======================================================================
TYPES: BEGIN OF ty_event_log,
returncaseid TYPE vbeln_va,
activityname TYPE string,
eventtime TYPE timestamp,
sourcesystem TYPE sysysid,
lastdataupdate TYPE timestamp,
processingagent TYPE ernam,
returnreason TYPE augru,
materialnumber TYPE matnr,
returnchannel TYPE string, " Placeholder, needs custom logic
requestedrefundamount TYPE netwr,
actualrefundamount TYPE netwr,
END OF ty_event_log.
DATA: lt_event_log TYPE TABLE OF ty_event_log,
ls_event_log TYPE ty_event_log.
DATA: lv_timestamp TYPE timestamp,
lv_last_update TYPE timestamp.
" =======================================================================
" SELECTION SCREEN
" =======================================================================
SELECT-OPTIONS: s_erdat FOR sy-datum OBLIGATORY,
s_auart FOR vbak-auart.
PARAMETERS: p_bukrs TYPE bukrs OBLIGATORY.
" =======================================================================
" MAIN LOGIC
" =======================================================================
START-OF-SELECTION.
" Set static values for the extraction run
GET TIME STAMP FIELD lv_last_update.
" 1. Return Order Created & 6. Credit Memo Request Created
" Note: In many SAP standard processes, the Return Order itself acts as the Credit Memo Request.
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, h~augru, i~matnr, i~netwr
INTO TABLE @DATA(lt_return_orders)
FROM vbak AS h
INNER JOIN vbap AS i ON h~vbeln = i~vbeln
WHERE h~erdat IN @s_erdat
AND h~auart IN @s_auart
AND h~bukrs_vf = @p_bukrs.
LOOP AT lt_return_orders INTO DATA(ls_return_order).
" Activity: Return Order Created
ls_event_log-returncaseid = ls_return_order-vbeln.
ls_event_log-activityname = 'Return Order Created'.
CONVERT DATE ls_return_order-erdat TIME ls_return_order-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_return_order-ernam.
ls_event_log-returnreason = ls_return_order-augru.
ls_event_log-materialnumber = ls_return_order-matnr.
ls_event_log-requestedrefundamount = ls_return_order-netwr.
APPEND ls_event_log TO lt_event_log.
" Activity: Credit Memo Request Created
ls_event_log-activityname = 'Credit Memo Request Created'.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
IF lt_return_orders IS NOT INITIAL.
" 2. Return Order Block Removed (Example for Delivery Block)
SELECT objectid, udate, utime, username
FROM cdhdr
INTO TABLE @DATA(lt_block_changes)
FOR ALL ENTRIES IN @lt_return_orders
WHERE objectclas = 'VERKBELEG'
AND objectid = @lt_return_orders-vbeln
AND tcode = 'VA02'.
IF sy-subrc = 0.
SELECT objectid, fname, value_new
INTO TABLE @DATA(lt_cdpos_block)
FROM cdpos
FOR ALL ENTRIES IN @lt_block_changes
WHERE objectclas = @lt_block_changes-objectclas
AND objectid = @lt_block_changes-objectid
AND changenr = @lt_block_changes-changenr
AND tabname = 'VBAK'
AND fname = 'LIFSK' " Delivery Block field
AND value_new = ''.
LOOP AT lt_cdpos_block INTO DATA(ls_cdpos_block).
READ TABLE lt_block_changes INTO DATA(ls_block_change) WITH KEY objectid = ls_cdpos_block-objectid.
IF sy-subrc = 0.
ls_event_log-returncaseid = ls_cdpos_block-objectid.
ls_event_log-activityname = 'Return Order Block Removed'.
CONVERT DATE ls_block_change-udate TIME ls_block_change-utime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_block_change-username.
CLEAR: ls_event_log-returnreason, ls_event_log-materialnumber, ls_event_log-requestedrefundamount, ls_event_log-actualrefundamount.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
ENDIF.
" Get subsequent documents from flow
SELECT vbelv, vbtyp_n, vbeln, rfbsk
INTO TABLE @DATA(lt_doc_flow)
FROM vbfa
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbelv = @lt_return_orders-vbeln
AND vbtyp_n IN ('J', 'R', 'M'). " J=Delivery, R=Goods Mvmt, M=Invoice
" 3. Return Delivery Created
SELECT vbeln, erdat, erzet, ernam FROM likp
INTO TABLE @DATA(lt_deliveries)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'J'.
LOOP AT lt_deliveries INTO DATA(ls_delivery).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_del) WITH KEY vbeln = ls_delivery-vbeln.
ls_event_log-returncaseid = ls_doc_flow_del-vbelv.
ls_event_log-activityname = 'Return Delivery Created'.
CONVERT DATE ls_delivery-erdat TIME ls_delivery-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_delivery-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 4. Goods Receipt Posted
SELECT mblnr, mjahr, budat, cputm, usnam FROM mkpf
INTO TABLE @DATA(lt_goods_receipt)
FOR ALL ENTRIES IN @lt_doc_flow
WHERE xblnr = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'R'.
LOOP AT lt_goods_receipt INTO DATA(ls_goods_receipt).
READ TABLE lt_doc_flow INTO DATA(ls_doc_flow_gr) WITH KEY vbeln = ls_goods_receipt-mblnr.
ls_event_log-returncaseid = ls_doc_flow_gr-vbelv.
ls_event_log-activityname = 'Goods Receipt Posted'.
CONVERT DATE ls_goods_receipt-budat TIME ls_goods_receipt-cputm INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_goods_receipt-usnam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 5. Usage Decision Made (Requires QM Module implementation)
SELECT q~prueflos, q~vdatu, q~vzeit, q~vname
FROM qals AS q
INNER JOIN qave AS v ON q~prueflos = v~prueflos
INTO TABLE @DATA(lt_usage_decisions)
FOR ALL ENTRIES IN @lt_deliveries
WHERE q~kdauf = @lt_deliveries-vbeln.
LOOP AT lt_usage_decisions INTO DATA(ls_ud).
SELECT SINGLE vbelv FROM vbfa INTO @DATA(lv_vbelv_ud) WHERE vbeln = @ls_ud-prueflos.
ls_event_log-returncaseid = lv_vbelv_ud.
ls_event_log-activityname = 'Usage Decision Made'.
CONVERT DATE ls_ud-vdatu TIME ls_ud-vzeit INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_ud-vname.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 7. Credit Memo Created
SELECT h~vbeln, h~erdat, h~erzet, h~ernam, i~netwr, i~vgbel
INTO TABLE @DATA(lt_cred_memos)
FROM vbrk AS h
INNER JOIN vbrp AS i ON h~vbeln = i~vbeln
FOR ALL ENTRIES IN @lt_doc_flow
WHERE h~vbeln = @lt_doc_flow-vbeln AND @lt_doc_flow-vbtyp_n = 'M'.
LOOP AT lt_cred_memos INTO DATA(ls_cred_memo).
ls_event_log-returncaseid = ls_cred_memo-vgbel.
ls_event_log-activityname = 'Credit Memo Created'.
CONVERT DATE ls_cred_memo-erdat TIME ls_cred_memo-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_cred_memo-ernam.
ls_event_log-actualrefundamount = ls_cred_memo-netwr.
APPEND ls_event_log TO lt_event_log.
" 8. Credit Memo Posted To FI
SELECT SINGLE budat, cputime, usnam FROM bkpf
INTO @DATA(ls_bkpf_post)
WHERE awkey = @ls_cred_memo-vbeln AND awtyp = 'VBRK'.
IF sy-subrc = 0.
ls_event_log-activityname = 'Credit Memo Posted To FI'.
CONVERT DATE ls_bkpf_post-budat TIME ls_bkpf_post-cputime INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-processingagent = ls_bkpf_post-usnam.
APPEND ls_event_log TO lt_event_log.
ENDIF.
" 12. Credit Memo Cleared
SELECT SINGLE augdt FROM bseg
INTO @DATA(lv_augdt)
WHERE bukrs = @p_bukrs
AND belnr = @ls_cred_memo-vbeln
AND augdt IS NOT NULL.
IF sy-subrc = 0 AND lv_augdt IS NOT INITIAL.
ls_event_log-activityname = 'Credit Memo Cleared'.
CONVERT DATE lv_augdt INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
CLEAR: ls_event_log-processingagent.
APPEND ls_event_log TO lt_event_log.
ENDIF.
ENDLOOP.
" 9. Return Order Item Completed
SELECT vbeln, erdat, erzet, ernam, abgru FROM vbap
INTO TABLE @DATA(lt_items_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_items_completed INTO DATA(ls_item_completed).
ls_event_log-returncaseid = ls_item_completed-vbeln.
ls_event_log-activityname = 'Return Order Item Completed'.
CONVERT DATE ls_item_completed-erdat TIME ls_item_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 10. Return Order Completed
SELECT vbeln, erdat, erzet, ernam FROM vbak
INTO TABLE @DATA(lt_orders_completed)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND gbsta = 'C'.
LOOP AT lt_orders_completed INTO DATA(ls_order_completed).
ls_event_log-returncaseid = ls_order_completed-vbeln.
ls_event_log-activityname = 'Return Order Completed'.
CONVERT DATE ls_order_completed-erdat TIME ls_order_completed-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_order_completed-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
" 11. Return Order Item Rejected
SELECT vbeln, erdat, erzet, ernam FROM vbap
INTO TABLE @DATA(lt_items_rejected)
FOR ALL ENTRIES IN @lt_return_orders
WHERE vbeln = @lt_return_orders-vbeln
AND abgru IS NOT NULL AND abgru <> ''.
LOOP AT lt_items_rejected INTO DATA(ls_item_rejected).
ls_event_log-returncaseid = ls_item_rejected-vbeln.
ls_event_log-activityname = 'Return Order Item Rejected'.
CONVERT DATE ls_item_rejected-erdat TIME ls_item_rejected-erzet INTO TIME STAMP ls_event_log-eventtime TIME ZONE sy-zonlo.
ls_event_log-sourcesystem = sy-sysid.
ls_event_log-lastdataupdate = lv_last_update.
ls_event_log-processingagent = ls_item_rejected-ernam.
APPEND ls_event_log TO lt_event_log.
ENDLOOP.
ENDIF.
" =======================================================================
" OUTPUT
" =======================================================================
cl_salv_table=>factory(
IMPORTING
r_salv_table = DATA(lo_alv)
CHANGING
t_table = lt_event_log ).
lo_alv->display( ). Pasos
- Prerrequisitos: Asegúrese de tener un usuario de base de datos con acceso de lectura a las tablas SAP ECC requeridas. Esto incluye tablas de los módulos de Ventas y Distribución (SD), Gestión de Materiales (MM) y Contabilidad Financiera (FI). Necesitará una herramienta cliente SQL adecuada, como DBeaver, SAP HANA Studio u Oracle SQL Developer, para conectarse a la base de datos.
- Identificar Específicos del Sistema: Antes de ejecutar la consulta, debe identificar los tipos de documentos específicos utilizados para devoluciones en su organización. La consulta utiliza un marcador de posición
[YOUR_RETURN_ORDER_TYPES], que debe reemplazar con valores reales, como 'RE' para devoluciones estándar. - Preparar la Consulta: Copie la consulta SQL completa proporcionada en la sección 'query' en su cliente SQL.
- Configurar Parámetros: Localice la Expresión de Tabla Común (CTE) denominada
BaseReturnOrdersal principio de la consulta. Modifique la cláusulaWHEREpara especificar el rango de fechas deseado reemplazando[START_DATE]y[END_DATE]. Actualice la lista de tipos de pedidos de devolución y, si es necesario, filtre por una sociedad específica (BUKRS_VF). - Ejecutar la Consulta: Ejecute la consulta modificada contra la base de datos de SAP ECC. El tiempo de ejecución puede variar dependiendo del rango de fechas seleccionado y del tamaño de la base de datos.
- Revisar los Datos en Bruto: Una vez finalizada la consulta, realice una revisión rápida de la salida. Verifique que las columnas
ReturnCaseId,ActivityNameyEventTimeestén pobladas y que aparezcan datos para múltiples actividades. - Exportar a CSV: Exporte el conjunto de resultados completo desde su cliente SQL a un archivo CSV. Utilice la codificación UTF-8 para asegurarse de que todos los caracteres se conserven correctamente.
- Preparar para la Carga: Abra el archivo CSV y verifique que los encabezados de las columnas coincidan exactamente con los atributos requeridos:
ReturnCaseId,ActivityName,EventTime,SourceSystem, etc. Ajuste los encabezados si su cliente SQL los modificó durante la exportación. - Carga Final: Cargue el archivo CSV limpio en la plataforma ProcessMind para su análisis.
Configuración
- Tipos de Documentos de Devolución: La consulta debe configurarse con los tipos de documentos de ventas específicos que representan los pedidos de devolución en su sistema SAP. Esto se hace reemplazando el marcador de posición
[YOUR_RETURN_ORDER_TYPES]. Ejemplos comunes incluyen 'RE' o tipos 'Z' personalizados. - Rango de Fechas: Es fundamental definir un rango de fechas adecuado para la extracción. Un rango de 3 a 6 meses de datos se recomienda típicamente para un análisis inicial. Establezca esto utilizando los marcadores de posición
[START_DATE]y[END_DATE]en el formato 'YYYYMMDD'. - Sociedad: Para organizaciones con múltiples sociedades, filtrar los datos es esencial para un análisis enfocado. Puede añadir un filtro como
VBAK.BUKRS_VF = '[YOUR_COMPANY_CODE]'en el CTE inicial para limitar el alcance. - Dialecto de Base de Datos: La consulta proporcionada utiliza funciones SQL comunes. Sin embargo, las conversiones de fecha y hora, como
TO_TIMESTAMPy la concatenación de cadenas (CONCAT), pueden requerir ligeros ajustes de sintaxis dependiendo del sistema de base de datos subyacente (por ejemplo, Oracle, HANA, DB2). - Autorizaciones Requeridas: El usuario de la base de datos necesita acceso de lectura a las siguientes tablas clave: VBAK, VBAP, VBFA, LIKP, LIPS, VBRK, VBRP, MKPF, MSEG, BKPF, BSAD, QALS, QAVE, CDHDR y CDPOS.
a Consulta de ejemplo sql
WITH BaseReturnOrders AS (
SELECT
VBAK.VBELN AS ReturnOrderNumber,
VBAP.POSNR AS ReturnOrderItemNumber
FROM VBAK
JOIN VBAP ON VBAK.VBELN = VBAP.VBELN
WHERE VBAK.AUART IN ('[YOUR_RETURN_ORDER_TYPES]') -- e.g., 'RE'
AND VBAK.ERDAT BETWEEN '[START_DATE]' AND '[END_DATE]' -- e.g., '20230101' and '20231231'
)
-- 1. Return Order Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBAK.ERDAT, VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
UNION ALL
-- 2. Return Order Block Removed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Block Removed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAK'
AND CDPOS.FNAME IN ('LIFSK', 'FAKSK')
AND CDPOS.VALUE_NEW = ''
AND CDPOS.VALUE_OLD <> ''
UNION ALL
-- 3. Return Delivery Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(LIKP.ERDAT, LIKP.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
LIKP.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIKP ON VBFA.VBELN = LIKP.VBELN
UNION ALL
-- 4. Goods Receipt Posted
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Goods Receipt Posted' AS "ActivityName",
TO_TIMESTAMP(CONCAT(MKPF.CPUDT, MKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
MKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN LIPS ON VBFA.VBELN = LIPS.VBELN AND VBFA.POSNN = LIPS.POSNR
JOIN MSEG ON LIPS.VBELN = MSEG.LFBNR AND LIPS.POSNR = MSEG.LFPOS
JOIN MKPF ON MSEG.MBLNR = MKPF.MBLNR AND MSEG.MJAHR = MKPF.MJAHR
WHERE MSEG.BWART IN ('651', '653', '655') -- Standard returns movement types
UNION ALL
-- 5. Usage Decision Made
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Usage Decision Made' AS "ActivityName",
TO_TIMESTAMP(CONCAT(QAVE.ADAT, QAVE.ATIM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
QAVE.AENAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'J'
JOIN QALS ON VBFA.VBELN = QALS.VBELN AND VBFA.POSNN = QALS.POSNR -- Linking inspection lot to delivery item
JOIN QAVE ON QALS.PRUEFLOS = QAVE.PRUEFLOS
UNION ALL
-- 6. Credit Memo Request Created (assumes a separate doc, or can be the return order itself)
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CMR_VBAK.ERDAT, CMR_VBAK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CMR_VBAK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'K' -- 'K' is Credit Memo Request
JOIN VBAK AS CMR_VBAK ON VBFA.VBELN = CMR_VBAK.VBELN
UNION ALL
-- 7. Credit Memo Created
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
TO_TIMESTAMP(CONCAT(VBRK.ERDAT, VBRK.ERZET), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
VBRK.ERNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
WHERE VBRK.FKART IN ('[YOUR_CREDIT_MEMO_TYPES]') -- e.g., 'G2'
UNION ALL
-- 8. Credit Memo Posted To FI
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Posted To FI' AS "ActivityName",
TO_TIMESTAMP(CONCAT(BKPF.CPUDT, BKPF.CPUTM), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
BKPF.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BKPF ON VBRK.VBELN = BKPF.AWKEY AND BKPF.AWTYP = 'VBRK'
UNION ALL
-- 9. Return Order Item Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUP'
AND CDPOS.FNAME = 'GBSTA'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 10. Return Order Completed
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Completed' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON B.ReturnOrderNumber = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBUK'
AND CDPOS.FNAME = 'GBSTK'
AND CDPOS.VALUE_NEW = 'C'
UNION ALL
-- 11. Return Order Item Rejected
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Return Order Item Rejected' AS "ActivityName",
TO_TIMESTAMP(CONCAT(CDHDR.UDATE, CDHDR.UTIME), 'YYYYMMDDHH24MISS') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CDHDR.USERNAME AS "ProcessingAgent",
CDPOS.VALUE_NEW AS "ReturnReason", -- Using rejection reason for this specific event
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
NULL AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN CDHDR ON CONCAT(B.ReturnOrderNumber, LPAD(B.ReturnOrderItemNumber, 6, '0')) = CDHDR.OBJECTID
JOIN CDPOS ON CDHDR.OBJECTCLAS = CDPOS.OBJECTCLAS AND CDHDR.OBJECTID = CDPOS.OBJECTID AND CDHDR.CHANGENR = CDPOS.CHANGENR
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
WHERE CDHDR.OBJECTCLAS = 'VERKBELEG'
AND CDPOS.TABNAME = 'VBAP'
AND CDPOS.FNAME = 'ABGRU'
AND CDPOS.VALUE_NEW <> ''
UNION ALL
-- 12. Credit Memo Cleared
SELECT
CONCAT(B.ReturnOrderNumber, '-', B.ReturnOrderItemNumber) AS "ReturnCaseId",
'Credit Memo Cleared' AS "ActivityName",
TO_TIMESTAMP(BSAD.AUGDT, 'YYYYMMDD') AS "EventTime",
'SAP ECC' AS "SourceSystem",
CURRENT_TIMESTAMP AS "LastDataUpdate",
CLEAR_DOC.USNAM AS "ProcessingAgent",
VBAK.AUGRU AS "ReturnReason",
VBAP.MATNR AS "MaterialNumber",
VBAK.VTWEG AS "ReturnChannel",
VBAP.NETWR AS "RequestedRefundAmount",
VBRP.NETWR AS "ActualRefundAmount"
FROM BaseReturnOrders B
JOIN VBAK ON B.ReturnOrderNumber = VBAK.VBELN
JOIN VBAP ON B.ReturnOrderNumber = VBAP.VBELN AND B.ReturnOrderItemNumber = VBAP.POSNR
JOIN VBFA ON B.ReturnOrderNumber = VBFA.VBELV AND B.ReturnOrderItemNumber = VBFA.POSNV AND VBFA.VBTYP_N = 'M'
JOIN VBRK ON VBFA.VBELN = VBRK.VBELN
JOIN VBRP ON VBRK.VBELN = VBRP.VBELN AND VBFA.POSNN = VBRP.POSNR
JOIN BSAD ON VBRK.VBELN = BSAD.VBELN
JOIN BKPF AS CLEAR_DOC ON BSAD.AUGBL = CLEAR_DOC.BELNR AND BSAD.BUKRS = CLEAR_DOC.BUKRS AND BSAD.GJAHR_AUGL = CLEAR_DOC.GJAHR;