您的记录到报告流程:期间结账与对账数据模板
您的记录到报告流程:期间结账与对账数据模板
- 建议收集的属性
- 流程分析需跟踪的关键活动
- 分步数据提取指南
记录到报告流程:期间结账与对账属性
| 名称 | 说明 | ||
|---|---|---|---|
| 财务期间 FinancialPeriod | 财务报告周期的唯一标识,例如表示2023年12月的“2023-12”,作为期末结账流程的案例标识。 | ||
| 说明 财务期间是核心案例标识,用于汇总特定时间范围内所有结账活动,通常对应一个日历月或会计期间。每个财务期间代表一次完整的期末流程。 在流程挖掘分析中,此属性可用于跟踪期间结账从启动到最终报告的完整生命周期。它可用于比较不同期间的周期时间、识别常见流程路径,并分析月度、季度和年度结账过程之间的差异。将每个期间视为一个案例后,分析人员便可衡量长期绩效并定位系统性瓶颈。 重要性 这是分析所需的核心案例标识,可用于比较不同时期的结账表现,并识别趋势或反复出现的问题。 获取途径 根据财务凭证抬头中的会计年度(GJAHR)和过账期间(MONAT)字段组合得出,通常取自BKPF等表。 示例 2023-122024-032024年第一季度 | |||
| 开始时间 EventTime | 表示某项活动开始或记录到系统中的时间戳。 | ||
| 说明 事件时间记录活动发生的准确日期和时间。对于财务过账,通常是凭证创建时间(CPUTM)或过账日期(BUDAT);对于状态变更或任务,则是记录变更的时间戳。 此属性对于按时间顺序排列活动至关重要,也是所有基于时间的分析的基础。它可用于计算活动间的周期时间、特定任务的持续时间以及端到端流程总时长,并直接支持平均期间结账周期时间和平均对账审批时间等关键绩效指标。 重要性 此必需时间戳可用于按时间顺序排列事件,也是所有时长和绩效计算的基础。 获取途径 数据取自时间戳字段,例如BKPF等表中的创建日期(CPUDT)和创建时间(CPUTM),或各类状态表(例如CDHDR、CDPOS)中的变更日期字段。 示例 2023-12-28T09:15:30Z2024-01-02T14:00:12Z2024-01-05T11:21:00Z | |||
| 活动 ActivityName | 期间结账流程中执行的具体业务步骤或任务名称,例如“已过账调整分录”或“期间关闭,禁止过账”。 | ||
| 说明 此属性表示期间结账与对账端到端流程中的单个事件或任务。活动是流程图的基本组成部分,展示工作的执行顺序。通常根据SAP S/4HANA中的事务代码、凭证类型或状态变更组合得出。 分析活动是流程挖掘的基础。它有助于可视化流程路径、识别偏离标准过程的情况、发现活动耗时过长的瓶颈,并了解任务的频率和顺序。这对于期间结账变体分析和当前期间结账状态等仪表板至关重要。 重要性 定义流程中的各个步骤,为流程图提供基础,并支持对流程路径、偏差和瓶颈进行分析。 获取途径 根据多个来源得出,例如事务代码(TCODE)、凭证类型(BLART),或与财务结账任务相关表中的状态字段(例如SAP Financial Closing Cockpit中的数据)。 示例 期间开放,允许过账开始科目对账财务报表已生成开始公司间对账 | |||
| 公司代码 CompanyCode | 用于标识SAP组织中法人实体或公司的唯一标识。 | ||
| 说明 公司代码是企业内独立的会计核算单位,可为其建立一套完整、独立的账目。所有期末结账活动均在公司代码层级执行。 这是财务分析中的基本组织维度。在流程挖掘中,您可以据此比较不同法人实体的期末结账流程。“期末结账变体分析”仪表板使用公司代码识别差异,推动结账流程标准化。 重要性 提供关键的组织背景信息,便于比较不同法人实体的流程,识别差异和最佳实践。 获取途径 几乎所有SAP财务表中都有此字段,尤其是抬头表BKPF(字段BUKRS)。 示例 10001710US01DE01 | |||
| 凭证编号 DocumentNumber | 财务凭证(如日记账分录)的唯一标识。 | ||
| 说明 凭证编号是SAP为每笔财务过账分配的唯一键,也是跟踪和审计构成结账流程活动的各笔交易的主要依据。 凭证编号本身并非案例ID,但它能将流程追溯至源系统。分析人员可以从流程挖掘视图逐级下钻到SAP S/4HANA中的具体交易详情,以分析根因。调查特定调整分录或对账过账时,这一编号尤其有用。 重要性 提供指向SAP底层交易的直接引用,便于从流程模型逐级下钻并完整审计。 获取途径 位于财务凭证抬头表BKPF(字段BELNR)以及BSEG或ACDOCA等行项目表中。 示例 100000045190000001300000023 | |||
| 对账状态 ReconciliationStatus | 账户对账活动的状态,例如“未处理”“进行中”或“已批准”。 | ||
| 说明 此属性用于跟踪特定账户或任务的对账流程状态,显示对账是否已开始、已提交审核、已批准或已拒绝。状态变化是流程中的关键事件。 此属性是“对账返工分析”仪表板的基础。通过分析状态顺序,可以发现“已批准”后仍有进一步调整的情况,这表明发生了返工。它还支持“首次通过对账率”KPI,显示哪些对账无需先被拒绝或重新打开即可获批。 重要性 跟踪对账任务的进度和结果,帮助识别返工、衡量批准率并分析瓶颈。 获取途径 此信息通常存储在所用对账工具的相关表中,例如SAP Financial Closing cockpit或BlackLine的SAP Account Substantiation and Automation。 示例 未开始准备中已批准已拒绝 | |||
| 总账科目编号 GlAccountNumber | 用于标识总账中特定科目的编号。 | ||
| 说明 总账科目编号用于标识记录财务交易的各个科目,例如现金、应付账款或收入。许多期末活动(如对账和调整分录)都与特定总账科目直接相关。 此属性对于深入分析财务流程至关重要。“调整分录分析”仪表板使用该属性展示各科目的调整数量,帮助识别问题领域。“总账科目平均对账时间”KPI也会用到此属性,以定位特定科目相关的延误。 重要性 将流程活动与特定财务科目关联起来,便于深入分析对账和日记账分录,查明问题根因。 获取途径 位于财务凭证行项目表中,主要是BSEG(字段HKONT)或S/4HANA通用日记账表ACDOCA。 示例 113100004000000073000000 | |||
| 目标完成日期 TargetCompletionDate | 完成关键活动的计划日期或截止日期,例如生成财务报表。 | ||
| 说明 目标完成日期是期末结账流程中特定里程碑的内部或外部截止日期,也就是预期完成任务的日期。 此属性对于衡量进度安排的执行情况和截止日期达成情况至关重要。它是“报告截止日期达成情况”仪表板和“财务报表按时完成率”KPI的依据,两者会将此目标日期与 重要性 支持分析截止日期达成情况,帮助衡量并提升关键结账活动的按时完成率。 获取途径 此数据通常存储在任务管理或排程系统中,例如SAP Financial Closing cockpit,其中会定义结账任务清单及计划结束日期。 示例 2024-01-05T23:59:59Z2024-04-04T23:59:59Z2024-07-05T23:59:59Z | |||
| 结束时间 EndTime | 表示活动完成时间的时间戳。 | ||
| 说明 结束时间标记任务完成的时刻。对于系统中记录的瞬时事件,它有时与开始时间相同;对于持续时间可衡量的活动,则表示活动完成的时间戳。 结合开始时间,此属性对于计算每项活动的 重要性 可用于计算活动时长(处理时间),这对于识别绩效瓶颈和分析效率至关重要。 获取途径 与开始时间类似,此属性可取自多个时间戳字段。对于某些活动,它可能与开始时间相同;对于其他活动,则可能取自应用程序表或变更日志(CDHDR、CDPOS)中的单独“完成时间”或“变更时间”字段。 示例 2023-12-28T09:16:10Z2024-01-02T17:30:00Z2024-01-05T11:21:00Z | |||
| 负责人 ResponsibleUser | 执行活动或负责任务的人员的用户ID。 | ||
| 说明 此属性用于识别执行特定任务的员工,例如过账日记账分录或批准对账。通常以用户ID的形式记录在系统日志和凭证抬头中。 按用户分析流程,对于了解工作量分配、个人绩效和培训需求至关重要。资源分配效率仪表板会直接使用此属性,按用户展示活动处理时间。它还可以帮助识别自动化候选任务,例如由多名用户反复执行的任务。 重要性 将流程活动与执行人员关联起来,以便分析工作量、优化资源和管理绩效。 获取途径 通常可在BKPF等凭证抬头表中找到(字段USNAM,即用户名),也可在CDHDR等变更凭证表中找到(字段USERNAME)。 示例 ABROWNCSMITHDJOHNSON | |||
| 事务代码 TransactionCode | 用于执行活动的SAP事务代码(T-code)。 | ||
| 说明 事务代码是用于启动SAP中特定功能或程序的快捷方式。例如,FB01用于过账凭证,FAGLB03用于显示总账科目余额。T-code通常能清楚表明执行的活动。 此属性有助于定义流程模型中的活动。它可以可靠地区分自动化活动和手动活动,并帮助了解任务在系统中的具体执行方式。分析T-code还可以发现员工采用的非标准或低效方法。 重要性 从技术和系统层面呈现活动的执行方式,有助于识别手动与自动化步骤以及非标准流程。 获取途径 位于财务凭证抬头表BKPF(字段TCODE)或更改凭证日志中。 示例 FB01FAGL_FCVF.13 | |||
| 最近数据更新时间 LastDataUpdate | 表示源系统中数据最近一次刷新或提取时间的时间戳。 | ||
| 说明 此属性记录最近一次数据提取的日期和时间,可帮助了解流程挖掘工具中所分析数据的新旧程度。 它主要用于数据治理和帮助用户了解数据情况。仪表板查看者可以了解分析数据的时效性,这对于“当前期间结账状态”等近实时监控仪表板尤为重要。它有助于用户判断所查看的是今天、昨天还是上周的数据。 重要性 告知用户数据的时效性,帮助他们了解流程洞察反映的是当前情况还是较早的数据。 获取途径 这是数据提取或ETL工具在运行时生成并写入数据集的元数据。 示例 2024-06-10T08:00:00Z2024-06-09T08:00:00Z | |||
| 凭证货币 DocumentCurrency | 财务凭证金额所用的货币代码。 | ||
| 说明 此属性指定交易记录所用的货币,例如USD、EUR或JPY,为 对于跨国组织,按货币分析可能十分重要。这样可以确保正确解读金额,也便于将金额换算为统一的报告货币进行汇总分析。缺少此信息,就无法对 重要性 为金额提供必要背景信息,确保金额得到正确解读,尤其适用于多币种环境。 获取途径 位于财务凭证抬头表BKPF(字段WAERS)。 示例 USDEURJPY | |||
| 凭证金额 DocumentAmount | 财务凭证中以凭证货币计价的过账总额。 | ||
| 说明 此属性表示财务凭证对应的金额。对于期末调整,该金额可能是所过账的应计项目或更正金额。 分析金额有助于评估重要性。分析人员可以优先调查金额较大的调整分录,因为这类分录可能带来更高的财务风险。您还可以按金额筛选流程图,只查看超过特定阈值的交易,让视图聚焦于影响较大的活动。 重要性 为分析增加财务维度,便于根据金额影响和重要性确定问题的优先级。 获取途径 此值通常需要从BSEG或ACDOCA等行项目表汇总(字段WRBTR,即凭证货币金额)。 示例 15000.00250.75-500.00 | |||
| 实际完成日期 ActualCompletionDate | 关键活动或整个期末结账实际完成的日期。 | ||
| 说明 此属性记录重要里程碑的实际完成日期,例如财务报表最终获批或过账期间关闭的时间。 它与 重要性 提供里程碑的实际时间信息,用于衡量计划截止日期的达成情况并分析延误。 获取途径 取自顺序中最后一项活动的EventTime,例如“财务报表已批准”或“过账期间已关闭”。 示例 2024-01-06T10:00:00Z2024-04-05T17:00:00Z2024-07-04T11:00:00Z | |||
| 日记账分录类型 JournalEntryType | 所过账财务凭证的类型,用于区分标准分录、应计项目和调整分录。 | ||
| 说明 日记账分录类型在SAP术语中也称为凭证类型,是用于分类会计凭证的键。它控制凭证可过账到哪些科目类型,并用于区分不同业务交易,例如供应商发票(KR)、总账过账(SA)或客户付款(DZ)。 在期末结账中,此属性对于筛选特定类型的活动至关重要。例如,分析人员可以据此聚焦调整分录,为“调整分录分析”仪表板和“调整分录数量”KPI提供支持。此属性也有助于计算“手工过账占比”。 重要性 对财务交易进行分类,便于聚焦分析特定类型的过账,例如对顺利完成期末结账至关重要的手工调整。 获取途径 这是财务凭证抬头表BKPF中的标准字段(字段BLART)。 示例 SAKRAB | |||
| 是否发生对账返工 IsReconciliationRework | 用于标记对账活动后是否出现拒绝或进一步调整的布尔值。 | ||
| 说明 此计算属性用于识别对账子流程中的返工情况。如果对账被拒绝、提交后重新打开,或某个总账科目据称已完成对账后仍有调整分录过账,系统就会标记相关活动或案例。 此标记专为“对账返工分析”仪表板和“对账返工率”KPI设计。它将复杂的流程顺序转化为简单、可衡量的属性,用于量化返工程度,帮助团队着力提升首次处理质量。 重要性 直接量化返工这一关键流程低效问题,支持有针对性地分析和改进对账质量。 获取途径 根据活动顺序计算。例如,同一期间内,同一总账科目的“对账已批准”后出现“调整分录已过账”,则将标记设为true。 示例 truefalse | |||
| 是否按时完成 IsOnTime | 用于标记里程碑是否在目标日期当天或之前完成的布尔值。 | ||
| 说明 此属性以简单的二元结果表示是否按计划完成。系统会比较特定里程碑(例如财务报表获批)的 这是“财务报表按时完成率”KPI的核心计算依据。它将日期比较转化为清晰的“按时”或“逾期”状态,便于在仪表板和报告中直观呈现,也有助于衡量加快结账的各项举措是否有效。 重要性 将截止日期达成情况简化为清晰的成功或未达成结果,便于跟踪和报告按时完成情况。 获取途径 计算字段: 示例 truefalse | |||
| 是否自动执行 IsAutomated | 用于标记活动是否由系统用户或自动化流程执行的布尔值。 | ||
| 说明 此标记用于区分由人工用户手动执行的任务和由系统自动执行的任务,例如计划运行的货币估值批处理作业或自动清账。通常根据 此属性是了解结账流程自动化程度的关键。它可以突出显示数量较大的手动任务,帮助发现进一步自动化的机会。在根因分析中,也可用于判断瓶颈出现在手动步骤还是自动化步骤。 重要性 区分人工活动和系统活动,这对于发现自动化机会、分析两者的效率至关重要。 获取途径 这是一个派生属性,通常根据应用于“ResponsibleUser”字段的规则确定(例如检查系统用户或批处理用户ID,如“BATCHUSER”),也可根据事务代码确定。 示例 truefalse | |||
| 期末结账周期时间 PeriodCloseCycleTime | 一个财务期间从第一项活动到最后一项活动所用的总时间。 | ||
| 说明 此指标表示单个案例(财务期间)完成期末结账流程所需的端到端时间,计算方式为该期间最后一项活动的时间戳减去第一项活动的时间戳。 这是核心绩效指标,可直接用于“期末结账周期时间概览”仪表板和“平均期末结账周期时间”KPI。它从整体上衡量结账流程的效率和速度,便于进行时间趋势比较以及不同公司代码之间的对标。 重要性 作为衡量整体流程耗时的核心KPI,支持从整体上跟踪效率随时间的改善情况。 获取途径 按案例计算:每个 示例 P5D10H30MP7D2HP6D | |||
| 源系统 SourceSystemId | 用于标识提取数据的SAP S/4HANA实例或客户端。 | ||
| 说明 此属性用于指定数据的来源系统。在包含多个SAP实例的环境中(例如服务于不同地区或业务单元的实例),此字段对于区分数据源至关重要。 它主要用于数据治理、审计和确保数据完整性。在分析中,如果将多个源系统的数据合并到同一个流程挖掘模型中,可将此字段用作筛选条件,比较不同系统中的流程。 重要性 提供必要的数据沿袭信息和背景,明确数据来源,在多系统环境中尤为重要。 获取途径 这通常是在数据提取过程中添加的元数据,通常取自SAP中的系统ID(SY-SYSID)或客户端(SY-MANDT)。 示例 S4H_PROD_100S4H_QAS_200ECC_LEGACY_001 | |||
记录到报告流程:期间结账与对账活动
| 活动 | 说明 | ||
|---|---|---|---|
| 已过账调整分录 | 表示在初步对账完成后录入的更正分录,通常用于修正审核过程中发现的差异。这是明确过账至总账的交易。 | ||
| 重要性 调整分录频繁出现,说明上游流程或对账的首次处理质量较差。分析这些分录有助于找出错误根因并减少返工。 获取途径 记录为表ACDOCA和BKPF中的明确凭证。可根据特定凭证类型、结账周期后期的过账日期或特定文本说明识别。 采集 结合凭证类型和相对于对账活动的过账日期筛选BKPF中的日记账分录。 事件类型 explicit | |||
| 开始公司间对账 | 此活动表示开始匹配和对账同一集团内不同公司代码之间的交易。通常通过运行对账作业或在SAP的ICMR工具中创建新的对账案例来启动。 | ||
| 重要性 公司间对账通常复杂且耗时。分析其时长和流程路径,对于简化集团结账并确保合并财务数据准确至关重要。 获取途径 根据SAP公司间匹配与对账(ICMR)模块中的状态变更,或该期间首份对账凭证的创建情况推断。 采集 跟踪指定期间内ICMR工具中对账单元的创建日期或状态变更时间戳。 事件类型 inferred | |||
| 开始科目对账 | 标志着手动或半自动核实总账科目余额流程的开始。通常根据对账状态从“新建”变为“进行中”,或记录到首个编制人员操作来推断。 | ||
| 重要性 这是了解资产负债表核实所需时间和工作量的重要节点。它有助于识别哪些科目或部门启动对账较晚。 获取途径 此事件通常取自专用对账工具,例如BlackLine的SAP Account Substantiation and Automation,或其他第三方系统,并根据状态变更时间戳推断。 采集 跟踪指定总账科目对账首次从“未开始”状态变更的时间戳。 事件类型 inferred | |||
| 期间关闭,禁止过账 | 这是周期中的最后一项活动,正式关闭过账期间,以阻止后续交易。此操作可确保最终财务报告中的数据完整。 | ||
| 重要性 此活动是流程明确的结束事件,对于计算期间结账总周期时间和分析流程完成趋势至关重要。 获取途径 与开放期间类似,此事件取自变更凭证(表CDHDR和CDPOS),这些凭证记录了通过事务代码OB52对过账期间控制表T001B的更新。 采集 筛选表T001B的变更日志,识别相关会计年度和期间的关闭记录。 事件类型 explicit | |||
| 期间开放,允许过账 | 这标志着财务期间开始,过账期间已开放,可记录交易。这是财务管理员在SAP中执行并记录的明确配置变更,允许在新期间录入日记账分录。 | ||
| 重要性 此活动是期间结账流程的主要开始事件。它有助于准确衡量总周期时间,并为流程分析明确起点。 获取途径 此事件取自变更凭证(表CDHDR和CDPOS),这些凭证记录了过账期间控制表T001B的修改,通常通过事务代码OB52执行。 采集 筛选表T001B的变更日志,查找与指定会计年度和期间相关的记录。 事件类型 explicit | |||
| 科目对账已批准 | 此活动表示总账科目对账已获最终批准,确认余额已核实且所有问题均已解决。通常根据对账工具中的状态变更为“已批准”来推断。 | ||
| 重要性 此节点标志着一项关键控制活动完成。跟踪审批时间有助于发现审核流程中的瓶颈,也是衡量返工和首次通过率的必要依据。 获取途径 通过跟踪最终审批状态的时间戳,从对账管理系统中获取,例如SAP Account Substantiation and Automation。 采集 识别对账状态字段更新为最终“已批准”状态的时间戳。 事件类型 inferred | |||
| 财务报表已生成 | 此活动标志着正式财务报表的生成,例如资产负债表和损益表。它是期末会计和合并流程的最终成果。 | ||
| 重要性 这是记录到报告周期中的重要节点。其完成时间对于满足报告期限并及时向利益相关方提供信息至关重要。 获取途径 最好通过SAP Financial Closing Cockpit等财务结账管理工具捕获此事件,因为其中会将其记录为明确任务。否则,需根据报表生成日志或文件创建时间戳推断。 采集 在结账工具中跟踪“生成财务报表”任务的完成状态,或分析报表执行日志。 事件类型 inferred | |||
| 外币评估作业 | 这是标准的月末流程,根据期末汇率重新评估外币未清项目和余额。执行该程序后,会过账由此产生的评估差额。 | ||
| 重要性 此活动有助于遵循会计准则并准确反映财务状况。跟踪此活动有助于确保及时完成所有货币评估。 获取途径 从外币评估程序(例如FAGL_FCV)的执行日志中获取。作业详情存储在表TBTCO和TBTCP中。 采集 监控与事务FAGL_FCV或其底层程序相关作业的执行日志。 事件类型 explicit | |||
| 已执行合并任务 | 表示在SAP Group Reporting中执行合并活动,例如货币折算、重分类和公司间利润抵销。这些任务通常在合并监控器中管理并记录。 | ||
| 重要性 对于拥有多个法人实体的组织,合并流程是关键路径。监控这些任务有助于简化集团结账,并确保按时完成合并报告。 获取途径 从SAP S/4HANA Group Reporting的数据监控器或合并监控器中的状态日志获取。每项任务通常都包含用户、时间戳和状态。 采集 从Group Reporting合并监控器的底层表中提取任务执行日志。 事件类型 explicit | |||
| 已执行自动清账 | 表示在SAP中执行自动清账程序,例如GR/IR(收货/发票收据)清账作业。这些作业会匹配并清理特定总账科目中的未清项目,减少人工对账工作。 | ||
| 重要性 此活动反映对账流程的自动化程度。作业失败或出现异常可能导致大量人工工作和延误。 获取途径 从特定批处理作业的执行日志中获取,例如自动清账作业F.13或F.13E。作业日志表TBTCO和TBTCP包含执行详情。 采集 在SAP作业日志中监控与F.13等事务相关作业的开始和结束时间戳。 事件类型 explicit | |||
| 已过账应计项目和预计负债 | 此事件记录为按照权责发生制进行准确财务报告所需的应计、递延及其他预计项目手工日记账分录的创建情况。这些是明确过账至总账的交易。 | ||
| 重要性 跟踪这些过账有助于分析人工调整的数量和时间。数量较多可能意味着存在自动化机会,或需要改进上游流程。 获取途径 记录为通用日记账表ACDOCA和凭证抬头表BKPF中的明确日记账分录。可通过为应计项目配置的特定凭证类型识别这些分录。 采集 按凭证类型(例如“SA”或自定义类型)和期间内的过账日期筛选BKPF表中的凭证。 事件类型 explicit | |||
| 明细分类账数据传输完成 | 表示将应收账款、应付账款和资产会计等明细分类账中的汇总数据传输至总账的批处理作业已完成。这样可确保结账流程开始前,所有底层运营交易都已反映在总账中。 | ||
| 重要性 明细分类账结账延迟可能成为整个流程的主要瓶颈。跟踪此活动有助于发现源系统数据收集和集成环节的低效问题。 获取途径 根据负责分类账结算和数据传输的特定批处理作业是否成功完成来推断。作业日志可在表TBTCO和TBTCP中查看。 采集 在SAP作业概览(事务代码SM37)中,识别并监控相关批处理作业的完成时间戳。 事件类型 explicit | |||
| 试算平衡表已编制 | 表示试算平衡表已生成并保存以供审核,是创建最终财务报表前的重要检查点。通常需要通过保存报表输出的流程来捕获此事件。 | ||
| 重要性 编制试算平衡表是重要的质量关口。分析其完成时间有助于了解最终报告的准备情况,并发现前序活动中的延误。 获取途径 这通常不是明确记录的事件。如果某个特定报告事务的变式保存了用户和日期时间戳,或流程由SAP Financial Closing Cockpit等工具管理,则可以据此推断。 采集 需要分析系统,确认是否存在可靠的日志记录机制,例如报表执行日志或结账驾驶舱任务清单。 事件类型 inferred | |||
| 财务报表已批准 | 表示授权管理层在财务报表发布前完成最终签署。此流程通常在线下进行,但如果设有正式的数字审批步骤,也可以记录。 | ||
| 重要性 这是最终的质量与控制关口。跟踪其完成时间对于了解报告期限的遵循情况以及管理层审核周期的整体效率至关重要。 获取途径 如果存在财务报表审批工作流或状态字段,即可捕获此事件,例如SAP Financial Closing Cockpit或文档管理系统中的相关记录。 采集 确定能够标识财务报表包最终审批情况的数据字段和时间戳。 事件类型 inferred | |||
数据提取指南
步骤
- 识别并验证CDS视图:使用SAP HANA Studio或带ADT的Eclipse登录SAP S/4HANA系统。使用ABAP开发工具搜索并验证查询中提到的标准CDS视图是否存在,例如I_JournalEntryItem、I_BatchJob和I_ConsolidationTaskLog。对于账户对账等流程,您可能需要创建自定义CDS视图,例如Z_I_ACCOUNTRECONCILIATION,以捕获状态变更。
- 通过OData公开CDS视图:在SAP后端使用事务代码
SEGW(Gateway Service Builder)创建新项目。右键单击Data Model文件夹,选择“Reference -> Data Source”,然后添加所需的CDS视图。生成运行时对象,创建可供外部使用、用于公开这些视图的OData服务。 - 激活OData服务:在SAP Gateway中心进入事务代码
/IWFND/MAINT_SERVICE。单击“Add Service”,找到上一步生成的服务并添加。完成后即可激活服务并通过查询访问。 - 建立数据连接:使用您选择的数据提取工具(例如Python、Power BI或专用ETL平台)连接新建的OData服务。您需要服务URL,以及获准访问CDS视图的相应凭据。
- 调整并执行查询:复制提供的SQL查询。根据您的SAP环境,修改日期范围、公司代码以及自定义CDS视图或批处理作业名称等占位值。通过OData服务端点执行查询。请注意,OData使用不同的语法(
$filter、$select),因此您可能需要将UNION ALL查询逻辑转换为一系列独立的API调用,每项活动对应一次调用。 - 汇总活动数据:OData通常不支持在单次调用中直接执行复杂的
UNION ALL查询,因此您需要针对查询中的每个活动块分别发送请求。然后在客户端工具中将所有请求的结果汇总到一个数据集或表中。 - 转换并清理数据:检查汇总后的数据,确保
EventTime和EndTime列采用一致的时间戳格式。确认FinancialPeriod的格式为“YYYY-MM”。根据需要处理ResponsibleUser或DocumentNumber等列中的NULL值。 - 导出为事件日志:将最终汇总的数据集导出为CSV文件。确保列标题与所需属性一致,例如
FinancialPeriod、ActivityName、EventTime、EndTime、ResponsibleUser等。此文件即可上传到ProcessMind。
配置
- CDS视图:查询结合使用标准和自定义CDS视图。
I_JournalEntryItem(用于日记账分录)和I_BatchJob(用于自动运行)等标准视图不可或缺。通常需要使用Z_I_ACCOUNTRECONCILIATION等自定义视图,捕获标准视图未涵盖的内部流程状态。 - 日期范围:设置具体的提取日期范围,以控制数据量。查询使用
[Start Date]和[End Date]占位符。为确保分析有意义,通常应覆盖3至6个完整会计期间。 - 关键筛选条件:筛选对性能和相关性至关重要。请始终按
CompanyCode筛选。其他重要筛选条件包括Ledger(例如,领先分类账使用“0L”)、FiscalYear和特定的DocumentType值,以区分常规过账、应计项目和调整。 - 前提条件:执行提取的用户需要在SAP中获得访问指定CDS视图和执行OData服务的授权(例如授权对象
S_SERVICE、S_RFC)。必须配置并激活SAP Gateway服务。 - 性能:查询
I_JournalEntryItem可能会占用大量资源。请始终使用有针对性的筛选条件,尤其是日期、公司代码和分类账筛选条件。建议在非高峰时段提取,或采用增量加载策略进行持续监控。
查询示例 sql
SELECT
CONCAT(CAST(PostingDate AS DATE FORMAT 'YYYY'), '-', CAST(PostingDate AS DATE FORMAT 'MM')) AS FinancialPeriod,
'Period Opened For Posting' AS ActivityName,
CAST(CreationDateTime AS TIMESTAMP) AS EventTime,
CAST(CreationDateTime AS TIMESTAMP) AS EndTime,
CreatedByUser AS ResponsibleUser,
CompanyCode,
NULL AS GlAccountNumber,
NULL AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
0 AS ProcessingTime
FROM I_FinPostingPeriodControl -- This is a proxy; this activity is a configuration change often found in change logs (CDHDR/CDPOS for table T001B)
WHERE PostingPeriodVariant = '[Your Variant]' AND FiscalYear = '[Your Fiscal Year]' AND FromPostingPeriod = 1 AND AuthorizationGroup IS NOT NULL -- Logic to detect the opening event
UNION ALL
SELECT
CONCAT(SUBSTRING(JobName, STRPOS(JobName, '_') + 1, 4), '-', SUBSTRING(JobName, STRPOS(JobName, '_') + 5, 2)) AS FinancialPeriod, -- Infer period from Job Name if patterned, otherwise use job start date
'Subledger Data Transfer Completed' AS ActivityName,
CAST(JobStartDate || JobStartTime AS TIMESTAMP) AS EventTime,
CAST(JobEndDate || JobEndTime AS TIMESTAMP) AS EndTime,
JobCreatedByUser AS ResponsibleUser,
'[Configure based on your system]' AS CompanyCode,
NULL AS GlAccountNumber,
NULL AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
SECONDS_BETWEEN(CAST(JobStartDate || JobStartTime AS TIMESTAMP), CAST(JobEndDate || JobEndTime AS TIMESTAMP)) AS ProcessingTime
FROM I_BatchJob
WHERE JobName LIKE '[Subledger Job Prefix]%' AND JobStatus = 'F' -- 'F' for Finished
AND JobEndDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(CAST(CreationDate AS DATE FORMAT 'YYYY'), '-', CAST(CreationDate AS DATE FORMAT 'MM')) AS FinancialPeriod,
'Intercompany Reconciliation Started' AS ActivityName,
CAST(CreationDateTime AS TIMESTAMP) AS EventTime,
NULL AS EndTime,
CreatedByUser AS ResponsibleUser,
LeadingCompanyCode AS CompanyCode,
NULL AS GlAccountNumber,
ReconciliationCase AS DocumentNumber,
ReconciliationCaseStatus AS ReconciliationStatus,
NULL AS TargetCompletionDate,
NULL AS ProcessingTime
FROM I_ICRcnCase -- Part of SAP S/4HANA for group reporting
WHERE CreationDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(FiscalYear, '-', LPAD(FiscalPeriod, 2, '0')) AS FinancialPeriod,
'Accruals And Provisions Posted' AS ActivityName,
CAST(CreationDateTime AS TIMESTAMP) AS EventTime,
CAST(CreationDateTime AS TIMESTAMP) AS EndTime,
CreatedByUser AS ResponsibleUser,
CompanyCode,
GLAccountNumber,
AccountingDocument AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
0 AS ProcessingTime
FROM I_JournalEntryItem
WHERE DocumentType IN ('[Accrual Doc Type 1]', '[Accrual Doc Type 2]') -- e.g., 'SA', 'AC'
AND PostingDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(SUBSTRING(JobName, STRPOS(JobName, '_') + 1, 4), '-', SUBSTRING(JobName, STRPOS(JobName, '_') + 5, 2)) AS FinancialPeriod,
'Automated Clearing Run Executed' AS ActivityName,
CAST(JobStartDate || JobStartTime AS TIMESTAMP) AS EventTime,
CAST(JobEndDate || JobEndTime AS TIMESTAMP) AS EndTime,
JobCreatedByUser AS ResponsibleUser,
'[Configure based on your system]' AS CompanyCode,
NULL AS GlAccountNumber,
NULL AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
SECONDS_BETWEEN(CAST(JobStartDate || JobStartTime AS TIMESTAMP), CAST(JobEndDate || JobEndTime AS TIMESTAMP)) AS ProcessingTime
FROM I_BatchJob
WHERE JobName LIKE 'SAPF124%' AND JobStatus = 'F'
AND JobEndDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(SUBSTRING(JobName, STRPOS(JobName, '_') + 1, 4), '-', SUBSTRING(JobName, STRPOS(JobName, '_') + 5, 2)) AS FinancialPeriod,
'Foreign Currency Valuation Run' AS ActivityName,
CAST(JobStartDate || JobStartTime AS TIMESTAMP) AS EventTime,
CAST(JobEndDate || JobEndTime AS TIMESTAMP) AS EndTime,
JobCreatedByUser AS ResponsibleUser,
'[Configure based on your system]' AS CompanyCode,
NULL AS GlAccountNumber,
NULL AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
SECONDS_BETWEEN(CAST(JobStartDate || JobStartTime AS TIMESTAMP), CAST(JobEndDate || JobEndTime AS TIMESTAMP)) AS ProcessingTime
FROM I_BatchJob
WHERE JobName LIKE 'FAGL_FCV%' AND JobStatus = 'F'
AND JobEndDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
-- This activity often requires a custom view on a custom table or an add-on like SAP Account Substantiation and Automation.
-- The following is a placeholder for such a custom view.
SELECT
CONCAT(FiscalYear, '-', LPAD(FiscalPeriod, 2, '0')) AS FinancialPeriod,
'Account Reconciliation Started' AS ActivityName,
CAST(ChangedAt AS TIMESTAMP) AS EventTime,
NULL AS EndTime,
ChangedBy AS ResponsibleUser,
CompanyCode,
GLAccountNumber,
ReconciliationID AS DocumentNumber,
'In Progress' AS ReconciliationStatus,
PlannedCompletionDate AS TargetCompletionDate,
NULL AS ProcessingTime
FROM Z_I_ACCOUNTRECONCILIATION -- Placeholder for your custom reconciliation status view
WHERE Status = 'IN_PROGRESS' AND OldStatus = 'NEW'
AND ChangeDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(FiscalYear, '-', LPAD(FiscalPeriod, 2, '0')) AS FinancialPeriod,
'Adjusting Journal Entry Posted' AS ActivityName,
CAST(CreationDateTime AS TIMESTAMP) AS EventTime,
CAST(CreationDateTime AS TIMESTAMP) AS EndTime,
CreatedByUser AS ResponsibleUser,
CompanyCode,
GLAccountNumber,
AccountingDocument AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
0 AS ProcessingTime
FROM I_JournalEntryItem
WHERE DocumentType IN ('[Adjustment Doc Type 1]', '[Adjustment Doc Type 2]') -- e.g., 'AJ'
AND PostingDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
-- This activity often requires a custom view on a custom table or an add-on product.
-- The following is a placeholder for such a custom view.
SELECT
CONCAT(FiscalYear, '-', LPAD(FiscalPeriod, 2, '0')) AS FinancialPeriod,
'Account Reconciliation Approved' AS ActivityName,
CAST(ChangedAt AS TIMESTAMP) AS EventTime,
CAST(ChangedAt AS TIMESTAMP) AS EndTime,
ApprovedBy AS ResponsibleUser,
CompanyCode,
GLAccountNumber,
ReconciliationID AS DocumentNumber,
'Approved' AS ReconciliationStatus,
PlannedCompletionDate AS TargetCompletionDate,
NULL AS ProcessingTime
FROM Z_I_ACCOUNTRECONCILIATION -- Placeholder for your custom reconciliation status view
WHERE Status = 'APPROVED'
AND ChangeDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(FiscalYear, '-', LPAD(FiscalPeriod, 2, '0')) AS FinancialPeriod,
'Consolidation Tasks Executed' AS ActivityName,
CAST(TaskExecutionUTCTimestamp AS TIMESTAMP) AS EventTime,
CAST(TaskCompletionUTCTimestamp AS TIMESTAMP) AS EndTime,
ExecutedByUser AS ResponsibleUser,
ConsolidationUnitCompanyCode AS CompanyCode, -- Assuming mapping exists
NULL AS GlAccountNumber,
DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
SECONDS_BETWEEN(CAST(TaskExecutionUTCTimestamp AS TIMESTAMP), CAST(TaskCompletionUTCTimestamp AS TIMESTAMP)) AS ProcessingTime
FROM I_ConsolidationTaskLog
WHERE ConsolidationTaskStatus = 'S' -- Successful
AND TaskExecutionUTCDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(SUBSTRING(JobName, STRPOS(JobName, '_') + 1, 4), '-', SUBSTRING(JobName, STRPOS(JobName, '_') + 5, 2)) AS FinancialPeriod,
'Trial Balance Prepared' AS ActivityName,
CAST(JobStartDate || JobStartTime AS TIMESTAMP) AS EventTime,
CAST(JobEndDate || JobEndTime AS TIMESTAMP) AS EndTime,
JobCreatedByUser AS ResponsibleUser,
'[Configure based on your system]' AS CompanyCode,
NULL AS GlAccountNumber,
NULL AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
SECONDS_BETWEEN(CAST(JobStartDate || JobStartTime AS TIMESTAMP), CAST(JobEndDate || JobEndTime AS TIMESTAMP)) AS ProcessingTime
FROM I_BatchJob
WHERE JobName LIKE '[Trial Balance Job Prefix]%' AND JobStatus = 'F' -- Example: FAGL_TRIAL_BALANCE_RUN
AND JobEndDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(SUBSTRING(JobName, STRPOS(JobName, '_') + 1, 4), '-', SUBSTRING(JobName, STRPOS(JobName, '_') + 5, 2)) AS FinancialPeriod,
'Financial Statements Generated' AS ActivityName,
CAST(JobStartDate || JobStartTime AS TIMESTAMP) AS EventTime,
CAST(JobEndDate || JobEndTime AS TIMESTAMP) AS EndTime,
JobCreatedByUser AS ResponsibleUser,
'[Configure based on your system]' AS CompanyCode,
NULL AS GlAccountNumber,
NULL AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
SECONDS_BETWEEN(CAST(JobStartDate || JobStartTime AS TIMESTAMP), CAST(JobEndDate || JobEndTime AS TIMESTAMP)) AS ProcessingTime
FROM I_BatchJob
WHERE JobName LIKE '[Fin Statement Job Prefix]%' AND JobStatus = 'F'
AND JobEndDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
-- Approval is often a manual step. This requires a custom solution to capture.
-- The following is a placeholder for such a custom view.
SELECT
CONCAT(ApprovalYear, '-', LPAD(ApprovalPeriod, 2, '0')) AS FinancialPeriod,
'Financial Statements Approved' AS ActivityName,
CAST(ApprovalTimestamp AS TIMESTAMP) AS EventTime,
CAST(ApprovalTimestamp AS TIMESTAMP) AS EndTime,
ApproverUser AS ResponsibleUser,
CompanyCode,
NULL AS GlAccountNumber,
FinancialStatementVersion AS DocumentNumber,
'Approved' AS ReconciliationStatus,
NULL AS TargetCompletionDate,
0 AS ProcessingTime
FROM Z_I_FINSTATEMENTAPPROVAL -- Placeholder for custom approval tracking view
WHERE ApprovalDate BETWEEN '[Start Date]' AND '[End Date]'
UNION ALL
SELECT
CONCAT(CAST(LastChangeDate AS DATE FORMAT 'YYYY'), '-', CAST(LastChangeDate AS DATE FORMAT 'MM')) AS FinancialPeriod,
'Period Closed For Posting' AS ActivityName,
CAST(LastChangeDateTime AS TIMESTAMP) AS EventTime,
CAST(LastChangeDateTime AS TIMESTAMP) AS EndTime,
LastChangedByUser AS ResponsibleUser,
CompanyCode,
NULL AS GlAccountNumber,
NULL AS DocumentNumber,
NULL AS ReconciliationStatus,
NULL AS TargetCompletionDate,
0 AS ProcessingTime
FROM I_FinPostingPeriodControl -- Proxy, see note on 'Period Opened'
WHERE PostingPeriodStatus = 'C' -- 'C' for Closed
AND LastChangeDate BETWEEN '[Start Date]' AND '[End Date]'; 步骤
- 确认您拥有对包含所需应用程序表的SAP HANA架构的直接只读访问权限,并确定ACDOCA、TBTCO、CDHDR和CDPOS的架构所有者。将查询中的架构占位符替换为已批准的架构名称。
- 确认会计年度、会计期间、公司代码范围和提取日期范围。日期范围应覆盖完整结账周期,通常为三至六个月,并将日期参数替换为适用于您系统的值。
- 验证本地字段映射,涵盖过账期间配置变更、批处理作业完成、对账状态变更、合并执行、报告生成和审批记录。查询使用了专业占位符,代表并非所有SAP S/4HANA部署都必定存在的源对象。执行前,请将这些占位符替换为系统中已批准的视图或表。
- 使用只读数据库凭据执行查询。查询会为每项所需活动明确创建一条事件记录,不会根据事件顺序推断其他事件。
- 检查返回的列。FinancialPeriod是案例标识,ActivityName是事件活动,EventTime是必需的事件时间戳。源记录提供相关数据时,还会包含EndTime、ResponsibleUser、CompanyCode、GlAccountNumber、DocumentNumber、ReconciliationStatus和TargetCompletionDate。
- 验证结果中是否包含所有必需活动,包括特定期间可能没有源记录的活动。对于缺失的活动类型,查询会返回一条验证记录,其ActivityName设为Activity Coverage Validation。如果目标导入仅接受业务事件,请在上传到ProcessMind前删除或单独处理该记录。
- 将代表性事件与SAP应用程序记录和作业日志进行核对。确认日记账分录事件对应ACDOCA记录,作业事件对应TBTCO记录,变更事件对应CDHDR和CDPOS记录,或已配置的对账与审批数据源。
- 将结果导出为UTF-8 CSV或ProcessMind支持的其他表格格式。保留列名FinancialPeriod、ActivityName和EventTime的原样。按FinancialPeriod和EventTime排序,并确保每项明确提取的事件保留一行。
- 将事件日志上传到ProcessMind,并将FinancialPeriod设为案例标识、ActivityName设为活动、EventTime设为开始时间戳。有EndTime时,将其映射为结束时间戳;其余列映射为事件或案例属性。
重要的源数据映射说明:SAP S/4HANA并未为所有对账工具、合并监控器、报告存档、审批工作流或过账期间配置提供统一的表结构。请将查询中的每个[Your table name]和[Your column name]占位符替换为系统中经过验证的对象和列。请勿将占位符视为可执行的SQL。
配置
- 数据库访问:使用具有只读权限的SAP HANA数据库用户,并授予其对ACDOCA、TBTCO、CDHDR、CDPOS以及过账期间控制、对账、合并、报告和审批所配置源对象的SELECT权限。
- 架构配置:将[Your SAP schema]替换为包含应用程序对象的实际架构。确认这些对象是表、计算视图还是已批准的报告视图。
- 日期范围:提取完整结账周期,通常为三至六个月。纳入期初和期末活动、逾期过账、冲销、审批及结账后调整。
- 会计期间:按公司代码使用的会计年度和会计期间筛选。如果会计年度变式不同,请勿假定期间与日历年度一致。
- 公司代码:如果流程仅涉及选定的法人实体,请按公司代码筛选。如果范围由单独的组织映射维护,请使用[Configure based on your system]。
- 凭证类型:将日记账分录提取范围限制为应计、准备金、调整、估值、清账及其他结账过账所用的凭证类型。启用这些筛选条件前,请确认本地凭证类型配置。
- 作业状态:完成活动仅纳入已完成或成功结束的作业。应用状态筛选条件前,请验证本地TBTCO状态值。
- 变更凭证:确认本地配置后,按相关对象类和变更标识筛选CDHDR和CDPOS。仅凭变更凭证可能无法识别所有业务活动。
- 对账和审批数据源:配置经过验证的数据源对象,用于记录对账状态变更、编制人员操作、审批、目标日期和电子签核。具体数据源因部署的SAP组件和扩展而异。
- 性能:限制会计年度、会计期间、公司代码、过账日期和事件时间戳的筛选条件。将筛选条件应用于每个
UNION ALL分支,避免不加限制地扫描ACDOCA,并在获批的报告时段执行。 - 数据类型:将时间戳统一为相同的时区和数据类型。将空字符串转换为NULL,并保留公司代码、科目编号和凭证编号的前导零。
- 前提条件:确认所需的SAP组件、对账工具、合并功能、作业日志、变更凭证激活状态,以及报告或工作流审计日志均可用且已填充数据。
- 安全与合规:遵循最小权限原则,保护财务数据和用户数据,记录数据提取目的,并遵守组织的SAP和数据库审计要求。
查询示例 sql
WITH
params AS (
SELECT
TO_DATE('[Start date YYYY-MM-DD]') AS start_date,
TO_DATE('[End date YYYY-MM-DD]') AS end_date,
'[Fiscal year]' AS fiscal_year_filter,
'[Fiscal period]' AS fiscal_period_filter,
'[Company code filter]' AS company_code_filter
FROM DUMMY
),
base_events AS (
SELECT
TO_NVARCHAR(a.RYEAR) || '-' || LPAD(TO_NVARCHAR(a.POPER), 2, '0') AS FinancialPeriod,
'Accruals And Provisions Posted' AS ActivityName,
CAST(a.BUDAT AS TIMESTAMP) AS EventTime,
CAST(NULL AS TIMESTAMP) AS EndTime,
CAST(a.USNAM AS NVARCHAR(80)) AS ResponsibleUser,
CAST(a.RBUKRS AS NVARCHAR(20)) AS CompanyCode,
CAST(a.RACCT AS NVARCHAR(40)) AS GlAccountNumber,
CAST(a.BELNR AS NVARCHAR(40)) AS DocumentNumber,
CAST(NULL AS NVARCHAR(40)) AS ReconciliationStatus,
CAST(NULL AS DATE) AS TargetCompletionDate
FROM [Your SAP schema].ACDOCA a
CROSS JOIN params p
WHERE a.BUDAT >= p.start_date
AND a.BUDAT < ADD_DAYS(p.end_date, 1)
AND (p.fiscal_year_filter = '[Fiscal year]' OR TO_NVARCHAR(a.RYEAR) = p.fiscal_year_filter)
AND (p.fiscal_period_filter = '[Fiscal period]' OR TO_NVARCHAR(a.POPER) = p.fiscal_period_filter)
AND (p.company_code_filter = '[Company code filter]' OR TO_NVARCHAR(a.RBUKRS) = p.company_code_filter)
AND a.BLART IN ('[Accrual document type]', '[Provision document type]')
UNION ALL
SELECT
TO_NVARCHAR(a.RYEAR) || '-' || LPAD(TO_NVARCHAR(a.POPER), 2, '0'),
'Adjusting Journal Entry Posted',
CAST(a.BUDAT AS TIMESTAMP),
CAST(NULL AS TIMESTAMP),
CAST(a.USNAM AS NVARCHAR(80)),
CAST(a.RBUKRS AS NVARCHAR(20)),
CAST(a.RACCT AS NVARCHAR(40)),
CAST(a.BELNR AS NVARCHAR(40)),
CAST(NULL AS NVARCHAR(40)),
CAST(NULL AS DATE)
FROM [Your SAP schema].ACDOCA a
CROSS JOIN params p
WHERE a.BUDAT >= p.start_date
AND a.BUDAT < ADD_DAYS(p.end_date, 1)
AND (p.fiscal_year_filter = '[Fiscal year]' OR TO_NVARCHAR(a.RYEAR) = p.fiscal_year_filter)
AND (p.fiscal_period_filter = '[Fiscal period]' OR TO_NVARCHAR(a.POPER) = p.fiscal_period_filter)
AND (p.company_code_filter = '[Company code filter]' OR TO_NVARCHAR(a.RBUKRS) = p.company_code_filter)
AND a.BLART IN ('[Adjusting journal entry document type]')
UNION ALL
SELECT
TO_NVARCHAR(a.RYEAR) || '-' || LPAD(TO_NVARCHAR(a.POPER), 2, '0'),
'Foreign Currency Valuation Run',
CAST(a.BUDAT AS TIMESTAMP),
CAST(NULL AS TIMESTAMP),
CAST(a.USNAM AS NVARCHAR(80)),
CAST(a.RBUKRS AS NVARCHAR(20)),
CAST(a.RACCT AS NVARCHAR(40)),
CAST(a.BELNR AS NVARCHAR(40)),
CAST(NULL AS NVARCHAR(40)),
CAST(NULL AS DATE)
FROM [Your SAP schema].ACDOCA a
CROSS JOIN params p
WHERE a.BUDAT >= p.start_date
AND a.BUDAT < ADD_DAYS(p.end_date, 1)
AND (p.fiscal_year_filter = '[Fiscal year]' OR TO_NVARCHAR(a.RYEAR) = p.fiscal_year_filter)
AND (p.fiscal_period_filter = '[Fiscal period]' OR TO_NVARCHAR(a.POPER) = p.fiscal_period_filter)
AND (p.company_code_filter = '[Company code filter]' OR TO_NVARCHAR(a.RBUKRS) = p.company_code_filter)
AND a.BLART IN ('[Foreign currency valuation document type]')
UNION ALL
SELECT
TO_NVARCHAR(a.RYEAR) || '-' || LPAD(TO_NVARCHAR(a.POPER), 2, '0'),
'Automated Clearing Run Executed',
CAST(a.BUDAT AS TIMESTAMP),
CAST(NULL AS TIMESTAMP),
CAST(a.USNAM AS NVARCHAR(80)),
CAST(a.RBUKRS AS NVARCHAR(20)),
CAST(a.RACCT AS NVARCHAR(40)),
CAST(a.BELNR AS NVARCHAR(40)),
CAST(NULL AS NVARCHAR(40)),
CAST(NULL AS DATE)
FROM [Your SAP schema].ACDOCA a
CROSS JOIN params p
WHERE a.BUDAT >= p.start_date
AND a.BUDAT < ADD_DAYS(p.end_date, 1)
AND (p.fiscal_year_filter = '[Fiscal year]' OR TO_NVARCHAR(a.RYEAR) = p.fiscal_year_filter)
AND (p.fiscal_period_filter = '[Fiscal period]' OR TO_NVARCHAR(a.POPER) = p.fiscal_period_filter)
AND (p.company_code_filter = '[Company code filter]' OR TO_NVARCHAR(a.RBUKRS) = p.company_code_filter)
AND a.BLART IN ('[Automated clearing document type]')
UNION ALL
SELECT
CAST(j.[Financial period column] AS NVARCHAR(20)),
'Subledger Data Transfer Completed',
CAST(j.[Job end timestamp column] AS TIMESTAMP),
CAST(j.[Job end timestamp column] AS TIMESTAMP),
CAST(j.[Job user column] AS NVARCHAR(80)),
CAST(j.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(j.[Job name column] AS NVARCHAR(40)),
CAST(NULL AS NVARCHAR(40)),
CAST(NULL AS DATE)
FROM [Your SAP schema].TBTCO j
CROSS JOIN params p
WHERE j.[Job end timestamp column] >= p.start_date
AND j.[Job end timestamp column] < ADD_DAYS(p.end_date, 1)
AND j.[Job status column] = '[Successful job status]'
AND j.[Job name column] IN ('[AR transfer job]', '[AP transfer job]', '[Asset Accounting transfer job]')
UNION ALL
SELECT
CAST(j.[Financial period column] AS NVARCHAR(20)),
'Intercompany Reconciliation Started',
CAST(j.[Job start timestamp column] AS TIMESTAMP),
CAST(j.[Job end timestamp column] AS TIMESTAMP),
CAST(j.[Job user column] AS NVARCHAR(80)),
CAST(j.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(j.[Job name column] AS NVARCHAR(40)),
CAST(NULL AS NVARCHAR(40)),
CAST(NULL AS DATE)
FROM [Your SAP schema].TBTCO j
CROSS JOIN params p
WHERE j.[Job start timestamp column] >= p.start_date
AND j.[Job start timestamp column] < ADD_DAYS(p.end_date, 1)
AND j.[Job name column] IN ('[Intercompany reconciliation job]')
UNION ALL
SELECT
CAST(r.[Financial period column] AS NVARCHAR(20)),
'Intercompany Reconciliation Started',
CAST(r.[Status change timestamp column] AS TIMESTAMP),
CAST(NULL AS TIMESTAMP),
CAST(r.[Responsible user column] AS NVARCHAR(80)),
CAST(r.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(r.[Reconciliation case column] AS NVARCHAR(40)),
CAST(r.[Status column] AS NVARCHAR(40)),
CAST(r.[Target completion date column] AS DATE)
FROM [Your table name for intercompany reconciliation] r
CROSS JOIN params p
WHERE r.[Status change timestamp column] >= p.start_date
AND r.[Status change timestamp column] < ADD_DAYS(p.end_date, 1)
AND r.[Status column] IN ('Started', 'In Progress')
UNION ALL
SELECT
CAST(r.[Financial period column] AS NVARCHAR(20)),
'Account Reconciliation Started',
CAST(r.[Status change timestamp column] AS TIMESTAMP),
CAST(NULL AS TIMESTAMP),
CAST(r.[Responsible user column] AS NVARCHAR(80)),
CAST(r.[Company code column] AS NVARCHAR(20)),
CAST(r.[GL account column] AS NVARCHAR(40)),
CAST(r.[Reconciliation case column] AS NVARCHAR(40)),
CAST(r.[Status column] AS NVARCHAR(40)),
CAST(r.[Target completion date column] AS DATE)
FROM [Your table name for account reconciliation] r
CROSS JOIN params p
WHERE r.[Status change timestamp column] >= p.start_date
AND r.[Status change timestamp column] < ADD_DAYS(p.end_date, 1)
AND r.[Status column] IN ('In Progress')
UNION ALL
SELECT
CAST(r.[Financial period column] AS NVARCHAR(20)),
'Account Reconciliation Approved',
CAST(r.[Status change timestamp column] AS TIMESTAMP),
CAST(NULL AS TIMESTAMP),
CAST(r.[Approver user column] AS NVARCHAR(80)),
CAST(r.[Company code column] AS NVARCHAR(20)),
CAST(r.[GL account column] AS NVARCHAR(40)),
CAST(r.[Reconciliation case column] AS NVARCHAR(40)),
CAST(r.[Status column] AS NVARCHAR(40)),
CAST(r.[Target completion date column] AS DATE)
FROM [Your table name for account reconciliation] r
CROSS JOIN params p
WHERE r.[Status change timestamp column] >= p.start_date
AND r.[Status change timestamp column] < ADD_DAYS(p.end_date, 1)
AND r.[Status column] = 'Approved'
UNION ALL
SELECT
CAST(c.[Financial period column] AS NVARCHAR(20)),
'Consolidation Tasks Executed',
CAST(c.[Execution start timestamp column] AS TIMESTAMP),
CAST(c.[Execution end timestamp column] AS TIMESTAMP),
CAST(c.[Responsible user column] AS NVARCHAR(80)),
CAST(c.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(c.[Task identifier column] AS NVARCHAR(40)),
CAST(c.[Status column] AS NVARCHAR(40)),
CAST(c.[Target completion date column] AS DATE)
FROM [Your table name for consolidation execution] c
CROSS JOIN params p
WHERE c.[Execution start timestamp column] >= p.start_date
AND c.[Execution start timestamp column] < ADD_DAYS(p.end_date, 1)
AND c.[Status column] IN ('Completed', 'Successful')
UNION ALL
SELECT
CAST(t.[Financial period column] AS NVARCHAR(20)),
'Trial Balance Prepared',
CAST(t.[Report saved timestamp column] AS TIMESTAMP),
CAST(t.[Report saved timestamp column] AS TIMESTAMP),
CAST(t.[Responsible user column] AS NVARCHAR(80)),
CAST(t.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(t.[Report identifier column] AS NVARCHAR(40)),
CAST(t.[Status column] AS NVARCHAR(40)),
CAST(t.[Target completion date column] AS DATE)
FROM [Your table name for trial balance output] t
CROSS JOIN params p
WHERE t.[Report saved timestamp column] >= p.start_date
AND t.[Report saved timestamp column] < ADD_DAYS(p.end_date, 1)
AND t.[Status column] IN ('Saved', 'Completed')
UNION ALL
SELECT
CAST(f.[Financial period column] AS NVARCHAR(20)),
'Financial Statements Generated',
CAST(f.[Generation timestamp column] AS TIMESTAMP),
CAST(f.[Generation timestamp column] AS TIMESTAMP),
CAST(f.[Responsible user column] AS NVARCHAR(80)),
CAST(f.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(f.[Report identifier column] AS NVARCHAR(40)),
CAST(f.[Status column] AS NVARCHAR(40)),
CAST(f.[Target completion date column] AS DATE)
FROM [Your table name for financial statement output] f
CROSS JOIN params p
WHERE f.[Generation timestamp column] >= p.start_date
AND f.[Generation timestamp column] < ADD_DAYS(p.end_date, 1)
AND f.[Status column] IN ('Generated', 'Saved', 'Completed')
UNION ALL
SELECT
CAST(f.[Financial period column] AS NVARCHAR(20)),
'Financial Statements Approved',
CAST(f.[Approval timestamp column] AS TIMESTAMP),
CAST(f.[Approval timestamp column] AS TIMESTAMP),
CAST(f.[Approver user column] AS NVARCHAR(80)),
CAST(f.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(f.[Report identifier column] AS NVARCHAR(40)),
CAST(f.[Status column] AS NVARCHAR(40)),
CAST(f.[Target completion date column] AS DATE)
FROM [Your table name for financial statement approval] f
CROSS JOIN params p
WHERE f.[Approval timestamp column] >= p.start_date
AND f.[Approval timestamp column] < ADD_DAYS(p.end_date, 1)
AND f.[Status column] = 'Approved'
UNION ALL
SELECT
CAST(x.[Financial period column] AS NVARCHAR(20)),
'Period Opened For Posting',
CAST(x.[Change timestamp column] AS TIMESTAMP),
CAST(x.[Change timestamp column] AS TIMESTAMP),
CAST(x.[Changed by column] AS NVARCHAR(80)),
CAST(x.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(x.[Change document number column] AS NVARCHAR(40)),
CAST(x.[New status column] AS NVARCHAR(40)),
CAST(NULL AS DATE)
FROM [Your table name for posting period changes] x
CROSS JOIN params p
WHERE x.[Change timestamp column] >= p.start_date
AND x.[Change timestamp column] < ADD_DAYS(p.end_date, 1)
AND x.[New status column] = 'Open'
UNION ALL
SELECT
CAST(x.[Financial period column] AS NVARCHAR(20)),
'Period Closed For Posting',
CAST(x.[Change timestamp column] AS TIMESTAMP),
CAST(x.[Change timestamp column] AS TIMESTAMP),
CAST(x.[Changed by column] AS NVARCHAR(80)),
CAST(x.[Company code column] AS NVARCHAR(20)),
CAST(NULL AS NVARCHAR(40)),
CAST(x.[Change document number column] AS NVARCHAR(40)),
CAST(x.[New status column] AS NVARCHAR(40)),
CAST(NULL AS DATE)
FROM [Your table name for posting period changes] x
CROSS JOIN params p
WHERE x.[Change timestamp column] >= p.start_date
AND x.[Change timestamp column] < ADD_DAYS(p.end_date, 1)
AND x.[New status column] = 'Closed'
),
activity_list AS (
SELECT 'Period Opened For Posting' AS ActivityName FROM DUMMY
UNION ALL SELECT 'Subledger Data Transfer Completed' FROM DUMMY
UNION ALL SELECT 'Intercompany Reconciliation Started' FROM DUMMY
UNION ALL SELECT 'Accruals And Provisions Posted' FROM DUMMY
UNION ALL SELECT 'Automated Clearing Run Executed' FROM DUMMY
UNION ALL SELECT 'Foreign Currency Valuation Run' FROM DUMMY
UNION ALL SELECT 'Account Reconciliation Started' FROM DUMMY
UNION ALL SELECT 'Adjusting Journal Entry Posted' FROM DUMMY
UNION ALL SELECT 'Account Reconciliation Approved' FROM DUMMY
UNION ALL SELECT 'Consolidation Tasks Executed' FROM DUMMY
UNION ALL SELECT 'Trial Balance Prepared' FROM DUMMY
UNION ALL SELECT 'Financial Statements Generated' FROM DUMMY
UNION ALL SELECT 'Financial Statements Approved' FROM DUMMY
UNION ALL SELECT 'Period Closed For Posting' FROM DUMMY
),
missing_activities AS (
SELECT
CAST(NULL AS NVARCHAR(20)) AS FinancialPeriod,
'Activity Coverage Validation' AS ActivityName,
CAST(NULL AS TIMESTAMP) AS EventTime,
CAST(NULL AS TIMESTAMP) AS EndTime,
CAST(NULL AS NVARCHAR(80)) AS ResponsibleUser,
CAST(NULL AS NVARCHAR(20)) AS CompanyCode,
CAST(NULL AS NVARCHAR(40)) AS GlAccountNumber,
CAST(NULL AS NVARCHAR(40)) AS DocumentNumber,
CAST('Missing activity: ' || al.ActivityName AS NVARCHAR(40)) AS ReconciliationStatus,
CAST(NULL AS DATE) AS TargetCompletionDate
FROM activity_list al
LEFT JOIN base_events b ON b.ActivityName = al.ActivityName
WHERE b.ActivityName IS NULL
)
SELECT
FinancialPeriod,
ActivityName,
EventTime,
EndTime,
ResponsibleUser,
CompanyCode,
GlAccountNumber,
DocumentNumber,
ReconciliationStatus,
TargetCompletionDate
FROM base_events
UNION ALL
SELECT
FinancialPeriod,
ActivityName,
EventTime,
EndTime,
ResponsibleUser,
CompanyCode,
GlAccountNumber,
DocumentNumber,
ReconciliationStatus,
TargetCompletionDate
FROM missing_activities
ORDER BY FinancialPeriod, EventTime, ActivityName 立即优化记录到报告流程的结账与对账
发现低效环节,将结账周期时间最多缩短30%。
无需信用卡,几分钟即可开始。