您的采购到付款(Purchase to Pay)-发票处理数据模板
您的采购到付款(Purchase to Pay)-发票处理数据模板
- 建议收集的属性
- 需要追踪的关键活动
- SAP ECC数据提取指南
采购到付款 - 发票处理属性
| 名称 | 描述 | ||
|---|---|---|---|
| Event 时间 EventTime | 活动发生的精确时间戳,包括日期和时间。 | ||
| 描述 事件时间记录了业务活动在源系统中执行并记录的确切时刻。这个时间戳是流程的时间轴骨干,将每张发票的所有活动按逻辑顺序排列。 在分析中,事件时间对于计算所有基于持续时间的指标至关重要,例如处理周期、等待时间以及活动之间的处理时间。它为“发票端到端处理周期”和“付款冻结解决时长”等仪表板提供支持,提供衡量流程中任意两点之间所耗时间所需的数据。准确的时间戳对于识别延迟和性能瓶颈至关重要。 为何重要 此时间戳对于正确排列事件顺序以及计算所有绩效指标(如周期时间和瓶颈持续时间)至关重要。 获取方式 这通常由修改单据抬头表 CDHDR 中的修改日期 (UDATE) 和修改时间 (UTIME) 组合得出。对于特定的创建事件,它可以是来自 RBKP 等表的创建日期和时间 (ERNAM, ERZET)。 示例 2023-03-15T10:30:00Z2023-03-16T14:05:21Z2023-03-28T09:00:00Z | |||
| 发票编号 InvoiceNumber | 供应商发票单据的唯一标识符。 | ||
| 描述 “发票编号”作为发票处理过程中的唯一案例标识符 (Case ID)。每个编号对应一张从供应商接收的发票,使所有相关活动(从数据采集到最终付款)都能作为一个连贯流程实例的一部分进行跟踪。 在流程挖掘分析中,此属性是重建每张发票端到端生命周期的基础。它能将 SAP 中记录的预制、过账、冻结和清账等离散事件连接成按时间顺序排列的序列。这清晰地展示了每张发票的处理方式、耗时时长以及偏离标准流程的情况。 为何重要 这是链接单张发票相关所有事件的主键,使其成为流程分析和变体探索的核心基础。 获取方式 这通常是 SAP 表 RBKP 中的单据编号(字段 BELNR),通常与公司代码 (BUKRS) 和财年 (GJAHR) 拼接以确保绝对唯一性。 示例 510004567851000456795100045680 | |||
| 活动 Activity | 发票处理生命周期中发生的特定业务步骤或事件的名称。 | ||
| 描述 “活动” (Activity) 属性代表发票处理工作流中的一个特定阶段或动作。这些活动源自各种系统事件,例如单据创建、状态变更、审批或 SAP 修改日志中记录的用户操作。 活动分析是流程挖掘的核心。它能实现流程图的可视化,识别瓶颈(例如“发票发送审批”后的漫长等待)、返工循环(例如反复出现的“设置付款冻结”和“解除付款冻结”周期)以及合规偏差。活动的顺序和频率揭示了真实的、现状的流程流。 为何重要 它定义了流程图中的步骤,实现了流程的可视化、瓶颈的发现和返工的识别。 获取方式 此属性通常源自多个渠道,包括事务代码 (SY-TCODE)、RBKP 等表中的状态字段(例如 RBSTAT),以及来自 CDHDR 和 CDPOS 表的修改事件。 示例 发票已暂存发票已送审发票已审批发票已过账发票已清算 | |||
| 付款冻结原因 PaymentBlockReason | 指示发票被冻结付款原因的代码。 | ||
| 描述 当发票存在差异或需要进一步调查时,会设置付款冻结。“付款冻结原因”代码指定了设置冻结的原因,例如由于数量差异、价格差异或手动冻结。 此属性对于“付款冻结解决时长”仪表板至关重要。按原因分析冻结的频率和持续时间有助于识别付款延迟的根本原因。例如,如果“价格差异”是导致长期冻结最常见的原因,则表明主数据或采购订单流程中存在需要解决的问题。 为何重要 它解释了发票延迟的原因,实现了付款冻结的根本原因分析,并有助于确定流程改进工作的优先级。 获取方式 付款冻结原因可以在表 RSEG(字段 SPGRS)的行项目级别或会计单据表 BSEG(字段 ZLSPR)中找到。 示例 RIM | |||
| 付款到期日 PaymentDueDate | 根据付款条件,发票应支付给供应商的截止日期。 | ||
| 描述 “应付日期”是根据发票的基准日期和约定的付款条件计算得出的。它代表了支付截止日期,以避免逾期并可能产生的罚款或对供应商关系的损害。 此属性对于“及时付款率”和“现金折扣损失”等绩效和合规 KPI 至关重要。通过将实际付款日期(清账日期)与应付日期进行对比,分析可以自动确定付款是准时、提前还是逾期。它是“付款条件遵守情况”仪表板的基础要素。 为何重要 它作为衡量按时付款绩效的基准,并有助于识别获取早期付款折扣的机会。 获取方式 此日期通常是计算得出的。付款基准日期 (ZFBDT) 位于表 BSEG 中。到期日逻辑还取决于付款条件 (BSEG-ZTERM)。 示例 2023-04-192023-05-052023-05-11 | |||
| 供应商编号 VendorNumber | 提交发票的供应商或商家的唯一标识符。 | ||
| 描述 “供应商编号”是识别供应商的主数据键值。它将发票交易与特定的业务合作伙伴联系起来,从而实现基于供应商特征的分析。 按供应商编号分析流程可以揭示有关供应商关系和绩效的重要洞察。例如,它可以帮助识别哪些供应商经常提交导致付款冻结或差异的有问题的发票,或者哪些供应商的发票处理最高效。这些信息对于供应商管理和战略采购决策非常有价值。 为何重要 它实现了针对特定供应商的分析,有助于识别与特定供应商相关的模式、问题或效率。 获取方式 这是发票单据抬头表 RBKP 中的“开票方”字段 (LIFNR)。 示例 100345100876200112 | |||
| 发票金额 InvoiceAmount | 发票在原始单据货币下的总毛额。 | ||
| 描述 发票金额代表供应商提交的发票总值。这是每个发票案例的关键财务指标。 在流程挖掘中,此属性对于基于价值的分析至关重要。它允许根据发票价值对流程进行筛选和细分,这通常与流程复杂性和审批要求相关。例如,高价值发票可能会遵循不同的、更严格的审批路径。它还用于合规性分析,例如检查高价值发票是否绕过了必需的审批步骤。 为何重要 它实现了基于价值的分析,有助于优先处理高价值发票,并了解发票金额如何影响流程流向和合规性。 获取方式 这是发票单据抬头表 RBKP 中的“发票总额”字段 (RMWWR)。 示例 1500.7512500.00850.20 | |||
| 用户名称 UserName | 执行该活动的个人的 SAP 用户 ID。 | ||
| 描述 “用户名”属性识别负责执行流程中特定活动的具体个人。这通常是随交易或修改事件记录的 SAP 用户名。 此属性对于用户或团队层面的绩效分析至关重要。它有助于回答诸如“谁是审批最快的人?”或“哪些用户产生的返工最多?”等问题。它在仪表板中用于分析工作负载分配、识别培训需求以及了解不同员工之间绩效的差异。 为何重要 它允许按个人或团队分析绩效和工作量,有助于识别表现优异者、培训机会和资源不平衡情况。 获取方式 这是修改单据抬头表 CDHDR 中的“修改人”字段 (USERNAME)。对于创建事件,它可以是 RBKP 等表中的“输入人”字段 (ERNAM)。 示例 JSMITHBWILSONCHEN | |||
| 结清日期 ClearingDate | 付款完成且发票从应付账款中结清的日期。 | ||
| 描述 “清账日期”标记了发票生命周期的最后一步:付款。它是系统中未清发票项被付款单据结清的日期。该日期代表了实际的付款执行时间。 此属性是许多关键 KPI 的终点,包括“平均发票周期时间”和“及时付款率”。通过将其与“应付日期”进行对比,可以衡量付款绩效。对于现金折扣分析,将其与折扣期进行对比,可以查看是否及时付款以获取折扣。 为何重要 它标志着流程的完成,是计算总处理周期、按时付款率和现金折扣实现情况的基础。 获取方式 对于已清项,这是来自供应商已清项表 BSAK 的“清账日期”字段 (AUGDT)。 示例 2023-04-152023-05-022023-05-20 | |||
| 过账日期 PostingDate | 发票正式过账到财务分类账的日期。 | ||
| 描述 “过账日期”是会计流程中的一个关键日期。它决定了发票费用在总账中被确认的会计期间。它通常由应付账款人员在发票处理期间设置。 在流程分析中,由此日期标记的“发票已过账”活动是一个重要的里程碑。从发票接收到过账日期的时长是整个周期时间的重要组成部分。此日期对于财务报告和吞吐量分析(例如跟踪每周或每月过账的发票数量)也至关重要。 为何重要 它标志着流程中的一个关键里程碑,决定了交易的财务期间,并且是周期时间计算的关键组成部分。 获取方式 这是发票单据抬头表 RBKP 中的“过账日期”字段 (BUDAT)。 示例 2023-03-202023-04-052023-04-11 | |||
| 采购订单号 PurchaseOrderNumber | 与发票进行匹配的采购订单 (PO) 标识符。 | ||
| 描述 “采购订单号”将发票与原始采购单据链接起来。这是三方匹配(采购订单、收货、发票)以及分析基于 PO 的发票流程效率的基础。 此属性对于“发票-PO 匹配差异率”等仪表板至关重要。它允许将流程细分为 PO 发票和非 PO 发票,这两者的处理路径和复杂程度通常大不相同。分析与特定 PO 相关的问题有助于诊断采购流程中的上游问题。 为何重要 它将发票与采购流程连接起来,能够分析 PO 发票与非 PO 发票,并识别匹配差异。 获取方式 这通常位于行项目级别。“采购订单号” (EBELN) 位于发票项目表 RSEG 中。它可能需要汇总到抬头级别。 示例 450001756345000175644500017565 | |||
| 付款条款 PaymentTerms | 定义与供应商约定的付款条件的代码,例如折扣期和到期日。 | ||
| 描述 付款条件定义了发票支付的时间规则,以及提前付款可享受的现金折扣。例如“30 天内净额支付”或“2/10, n/30”(10 天内支付可享受 2% 折扣,否则 30 天内全额支付)。 此属性是“现金折扣损失”仪表板和“现金折扣获取率”KPI 的基础。分析过程结合付款条件、过账日期和付款日期,来确定是否存在可用折扣以及是否成功获取。它也是“付款条件遵守情况”仪表板的关键。 为何重要 它对于分析现金折扣获取率以及了解流程延迟对财务的影响至关重要。 获取方式 这是发票单据抬头表 RBKP 中的“付款条件键”字段 (ZTERM)。 示例 Z0010001NT30 | |||
| 公司代码 CompanyCode | 正在处理发票的法律实体或公司的标识符。 | ||
| 描述 “公司代码”是 SAP 财务模块中的基本组织单位,代表一个独立的法律实体。所有财务交易(包括发票)都会过账到特定的公司代码。 此属性允许按法律实体对流程分析进行细分。这对于比较集团内不同公司的流程绩效、合规性和效率至关重要。仪表板可以按公司代码进行过滤,以提供特定公司的发票处理 KPI 视图。 为何重要 它实现了组织内不同法律实体之间的流程比较和绩效基准测试。 获取方式 这是发票单据抬头表 RBKP 中的“公司代码”字段 (BUKRS)。 示例 10002000US01 | |||
| 最后数据更新 LastDataUpdate | 指示流程数据上次从源系统刷新的时间戳。 | ||
| 描述 此属性记录最近一次数据提取或更新的日期和时间。它适用于整个数据集,而非单个事件,从而清晰地指示数据的时效性。 对于仪表板用户和分析师来说,这是一个关键的元数据属性。它帮助他们了解分析所涵盖的时间段,并确保他们基于最新信息做出决策。它通常显著地显示在仪表板上,以告知用户数据的最新程度。 为何重要 它告知用户数据的实时性,确保分析和决策基于最新信息。 获取方式 此值在数据刷新时由数据提取或 ETL 工具生成并注入数据集。 示例 2024-05-20T08:00:00Z2024-05-21T08:00:00Z2024-05-22T08:00:00Z | |||
| 凭证类型 DocumentType | 对会计凭证进行分类的代码,例如,分为供应商发票或贷记通知单。 | ||
| 描述 “单据类型”用于在 SAP 中对不同类型的业务交易进行分类。对于发票处理,常见类型包括用于标准发票的“RE”或用于供应商贷记通知单的“KG”。单据类型控制过账的各个方面,例如使用的编号范围。 在分析中,此属性允许将流程过滤为特定的交易类型。例如,处理贷记通知单的流程可能与标准发票显著不同。使用单据类型区分这些流程,可以提供更准确、更有意义的流程视角。 为何重要 它允许区分和分析不同的业务交易(如发票与贷记通知单),这些交易遵循不同的流程。 获取方式 这是发票单据抬头表 RBKP 中的“单据类型”字段 (BLART)。 示例 REKRKG | |||
| 处理时间 ProcessingTime | 在特定活动上花费的时间时长。 | ||
| 描述 处理时间测量执行一项活动从开始到结束所需的时间。它的计算方式是活动的结束时间与开始时间之差。这与周期时间不同,周期时间包含了活动之间的等待时间。 分析处理时间有助于了解不同步骤的实际投入或“接触时间”。它可以指出资源密集型或低效的活动。例如,“发票数据采集”处理时间过长可能意味着发票复杂或数据录入流程低效。该指标对于资源规划和自动化决策非常有价值。 为何重要 它衡量活动的实际工作时长,有助于识别资源密集型步骤,并区分实际工作时间和空闲等待时间。 获取方式 此属性不在 SAP 中。它是在数据转换期间使用公式:结束时间 - 开始时间 计算得出的。 示例 PT5M10SPT2H15MPT30S | |||
| 总账科目 GeneralLedgerAccount | 发票费用或成本过账到的总账 (G/L) 账号。 | ||
| 描述 “总账 (G/L) 账户”是会计科目表中记录发票财务影响的目标账户。这是财务报告和成本管理的关键数据。 在流程挖掘中,分析总账账户可以为流程流增加财务维度。“总账账户使用分析”仪表板可以揭示支出模式,识别发票可能的错误编码,并确保成本被分配到正确的部门或项目。它有助于弥合流程执行与财务影响之间的鸿沟。 为何重要 它为流程增加了财务维度,允许分析成本分配、支出模式和潜在的发票错误入账。 获取方式 这位于行项目级别。“总账账号” (HKONT) 位于 PO 发票的发票项目表 RSEG 或直接财务 (FI) 发票的表 BSEG 中。 示例 630000655100741000 | |||
| 拒绝原因 RejectionReason | 解释在审批工作流中发票被拒绝原因的代码或文本。 | ||
| 描述 当审批人拒绝发票时,理想情况下他们会提供拒绝理由。这可以是一个标准化代码,也可以是说明问题的自由文本注释,例如“PO 编号错误”、“重复发票”或“金额不正确”。 这些数据对于“发票拒绝原因及趋势”仪表板至关重要。通过分析不同拒绝原因出现的频率,企业可以识别常见问题并实施改进措施。例如,如果“PO 编号错误”是常见原因,这可能表明需要加强与供应商的沟通或对数据录入人员进行培训。此分析是减少流程返工的关键。 为何重要 它提供了拒绝的根本原因,从而能够进行有针对性的流程改进,减少返工并提高一次成功率。 获取方式 此信息通常不存储在单一的标准字段中。它可能存在于工作流容器日志、与单据关联的长文本字段,或自定义工作流解决方案的特定字段中。 示例 DUPLICATE_INVWRONG_AMTNO_PO_MATCH | |||
| 是否逾期 IsOverdue | 一个计算出的标志,指示发票是否在付款截止日期之后才支付。 | ||
| 描述 这是一个通过比较“清账日期”(实际付款日期)和“应付日期”计算出的布尔属性。如果清账日期晚于应付日期,则该标记为 true;否则为 false。这为每张发票的及时付款绩效提供了一个简单、直观的衡量标准。 此属性简化了仪表板中的分析和可视化。它允许轻松进行过滤和汇总,以计算“及时付款率”KPI。用户可以快速细分流程,比较逾期发票与准时支付发票的流程流,从而揭示导致延迟付款的流程模式。 为何重要 它简化了按时付款绩效的分析,并允许轻松比较按时和逾期的发票流程。 获取方式 此属性不在 SAP 中。它是在数据转换期间使用公式:清账日期 > 应付日期 计算得出的。 示例 truefalse | |||
| 源系统 SourceSystem | 标识提取数据的特定源系统。 | ||
| 描述 “源系统”属性指示事件数据的来源,例如特定的 SAP ECC 实例名称。在拥有多个 ERP 系统或合并来自不同源的数据的环境中,这一点尤为重要。 在分析中,此属性有助于区分可能在不同实例上运行的各种系统、地区或业务单元的流程和绩效。它确保了数据谱系清晰,并允许进行特定系统的过滤和分析。 为何重要 它在多系统环境中提供了关键背景信息,允许正确的数据隔离和针对特定系统的性能分析。 获取方式 这通常是在数据提取过程中添加的静态值,代表 SAP 系统 ID (TADIR-SRCSYSTEM) 或为特定 SAP 实例手动分配的标识符。 示例 SAPECC_PROD_EUECC_US_FINSAP_ERP_6_EHP8 | |||
| 现金折扣是否损失 IsCashDiscountLost | 一个计算出的标志,指示是否错失了可用的现金折扣。 | ||
| 描述 这是一个基于付款条件和实际付款日期计算的布尔属性。如果“付款条件”提供了提前付款折扣,而“清账日期”晚于折扣期,则设置为 true。这直接衡量了由于流程低效导致的财务损失。 此属性是“现金折扣损失”仪表板的基础。它允许轻松量化处理延迟带来的财务影响。通过过滤该标记为 true 的案例,分析师可以调查最常导致折扣错失的特定流程变体和瓶颈,从而为流程改进提供强有力的业务依据。 为何重要 它直接量化了流程延迟造成的财务损失,为优化发票处理工作流提供了极具说服力的依据。 获取方式 此属性不在 SAP 中。它是在数据转换期间通过解读“付款条件”并将“清账日期”与折扣到期日进行比较计算得出的。 示例 truefalse | |||
| 结束时间 EndTime | 指示活动何时完成的时间戳。对于即时事件,这与开始时间相同。 | ||
| 描述 “结束时间”属性标记特定活动的完成。对于 SAP 中记录为单一时间点的许多事件,结束时间与开始时间相同。然而,对于具有可衡量持续时间的活动(如正在进行的审批步骤),它可以代表该工作的结束。 在流程分析中,拥有独立的结束时间可以测量活动处理时间,将其与之前的等待时间区分开。这有助于区分活动执行时长与案例等待活动开始的时长,从而深入了解资源效率。 为何重要 它能够计算活动处理时间,将其与活动之间的等待时间区分开来,并改进瓶颈分析。 获取方式 这通常与开始时间相同,源自 CDHDR-UDATE 和 CDHDR-UTIME。在某些情况下,它可以源自明确记录任务开始和结束的工作流日志。 示例 2023-03-15T10:35:10Z2023-03-16T14:10:00Z2023-03-28T09:02:45Z | |||
| 货币 Currency | 发票金额的货币代码。 | ||
| 描述 “货币”属性指定了发票金额的计价货币,例如 USD、EUR 或 CNY。 此属性为“发票金额”提供了必要的背景。它使财务数据的正确解读和汇总成为可能,尤其是在处理多种货币的全球性组织中。分析可以按货币过滤,以比较不同货币区的处理效率或问题。为了进行有意义的财务汇总,金额可能需要转换为单一的报告货币。 为何重要 它为任何财务金额提供了必要的背景,确保准确解读,并支持基于货币的筛选和分析。 获取方式 这是发票单据抬头表 RBKP 中的“货币代码”字段 (WAERS)。 示例 美元EURGBP | |||
采购到付款 - 发票处理活动
| 活动 | 描述 | ||
|---|---|---|---|
| 发票已冲销 | 代表已过账发票单据的取消。系统会创建一个冲销单据来抵消原始发票的财务影响。 | ||
| 为何重要 此活动突出了一个重要的异常和返工路径。分析冲销的频率和原因可以揭示发票验证和过账流程中的系统性问题。 获取方式 这是记录在单据抬头表 BKPF 中的显式事件。冲销单据的抬头包含冲销单据号 (STBLG) 和财年 (STJAH)。 捕获 识别 BKPF-STBLG 字段已填充的凭证。事件时间戳是冲销凭证的过账日期。 事件类型 explicit | |||
| 发票已清算 | 此活动标志着成功发票生命周期的最后一步,即未清债务通过付款单据结清。这表示付款已执行。 | ||
| 为何重要 作为主要的结束事件,这对于计算端到端的总处理周期至关重要。它确认了流程的成功完成,并用于衡量按时付款绩效。 获取方式 这是记录在发票行项目表 BSEG 中的显式事件。清账日期存储在字段 AUGDT 中,清账单据号存储在 AUGBL 中。 捕获 使用发票单据行项目中的清账日期 (BSEG-AUGDT)。 事件类型 explicit | |||
| 发票已过账 | 这是一个关键的财务事件,发票在此被正式记录在总账中并产生负债。这使单据从临时(预制)状态变为永久会计条目。 | ||
| 为何重要 过账是一个重要的里程碑,它确认了发票的有效性。它是付款的前提条件,也是处理吞吐量的关键指标。 获取方式 这是记录在单据抬头表 BKPF 中的显式事件。时间戳即为过账日期 BKPF-BUDAT。单据将不再具有“预制”状态。 捕获 对于未预制的单据(BKPF-BSTAT 为空或 ' '),使用过账日期 (BKPF-BUDAT)。 事件类型 explicit | |||
| 发票数据已捕获 | 标记在 SAP 中初始创建的发票单据,可以是预制单据或已完全过账的单据。这通常是系统记录的发票生命周期中的第一个事件,并作为流程的开始时间。 | ||
| 为何重要 此活动是衡量端到端发票处理周期时间的主要起点。分析从此时点开始的持续时间有助于识别初始数据录入和单据创建阶段的延迟。 获取方式 创建时间戳捕获在 SAP 表 BKPF 的 CPUDT 字段(会计单据输入日期)和 CPUTM 字段(输入时间)。 捕获 使用来自 BKPF 表头 (CPUDT) 的单据创建时间戳。 事件类型 explicit | |||
| 已设置付款冻结 | 当发票行项目被冻结而无法支付时,会发生此活动。由于三方匹配差异,系统可以自动设置冻结;也可以由于各种原因手动设置。 | ||
| 为何重要 此事件对于衡量付款冻结解决时长以及识别付款延迟的根本原因至关重要。它突出了价格、数量或所需审批方面的问题。 获取方式 这是一个显式事件,可以通过 BSEG 表 ZLSPR 字段(付款冻结键)的修改单据日志(表 CDHDR 和 CDPOS)进行跟踪。 捕获 当 BSEG-ZLSPR 的值从空白变为非空白时,修改单据 (CDHDR) 中的时间戳。 事件类型 explicit | |||
| 发票已审批 | 表示发票已获得指定权限部门的正式批准,允许进行过账和付款。这通常是工作流的最后一步。 | ||
| 为何重要 此里程碑标志着审批周期时间衡量的结束。它解除了流程阻塞,确保及时付款,并有助于分析审批人之间的工作负载分配。 获取方式 这通常通过识别审批任务的完成,从 SAP 业务工作流表中捕获。或者,也可以从解除与审批相关的付款冻结中推断出来。 捕获 工作流日志中已完成审批步骤的时间戳,或特定付款冻结移除的时间戳。 事件类型 inferred | |||
| 发票已拒绝 | 表示发票在审批过程中被拒绝。此操作通常需要更正并重新提交,从而产生返工循环。 | ||
| 为何重要 跟踪拒绝情况对于识别常见的失败原因(如数据错误或违反政策)至关重要。它有助于量化返工,并精准定位流程改进或供应商培训的领域。 获取方式 此事件通常在 SAP 业务工作流日志中作为拒绝步骤出现。也可以从特定的状态变更或添加到发票单据的注释中推断出来。 捕获 工作流日志中拒绝步骤的时间戳,或指示拒绝的单据状态变更时间戳。 事件类型 inferred | |||
| 发票已暂存 | 表示发票已录入 SAP,但尚未过账到总账。这是一个临时状态,允许在财务过账前进行审查、更正或审批。 | ||
| 为何重要 跟踪发票预制的时间及持续时长可以突出过账前验证和审批流程中的瓶颈。它将数据录入时间与财务处理时间区分开来。 获取方式 这可以从表 BKPF 的 BSTAT 字段的单据状态中推断出来。值“V”(预制单据)或“W”(带变更发布的预制单据)表示预制状态。 捕获 识别状态字段 BKPF-BSTAT 为 'V' 的凭证。事件时间戳是创建日期 BKPF-CPUDT。 事件类型 inferred | |||
| 发票已送审 | 代表发票提交到正式审批工作流的时间点。采集机制高度依赖于具体的 SAP 工作流或第三方系统实现。 | ||
| 为何重要 此活动开始计算“发票审批周期时间”KPI。它对于识别审批链中的延迟和分析审批人绩效至关重要。 获取方式 此事件通常通过识别特定审批任务的开始,从 SAP 业务工作流表(例如 SWW_WI2OBJ, SWWLOG)中捕获。在较简单的场景中,可以从自定义字段中的状态变更推断出来。 捕获 需要分析 SAP 工作流日志或与发票单据链接的自定义状态字段。 事件类型 inferred | |||
| 发票已逾期 | 这是一个计算得出的事件,当当前日期超过发票的净到期日且发票尚未支付时触发。到期日根据付款条件和基准日期确定。 | ||
| 为何重要 此活动对于监控“及时付款率”KPI 至关重要。它主动标记存在逾期付款风险的发票,逾期付款会损害供应商关系并导致罚款。 获取方式 此事件通过将当前日期与净到期日进行比较计算得出。到期日源自基准日期 (BSEG-ZFBDT) 和付款条件 (BSEG-ZTERM)。 捕获 当 事件类型 calculated | |||
| 支付冻结已解除 | 代表移除发票行项目的付款冻结,允许其进入付款运行。这表示先前识别的问题已得到解决。 | ||
| 为何重要 此活动结束了冻结持续时间的衡量。分析冻结设置与解除之间的时间可以揭示问题解决流程的效率。 获取方式 当冻结解除时,通过 BSEG 表 ZLSPR 字段(付款冻结键)的修改单据日志(表 CDHDR 和 CDPOS)来跟踪此事件。 捕获 当 BSEG-ZLSPR 的值从非空白变为空白时,修改单据 (CDHDR) 中的时间戳。 事件类型 explicit | |||
提取指南
步骤
- 创建 ABAP 程序:使用事务码
SE38或SE80创建一个新的可执行程序,例如Z_PM_INVOICE_EXTRACT。提供一个合适的标题并将类型设置为“可执行程序”。 - 定义选择屏幕:在程序中定义一个选择屏幕,允许用户筛选数据。关键参数应包括公司代码 (
BUKRS)、会计年度 (GJAHR)、过账日期范围 (BUDAT),以及应用服务器上的输出文件路径参数。 - 声明数据结构:定义一个内部表结构来保存最终的事件日志。该结构必须包含所有必需和推荐的属性:
InvoiceNumber、Activity、EventTime、UserName、VendorNumber、PurchaseOrderNumber、InvoiceAmount、PostingDate、PaymentDueDate、PaymentBlockReason和ClearingDate。 - 实现数据选择逻辑:编写核心 ABAP 逻辑以选择发票数据。该方法涉及多个查询,并将其合并到最终的事件日志表中。
- 首先,根据选择屏幕标准从主发票表
BKPF、BSEG、RBKP和RSEG中选择抬头和行项目数据。 - 对于每张发票,生成基础事件,如“发票数据已采集”(来自创建时间戳)和“发票已过账”(来自过账时间戳)。
- 查询更改凭证表
CDHDR和CDPOS以查找与付款冻结相关的更改(BSEG中的ZLSPR字段)。对于每个相关更改,创建“付款已冻结”和“付款冻结已释放”事件。 - 通过检查
BSEG表中的清账凭证 (AUGBL) 和清账日期 (AUGDT) 来识别“发票已结清”事件。 - 通过检查
BKPF抬头中的冲销凭证 (STBLG) 来识别“发票已冲销”事件。 - 实现自定义逻辑以捕获工作流事件(“发票已送审”、“已批准”、“已拒绝”)。这部分通常因客户而异,需要根据您工作流的表或状态字段调整代码。
- 首先,根据选择屏幕标准从主发票表
- 生成计算事件:在程序逻辑中,计算
Invoice Becomes Overdue(发票已逾期)事件。这是通过将所有未付发票的到期日 (PaymentDueDate) 与当前日期进行比较得出的。如果到期日已过,则创建一个事件,并将EventTime设置为到期日。 - 填充事件日志表:当您从不同来源收集每张发票的数据时,对其进行格式化并将新行附加到最终内部事件日志表中,每项活动占一行。
- 将数据导出到文件:使用
OPEN DATASET、TRANSFER和CLOSE DATASET语句将最终内部表的内容写入选择屏幕上指定的 SAP 应用服务器路径下的平面文件中。使用统一的分隔符(如分号或制表符)创建 CSV 文件。 - 调度提取任务:对于定期数据提取,为程序创建一个具有所需筛选标准的变体,并使用事务码
SM36将其调度为后台作业运行。 - 获取输出文件:使用事务码
AL11访问 SAP 应用服务器目录以定位生成的文件。使用事务码CG3Y将文件从应用服务器下载到本地计算机。 - 准备上传:在上传到流程挖掘工具之前,打开 CSV 文件以验证表头是否正确、数据格式是否一致(特别是时间戳),以及分隔符是否符合预期。确保文件以 UTF-8 编码保存。
配置
- 筛选条件:ABAP 报表应包含一个全面的选择屏幕。最重要的筛选器包括:
公司代码 (BUKRS):用于将提取限制在特定的法律实体。过账日期 (BUDAT):用于定义提取的时间范围。建议分批提取数据,例如一次提取 3 到 6 个月的数据。凭证类型 (BLART):仅包含相关的发票凭证类型,例如物流发票的 “RE” 和供应商发票的 “KR”。
- 输出文件路径:这是一个必填参数,用于指定 SAP 应用服务器上创建输出文件的完整路径和文件名。运行报表的用户需要该目录的写入权限。
- 性能注意事项:对于大型数据集,报表应在非高峰时段作为后台作业执行,以避免系统性能下降。逻辑上应仅从表中选择所需字段,并尽可能利用标准 SAP 数据库索引。
- 前提条件和权限:运行此提取的用户或服务账户需要:
- ABAP 报表执行权限(属于
S_PROGRAM)。 - 对财务和物流表的读取权限,包括
BKPF、BSEG、RBKP、RSEG、CDHDR和CDPOS。 - 将文件写入指定应用服务器目录的授权 (
S_DATASET)。 - 访问事务代码
SE38、SM36、AL11和CG3Y以进行开发、调度和文件获取。
- ABAP 报表执行权限(属于
a 查询示例 abap
REPORT Z_PM_INVOICE_EXTRACT.
*&---------------------------------------------------------------------*
*& Tables for Selection Screen
*&---------------------------------------------------------------------*
TABLES: BKPF, RBKP.
*&---------------------------------------------------------------------*
*& Data Declarations
*&---------------------------------------------------------------------*
TYPES: BEGIN OF ty_event_log,
InvoiceNumber TYPE belnr_v,
Activity TYPE string,
EventTime TYPE timestamp,
UserName TYPE uname,
VendorNumber TYPE lifnr,
PurchaseOrderNumber TYPE ebeln,
InvoiceAmount TYPE wrbtr,
PostingDate TYPE budat,
PaymentDueDate TYPE faedt,
PaymentBlockReason TYPE rstgr,
ClearingDate TYPE augdt,
END OF ty_event_log.
DATA: gt_event_log TYPE TABLE OF ty_event_log,
gs_event_log TYPE ty_event_log.
DATA: lt_bkpf TYPE TABLE OF bkpf,
ls_bkpf TYPE bkpf,
lt_bseg TYPE TABLE OF bseg,
ls_bseg TYPE bseg.
DATA: lt_rbkp TYPE TABLE OF rbkp,
ls_rbkp TYPE rbkp.
*&---------------------------------------------------------------------*
*& Selection Screen
*&---------------------------------------------------------------------*
SELECT-OPTIONS: s_bukrs FOR bkpf-bukrs OBLIGATORY,
s_gjahr FOR bkpf-gjahr OBLIGATORY,
s_budat FOR bkpf-budat.
PARAMETERS: p_fpath TYPE string OBLIGATORY DEFAULT '/usr/sap/tmp/invoice_events.csv'.
*&---------------------------------------------------------------------*
*& Start of Program Logic
*&---------------------------------------------------------------------*
START-OF-SELECTION.
" Select FI Invoices (e.g., Doc Type KR)
SELECT * FROM bkpf INTO TABLE lt_bkpf
WHERE bukrs IN s_bukrs
AND gjahr IN s_gjahr
AND budat IN s_budat
AND blart = 'KR'.
" Select MM Invoices
SELECT * FROM rbkp INTO TABLE lt_rbkp
WHERE bukrs IN s_bukrs
AND gjahr IN s_gjahr
AND budat IN s_budat.
* --- Process FI Invoices ---
LOOP AT lt_bkpf INTO ls_bkpf.
CLEAR gs_event_log.
gs_event_log-InvoiceNumber = ls_bkpf-belnr.
gs_event_log-PostingDate = ls_bkpf-budat.
SELECT SINGLE * FROM bseg INTO ls_bseg
WHERE bukrs = ls_bkpf-bukrs
AND belnr = ls_bkpf-belnr
AND gjahr = ls_bkpf-gjahr
AND koart = 'K'. " Vendor Line Item
IF sy-subrc = 0.
gs_event_log-VendorNumber = ls_bseg-lifnr.
gs_event_log-InvoiceAmount = ls_bseg-wrbtr.
gs_event_log-ClearingDate = ls_bseg-augdt.
" Calculate Due Date
CALL FUNCTION 'DETERMINE_DUE_DATE'
EXPORTING
i_bseg = ls_bseg
IMPORTING
e_faedt = gs_event_log-PaymentDueDate.
ENDIF.
" Activity: Invoice Data Captured
gs_event_log-Activity = 'Invoice Data Captured'.
CONVERT DATE ls_bkpf-cpudt TIME ls_bkpf-cputm INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = ls_bkpf-usnam.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Parked (if BSTAT = 'V')
IF ls_bkpf-bstat = 'V'.
gs_event_log-Activity = 'Invoice Parked'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Posted
gs_event_log-Activity = 'Invoice Posted'.
CONVERT DATE ls_bkpf-budat TIME ls_bkpf-cputm INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = ls_bkpf-usnam.
APPEND gs_event_log TO gt_event_log.
" Activity: Invoice Cleared
IF ls_bseg-augbl IS NOT INITIAL.
gs_event_log-Activity = 'Invoice Cleared'.
CONVERT DATE ls_bseg-augdt INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = ls_bseg-usnam_cl.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Becomes Overdue
IF gs_event_log-PaymentDueDate IS NOT INITIAL AND gs_event_log-PaymentDueDate < sy-datum AND ls_bseg-augbl IS INITIAL.
gs_event_log-Activity = 'Invoice Becomes Overdue'.
CONVERT DATE gs_event_log-PaymentDueDate INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = 'SYSTEM'.
APPEND gs_event_log TO gt_event_log.
ENDIF.
" Activity: Invoice Reversed
IF ls_bkpf-stblg IS NOT INITIAL.
DATA: ls_rev_bkpf TYPE bkpf.
SELECT SINGLE budat, usnam FROM bkpf INTO ls_rev_bkpf
WHERE belnr = ls_bkpf-stblg AND bukrs = ls_bkpf-bukrs AND gjahr = ls_bkpf-gjahr.
IF sy-subrc = 0.
gs_event_log-Activity = 'Invoice Reversed'.
CONVERT DATE ls_rev_bkpf-budat INTO TIME STAMP gs_event_log-EventTime TIME ZONE sy-zonlo.
gs_event_log-UserName = ls_rev_bkpf-usnam.
APPEND gs_event_log TO gt_event_log.
ENDIF.
ENDIF.
ENDLOOP.
* --- NOTE: The logic for MM invoices (from lt_rbkp) would be similar, joining RBKP with RSEG.
* --- NOTE: The logic for Payment Blocks and Workflow events requires reading change documents (CDHDR/CDPOS)
* --- or custom workflow tables. Below is a conceptual example for payment blocks.
* --- Conceptual Example for 'Payment Block Set' / 'Released' using Change Docs
* DATA: lt_cdhdr TYPE TABLE OF cdhdr, ls_cdhdr TYPE cdhdr,
* lt_cdpos TYPE TABLE OF cdpos, ls_cdpos TYPE cdpos.
* SELECT * FROM cdhdr INTO TABLE lt_cdhdr
* WHERE objectclas = 'BELEG' AND objectid IN (SELECT belnr FROM bkpf WHERE ...).
* LOOP AT lt_cdhdr.
* SELECT * FROM cdpos INTO TABLE lt_cdpos
* WHERE changenr = ls_cdhdr-changenr AND tabname = 'BSEG' AND fname = 'ZLSPR'.
* LOOP AT lt_cdpos.
* "... logic to create 'Payment Block Set' (if VALUE_NEW is not blank)
* "... or 'Payment Block Released' (if VALUE_NEW is blank) events.
* ENDLOOP.
* ENDLOOP.
* --- Conceptual Example for Workflow events ('Sent For Approval', 'Approved', 'Rejected')
* --- This part MUST be customized based on your specific workflow implementation (e.g., OpenText VIM, SAP WF).
* --- You would query the relevant workflow tables or status change tables here.
*&---------------------------------------------------------------------*
*& Write to File
*&---------------------------------------------------------------------*
END-OF-SELECTION.
DATA: lv_string TYPE string,
lv_header TYPE string.
" Create Header
lv_header = 'InvoiceNumber;Activity;EventTime;UserName;VendorNumber;PurchaseOrderNumber;InvoiceAmount;PostingDate;PaymentDueDate;PaymentBlockReason;ClearingDate'.
OPEN DATASET p_fpath FOR OUTPUT IN TEXT MODE ENCODING UTF-8.
IF sy-subrc = 0.
TRANSFER lv_header TO p_fpath.
LOOP AT gt_event_log INTO gs_event_log.
CONCATENATE gs_event_log-InvoiceNumber
gs_event_log-Activity
gs_event_log-EventTime
gs_event_log-UserName
gs_event_log-VendorNumber
gs_event_log-PurchaseOrderNumber
gs_event_log-InvoiceAmount
gs_event_log-PostingDate
gs_event_log-PaymentDueDate
gs_event_log-PaymentBlockReason
gs_event_log-ClearingDate
INTO lv_string SEPARATED BY ';'.
TRANSFER lv_string TO p_fpath.
ENDLOOP.
CLOSE DATASET p_fpath.
ELSE.
MESSAGE 'Error opening file.' TYPE 'E'.
ENDIF.