简介:本资源是一份聚焦SAP SD模块交货单类型配置与应用的深度解析文档,面向SAP初/中级顾问、销售与分销业务流程设计人员及系统实施工程师,解决交货单类型定义混乱、凭证类别误用、路径报错(如000043)、WM仓码冲突、自动包装失效等典型配置难题。文档以PDF格式呈现,共1个文件,大小191KB,内容结构清晰,覆盖凭证类别(J/7/T/G)语义、数字系统编号规则、订单参考逻辑(含201/202项目需求)、库存选址与输出确定过程、交货分解与合作伙伴确定、再计划提示机制、WMS分配模式及屏幕显示控制等核心参数,辅以实务场景说明与错误代码解读。已有983人学习下载,读者可直接掌握交货单类型在零售、退货、内向收货及跨公司STO等多业务场景下的差异化配置要点与排错依据,是SAP SD模块落地实施与运维优化的实用型配置指南。
1. SAP-SD 交货单类型:不是配置菜单里的一个下拉框,而是整条出库链路的“交通信号灯系统”
很多刚接触SAP-SD模块的开发者或业务顾问,第一次在OVLK事务码里点开“交货单类型”维护界面时,下意识以为这只是个命名规范——比如“LF”代表标准交货、“NL”代表无订单交货。但实际落地中你会发现:一旦选错交货单类型,后续的拣配策略不触发、库存移动类型自动变成999、甚至WM模块根本收不到上架任务——所有环节像被掐断了神经。这不是配置失误,而是底层逻辑没对齐。交货单类型(Delivery Type)本质是SAP对“一次物理出库行为”的语义建模:它决定了这张单据是否关联销售订单、能否拆单合并、是否允许反向冲销、库存过账用哪个移动类型、是否生成运输计划、甚至影响批次确定和序列号管理。它不参与前台UI渲染,却深度耦合在VL01N/VL02N/VL03N整个交货生命周期里。如果你正在做国内某制造企业SAP S/4HANA 2022迁移项目,或要对接WMS系统做交货单自动下发,又或者正被“为什么同一张销售订单能生成两种不同交货单”这类问题卡住——那你不是在调一个参数,而是在校准整条物流执行链路的触发开关。本文就从一个真实模拟项目X的落地过程出发,把交货单类型怎么选、怎么配、为什么这么配、踩过哪些坑,全摊开讲清楚。
2. 交货单类型的核心字段解析:5个必看字段决定80%的业务适配度
交货单类型在SAP中由事务码OVLK统一维护,其主数据结构存储在表TVLK中。但真正起作用的,是它背后绑定的7大属性组(如“交货相关”“库存管理”“运输”等),而其中5个字段直接决定该类型能否支撑你的业务场景。以下字段均需在OVLK中逐项核对,不能仅凭名称猜测。
2.1 “参考凭证类别”(Ref. Doc. Category):决定这张交货单“有没有爹”
该字段定义交货单可引用的上游单据类型,取值来自表TVKOT(凭证类别)。常见值包括:
C:销售订单(Sales Order)→ 对应标准交货LFH:退货订单(Returns Order)→ 对应退货交货REK:采购订单(PO)→ 用于第三方采购直发场景- 空值:表示无需参考凭证,即“无订单交货”(如NL、NLCC)
关键逻辑:若此处设为
C,但用户在VL01N中尝试手工创建交货单且不输入销售订单号,系统会直接报错“必须输入参考凭证”。反之,若设为空值却要求必须关联销售订单,则业务流程会断裂。某高校实验室曾因将样品寄送交货类型误设为C,导致市场部无法独立发起技术样品出库,硬生生拖慢客户POC周期两周。
2.2 “交货类型决定”(Delivery Type Determination):让系统“自己猜对”而不是靠人填
该字段控制交货单类型的自动带出逻辑,取值为A(自动)、M(手动)或B(混合)。生产环境中强烈建议设为A,否则每张交货单都要人工选择类型,既易错又不可审计。
自动决定依赖两个前置条件:
- 销售订单行项目中已维护“交货类型”字段(VBAK-AUTLF / VBAP-LFART)
- 事务码OVLP中已配置“交货类型决定规则”,按销售组织+分销渠道+产品组+发货工厂组合匹配
* 示例:OVLP中一条典型规则(简化示意) * 销售组织: 1000 | 分销渠道: 10 | 产品组: M001 | 发货工厂: 1000 → 交货类型: LF * 销售组织: 1000 | 分销渠道: 20 | 产品组: S001 | 发货工厂: 2000 → 交货类型: NL参数说明:
A模式下,系统在VL01N初始屏幕自动带出交货类型,用户不可修改;M模式下,用户必须手动输入;B模式下,系统带出但允许覆盖。我们实测发现,当销售订单含多行不同产品组时,若OVLP未覆盖全部组合,系统默认回退到LF,极易掩盖配置缺口——这是后期排查“为什么总生成LF”的高频盲区。
2.3 “库存过账移动类型”(Movement Type for Stock Posting):库存数字怎么变,它说了算
该字段指向库存移动类型(Movement Type),取值来自表T156。它不决定“是否过账”,而决定“以什么方式过账”。例如:
| 交货类型 | 移动类型 | 库存影响 | 典型场景 |
|---|---|---|---|
| LF | 601 | 销售出库:非限制使用 → 已发货 | 标准客户订单发货 |
| RE | 651 | 退货入库:已发货 → 非限制使用 | 客户退货收货 |
| NL | 601 | 同上 | 无订单样品寄送 |
| UB | 641 | 转储发货:非限制使用 → 在途 | 工厂间调拨 |
血泪经验:某公司曾将内部调拨交货类型UB的移动类型误配为601(销售出库),结果财务月结时发现“主营业务成本”异常飙升——因为601触发COGS自动记账,而641只走库存科目。修复后需补运行MR99冲销,耗时3人日。记住:移动类型决定会计凭证行项目,不是交货类型本身。
2.4 “拣配相关”(Picking Relevance):决定仓库作业是否启动
该字段控制是否触发拣配(Picking)流程,取值为X(是)、E(仅部分拣配)、空(否)。注意:它与WM模块是否启用无关,而是SD层的作业开关。
X:系统在VL01N保存后自动生成拣配单(LTAP/LQUA表写入),并允许在VL06O中执行拣配E:仅对特定项目(如标记为“拣配相关”的行项目)生成拣配任务- 空:完全跳过拣配,直接进入过账
避坑提示:若你启用了WM模块,但交货单类型设为空值,即使WM配置完整,上架任务(TO)也不会生成。某汽车零部件客户因此出现“交货单已过账,但WMS系统无任何任务”的黑匣子问题,根源就是NLCC(无订单交货)类型被错误设为“不拣配”。
2.5 “运输相关”(Transport Relevance):运输计划、运费计算、承运商协同的起点
该字段决定是否激活运输模块(LE-TRA)功能,取值为X(是)或空(否)。设为X后,系统才允许:
- 在VL02N中维护运输计划(装运点、承运商、预计发货时间)
- 运行VT01N创建运输订单(Transport Order)
- 启用运费计算(TAXI、TAXI2)
- 与TMS系统通过IDoc(ORDERS05)交互
实操边界:即使不启用LE-TRA,只要此字段为
X,系统仍会在交货单抬头生成“运输计划”标签页,但无法保存数据。某快消企业曾因将电商直发交货类型(ZEC)设为X但未配置运输计划参数,导致前端ERP页面反复报“运输计划未维护”,实际业务只需简单过账——最终将该字段置空解决。
3. 交货单类型与销售订单类型的强耦合:为什么改一个单据类型,要联动检查五个地方
交货单类型(LFART)与销售订单类型(AUART)并非松耦合关系,而是通过四层映射强制绑定。忽略任一层,都会导致VL01N报错或流程中断。以下是某模拟项目X中验证过的完整链路:
3.1 第一层:销售订单类型 → 交货单类型(OVLP规则)
如前所述,OVLP中按销售组织+分销渠道+产品组+发货工厂组合,指定默认交货类型。但该规则仅对销售订单行项目生效,且前提是销售订单类型本身允许交货。
3.2 第二层:销售订单类型主数据(OVAK)中的“交货相关”标志
事务码OVAK维护销售订单类型(如OR、TA、RE等),其中字段“交货相关”(Delivery relevance)必须勾选,否则无论OVLP如何配置,该订单类型都无法生成交货单。常见错误:将内部订单类型(如ZIN)误设为“不交货相关”,导致后续无法做内部发货。
3.3 第三层:销售订单类型 → 项目类别(Item Category)映射(OV42)
销售订单行项目类别(如TAN、TAE、KMN)由OV42配置,而项目类别又决定:
- 是否允许交货(Item category usage = "D")
- 默认交货类型(Delivery type field in item category)
- 是否允许拆单(Split delivery allowed)
关键逻辑:若OV42中某项目类别未维护“默认交货类型”,则系统回退到OVLP规则;若OV42中维护了,但与OVLP冲突,以OV42为准。某医疗器械客户曾因TAN(标准行项目)在OV42中误配为交货类型
RE(退货),导致所有新销售订单生成退货交货单,紧急回滚耗时8小时。
3.4 第四层:项目类别 → 交货单类型 → 移动类型(OVLP + OVLK)
这才是最终闭环:项目类别决定交货单类型,交货单类型决定移动类型,移动类型决定库存与会计影响。三者缺一不可。
* 模拟项目X中一条完整映射链(已脱敏) * 销售订单类型: OR (标准订单) * → OVAK: 交货相关 = X * → OV42: OR + TAN → 项目类别TAN → 默认交货类型 = LF * → OVLK: LF → 移动类型 = 601 * → 最终效果:VL01N中输入OR订单,自动带出LF,过账走601验证命令:在SE16N中查表TVAK(销售订单类型)、TVAP(项目类别)、TVLK(交货单类型)、T156(移动类型),用如下SQL快速定位断点:
SELECT a.auart, a.lfart, b.pstyv, c.lfart, d.bwart FROM tvak AS a JOIN tvap AS b ON a.auart = b.auart JOIN tvlk AS c ON b.lfart = c.lfart JOIN t156 AS d ON c.bwart = d.bwart WHERE a.auart = 'OR' AND b.pstyv = 'TAN';若返回空集,说明映射链在某处断裂。
4. 常见问题排查:5个高频翻车现场与对应解法
交货单类型配置错误不会立刻报错,往往在VL02N过账、VL06O拣配或MIRO发票校验时才暴露。以下是我们在多个项目中总结的5类典型现象,按“现象→原因→解决”结构整理,每条均可直接复现验证。
4.1 现象:VL01N创建交货单时,系统报错“交货类型XXX不允许用于此销售订单类型”
- 原因:销售订单类型(OVAK)中“交货相关”未勾选,或OVLP中未配置该销售组织+分销渠道组合的交货类型规则
- 排查路径:
- 进入OVAK,查销售订单类型(如OR),确认字段“交货相关”(Delivery relevance)为
X - 进入OVLP,输入销售组织、分销渠道、产品组、发货工厂,确认存在匹配规则
- 进入OVAK,查销售订单类型(如OR),确认字段“交货相关”(Delivery relevance)为
- 解决:若OVAK未勾选,勾选后需重新生成销售订单(旧单无效);若OVLP缺失,新增规则并测试。
4.2 现象:交货单已保存,但VL06O中无拣配任务,且LTAP表无记录
- 原因:交货单类型(OVLK)中“拣配相关”字段为空,或销售订单行项目类别(OV42)中“拣配相关”未启用
- 排查路径:
- 查交货单抬头字段LFART,进OVLK确认该类型“拣配相关”=
X - 查销售订单行项目类别(VBAP-PSTYV),进OV42确认该类别“拣配相关”=
X
- 查交货单抬头字段LFART,进OVLK确认该类型“拣配相关”=
- 解决:二者必须同时为
X。若仅改OVLK,旧交货单仍无效,需重新创建。
4.3 现象:交货单过账后,库存减少但会计凭证未生成COGS分录
- 原因:交货单类型绑定的移动类型(OVLK中BWAART字段)未在OMJJ中配置“自动记账”
- 排查路径:
- 查交货单移动类型(如601)
- 进事务码OMJJ,查移动类型601,确认“自动记账”(Automatic posting)已激活,且配置了正确的总账科目(如主营业务成本、主营业务收入)
- 解决:在OMJJ中为该移动类型配置自动记账,注意区分评估范围(Valuation Area)。
4.4 现象:同一销售订单,有时生成LF,有时生成NL,且无规律
- 原因:OVLP中存在多条重叠规则,系统按“最具体匹配”原则选取,但配置人员未意识到产品组或发货工厂的继承关系
- 排查路径:
- 进OVLP,用“测试”按钮输入销售订单的完整参数(销售组织/分销渠道/产品组/发货工厂)
- 观察系统返回的交货类型及匹配规则编号
- 解决:删除冗余规则,确保每组参数唯一匹配;或统一用“*”通配符收口,避免隐式继承。
4.5 现象:交货单已过账,但WM模块未生成上架任务(TO)
- 原因:交货单类型“运输相关”=
X,但未配置LE-TRA基础参数(如装运点、承运商主数据),或IDoc端口未激活 - 排查路径:
- 查交货单抬头,确认“运输计划”标签页可编辑且能保存
- 进VL02N,点击“运输”→“创建运输订单”,看是否报错
- 解决:若报错“未维护装运点”,进OVZ2配置;若报错“IDoc端口未激活”,进WE21检查端口状态。
5. 进阶技巧:用ABAP报表批量校验交货单类型配置完整性
配置交货单类型不是一次性动作,尤其在S/4HANA升级或跨系统迁移时,需确保全量配置一致。我们开发了一个轻量ABAP报表(Z_CHECK_DELIVERY_TYPE),可在生产系统中每日后台运行,输出配置缺口报告。核心逻辑是校验四层映射的完整性,并高亮风险项。
5.1 报表设计思路:聚焦“可执行性”,不堆砌理论
该报表不验证字段值是否合理(如移动类型601是否真该用于销售出库),而是验证配置是否存在、是否可被系统读取、是否形成闭环。输出结果分为三类:
| 类型 | 描述 | 示例 |
|---|---|---|
| ❗阻断级 | 映射链断裂,VL01N必报错 | 销售订单类型OR在OVAK中“交货相关”=空 |
| ⚠️风险级 | 配置存在但可能引发业务歧义 | OVLP中同一销售组织有两条规则,产品组范围重叠 |
| ✅合规级 | 所有映射完整,可安全使用 | OR→TAN→LF→601全链路存在且唯一 |
5.2 关键代码段与参数说明
REPORT z_check_delivery_type. TYPES: BEGIN OF ty_result, auart TYPE auart, "销售订单类型 pstyv TYPE pstyv, "项目类别 lfart TYPE lfart, "交货单类型 bwart TYPE bwart, "移动类型 status TYPE char1, "状态:E=阻断,W=风险,S=合规 msg TYPE string, "说明 END OF ty_result. DATA: lt_result TYPE TABLE OF ty_result, ls_result TYPE ty_result. * 步骤1:查所有销售订单类型(TVAK)中"交货相关"为空的 SELECT auart FROM tvak INTO TABLE @DATA(lt_auart_no_del) WHERE lieferrelevant = space. LOOP AT lt_auart_no_del ASSIGNING FIELD-SYMBOL(<fs_auart>). ls_result-auart = <fs_auart>-auart. ls_result-status = 'E'. ls_result-msg = |销售订单类型{ <fs_auart>-auart }未启用交货相关,将无法生成交货单|. APPEND ls_result TO lt_result. ENDLOOP. * 步骤2:查OVLP中缺失规则的销售组织+分销渠道组合 SELECT DISTINCT vkorg, vtweg FROM vbak INTO TABLE @DATA(lt_vkorg_vtweg). SORT lt_vkorg_vtweg BY vkorg vtweg. DELETE ADJACENT DUPLICATES FROM lt_vkorg_vtweg. LOOP AT lt_vkorg_vtweg ASSIGNING FIELD-SYMBOL(<fs_vkorg>). CLEAR ls_result. SELECT SINGLE * FROM tvlp INTO @DATA(ls_tvlp) WHERE vkorg = @<fs_vkorg>-vkorg AND vtweg = @<fs_vkorg>-vtweg. IF sy-subrc <> 0. ls_result-status = 'E'. ls_result-msg = |销售组织{ <fs_vkorg>-vkorg }+分销渠道{ <fs_vkorg>-vtweg }在OVLP中无交货类型规则|. APPEND ls_result TO lt_result. ENDIF. ENDLOOP. * 步骤3:查交货单类型是否绑定有效移动类型(T156存在且激活) SELECT lfart, bwart FROM tvlk INTO TABLE @DATA(lt_tvlk). LOOP AT lt_tvlk ASSIGNING FIELD-SYMBOL(<fs_tvlk>). SELECT SINGLE * FROM t156 INTO @DATA(ls_t156) WHERE bwart = @<fs_tvlk>-bwart AND kschl = '0001'. "标准评估版本 IF sy-subrc <> 0. ls_result-status = 'W'. ls_result-msg = |交货单类型{ <fs_tvlk>-lfart }绑定的移动类型{ <fs_tvlk>-bwart }在T156中未配置|. APPEND ls_result TO lt_result. ENDIF. ENDLOOP. * 输出:ALV显示,支持导出Excel CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY' EXPORTING i_structure_name = 'TY_RESULT' TABLES t_outtab = lt_result.参数说明:
lieferrelevant = space:TVAK表中“交货相关”字段为空(字符型)tvlp:OVLP配置表,主键为销售组织(VKORG)+分销渠道(VTWEG)kschl = '0001':标准评估版本,避免多版本配置干扰- 报表运行权限:需授予S_DEVELOP(开发)和S_TABU_DIS(表查询)权限,生产环境建议由 BASIS 团队代为执行
5.3 实战验证:某制造企业S/4HANA 2022迁移中的应用
该企业原有ECC 6.0系统含12个销售组织、8个分销渠道,交货单类型配置分散在3个客户端。迁移前运行Z_CHECK_DELIVERY_TYPE,发现:
- 2个销售组织在OVLP中完全缺失规则(阻断级)
- 5个交货单类型绑定的移动类型在T156中未配置评估版本(风险级)
- 1个销售订单类型(ZIN)在OVAK中误关“交货相关”(阻断级)
团队据此生成《交货单类型配置修复清单》,3天内完成整改,避免了上线首周VL01N大面积报错。更关键的是,报表输出的“风险级”条目,帮业务顾问识别出3处历史遗留的模糊配置(如用LF处理样品寄送),推动业务部门重新定义流程,将NLCC类型正式纳入主流程。
我习惯在每个新项目启动时,把Z_CHECK_DELIVERY_TYPE加入“系统健康检查清单”,和SM50进程监控、DB02锁表检查放在一起。它不解决所有问题,但能提前3天告诉你:哪几条路已经塌方,哪几条路标牌被风刮歪了。配置不是越细越好,而是越闭环越稳。希望帮到你。
本文还有配套的精品资源,点击获取