退货与退款处理数据模板
退货与退款处理数据模板
- 建议收集的属性
- 需要跟踪的关键活动
- 数据提取指南
退货与退款处理属性
| 名称 | 说明 | ||
|---|---|---|---|
| 事件时间 EventTime | 表示特定活动发生时间的精确时间戳。 | ||
| 说明 事件时间记录业务事件在系统中的日期和时间。此时间戳对于按时间顺序排列活动及开展各类时间分析至关重要。 在流程挖掘中,此属性用于计算活动之间的周期时间、确定每个步骤的耗时,以及分析流程绩效随时间的变化。它是发现瓶颈、监控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 | 表示此事件数据上次刷新或提取时间的时间戳。 | ||
| 说明 此属性记录上次提取或更新数据的日期和时间,提供所分析数据集时效性的元数据。 了解数据更新时间对于判断流程挖掘分析是否及时至关重要。用户可以查看数据的时效性,这对于监控正在进行的案例的运营仪表板尤为重要。 重要性 此属性反映数据的时效性,对于确保分析和仪表板使用最新信息至关重要。 获取途径 通常由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 - 发错商品 | |||
| 商品检验结果 ItemInspectionOutcome | 退回商品的实物检验结果。 | ||
| 说明 此属性记录商品送达仓库后进行检验的结果。常见结果包括“已接收-可再次销售”“已拒收-商品损坏”或“已接收-待翻新”。 此数据为后续流程步骤提供重要背景信息,并决定退款是全额、部分还是不予退款。分析检验结果有助于找出拒收原因;如果商品经常在运输途中损坏,还可为改进包装或评估运输合作伙伴提供依据。 重要性 说明退款获批或被拒的决策依据,提供有关商品状态和退款调整原因的重要数据。 获取途径 此信息可能记录在质量管理模块(QM)的检验批次中,也可能作为状态或原因代码记录在退货交货单行项目(LIPS)中,还可能存储在自定义字段中。 示例 已接收-可再次销售已接收-待翻新已拒收-客户造成的损坏已拒收-退回商品有误 | |||
| 处理人员 ProcessingAgent | 负责处理手动活动的具体人员或资源组。 | ||
| 说明 此属性用于标识执行特定任务的人员或团队。在共享服务环境中,它可以指明具体角色或团队,比“用户名”更精确。 此属性有助于通过“退款审批效率”仪表板分析不同人员或团队的表现,了解工作量分配、发现培训需求,并识别表现突出的个人或团队,以便分享最佳实践。 重要性 支持按人员或团队分析绩效,帮助管理工作量、发现培训机会并提升效率。 获取途径 如果已为处理人员分配SAP业务伙伴功能,可从中获取此信息;也可以根据用户在HR组织架构中的部门或角色推导得出。 示例 一级支持仓库检验团队财务部-应付账款 | |||
| 是否自动执行 IsAutomated | 用于标记活动由系统还是人工执行。 | ||
| 说明 此布尔属性用于区分系统自动执行的活动(例如工作流或后台作业)与用户手动执行的活动。 此属性是计算“退款审批自动化率”KPI和发现自动化机会的关键依据。筛选手动任务后,企业可以将流程改进工作聚焦于自动化最能提升速度、降低成本和提高准确性的环节。 重要性 区分手动任务与自动化任务,这对于发现自动化机会和衡量数字化转型成效至关重要。 获取途径 通常根据用户名推导得出。例如,如果用户是“WF_BATCH”或其他系统ID,则将该活动标记为自动执行。 示例 truefalse | |||
| 是否返工 IsRework | 用于标记案例中的活动是否重复执行。 | ||
| 说明 此计算所得的布尔属性用于识别返工,即同一案例中的某项活动被执行多次。例如,商品检验需要重复进行,或贷项凭证创建后被取消,随后又重新创建。 此属性是“退款处理返工分析”仪表板和“退款返工率”KPI的重要依据。它通过标记容易出错或需要多次尝试的活动,量化流程低效问题,并指出需要加强控制或培训的环节。 重要性 标记重复工作,揭示流程低效和错误,帮助有针对性地改进,减少浪费和延误。 获取途径 此标记通常由流程挖掘工具计算,也可以在数据转换时预先计算。它会检查同一活动名称是否已在同一案例中出现。 示例 truefalse | |||
| 申请退款金额 RequestedRefundAmount | 流程开始时申请或预期的退款金额。 | ||
| 说明 此属性记录初始退货申请中所列商品的金额,作为与最终退款金额比较的基准。 “退款金额差异分析”仪表板需要此字段。将申请金额与实际退款金额进行比较,有助于发现商品损坏导致部分退款、补货费或其他调整等问题,确保财务数据准确透明。 重要性 作为衡量退款准确率的基准,帮助识别并分析预期退款金额与实际退款金额之间的差异。 获取途径 通常取自原始退货销售订单中商品的净值,即VBAP表对应行项目中的净值(NETWR)。 示例 125.501050.0049.99 | |||
| 贷项凭证编号 CreditMemoNumber | 用于标识授权退款的贷项凭证的唯一编号。 | ||
| 说明 贷项凭证是正式的开票凭证,用于将退货商品对应的金额记入客户账户。此属性是该财务凭证的唯一编号。 跟踪贷项凭证编号对于分析退货流程中的财务结算环节至关重要。它标志着一个重要节点,通常会触发实际退款,也是财务对账和审计所必需的信息。 重要性 此属性代表退款对应的正式财务交易,对于跟踪流程最后阶段和开展财务审计至关重要。 获取途径 这是开票凭证抬头表VBRK中的开票凭证编号(VBELN),其中凭证类别表明该凭证为贷项凭证。 示例 900003459000034690000347 | |||
| 退款SLA目标日期 RefundSlaTargetDate | 退货案例应完成退款处理的目标日期。 | ||
| 说明 此属性用于定义退款处理的服务级别协议(SLA)截止日期。通常根据业务规则计算,例如在退货获批或收到商品后的指定天数。 此字段是“退款SLA达标情况监控”仪表板及相关KPI的依据。借助此字段,您可以主动跟踪可能违反SLA的案例,分析延误的根本原因,最终提升客户满意度。 重要性 为衡量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标准字段,可能需要根据商品类型、客户和销售日期等数据,按照业务逻辑推导得出。如果已实施,也可以存储在自定义字段中。 示例 标准-30天电子产品-90天保修最终销售-有缺陷 | |||
| 退货订单状态 ReturnOrderStatus | 退货案例当前的整体状态。 | ||
| 说明 此属性用于显示退货案例在任一时点的总体状态,例如“未处理”“处理中”或“已关闭”。通常根据最近完成的主要里程碑推导得出。 此属性是“当前退货案例状态仪表板”的重要依据,可用于查看当前工作量和案例分布。管理者可以了解各流程阶段的案例数量,从而更合理地分配资源和管理工作量。 重要性 概览每个案例当前所处的流程阶段,是跟踪当前工作量和状态的运营仪表板的重要依据。 获取途径 根据相关单据中的状态字段推导得出。例如,相关销售订单(VBUK/VBUP)或交货单中的抬头状态(GBSTK)或行项目状态(LFSTK)。 示例 等待收货等待检验等待退款已关闭 | |||
| 遵循退货政策 ReturnPolicyAdherence | 用于标记退货案例是否符合既定退货政策。 | ||
| 说明 此计算所得的布尔属性用于判断退货是否符合适用政策的标准。例如,可检查退货是否在允许期限内发起,或退货原因是否适用于该商品。 此属性直接支持“退货政策一致性概览”仪表板。它可以量化政策遵循率,并支持逐级下钻查看不符合政策的案例及其偏差原因,帮助更有效地落实政策。 重要性 量化业务规则的遵循情况,帮助发现并减少可能影响盈利能力或引发流程例外的政策违规。 获取途径 根据业务规则计算。例如:(退货发起日期-原始购买日期)≤[允许退货天数]。计算需要原始购买日期和政策规则。 示例 truefalse | |||
| 销售组织 SalesOrganization | 负责原始销售和退货的组织单位。 | ||
| 说明 销售组织是SAP中的重要组织结构要素,代表负责产品和服务销售与分销的单位,并分配给退货交易。 此属性可用于筛选和比较不同业务单元、地区或部门的退货流程,帮助识别哪些销售组织的退货率较高,或退货处理效率较低,为组织绩效分析提供依据。 重要性 此属性可用于比较不同业务单元、地区或销售渠道的退货流程绩效和退货率。 获取途径 可在退货订单抬头表VBAK的销售组织字段(VKORG)中找到。 示例 10002100US01 | |||
退货与退款处理活动
| 活动 | 说明 | ||
|---|---|---|---|
| 仓库已收货 | 此事件标志着退货商品已实际送达仓库或处理中心。针对退货交货单执行收货过账(PGR)并生成物料凭证时,系统会明确记录此事件。 | ||
| 重要性 这是重要节点,标志着检验和商品处理计时开始。此前的延误由客户因素导致,此后的延误则属于内部因素。 获取途径 根据物料凭证表MSEG和MKPF中与退货相关的收货移动类型记录获取。过账日期(MKPF-BUDAT)表示事件发生时间。 采集 此事件对应于退货交货单的收货过账。 事件类型 explicit | |||
| 发起退货申请 | 这是退货流程的起点,系统会在此正式创建退货订单。在SAP S/4HANA中,保存新的退货订单类型销售凭证时,系统会明确记录此事件。 | ||
| 重要性 此活动标志着退货案例生命周期正式开始。分析从该事件到结案所需的时间,对于衡量整体退货周期时间和客户体验至关重要。 获取途径 这是从VBAK表中创建销售凭证时明确记录的事件,其中凭证类别(VBAK-VBTYP)表明该凭证为退货订单。创建时间戳为VBAK-ERDAT。 采集 保存新的退货销售订单时记录此事件,例如使用事务代码VA01。 事件类型 explicit | |||
| 商品检验已完成 | 表示已完成对退货商品的质量和状况评估。在高级退货管理中,这通常是一个明确记录检验结果并确定后续处理方式(如退款或报废)的步骤。 | ||
| 重要性 检验所需时间和结果会直接影响退款处理时间及库存管理。分析此活动对于评估检验效率和返工情况至关重要。 获取途径 在SAP高级退货管理(ARM)中,可从检验事务中获取明确记录的事件;也可根据退货订单项目状态的变化推断检验结果。 采集 根据ARM中与后续物流处理活动相关的事务日志或状态变化获取。 事件类型 explicit | |||
| 已创建贷项凭证 | 这是正式的开票凭证,用于将退货商品对应的金额记入客户账户。根据贷项凭证申请生成贷项凭证时,系统会明确记录此事件。 | ||
| 重要性 贷项凭证的创建是重要的财务节点。它确认退款金额,并授权启动付款流程。 获取途径 根据VBRK表中凭证类别表明为贷项凭证的开票凭证创建记录获取。该凭证通过VBFA表关联到贷项凭证申请。 采集 保存新的贷项开票凭证时记录此事件,例如使用事务代码VF01。 事件类型 explicit | |||
| 已创建贷项凭证申请 | 检验通过后,此活动表示已创建向客户开具贷项的申请。系统会创建新的销售凭证,即贷项凭证申请,并将其关联到原退货订单。 | ||
| 重要性 这是退货流程中财务结算环节的起点。分析从检验到此步骤所需的时间,有助于了解物流向财务交接的效率。 获取途径 根据VBAK表中贷项凭证申请类别销售凭证的创建记录获取。该申请通过凭证流表VBFA关联到退货订单。 采集 保存新的贷项凭证申请凭证时记录此事件。 事件类型 explicit | |||
| 退款已处理 | 此活动标志着退款流程的最后一步:财务贷项已清账,表示款项已支付给客户。可根据财务模块中清账凭证的创建情况推断此事件,该凭证用于结清客户账户上的未清贷项。 | ||
| 重要性 此时客户实际收到款项。从发起退货到完成此步骤所需的时间,会显著影响客户满意度,也是衡量SLA达成情况的关键指标。 获取途径 可根据财务会计行项目表BSEG中的清账凭证信息推断此事件。与贷项凭证关联的客户行项目,其清账日期(BSEG-AUGDT)表示退款处理时间。 采集 可根据贷项凭证对应会计凭证中的清账日期字段是否已填写推断此事件。 事件类型 inferred | |||
| 退货案例已结案 | 这是最后一个活动,表示退货流程已完成,预计不会再对该案例采取后续操作。通常可根据系统中退货订单凭证已达到最终关闭状态推断此事件。 | ||
| 重要性 此事件标志着流程生命周期结束,可据此计算端到端总周期时间,并确认案例已彻底解决。 获取途径 可根据VBAK表中退货订单的整体状态,或VBAP表中订单项目的状态是否达到“已完成”或“已关闭”推断此事件。具体状态由系统的状态管理配置决定。 采集 可根据退货订单凭证状态变为“已完成”推断此事件。 事件类型 inferred | |||
| 已创建会计凭证 | 贷项凭证成功过账到财务会计模块时,会发生此事件。系统会在总账中生成相应分录,从会计角度正式确认该贷项。 | ||
| 重要性 此活动确认贷项已记入财务系统。贷项凭证创建到会计过账之间的时间,有助于发现开票与财务系统之间的接口问题。 获取途径 根据会计表BKPF中凭证抬头的创建记录获取,该记录通过VBRK中的贷项凭证(VBRK-BELNR)关联。 采集 开票凭证成功过账到财务会计时记录此事件。 事件类型 explicit | |||
| 已创建换货订单 | 此活动表示一种替代处理方式:不退款,而是创建新的销售订单,为客户寄送替换商品。创建引用原退货订单的新销售订单时,会记录此事件。 | ||
| 重要性 此活动有助于区分退款退货和换货退货,两者的流程路径和客户结果各不相同,是分析流程变体的关键。 获取途径 根据VBAK中新销售凭证的创建记录获取,该凭证通过凭证流表VBFA关联到退货订单。 采集 保存指定为替换商品的新销售订单凭证时记录此事件。 事件类型 explicit | |||
| 已创建退货交货单 | 此活动表示已创建入库交货单,用于管理退货商品的实物接收。系统会在创建引用退货订单的交货单时明确记录此事件。 | ||
| 重要性 这是重要的物流节点。退货获批到交货单创建之间的时间,反映了向仓库或收货部门传递退货信息的效率。 获取途径 根据LIKP表中交货单抬头的创建记录获取,并通过凭证流表VBFA关联到前序退货订单。 采集 保存新的退货交货单时记录此事件,例如使用事务代码VL01N。 事件类型 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查询,并在工具中执行。该查询通过合并多个SELECT语句的结果,将所有指定活动汇总到一个数据集中。
- 了解查询逻辑:
UNION ALL结构中的每个SELECT区块负责提取一项特定活动。查询会关联多个CDS视图以获取所需属性,为ActivityName指定固定字符串,并选取相关时间戳作为EventTime。 - 检查原始数据:查询完成后,简要检查输出结果。确认行数合理,并检查
ReturnCaseId、ActivityName和EventTime等关键列是否已按预期填充。 - 转换数据:查询会生成扁平化的事件日志格式,通常无需进行大幅结构调整。不过,根据目标系统的要求,您可能需要调整时间戳格式或数据类型。
- 导出事件日志:将查询结果导出为CSV文件。请使用UTF-8编码,避免用户名或产品说明等内容出现字符问题。
- 上传到流程挖掘工具:生成的CSV文件可上传到ProcessMind等流程挖掘平台。将文件中的列映射到工具中的对应字段,例如将
ReturnCaseId映射到案例ID,将ActivityName映射到活动,将EventTime映射到时间戳。
配置
- 前提条件:执行查询的用户需要拥有销售单据(VBAK)、交货(LIKP)、开票(VBRK)和会计(BSEG、BKPF)相关对象的显示授权。必须能够访问底层CDS视图。
- 数据范围筛选:必须按特定单据类型筛选查询,以单独提取退货流程。请设置退货订单类型(例如'Re')、贷项凭证申请类型(例如'G2')和换货订单类型(例如'SO')等占位值。强烈建议同时按
CompanyCode或SalesOrganization筛选,以限制数据范围。 - 日期范围筛选:为控制性能和数据量,请始终设置日期范围。建议先提取最近3至6个月的数据。查询以初始退货订单的创建日期(
I_SalesDocument.CreationDate)作为主要筛选条件。 - 性能注意事项:此查询会关联多个大型CDS视图,可能占用大量源S/4HANA系统资源。建议在业务低峰时段安排提取,以尽量减少影响。对于超大型数据集,可考虑采用增量加载策略。
查询示例 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 HANA架构。具体架构、视图和字段名称因SAP S/4HANA部署而异,请将每个方括号占位符替换为系统中配置的对象和字段。
- 使用[Start date]、[End date]、[Company Code filter]和[Return document type filter]定义提取范围。首次提取建议使用三至六个月的滚动周期;确认性能和数据完整性后,再延长时间范围。
- 从[Your sales document header table]和[Your sales document item table]中识别退货订单。仅保留[Your return order document type configuration]中配置的退货订单类型。保留退货订单号和项目编号,以便与后续单据关联。
- 使用[Your document flow table or view]解析退货订单与退货入库交货、贷项凭证申请、换货订单及贷项凭证之间的单据流。不要假设单据流存储在VBAK或VBAP中。请根据系统采用的单据流模型配置关联字段。
- 从相关单据的抬头和项目记录中提取明确的创建事件。从已配置的状态、检验、物料凭证、会计和清账数据源中提取审批、拒绝、检验、关闭、收货、会计处理和清账事件。每项活动都必须单独生成一行事件,因为ProcessMind不会推断事件。
- 将时间戳统一为一致的数据库时间戳类型和时区。根据每项活动配置的事件时间戳优先级选取时间。如果数据仅包含日期和时间,请使用[Your system time zone]中配置的系统时区将两者合并。
- 为每个事件填充ReturnCaseId。使用原始退货订单号;如果高级退货管理单独存储案例键,则使用配置的退货案例标识。无法关联到退货案例的事件必须排除,或放入异常输出以便后续处理。
- 填充必需列ReturnCaseId、ActivityName、EventTime、SourceSystemId和LastDataUpdateTimestamp。数据可用时,也请填充建议列,包括EventEndTime、UserName、ReturnReason、RefundAmount、ProductId和CustomerId。每次活动发生都保留一行,不要将活动汇总为单个案例行。
- 根据validationSteps中的检查项验证结果。确认12个活动名称均已出现、每个案例中的时间戳顺序合理,并核对单据引用与源表数据是否一致。
- 将结果导出为UTF-8编码的CSV文件或其他ProcessMind支持的表格格式。保留准确的列名,仅使用一行表头,时间戳采用明确无歧义的ISO格式;上传事件日志时,将ReturnCaseId设为案例标识,将ActivityName设为活动列。
配置
- 日期范围:先提取三至六个月的数据。使用[Start date]和[End date]参数,并纳入足够的历史数据,以涵盖在所选期间之前启动、但在期间内完成的案例。
- 退货范围:根据[Your return order document type configuration]中配置的退货订单类型进行筛选。除非已在目标系统中确认,否则不要将单据类型写死在查询中。
- 组织筛选条件:仅在需要时应用[Company Code filter]、销售组织、分销渠道、部门、工厂或客户筛选条件。确认这些条件不会排除跨公司或公司间的后续单据。
- 源对象:将[Your table name]和[Your view name]占位符替换为已批准使用的SAP S/4HANA表或CDS视图。部署环境可能提供VBAK、VBAP、VBRK和VBRP,但执行前必须确认其适用性及扩展情况。
- 时间戳处理:为每项活动配置源时间戳字段和时区。EventTime和EventEndTime应采用一致的存储方式,建议使用UTC或双方约定的ProcessMind时区。
- 状态解释:配置系统中代表审批、拒绝、检验完成和案例关闭的确切状态值、原因代码、检验结果和关闭标记。
- 源系统标识:将[Source system identifier]替换为稳定的值,例如提取平台使用的SAP系统标识。
- 刷新时间戳:将[Extraction timestamp]替换为查询开始运行的时间戳或源数据快照的创建时间。除非需要逐行刷新时间戳,否则同一次提取中的所有行应使用相同值。
- 性能:在关联大型单据流、会计、物料凭证和状态数据源之前,先限制退货数据范围。使用索引字段或可用于分区裁剪的字段,避免无条件扫描;只有经数据库管理员批准后,才物化中间结果。
- 增量提取:定期运行时,使用[Last successful extraction timestamp]并设置受控的重叠时间窗口,以捕获延迟更新。根据ReturnCaseId、ActivityName、源单据键和EventTime去重。
- 授权和前提条件:获取对所有已配置源对象和字段的读取授权、直接访问数据库的批准,并确认所需SAP组件及高级退货管理功能(如适用)已启用。
- 数据保护:仅保留必要的客户和财务字段,遵循组织的隐私控制要求,并妥善保护导出的文件。
查询示例 sql
WITH
parameters AS (
SELECT
CAST('[Start date]' AS TIMESTAMP) AS start_ts,
CAST('[End date]' AS TIMESTAMP) AS end_ts,
CAST('[Extraction timestamp]' AS TIMESTAMP) AS extraction_ts,
CAST('[Source system identifier]' AS NVARCHAR(100)) AS source_system_id
FROM DUMMY
),
return_orders AS (
SELECT
h.[Return order number] AS return_case_id,
i.[Return order item number] AS return_item_id,
h.[Return order creation timestamp] AS return_created_ts,
h.[Return order creator] AS return_creator,
h.[Customer number] AS customer_id,
i.[Product number] AS product_id,
i.[Return reason] AS return_reason,
i.[Return order quantity] AS return_quantity,
h.[Company code] AS company_code,
h.[Return order document type] AS return_document_type
FROM [Your sales document header table] h
INNER JOIN [Your sales document item table] i
ON h.[Sales document number] = i.[Sales document number]
CROSS JOIN parameters p
WHERE h.[Return order creation timestamp] >= p.start_ts
AND h.[Return order creation timestamp] < p.end_ts
AND h.[Return order document type] IN ([Your return order document type filter])
AND h.[Company code] IN ([Company Code filter])
),
document_flow AS (
SELECT
ro.return_case_id,
ro.return_item_id,
f.[Preceding document number] AS preceding_document_id,
f.[Preceding item number] AS preceding_item_id,
f.[Subsequent document number] AS subsequent_document_id,
f.[Subsequent item number] AS subsequent_item_id,
f.[Subsequent document category] AS subsequent_document_category,
f.[Document flow creation timestamp] AS flow_created_ts
FROM return_orders ro
LEFT JOIN [Your document flow table or view] f
ON f.[Preceding document number] = ro.return_case_id
AND f.[Preceding item number] = ro.return_item_id
),
return_delivery AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS delivery_id,
df.subsequent_item_id AS delivery_item_id,
d.[Delivery creation timestamp] AS delivery_created_ts,
d.[Delivery creator] AS delivery_creator,
d.[Delivery completion timestamp] AS delivery_completed_ts
FROM document_flow df
INNER JOIN [Your delivery header table] d
ON d.[Delivery number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Inbound delivery document category]'
),
credit_memo_requests AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS credit_memo_request_id,
df.subsequent_item_id AS credit_memo_request_item_id,
c.[Credit memo request creation timestamp] AS request_created_ts,
c.[Credit memo request creator] AS request_creator
FROM document_flow df
INNER JOIN [Your credit memo request header table] c
ON c.[Credit memo request number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Credit memo request document category]'
),
exchange_orders AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS exchange_order_id,
df.subsequent_item_id AS exchange_order_item_id,
e.[Exchange order creation timestamp] AS exchange_created_ts,
e.[Exchange order creator] AS exchange_creator
FROM document_flow df
INNER JOIN [Your exchange order header table] e
ON e.[Exchange order number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Exchange order document category]'
),
credit_memos AS (
SELECT
df.return_case_id,
df.return_item_id,
df.subsequent_document_id AS credit_memo_id,
df.subsequent_item_id AS credit_memo_item_id,
b.[Credit memo creation timestamp] AS credit_memo_created_ts,
b.[Credit memo creator] AS credit_memo_creator,
b.[Credit memo amount] AS refund_amount,
b.[Accounting document number] AS accounting_document_id,
b.[Company code] AS billing_company_code
FROM document_flow df
INNER JOIN [Your billing document header table] b
ON b.[Billing document number] = df.subsequent_document_id
WHERE df.subsequent_document_category = '[Credit memo document category]'
),
approval_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
s.[Approval timestamp] AS event_ts,
s.[Approval user] AS user_name
FROM return_orders ro
INNER JOIN [Your return status table or view] s
ON s.[Return order number] = ro.return_case_id
AND s.[Return order item number] = ro.return_item_id
WHERE s.[Status code] IN ([Your approved or released status values])
),
inspection_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
q.[Inspection completion timestamp] AS event_ts,
q.[Inspection user] AS user_name
FROM return_orders ro
INNER JOIN [Your return inspection table or view] q
ON q.[Return order number] = ro.return_case_id
AND q.[Return order item number] = ro.return_item_id
WHERE q.[Inspection status] IN ([Your completed inspection status values])
),
rejection_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
q.[Rejection timestamp] AS event_ts,
q.[Rejection user] AS user_name
FROM return_orders ro
INNER JOIN [Your return inspection table or view] q
ON q.[Return order number] = ro.return_case_id
AND q.[Return order item number] = ro.return_item_id
WHERE q.[Inspection outcome or rejection code] IN ([Your rejection reason values])
),
goods_receipt_events AS (
SELECT
rd.return_case_id,
rd.return_item_id,
m.[Goods receipt posting timestamp] AS event_ts,
m.[Goods receipt posting user] AS user_name
FROM return_delivery rd
INNER JOIN [Your material document header table] m
ON m.[Reference delivery number] = rd.delivery_id
INNER JOIN [Your material document item table] mi
ON mi.[Material document number] = m.[Material document number]
AND mi.[Material document item number] = [Your material document item linkage]
WHERE m.[Goods movement type] IN ([Your goods receipt movement type values])
),
accounting_events AS (
SELECT
cm.return_case_id,
cm.return_item_id,
a.[Accounting posting timestamp] AS event_ts,
a.[Accounting user] AS user_name
FROM credit_memos cm
INNER JOIN [Your accounting document header table] a
ON a.[Accounting document number] = cm.accounting_document_id
AND a.[Company code] = cm.billing_company_code
WHERE a.[Accounting document status] IN ([Your posted accounting status values])
),
refund_events AS (
SELECT
cm.return_case_id,
cm.return_item_id,
cl.[Clearing timestamp] AS event_ts,
cl.[Clearing user] AS user_name
FROM credit_memos cm
INNER JOIN [Your customer clearing table or view] cl
ON cl.[Cleared accounting document number] = cm.accounting_document_id
WHERE cl.[Clearing status] IN ([Your completed clearing status values])
),
closure_events AS (
SELECT
ro.return_case_id,
ro.return_item_id,
s.[Closure timestamp] AS event_ts,
s.[Closure user] AS user_name
FROM return_orders ro
INNER JOIN [Your return status table or view] s
ON s.[Return order number] = ro.return_case_id
AND s.[Return order item number] = ro.return_item_id
WHERE s.[Status code] IN ([Your final closed status values])
),
events AS (
SELECT ro.return_case_id, ro.return_item_id, 'Return Request Initiated' AS activity_name, ro.return_created_ts AS event_time, CAST(NULL AS TIMESTAMP) AS event_end_time, ro.return_creator AS user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)) AS refund_amount, ro.product_id, ro.customer_id FROM return_orders ro
UNION ALL
SELECT ae.return_case_id, ae.return_item_id, 'Return Order Approved', ae.event_ts, CAST(NULL AS TIMESTAMP), ae.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM approval_events ae INNER JOIN return_orders ro ON ro.return_case_id = ae.return_case_id AND ro.return_item_id = ae.return_item_id
UNION ALL
SELECT rd.return_case_id, rd.return_item_id, 'Return Delivery Created', rd.delivery_created_ts, rd.delivery_completed_ts, rd.delivery_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM return_delivery rd INNER JOIN return_orders ro ON ro.return_case_id = rd.return_case_id AND ro.return_item_id = rd.return_item_id
UNION ALL
SELECT gr.return_case_id, gr.return_item_id, 'Goods Received at Warehouse', gr.event_ts, CAST(NULL AS TIMESTAMP), gr.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM goods_receipt_events gr INNER JOIN return_orders ro ON ro.return_case_id = gr.return_case_id AND ro.return_item_id = gr.return_item_id
UNION ALL
SELECT ie.return_case_id, ie.return_item_id, 'Item Inspection Completed', ie.event_ts, CAST(NULL AS TIMESTAMP), ie.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM inspection_events ie INNER JOIN return_orders ro ON ro.return_case_id = ie.return_case_id AND ro.return_item_id = ie.return_item_id
UNION ALL
SELECT re.return_case_id, re.return_item_id, 'Return Rejected', re.event_ts, CAST(NULL AS TIMESTAMP), re.user_name, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM rejection_events re INNER JOIN return_orders ro ON ro.return_case_id = re.return_case_id AND ro.return_item_id = re.return_item_id
UNION ALL
SELECT cr.return_case_id, cr.return_item_id, 'Credit Memo Request Created', cr.request_created_ts, CAST(NULL AS TIMESTAMP), cr.request_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM credit_memo_requests cr INNER JOIN return_orders ro ON ro.return_case_id = cr.return_case_id AND ro.return_item_id = cr.return_item_id
UNION ALL
SELECT eo.return_case_id, eo.return_item_id, 'Exchange Order Created', eo.exchange_created_ts, CAST(NULL AS TIMESTAMP), eo.exchange_creator, ro.return_reason, CAST(NULL AS DECIMAL(19,2)), ro.product_id, ro.customer_id FROM exchange_orders eo INNER JOIN return_orders ro ON ro.return_case_id = eo.return_case_id AND ro.return_item_id = eo.return_item_id
UNION ALL
SELECT cm.return_case_id, cm.return_item_id, 'Credit Memo Created', cm.credit_memo_created_ts, CAST(NULL AS TIMESTAMP), cm.credit_memo_creator, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM credit_memos cm INNER JOIN return_orders ro ON ro.return_case_id = cm.return_case_id AND ro.return_item_id = cm.return_item_id
UNION ALL
SELECT ac.return_case_id, ac.return_item_id, 'Accounting Document Created', ac.event_ts, CAST(NULL AS TIMESTAMP), ac.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM accounting_events ac INNER JOIN return_orders ro ON ro.return_case_id = ac.return_case_id AND ro.return_item_id = ac.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = ac.return_case_id AND cm.return_item_id = ac.return_item_id
UNION ALL
SELECT rf.return_case_id, rf.return_item_id, 'Refund Processed', rf.event_ts, CAST(NULL AS TIMESTAMP), rf.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM refund_events rf INNER JOIN return_orders ro ON ro.return_case_id = rf.return_case_id AND ro.return_item_id = rf.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = rf.return_case_id AND cm.return_item_id = rf.return_item_id
UNION ALL
SELECT ce.return_case_id, ce.return_item_id, 'Return Case Closed', ce.event_ts, CAST(NULL AS TIMESTAMP), ce.user_name, ro.return_reason, cm.refund_amount, ro.product_id, ro.customer_id FROM closure_events ce INNER JOIN return_orders ro ON ro.return_case_id = ce.return_case_id AND ro.return_item_id = ce.return_item_id LEFT JOIN credit_memos cm ON cm.return_case_id = ce.return_case_id AND cm.return_item_id = ce.return_item_id
)
SELECT
e.return_case_id AS "ReturnCaseId",
e.activity_name AS "ActivityName",
e.event_time AS "EventTime",
e.event_end_time AS "EventEndTime",
e.user_name AS "UserName",
e.return_reason AS "ReturnReason",
e.refund_amount AS "RefundAmount",
e.product_id AS "ProductId",
e.customer_id AS "CustomerId",
p.source_system_id AS "SourceSystemId",
p.extraction_ts AS "LastDataUpdateTimestamp"
FROM events e
CROSS JOIN parameters p
WHERE e.event_time IS NOT NULL
ORDER BY e.return_case_id, e.event_time, e.activity_name; 立即优化SAP S/4HANA中的退货与退款处理流程
识别低效环节,将周期时间缩短30%,提升满意度。
无需信用卡。立即开始优化。