
简介《SAP现金订单业务处理流程V2.0》是一份面向SAP实施顾问及销售、仓库、财务人员的流程设计文档围绕现金销售从订单创建、发货过账到开票清账的完整链路展开并针对印度子公司场景说明了订单类型BV、行项目BVN、计划行ZP等关键配置对比了传统手工现金销售与SAP自动化处理的差异有助于规范操作、减少预收清账环节、提升效率。压缩包共1个PDF文件约756KB内容涵盖目的、适用范围、业务操作步骤与配置实现等章节具体包括订单创建中的客户、物料、价格与支付条件设置发货过账中的拣选、出库与发货确认以及发票验证与现金清账等操作细节。文档还列出了订单类型、行项目类别、计划行类别、移动类型、定价过程和现金科目确定等配置项便于读者快速理解并落地类似流程。目前已有100人学习下载。1. 现金订单到底是什么SAP现金销售与标准订单的三处关键差异先说结论在SAP里做现金订单最大的坑不是“订单做不出来”而是大多数人还在用标准销售订单的思路去配流程。现金订单在SAP的正式名称是现金销售Cash Sale它并不是财务先收款、物流后发货的简化版而是一套从销售订单开始就直接决定“交货方式、开票时点、财务凭证”的完整业务方案。门店零售、展会现场销售、客户带现金/银行卡提货这类场景指望靠标准订单加两三个User Exit硬凑后面每个环节都要手工补补到最后凭证流全是窟窿。这篇文章想帮SD、MM、FICO顾问以及后勤关键用户把现金订单的流程骨架、后台配置、定价/过账逻辑和几类高频翻车点理清楚。新手可以按路径复现熟手可以重点看第4章和第5章的参数边界——这两章往往是被忽略的黑匣子。2. 现金销售流程骨架从VA01创建到财务过账的单据流2.1 现金销售与标准销售订单的单据流对比一张表看清三跳差异在谈配置之前先得把业务流在脑子里过一遍。标准销售订单的典型路径是VA01创建订单 → VL01N创建交货单 → VL02N发货过账 → VF01开票 → F-28收款。这一套适合信用结算、分批交货、跨月开票的买卖。现金销售完全不同它的业务诉求是“当场交钱、当场给货、当场出票”单据流上每一步都不能留手工尾巴。常见做法是在SAP里用销售单据类型“CS”或“VACS”来跑现金销售核心配置是让销售订单保存时就自动生成计划行计划行状态直接指向“立即交货/立即开票”而不是像标准订单那样挂在那里等后续单证。我一般建议先做一张流程对比表把每一跳的单据动作和系统事务代码列出来这样实施时和业务确认需求非常直观业务步骤标准销售订单现金销售现金订单销售订单创建VA01保存后订单处于待交货状态VA01保存后立即生成计划行且可以继续开票交货单VL01N手工创建VL02N发货过账可配置为不创建独立交货单或用特殊计划行直接关联发货开票VF01单独开票可能跨月保存订单后可立即VF01开票或配置“一单到底”收款F-28逐笔清账F-28/F-29按现金/银行存款科目过账或通过付款条件自动生成这张表的核心是“计划行”和“开票类型”两个点。现金销售不是把标准订单改个描述就完事而是要让系统在下单时就判断出“这笔业务资金已到账或同步到账、货要立刻发、票要立刻开”。判断的依据全部来自销售单据类型和项目类别配置这就是第3章要展开的内容。2.2 主数据前置检查客户、物料、定价条件这三样最容易卡住很多现金订单流程实施失败不是后台没配好而是主数据上还残留着标准订单的习惯。这里最关键的是客户主数据和物料主数据两个销售范围视图。先说客户主数据。现金销售往往面对的是临时散户或游客并非每月对账的长期客户。这种客户在SAP里常见做法是建一个统驭客户如“现金客户”CNCSH所有现金订单挂在同一个客户代码下避免每个散客都维护一个主数据。但问题也来了统驭客户也要维护销售范围数据包括销售组织、分销渠道、产品组对应的销售视图。如果这个视图不完整VA01创建现金订单时就会报“客户XX在销售范围1000/10/00中没有数据”。缺哪个补哪个不要嫌烦。其次物料主数据的销售视图里有两个字段对现金订单尤其重要“交货工厂”和“加载组”。现金销售如果不配置交货工厂订单里要手工输入一旦输错工厂后面的库存发货就跟着错。我的习惯是先把物料主数据销售视图的“自动交货工厂”和维护状态字段检查一遍再跑VA01。第三个是定价条件。现金销售通常不需要复杂的折扣和折让但至少要保证“价格”和“税”两个条件能确定。常见的定价过程VWJA或VWCN在现金销售里也能用但很多项目把销售订单的定价过程切到了标准后台配置结果是订单能保存、到开票时报“缺少条目K005/税/有效日期”。原因往往不是定价过程配错了而是客户主数据里的“销项税分类”没有维护或物料主数据销售视图没有勾选“税收类别”。这三样主数据在项目切到现金销售前必须批量检查一遍否则后面每张订单都是手工补丁。2.3 前台操作路径从VA01到VF01的最小动作清单假设后台已经按常见配置把现金销售单据类型建好前台操作可以压缩成下面这个最小动作清单。我特意把事务代码和关键操作写在一起方便跟着走步骤事务代码操作内容常见报错创建现金订单VA01输入销售额组织数据选择现金销售单据类型输入客户号、物料、数量、价格“销售凭证类型不存在” / “项目类别不存在”检查计划行VA03进入订单“项目明细-计划行”看计划行类别是否为现金销售专用计划行如CS计划行类别显示空白或仍显示标准发货过账VL02N若配置为两步式则交货单已生成否则直接在此处做发货过账库存地点未定义 / 批次未找到开票VF01对订单出具发票系统自动按配置过账“开票类型未定义” / “没有可开票项目”查看会计凭证VF03进入已开票凭证查看会计凭证流收入科目错误 / 税金科目未确定收款清账F-28按发票金额收到现金或银行存款未清项不存在因为已被自动清账注意第5行“查看会计凭证”这一步现金销售最容易被忽略的是开票时自动生成的会计分录。标准订单开票通常是借应收账款、贷主营业务收入销项税现金销售因为收款动作和开票动作可能在同一时间发生所以财务过账可能直接允许“借现金/银行存款”或者先挂应收账款再立即清账。这一步到底走哪种逻辑不是前台能决定的而是由“销售单据类型-开票类型”组合以及客户主数据的统驭科目决定。第4章会专门讲这块。3. 把现金订单配置落地销售单据类型、项目类别与计划行的参数联动3.1 销售单据类型复制标准订单还是从零建关键字段后台配置路径是SPRO → 销售与分销 → 销售 → 销售凭证 → 销售凭证头 → 定义销售凭证类型。这里的配置直接决定现金订单能走到哪一步、不能走到哪一步。最常见的做法是复制已有的标准订单类型比如OR新建一个ZCS或CS因为销售单据类型继承了定价过程、项目类别确定、输出确定这些默认值手工从头建特别容易漏字段。复制之后需要重点检查这几个字段第一“销售单据类别”字段。现金销售在标准系统里通常用“C”现金销售作为销售单据类别这个字段会影响后续开票和账户分配。如果你复制的OR销售单据类别还是“”则开票时会走普通销售逻辑。把这个字段改成“C”或对应的现金销售类别是整个配置中影响最广的动作。第二“交货类型”字段。这里决定订单保存后是否创建交货单。如果该字段留空表示不支持标准交货如果填入标准交货单类型比如LF系统会在计划行满足时创建交货单。现金订单如果希望“下单即发货”这个字段可以不填然后在计划行层面做特殊配置如果需要两步式先交货后开票就要填LF并控制自动创建。第三“开票类型”字段和“后续开票类型”字段。现金销售通常复制标准开票类型F2但要检查开票类型里是否允许“立即开票”。很多顾问卡在这里订单保存得很好VF01却没法开票因为销售单据类型上的开票类型没分配或者开票类型里的“凭证类型确定”没有包含现金销售单据类型。3.2 项目类别与计划行现金销售为什么必须用特殊项目类别销售单据类型只是头真正控制每一行物料处理方式的是项目类别Item Category。路径是SPRO → 销售与分销 → 销售 → 销售凭证 → 销售凭证项目 → 定义项目类别。现金销售专用项目类别在标准系统里常见的是TAN或类似配置内部逻辑是“该物料行不允许做可用性检查、不允许催款、开票后直接冲销未清项”。很多二次开发项目会复制一个TAN出来改项目类别里的“计划行确定”和“开票相关性”。这里必须聊计划行。项目类别确定的是“计划行类型”标准订单常用计划行类型CP按日计划现金销售则常用计划行类型CS或CN表示交货即时生效不需要创建独立的交货单。计划行类型在后台配置里有一个字段叫“移动类型”它会绑定到库存地点的货物移动。如果你把计划行类型配成631/632这种“G/L账户转储”的移动类型发货过账就不是减少普通库存而是直接消耗到成本中心或科目。这一点相当多FICO顾问会忽略。配置项目类别并检查计划行时记得看两个维度项目类别里的“计划行确定”是否填入了现金销售专用的计划行类型而不是空的或标准CP。计划行类型里的“交货是否自动完成”有些项目需要一张纸质的交货单给客户签收此时可以在销售凭证“交付类型”里填LF让系统生成交货单如果不需要就用即时过账的计划行。项目类别还控制着“价格相关性”、“账户分配相关性”。现金销售的账户分配可能直接是“借现金”而不是“借应收账款”所以项目类别里“科目确定”逻辑要和财务顾问核对否则VF01开票时生成不了正确的借贷凭证。3.3 开票与交货类型配置一单到底还是两步走的开关现金销售的业务形态有两种常见实现理解后你就可以根据企业实际选。第一种是“一步式”销售订单保存即完成库存发货和财务过账不需要额外的交货单。这种模式适合柜台零售业务操作员只要在VA01里把订单保存系统自动产生物料凭证和会计凭证如果开票也自动触发前台人员可以马上把东西给客户。实现这种模式需要让项目类别和计划行类型都按即时过账来设计同时销售单据类型上的“开票类型”填为V2或特定类型并且在流程里允许“订单开票”而不依赖交货单。第二种是“两步式”先创建交货单发货再开票收款。适合那些需要仓库备货、客户到门店提货的场景。实现方式是把销售单据类型的“交货类型”填成LF并且在项目类别的“计划行确定”里选一个需要创建交货单的计划行类型。此时订单保存后会在后台生成一张交货单操作员到VL02N做发货过账再VF01开票。选哪种不是顾问拍脑袋而是看业务上“交钱和交货是否同时发生”。如果客户上午交钱、下午提货就选两步式如果一手交钱一手交货就选一步式。实施中最大的坑是试图用一个销售单据类型同时兼容两种模式——结果一步式的订单被库存冻结卡住两步式的订单又自动过账导致库存串账。常规做法是给两种业务分别建销售单据类型例如ZCS1一步式现金单和ZCS2两步式现金单后台虽然多配一套但前台用户不会点错出了问题也好查。4. 现金订单的定价与财务过账收入确认和科目确定别等月末再看4.1 定价过程现金销售常用条件类型与税金处理现金订单的定价过程可以在销售单据类型里指定也可以由客户主数据销售单据类型共同决定。后台路径是SPRO → 销售与分销 → 基本功能 → 定价 → 定价控制 → 定义并分配定价过程。现金销售的定价逻辑应尽量精简。标准订单常带的各种折扣、附加费、返利条件类型在现金场景里很少用到留着只会让销售员每次开单都要检查一遍定价行。我的建议是复制一个标准定价过程比如RVWACN把不需要的条件类型通通禁用只保留必须的PR00基础价格MWST税DIFW或类似折扣条件如果要支持抹零尤其要注意税的处理。现金销售如果面向最终消费者通常需要销项税如果面向企业客户可能涉及免税或不开票。SAP在定价条件MWST里通过“税分类”决定税率而这个分类来自客户主数据的销售范围视图和物料主数据的税分类。很多现金订单开票时报“无法确定税”就是因为这两处主数据至少有一处没维护。价格来源上现金销售不一定要用客户特定价格。如果客户是统驭散户常见做法是在客户主数据里把价格组设为“普通价格”物料价格用销售组织/分销渠道层级的PR00。否则一旦给统驭客户维护了特定价格所有散客都享受同一个客户特定价后期改价会非常麻烦。4.2 收入确认时点开票即确认收入和标准订单的不同财务上现金销售的显著特征是收入确认时点被前移。标准订单可以在发货后做收入确认甚至到月末根据开票情况确认现金销售则常在开票那一刻就生成完整的收入、税金、现金或应收账款凭证。这里需要交代一个容易被FICO顾问忽略的配置销售单据类型“开票类型”中有一个“记账类型”字段它决定了发票过账时是生成应收还是直接生成现金。在标准的现金销售开票类型里记账类型往往设置为“现金销售记账”此时系统开票会产生现金科目或往来科目的过账而不是挂应收账款。如果你在项目里发现现金订单开票后仍然生成应收账款比如D并且收款还要再走F-28先不要慌可能是两种目的业务上允许客户先交部分现金、挂账待清或者说你们实际用的就是标准销售订单只是起了个“现金”的名字。真正需要警惕的是开票时点了“现金记账”但客户主数据的统驭科目没配好导致生成的会计凭证借项是“现金”但贷项是“其他应收款”月末对账对不平。所以收入确认的时点问题本质上不是时间点问题而是销售单据类型上的记账类型和财务科目表是否对齐。4.3 财务过账科目确定现金科目、收入科目、税金科目的映射现金销售开票时通常会生成类似这样的借贷凭证借现金/银行存款贷主营业务收入、应交税费-销项税。这在SAP里是由“科目确定”配置完成的路径是SPRO → 销售与分销 → 基本功能 → 科目分配 → 科目确定 → 定义科目确定规则。科目确定的关键对象是“科目确定类型”和“科目表”。SD里通过销售单据类型中的“科目确定类型”以及物料主数据/客户主数据传到FI的科目确定键。现金销售常用科目确定类型里要特别检查下表业务对象常见配置键不当配置的影响收入科目通过物料的“科目设置组”客户的“科目分组”确定收入进错会计科目月末报表不平税金科目通过税码和税代理确定开票时税金无法过账或税码不合法现金/银行存款科目通过记账类型和过账码确定借方不是现金而是应收后续清账错乱常见做法是在配置里把现金销售的“记账类型”和“总账科目”控制在一个专门为客户“CNCSH”配置的科目集合里。比如客户CNCSH的“科目分组”设为“CSH”收入科目设为其他业务收入现金科目设为100001现金。这样所有现金订单开票时凭证流自动按这套规则走而不是每次到VF03里人工改科目。还要留一个心眼如果现金销售订单涉及跨币种客户用外币结算而你在VF01开票时的汇率和收款日汇率不同就会产生汇兑损益。这里不是改科目确定能解决的而是要在财务管理里打开“外币评估”和“跨币种清账”的开关。很多项目现金销售一般只用本币一旦涉及外币建议让FICO顾问提前把“汇兑损益科目”的默认科目分配配好否则月末外币评估一跑就对着差异发愣。5. 现金订单实战避坑五个高频翻车点与排查顺序5.1 现象创建现金订单时报“项目类别不存在”或“订单类型不存在”现象VA01里输入现金销售单据类型回车后直接报错“项目类别XX不存在”或者“订单类型CS未定义”订单根本存不进去。原因最常见的原因是销售单据类型没有分配“项目类别确定”缺少这条分配规则时系统无法为物料行自动找到项目类别。另一个原因是新建单据类型时复制了标准OR但项目类别确定里仍然引用的是OR的分配表而OR对应的项目类别在当前的销售范围里没有被分配。解决先去SPRO → 销售与分销 → 销售 → 销售凭证 → 销售凭证头 → 为销售单据类型分配项目类别在这个视图里维护好所有需要用到的项目类别标准项目和退货项目等。再检查“项目类别确定”表里是否涵盖了物料主数据里配置的“物料项目类别组”。现金销售如果物料项目类别组是“标准”但项目类别确定里只有“特殊库存”照样会报“项目类别不存在”。这个问题的排查顺序是先看销售单据类型分配的项目类别范围再看项目类别确定表最后看物料主数据。5.2 现象现金订单保存后没有计划行不能继续交货开票现象VA01保存现金订单已经成功但进入VA03一看项目下面计划行是空的或者计划行类别是“CP”标准计划行。后续VL01N和VF01都找不到可以操作的项目。原因销售单据类型和项目类别之间没有完成“计划行确定的传递”。项目类别配置里“计划行确定”字段为空系统默认走标准计划行而现金销售单据类型又限制了“立即交货”两者冲突导致系统干脆不生成本应存在的计划行。解决检查SPRO → 销售与分销 → 销售 → 销售凭证 → 销售凭证项目 → 定义项目类别把现金销售项目类别如TAN中的“计划行确定”填上现金销售专用计划行类型。同时查看销售单据类型的“计划行确定”是否有覆盖逻辑常见做法是把项目类别里的计划行类型设为“CS”计划行类型又配置成“移动类型631/632”或“直接交货”。改完后需要对旧订单做VA02重新确定计划行新订单保存时会自动生成。5.3 现象开票时提示“销售凭证不能开票”或收入科目错误现象现金订单已经发货VF01填写销售订单号后系统提示“凭证不存在”或者“项目没有被标记为可开票”强行开票生成的会计凭证里收入科目是9999虚拟成本之类。原因“开票类型”没有正确填充。销售单据类型上的“开票类型”字段为空系统不知道用什么开票类型来开票。另一个常见原因是项目类别里“开票相关性”被设为空或“无关”导致项目复制不到开票界面。收入科目错误则是科目确定规则里没有匹配到客户分组和物料科目设置组。解决路径SPRO → 销售与分销 → 销售 → 销售凭证 → 销售凭证头 → 定义销售凭证类型给现金销售单据类型填入“开票类型”为F2的适用于现金的发票类型。再到项目类别配置把“开票相关性”设为“A”开票。科目错误则回到4.3节的科目确定规则检查“客户科目分组物料科目设置组科目确定键”的组合是否在会计科目表里维护了有效科目。这一步经常需要SD、MM、FICO三方坐在一起看因为物料主数据的“科目设置组”可能配成了“成品-标准”而客户分组没有对应的收入科目组合。5.4 现象现金折扣/抹零无法自动处理现象现金销售经常有“尾数抹零”或“现金折让”但销售员在VA01里手工改了价格后开票时又弹出来价格不一致或者单独记了一笔折扣但财务凭证上看不到相关科目。原因现金销售的定价过程里没有包含折扣条件类型或条件类型没有被配置成“允许手工输入并参与科目确定”。很多项目为了让现金单简单故意删掉折扣条件结果业务需要抹零时只能用价格替换导致原始价格信息和折扣信息丢失。解决在定价过程中加入一个折扣条件类型比如DIFW销售折扣并确认其“手工输入”权限为可以。然后在科目确定配置里为该条件类型分配“折扣冲减科目”如主营业务收入-折扣。这样VA01里销售额输入原价、折扣输入抹零金额开票时自动生成借贷凭证借现金借收入-折扣红字/蓝字贷收入、税金。顺带一提sap fico做月结时特别喜欢看这类“销售收入借贷凭证”是否完整折扣没配好常常导致收入报表和税务申报对不上。5.5 现象现金订单涉及多个工厂或公司代码时被组织架构挡在后面现象一家集团公司在不同工厂都有零售业务现金订单在总部销售组织创建但发货工厂在异地。VA01保存后报“公司代码XXXX和销售组织XXXX不一致”或者物料无法在异常的库存地点过账。原因现金销售本身是一条短流程对“销售组织、公司代码、工厂”的一致性极其敏感。标准订单可以允许销售组织和工厂分属不同公司代码通过跨公司销售处理但现金订单如果没配置好“跨公司代码的发货”就会被系统判定为组织架构不匹配。解决先把工厂分配给对应的销售组织/分销渠道路径SPRO → 企业结构 → 分配 → 销售与分销 → 给销售组织/分销渠道分配工厂。如果确实需要跨公司代码销售销售单据类型里要启用“跨公司代码”选项并且要在“开票类型”里配置公司间开票类型。个人建议在实施初期就把现金销售限定在同一公司代码内如果业务非要跨公司单独为跨公司场景再建一个单据类型不要在同一个单据类型上两头改。6. 用BAPI批量创建现金订单参数、替代与我的验证习惯6.1 用BAPI_SALESORDER_CREATEFROMDAT2批量创建现金订单当现金订单量很大比如展会一天几千单手动VA01不现实。常见做法是用BAPI_SALESORDER_CREATEFROMDAT2或老版BAPI_SALESORDER_CREATEFROMDAT1批量创建。这里的关键不是调用BAPI而是把现金订单特有的字段在BAPI的“ORDER_HEADER_IN”和“ORDER_ITEMS_IN”里带对。一个最小例子是这样的以Python通过pyrfc调用为例from pyrfc import Connection import uuid conn Connection({ ashost: sapserver, sysnr: 00, client: 100, user: BATCHUSER, passwd: ***, }) sales_header { SALES_ORG: 1000, DISTR_CHANNEL: 10, DIVISION: 00, DOC_TYPE: ZCS, # 现金销售单据类型 SALES_ORG_MOD: 1000, SALES_OFFICE: , SALES_GROUP: , PARTN_ROLE: , REQ_DATE_H: 2025-01-15, PRICE_DATE: 2025-01-15, } sales_items [ { MATERIAL: RETAIL001, PLANT: 1000, TARGET_QTY: 1, SALES_UNIT: EA, ITEM_CATEG: ZCS, # 现金销售项目类别 }, ] order_header_in {SALES_ORG: sales_header[SALES_ORG], DISTR_CHANNEL: ..., DIVISION: ..., SALES_OFFICE: , SALES_GROUP: , DOC_TYPE: ZCS, REQ_DATE_H: ...} order_partners [{PARTN_ROLE: AG, PARTN_NUMB: CNCSH}] result conn.call(BAPI_SALESORDER_CREATEFROMDAT2, SALES_HEADER_INsales_header, SALES_ITEMS_INsales_items, SALES_PARTNERS_INorder_partners) if result[RETURN][0][TYPE] E: print(失败, result[RETURN][0][MESSAGE]) else: print(订单号, result[SALES_HEADER_OUT][SALES_DOCUMENT])这段代码里最容易踩的坑有三个一是项目类别必须传“ZCS”或你自己配置的现金销售项目类别不能省略否则BAPI会按物料主数据默认项目类别生成标准计划行二是客户主数据必须传统驭客户CNCSH不能每个订单传不同客户导致主数据爆炸三是BAPI返回的结构里SALES_HEADER_OUT的SALES_DOCUMENT才是订单号不要直接在原始输入里找。用pyrfc调用时注意日期字段要传字符串不能传Python date对象。6.2 用VOV4/VOV5快速检查单据类型和项目类别配置排查现金订单配置问题时我习惯先不碰后台先在前台事务代码里做一次“配置速查”。事务代码VOV4或VOV8可以查看销售凭证类型列表VOV5或VOV9可以查看项目类别列表。这两个事物代码比直接去SPRO里点要快而且能直接看到某个销售单据类型分配的项目类别范围。例如在VOV4里双击ZCS在“项目”页签能看到分配的项目类别清单如果里面没有ZCS或TAN回到SPRO里补分配。在VOV5里双击现金销售项目类别在“计划行”页签能看到计划行类型如果为空后面所有计划行相关的坑都会出现。这个用法比反复测VA01试错有效率得多适合所有级别的人。6.3 我的验证习惯先跑一次完整凭证流再看会计凭证最后分享一个老顾问的习惯任何现金订单配置改完不要只创建一张订单看没有报错就算完。我会按“VA01创建现金订单 → VA03看计划行 → VL02N发货过账如果有交货单 → VF01开票 → VF03查看会计凭证 → F-28/FB02检查未清项”完整跑一遍。每跑一步都在脑海里对着标准流程问一遍这一步是不是人工干预了如果任何一步需要手工修改那配置边界一定有问题。我个人被现金销售“黑匣子”坑过不止一次。最典型的是开票自动生成会计凭证时借方进了“应收账款”而不是“现金”我一开始以为是后台科目确定被覆盖查了半天最后发现是销售单据类型里的“记账类型”字段没有设置成现金销售模式。那之后每次做现金销售的配置或增强我都会把“凭证流事务代码”作为第一验证工具而不是只看订单状态。希望这个验证习惯也能帮到你。本文还有配套的精品资源点击获取