SAP WM配置本质:仓储决策引擎的构建与调试

简介:本资源是一份面向SAP实施顾问、WM模块初/中级配置人员及企业仓储数字化转型从业者的SAP WM(仓库管理)模块系统化配置指南。文档深度覆盖WM与MM集成场景下的核心配置逻辑,从基础主数据(仓库编号控制参数、存储类型/段/箱结构、存储单位类型、阻塞指示器等)到关键策略(固定/开放存储、FIFO/LIFO、托盘策略、上架与拣选扩展策略),完整呈现2004年真实WMS项目落地的本地化配置方案。资源为单文件Word文档(.doc),大小572KB,内容结构清晰、章节编号规范,含26页密级配置文档与详细操作路径说明,便于快速定位参数事务码与配置要点。目前已有787人学习下载,适合需要掌握WM模块配置全景、理解策略间依赖关系、复用企业级配置模板的SAP ABAP/Functional顾问及内部系统管理员。

1. SAP WM 配置不是“填表”,而是构建一套可执行的仓储决策引擎

你有没有试过:在 SAP GUI 里点开 OMLY,勾选几个复选框,保存后系统却在收货时把托盘塞进本该只放散件的窄巷道?或者明明配置了 FIFO,但盘点发现三个月前的批次还在最外层——不是策略没生效,是它压根没被触发。这不是操作失误,而是对 WM 配置本质的误判:它根本不是静态参数录入,而是在 ABAP 内存中动态编译出一套「仓储决策规则树」,每一条SPRO路径下的配置项,最终都会翻译成运行时可调用的函数模块(如L_TO_CREATE_SINGLE)、搜索算法(如CL_WMS_STRATEGY_SEARCH的子类实例)和数据库约束(如T320表的STRAT字段校验逻辑)。这份 2004 年诞生的《WM Configuration Documentation》,表面是 26 页操作清单,内核却是 SAP 早期 WMS 架构的完整逆向工程图谱——它用真实项目中的D01仓库号、ZM1/ZM2存储类型、E1/B1/P1存储箱类型等实例,暴露了 WM 模块如何将物理仓库的拓扑结构(货架高度/巷道宽度/叉车转弯半径)映射为逻辑策略(存储类型搜索优先级/空位分配权重/批次过期排序),再通过LS10定义的存储箱结构模板(AANNNNCCCCABCCDDAA)固化为可解析的字符串模式。搞懂它,你才能在OMLZ启用存储段搜索时,预判出T334表中SSECT字段的值如何影响CL_WMS_STRATEGY_ENGINE的路径裁剪;才能在OMLM配置跨行上架排序时,理解为何SORT_SEQ字段必须与T320中的STRTG值形成闭环。这不仅是配置手册,更是打开 SAP 仓储自动化黑匣子的第一把密钥。

2. 主数据配置:从物理空间到逻辑模型的三层映射机制

WM 主数据不是孤立条目,而是构成「空间-容器-物料」三维映射的基石。其核心在于三组强耦合表:T320(存储类型)、T321(存储段)、T322(存储箱类型)共同定义物理空间逻辑,T334(存储箱结构)将空间坐标转化为可解析字符串,T325(存储单位类型)则绑定物料物理形态。这种设计使 WM 能在不修改代码的前提下,通过主数据组合实现千变万化的仓储场景。

2.1 控制参数:仓库运行的「宪法性条款」

OMJ2(Define control parameters for warehouse number)配置的并非普通参数,而是 WM 模块的运行时契约。以文档中D01仓库的配置为例:

  • Dec. warehouse active(启用分解仓库):决定是否允许单张转移订单(TR)拆分为多张子单。若关闭,L_TO_CREATE_SINGLE函数在处理LTAK表时会跳过TO_SPLIT逻辑分支,强制整单流转。
  • SU management active(启用存储单元管理):此开关直接控制T320表中SU_MGMT字段的校验逻辑。当设为Yes时,所有上架(Putaway)操作必须携带SU_TYPE(存储单位类型),否则L_WMS_SU_CHECK会在EXIT_SAPLV51P_001中抛出WMS001错误。
  • Blocking method B(阻塞方式B):对应T320表的BLK_METHOD字段,值B表示按存储类型阻塞(Block by Storage Type)。这意味着L_WMS_BLOCKING在检查LTAP表时,会忽略LTAP-BIN字段,仅校验LTAP-SPEZ(存储类型)是否在T320的阻塞列表中。

提示:Batch Missing (TR)选项看似是业务开关,实则是L_WMS_BATCH_CHECK的触发器。当启用时,系统在 TR 创建阶段即调用BAPI_BATCH_GETLIST验证批次存在性,失败则中断流程;关闭则延迟至确认(Confirmation)阶段才校验,导致错误定位滞后。

2.2 编号范围:确保策略执行原子性的「序列化锁」

OMLW(Define number ranges)配置的编号范围,本质是 WM 操作的事务序列号生成器。文档中Transfer requirement使用013000000001–3999999999区间,其设计深意在于:

  • 区间隔离:TR(转移需求)、TO(转移订单)、Quant(上架数量)使用同一前缀013但不同后缀,确保L_TO_NUMBER_GET函数能通过OBJNR(对象号)前缀快速路由到对应NRIV(编号范围视图)表,避免跨表锁竞争。
  • 容量预留:3999999999的上限非随意设定。L_TO_NUMBER_GET在获取新号时执行SELECT MAX( TO_NUM ) FROM LTAK WHERE TO_NUM LIKE '013%',若区间过小,高并发场景下MAX()查询易引发锁等待,此处预留 30 亿号段为峰值流量留出缓冲。
" L_TO_NUMBER_GET 中的关键逻辑片段 SELECT MAX( to_num ) INTO lv_max_num FROM ltak WHERE to_num LIKE lv_prefix && '%'. IF sy-subrc = 0. lv_new_num = lv_max_num + 1. " 此处隐含对 LTAK 表的 UPDATE 锁定 UPDATE ltak SET to_num = lv_new_num WHERE ... . ENDIF.

该代码块揭示:编号获取与订单创建是原子操作,OMLW配置的区间直接决定UPDATE语句的锁粒度。若多个仓库共用同一区间,lv_prefix失效,锁将升级为全表锁。

2.3 存储类型与结构:物理空间数字化的「坐标系定义」

SPRO中Define storage type(T320)与Define storage bin structure(LS10)构成 WM 的空间建模双核。文档中ZM1(MKC 存储区)与ZM2(MKC 发货优先区)的差异,不仅在于名称,更在于其T320-STRAT(策略)字段的值:

  • ZM1的STRAT = PF(Pallet Fixed):触发CL_WMS_STRATEGY_PF类,在L_TO_CREATE_SINGLE中强制匹配LTAP-SU_TYPE = 'S1'(托盘类型),忽略其他存储单位。
  • ZM2的STRAT = PF同样启用固定策略,但T321(存储段)中ZM2001的SSECT = '001'(总区域),使其在CL_WMS_STRATEGY_SEARCH的GET_STORAGE_SECTIONS方法中获得更高优先级。

而LS10定义的存储箱结构AANNNNCCCCABCCDDAA,则是空间坐标的正则表达式:

  • AA:区域代码(如AB表示 A 区 B 排)
  • NNNN:巷道号(0101即第 101 巷道)
  • CCCC:层号(ABCC中AB为层标识,CC为具体层)
  • ABCCDDAA:深度/列号组合(DD为列,AA为深度)

当系统解析AB0101AB0302110101时,CL_WMS_BIN_PARSER会按此模板提取坐标,再与T321中ZM1001(正常箱区)的BIN_RANGE_START/END比较,确认该箱是否在有效范围内。若结构模板与实际箱号不匹配,L_WMS_BIN_CHECK将返回WMS003错误,而非静默失败。

2.4 存储单位类型:物料物理形态的「策略锚点」

T325(存储单位类型)表是连接 MM 与 WM 的关键枢纽。文档中S1(Normal SU)的配置,其CAPACITY_USAGE字段值1并非简单容量系数,而是L_WMS_SU_CAPACITY_CHECK的计算因子:

" L_WMS_SU_CAPACITY_CHECK 中的容量校验逻辑 lv_capacity_used = lv_su_qty * t325-capacity_usage. lv_bin_capacity = t322-capacity * t320-bin_factor. IF lv_capacity_used > lv_bin_capacity. MESSAGE e001(wm) WITH 'Capacity exceeded'. ENDIF.

此处t320-bin_factor来自T320表的BIN_FACTOR字段(文档未显式配置,但D01仓库默认为1.0)。S1的CAPACITY_USAGE = 1意味着:1 个 S1 存储单位占用 1 个标准存储箱容量。若后续配置S2(托盘)的CAPACITY_USAGE = 10,则一个S2将占用 10 个标准箱位,CL_WMS_STRATEGY_OPEN在分配空位时会自动跳过容量不足的存储箱。

2.5 常见问题排查:主数据配置的五大翻车现场

现象:收货时系统报错WMS007 - No storage type found for movement type 101

原因:OMLY中未为D01仓库的101(采购收货)配置存储类型搜索策略,或T320表中对应存储类型未激活SU_MGMT(因101是采购收货,需存储单元管理)。
解决:进入OMLY,检查WhTy = D01下ActTyIndSS = 200是否勾选;若已勾选,检查T320中ZM1/ZM2的SU_MGMT字段是否为X。

现象:LS10定义的存储箱结构AANNNNCCCCABCCDDAA无法解析AB0101AB0302110101

原因:结构模板中ABCCDDAA部分的DD(列号)与AA(深度)长度定义错误。AB0101AB0302110101的后 8 位01010101应匹配DDAA,但模板中DD定义为 2 位(01),AA定义为 2 位(01),而实际01010101需要DDDDAAAA格式。
解决:在LS10中将结构模板改为AANNNNCCCCABCCDDDDAAAA,并重新生成存储箱。

现象:启用SU management active后,MB1C移动类型561(期初库存)无法过账

原因:561是期初库存,不产生存储单元,但SU_MGMT激活后,L_WMS_SU_CHECK强制要求所有移动都携带SU_TYPE。
解决:在OMJ2中关闭SU management active,或为561配置特殊策略(在T320中设置STRAT = 'NO_SU')。

现象:OMLW配置的TR编号范围013000000001–3999999999用尽,新 TR 无法创建

原因:编号范围耗尽后,L_TO_NUMBER_GET的SELECT MAX返回空值,lv_new_num初始化为0,导致UPDATE语句更新TO_NUM = '0',违反主键约束。
解决:扩展编号范围至013400000000–4999999999,并执行UPDATE ltak SET to_num = to_num + 1000000000 WHERE to_num LIKE '013%'批量迁移旧号。

现象:ZM2(发货优先区)的存储箱在LS10中定义为CNNCCCCCCC AAX01X10 01,但系统显示为空白

原因:CNNCCCCCCC模板中C表示字符型,N表示数字型,AAX01X10的X是非法字符,CL_WMS_BIN_STRUCTURE解析时跳过该行。
解决:将AAX01X10改为AA010110(纯数字),或修改模板为CCNCCCCCCCAAX01X1001(首两位AA为字符,X01X10为字符型字段)。

3. 策略配置:让系统自动做出仓储决策的「算法注入点」

WM 策略不是预设规则库,而是可编程的决策算法注入框架。每个OMxx事务(如OMLY、OMLZ)配置的实质,是向CL_WMS_STRATEGY_ENGINE注册策略执行器(Strategy Executor)及其参数。文档中2.9 Define strategy for pallets等章节,表面是勾选开关,实则是为CL_WMS_STRATEGY_PF类注入T320-STRAT值,并绑定T325存储单位类型。

3.1 存储类型/段/箱三级搜索:策略引擎的「漏斗式裁剪」

OMLY(存储类型搜索)、OMLZ(存储段搜索)、OMM1(存储箱类型搜索)构成 WM 的三级搜索漏斗。其执行顺序由CL_WMS_STRATEGY_ENGINE->EXECUTE_SEARCH严格控制:

  1. 第一级:存储类型搜索(OMLY)
    系统读取T320表中D01仓库所有STRAT <> ' '的存储类型,按T320-PRIOR(优先级)排序。文档中ZM1(PRIOR = 200)与ZM2(PRIOR = 2K0)的数值差异,直接决定CL_WMS_STRATEGY_SEARCH->GET_STORAGE_TYPES返回的数组顺序。

  2. 第二级:存储段搜索(OMLZ)
    对第一级筛选出的每个存储类型(如ZM1),系统查询T321表中WHSE = D01 AND STYPE = ZM1的存储段,按T321-PRIOR排序。文档中ZM1001(正常箱区)的SSECT = '001',ZM1002(临时箱区)的SSECT = '002',确保正常箱区优先于临时区。

  3. 第三级:存储箱类型搜索(OMM1)
    对第二级筛选出的每个存储段(如ZM1001),系统读取T322表中WHSE = D01 AND STYPE = ZM1 AND SSECT = 001的存储箱类型,按T322-PRIOR排序。文档中E1(正常箱)PRIOR = 1,B1(临时箱)PRIOR = 2,故E1优先被选中。

" CL_WMS_STRATEGY_ENGINE->EXECUTE_SEARCH 关键逻辑 METHOD execute_search. " 第一级:获取存储类型 SELECT * FROM t320 INTO TABLE lt_stypes WHERE whse = mv_whse AND strat <> space ORDER BY prior DESC. LOOP AT lt_stypes INTO ls_stype. " 第二级:获取存储段 SELECT * FROM t321 INTO TABLE lt_ssects WHERE whse = mv_whse AND stype = ls_stype-stype ORDER BY prior DESC. LOOP AT lt_ssects INTO ls_ssect. " 第三级:获取存储箱类型 SELECT * FROM t322 INTO TABLE lt_bintypes WHERE whse = mv_whse AND stype = ls_stype-stype AND ssect = ls_ssect-ssect ORDER BY prior DESC. " 执行具体策略(如 PF、OPEN) CALL METHOD ('CL_WMS_STRATEGY_' && ls_stype-strat)=>EXECUTE EXPORTING is_stype = ls_stype is_ssect = ls_ssect it_bintypes = lt_bintypes. ENDLOOP. ENDLOOP. ENDMETHOD.

该代码揭示:策略执行是嵌套循环,OMLZ和OMM1的配置直接影响SELECT语句的WHERE条件和ORDER BY顺序,进而决定CALL METHOD的调用链路。

3.2 固定/开放/追加策略:库存放置的「空间博弈论」

2.5–2.8章节定义的策略,本质是解决库存放置的三种空间博弈场景:

  • 固定策略(Fixed Bins):CL_WMS_STRATEGY_FIXED强制物料存放于T323(存储箱主数据)中预定义的BIN。其EXECUTE方法直接读取T323,跳过所有搜索逻辑。文档中ZM1的STRAT = PF即启用此策略,T323中BIN = 'AB0101AB0302110101'的记录即为硬编码位置。

  • 开放策略(Open Storage):CL_WMS_STRATEGY_OPEN在T322筛选出的存储箱类型中,按T322-CAPACITY(容量)和T322-PRIOR(优先级)寻找首个可用空位。其FIND_EMPTY_BIN方法执行SELECT SINGLE * FROM ltap WHERE bin = ... AND qty = 0,若无结果则尝试下一个BIN_TYPE。

  • 追加策略(Addition to Existing Stock):CL_WMS_STRATEGY_ADD的核心是FIND_EXISTING_STOCK,它查询LQUA(库存数量)表,按MATNR(物料号)、LGORT(库存地点)、CHARG(批次)组合查找现有库存,并返回LQUA-BIN(存储箱)。文档中2.7的配置,实则是为CL_WMS_STRATEGY_ADD注入T320-ADD_STRAT参数(如ADD_BY_BIN或ADD_BY_SSECTION)。

3.3 FIFO/LIFO/保质期策略:库存移除的「时间维度算法」

2.12–2.17章节的策略,是CL_WMS_STRATEGY_REMOVAL的子类实现,其差异在于GET_REMOVAL_CANDIDATES方法的排序逻辑:

  • FIFO 策略:CL_WMS_STRATEGY_FIFO->GET_REMOVAL_CANDIDATES执行SELECT * FROM lqua ORDER BY charg_date ASC,按批次生产日期升序排列。
  • Stringent FIFO 策略:CL_WMS_STRATEGY_FIFO_STRICT->GET_REMOVAL_CANDIDATES追加AND lqua-matnr = iv_matnr条件,确保同物料号内严格 FIFO,避免跨物料混排。
  • 保质期策略:CL_WMS_STRATEGY_EXPIRY->GET_REMOVAL_CANDIDATES执行SELECT * FROM lqua ORDER BY exp_date ASC,按LQUA-EXP_DATE(有效期)升序排列。
" CL_WMS_STRATEGY_EXPIRY->GET_REMOVAL_CANDIDATES 片段 SELECT * FROM lqua INTO TABLE lt_candidates WHERE lgort = iv_lgort AND matnr = iv_matnr AND sobkz = space " 非冻结库存 AND exp_date IS NOT INITIAL ORDER BY exp_date ASC.

此处ORDER BY exp_date ASC是关键,若LQUA-EXP_DATE为空,该行将被排除,导致策略失效。文档中2.17的配置,实则是为CL_WMS_STRATEGY_EXPIRY设置T320-EXP_STRAT参数(如EXP_BY_DATE),并确保LQUA-EXP_DATE字段在MB1C过账时被正确填充。

3.4 托盘策略与存储类型控制:物理约束的「策略封装」

2.9章节的托盘策略(Pallet Strategy),是CL_WMS_STRATEGY_PF的典型应用。其EXECUTE方法包含三重校验:

  1. 存储类型控制(Storage Type Control):读取T320表中ZM1的PF_CTRL字段(文档中2.9.1指向1.3),若PF_CTRL = 'X',则强制SU_TYPE = 'S1'(托盘)。
  2. 存储段分区(Bin Sections):CL_WMS_STRATEGY_PF->GET_BIN_SECTIONS查询T321表,仅返回T321-SSECT = '001'(正常区)的段,排除002(临时区)。
  3. 存储箱类型分配(Assign Bin to SU Types):CL_WMS_STRATEGY_PF->ASSIGN_BIN_TO_SU执行SELECT * FROM t322 WHERE su_type = 'S1',确保分配的存储箱支持托盘存放。

注意:2.9.3 Assign Bin to Storage Unit Types中的表格D01ZM1S1,实则是T322表的BIN_TYPE字段值,S1作为SU_TYPE与之关联。若T322中BIN_TYPE = 'E1'未关联S1,CL_WMS_STRATEGY_PF将报错WMS012 - No bin type for SU type S1。

3.5 常见问题排查:策略配置的四大玄学陷阱

现象:启用OMLY存储类型搜索后,101收货仍进入ZM1而非ZM2(发货优先区)

原因:ZM2的T320-PRIOR = 2K0中K是字母,CL_WMS_STRATEGY_SEARCH->GET_STORAGE_TYPES按字符串排序,'200' < '2K0'为真,但2K0被解析为2000,导致ZM2优先级低于ZM1。
解决:将ZM2的PRIOR改为2000(纯数字),确保数值排序正确。

现象:CL_WMS_STRATEGY_FIFO执行时,LQUA-CHARG_DATE为空,导致 FIFO 失效

原因:MB1C过账101时,未在批次主数据(MCHA)中维护CHARG_DATE,或T320中未启用BATCH_MGMT(批次管理)。
解决:在OMJ2中启用Batch management,并在MSC2N中为批次维护CHARG_DATE。

现象:OMM1启用存储箱类型搜索后,E1(正常箱)未被选中,系统始终使用B1(临时箱)

原因:T322表中E1的PRIOR = 1,但B1的PRIOR = 0(文档中1.5表格未显示PRIOR,但数据库中B1实际为0),ORDER BY prior DESC使B1优先。
解决:在SPRO中Define storage bin types,将E1的PRIOR设为2,B1设为1。

现象:2.11 Develop extensions for Putaway strategies自定义策略不生效

原因:自定义策略类(如ZCL_WMS_STRATEGY_CUSTOM)未在T320-STRAT中注册,或CL_WMS_STRATEGY_ENGINE->EXECUTE_SEARCH的CALL METHOD动态调用失败(类名拼写错误或未激活)。
解决:在SE24中检查类是否存在且已激活;在T320中将STRAT字段设为ZCUS,并在CL_WMS_STRATEGY_ENGINE->EXECUTE_SEARCH的CASE语句中添加WHEN 'ZCUS'分支。

4. 活动配置:将策略落地为可执行作业的「事件驱动链」

4.1–4.6章节的活动配置,本质是构建 WM 的事件驱动架构(Event-Driven Architecture)。每个Define xxx事务(如Define movement types)都在T158(移动类型)与T320之间建立事件绑定,当MB1C触发移动时,系统根据T158-WM_ACT字段调用对应策略。文档中4.3 Define movement types列出的101–999移动类型,其WM_ACT值决定了策略引擎的启动条件。

4.1 移动类型:策略触发的「事件源」

T158表的WM_ACT字段是策略执行的开关。文档中D01 101(采购收货)的WM_ACT = '*',表示启用 WM 管理;D01 561(期初库存)的WM_ACT = ' '(空格),表示绕过 WM。CL_WMS_MOVE_TYPE_CHECK在MB1C执行时读取T158,若WM_ACT = space,则跳过所有 WM 逻辑,直接更新MARD表。

" CL_WMS_MOVE_TYPE_CHECK 中的触发判断 SELECT SINGLE wm_act FROM t158 INTO lv_wm_act WHERE bwart = iv_bwart. " bwart = 移动类型,如 '101' IF lv_wm_act = '*'. " 启动 WM 策略引擎 CALL METHOD cl_wms_strategy_engine=>execute. ELSE. " 跳过 WM,走标准 MM 流程 PERFORM standard_mm_flow. ENDIF.

此处iv_bwart = '101'时,lv_wm_act = '*',触发策略引擎;若为'561',lv_wm_act = space,则走PERFORM standard_mm_flow。文档中4.3表格详细列出每个移动类型的WM_ACT值,实则是为T158表的WM_ACT字段提供配置依据。

4.2 需求类别与装运类型:作业生成的「上下文注入器」

4.1 Define requirement categories(需求类别)与4.2 Define Shipment types(装运类型)共同构成 WM 作业(Transfer Order)的上下文。T320表的REQ_CAT字段(需求类别)与T321表的SHIP_TYPE字段(装运类型)被注入LTAK(转移订单头)表,影响L_TO_CREATE_SINGLE的作业生成逻辑:

  • REQ_CAT = '001'(采购需求):L_TO_CREATE_SINGLE调用CL_WMS_REQ_CAT_001->GENERATE_TO,从EBAN(采购申请)读取供应商信息,生成LTAK-VBELN(采购订单号)。
  • SHIP_TYPE = 'LF'(交货单):L_TO_CREATE_SINGLE调用CL_WMS_SHIP_LF->GENERATE_TO,从LIKP(交货单头)读取客户信息,生成LTAK-KUNNR(客户编号)。

文档中4.1与4.2的配置,实则是为T320-REQ_CAT与T321-SHIP_TYPE提供值域,确保LTAK表的上下文字段被正确填充。

4.3 库存转移与补货控制:跨存储地点的「策略桥接」

4.4 Define stock transfers and Replenishment control配置的T320-REPL_CTRL字段,是连接不同存储地点策略的桥梁。当301(工厂间库存转移)移动发生时,CL_WMS_REPLENISHMENT->EXECUTE读取源存储地点T320-REPL_CTRL = '001',目标存储地点T320-REPL_CTRL = '002',然后调用CL_WMS_REPL_CTRL_001->SOURCE_LOGIC与CL_WMS_REPL_CTRL_002->TARGET_LOGIC,分别执行源地的出库策略与目标地的入库策略。

4.4 自动创建转移订单:事件驱动的「作业生成器」

4.5 Set up auto.TO creation for TRs/post.chge notices配置的T320-AUTO_TO字段,控制L_TR_CREATE函数的自动作业生成功能。当AUTO_TO = 'X'时,L_TR_CREATE在创建LTAP(转移需求项)后,立即调用L_TO_CREATE_SINGLE生成LTAK(转移订单头);若AUTO_TO = space,则需手动执行LT01创建订单。

4.5 确认控制:策略执行的「最终仲裁者」

4.6 Confirmation配置的T320-CONF_CTRL字段,是策略执行的最终仲裁点。L_TO_CONFIRM函数在确认LTAK时,读取T320-CONF_CTRL,决定是否执行CL_WMS_CONF_CTRL->VALIDATE_BIN(校验存储箱容量)、CL_WMS_CONF_CTRL->VALIDATE_BATCH(校验批次有效期)等验证逻辑。文档中未显式配置CONF_CTRL,但D01仓库默认为X,意味着所有确认操作均触发完整校验。

4.6 常见问题排查:活动配置的三大血泪经验

现象:301(工厂间转移)移动时,系统未自动生成转移订单(TO)

原因:T320表中源/目标仓库的AUTO_TO字段为space,或T158中301的WM_ACT未设为'*'。
解决:在OMJ2中为D01仓库启用Auto TO creation;在OMJJ中检查T158表,确保301的WM_ACT = '*'。

现象:MB1C过账101时,系统报错WMS021 - Movement type not allowed in WM

原因:T158表中101的WM_ACT = space,但T320中D01的WM_ACTIVE为X,导致CL_WMS_MOVE_TYPE_CHECK认为移动类型冲突。
解决:在OMJJ中将T158-WM_ACT设为'*',或在OMJ2中关闭D01的WM_ACTIVE(若无需 WM 管理)。

现象:LT01创建转移订单时,LTAK-VBELN(采购订单号)为空

原因:T320-REQ_CAT未正确配置,或T158中101的REQ_CAT字段未指向T320-REQ_CAT的有效值。
解决:在OMJ2中检查D01的REQ_CAT值(如001),在OMJJ中检查T158表,确保101的REQ_CAT = '001'。

5. 配置验证与调试:穿透策略执行的「四层探针法」

配置完成不等于策略生效。真正的验证需

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

相关新闻

对话场景中的触觉纹理识别:OpenClaw特征提取实战

对话场景中的触觉纹理识别:OpenClaw特征提取实战

1. 对话中为什么要做触觉纹理识别&#xff1a;场景解剖与需求拆解我最早拿到OpenClaw这套开源硬件平台时&#xff0c;想的还是怎么让它稳稳抓住杯子。直到某次模拟测试里&#xff0c;我让机器人在对话中回答“这个杯子的表面是光滑还是磨砂”&#xff0c;才发现触觉纹理识别根本…

2026/10/19 21:29:28 阅读更多 →
重建式VLA源码深度解析:从设计动机到部署实践

重建式VLA源码深度解析:从设计动机到部署实践

最近我把某机器人方向顶级学术会议最佳论文的开源实现完整看了一遍&#xff0c;源码规模不算大&#xff0c;核心部分大概两万行左右&#xff0c;但信息密度非常高&#xff0c;前后花了一周多才理顺。这篇工作的主题是“重建式VLA”&#xff0c;通俗说&#xff0c;就是把视觉-语…

2026/10/19 21:29:28 阅读更多 →
代码评审自动化实践:用open-code-review打造透明高效的评审流程

代码评审自动化实践:用open-code-review打造透明高效的评审流程

代码评审这件事&#xff0c;我在团队里推过很多轮。刚开始总有人觉得是走过场&#xff0c;reviewer 不好意思提意见&#xff0c;提交者觉得被挑刺&#xff0c;Code Review 到最后变成了一场“礼貌的沉默”。后来我参与维护了名为 open-code-review 的项目&#xff0c;才真正把评…

2026/10/19 21:28:25 阅读更多 →

最新新闻

AI率过高怎么办?九款降AI率工具与避坑指南

AI率过高怎么办?九款降AI率工具与避坑指南

上个月帮一位在外地项目上常驻的在职朋友看论文。他发来一张截图&#xff0c;检测系统提示“疑似AI生成内容占比接近四成”&#xff0c;导师在批注里连续写了好几遍——这几段请你按自己的话重写。他挺委屈&#xff1a;内容确实是自己对着调研材料一点一点整理出来的&#xff0…

2026/10/19 23:26:19 阅读更多 →
开源代码评审工作流:本地化、可审计、可定制的LLM实践方案

开源代码评审工作流:本地化、可审计、可定制的LLM实践方案

1. 项目概述&#xff1a;这不是一个“工具”&#xff0c;而是一套可落地的开源代码评审工作流“open-code-review”这个名字乍一听像某个新发布的 CLI 工具&#xff0c;或者某家大厂刚开源的 AI 代码审查平台。但实际翻遍 GitHub、Hugging Face 和主流技术社区&#xff0c;你会…

2026/10/19 23:26:19 阅读更多 →
基于YOLO11的无人机检测识别系统设计与实现

基于YOLO11的无人机检测识别系统设计与实现

一提到毕设做深度学习目标检测&#xff0c;十个里有八个都在刷COCO、VOC数据集&#xff0c;真正能落到现实问题上的反而不多。但“空域安全无人机检测识别”这个方向不一样&#xff0c;它直接对准了一个真实且刚需的场景——机场周边、重要场馆、活动安保都需要防范低空慢速小目…

2026/10/19 23:23:08 阅读更多 →
BP-PID残差补偿控制:Simulink中可解释的神经网络增强型PID实现

BP-PID残差补偿控制:Simulink中可解释的神经网络增强型PID实现

简介&#xff1a;本资源是一套基于Simulink实现BP神经网络自整定PID控制器的完整工程实践材料&#xff0c;面向自动化、控制工程及人工智能交叉领域的高校学生、科研人员与工业控制工程师&#xff0c;解决传统PID参数依赖经验整定、适应性差、动态响应不足等实际问题。压缩包共…

2026/10/19 23:18:58 阅读更多 →
STM32 SD卡数据落盘实战:fatfs移植与CSV文件生成

STM32 SD卡数据落盘实战:fatfs移植与CSV文件生成

简介&#xff1a;这份资源面向嵌入式开发学习者与STM32工程师&#xff0c;聚焦在STM32F429平台上集成FatFS文件系统、驱动SD卡写入数据并生成.csv文件&#xff0c;同时结合以太网驱动搭建TCP服务器接收网络数据。内容覆盖FatFS的移植与参数配置、SDIO或SPI方式下的SD卡初始化与…

2026/10/19 23:16:55 阅读更多 →
AI视频生成工作流:从产品拆解到批量成片的完整指南

AI视频生成工作流:从产品拆解到批量成片的完整指南

去年年底接了一个电商代运营团队的活儿&#xff0c;帮他们把带货短视频从“每周人工憋3条”改成“一天批量出20条成片”。项目做完以后&#xff0c;团队里负责剪辑的同事跟我说了一句话&#xff0c;让我印象特别深&#xff1a;以前最怕的不是剪片子&#xff0c;而是想不出脚本、…

2026/10/19 23:05:36 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介&#xff1a;本资源为电源技术方向的学术研究文档&#xff0c;聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略&#xff0c;面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址&#xff1a; https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集&#xff0c;共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →