您的Record to Report:期末结账与对账数据模板
您的Record to Report:期末结账与对账数据模板
- 建议收集的属性
- 流程分析需跟踪的关键活动
- 分步数据提取指南
记录到报告-期间结账与对账属性
| 名称 | 说明 | ||
|---|---|---|---|
| 财务期间 FinancialPeriod | 财务报告周期的唯一标识,例如表示2023年12月的“2023-12”,作为期末结账流程的案例。 | ||
| 说明 财务期间是核心案例标识,用于汇总特定时间范围内与结账相关的所有活动,通常对应一个日历月或财务期间。每个财务期间代表期末流程的一次完整运行。 在流程挖掘分析中,该属性支持跟踪期间结账从启动到最终报告的完整生命周期。您可以用它比较不同期间的周期时间,识别常见流程路径,并分析月度、季度和年度结账流程之间的差异。将每个期间视为一个案例后,分析人员可以衡量长期绩效并精准定位系统性瓶颈。 为什么重要 这是界定分析范围的核心案例标识,可用于比较不同时期的结账绩效,并识别趋势或反复出现的问题。 获取位置 通过合并财务凭证抬头中的财年(GJAHR)和过账期间(MONAT)字段得出,通常来自BKPF等表。 示例 2023-122024-032024-Q1 | |||
| 开始时间 EventTime | 表示特定活动开始或在系统中记录时间的时间戳。 | ||
| 说明 事件时间记录活动发生的准确日期和时间。对于财务过账,通常是凭证的创建时间(CPUTM)或过账日期(BUDAT)。对于状态变化或任务,则是系统记录变更的时间戳。 该属性对于按时间顺序排列活动至关重要,也是所有基于时间的分析的基础。它用于计算活动之间的周期时间、特定任务的持续时间,以及端到端流程的总时长,并直接支持Average Period Close Cycle Time和Avg Reconciliation Approval Time等KPI。 为什么重要 该必填时间戳支持按时间顺序排列事件,是所有时长和绩效计算的基础。 获取位置 来源包括BKPF等表中的创建日期(CPUDT)和创建时间(CPUTM)等时间戳字段,或各种状态表中的变更日期字段(例如CDHDR、CDPOS)。 示例 2023-12-28T09:15:30Z2024-01-02T14:00:12Z2024-01-05T11:21:00Z | |||
| 活动 ActivityName | 期末结账流程中执行的具体业务步骤或任务名称,例如“调整分录已过账”或“期间关闭过账”。 | ||
| 说明 该属性代表端到端期末结账和对账流程中的单个事件或任务。活动是流程图的基本组成部分,用于展示已执行工作的顺序。它们通常由SAP S/4HANA中的事务代码、凭证类型或状态变化组合得出。 分析活动是流程挖掘的基础。它有助于可视化流程路径,识别偏离标准流程的情况,发现活动耗时过长的瓶颈,并了解任务的频率和顺序。这对于Period Close Variant Analysis和Current Period Close Status等仪表板至关重要。 为什么重要 定义流程中的各个步骤,构成流程图的基础,并支持对流程路径、偏差和瓶颈进行分析。 获取位置 来源包括事务代码(TCODE)、凭证类型(BLART),以及与财务结账任务相关表中的状态字段,例如SAP Financial Closing Cockpit中的字段。 示例 期间开放过账科目对账开始财务报表已生成公司间对账开始 | |||
| 公司代码 CompanyCode | SAP组织中法人实体或公司的唯一标识。 | ||
| 说明 公司代码代表企业内的独立会计单位,可为其创建完整且自成体系的账簿。所有期末结账活动均在公司代码层级执行。 这是财务分析中的基础组织维度。在流程挖掘中,您可以据此比较不同法人实体的期末结账流程。“Period Close Variant Analysis”仪表板使用公司代码识别差异并推动结账流程标准化。 为什么重要 提供关键的组织背景,帮助您比较不同法人实体的流程,识别差异和最佳实践。 获取位置 几乎所有SAP财务表中都包含该字段,尤其是抬头表BKPF中的BUKRS字段。 示例 10001710US01DE01 | |||
| 凭证编号 DocumentNumber | 财务凭证的唯一标识符,例如日记账分录。 | ||
| 说明 凭证编号是SAP为每笔财务过账分配的唯一键。它是跟踪和审计构成结账流程活动的单笔交易的主要依据。 凭证编号本身不是Case ID,但可提供返回源系统的关键链接。分析人员可以从流程挖掘视图逐层深入到SAP S/4HANA中的具体交易详情,以开展根因分析。在调查具体调整日记账分录或对账过账时,该字段尤其有用。 为什么重要 提供对SAP底层交易的直接引用,支持从流程模型快速下钻并确保可审计性。 获取位置 位于财务凭证抬头表BKPF的BELNR字段,以及BSEG或ACDOCA等行项目表中。 示例 100000045190000001300000023 | |||
| 对账状态 ReconciliationStatus | 账户对账活动的状态,例如“Open”“In Progress”或“Approved”。 | ||
| 说明 该属性跟踪指定科目或任务的对账流程状态,显示对账是否已开始、已提交审核、已批准或已拒绝。状态变化是流程中的关键事件。 这是“Reconciliation Rework Analysis”仪表板的基础。通过分析状态序列,您可以识别“Approved”状态之后是否又发生调整,从而发现返工。该属性还支持“First-Pass Reconciliation Rate”KPI,显示哪些对账无需先被拒绝或重新打开即可获批。 为什么重要 跟踪对账任务的进度和结果,帮助识别返工、衡量批准率并分析瓶颈。 获取位置 该信息通常存储在所用具体对账工具的相关表中,例如SAP Financial Closing cockpit或BlackLine提供的SAP Account Substantiation and Automation。 示例 未开始准备中已批准已拒绝 | |||
| 总账科目编号 GlAccountNumber | 总账中某个具体科目的标识符。 | ||
| 说明 总账科目编号用于标识记录现金、应付账款或收入等财务交易的各个科目。许多期末活动,如对账和调整分录,都直接关联到具体的总账科目。 该属性对于详细的财务流程分析至关重要。“Adjusting Journal Entry Analysis”仪表板使用它展示各科目的调整数量,帮助识别问题区域。“Avg GL Account Reconciliation Time”KPI也依赖该属性定位具体科目相关的延迟。 为什么重要 将流程活动关联到具体财务科目,支持对账和日记账分录的详细分析,从而查找问题根因。 获取位置 位于财务凭证行项目表中,主要是BSEG的HKONT字段,或S/4HANA通用日记账表ACDOCA中。 示例 113100004000000073000000 | |||
| 目标完成日期 TargetCompletionDate | 完成关键活动的计划日期或截止日期,例如生成财务报表。 | ||
| 说明 目标完成日期代表期末结账流程中某个具体里程碑的内部或外部截止日期,即任务预计完成的日期。 该属性对于衡量计划执行情况和截止日期达成情况至关重要。它是“Reporting Deadline Adherence”仪表板和“Financial Statement On-Time Rate”KPI的基础,这两者会将该目标日期与 为什么重要 支持分析截止日期达成情况,帮助衡量并提升关键结账活动的按时完成率。 获取位置 该数据通常位于任务管理或排程系统中,例如SAP Financial Closing cockpit,其中会为结账任务清单定义计划结束日期。 示例 2024-01-05T23:59:59Z2024-04-04T23:59:59Z2024-07-05T23:59:59Z | |||
| 结束时间 EndTime | 表示活动完成时间的时间戳。 | ||
| 说明 结束时间标志着任务完成。对于系统记录的瞬时事件,它有时可能与开始时间相同。对于具有可测量持续时间的活动,它表示最终完成的时间戳。 该属性与开始时间结合使用,对于计算每项活动的ProcessingTime至关重要。这是绩效分析、识别瓶颈和优化资源分配的基础。Resource Allocation Efficiency等仪表板高度依赖准确的结束时间来计算用户执行任务所需的时长。 为什么重要 支持计算活动时长(Processing Time),这对于识别绩效瓶颈和分析效率至关重要。 获取位置 与开始时间一样,该字段可以来自各种时间戳字段。对于某些活动,它可能与开始时间相同;对于其他活动,则可能来自应用表或变更日志(CDHDR、CDPOS)中的单独“完成时间”或“变更时间”字段。 示例 2023-12-28T09:16:10Z2024-01-02T17:30:00Z2024-01-05T11:21:00Z | |||
| 负责用户 ResponsibleUser | 执行活动或负责任务的人员用户ID。 | ||
| 说明 该属性用于识别执行特定任务的员工,例如过账日记账分录或批准对账的人员。通常以用户ID的形式记录在系统日志和凭证抬头中。 按用户分析流程,对于了解工作量分配、个人绩效和培训需求至关重要。Resource Allocation Efficiency仪表板直接使用该属性,按用户展示活动处理时间。它还可以通过突出显示由多人执行的高重复性任务,帮助识别适合自动化的环节。 为什么重要 将流程活动与执行活动的人员关联起来,支持工作量分析、资源优化和绩效管理。 获取位置 通常可在BKPF等凭证抬头表中找到(字段USNAM,即用户名),或在CDHDR等变更文档表中找到(字段USERNAME)。 示例 ABROWNCSMITHDJOHNSON | |||
| 事务代码 TransactionCode | 用于执行该活动的SAP事务代码(T-code)。 | ||
| 说明 事务代码是SAP中启动特定功能或程序的快捷方式。例如,FB01用于过账凭证,FAGLB03用于显示总账科目余额。T-code通常可以清晰反映已执行活动的技术信息。 该属性有助于定义流程模型中的活动。您可以据此可靠地区分自动活动和手工活动,并准确了解任务在系统中的执行方式。分析T-code还可以发现员工采用的非标准或低效操作方式。 为什么重要 从技术和系统层面展示活动的执行方式,有助于识别手工与自动步骤以及非标准流程。 获取位置 位于财务凭证抬头表BKPF的TCODE字段,或变更凭证日志中。 示例 FB01FAGL_FCVF.13 | |||
| 最后数据更新时间 LastDataUpdate | 表示数据最近一次从源系统刷新或提取时间的时间戳。 | ||
| 说明 该属性记录最近一次数据提取的日期和时间,为流程挖掘工具中的分析数据提供新鲜度背景。 其主要用途是支持数据治理并帮助用户了解数据状态。仪表板查看者可以看到分析数据的时效性,这对于Current Period Close Status等近实时监控仪表板尤为重要。它有助于用户判断当前查看的是今天、昨天还是上周的数据。 为什么重要 告知用户数据的时效性,帮助其了解当前流程洞察所基于的数据是否最新。 获取位置 这是数据提取或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,例如“Financial Statements Approved”或“Period Closed For Posting”。 示例 2024-01-06T10:00:00Z2024-04-05T17:00:00Z2024-07-04T11:00:00Z | |||
| 日记账分录类型 JournalEntryType | 正在过账的财务凭证类型,用于区分标准分录、应计分录和调整分录。 | ||
| 说明 日记账分录类型,即SAP术语中的凭证类型,是用于分类会计凭证的键。它控制凭证可过账到哪些科目类型,并用于区分不同业务交易,例如供应商发票(KR)、总账过账(SA)或客户付款(DZ)。 在期末结账场景中,该属性对于筛选特定活动类型至关重要。例如,您可以据此聚焦调整日记账分录,为“Adjusting Journal Entry Analysis”仪表板和“Adjusting Journal Entries Count”KPI提供支持。它还可帮助计算“Manual Postings Ratio”。 为什么重要 对财务交易进行分类,使分析能够聚焦手工调整等特定过账类型,这些活动对顺利完成期末结账至关重要。 获取位置 这是财务凭证抬头表BKPF中的标准字段,即BLART字段。 示例 SAKRAB | |||
| 是否发生对账返工 IsReconciliationRework | 如果对账活动之后发生拒绝或进一步调整,则该布尔标志为true。 | ||
| 说明 该计算属性用于识别对账子流程中的返工情况。当对账被拒绝、提交后重新打开,或某个总账科目在对账 supposedly 完成后又过账调整分录时,逻辑会标记相关活动或Case。 该标志专为“Reconciliation Rework Analysis”仪表板和“Reconciliation Rework Rate”KPI设计。它将复杂的流程序列转化为简单、可度量的属性,量化返工程度,帮助团队提升一次通过质量。 为什么重要 直接量化返工这一关键流程低效表现,支持针对对账质量开展分析和改进。 获取位置 根据活动序列计算。例如,在同一期间内,如果同一总账科目的“Reconciliation Approved”之后紧接着发生“Adjusting Journal Entry Posted”,则将该标志设为true。 示例 truefalse | |||
| 是否按时完成 IsOnTime | 如果里程碑在目标日期当天或之前完成,则该布尔标志为true。 | ||
| 说明 该属性以二元结果表示计划达成情况。对于特定里程碑,例如财务报表获批,它通过比较 这是“Financial Statement On-Time Rate”KPI的核心计算。它将日期比较转化为清晰的“按时”或“延迟”状态,便于在仪表板和报告中展示。该属性有助于衡量加快结账计划的成效。 为什么重要 将截止日期达成情况简化为清晰的成功或失败结果,便于跟踪和报告按时完成表现。 获取位置 计算字段: 示例 truefalse | |||
| 是否自动执行 IsAutomated | 用于标识活动是否由系统用户或自动化流程执行的布尔标志。 | ||
| 说明 该标志用于区分人工用户执行的任务和系统自动执行的任务,例如货币估值的计划批处理作业或自动清账运行。通常可根据 该属性是了解结账流程自动化程度的关键。它可以突出高频手工任务,帮助识别进一步自动化的机会。在根因分析中,您还可以据此判断瓶颈发生在手工步骤还是自动步骤。 为什么重要 区分人工活动和系统活动,对于识别自动化机会并分析两者效率至关重要。 获取位置 这是一个派生属性,通常根据应用于“ResponsibleUser”字段的规则确定,例如检查“BATCHUSER”等系统用户或批处理用户ID,或检查Transaction Code。 示例 truefalse | |||
| 期末结账周期时间 PeriodCloseCycleTime | 一个财务期间从第一个活动到最后一个活动所需的总时间。 | ||
| 说明 该指标表示单个Case(Financial Period)的端到端期末结账流程时长,计算方式为该期间最后一个活动与第一个活动时间戳之差。 这是核心绩效指标,直接支持“Period Close Cycle Time Overview”仪表板和“Average Period Close Cycle Time”KPI。它从整体层面衡量结账流程的效率和速度,支持跨时间比较以及不同公司代码之间的基准对比。 为什么重要 代表整体流程时长的核心KPI,支持从整体层面跟踪效率随时间的改善情况。 获取位置 在Case层级计算:每个 示例 P5D10H30MP7D2HP6D | |||
| 源系统 SourceSystemId | 从中提取数据的特定SAP S/4HANA实例或客户端标识。 | ||
| 说明 该属性用于指定数据的来源系统。在包含多个SAP实例的环境中,例如面向不同地区或业务单元的实例,该字段对于区分数据源至关重要。 它主要用于数据治理、审计和确保数据完整性。在分析中,如果将多个源系统合并到一个流程挖掘模型中,还可以使用该字段作为筛选条件比较不同系统中的流程。 为什么重要 提供必要的数据血缘和上下文,尤其是在多系统环境中,确保清晰了解数据来源。 获取位置 通常是在数据提取过程中添加的元数据,来源一般是SAP中的系统ID(SY-SYSID)或客户端(SY-MANDT)。 示例 S4H_PROD_100S4H_QAS_200ECC_LEGACY_001 | |||
记录到报告-期间结账与对账活动
| 活动 | 说明 | ||
|---|---|---|---|
| 公司间对账开始 | 该活动表示同一企业集团内不同公司代码之间交易匹配和对账流程的开始。通常通过运行对账作业,或在SAP的ICMR工具中创建新的对账案例来启动。 | ||
| 为什么重要 公司间对账通常复杂且耗时。分析其持续时间和流程路径,对于简化集团结账并确保合并财务数据准确至关重要。 获取位置 根据SAP公司间匹配与对账(ICMR)模块中的状态变化,或该期间首份对账文档的创建推断。 采集 在ICMR工具中跟踪指定期间对账单元的创建日期或状态变更时间戳。 事件类型 inferred | |||
| 期间关闭过账 | 这是周期中的最终活动,正式关闭过账期间,防止进一步发生交易。该操作可确保最终财务报告的数据完整性。 | ||
| 为什么重要 该活动是流程的确定性结束事件。它对于计算期末结账总周期时间和分析流程完成趋势至关重要。 获取位置 与打开期间类似,该事件来自变更文档(表CDHDR和CDPOS),这些文档记录了通过事务OB52对过账期间控制表T001B的更新。 采集 筛选T001B表的变更日志,识别相关财年和期间的关闭操作。 事件类型 explicit | |||
| 期间开放过账 | 这标志着财务期间的开始,过账期间被打开以记录交易。这是财务管理员在SAP中执行并记录的明确配置变更,允许在新期间录入日记账分录。 | ||
| 为什么重要 该活动是期末结账流程的主要开始事件。它支持准确衡量总周期时间,并为流程分析提供清晰的起点。 获取位置 该事件来自变更文档(表CDHDR和CDPOS),这些文档记录了过账期间控制表T001B的修改,通常通过事务OB52执行。 采集 筛选与特定财年和期间相关的T001B表变更日志。 事件类型 explicit | |||
| 科目对账已批准 | 该活动表示总账科目对账已获最终批准,确认余额已完成核实且所有问题均已解决。可根据对账工具中的状态变更为“已批准”推断。 | ||
| 为什么重要 该里程碑标志着一项关键控制活动完成。跟踪审批时间有助于识别审核流程中的瓶颈,也是衡量返工率和一次通过率的必要条件。 获取位置 通过对账管理系统捕获,例如SAP Account Substantiation and Automation,跟踪最终审批状态的时间戳。 采集 识别对账状态字段更新为最终“已批准”状态的时间戳。 事件类型 inferred | |||
| 科目对账开始 | 标志着总账科目余额核实这一人工或半自动流程的开始。当对账状态从“新建”变为“进行中”,或记录首个编制人员操作时,可推断该事件。 | ||
| 为什么重要 这是了解资产负债表核实所需时间和工作量的关键里程碑。它有助于识别哪些科目或部门较晚开始对账。 获取位置 该事件通常从SAP Account Substantiation and Automation by BlackLine等专用对账工具或其他第三方系统中捕获,根据状态变更时间戳推断。 采集 跟踪指定总账科目对账从“未开始”状态首次发生状态变更的时间戳。 事件类型 inferred | |||
| 调整分录已过账 | 表示在完成初始对账后,为修正审核过程中发现的差异而创建的更正日记账分录。这是过账至总账的明确交易。 | ||
| 为什么重要 调整分录频繁出现,说明上游流程或对账的一次通过质量较低。分析这些分录是识别错误根因、减少返工的关键。 获取位置 记录为ACDOCA和BKPF表中的明确凭证。可根据特定凭证类型、结账周期后段的过账日期或特定文本描述进行识别。 采集 结合凭证类型和相对于对账活动的过账日期,筛选BKPF中的日记账分录。 事件类型 explicit | |||
| 财务报表已生成 | 该活动标志着正式财务报表的创建,例如资产负债表和损益表。它代表期末会计和合并流程的最终成果。 | ||
| 为什么重要 这是Record to Report周期中的重要里程碑。其时间对于满足报告截止期限并及时向利益相关者提供信息至关重要。 获取位置 最好通过SAP Financial Closing Cockpit等财务结账管理工具捕获,因为其中会将其作为明确任务记录。否则,必须根据报告生成日志或文件创建时间戳推断。 采集 跟踪结账工具中“生成财务报表”任务的完成状态,或分析报告执行日志。 事件类型 inferred | |||
| 合并任务已执行 | 表示在SAP Group Reporting中执行合并活动,例如货币折算、重分类和抵销公司间利润。这些任务通常在合并监控器中管理并记录。 | ||
| 为什么重要 对于拥有多个法人实体的组织,合并流程是关键路径环节。监控这些任务有助于简化集团结账,并确保合并报告按时完成。 获取位置 根据SAP S/4HANA for Group Reporting中Data Monitor或Consolidation Monitor的状态日志捕获。每项任务通常包含用户、时间戳和状态。 采集 从Group Reporting合并监控器的底层表中提取任务执行日志。 事件类型 explicit | |||
| 外币评估运行 | 这是月末标准流程,根据期末汇率重新评估外币未清项和余额。执行该程序后,会过账由此产生的评估差异。 | ||
| 为什么重要 确保遵循会计准则,并提供准确的财务状况。跟踪该活动有助于确保所有货币评估都按时完成。 获取位置 根据外币评估程序(例如FAGL_FCV)的执行日志捕获。作业详情存储在TBTCO和TBTCP表中。 采集 监控与事务FAGL_FCV或其底层程序相关作业的执行日志。 事件类型 explicit | |||
| 应计项目和准备金已过账 | 该事件记录为按照权责发生制进行准确财务报告而创建的应计、递延及其他准备金人工日记账分录。这些是过账至总账的明确交易。 | ||
| 为什么重要 跟踪这些过账有助于分析人工调整的数量和时间。数量较高可能表明存在自动化或改进上游流程的机会。 获取位置 记录为通用日记账表ACDOCA和抬头表BKPF中的明确日记账分录。可通过为应计项目配置的特定凭证类型识别这些分录。 采集 按凭证类型(例如“SA”或自定义类型)和期间内过账日期筛选BKPF表中的凭证。 事件类型 explicit | |||
| 自动清账运行已执行 | 表示在SAP中执行自动清账程序,例如GR/IR(收货/发票收货)清账运行。这些作业会匹配并清除特定总账科目中的未清项,减少人工对账工作。 | ||
| 为什么重要 该活动体现了对账流程的自动化程度。运行失败或出现异常,可能导致大量人工工作和延迟。 获取位置 根据特定批处理作业的执行日志捕获,例如用于自动清账的F.13或F.13E。作业日志表TBTCO和TBTCP包含执行详情。 采集 在SAP作业日志中监控与F.13等事务相关作业的开始和结束时间戳。 事件类型 explicit | |||
| 试算表已准备 | 表示试算表已生成并保存以供审核,是创建最终财务报表前的关键检查点。捕获该事件通常依赖于保存报告输出的流程。 | ||
| 为什么重要 试算表准备是重要的质量关口。分析其时间有助于了解最终报告的准备情况,并发现前置活动中的延迟。 获取位置 这通常不是明确事件。如果变式保存了用户和日期戳,可根据特定报告事务的执行推断;如果流程在SAP Financial Closing Cockpit等工具中管理,也可据此推断。 采集 需要分析系统,确定是否存在可靠的日志机制,例如报告执行日志或结账驾驶舱任务列表。 事件类型 inferred | |||
| 财务报表已批准 | 表示授权管理层在财务报表发布前完成最终签字确认。这通常在线下完成,但如果存在正式的数字审批步骤,也可以捕获。 | ||
| 为什么重要 这是最终的质量和控制关口。跟踪其时间对于了解报告截止期限的遵循情况,以及管理层审核周期的整体效率至关重要。 获取位置 如果存在报表审批工作流或状态字段,即可捕获该事件,例如在SAP Financial Closing Cockpit或文档管理系统中。 采集 识别能够表示财务报表包最终审批结果的数据字段及时间戳。 事件类型 inferred | |||
| 辅助分类账数据传输完成 | 表示将应收账款、应付账款和资产会计等辅助分类账中的汇总数据传输至总账的批处理作业已完成。这可确保所有底层运营交易在结账流程开始前都已反映到总账中。 | ||
| 为什么重要 辅助分类账结账延迟可能成为整个流程的主要瓶颈。跟踪该活动有助于识别源系统数据收集和集成中的低效环节。 获取位置 根据负责分类账结算和数据传输的特定批处理作业成功完成状态推断。作业日志可在TBTCO和TBTCP表中找到。 采集 在SAP作业概览(事务SM37)中识别并监控相关批处理作业的完成时间戳。 事件类型 explicit | |||
提取指南
步骤
- 识别并验证CDS View:使用SAP HANA Studio或带有ADT的Eclipse登录SAP S/4HANA系统。使用ABAP Development Tools搜索并验证查询中提到的标准CDS View是否存在,例如I_JournalEntryItem、I_BatchJob和I_ConsolidationTaskLog。对于Account Reconciliation等流程,您可能需要创建自定义CDS View,例如Z_I_ACCOUNTRECONCILIATION,以捕获状态变化。
- 通过OData公开CDS View:在SAP后端使用事务
SEGW(Gateway Service Builder)创建新项目。右键点击Data Model文件夹,选择“Reference -> Data Source”,添加所需的CDS View。生成运行时对象,创建可供外部使用的OData服务。 - 激活OData服务:在SAP Gateway中心进入事务
/IWFND/MAINT_SERVICE。点击“Add Service”,找到上一步生成的服务并添加。服务激活后即可查询。 - 建立数据连接:使用您选择的数据提取工具,例如Python、Power BI或专用ETL平台,连接新建的OData服务。您需要服务URL,以及具备CDS View访问权限的相应凭据。
- 调整并执行查询:复制提供的SQL查询。根据您的SAP环境,修改日期范围、公司代码以及自定义CDS View或批处理作业名称等占位值。针对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 View:查询依赖标准和自定义CDS View的组合。I_JournalEntryItem(用于日记账分录)和I_BatchJob(用于自动运行)等标准View至关重要。为捕获标准View未覆盖的内部流程状态,通常还需要使用Z_I_ACCOUNTRECONCILIATION等自定义View。
- 日期范围:定义明确的提取日期范围以控制数据量。查询使用占位符[Start Date]和[End Date],通常应覆盖3至6个完整财务期间,以获得有意义的分析结果。
- 关键筛选条件:筛选对性能和相关性至关重要。始终按CompanyCode筛选。其他重要条件包括Ledger(例如,主账簿可使用“0L”)、FiscalYear,以及用于区分常规过账、应计和调整的特定DocumentType值。
- 前提条件:执行提取的用户需要在SAP中具备访问指定CDS View和执行OData服务的权限,例如授权对象
S_SERVICE、S_RFC。SAP Gateway服务必须完成配置并激活。 - 性能:查询I_JournalEntryItem可能消耗较多资源。务必使用选择性筛选条件,尤其是日期、公司代码和账簿。建议在业务低峰期执行提取,或采用增量加载策略进行持续监控。
a 示例查询 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]替换为包含应用对象的实际架构。确认这些对象是表、计算View还是已批准的报告View。
- 日期范围:提取完整结账周期,通常为3至6个月。包括期初和期末活动、延迟过账、冲销、审批及结账后调整。
- 财务期间:按公司代码使用的财年和财务期间筛选。如果财年变式不同,请勿默认使用自然年期间。
- 公司代码:当流程仅适用于选定法人实体时,应用公司代码筛选。如果范围由单独的组织映射维护,请使用[Configure based on your system]。
- 凭证类型:将日记账分录提取范围限制为应计、准备金、调整、估值、清账及其他结账过账所使用的凭证类型。启用这些筛选条件前,请确认本地凭证类型配置。
- 作业状态:对于完成活动,仅纳入已完成或成功结束的作业。应用状态条件前,请验证本地TBTCO状态值。
- 变更凭证:确认本地配置后,按相关对象类和变更标识筛选CDHDR和CDPOS。仅依靠变更凭证可能无法识别所有业务活动。
- 对账和审批来源:配置经过验证的源对象,用于记录对账状态转换、编制人员操作、审批、目标日期和数字签署。这些来源因部署的SAP组件和扩展而异。
- 性能:限制财年、财务期间、公司代码、过账日期和事件时间戳条件。将筛选条件下推到每个UNION ALL分支,避免无条件扫描ACDOCA,并在获批的报告时段执行。
- 数据类型:将时间戳统一为相同的时区和数据类型。将空字符串转换为NULL,并保留公司代码、科目编号和凭证编号的前导零。
- 前提条件:确认所需SAP组件、对账工具、合并功能、作业日志、变更凭证激活状态,以及报告或工作流审计日志均可用且已写入数据。
- 安全与合规:遵循最小权限原则,保护财务和用户数据,记录提取目的,并遵守组织的SAP和数据库审计要求。
a 示例查询 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 立即优化Record to Report结账与对账流程
发现低效环节,将结账周期时间最多缩短30%。
无需信用卡,几分钟即可开始。