☰
SAP现金销售一票制配置:BV订单、Z01出库与VPRS避坑
2026/10/27 5:54:00 网站建设 项目流程

简介:《SAP现金订单业务处理流程V2.0》面向SAP SD顾问、销售、仓库及财务人员,聚焦现金销售订单从创建、发货过账到开票清账的标准化操作与系统配置,帮助读者理解现金销售如何从标准销售中分离并实现自动化处理。文档以印度子公司现金销售场景为背景,依次说明订单类型BV、行项目类别BVN、计划行类别ZP、移动类型Z01、定价过程ZKD04/ZKD05、开票类型BV及现金科目确定等要点,并对比传统手工记录方式的差异。资源包为1个PDF文件,约756KB,篇幅紧凑,目录覆盖目的、适用范围、业务操作与配置实现,便于按模块查阅。已有101人学习,适合作为SAP现金销售流程梳理、方案编写和业务培训的参考材料,也可用于对照系统配置检查关键参数。

1. 一手交钱一手交货:现金销售为什么要把「发出商品」整条摘掉

接手这套 SAP 现金销售业务处理流程 V2.0 时,最先让我警觉的不是那堆配置,而是文档第 5 节的一句话:现金业务不需要发出商品,出库直接转成本,开票计收入。某海外销售子公司上线第二个月,财务对账时就抓到一批货「钱已经收了、成本还挂在发出商品上」,翻凭证流才发现出库那一步走的还是标准 601 移动类型。这就是这条链路最容易出问题的地方:订单类型 BV、行项目类别 BVN、计划行类别 ZP、移动类型 Z01 这一整套配置,不是把标准销售流程调快一点,而是把发出商品这个中间科目从业务链路里彻底移除。这份资源适合三类人:做 SD 与 FI 交界配置的顾问、要在柜台落地一手交钱一手交货的录单文员、以及被「开票后成本又结了一次」折磨过的财务。

2. 订单类型 BV 的三道强制开关:立即交货、参考订单开票与计划行

标准销售流程里,录单文员在 VA01 存完订单,仓库那边 VL01N 建交货单、VL02N 拣配过账,开票再走 VF01 参考交货单,是一个三段式的流程。现金销售要反映的是柜台收钱、仓库放货、当场开票的物理现实,所以这套流程必须改成「存单即交货、开票认订单」。文档第 7.1 到 7.3 节写的订单类型 BV、行项目类别 BVN、计划行类别 ZP,其实就是分别负责实现这三个动作。顺序不能乱,先有订单类型上的立即交货,再有行项目上的开票相关性,最后才有计划行上的移动类型落点。

2.1 订单类型 BV:勾上「立即交货」才有一单到底

文档对订单类型 BV 的描述只有一句「与常用订单类型不同的是,立即交货要勾选」,这一句话背后的分量在于它会改变整个操作节奏。配置路径是销售与分销 → 销售凭证 → 销售凭证抬头 → 定义销售凭证类型(事务码 VOV8),复制标准订单类型新建 BV,在「交货」相关的控制字段里把「立即交货」标识打开。打开以后,VA01 保存销售订单的同时系统就会按订单类型分配的交货类型自动创建交货单,仓库只需要在 VL06F 或 VL10A 里拣配发运,录单文员不用再手工建一张交货单。

配置项事务码取值直接后果
订单类型VOV8BV柜台录单入口,独立于标准销售
立即交货VOV8 字段勾选保存即生成交货单
交货类型分配OVLK 分配关系LF 类交货类型决定拣配与发货过账方式
建议开票类型VOV8 字段BV订单转发票时的默认类型
定价过程OVKK 确定过程ZKD04订单侧不挂应计项

坑在分配关系上。只勾立即交货、却忘了给订单类型 BV 分配有效的交货类型,保存订单时会直接弹「交货类型未确定」;如果物料主数据销售视图里「允许交货」没打开,订单能存下去但交货单创建失败,状态栏也不会给显眼的红灯,得靠 VBFA 凭证流才看得出来。我在测试机上一般会先造一张只有一行、数量为 1 的订单,存完立刻 VA03 看状态栏「交货」那一栏有没有变成 C,这是最快的自检。

2.2 行项目类别 BVN:把开票参考从交货单切到订单

这一步是整个方案里最反直觉的地方。标准行项目类别(比如 TAN)用的是交货相关开票,意思是发票必须参考已经过账的交货单,金额和数量从交货里带。现金销售要的是「发票打印在拣配和发货过账之前完成」,客户拿着发票去柜台交钱,所以发票只能参考订单。文档写「参考订单出具发票,而不是交货单」,落到配置就是事务码 VOV7 里行项目类别的开票相关字段设置为订单相关开票,并把默认开票类型指向 BV。

这个改动会连锁影响三个地方。第一,开票数量取订单数量而不是交货数量,如果实际发货少于订单,需要靠交货单冻结或后续冲销来兜底;第二,订单相关开票时,系统仍然会去定价过程里找成本条件类型 VPRS,这就是第 4 章必须删 VPRS 的根源,两处改动是一对,改了一处不改另一处必然出问题;第三,发票的开票日期可以早于发货过账日期,财务必须接受「票已开、货未过账」这种短暂的状态,靠后台定时过账把时间窗压到一天以内。

还有一个容易忽略的字段:行项目类别的「出具发票类型」。如果这里留空,VF01 参考订单开票时会走默认确定逻辑,可能带出 F2 而不是 BV,结果就是拿标准发票类型去跑现金业务的定价过程和科目确定,报错信息还特别绕。我一般会把这个字段显式写死成 BV,并且在行项目类别的文本描述里写清楚用途,免得下一个人复制时又拿去当通用类别。

2.3 计划行类别 ZP:出库动作落在哪个移动类型上

计划行类别决定交货日期、可用性检查和发货过账用的移动类型。文档写「复制计划行 CP 创建一个新的计划行 ZP,复制 601 创建一个新的移动类型 Z01」,这里的 CP 是标准的交货相关计划行,复制过来以后把移动类型字段从 601 改成 Z01,其余如「交货相关」「可用性检查」「传输需求」保持和源计划行一致。配置入口是销售与分销 → 销售凭证 → 计划行 → 定义计划行类别(事务码 VOV6)。

为什么不直接改标准 601?因为标准 601 是全公司共用的,很多标准销售出库都指着它,直接改它的科目修改码会让所有传统业务的出库凭证一起走到主营业务成本,等于把发出商品那套账全打翻。复制 601 得到 Z01、复制 602 得到 Z02 作为冲销,是最低风险的改法。顺序上我建议先建移动类型和科目修改码(第 3 章),再回头建计划行类别 ZP 并引用 Z01,最后把 ZP 分配给行项目类别 BVN。倒过来做也能建,但 ZP 引用一个不存在的移动类型,保存时会报「移动类型 Z01 不存在」,反而要多跑一趟。

到这一步,订单侧的三道开关就齐了:订单类型 BV 负责一单到底,行项目类别 BVN 负责发票认订单,计划行类别 ZP 负责出库走自定义移动类型。真正决定钱怎么记的,是下一章的移动类型和科目确定。

3. 移动类型 Z01 与 OBYC 科目确定:让出库那一步直接进主营业务成本

标准业务的会计逻辑是「出库挂发出商品、开票再结成本」,这套做法是为跨月开票设计的:出库和开票不在同一个月,为了保证收入和成本配比,先在出库时把库存商品转到发出商品,等开票那个月再把成本和收入一起确认。现金销售没有跨月这回事,一手交钱一手交货,物权当场转移,再挂发出商品就是账实不符——货已经卖掉了,资产负债表上还躺着「发出商品」,月底存货虚增、成本滞后,毛利在两个月的报表上都不对劲。

环节传统业务分录现金业务分录
出库借 发出商品 / 贷 库存商品借 主营业务成本 / 贷 库存商品
开票借 应收账款、主营业务成本 / 贷 发出商品、主营业务收入、销项税借 现金 / 贷 主营业务收入、销项税

表格左边那两行是标准配置的默认行为,右边两行才是现金销售要的结果。差异只有三处:出库的借方科目、开票的贷方科目、以及不再有发出商品这个中间站。落到 SAP 里,前两处靠自定义移动类型加 OBYC,第三处靠行项目和定价过程不触发应计。

3.1 OMJJ 复制 601 得到 Z01,602 得到 Z02

事务码 OMJJ 是移动类型的配置入口,进去以后用「复制」功能把 601 复制成 Z01,把 602 复制成 Z02。601 的标准含义是「交货的发货过账」,602 是它的冲销。复制完要改三个字段:移动类型的科目修改码改成 Z11(这是自定义的修改码,用来把这类过账从标准业务里剥离出来)、价值串和消耗/收货标识沿用源类型、以及 Z01 的「冲销移动类型」字段填 Z02。

Z11 这个科目修改码的建立顺序常被搞反。它不是随手敲上去就生效的,得先在 OMJJ 的科目修改码维护界面(或者对应的配置视图里)新增一条 Z11 的条目,让它成为一个合法取值,之后在 Z01 上才能引用,最后 OBYC 的事务键 GBB 里才会出现 Z11 这一行可供配置。顺序是「先建修改码 → 再挂到移动类型 → 最后配科目」,任何一步颠倒,后面都会卡住。

还有一处细节:Z02 的科目修改码也应该设成 Z11,而不是沿用 602 原本的修改码。冲销时系统是按 Z02 的科目修改码去找科目的,如果 Z02 走的是另一个修改码,冲销凭证记回来的科目和出库时的科目不同,库存是回来了,主营业务成本那笔没被反向冲掉,月末成本就会虚高。文档只写了「顺便复制 602 创建一个新的移动类型 Z02 用来冲销」,没写修改码这一笔,这是我实际复现时踩过的地方。

3.2 OBYC 里 GBB + Z11 与评估级别 3000 的绑定

科目确定在事务码 OBYC 里做,事务键选 GBB(库存过账的抵销科目),账户修改填 Z11,评估级别填 3000,然后在对应的科目栏里填主营业务成本科目。文档那句「只要物料的评估级别是 3000 的话,都可以直接结转到主营业务成本」,说的就是这个绑定关系:所有评估类为 3000 的物料,出库走 Z01 时借方都会落到这条科目确定上。

这句话的边界必须说清楚:评估级别是物料主数据会计视图里的字段,一个公司通常会有好几个评估类,3000 只是其中之一,半成品、原材料、外购商品往往各有各的类。只配 3000 意味着只有评估类为 3000 的物料能正确结转,其他物料走 Z01 时找不到科目确定,过账直接报错,或者更糟——被系统退回标准 GBB 的默认配置,悄悄记到某个谁都没注意的科目上。上线前我一般会把公司用到的评估类和物料组拉一张清单,逐个核对 OBYC 里 GBB + Z11 是否都有对应行,宁可多配几行也不留空。

检查项事务码看什么
移动类型科目修改码OMJJZ01、Z02 是否都是 Z11
冲销关系OMJJZ01 的冲销移动类型是否为 Z02
科目确定OBYC / GBB修改码 Z11 + 评估类是否配到主营业务成本
物料评估类MM03 会计视图是否为 3000 或已单独配置的类

出库凭证的方向是借主营业务成本、贷库存商品。验证方式很简单:MB51 按移动类型 Z01 查物料凭证,点进会计凭证,看行项目里借方科目是不是主营业务成本。如果这里显示的还是发出商品,先查物料评估类,再查 Z01 的科目修改码,最后查 OBYC 里那行组合有没有填科目,三步以内基本能定位,不需要去翻标准代码——SAP 的科目确定像个黑匣子,但它出问题的入口其实只有这三个。

4. 定价过程 ZKD04 与 ZKD05:VPRS 那条最容易出问题的地方

定价过程这条线是整套方案里最容易被复制粘贴搞坏的部分。文档第 7.5 节的做法是:复制 ZKD01 得到 ZKD04 给订单用,删掉应计项;再复制 ZKD04 得到 ZKD05 给开票用,删掉 VPRS。两处删除,方向是一致的——不让发票再碰成本。删不干净的结果,轻则账户确定报错,重则同一笔业务的主营业务成本被结两次。

4.1 ZKD04:先把应计项从定价过程里移除

传统业务因为有发出商品这个中间站,需要在出库和开票之间做成本配比,所以定价过程里会带应计类条件类型,开票时由它触发应计凭证,把成本挂到发出商品上,等下一张凭证再转出去。现金业务没有中间站,出库那一刻成本就已经落到主营业务成本了,应计项再跑一遍就是空转,多出来的应计行还会把已经结转的成本抵掉一部分。

操作入口是销售与分销 → 基本功能 → 定价 → 定价控制 → 定义并分配定价过程(事务码 OVKK)。复制 ZKD01 新建 ZKD04,在定价过程的条件类型清单里把应计类的那几行删掉,同时检查列里的步骤号有没有断档。定价过程是按从/到步骤号顺序执行的,删行以后如果后面某个条件类型的「需求」例程里引用了被删的步骤号,运行时会静默跳过,定价结果少一块金额,很难查出来。稳妥的做法是删完以后用一个标准订单跑一遍定价分析(VA03 里看条件页签),确认小计和应计行都对得上。

ZKD04 建完要分配给订单类型 BV 的定价过程确定。这一步如果不做,订单会继续用默认的定价过程,应计项还在,前功尽弃。

4.2 ZKD05 与 VPRS:不删就等着账户确定报错

复制 ZKD04 得到 ZKD05,分配给开票类型 BV,然后删掉 VPRS 这一行。VPRS 是成本价条件类型,开票时由系统从物料成本估算或条件记录里取成本金额,用来做成本结转。它在开票定价过程里的角色就是「告诉系统这次要结多少成本」。

现金业务的成本在出库时已经通过 Z01 + OBYC 结完了,开票里再出现 VPRS,系统会尝试再做一次成本结转:账户确定里能匹配到成本科目,就重复结转一次,主营业务成本翻倍;匹配不到,就直接报科目确定错误,发票释放不到会计。文档作者说「删掉就可以找到了,没搞明白 SAP 逻辑」,我一般这么解释:VPRS 带着金额去找科目,删掉它,系统就没有这笔成本要记,当然也就不需要科目,错误自然消失。不是说系统变聪明了,是它压根不用找了。

对比项ZKD04(订单用)ZKD05(开票用)
来源复制 ZKD01复制 ZKD04
应计项删除删除
VPRS 成本价保留删除
用途订单定价开票定价,分配 BV

文档里那句疑虑值得单独强调:F2 和 BV 都用 KOFI00 这个账户确定过程,如果不删 VPRS,现金订单最后的发票有可能把主营成本再结一次。这不是理论风险,只要 VPRS 在、账户确定里又能匹配到成本科目,它就会真的再结一遍。所以 ZKD05 必须是独立于标准开票定价过程的一份,不能图省事让 BV 直接复用 ZKD01 的副本。

4.3 开票类型 BV 与现金科目的落点

开票类型 BV 从 F2 复制,账户确定过程沿用 KOFI00,这一步文档写得很省。真正要动手的是 VKOA(定义并分配账户确定)。KOFI00 下面挂着一组账户码,分别对应收入、销项税、成本结转和挂账科目。现金销售要做的是把原来指向应收账款的那个账户码改指现金科目,其余保持不动。

操作顺序建议这样:先 VF01 空跑一张发票但不释放到会计,VF03 看开票的定价过程和账户确定过程是不是 ZKD05 和 KOFI00;再进 VKOA 查 KOFI00 下各账户码的科目分配;确认无误后释放,FB03 看生成的会计凭证是不是借现金、贷收入和销项税。如果没有这一轮空跑就直接上线,最常见的现象是「发票开出来了,会计凭证里借方还是应收账款」,月底财务还得手工清账,现金销售想省掉的那个环节一点没省。

5. 避坑与排查:五条来自配置现场的现象、原因与解法

这套配置在测试机上跑通不难,难的是搬到生产环境后各种边界情况一起冒出来。下面五条是我实际复现这个方案时遇到或验证过的问题,按「现象 → 原因 → 解决」写,顺序和业务链路一致,从订单到开票再到冲销。

5.1 保存订单后不生成交货单

现象:VA01 保存订单成功,状态栏交货状态一直是空白,VL06F 里也查不到这张单的交货。

原因:常见三种。订单类型 BV 的「立即交货」没勾;订单类型没分配交货类型,或者分配了一个不适用于该物料类型的交货类型;行项目用的计划行类别不是 ZP 而是某个不带交货标识的类别,物料主数据销售视图的「允许交货」也没开。

解决:按 VOV8 → OVLK → VOV6 → MM03 的顺序查,一层层排除。我习惯在测试机上先造一张单行、数量 1 的订单,存完立刻看状态栏,能省掉很多来回。另外注意,立即交货只是一个开关,它不会绕过可用性检查,如果物料库存为负且系统配置了硬性检查,交货单会被冻结,这时候看到的是「已创建但未清」状态,不要误判成没生成。

5.2 开票释放到会计时报账户确定错误

现象:VF01 开票保存正常,VF02 释放到会计时抛错,日志里提示找不到科目或账户确定失败。

原因:VPRS 还留在开票定价过程里,且 VKOA 的 KOFI00 下没有为它准备成本科目;或者 ZKD05 没分配成功,开票实际用的还是 ZKD04 甚至标准定价过程;也可能开票类型的账户确定过程被改成了别的。

解决:VF03 进发票抬头看定价过程是不是 ZKD05、账户确定过程是不是 KOFI00,这两个字段最直接。确认定价过程后看条件页签里 VPRS 是否还在,还在就说明分配没生效或者删在了错误的副本上。最后才查 VKOA。

5.3 出库凭证走到了发出商品

现象:MB51 查 Z01 的物料凭证,点进会计凭证,借方是发出商品而不是主营业务成本。

原因:OBYC 的 GBB + Z11 + 评估类那行没填科目,系统回退到默认配置;物料的评估类不是 3000;或者计划行类别 ZP 实际引用的移动类型还是 601,压根没走 Z01。

解决:先 MM03 看物料会计视图的评估类,再 OMJJ 看 Z01 的科目修改码,最后 OBYC 看组合行。这三步能覆盖九成以上的情况。

5.4 现金科目没落到现金,仍挂应收账款

现象:发票释放后会计凭证借方是应收账款-客户,月底还要手工清账。

原因:VKOA 里 KOFI00 的挂账账户码没改成现金科目,或者改了但开票类型 BV 的账户确定过程不是 KOFI00。

解决:VKOA 调整后必须用新单据重新测,已经过账的凭证改配置不会自动更正,只能靠冲销重开。这也是为什么我坚持上线前先用一张测试发票空跑全流程。

5.5 冲销后成本没回来

现象:VL09 或 MIGO 冲销交货,库存数量回来了,但主营业务成本那笔没有反向冲销。

原因:Z02 没建,或者 Z01 的「冲销移动类型」字段没指向 Z02;也可能是 Z02 的科目修改码不是 Z11,冲销时走了另一套科目确定。

解决:OMJJ 检查 Z01 的冲销移动类型必须是 Z02,Z02 的科目修改码同样设为 Z11,这样冲销凭证自动做借贷反向,库存商品和主营业务成本同时回位。

6. 上线前怎么验证:凭证流三查与后台批量过账

配置全部做完以后,我不会直接交给业务跑,而是先用一张真实的现金销售单把整条凭证流走一遍,从订单、交货、物料凭证、发票一直到会计凭证和清账状态,一个节点一个节点地对。VBFA 是这条链的路线图,VA03 抬头菜单里的凭证流能看到订单下面挂了哪张交货单、哪张发票,MFBF 或 FB03 能看到会计凭证是借现金还是借应收、借方是成本还是发出商品。这一步没有捷径,但可以脚本化:用 SE16N 或一段简单的 ABAP 把关键表串起来查,比一张张点要快得多。

" 按销售订单号拉出完整凭证流,核对交货、发票与会计凭证 DATA: lv_vbeln TYPE vbeln VALUE '0000000001'. SELECT vbelv, posnv, vbtyp_n, vbtyp_v, erdat, ernam FROM vbfa INTO TABLE @DATA(lt_vbfa) WHERE vbelv = @lv_vbeln. " vbtyp_n 是后续凭证类别:J=交货单,M=发票,R=会计凭证 LOOP AT lt_vbfa INTO DATA(ls_vbfa). WRITE: / ls_vbfa-vbtyp_n, ls_vbfa-vbtyp_v, ls_vbfa-erdat. ENDLOOP.

这段代码做的是把一张订单下面的所有后续单据平铺出来,vbelv是前序凭证号,vbtyp_n是后续凭证类别,J 对应交货单、M 对应发票、R 对应会计凭证。实际排查时我会把它扩展成三列输出:交货单有没有、发票有没有、会计凭证的借方科目是什么,一眼就能看出断在哪一环。参数上唯一要改的就是lv_vbeln,其余不用动。

第二件事是把发货过账改成后台作业。文档里写「发货过账可以设置为后台作业,每天定时过账」,落地就是 SM36 建一个周期性作业,调用交货批量过账的程序,把当天的交货单集中过账。这样做的好处是发票在拣配前就打印出来了,柜台收完钱,后台过账把成本结转掉,业务感受上是「当场开票、次日结转」,财务看到的是「票、货、款」三者在同一张凭证流里闭环。作业跑之前一定要确认交货单没有被冻结,批量程序碰到冻结单会整批停下,最好配一个前置检查步骤。

第三件事是月末对账。现金销售最怕的不是分录做错,是「票开了、钱没收、货发了」这三件事的时间差被忽略。我一般让财务每周拉一次 BV 类型发票清单和现金日记账比对,差异超过一天的单独列出来查原因。从那以后我每次上线这类一票制流程,都强制走一遍「单行订单 → 空跑发票 → 释放会计 → 冲销」的闭环测试,宁可前期多花两小时,也不愿意在月结那天翻凭证流。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询