退货与退款处理数据模板
退货与退款处理数据模板
- 建议收集的属性
- 需要追踪的关键活动
- 提取指南
退货与退款处理属性
| 名称 | 描述 | ||
|---|---|---|---|
| Event 时间 EventTime | 指示特定活动发生时间的精确时间戳。 | ||
| 描述 事件时间(Event Time)捕获了业务事件在系统中记录的日期和时间。此时间戳对于按时间顺序排列活动以及进行所有基于时间的分析至关重要。 在流程挖掘中,此属性用于计算活动之间的周期时间、识别每个步骤的持续时长,并分析流程绩效随时间的变化。它是发现瓶颈、监控 SLA 达成情况以及理解退货流程时间动态的基础。 为何重要 该时间戳对于事件排序、计算各项时长与周期时间以及识别流程延误至关重要。 获取方式 通常源自与单据创建或状态更改相关的日期和时间字段,例如 VBAK、LIKP 和 BKPF 等表中的 ERDAT(创建日期)和 ERZET(创建时间),或会计单据中的过账日期 (BUDAT)。 示例 2023-10-26T10:05:00Z2023-10-27T14:30:15Z2023-10-28T09:00:00Z | |||
| 活动名称 ActivityName | 在退货与退款流程中发生的特定业务活动或事件的名称。 | ||
| 描述 此属性描述退货生命周期中的单个步骤或里程碑。活动代表正在进行的工作,如“退货订单已批准”或“货物检验已完成”。这些活动源自 SAP S/4HANA 中记录的状态更改、单据创建或特定用户操作。 分析这些活动的顺序和频率是流程挖掘的核心。它有助于可视化流程图,识别常见和罕见的流程路径,并锁定频繁重复的活动(这通常预示着返工或效率低下)。 为何重要 活动构成了流程图的骨干,支持对流程流向、瓶颈和变体进行可视化分析。 获取方式 活动名称通常源自组合数据,例如 VBUK/VBUP 等表中的单据状态变更,VBAK(销售单据)和 BKPF(会计单据)等头表中的创建事件,以及 MSEG 中的货物移动状态。 示例 退货请求已发起仓库已收货贷项通知单已创建退款已处理 | |||
| 退货案例 ID ReturnCaseId | 单个客户退货流程的唯一标识符,链接了从发起到结案的所有相关活动。 | ||
| 描述 退货案例 ID 是归类单次退货案例中所有事件和活动的首要标识符。每个客户退货请求都会分配一个唯一的 ID,以便对整个流程进行端到端跟踪。 在流程挖掘中,此属性是重建流程流的基础。通过将“发起退货请求”、“收到货物”和“处理退款”等离散事件连接成每个特定退货的连贯时间线,它可以实现对案例时长、流程变体和瓶颈的分析。 为何重要 这是全程追踪退货的关键要素,支持所有案例层级的分析,包括周期时间和流程变体发现。 获取方式 这通常是退货订单抬头表 VBAK 中的销售单据编号 (VBELN),其中单据类别 (VBTYP) 指示为退货。 示例 600001896000019060000191 | |||
| 最后数据更新 LastDataUpdateTimestamp | 指示此 event 的 data 上次刷新或提取时间的 timestamp。 | ||
| 描述 此属性记录上次数据提取或更新的日期和时间,提供关于所分析数据集新鲜度的元数据。 它对于理解流程挖掘分析的时效性非常重要。用户可以查看数据的最新程度,这对于运营监控和追踪进行中案例的仪表板尤为关键。 为何重要 指示 data 的新鲜度,这对于确保分析和仪表板基于最新信息至关重要。 获取方式 这通常由 ETL 或数据流水线工具在提取数据时生成并标记在数据集上。 示例 2023-11-01T02:00:00Z2023-11-02T02:00:00Z | |||
| 源系统ID SourceSystemId | 提取数据的源系统标识符。 | ||
| 描述 此属性指定事件数据来源的记录系统。对于此流程,通常是 SAP S/4HANA 实例 ID。 在多系统环境下,该字段对于数据谱系、故障排查和确保数据完整性至关重要。如果退货是跨不同 ERP 实例处理,或与外部系统(如仓库管理系统)集成,它有助于区分数据。 为何重要 为数据来源和谱系提供关键上下文(尤其是在多系统环境下),确保数据具有可追溯性和可信度。 获取方式 该值通常是静态的,并在数据提取期间配置。它可以从 SAP 系统的管理信息中检索,例如系统 ID (SID)。 示例 S4H_PROD_100S4Q_DEV_200 | |||
| 事件结束时间 EventEndTime | 标记活动完成的时间戳,用于计算其持续时长。 | ||
| 描述 StartTime (EventTime) 标志着活动的开始,而 EventEndTime 则标志着其结束。对于许多系统生成的事件,开始和结束时间完全一致,代表瞬时发生。但对于像“物品检验”这类有固定耗时的活动,这一属性就非常关键。 该属性支持直接计算活动的“处理时间”。这是性能分析的基础,能帮助您精准找出究竟是哪些步骤(而非步骤间的等待)最耗费时间。 为何重要 支持精确计算单个活动的持续时间,这是锁定特定流程步骤中低效率环节的关键。 获取方式 这通常是派生出来的。对于某些活动,它可能是一个单独的字段;更常见的情况是,它是案例中后续活动的 StartTime。 示例 2023-10-26T11:25:30Z2023-10-27T15:00:00Z2023-10-28T09:10:45Z | |||
| 产品 ID ProductId | 退回货物的唯一标识符。 | ||
| 描述 此属性指定作为退货对象的主料或产品。它将退货流程与产品目录中的特定项目关联起来。 按产品分析退货是识别高退货率项目的基础。高退货率可能预示着质量缺陷、产品说明欠佳或制造问题。此类数据有助于企业在产品设计、供应商管理和库存策略方面做出明智决策。 为何重要 将退货流程与特定产品关联,支持分析单项商品的退货率,并识别质量或描述问题。 获取方式 位于退货单项目表 (VBAP) 或退货交货项目表 (LIPS) 的物料编号字段 (MATNR) 中。 示例 FG-10023HW-45981SW-LICENSE-PREM | |||
| 客户ID CustomerId | 发起退货客户的唯一标识符。 | ||
| 描述 此属性标识发起退货请求的客户,将流程实例与客户主数据中的特定方关联起来。 按客户分析退货有助于发现模式,例如退货率异常高的客户可能预示着欺诈行为或严重不满。它还支持基于客户类型、价值或历史记录对退货流程进行细分,从而提供定制化的服务水平。 为何重要 将退货与特定客户关联,从而支持对客户行为、细分市场的分析,并识别高频退货者。 获取方式 位于退货单头表 (VBAK) 的客户编号字段 (KUNNR) 中。 示例 CUST-001234CUST-005678CUST-009012 | |||
| 用户名称 UserName | 执行该活动的员工的用户 ID。 | ||
| 描述 此属性标识负责完成任务(如批准退货或创建贷项通知单)的具体用户或系统代理。在 SAP 中,这通常在记录创建或更改单据的用户的字段中捕获。 按用户分析有助于识别高绩效人才或团队、培训需求以及工作量分布。这对于调查偏差也至关重要,因为它将流程操作与具体个人联系起来,支持合规性和审计工作。 为何重要 将流程活动归因于特定用户,从而支持对团队绩效、工作负载和合规性的分析。 获取方式 常见于单据头表,例如 VBAK(销售订单)、LIKP(交货单)和 BKPF(会计凭证)中的 ERNAM(创建者)字段。用户信息可从用户主表 USR21 中进行补充。 示例 CBROWNASMITHWF_BATCH | |||
| 退款金额 RefundAmount | 发放给客户的最终退款金额。 | ||
| 描述 此属性代表退货流程完成后实际入账或退还给客户的金额。该值记录在贷项通知单等财务单据中。 这是一项用于各种分析的关键财务指标。它对于“退款金额差异分析”仪表板对比申请金额至关重要。它还支持按价值对退货进行细分,以识别高价值退货是否遵循不同的流程或需要更长时间来解决。 为何重要 追踪退货的财务影响,对于分析退款准确性、识别高价值案例以及了解整体成本至关重要。 获取方式 源自贷项通知单单据的净值字段 (NETWR),见于 VBRK(开票单据抬头)或 BSEG(会计单据细目)等表。 示例 125.50999.0049.99 | |||
| 退货原因 ReturnReason | 客户提供的退货原因。 | ||
| 描述 此属性记录客户陈述的退货原因,例如“产品缺陷”、“尺寸错误”或“不再需要”。这些原因通常在退货发起过程中从预定义的理由代码列表中选择。 分析退货原因对于识别产品质量问题、改进产品说明或优化销售流程至关重要。它能直观反映客户的不满,并帮助确定业务改进的优先级,从而降低整体退货率。 为何重要 提供关于退货原因的关键洞察,支持根因分析以解决产品质量、履约错误或客户预期落差等问题。 获取方式 通常存储在退货销售订单项目表 (VBAP) 的 ABGRU(销售单据拒绝原因)字段中。 示例 001 - 质量差002 - 运输途中损坏005 - 发货错误 | |||
| 个案周期时间 (Case Cycle Time) CycleTime | 退货案例从发起至结案所经历的总时长。 | ||
| 描述 此计算指标衡量单个案例整个退货流程的端到端时长。它通常计算为第一个事件与最后一个事件之间的时间差,例如从“发起退货请求”到“退货案例已结案”。 周期时间是衡量流程效率的首要 KPI。它用于“整体退货周期时间”仪表板,以监控绩效、设定基准并识别趋势。分析与较长周期时间相关的因素(如产品类型或退货原因),可以揭示系统性的低效问题。 为何重要 这是衡量整体流程效率的基础 KPI,直接影响客户满意度和运营成本。 获取方式 这是一个计算字段。它通过计算每个唯一 ReturnCaseId 的最大和最小 EventTime 之间的时间差得出。 示例 5天 4小时 30分12天 2小时 15分2天 8小时 0分 | |||
| 处理专员 ProcessingAgent | 负责处理人工活动的特定专员或资源组。 | ||
| 描述 此属性标识执行特定任务的人员或团队。在共享服务环境中,它可以通过引用角色或团队比“用户名”更加具体。 这对于“退款审批效率”仪表板分析不同专员或团队的绩效非常有价值。它有助于了解工作量分配、识别培训需求,并认可表现卓越、可分享最佳实践的个人或团队。 为何重要 支持在客服或团队层级进行绩效分析,有助于管理工作负载、识别培训机会并提高效率。 获取方式 如果分配了专员,此信息可通过 SAP 业务伙伴功能获取;或者可以根据用户在 HR 组织结构中的部门或角色推导得出。 示例 一线支持仓库检验团队财务部 - 应付账款 | |||
| 是否已自动化 IsAutomated | 指示活动是由系统还是人工执行的标志。 | ||
| 描述 此布尔属性区分由系统自动执行的活动(如工作流或后台作业)和由用户执行的人工活动。 它对于计算“自动退款审批率”KPI 以及识别提升自动化的机会至关重要。通过筛选人工任务,企业可以将流程改进工作集中在那些自动化能在速度、成本和准确性方面带来最大收益的领域。 为何重要 区分人工和自动化任务,这对于识别自动化机会和衡量数字化转型的影响至关重要。 获取方式 这通常根据用户名推导得出。例如,如果用户是 'WF_BATCH' 或其他系统 ID,则该活动被标记为自动执行。 示例 truefalse | |||
| 是否返工 IsRework | 指示案例中的某项活动是否为先前活动的重复。 | ||
| 描述 此计算布尔属性用于识别返工实例,即同一案例中某项活动被多次执行。例如,如果必须重复进行货物检验,或者贷项通知单在创建、取消后又重新创建。 该属性对于“退款处理返工分析”仪表板和“退款返工率”KPI 至关重要。通过突出显示容易出错或需要多次尝试的活动,它有助于量化流程低效性,从而指明需要加强控制或培训的领域。 为何重要 通过标记重复工作来突出流程中的效率低下和错误,从而支持针对性改进,减少浪费和延迟。 获取方式 此标记通常由流程挖掘工具本身计算,或在数据转换阶段预先计算。它会检查同一活动名称是否已在同一案例的早期出现过。 示例 truefalse | |||
| 物品检验结果 ItemInspectionOutcome | 对退回货物进行实物检验的结果。 | ||
| 描述 此属性记录货物在仓库接收后执行的检验过程结果。常见结果包括“已接收”、“已拒绝 - 损坏”或“已接收 - 可再次销售”。 该数据为后续流程步骤提供关键上下文。它决定了是发放全额退款、部分退款还是不退款。分析此结果有助于识别拒绝退货的原因,并且如果货物在运输途中频繁损坏,还能为产品包装或物流合作伙伴提供反馈。 为何重要 解释退款批准或拒绝背后的决策过程,提供关于物品状况和退款调整原因的有价值数据。 获取方式 此信息可能记录在质量管理模块 (QM) 的检验批中,或者作为退货交货行项目 (LIPS) 上的状态或原因代码,也可能存在于自定义字段中。 示例 已接受 - 可二次销售已接受 - 待翻新已拒绝 - 客户造成的损坏已拒绝 - 退回货物错误 | |||
| 申请的退款金额 RequestedRefundAmount | 流程开始时最初申请或预期的退款金额。 | ||
| 描述 此属性记录初始退货请求中货物的价值,作为与最终退款金额进行比较的基准。 该字段专用于“退款金额差异分析”仪表板。通过对比申请金额与实际退款金额,有助于发现因货物损坏导致的部门退款、补货费或其他调整引起的问题,从而确保财务的准确性和透明度。 为何重要 作为衡量退款准确性的基准,有助于识别并分析预期退款值与实际退款值之间的差异。 获取方式 通常源自初始退货销售订单项目的净值。这将是 VBAP 表中对应行项目的净值 (NETWR)。 示例 125.501050.0049.99 | |||
| 贷记凭证编号 CreditMemoNumber | 贷项通知单单据的唯一标识符,该单据用于授权退款。 | ||
| 描述 贷记凭证(Credit Memo)是正式将退回款项记入客户账户的开票单据。此属性是该财务单据的唯一编号。 追踪贷记凭证编号对于分析退货流程中的财务结算部分至关重要。它标志着一个关键里程碑,通常会触发实际的退款支付,对于财务对账和审计也是必不可少的。 为何重要 表示退款的正式财务交易,对于追踪流程最后阶段以及财务审计至关重要。 获取方式 这是开票单据抬头表 (VBRK) 中的开票单据编号 (VBELN),其单据类别指示为贷项通知单。 示例 900003459000034690000347 | |||
| 退款 SLA 目标日期 RefundSlaTargetDate | 退货案例的退款应完成处理的目标日期。 | ||
| 描述 此属性定义了处理退款的服务水平协议 (SLA) 截止日期。该日期通常基于业务规则计算,例如退货获批或收到货物后的若干天。 该字段是“退款 SLA 达成情况监控”仪表板及相关 KPI 的基础。它支持主动追踪有违约风险的案例,并分析延误的根因,最终有助于提升客户满意度。 为何重要 为衡量 SLA 达成情况提供基准,有助于监控绩效、优先处理长期未结案例并提升客户满意度。 获取方式 这几乎总是一个派生字段。其逻辑基于关键日期(如退货请求创建日期)加上业务规则定义的时长,时长可能取决于客户类型或退货原因等因素。 示例 2023-11-10T23:59:59Z2023-11-15T23:59:59Z2023-11-20T23:59:59Z | |||
| 退款 SLA 达成情况 RefundSlaAdherence | 指示退款是否在服务水平协议 (SLA) 目标时间内处理的标志。 | ||
| 描述 此计算属性检查“退款已处理”活动是否发生在“退款 SLA 目标日期”当天或之前。它为每个案例提供简单的 SLA 合规性(是或否)指示。 这是“退款 SLA 达成情况监控”仪表板和“退款 SLA 达成率”KPI 的核心指标。它有助于衡量针对客户承诺的绩效,并识别未能达到预期的案例,从而支持对延误进行根因分析。 为何重要 直接衡量针对客户承诺的执行绩效,使其成为服务质量和客户满意度的关键指标。 获取方式 通过比较每个案例中“退款已处理”活动的 EventTime 与 “RefundSlaTargetDate” 计算得出。 示例 truefalse | |||
| 退货交货单号 ReturnDeliveryNumber | 退货交货单据的唯一标识符。 | ||
| 描述 当客户实物退货时,SAP 会创建一个退货交货单据来管理入库物流。此属性是该单据的唯一编号。 该 ID 对于追踪退回货物的实物移动非常重要。它将退货的财务和物流方面联系起来,从而支持对流程中收货和检验阶段进行详细分析。 为何重要 在退货订单与实物收货之间建立关键关联,对于分析物流和仓库处理时间至关重要。 获取方式 这是交货抬头表 (LIKP) 中的交货单据编号 (VBELN),其单据类别指示为退货交货。 示例 840000128400001384000014 | |||
| 退货政策 ID ReturnPolicyId | 适用于此特定退货案例的退货政策标识符。 | ||
| 描述 此属性指出适用于该交易的具体退货政策或规则集。政策可能因产品类型、客户细分或购买时长而异。 该数据对于“退货政策合规概览”至关重要。通过将每个案例与特定政策关联,系统可以自动检查其是否遵循规则(如退货期限或货物状况要求),并标记偏差以供分析。 为何重要 支持根据业务规则进行自动化合规检查,有助于确保退货处理的一致性并符合政策。 获取方式 这通常不是标准的 SAP 字段,可能需要根据业务逻辑,利用产品类型、客户和销售日期等数据推导得出。如果已实施,它可以存储在自定义字段中。 示例 STD-30DAYELEC-90天保修最终销售缺陷 | |||
| 退货政策遵循度 ReturnPolicyAdherence | 指示退货案例是否符合预定义退货政策的标志。 | ||
| 描述 此计算布尔属性指示退货是否符合适用退货政策中设定的标准。其逻辑可以检查例如退货是否在允许的时间范围内发起,或者退货原因对于该产品是否有效。 该属性直接支持“退货政策合规概览”仪表板。它能量化合规率,并允许深入钻取不合规案例以了解偏差原因,从而帮助更有效地执行政策。 为何重要 量化业务规则的遵循情况,帮助识别并减少可能影响盈利或导致流程异常的违规行为。 获取方式 根据业务规则计算。例如:(发起退货日期 - 原始购买日期) <= [允许退货天数]。这需要原始购买日期和政策规则数据。 示例 truefalse | |||
| 退货订单状态 ReturnOrderStatus | 退货案例当前的总体状态。 | ||
| 描述 此属性提供退货案例在任何给定时间点的高层级状态,如“开启”、“处理中”或“已结案”。这通常是根据上一个完成的主要里程碑得出的汇总状态。 这对于“当前退货案例状态仪表板”必不可少,该仪表板提供了当前工作量和案例分布的运营视图。它能帮助管理者了解每个流程阶段中有多少案例,从而实现更好的资源配置和工作量管理。 为何重要 提供每个案例所处阶段的快照,这对于追踪当前工作量和状态的运营仪表板而言必不可少。 获取方式 源自相关单据的状态字段。例如,源自相关销售订单 (VBUK/VBUP) 或交货单据中的头状态 (GBSTK) 或项目状态 (LFSTK)。 示例 等待收货确认待检验待退款已结案 | |||
| 销售组织 SalesOrganization | 负责原始销售和退货的组织单位。 | ||
| 描述 销售组织是 SAP 中一个关键的组织结构元素,代表负责销售和分销产品及服务的单位。它被分配给退货交易。 此属性允许在不同的业务单元、区域或部门之间筛选和比较退货流程。它有助于识别某些销售组织是否具有更高的退货率或更低效的退货处理流程,为组织绩效分析提供依据。 为何重要 支持跨不同业务部门、地区或销售渠道对比退货流程的绩效和比率。 获取方式 位于退货单头表 (VBAK) 的销售组织字段 (VKORG) 中。 示例 10002100US01 | |||
退货与退款处理活动
| 活动 | 描述 | ||
|---|---|---|---|
| 仓库已收货 | 该事件标志着退回货物在仓库或处理中心的实物接收。当针对退货交货执行过账收货 (PGR) 并创建物料凭证时,该事件会被明确捕获。 | ||
| 为何重要 这是一个关键里程碑,标志着检验和处置计时的开始。此时间点之前的延误由客户导致,而此后的延误则属于内部流程问题。 获取方式 从物料凭证表 MSEG 和 MKPF 中针对与退货相关的收货移动类型捕获。过账日期 (MKPF-BUDAT) 即为事件时间。 捕获 事件对应于退货交货的收货过账。 事件类型 explicit | |||
| 物品检验已完成 | 表示退回货物的质量和状况评估已完成。在高级退货管理(Advanced Returns Management)中,这通常是一个明确的步骤,用于记录检验结果并决定后续操作(如退款或报废)。 | ||
| 为何重要 检验的时长和结果直接影响退款处理时间和库存管理。此活动对于分析检验效率和返工情况至关重要。 获取方式 在 SAP 高级退货管理 (ARM) 中,这可以是检验事务中的明确事件。也可以根据退货单项目上指示检验结果的状态变更推断得出。 捕获 从 ARM 中与物流后续活动相关的事务日志或状态变更中捕获。 事件类型 explicit | |||
| 贷项凭证请求已创建 | 检验通过后,此活动标志着向客户发放贷项凭证的请求已创建。这被捕获为一种新的销售单据,即贷项凭证请求,并参考了原始退货单。 | ||
| 为何重要 这是退货流程财务结算部分的触发点。分析从检验到该步骤的时间,可以揭示从物流到财务交接环节的效率。 获取方式 从 VBAK 表中单据类别为贷项凭证请求的销售单据创建事件中捕获。与退货单的关联维护在单据流表 VBFA 中。 捕获 事件在保存新的贷项凭证请求单据时记录。 事件类型 explicit | |||
| 贷项通知单已创建 | 这是正式开票单据的创建,用于为客户的退货项目进行贷记。这是从贷项通知单请求生成贷项通知单时捕获的明确事件。 | ||
| 为何重要 贷记凭证的创建是一个关键的财务里程碑。它确认了应退款金额并授权启动支付流程。 获取方式 从 VBRK 表中单据类别为贷记凭证的开票单据创建事件中捕获。这通过 VBFA 表关联到贷项凭证请求。 捕获 事件在保存新的贷记开票单据时记录(例如,使用事务代码 VF01)。 事件类型 explicit | |||
| 退款已处理 | 此活动标志着退款流程的最后一步,此时财务贷项已清账,表示款项已发送给客户。这通过财务模块中创建的清账单据来推断,该单据结算了客户账户上的未结贷项。 | ||
| 为何重要 这是客户实际收到款项的时刻。从发起退货到完成此步骤所用的时间是客户满意度的主要驱动因素,也是衡量 SLA 达成情况的关键。 获取方式 从财务会计行项目表 BSEG 中的清账凭证信息推断得出。与贷记凭证关联的客户行项目上的清账日期 (BSEG-AUGDT) 表示退款处理时间。 捕获 根据与贷记凭证关联的会计凭证中填充的清账日期字段推断得出。 事件类型 inferred | |||
| 退货案例已结案 | 这是最后一项活动,表明退货流程已完成,该案例不再有后续操作。这通常在退货订单单据在系统中达到最终“已关闭”状态时推断得出。 | ||
| 为何重要 该事件定义了流程生命周期的结束,从而能够计算总体的端到端周期时间。它确认了案例已得到完全解决。 获取方式 根据 VBAK 表中的退货单整体状态或 VBAP 中的项目状态达到“完成”或“关闭”状态推断得出。具体取决于系统的状态管理配置。 捕获 根据退货单据状态变更为“完成”推断得出。 事件类型 inferred | |||
| 退货请求已发起 | 这是退货流程的起点,即在系统中正式创建退货订单。当在 SAP S/4HANA 中保存退货订单类型的新销售单据时,该事件会被明确捕获。 | ||
| 为何重要 此活动标志着退货案例生命周期的正式开始。分析从该事件到结案的时间,对于衡量整体退货周期和客户体验至关重要。 获取方式 这是一个从 VBAK 表中创建销售单据捕获的明确事件,其中单据类别 (VBAK-VBTYP) 指示为退货订单。创建时间戳为 VBAK-ERDAT。 捕获 事件在保存新的退货销售订单时记录(例如,使用事务代码 VA01)。 事件类型 explicit | |||
| 会计凭证已创建 | 该事件发生在贷项通知单成功过账至财务会计模块时。它会在总账中创建相应的分录,从会计角度使贷项正式生效。 | ||
| 为何重要 此活动确认贷项已整合至财务系统中。从创建贷项通知单到会计过账之间的时间间隔,可以反映出开票到财务接口之间存在的问题。 获取方式 从会计表 BKPF 中的凭证头创建事件中捕获,该凭证与 VBRK 中的贷记凭证 (VBRK-BELNR) 关联。 捕获 事件在开票单据成功过账至财务会计时记录。 事件类型 explicit | |||
| 已创建退货交货 | 此活动表示创建了入库交货单据,用于管理退回货物的实物接收。系统将其捕获为一个参照退货订单的交货单据明确创建事件。 | ||
| 为何重要 这一步是物流环节的关键里程碑。从退货获批到创建交货单之间的时间,体现了将退货信息传达至仓库或接收部门的效率。 获取方式 从 LIKP 表中的交货头创建事件中捕获,通过单据流表 VBFA 与之前的退货单关联。 捕获 事件在保存新的退货交货单据时记录(例如,使用事务代码 VL01N)。 事件类型 explicit | |||
| 换货单已创建 | 此活动代表另一种解决方案:不进行退款,而是创建一个新的销售订单,向客户寄送换货。当创建一个参照原始退货单的新销售订单时,该活动将被捕获。 | ||
| 为何重要 此活动有助于区分退款型退货和换货型退货,两者具有不同的流程路径和客户结果。这是进行变体分析的关键。 获取方式 从 VBAK 表中新销售单据的创建事件中捕获,该单据在单据流表 (VBFA) 中与退货单关联。 捕获 事件在保存被指定为换货单的新销售订单单据时记录。 事件类型 explicit | |||
| 退货已驳回 | 表示退回物品不符合退货政策标准,且退款或贷项请求已被拒绝。这通常通过检验后应用到退货单项目的特定状态或原因代码来捕获。 | ||
| 为何重要 追踪拒绝情况有助于分析退货政策的合规性,并识别拒绝退货的常见原因。这是流程中的一个关键异常路径。 获取方式 根据退货单项目上设置的拒绝原因 (VBAP-ABGRU) 或在高级退货管理的检验过程中分配的特定状态推断得出。 捕获 根据退货单据项目上设置的拒绝原因或特定的“已拒绝”状态推断得出。 事件类型 inferred | |||
| 退货订单已批准 | 表示退货订单已获得正式批准或释放,可进入下一阶段。这通常通过销售单据抬头或行项目的状态更改来推断,表明其已解除所有冻结。 | ||
| 为何重要 审批步骤可能是延迟的主要来源。追踪此活动有助于识别退货流程初始授权阶段的瓶颈。 获取方式 直接从 VBAK 或 VBAP 表中的状态管理表或状态字段推断得出。发布状态的变更或交货冻结 (VBAP-LIFSP) 的移除均可表示审批通过。 捕获 根据退货单头或项目状态字段中表示发布或审批的变更推断得出。 事件类型 inferred | |||
提取指南
步骤
- 验证先决条件:确保执行提取的用户账号在 SAP S/4HANA 中拥有访问所需核心数据服务 (CDS) 视图的权限。关键视图包括 I_SalesDocument、I_SalesDocumentItem、I_SDDocumentFlow、I_DeliveryDocument、I_MaterialDocumentHeader、I_BillingDocument、I_JournalEntry 和 I_ClearedItem。
- 访问查询工具:登录您首选的 SQL 客户端或已建立 SAP S/4HANA 数据库连接的数据集成工具。这可以是 SAP 自家工具(如 SAP Analytics Cloud)或第三方 ETL 平台。
- 设置查询参数:在执行前,必须修改提供的 SQL 查询。找到占位符并替换为适合您环境的正确参数。这包括设置
[Start Date]、[End Date]、[Your Source System ID]、[Your Return Order Type]以及其他单据类型或公司代码过滤器。 - 执行提取查询:复制完整的 SQL 查询并在工具中执行。该查询旨在通过联合 (UNION) 多个选择语句的结果,将所有指定的活动收集到单个数据集中。
- 理解查询逻辑:
UNION ALL结构中的每个SELECT块负责提取一个特定活动。它通过关联多个 CDS 视图来收集所需属性,分配固定的ActivityName字符串,并选择相关的EventTime时间戳。 - 审查原始数据:查询完成后,对输出进行简要审查。检查行数是否合理,并确保
ReturnCaseId、ActivityName和EventTime等关键列已按预期填充。 - 数据转换:查询结构已设计为生成扁平化的事件日志格式。通常不需要进行重大的结构转换,但您可能需要根据目标系统的要求调整时间戳格式或数据类型。
- 导出事件日志:将查询结果集导出为 CSV 文件。确保文件使用 UTF-8 编码以防止字符问题(特别是用户名或产品描述)。
- 上传至流程挖掘工具:生成的 CSV 文件现在可以上传到您的流程挖掘平台(如 ProcessMind)。将文件中的列映射到工具中的对应字段,例如将
ReturnCaseId映射到 Case ID,ActivityName映射到 Activity,EventTime映射到 Timestamp。
配置
- 先决条件:执行用户需要拥有销售单据 (VBAK)、交货 (LIKP)、开票 (VBRK) 和会计 (BSEG, BKPF) 相关对象的显示权限。访问底层 CDS 视图也至关重要。
- 数据范围筛选:必须针对特定单据类型过滤查询,以分离出退货流程。请配置退货订单类型(如 'RE')、贷项凭证请求类型(如 'G2')和换货订单类型(如 'SO')的占位符。强烈建议按
CompanyCode或SalesOrganization进行过滤,以缩小数据范围。 - 日期范围过滤:为平衡性能和数据量,请务必应用日期范围过滤器。建议先从最近 3 到 6 个月的数据开始。查询使用初始退货订单的创建日期 (
I_SalesDocument.CreationDate) 作为主要过滤条件。 - 性能注意事项:这是一个关联了多个大型 CDS 视图的复杂查询,在源 S/4HANA 系统上执行可能会消耗大量资源。请安排在业务非高峰时段进行提取,以尽量减少影响。对于极大数据集,请考虑采用增量加载策略。
a 查询示例 sql
WITH ReturnOrders AS (
SELECT
SalesDocument AS ReturnCaseId,
CreationDate,
CreationDateTime,
CreatedByUser,
OrderReason,
SoldToParty
FROM I_SalesDocument
WHERE SalesDocumentType = '[Your Return Order Type]' -- e.g., 'RE'
AND CreationDate BETWEEN '[Start Date]' AND '[End Date]'
AND CompanyCode = '[Your Company Code]'
)
-- 1. Return Request Initiated
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Return Request Initiated' AS "ActivityName",
RO.CreationDateTime AS "EventTime",
RO.CreationDateTime AS "EventEndTime",
RO.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM ReturnOrders RO
JOIN I_SalesDocumentItem I ON RO.ReturnCaseId = I.SalesDocument
UNION ALL
-- 2. Return Order Approved
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Order Approved' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus <> 'A' -- Not Open, implying it has been processed/approved
AND I.SDProcessStatus <> 'A'
UNION ALL
-- 3. Return Delivery Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
LH.CreationDateTime AS "EventTime",
LH.CreationDateTime AS "EventEndTime",
LH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
LI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocument AS LH ON DF.SubsequentDocument = LH.DeliveryDocument
JOIN I_DeliveryDocumentItem AS LI ON LH.DeliveryDocument = LI.DeliveryDocument
WHERE DF.PrecedingDocumentCategory = 'C' AND DF.SubsequentDocumentCategory = 'J'
UNION ALL
-- 4. Goods Received at Warehouse
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Goods Received at Warehouse' AS "ActivityName",
MH.CreationDateTime AS "EventTime",
MH.CreationDateTime AS "EventEndTime",
MH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
MI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocumentItem AS LI ON DF.SubsequentDocument = LI.DeliveryDocument AND DF.SubsequentDocumentItem = LI.DeliveryDocumentItem
JOIN I_MaterialDocumentItem AS MI ON LI.DeliveryDocument = MI.DeliveryDocument AND LI.DeliveryDocumentItem = MI.DeliveryDocumentItem
JOIN I_MaterialDocumentHeader AS MH ON MI.MaterialDocument = MH.MaterialDocument AND MI.MaterialDocumentYear = MH.MaterialDocumentYear
WHERE DF.SubsequentDocumentCategory = 'J' AND MH.GoodsMovementType = '[Your Return Goods Receipt MVT]' -- e.g., '651', '653'
UNION ALL
-- 5. Item Inspection Completed
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Item Inspection Completed' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.ReturnsInspectionStatus = '4' -- 'Inspection Completed', adjust value based on your config
UNION ALL
-- 6. Return Rejected
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Return Rejected' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.SalesDocumentItemRejectionReason <> ''
UNION ALL
-- 7. Credit Memo Request Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
CM_REQ.CreationDateTime AS "EventTime",
CM_REQ.CreationDateTime AS "EventEndTime",
CM_REQ.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument
JOIN I_SalesDocumentItem I ON CM_REQ.SalesDocument = I.SalesDocument
WHERE CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]' -- e.g., 'CR'
UNION ALL
-- 8. Exchange Order Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Exchange Order Created' AS "ActivityName",
EX_ORD.CreationDateTime AS "EventTime",
EX_ORD.CreationDateTime AS "EventEndTime",
EX_ORD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS EX_ORD ON DF.SubsequentDocument = EX_ORD.SalesDocument
JOIN I_SalesDocumentItem I ON EX_ORD.SalesDocument = I.SalesDocument
WHERE EX_ORD.SalesDocumentType = '[Your Exchange Order Type]' -- e.g., 'OR'
UNION ALL
-- 9. Credit Memo Created
SELECT
DF_CM.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
BD.CreationDateTime AS "EventTime",
BD.CreationDateTime AS "EventEndTime",
BD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
BD.TotalNetAmount AS "RefundAmount",
BDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow AS DF_CM ON CM_REQ.SalesDocument = DF_CM.PrecedingDocument
JOIN I_BillingDocument AS BD ON DF_CM.SubsequentDocument = BD.BillingDocument
JOIN I_BillingDocumentItem AS BDI ON BD.BillingDocument = BDI.BillingDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE DF.PrecedingDocumentCategory = 'C'
UNION ALL
-- 10. Accounting Document Created
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Accounting Document Created' AS "ActivityName",
JE.CreationDateTime AS "EventTime",
JE.CreationDateTime AS "EventEndTime",
JE.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
JE.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_JournalEntry AS JE
JOIN I_JournalEntryItem JRI ON JE.AccountingDocument = JRI.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK'
UNION ALL
-- 11. Refund Processed
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Refund Processed' AS "ActivityName",
CI.ClearingDate AS "EventTime",
CI.ClearingDate AS "EventEndTime",
CI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CI.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_ClearedItem AS CI
JOIN I_JournalEntryItem JRI ON CI.AccountingDocument = JRI.AccountingDocument AND CI.FiscalYear = JRI.FiscalYear AND CI.LedgerGLLineItem = JRI.LedgerGLLineItem
JOIN I_JournalEntry JE ON JRI.AccountingDocument = JE.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK' AND CI.ClearingDate IS NOT NULL
UNION ALL
-- 12. Return Case Closed
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Case Closed' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus = 'C' -- 'Completed' 步骤
- 验证先决条件:确保执行提取的用户账号在 SAP S/4HANA 中拥有访问所需核心数据服务 (CDS) 视图的权限。关键视图包括 I_SalesDocument、I_SalesDocumentItem、I_SDDocumentFlow、I_DeliveryDocument、I_MaterialDocumentHeader、I_BillingDocument、I_JournalEntry 和 I_ClearedItem。
- 访问查询工具:登录您首选的 SQL 客户端或已建立 SAP S/4HANA 数据库连接的数据集成工具。这可以是 SAP 自家工具(如 SAP Analytics Cloud)或第三方 ETL 平台。
- 设置查询参数:在执行前,必须修改提供的 SQL 查询。找到占位符并替换为适合您环境的正确参数。这包括设置
[Start Date]、[End Date]、[Your Source System ID]、[Your Return Order Type]以及其他单据类型或公司代码过滤器。 - 执行提取查询:复制完整的 SQL 查询并在工具中执行。该查询旨在通过联合 (UNION) 多个选择语句的结果,将所有指定的活动收集到单个数据集中。
- 理解查询逻辑:
UNION ALL结构中的每个SELECT块负责提取一个特定活动。它通过关联多个 CDS 视图来收集所需属性,分配固定的ActivityName字符串,并选择相关的EventTime时间戳。 - 审查原始数据:查询完成后,对输出进行简要审查。检查行数是否合理,并确保
ReturnCaseId、ActivityName和EventTime等关键列已按预期填充。 - 数据转换:查询结构已设计为生成扁平化的事件日志格式。通常不需要进行重大的结构转换,但您可能需要根据目标系统的要求调整时间戳格式或数据类型。
- 导出事件日志:将查询结果集导出为 CSV 文件。确保文件使用 UTF-8 编码以防止字符问题(特别是用户名或产品描述)。
- 上传至流程挖掘工具:生成的 CSV 文件现在可以上传到您的流程挖掘平台(如 ProcessMind)。将文件中的列映射到工具中的对应字段,例如将
ReturnCaseId映射到 Case ID,ActivityName映射到 Activity,EventTime映射到 Timestamp。
配置
- 先决条件:执行用户需要拥有销售单据 (VBAK)、交货 (LIKP)、开票 (VBRK) 和会计 (BSEG, BKPF) 相关对象的显示权限。访问底层 CDS 视图也至关重要。
- 数据范围筛选:必须针对特定单据类型过滤查询,以分离出退货流程。请配置退货订单类型(如 'RE')、贷项凭证请求类型(如 'G2')和换货订单类型(如 'SO')的占位符。强烈建议按
CompanyCode或SalesOrganization进行过滤,以缩小数据范围。 - 日期范围过滤:为平衡性能和数据量,请务必应用日期范围过滤器。建议先从最近 3 到 6 个月的数据开始。查询使用初始退货订单的创建日期 (
I_SalesDocument.CreationDate) 作为主要过滤条件。 - 性能注意事项:这是一个关联了多个大型 CDS 视图的复杂查询,在源 S/4HANA 系统上执行可能会消耗大量资源。请安排在业务非高峰时段进行提取,以尽量减少影响。对于极大数据集,请考虑采用增量加载策略。
a 查询示例 sql
WITH ReturnOrders AS (
SELECT
SalesDocument AS ReturnCaseId,
CreationDate,
CreationDateTime,
CreatedByUser,
OrderReason,
SoldToParty
FROM I_SalesDocument
WHERE SalesDocumentType = '[Your Return Order Type]' -- e.g., 'RE'
AND CreationDate BETWEEN '[Start Date]' AND '[End Date]'
AND CompanyCode = '[Your Company Code]'
)
-- 1. Return Request Initiated
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Return Request Initiated' AS "ActivityName",
RO.CreationDateTime AS "EventTime",
RO.CreationDateTime AS "EventEndTime",
RO.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM ReturnOrders RO
JOIN I_SalesDocumentItem I ON RO.ReturnCaseId = I.SalesDocument
UNION ALL
-- 2. Return Order Approved
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Order Approved' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus <> 'A' -- Not Open, implying it has been processed/approved
AND I.SDProcessStatus <> 'A'
UNION ALL
-- 3. Return Delivery Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Return Delivery Created' AS "ActivityName",
LH.CreationDateTime AS "EventTime",
LH.CreationDateTime AS "EventEndTime",
LH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
LI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocument AS LH ON DF.SubsequentDocument = LH.DeliveryDocument
JOIN I_DeliveryDocumentItem AS LI ON LH.DeliveryDocument = LI.DeliveryDocument
WHERE DF.PrecedingDocumentCategory = 'C' AND DF.SubsequentDocumentCategory = 'J'
UNION ALL
-- 4. Goods Received at Warehouse
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Goods Received at Warehouse' AS "ActivityName",
MH.CreationDateTime AS "EventTime",
MH.CreationDateTime AS "EventEndTime",
MH.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
MI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_DeliveryDocumentItem AS LI ON DF.SubsequentDocument = LI.DeliveryDocument AND DF.SubsequentDocumentItem = LI.DeliveryDocumentItem
JOIN I_MaterialDocumentItem AS MI ON LI.DeliveryDocument = MI.DeliveryDocument AND LI.DeliveryDocumentItem = MI.DeliveryDocumentItem
JOIN I_MaterialDocumentHeader AS MH ON MI.MaterialDocument = MH.MaterialDocument AND MI.MaterialDocumentYear = MH.MaterialDocumentYear
WHERE DF.SubsequentDocumentCategory = 'J' AND MH.GoodsMovementType = '[Your Return Goods Receipt MVT]' -- e.g., '651', '653'
UNION ALL
-- 5. Item Inspection Completed
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Item Inspection Completed' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.ReturnsInspectionStatus = '4' -- 'Inspection Completed', adjust value based on your config
UNION ALL
-- 6. Return Rejected
SELECT
SDI.SalesDocument AS "ReturnCaseId",
'Return Rejected' AS "ActivityName",
SDI.LastChangeDateTime AS "EventTime",
SDI.LastChangeDateTime AS "EventEndTime",
SDI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
SDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocumentItem AS SDI
JOIN ReturnOrders RO ON SDI.SalesDocument = RO.ReturnCaseId
WHERE SDI.SalesDocumentItemRejectionReason <> ''
UNION ALL
-- 7. Credit Memo Request Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Request Created' AS "ActivityName",
CM_REQ.CreationDateTime AS "EventTime",
CM_REQ.CreationDateTime AS "EventEndTime",
CM_REQ.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument
JOIN I_SalesDocumentItem I ON CM_REQ.SalesDocument = I.SalesDocument
WHERE CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]' -- e.g., 'CR'
UNION ALL
-- 8. Exchange Order Created
SELECT
DF.PrecedingDocument AS "ReturnCaseId",
'Exchange Order Created' AS "ActivityName",
EX_ORD.CreationDateTime AS "EventTime",
EX_ORD.CreationDateTime AS "EventEndTime",
EX_ORD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
JOIN I_SalesDocument AS EX_ORD ON DF.SubsequentDocument = EX_ORD.SalesDocument
JOIN I_SalesDocumentItem I ON EX_ORD.SalesDocument = I.SalesDocument
WHERE EX_ORD.SalesDocumentType = '[Your Exchange Order Type]' -- e.g., 'OR'
UNION ALL
-- 9. Credit Memo Created
SELECT
DF_CM.PrecedingDocument AS "ReturnCaseId",
'Credit Memo Created' AS "ActivityName",
BD.CreationDateTime AS "EventTime",
BD.CreationDateTime AS "EventEndTime",
BD.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
BD.TotalNetAmount AS "RefundAmount",
BDI.Material AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SDDocumentFlow AS DF
JOIN I_SalesDocument AS CM_REQ ON DF.SubsequentDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow AS DF_CM ON CM_REQ.SalesDocument = DF_CM.PrecedingDocument
JOIN I_BillingDocument AS BD ON DF_CM.SubsequentDocument = BD.BillingDocument
JOIN I_BillingDocumentItem AS BDI ON BD.BillingDocument = BDI.BillingDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE DF.PrecedingDocumentCategory = 'C'
UNION ALL
-- 10. Accounting Document Created
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Accounting Document Created' AS "ActivityName",
JE.CreationDateTime AS "EventTime",
JE.CreationDateTime AS "EventEndTime",
JE.CreatedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
JE.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_JournalEntry AS JE
JOIN I_JournalEntryItem JRI ON JE.AccountingDocument = JRI.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK'
UNION ALL
-- 11. Refund Processed
SELECT
RO.ReturnCaseId AS "ReturnCaseId",
'Refund Processed' AS "ActivityName",
CI.ClearingDate AS "EventTime",
CI.ClearingDate AS "EventEndTime",
CI.LastChangedByUser AS "UserName",
RO.OrderReason AS "ReturnReason",
CI.AmountInCompanyCodeCurrency AS "RefundAmount",
JRI.ProductName AS "ProductId",
RO.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_ClearedItem AS CI
JOIN I_JournalEntryItem JRI ON CI.AccountingDocument = JRI.AccountingDocument AND CI.FiscalYear = JRI.FiscalYear AND CI.LedgerGLLineItem = JRI.LedgerGLLineItem
JOIN I_JournalEntry JE ON JRI.AccountingDocument = JE.AccountingDocument
JOIN I_BillingDocument BD ON JE.ReferenceDocument = BD.BillingDocument
JOIN I_SDDocumentFlow DF_CM ON BD.BillingDocument = DF_CM.SubsequentDocument
JOIN I_SalesDocument CM_REQ ON DF_CM.PrecedingDocument = CM_REQ.SalesDocument AND CM_REQ.SalesDocumentType = '[Your Credit Memo Request Type]'
JOIN I_SDDocumentFlow DF ON CM_REQ.SalesDocument = DF.SubsequentDocument
JOIN ReturnOrders RO ON DF.PrecedingDocument = RO.ReturnCaseId
WHERE JE.OriginalReferenceDocumentType = 'VBRK' AND CI.ClearingDate IS NOT NULL
UNION ALL
-- 12. Return Case Closed
SELECT
SD.SalesDocument AS "ReturnCaseId",
'Return Case Closed' AS "ActivityName",
SD.LastChangeDateTime AS "EventTime",
SD.LastChangeDateTime AS "EventEndTime",
SD.LastChangedByUser AS "UserName",
SD.OrderReason AS "ReturnReason",
CAST(NULL AS DECIMAL(17, 2)) AS "RefundAmount",
I.Material AS "ProductId",
SD.SoldToParty AS "CustomerId",
'[Your Source System ID]' AS "SourceSystemId",
CURRENT_UTCTIMESTAMP AS "LastDataUpdateTimestamp"
FROM I_SalesDocument AS SD
JOIN ReturnOrders RO ON SD.SalesDocument = RO.ReturnCaseId
JOIN I_SalesDocumentItem I ON SD.SalesDocument = I.SalesDocument
WHERE SD.OverallSDProcessStatus = 'C' -- 'Completed'