
简介围绕SAP FI模块清账流程整理的一份专题课件面向财务顾问、实施人员及会计信息化学习者帮助梳理未清项管理、手工与自动清账、支付处理及已清项重置等核心知识。包内为1个PPT文件压缩后约1.12MB内容以概念讲解和流程要点呈现便于课堂培训或自学时按章节查阅。已有4628人学习下载。课件从开放项目、账户间清账与同一账户内清账的差异切入延伸到分配字段、检索码、容差组、进项与出项支付及清账后冲销前的重置操作并配有客户行项目、清账凭证等要点提示。适合希望系统理解SAP清账逻辑、补齐FI操作细节的读者用作知识框架与复习提纲。1. 未清项为什么卡住归档清账到底在“清”什么在 SAP 财务模块里一张发票过账之后真正让它“消失”的并不是付款而是清账。很多人默认付款凭证一过账应收应付就自动干净了——事实正好相反付款只是产生了一条新的贷方行项目原来那条借方未清项照样躺在系统里直到清账动作把两条记录“配对”上它才会从 Open Item 变成 Cleared Item。这就是为什么月末跑账龄分析时钱明明已经收到客户余额还是挂着凭证也没法归档。清账表面上只是一个打勾动作底层却是一次凭证生成、状态迁移和索引匹配的组合操作。搞懂它你才能解释清楚三个反复出现的问题为什么有的清账在报表里看不见、为什么自动清账总漏掉几条、为什么已清项不能直接冲销。这三件事背后是同一套机制。2. 清账的两种形态为什么 Post with clearing 有行项目、Account clearing 没有清账在系统里从来不是“删除原凭证”这一点先要钉死。原发票凭证一旦过账就是账本的一部分谁也不能改它。所谓清账是在原凭证的行项目上写两个字段——清账日期和清账凭证号让这条行项目的状态从“未清”翻转为“已清”然后再决定要不要额外生成一张凭证来承载差额。这两种形态的差异根子就在这里。2.1 Post with clearing差额需要一张新凭证来承载账户间清账Post with clearing通常发生在不同科目、不同账户类别甚至不同币种之间。比如用银行存款清掉客户应收借方是银行科目、贷方是客户应收两边科目不同借贷虽然平衡但凭证头必须是一张新凭证因为原发票凭证里根本没有银行那一行。系统做的事分两步先给被清项打上清账标记再生成一张清账凭证Clearing Document把这次的对手方分录装进去。原发票的行项目内容一个字符都不动只是多了清账日期和清账凭证号。 清账过账的示意逻辑改状态 生成新凭证而不是删除或修改原凭证 DATA: lv_clear_doc TYPE bkpf-belnr, lv_bukrs TYPE bkpf-bukrs. 第一步在原未清项上写入清账标记 augbl 清账凭证号augdt 清账日期augcp 清账过账日期 UPDATE bseg SET augbl lv_clear_doc augdt sy-datum augcp sy-datum WHERE bukrs lv_bukrs AND belnr lv_invoice_no 原发票凭证号 AND gjahr lv_gjahr AND buzei lv_item_no. 原发票行号 第二步仅 post with clearing 才生成新凭证 借贷差额由这张新凭证承载原凭证保持只读 具体过账走标准过账接口此处只表达调用时机 IF lv_clearing_type POST_WITH_CLEARING. PERFORM post_clearing_document USING lv_bukrs lv_clear_doc. ENDIF.代码里最关键的参数是augbl和augdt前者记录“我被哪张凭证清掉的”后者记录“什么时候清掉的”。有了这两个字段任何一条行项目都能反查出自己的清账凭证这也是后面做重置和冲销的唯一入口。belnr、gjahr、buzei三个字段一起定位到唯一一条行项目缺一个就会误伤同号的其他凭证。注意第二步的生成动作是可选的。这就是两种清账形态的分水岭。2.2 Account clearing净额为零所以不需要行项目同一账户内清账Account clearing处理的是另一种场景一张未清发票和一张相关的贷项凭证或者一笔预付冲应收它们挂在同一个客户或同一个总账科目下借贷方向相反、金额可以对上。清完之后这个账户下的净额变化为零系统没有任何差额需要往新凭证里塞。既然没有差额要承载就没有生成凭证的理由。系统只做第一步——把两条行项目的清账字段写上让它们同时从“未清”翻成“已清”。结果就是你在凭证流里看不到一张新的清账凭证报表上也没有新的行项目只有原凭证的状态变了。这就是“Account clearing 没有 line item 显示”的真正原因不是什么特殊配置而是账务逻辑上根本不需要。理解这一点之后很多看似玄学的现象就通了为什么部分清账在报表里看不到明细因为部分清账本质上也是同账户内的净额处理系统只改状态、不生成承载凭证想看细节只能进凭证行项目里翻。2.3 部分清账和跨币种清账同一套机制的两种边界用法部分清账Partial Clearing指一张发票只被清掉一部分金额剩余部分继续挂在未清项里。系统在处理时会把原发票“清掉”再按未清余额生成一张新的未清项所以你在余额报表上看到的是新凭证而不是原发票被改小了。这跟“修改原凭证”是两回事前者是追加后者在账务系统里根本不允许。跨币种清账则把差额问题推到汇率上。用美元科目清欧元应收即使金额看起来对得上按清账日的汇率折算后必然产生差额这部分走 Exchange Rate Differences同样需要一张清账凭证来承载。也就是说跨币种场景基本都会退化成 Post with clearing 的形态因为差额客观存在。提示判断一次清账会不会产生新凭证看的是清完之后这个账户的净额是否为零。净额为零走 Account clearing净额不为零走 Post with clearing。3. 配对靠什么Assignment 字段、Sort key 与自动清账的匹配算法清账的难点从来不是“打标记”而是“怎么知道这两条记录该配成一对”。金额相同、日期相近的未清项可能有一大把系统必须靠一组预先埋好的索引字段来做匹配否则自动清账就是随机配对。3.1 Assignment 字段18 个字符装下整条业务线索分配字段Assignment Field挂在行项目层面最长 18 个字符。业务上常见的做法是把最多 4 段信息拼进这一个字段比如单据号、公司代码、年度、行号拼成一条能唯一定位的字符串。它之所以重要是因为它是自动清账最主要的匹配依据之一。18 个字符这个长度限制不是随手定的它对应的是旧式单据编号体系的容量上限塞得下大多数业务单据号又足够短到能做索引。血泪经验是一旦业务部门要求的拼接规则超过 18 位后半截会被静默截断匹配就永远对不上而且系统不会给你任何报错。 过账时给行项目写分配字段的示意 拼接规则单据号(10) 年度(4) 行号(3)总计 17 位留 1 位余量 DATA(lv_assign) |{ lv_bill_no }{ lv_gjahr }{ lv_item_no }|. 长度校验必须自己做系统不会因为超长而报错 IF strlen( lv_assign ) 18. lv_assign substring( val lv_assign len 18 ). 截断是坑能提前拦就提前拦 ENDIF. ls_item-zuonr lv_assign. zuonr 即分配字段zuonr是分配字段在行项目表里的技术字段名strlen判长这一步很多人省掉结果就是前半年跑得好好的某天单据号位数进位之后自动清账大面积失效排查起来要翻几百条行项目才能定位。3.2 Sort key决定过账时往 Assignment 里填什么检索码Sort Key容易和分配字段搞混但它们的层级完全不同。分配字段是行项目上的一个值检索码则是主数据层面的一项配置——配在客户或供应商主数据上决定“过账的时候把哪些字段自动填进分配字段”。换句话说Sort Key 是规则Assignment 是结果。你在主数据里把 Sort Key 设成对应采购订单号那以后这个供应商的每笔过账分配字段会自动带出 PO 号设成成本中心就带成本中心。它同样可以用在手工清账时做检索输入检索码就能把相关未清项筛出来。这个设计动机很清楚清账匹配需要业务语义而业务语义在不同企业、不同供应商之间差别很大硬编码一套规则必然不够用。把它下沉成主数据配置等于让每个供应商、每个客户自己声明“我这类单据该怎么被找到”。3.3 自动清账先分组再在组内做借贷对冲自动清账的前提条件有三条一是必须基于未清项open item basis二是要清账的账户必须事先定义三是匹配规则要能落到具体字段上。三条缺一条自动清账就跑不起来或者跑出来是错的。有几类行项目是明确不参与自动清账的批注项noted items、统计性过账、预付款、汇票以及带预提税分录的行项目。原因不难推这些行项目的金额或状态本身就不代表一笔待结算的债权债务硬把它们配对进去只会把账搅乱。在实现上自动清账的典型思路是按匹配键分组组内做借贷对冲对不平的留给人工。银行对账就是最典型的应用场景——未达账项要用自动清账处理匹配键通常就是那个“账号”性质的标识。 自动清账的匹配骨架示意 匹配键 分配字段 金额绝对值 币种保证同键的条目才有配对资格 LOOP AT lt_open_items INTO DATA(ls_item). DATA(lv_key) |{ ls_item-zuonr }/{ ls_item-dmbtr }/{ ls_item-waers }|. APPEND ls_item TO lt_bucket[ lv_key ]. 同键条目落进同一个桶 ENDLOOP. LOOP AT lt_bucket INTO DATA(ls_bucket). 桶内借贷合计相等才允许清账否则整桶挂起转人工 IF ls_bucket-debit_total ls_bucket-credit_total. PERFORM clear_bucket USING ls_bucket. ELSE. APPEND ls_bucket TO lt_manual_queue. ENDIF. ENDLOOP.这里zuonr分配字段、dmbtr本位币金额、waers币种三个字段共同构成匹配键。少放金额会导致一张 1000 的发票和两张 500 的发票被错误配对少放币种跨币种条目会被算进同一个桶借贷永远对不平。lt_manual_queue是兜底出口自动清不掉的必须落到人工队列里否则这些未清项会安静地烂在系统里直到下个月对账才炸出来。4. 收付款清账一笔 incoming payment 在系统里走了哪几步收付款清账是清账机制最高频的落地场景。应收账款里的 incoming payment 清的是未清的借方金额应付账款里的 outgoing payment 清的是未清的贷方金额方向相反流程骨架基本一致。4.1 凭证头的三段录入Payment Header、Bank Data、Open Item Selection手工支付流程的第一步是录凭证头这里面其实分了三块信息。Payment Header 装的是付款本身的信息付款日期、金额、收付方Bank Data 装的是银行侧信息银行科目、账户、起息日Open Item Selection 则是决定这次要清哪些未清项。三段分开录入不是形式主义是因为它们的来源和校验规则完全不同。银行数据来自对账单或银行接口错了要退回银行侧核对未清项选择来自系统内部的未清项清单错了要退回业务侧确认。把它们混在一个界面里出问题时就分不清责任边界。未清项被选中之后系统会把金额按选中项分配这一步就是清账的实际动作。选中的项会被打上清账标记没选中的继续挂着。4.2 模拟过账为什么这一步不能跳清账涉及的操作不是单表的它要同时改多条未清项的状态、生成一张清账凭证、可能还要算现金折扣和汇率差异、检查容差是否超限。任何一步出问题写库之后再回滚的成本极高——凭证号已经占掉序列号出现空洞财务对账时又要解释半天。模拟Simulate做的事就是把这套逻辑在内存里完整跑一遍但不写库把结果摊给你看会清掉哪几条、会生成什么分录、折扣算出来多少、有没有超出容差。这一步是黑匣子变透明的地方也是踩坑最少的人往往最重视的一步。 收付款清账后的分录形态示意 场景客户应收 1000实付 980差额 20 落在容差内 借银行存款 980 借现金折扣调整容差内自动 20 贷应收账款 1000 三个科目缺一不可 银行科目来自 Bank Data 中的银行账户配置 折扣科目来自容差组的自动过账配置 应收科目来自被选中的未清项分录里的银行科目就是系统配置中用于收付款的那个总账科目。它不是在清账那一刻临时决定的而是在录入 Bank Data 时就已经绑定了。容差内产生的折扣差额会自动过账到折扣调整科目容差外则不会自动过账直接拦下来转人工——这条分界线由容差组决定下一章展开。4.3 清账凭证与未清项的对应关系一笔收付款清账完成后你能在系统里查到的东西有三样原未清项上多出来的清账日期和清账凭证号一张新的清账凭证里面装着银行侧和折扣侧的分录以及更新后的余额。这三样东西通过清账凭证号串在一起构成了完整的凭证链。账龄分析跑的是未清项清单所以清掉的项会立刻从报表上消失凭证流查的是凭证之间的引用关系所以清账凭证和原发票会互相关联。这两个视图看起来描述的是同一件事实际查的是两套数据混着看就会产生“明明清了怎么报表上还有”的错觉。5. 清账避坑从差额容差到重置已清项的排查清单清账出错的表现形式非常集中要么清不掉要么清错了要么清完改不了。这三类问题背后分别对应配置、数据和时序下面按现象、原因、解决三层拆开讲。5.1 差额去哪了Payment Difference 与 Exchange Rate Difference 的分流付款金额和发票金额对不上是常态客户会因为折扣、运费、质量扣款少付一点。系统允许在过账时定义一个可容忍的误差范围这个范围就是容差清账产生差额时按它决定是自动处理还是拦下来。容差组的挂载点有三处用户员工主数据、总账科目主数据、客户或供应商主数据。定义步骤是先建容差组再按组键4 位字母、公司代码、币种的组合来定义具体阈值最后把容差组分配给这三类对象中的一类或多类。组键必须是 4 位字母这个限制看着琐碎实际是给不同业务线留命名空间的——按业务类型分段比一长串描述性名称好维护得多。分配对象不同生效范围也不同挂在用户上只影响这个人的操作挂在科目上影响所有走这个科目的清账挂在客户供应商上则跟着这个往来单位走。容差内的差额系统会自动过账“现金折扣调整”和“未授权的客户扣款”这两类分录超出容差的一律不自动过账必须人工处理。这条规则的设计意图很明确小额差异高频且无害自动化能省大量人力大额差异低频且可能是错的必须有人看一眼。-- 排查用找出从未被清账、且没有分配字段的客户未清项 -- 这类条目是自动清账漏清的典型嫌疑对象 SELECT kunnr, belnr, gjahr, buzei, dmbtr, zuonr, augdt FROM bsid WHERE bukrs 1000 AND augdt 00000000 -- 清账日期为空说明从未被清 AND zuonr -- 分配字段为空自动匹配无从下手 ORDER BY kunnr, belnr;augdt 00000000是判断未清的标准写法日期字段在未赋值时就是这个零值。zuonr 筛出来的是没有分配字段的条目它们几乎不可能被自动清账命中只能靠人工按金额和日期去凑。5.2 五条踩坑记录踩坑一清账后想冲销原发票系统直接拒绝。现象是选中原发票做冲销报错说该凭证已被清账不允许 reversal。原因是已清项的行项目上挂着清账凭证号直接冲销会导致清账凭证变成孤儿借贷关系断裂。正确做法是先做重置Reset把清账数据从行项目上移除让状态回到未清然后再冲销。顺序反了系统不会给你后悔药。踩坑二自动清账跑完账单上还剩一大片。现象是自动清账日志显示处理成功但未清项清单几乎没变。原因通常是两条分配字段为空或者主数据上的 Sort Key 没配导致过账时压根没填。解决是从主数据入手把 Sort Key 配成能带出业务单号的字段再对历史数据做一次批量补填之后重跑。踩坑三部分清账之后报表上看不到剩下的余额。现象是余额报表里的金额和凭证里的明细对不上。原因是部分清账把原发票清掉、按余额生成了新凭证而新凭证的展示逻辑和原发票不同。解决是查凭证行项目而不是只看余额汇总余额是净额视图明细才是事实。踩坑四跨币种清账后凭空多出一笔差异。现象是清账凭证里出现一条没有业务来源的分录。这多半是汇率差异属于正常机制而不是报错。清账日的汇率和原发票过账日的汇率不同折算差额必须落到汇率差异科目上否则借贷不平。解决是确认汇率差异科目配置正确而不是试图消掉这条分录。踩坑五容差外付款被系统卡住业务方以为系统坏了。现象是录入付款后无法保存提示差额超出允许范围。原因是容差组没分配给当前用户或当前客户或者分配了但组键、公司代码、币种三者没有完全匹配上。解决是按这三个维度逐个核对容差组定义注意币种维度最容易被忽略——本币配了不代表外币也配了。5.3 Reset 的时序为什么必须先擦清账数据再冲销重置已清项Reset Cleared Items的动作顺序是有严格要求的先把清账数据从行项目上移除包括清账日期、清账凭证号、清账过账日期让行项目回到未清状态之后才允许对原凭证做冲销。这个顺序不是实现上的随意选择。清账数据本质上是原凭证和清账凭证之间的双向引用如果先冲销原凭证清账凭证那条引用就指向了一个不存在的对象系统要么报错要么在数据层留下悬空引用。先在行项目侧把引用擦干净两边就都回到了可以独立处理的状态。还要注意清账凭证和统计性科目不能直接做冲销必须先重置。统计性科目本身不参与余额计算但它的清账状态一样会阻挡冲销动作这一点经常被忽略导致排查时在余额上兜圈子。6. 为什么清账不直接删除状态机、凭证链与不可回滚的账把清账拆到这里会发现整套机制背后只有一条铁律账本只追加不修改。清账不打删除标记、不改金额、不动原凭证的任何业务字段它只是在行项目上追加两个状态字段必要时再追加一张凭证。这个选择牺牲了“干净”——系统里会长期存在大量已清项和被引用关系换来的是可审计、可追溯、可回滚到一个确定状态。做法数据表现可追溯性出错后的处理直接删除未清项表里干净余额正确断链查不到谁清的无法恢复只能补录状态标记 清账凭证保留全部行项目与引用凭证链完整可反查Reset 后可重新处理这个取舍也解释了开头那个现象为什么未清项会阻止凭证归档。归档的前提是数据闭环——一条行项目如果还挂着未清状态说明它的业务生命周期没走完此时归档等于把一个悬而未决的状态冻结进历史。系统宁可让它留在生产库里也不允许带着未结状态进归档。从实现角度看清账是一个典型的状态机未清 → 已清 → 重置后回到未清。每一次状态跃迁都必须留下凭证或字段作为证据且跃迁方向可逆、痕迹不可擦。这个模型的好处是任何时点的账面状态都可以从初始凭证加一串状态变更重放出来坏处是链路长、依赖多一个字段没配上就会在某个分支上卡住前面那些踩坑记录基本都是这个代价的具体表现。验证一套清账逻辑是否正确我一般会用三个动作交叉检查清完之后查行项目的清账日期和清账凭证号是否都填上了查清账凭证的借贷是否平衡、对方科目是否落在预期科目上做一次 Reset 再重新清账看能不能复现同样的结果。三个动作都过才算这套配置真的稳。从那以后我每次碰清账相关的配置都强制先把“清完之后能不能重置、重置完能不能重清”这条路走一遍再交给业务用。账务系统里最贵的不是写错是写错了还退不回去。希望帮到你。本文还有配套的精品资源点击获取