简介:这份ERP信息化资料来自DBP_SAP实施项目,聚焦销售CKD发货业务方案,适合正在推进SAP项目或涉及海外订单按散件清单发货的企业顾问与业务骨干。文中按业务现状、待解决问题、解决方案、待确认问题、行动计划的框架展开,覆盖产品备库计划、MRP运算、生产工单与采购申请生成、成品入库、备库销售出库及需求传递机制,并结合MTO订单限制库存与MTF非限制库存的管理差异,对“备库订单”和“独立需求”两种方式做了比较与选型建议。内容为1个pptx演示文档,包体约224KB,可直接用于项目知识沉淀、方案评审或内部培训。已有245人下载学习,适合SAP物料管理、销售与生产计划模块的顾问参考。
1. CKD 发货方案:为什么出口散件比整车发运更考验 SAP 配置
搞出口业务的制造企业都清楚,CKD 最怕的不是造不出货,而是系统里说不清「这一单到底该发哪些散件」。整车发运在 ERP 里就是销售订单→交货单→开票三步,一个成品料号从头走到尾;CKD 完全是另一套逻辑——销售订单挂在母料号上,依赖 SAP 的销售 BOM(usage 5)把需求拆成组件,再按包装单元出库、装箱、打印报关发票。DBP 项目这份《销售 CKD 发货方案》,是 2016 年 9 月 1 日定稿的 V1.2 版,恰好把这条链路从业务映射到系统配置到常见排障讲全了。适合正在做 SAP SD/MM 集成的顾问、出口业务 IT 支撑,以及想理解系统单据流的单证主管。
2. 业务映射与单据流:从销售订单到报关发票的六个节点
CKD 方案里最先要立住的是「系统里到底发什么」。很多项目栽在蓝图阶段就把 CKD 当成普通成品出口做,上线后才发现交货单里挂的是母料号,仓库根本拣不了料,整条链路从第一节点就歪了。所以这一章先把业务形态和系统凭证类型对齐,再讲六个节点的流转。
2.1 CKD 与 SKD 的差别,以及对库存形态的影响
CKD 指整车或整机完全拆散,发动机、变速箱、车身钣金分别包装,到目的国再焊接、喷漆、总装;SKD 是半散件,常见的是白车身或已涂装的整机单元,属地工厂做后续组装。SAP 里这两者不能共用一套销售发货逻辑:SKD 可以近似当成成品或半成品料号发运,库存形态简单;CKD 则是「订单挂母料,交货发子件」,系统要把母料号的需求按销售 BOM 展开成组件需求。库存本身没有特殊库存类型,货还在非限制库存里,只是出库的对象变了,所以财务成本核算也随之变成组件出库成本加包装成本。
我一般会先在物料主数据里区分三套料号:母料号只做订单载体,不参与 MRP;组件料号是真实备料和做生产计划(PD)的物料;包装料号单独设置为可销售但不能开票的发货运费项。这个动作越早做,后面 VL01N 的时候越省事。下表是三类业务在物料、BOM、出库对象上的典型差异。
| 维度 | 整车发运 | SKD | CKD |
|---|---|---|---|
| 订单挂料 | 成品料号 | 半成品/整机单元料号 | 母料号(订单载体) |
| BOM 类型 | 生产 BOM(usage 1) | 生产 BOM(usage 1) | 销售 BOM(usage 5) |
| 交货单行项目 | 成品本身 | 半成品 | 销售 BOM 展开的组件 |
| 库存出库对象 | 成品库存 | 半成品库存 | 组件非限制库存 |
| 包装层级 | 单台 | 按总成包装 | 按箱/托/柜多级包装 |
这张表直接对应配置动作:CKD 需要额外维护销售 BOM、额外定义挑拣策略和包装输出,这也是方案 V1.2 里篇幅最大的部分。后面所有 Tcode 参数都围绕这张表展开,下载后建议先把这一页的对比关系吃透,再往单据流走。
2.2 单据流里的六个节点,以及每个节点产出什么
CKD 方案的单据流可以压成六个节点:销售订单(VA01)、交货单(VL01N)、拣配(VL02N)、包装(VL02N 包装功能+HU)、装运(VL02N 装运状态/VT 系列装运单)、开票(VF01)。其中「包装」是 CKD 特有且最容易返工的一环,因为报关发票要按箱号列金额,系统里必须做到「一箱一个 HU,一个 HU 对应一组组件行项目」。
每个节点的输出凭证要盯紧:VA01 产出销售订单,VL01N 产出交货单(表头 LIKP、行项目 LIPS),VL02N 拣配后产出物料凭证和会计凭证,包装后产出 HU(表头 VEKP、行项目 VEPO),VF01 产出销售发票。方案里对每张表都给了字段级注释,尤其是 LIPS 的箱号字段和 VEKP 的外箱号(EXIDV),这两个字段是报关数据核对的主键。我习惯在测试环境先把六步完整跑通,再把每一步的凭证号串成一张「凭证追踪表」,上线核对时直接复用。
在六个节点里,「包装」和「开票」之间的数据衔接特别容易出问题。比如报关系统要求按「销售订单号+箱号+件数+净重」上传,但 SAP 出货时如果没有把 HU 分配给交货单,箱号字段是空的。V1.2 方案在这一点上给了明确建议:在 VL02N 完成包装后,强制生成装箱单输出,再由一个 RFC 或中间表把 VEKP/VEPO 数据推给报关系统。这个接口逻辑虽然很短,却是整个方案能不能落地的关键。我见过不止一个项目因为跳过装箱单,最后清关发票靠手工 Excel 拼出来,一到月末核对就翻车。
2.3 关键 Tcode 与角色分工速查表
这张表适合直接打印出来贴工位,比翻 PPT 快。CKD 的角色边界越早定清楚,越少出现「订单录错了没人发现、发票开错了互相推」的情况。
| 节点 | Tcode | 主要角色 | 关键字段/动作 |
|---|---|---|---|
| 销售订单 | VA01/VA02 | SD 订单专员 | 订单类型、BOM usage、工厂/装运点 |
| 交货单 | VL01N/VL02N | 物流专员 | 移动类型 601、仓储地点、批次确定 |
| 包装 | VL02N→包装 | 仓库包装员 | HU 创建、箱号绑定、包装物料 |
| 装箱单 | VL03N→输出 | 单证员 | 输出类型、箱号与数量打印 |
| 装运 | VT01N/VL02N | 订单/物流 | 船名航次、装运完成状态 |
| 开票 | VF01/VF03 | 应收会计 | 定价过程、条件记录、收入科目 |
这六张表就是下载下来的那份 PPT 里最值得反复翻的页。如果你发现你的项目里没有「装箱单」这个节点,那说明方案做到一半被砍了,后面的报关数据十有八九要手工补。
3. 销售订单与 BOM 展开:VA01 字段设置和 usage 5 的展开逻辑
CKD 的销售订单不是普通 SO,它要在订单行项目上挂销售 BOM,让系统在创建交货单时把母料号替换成组件行。这一步是 V1.2 方案的核心,也是最容易配置错的地方。
3.1 VA01 创建 CKD 销售订单:必须设置的四类字段
用 VA01 创建 CKD 订单时,除了订单类型(项目里多用 ZCKD)、销售组织、分销渠道、客户、物料、数量之外,还有四类字段决定后续能否正确展开:
- 订单行项目的「物料」填母料号,不填组件;组件完全交给 BOM 展开。
- 在行项目明细的「BOM」页签里,BOM 应用(BOM application)填 05(销售),BOM 用法填 5,并保证母料号存在有效的销售 BOM。
- 在行项目明细的「装运」页签里,指定交货工厂和装运点;CKD 母料号可以不维护工厂库存,但交货工厂必须存在,否则 VL01N 报「工厂不存在」。
- 在「开票」页签里,检查定价过程和条件记录;CKD 发票金额要把包装费、海运费、保险费作为独立条件类型一并挂上,否则清关发票金额对不上。
操作步骤是:VA01 → 输入 ZCKD、销售组织/分销渠道/产品线 → 输入客户、母料号、数量 → 回车后进入行项目 → 点开 BOM 页签填 usage 5 → 保存。保存时若系统提示「物料不存在于工厂」,不用慌,这一般只是母料号没扩展工厂,而 CKD 场景恰恰允许母料号不参与库存,关键是交货工厂字段没报错。
3.2 销售 BOM 的展开逻辑:usage、日期、替代料与单位换算
销售 BOM 在 SAP 里用 CS02 维护,和普通生产 BOM 的区别是 BOM 用途(usage)字段填 5。展开时系统按「订单类型+销售组织+BOM usage」找可用 BOM,所以同一个母料号可以同时存在生产 BOM 和销售 BOM,互不干扰。大多数项目只维护一份销售 BOM,按订单数量直接展开;数量上若组件需要按比例换算,比如一台整车拆成 4 个轮胎、1 个备胎,备胎按选装件处理,就需要在 BOM 行项目里把数量关系写清楚。
替代料是 CKD 场景里最考验顾问的一环。目的国工厂常常有国产化切换,同一组件可能在多个供应商料号间切换。常见做法是在销售 BOM 的组件里维护替代组,并把优先级高的备选料设置为主发料;SAP 展开时会按替代优先级取料,而不是把多个替代料都挂进交货单。如果替代料在某个日期后才生效,还要维护 BOM 有效期,确保交货日期落在生效期内,否则展开结果为零。参数可以参考下表。
| 参数 | 配置点 | 作用 | 常见错误 |
|---|---|---|---|
| BOM usage | CS02 | 指定销售 BOM | 填 1 导致 VL01N 不展开 |
| BOM 有效期 | CS02 有效期 | 控制展开的时间窗口 | 有效期没过交货日期 |
| 替代优先级 | CS02 替代组 | 决定取哪个组件 | 两个替代料同时出库 |
| 数量比例 | CS02 组件数量 | 换算订单数量到组件需求 | 单位不一致导致数量放大十倍 |
单位换算是另一个高发坑。母料号的销售单位常设「台」,组件的 BOM 基本单位可能是「件」或「套」,系统在展开时会自动换算。如果物料主数据的单位换算维护缺失,结果要么数量错,要么 VL01N 创建交货单时直接报错。V1.2 方案里有一条经验:所有 CKD 组件的销售单位与基本单位尽量一致,不一致的提前用 CUNI 维护换算关系。
3.3 用一段 ABAP 快速核对销售 BOM 展开结果
CKD 上线前,我习惯写一段 ABAP 报表,把销售订单的组件清单拉出来和手工算的 BOM 对一遍,比在 VA03 里一页页翻快得多。下面这段代码调用标准函数 CS_BOM_EXPL_MAT_V2,按母料号展开销售 BOM:
DATA: lt_stb TYPE STANDARD TABLE OF stpox. CALL FUNCTION 'CS_BOM_EXPL_MAT_V2' EXPORTING capid = 'PP01' datuv = sy-datum mtnrv = '母料号' werks = '1000' usage = '5' TABLES stb = lt_stb. LOOP AT lt_stb INTO DATA(ls_stb). WRITE: / ls_stb-idnrk, ls_stb-menge. ENDLOOP.这段代码的逻辑是把母料号的销售 BOM 按当前日期展开,输出组件料号和数量。参数说明:capid是 BOM 展开的应用(PP01 代表生产/销售通用),datuv是生效日期,usage填 5 表示只展开销售 BOM;如果返回的lt_stb为空,先查 BOM 有效期和 usage,再查母料号的主数据,基本能定位九成问题。把它改成根据订单类型筛选销售订单行项目再展开,就能直接做成上线核对工具。
4. 发货、装运与开票:VL 系列 Tcode 和库存过账的关键参数
CKD 的交货环节和普通销售交货的不同点,集中在三个地方:库存确定与批次、包装与装箱单、发货过账的会计科目。这也是 V1.2 方案里最容易和 MM/FI 顾问争执的三块。
4.1 VL01N 创建交货单:移动类型、仓储地点与批次确定
CKD 组件的交货单创建入口是 VL01N,凭证类型通常用 LF(外向交货),移动类型固定为 601(销售发货)。但 601 只是一个统称,后台在 OMJJ 里还能配置具体移动类型的库存类型限制。常见做法是把 601 的库存类型限定为「非限制库存」,同时打开批次确定策略。这样仓库挑料时,系统会按批次策略(比如先到期先出)自动指定批次;如果项目里出现「发货时批次自动带不出来、库存充足但报批次找不到」的问题,十有八九是移动类型 601 的批次确定策略里没有配置。
仓储地点字段要特别留意。交货单的仓储地点决定从哪个库位出库,CKD 散件如果分仓存放,比如发动机在 A 仓、钣金在 B 仓,需要按交货单行项目分别指定仓储地点;如果启用了 WM,VL01N 保存后会自动创建挑拣单(TO),再由仓库确认。方案 V1.2 里有一页专门画了「多仓储地点+批次标签」的决策树,核心结论是:行项目多的 CKD 单不要指望手工改仓储地点,要在交货单类型配置里定义「按交货单拆分挑拣」。
发货过账后若发现数量错了,第一反应是用 VL09(交货单过账取消)冲销物料凭证,而不是直接 VL02N 再发一次。CKD 场景冲销的注意点:VL09 只能整单冲销,不能只冲一部分;如果已经开了发票,冲销顺序必须「发票冲销→交货冲销→物料凭证冲销」,乱了会卡在 FI 清账。另外物料凭证和会计凭证变了,要看物料变更底表(CDHDR/CDPOS),方案里列过一张「错误凭证排查路径」:VL03N 看状态 → MB03 看物料凭证 → FB03 看会计凭证 → 再决定冲销,这个顺序不要跳。
4.2 包装与装箱单:HU 创建、箱号绑定和输出类型
包装是 CKD 和普通发货最大的分水岭。普通内销发货可以不装箱,CKD 的报关单要求箱号、件数、净重和金额都按箱列出,所以每个交货单行项目必须归属到一个 HU 下。操作上,在 VL02N 打开交货单后,选「包装」按钮,系统会要求创建包装物料(HU,用一个物料号代表包装耗材),然后把行项目拖进 HU;一个箱子对应一个 HU,一个 HU 可以容纳多个行项目,但每个行项目的数量要精确到件。
装箱数据的存储表是 VEKP(HU 表头)和 VEPO(HU 行项目),箱号(包装单位标识)在 VEKP-EXIDV 字段。报关系统需要的数据就从这两张表里取。装箱单的打印可以通过交货单的输出类型配置触发,常见做法是在输出类型里挂一个普通打印程序,输出格式用 SAPscript/Smart Forms;不要直接打印 VL03N 的标准格式,因为它不含箱号字段。V1.2 方案在这一点上没有另起炉灶,而是复用标准 HU 输出,只改了几个字段映射。
包装环节还有一个容易忽略的动作:HU 创建后要把状态置为「已出货」,防止同一个箱号被重复用在两张交货单上。如果漏了这一步,第二批货装箱时会发现箱号冲突,报关行那边直接退单。
4.3 发货过账与 FI 集成:移动类型、会计科目与功能范围
VL02N 点「发货过账」(PGR)后,系统会同时生成物料凭证和会计凭证。物料凭证上移动类型是 601,会计凭证通过 OBYC(科目确定)映射到对应科目。CKD 与整车最大的区别在成本对象:整车走成品销售成本,CKD 走组件出库成本;如果组件来自不同物料组或不同功能范围,会计科目就要拆开,这直接牵扯到「功能范围」和「分摊分配」的配置。
在 OBYC 里,601 对应的库存科目转账一般走 GBB 事务码 VAY,科目指向销售成本类科目。组件出库时,如果多个组件挂了不同的功能范围,FI 凭证会自动按功能范围拆分行项目,这就是 SAP 里「功能范围」字段在实际业务中最常见的用途。另一个容易忽略的点是:CKD 的包装费往往也要进销售成本,但包装物料一般不做库存管理,而是通过条件类型加到发票里。常见做法是把包装物料建为「可销售物料」,在销售订单里作为行项目加进去,但不参与 BOM 展开。
如果项目里启用了装运执行(VT01N),则多个交货单可以整合到同一个航次,开票时也能合并。CKD 大批量出口时这一步非常有用:同一个客户、同一个航次但分多次发货,月底核对发票张数会少一大截。方案 V1.2 在装运节点上给的建议是:装运单只做整合展示,不替代交货单的过账动作,避免状态割裂。
5. 避坑:CKD 方案上线后最常见的五个异常与排查步骤
CKD 发货方案上线头两周,问题基本集中在这五类。每一条都是我在项目现场见过的,按「现象 → 原因 → 解决」记录,可以直接对症。
5.1 VA01 保存后 BOM 组件不显示,VL01N 交货单里只有母料号
现象:销售订单建立正常,但进入 VL01N 创建交货单时,行项目还是母料号,组件一个都没有。 原因:销售 BOM 根本没挂上,或者 BOM usage 不是 5;另一个常见原因是母料号的销售单位与 BOM 展开数量比例不一致,展开结果太少被系统合并掉了。 解决:先到 CS03 查看母料号是否存在 usage 5 且有效期覆盖交货日期;再到 VA03 打开销售订单行项目,点 BOM 页签看展开结果。两头都正常但 VL01N 仍不展开,就查交货单类型里是否配置了「排除 BOM 展开」的规则。
5.2 MD04 里散件需求不显示,MRP 不跑 CKD 组件
现象:CKD 订单建了好几天,MD04 里只有母料号的销售需求,组件一点需求都没有,仓库没办法备料。 原因:销售订单行项目对应的物料策略组(strategy group)不对,或者订单行项目类别没有允许 BOM 展开;另外如果母料号被设置为「无 MRP」,需求不会向下传递。 解决:先确认母料号的 MRP 类型不是 ND(无 MRP);再看销售订单行项目的策略组,CKD 通常用 20/40(按单生产),跑 MTO 逻辑;最后用事务代码 MD04 对组件料号做需求追踪,确认销售需求已经落到组件。方案 V1.2 里给了一张「CKD 物料主数据 MRP 设置清单」,上线前按清单逐项打勾,基本能避免这条。
5.3 VL02N 发货过账报「库存不足」,但 MMBE 明明有库存
现象:发货过账时系统报组件在某工厂某库存地数量不足,但 MMBE 查询该组件明明有非限制库存,甚至批次数目都够。 原因:交货单的仓储地点和库存所在仓储地点不一致;或者批次确定在 601 移动类型下找不到满足策略的批次,比如批次状态是「冻结」或有效期不在发货窗口内。 解决:在 VL03N 里看交货单行项目的仓储地点,和 MMBE 的库存地点对比;再到后台检查 601 移动类型的库存类型和批次确定策略,把冻结批次排除、把非限制库存纳入。如果启用了 WM,还要用 LS26 检查拣配仓库的库位库存,确认 TO 创建没有因为库位缺失中断。
5.4 装箱单上的箱号和数量与发票对不上
现象:报关时候发现装箱单显示 12 箱,发票上只有 11 箱;或者某个箱号里的件数与 VEKP/VEPO 不一致。 原因:包装环节有行项目没有进入 HU,直接发货过账;或者一个 HU 被多次使用,装箱数据被覆盖。 解决:在 VL03N 的交货单显示里进入 HU 分配界面,核对每个行项目是否都有 HU;没有的回到 VL02N 重新包装。另一点是 HU 创建后要把状态置为「已出货」,防止同一箱号被重复用在两张交货单上。CKD 的报关字段以 VEKP-EXIDV(箱号)和 VEPO 的行项目数量为准,不要用 VL03N 表面数量直接对,这是我踩过最多次的一处。
5.5 开票后收入金额和销售成本对不上,月底财务差异大
现象:VF01 开出发票,客户付的金额、系统的收入金额和组件出库成本三者差异很大,月底财务要求逐单解释。 原因:CKD 定价过程里没有挂包装费和运保费条件类型,收入只算了裸件价格;发货过账时功能范围设置不对,导致多个组件的成本挤到一个科目,分摊逻辑失效。 解决:先检查 VK11 条件记录里包装费条件是否正确维护;再到 VOFM 看定价例程,把包装费按数量条件并入发票。财务侧用 S_ALR_8701231 看科目余额,检查销售成本科目的功能范围拆分;必要时在 OBYC 里为不同物料组配置不同的销售成本科目。方案 V1.2 在这一块专门列了一个「收入—成本核对表」,建议每周跑一次,差异超阈值就逐单查 VA03 和 MB03。
6. 进阶验证:用 MD04 和装箱单检查方案是否跑对
拿到 DBP 项目这份 V1.2 方案后,建议先建一个真实 CKD 测试订单,按四条路径做验证,比把 PPT 从头背到尾管用得多。第一条路径:MD04 需求穿透。对每个组件料号跑 MD04,确认销售订单需求已经按 BOM 展开成组件计划订单;如果需求还是挂在母料号上,立刻回头查策略组和 BOM usage。第二条路径:VL03N 检查交货单完整性。重点看行项目是否已生成 HU、每个 HU 的箱号是否唯一、行项目数量之和是否等于销售订单数量。第三条路径:数据库层面核对装箱数据,用下面的查询把 VEKP 和 VEPO 关联出来:
SELECT vekp~exidv AS box_no, vepo~matnr AS material, vepo~menge AS quantity FROM vekp INNER JOIN vepo ON vepo~venum = vekp~venum WHERE vepo~vbeln = '0080001234'这段 SQL 的逻辑是:VEKP 存箱号(EXIDV),VEPO 存每个箱里的物料和数量,两个表通过内部包装单位号(VENUM)关联,按交货单号过滤。如果查询结果里某个交货单的行项目数量不等于 VEKP 里的数量总合,说明包装漏了组件,直接回 VL02N 补包装。用 SE16N 也能手工筛,但写成 SQL 更适合塞进日常巡检脚本。
第四条路径:VF03 检查发票条件和金额。将发票行项目金额与销售订单定价过程的各条件类型加总对比,确保包装费被包含。验证通过后再按方案里的「收入—成本核对表」跑一次,把组件出库成本和发票收入放并列,差异超过财务设定的阈值就需要逐单追溯。
| 验证路径 | Tcode/SQL | 判断标准 | 失败时先查 |
|---|---|---|---|
| BOM 展开 | VA03/VL03N | 交货单行项目=组件 | BOM usage、有效期 |
| 需求传递 | MD04 | 组件有计划订单 | 策略组、MRP 类型 |
| 装箱完整 | SQL 查 VEKP/VEPO | 每行项目有 HU | 包装操作、HU 状态 |
| 开票金额 | VF03 | 含包装费、无差异 | 条件记录、定价例程 |
这套自检流程是我从 DBP 项目回访时带回来的,也是后面接手的 SAP 项目里唯一没改过的验证顺序。连续两批 CKD 订单的报关数据都对不上之后,我养成了一个习惯:凡是 CKD 方案,头两个单子必须强制走一遍「订单—交货—装箱—开票」四步核对,把 MD04、VL03N、装箱查询、VF03 四张表放到同一个 Excel 里,确认箱号数量、发票金额、BOM 数量三者相等才放行。希望帮到你。
本文还有配套的精品资源,点击获取