简介这份资料面向SAP业务顾问和入职不久的实施人员围绕物料主数据这一系统上线前必须完成的批量导入工作讲解如何在不依赖ABAP开发人员的前提下用LSMW自行制作批导程序。内容先对比Standard Batch/Direct Input、Batch Input Recording、BAPI与IDoc四种方式的差异再以第一种为主线把建项目与对象、定义结构、整理Excel与TXT数据源、字段映射与默认值、指定逻辑路径、读数据、转换、执行导入到结果确认的十三个步骤逐一说明并附带数据导入模板便于对照操作和排查常见问题。资源包为1个docx文档约920KB属于图文操作笔记性质适合按章节跟做。目前已有3476人学习可作为SAP批导入门的实操参考与速查手册。1. 物料主数据堆成山时LSMW 的十三步能不能自己扛下来上线前两周物料主数据还散在几十张 Excel 里开发排期排不进来业务顾问又不想对着 MM01 一条条手工输入——这种场面我遇到过不止一次。LSMW 就是为这种局面准备的它是 SAP 自带的数据迁移工作台不用写程序靠十三个步骤把 Excel 里的物料号、描述、物料类型、计量单位、工厂视图拼成一条条能直接写入数据库的记录。这套教程走的是 Standard Batch/Direct Input 路线也就是标准直接输入这条路并不是录屏也不是 BAPI。它适合三类人做 MM 模块实施、手里压着大批量物料要上线的人做数据迁移、想自己掌握批导节奏的人以及想摆脱“等 ABAPER 排期”这个被动局面的业务顾问。2. 四种录入方式先选对Standard Batch/Direct Input 凭什么排在第一位2.1 四种方式摆在一起比录屏、BAPI、IDoc 各自卡在哪LSMW 建对象时第一个要做的决定不是填字段而是选输入方式。界面里摆着四个选项看着都能把数据灌进去实际用起来差别很大选错了后面十几步全部白做。方式实现逻辑上手门槛主要瓶颈Standard Batch/Direct Input调用标准直接输入程序按目标结构字段映射低不需要 ABAP字段长度和内部码要自己对齐Batch Input Recording录一遍 MM01 操作回放生成会话低每种物料类型、每种视图组合都要单独录速度慢Business Object Method (BAPI)调 BAPI 函数按业务对象参数传值中要懂函数结构异常返回要逐层解析失败定位麻烦IDoc生成中间文档走 ALE 入站处理高要配伙伴和消息类型排错链路长小批量不划算录屏那条路看着最省事实际是最容易出问题的。物料主数据的视图是按物料类型动态决定的原材料和成品的视图集合不一样工厂视图和销售视图的必输字段也不一样。录屏录的是某一个物料类型的一次操作路径换一个类型就得重录一套十几个物料类型就是十几套录屏维护成本比手工输入还高。速度上也不占优势回放会话要一条条模拟前端操作几千条数据跑一晚上是常态。BAPI 和 IDoc 更适合系统间集成比如从 PLM 或者 MDM 往下推数据。业务顾问单独做一次上线数据导入用这两条路等于给自己找活干BAPI 的返回结构要一层层剥IDoc 的状态码要一个个查出了问题第一反应是找开发又绕回了原点。Standard Batch/Direct Input 的优势在于它是“结构对结构”的映射。SAP 物料主数据本来就有一套标准的直接输入程序在跑LSMW 做的事情是把 Excel 的列对到这套程序能认的结构字段上中间不做前端模拟。字段对齐一次后面所有物料类型都能复用同一套映射只是模板里的物料类型列换值而已。我一般会把这条路当成默认选项除非甲方明确要求走 BAPI 接口。2.2 十三步被切成两段前十二步造工具第十三步跑数据LSMW 主界面那十三个步骤新手第一次看容易懵因为前三步和最后三步看起来都是“填点东西”中间又夹着读取、转换这些听名字差不多的动作。实际它们被切成两段理解了这个切分后面操作就不容易乱。前十二步是“造工具”。步骤 1 到 6 定义这个批导程序长什么样项目叫什么、源结构有哪些字段、字段怎么映射到目标结构、哪些值写死。步骤 7 到 8 告诉程序数据文件在哪。步骤 9 到 12 是把文件读进来、转成目标格式、再检查一遍。这十二步做完工具就成型了可以反复用。第十三步才是“跑数据”。前面十二步再怎么点系统里一条物料都不会建只有第十三步执行下去数据才真正写进 MARA、MARC 这些表。这个切分带来一个很实用的做法工具只造一次数据可以跑很多次。上线前数据改来改去模板换一版、重新读一次、转换一次、执行一次前面的项目结构不用动。我见过有人每换一版数据就重建一个 LSMW 项目项目名从 ZMM001 排到 ZMM017最后自己都记不清哪个是最终版。还有一点要提前说清楚步骤 6、8、10、12 这几个步骤在教程里标注“可以跳过”跳过指的是不在这里做额外配置不是这些步骤不存在双击进去该确认的还得确认。步骤 10 和 12 是查看读取和转换结果的地方跳过它们等于放弃了执行前最后一次低成本纠错的机会。2.3 动手前先出字段清单Object Overview 导出与 TXT 模板怎么定正式的字段映射在步骤 5但字段清单要在动手之前就定下来否则做到一半发现少了一列回头改源结构、改模板、改映射返工量比重新做一遍还大。字段清单的来源是 Object Overview。在步骤 1 选好输入方式和对象之后主界面有个 Object Overview 按钮点进去能看到这个对象挂出来的所有目标结构以及每个结构下的字段。点 List 可以把整张清单导出来导成 Excel 之后按需筛。常见做法是只保留这次要导的视图对应的结构比如基本视图、采购视图、MRP 视图、工厂存储视图销售视图这次不导就先删掉清单越短后面映射越快。导出之后不要直接拿去建模板。导出的字段名是 SAP 内部字段名比如 MATNR、MAKTX、MEINS、MTART业务人员看不懂模板里得有一行中文说明。我一般的做法是 Excel 做三行第一行中文含义第二行技术字段名第三行开始才是数据。LSMW 读数据时从第三行开始读前两行当表头跳过这个设置在步骤 9 里填起始行号。模板定好列顺序之后源结构的字段顺序要和模板列顺序一一对应这是后面自动匹配能成功的前提。列顺序对不上步骤 5 的自动匹配会把字段对错位而且不报错等到执行时才发现物料描述跑到了物料组字段里。模板保存成 TXT 的时候有两个细节一是分隔符用制表符不要用逗号物料描述里带逗号是常有的事二是编码用系统能识别的字符集中文描述别存成带 BOM 的 UTF-8读进来第一列会多几个不可见字符。这两个坑在步骤 9 读取时才会暴露提前处理好能省一轮排查。3. 前六步把批导程序搭起来源结构、字段映射与默认值3.1 步骤1项目、子项目、对象三个名字怎么起才不返工事务码 LSMW 进去主界面顶部三个输入框Project、Subproject、Object。这三个是自定义的可以随便起但它们决定了后面所有配置挂在哪里起名要有规则。我的命名习惯是 Project 用项目代号加模块Subproject 用数据对象Object 用视图组合。比如项目代号是 P01物料主数据的基本视图和工厂视图一起导就写成 P01_MM / MATERIAL / BASIC_PLANT。这样一年以后回来找看到名字就知道这份配置是干什么的不用一个个点进去翻描述。三个框填好之后点新建弹出的界面填描述描述写清楚数据范围比如“物料主数据基本视图工厂视图2024 年上线批次”。描述不写后面接手的人只能靠猜。新建完成回到主界面双击步骤 1 进入对象属性维护。这里要确认两件事一是输入方式选 Standard Batch/Direct Input二是对象对应的直接输入程序。物料主数据多数环境下对应的是 RMDATIND 这个程序下拉列表里能找到现成的对象条目就直接选找不到就在程序名栏手工填。选错程序名的后果是步骤 4 关联结构时挂不出目标结构界面上空空如也。保存返回主界面这一步不要急着往下走。步骤 1 改一次后面步骤 4 的结构关联、步骤 5 的字段映射全要重做确认无误再继续。3.2 步骤2到3源结构新建与源字段长度定死在哪里步骤 2 维护源结构就是给这份 Excel 定义一个“壳”。双击进去点新建输入结构名比如 ZMAT_SRC填描述回车保存。源结构只有一个对应模板的一行数据。步骤 3 维护源字段这是整个前六步里最费时间的一步也是决定成败的一步。源字段要按模板列顺序一个个建每个字段三个属性字段名、类型、长度。长度这一栏最容易出错。SAP 目标字段的长度是固定的源字段长度比目标字段长转换时被截断短了又可能补空格。物料号 18 位、物料描述 40 位、计量单位 3 位、物料组 9 位、工厂 4 位这几个高频字段的长度按目标字段来定别按模板里实际数据的长度来定。模板里物料描述只写了 20 个字源字段就建 20 位等遇到 35 个字的描述就截断了。字段类型上数字型字段要留意。物料号虽然看起来是数字但它是字符型字段长度 18。建源字段时如果选成数字型前导零在读取阶段就被吃掉后面再补就麻烦了。所有编码类字段——物料号、供应商号、客户号、物料组——统一建成字符型。字段建完主界面上会显示字段数量。和模板列数对一遍少了就补多了就删。字段顺序也要和模板列顺序一致顺序错位在步骤 5 自动匹配时会体现出来。3.3 步骤4到5结构关联与字段映射前导零和日期在这里处理步骤 4 维护结构关系作用是把源结构挂到目标结构上。双击进去界面上方是源结构下方是目标结构列表。物料主数据的直接输入会挂出一组目标结构抬头结构是 BMM00下面跟着各个视图的结构基本数据、采购、MRP、工厂存储各一个。要导哪些视图就勾哪些结构。这一步的选择直接决定后面步骤 5 能映射哪些字段也决定执行时物料能建出哪些视图。只勾了基本数据物料建出来就只有基本视图MM03 进去看工厂视图是空的。关联关系建好后点保存回到主界面进步骤 5。步骤 5 一进去会用源字段和第一个目标结构的字段做自动匹配字段名相同或者相近的能对上对不上的留空。自动匹配只是起点重头戏是手工处理三类字段。第一类是前导零。Excel 里物料号存成 100000001读进来是 9 位SAP 标准物料号是 18 位带前导零直接导会报格式错误或者更糟——系统把它当成一个新号建出来。处理方式是在字段映射里挂转换例程常见的是物料号转换例程 MATN1 LSMW 步骤5物料号字段挂转换例程补前导零到 18 位 FORM matnr_input CHANGING p_matnr TYPE char18. CALL FUNCTION CONVERSION_EXIT_MATN1_INPUT EXPORTING input p_matnr IMPORTING output p_matnr EXCEPTIONS length_error 1 OTHERS 2. IF sy-subrc 0. 长度不合法时保留原值让后续转换日志暴露出来 MESSAGE 物料号长度异常 TYPE S. ENDIF. ENDFORM.这段例程挂在物料号字段的转换规则里。CONVERSION_EXIT_MATN1_INPUT是 SAP 标准的物料号外部格式转内部格式函数作用就是把 9 位补成 18 位。CHANGING参数用字符型 18 位不能用数字型数字型接收不了前导零。异常分支里没有直接抛错是因为 LSMW 转换阶段抛硬错误会中断整批保留原值能让它带着错误往下走在转换结果里逐条看。第二类是日期。Excel 里的日期格式五花八门2024/01/15、2024.01.15、15.01.2024 都有。LSMW 读取时按文本读转换时要转成 SAP 内部格式 YYYYMMDD。字段映射里给日期字段挂日期转换例程或者在模板阶段就统一成 YYYYMMDD 八位文本后者更省事我一般要求业务方填模板时就按八位填。第三类是内部码和外部码的差异。计量单位在模板里写“个”SAP 内部存的是 PC税码写“13%”内部存的是 J1。这类字段要么在模板阶段就换成内部码要么在步骤 6 挂翻译表。换算关系多的字段走步骤 6换算关系少的直接在模板里统一看哪种维护成本低。3.4 步骤6固定值、翻译表与用户例程国家税码不用进模板步骤 6 维护固定值、翻译和用户自定义例程。这一步的价值在于把“每行都一样”的值从模板里拿出来减少业务方填错的概率。固定值适合那些整批数据完全一致的字段。比如这次导入的物料全部属于同一个国家、同一个税分类模板里就不用留这两列直接在步骤 6 给字段写固定值。业务方填模板的列少两列填错的机会就少两次。翻译表适合有对照关系的字段。模板里写“个”翻译成 PC写“千克”翻译成 KG写“原材料”翻译成 ROH。翻译表在步骤 6 里一行行维护左边是外部值右边是内部值。维护完了在字段映射里引用这张表转换阶段自动替换。翻译表有一个容易忽略的点没匹配上的值怎么处理。默认行为是保留原值往下走执行时被系统拒掉。我一般会在转换后抽查翻译字段看有没有没被替换掉的中文值留在里面有的话说明翻译表漏了条目。这个检查放在步骤 12 做比等到步骤 13 执行失败再回头找要快得多。用户自定义例程是给复杂逻辑留的口子。比如物料描述要按“物料类型-规格-颜色”拼接或者工厂字段要根据物料组做条件赋值。这类逻辑写在例程里用 ABAP 写写法和步骤 5 的转换例程一样挂到对应字段上。不会 ABAP 的话绝大部分场景用固定值加翻译表就能覆盖不必勉强写例程。4. 后七步把数据灌进去文件路径、读取、转换与执行4.1 步骤7到8逻辑路径和逻辑文件FILE 事务码先打好底步骤 7 指定文件界面上要填逻辑路径和逻辑文件名。这两个概念第一次接触容易绕晕逻辑路径不是物理路径它是一个别名真正指向服务器目录的映射关系在 FILE 事务码里维护。先在 FILE 事务码里建逻辑路径比如 Z_LSMW_IN物理路径填应用服务器上的目录比如/usr/sap/trans/data/lsmw。这个目录要满足两个条件应用服务器上有读权限并且用 AL11 能看得到。填完保存逻辑路径就生效了。回到 LSMW 步骤 7逻辑路径填 Z_LSMW_IN逻辑文件名自己起一个比如 ZMAT_BASIC。文件名不要带路径路径由逻辑路径负责。带路径的写法在某些版本上会报“文件名不合法”。步骤 8 是把逻辑文件分配给源结构。双击进去选中源结构把刚建的逻辑文件挂上去。这一步的作用是告诉程序“读这个文件的时候按这个结构解析”一个源结构对应一个逻辑文件多个结构共用一个文件的情况很少见。文件放在应用服务器上还是本机取决于 LSMW 的读取方式。读应用服务器目录是标准做法不需要额外配置。要读本机文件就得走前端上传路径写法不一样而且大批量文件上传本身也慢。我一般要求数据文件先传到服务器目录用 AL11 确认能看到再往下做。4.2 步骤9到10起始行、分隔符与读取结果核对步骤 9 读取数据。双击进去先确认文件名是步骤 7 建的那个逻辑文件名然后关键的两项起始行和分隔符。起始行填 3因为模板前两行是表头。填 1 的话表头会被当数据读进来第一列的物料号是“物料号”三个字转换阶段全部报错。这个错很典型日志里一堆“物料号格式不正确”第一反应是模板数据有问题实际是起始行没改。分隔符选制表符。模板存 TXT 的时候用制表符分隔这里选错成逗号整行会被当成一列读进来读取结果里只有第一列有值后面全是空。步骤 10 一看就能发现。填完点执行读取完成会给出读到的行数。行数和模板数据行数对一下少了说明有行被跳过多了说明表头或者空行被读进来了。步骤 10 显示读取数据这一步不要跳。界面上按行列出读到的内容重点看三处第一行数据是不是模板的第三行、物料号列有没有前导零丢失、中文描述有没有乱码。这三处任何一处不对都回到步骤 9 调参数重读不要带着问题往下走。模板数据长这样制表符分隔前两行是表头物料号 物料描述 物料类型 基本计量单位 物料组 工厂 MATNR MAKTX MTART MEINS MATKL WERKS 100000001 六角螺栓 M8x30 镀锌 ROH PC 010101 1000 100000002 平垫圈 M8 不锈钢 ROH PC 010101 1000第一列物料号在 Excel 里要设成文本格式否则存 TXT 的时候前面的零会掉。上面这个例子里物料号是 9 位转换阶段靠 MATN1 例程补到 18 位。描述里带空格和特殊符号没关系制表符分隔不会切错列。4.3 步骤11到12转换后先看这三个字段步骤 11 转换数据把读取到的文本按字段映射规则转成目标结构能接受的格式。执行完会给转换成功和失败的行数。步骤 12 显示转换数据这是执行前最后一次纠错机会。界面上看到的是转换后的值我一般固定看三个字段。物料号18 位、带前导零、和 Excel 里的号能对上。对不上说明转换例程没挂上或者挂错了字段。计量单位应该是内部码 PC 或者 KG不是中文“个”“千克”。还是中文说明步骤 6 的翻译表没生效或者字段映射里没引用翻译表。工厂和物料组长度对、值在系统里存在。工厂填了个不存在的值转换阶段不报错执行阶段才报“工厂不存在”。这三个字段过了其他字段出问题的概率低很多。转换日志里如果有失败行点进去看具体字段和原因多数是长度超了或者必输字段为空。4.4 步骤13直接输入和批输入会话的区别决定你怎么看结果步骤 13 执行。界面上有几个选项选错了不是数据导不进去是你看不到结果。Standard Batch/Direct Input 方式下执行走的是直接输入数据当场处理处理完直接出日志不生成会话。日志里按行列出成功和失败失败的带原因。这个日志要保存下来后面核对数据靠它。如果对象配的是批输入方式步骤 13 会生成一个会话会话号在 SM35 里能看到要在 SM35 里手工执行才真正跑数据。这时候步骤 13 点完看到“会话已创建”就以为导完了实际一条数据都没进去。这个区别在避坑那章还会展开。执行界面上还有一个“处理模式”的选项前台、后台、出错时前台。数据量小的时候用前台能实时看到日志上万条用后台跑完再去日志里看。不管哪种执行完都要回到步骤 13 的日志界面确认成功行数和失败行数两个数加起来等于转换行数才算这一轮跑完。5. 五个真会翻车的点从表头到前导零一条条对着排5.1 表头没跳过第一行物料号为空日志报物料号不能为空现象步骤 13 执行完日志里第一批记录全部失败报错是物料号为空或者物料号格式不正确。回去看步骤 10 的读取结果第一行数据的物料号列显示的是“物料号”三个字或者干脆是空的。原因步骤 9 的起始行填了 1模板前两行表头被当数据读进来了。表头行的物料号列是中文标题转换阶段过不了物料号校验整行被判失败。解决回步骤 9 把起始行改成 3重新读取、重新转换、重新执行。改完先看步骤 10 的第一行数据是不是模板第三行的真实数据确认了再往下走。这个问题看着低级实际很常见尤其是接手别人做了一半的 LSMW 项目起始行是上一版模板留下的值模板改过但起始行没跟着改。我现在的习惯是每次换模板都重新进步骤 9 看一眼起始行不默认它是对的。5.2 前导零丢失18位物料号变成纯数字现象执行完去 MM03 查物料建出来了但物料号是 100000001 而不是 000000000100000001。或者更糟同一个物料被建成了两个号一个带前导零一个不带。原因有两个层面。Excel 层面物料号列没设成文本格式存 TXT 时前导零被 Excel 当数字吃掉了。LSMW 层面源字段建成数字型或者字段映射里没挂物料号转换例程读进来的 9 位就直接往下传了。解决模板层面物料号列在 Excel 里设成文本或者在数字前加单引号强制文本。源字段层面物料号字段类型改成字符型长度 18。映射层面挂 MATN1 转换例程转换后在步骤 12 里确认是 18 位。已经导错的物料要处理不能直接重导重导会因为物料已存在而失败。先用 MM03 确认哪些号建错了能删的用 MM06 打删除标记删不掉的联系 Basis 从后台处理处理完再重跑。这一圈下来比一开始就设对文本格式费时得多。5.3 视图没选全物料建出来只有基本视图现象MM03 进去看物料基本数据视图有值工厂视图、采购视图、MRP 视图全是空的。执行日志显示成功没有报错。原因步骤 4 维护结构关系时只勾了基本数据对应的目标结构其他视图的结构没勾。步骤 5 里自然也就没有那些视图的字段可映射转换和执行都不会报错因为对系统来说这次导入本来就只涉及基本视图。解决回步骤 4 把需要的视图结构勾上回步骤 5 重新做字段映射新增的视图字段要一个个对。改完重新读取、转换、执行。已经有基本视图的物料再执行一次会走更新逻辑把缺的视图补上不会重复创建。预防的办法是在步骤 4 之前就把视图清单定下来和业务方确认这批物料要建哪些视图。原材料通常要基本数据、采购、MRP、工厂存储成品还要加销售视图。清单定完再动手比建完了发现缺视图再补要省事。5.4 单位和税码没翻译中文直接写进模板现象转换阶段或者执行阶段报错提示计量单位不存在、税分类无效。回去看转换后的数据计量单位那一列还是“个”税码那一列还是“13%”。原因模板里填的是业务语言SAP 内部存的是代码。步骤 6 的翻译表没建或者建了但字段映射里没引用转换阶段原样透传执行阶段被系统拒掉。解决在步骤 6 建翻译表把模板里出现过的所有外部值列出来逐个对应内部码。建完在字段映射里引用翻译表重新转换步骤 12 里确认单位列已经是 PC、KG 这类内部码。翻译表要覆盖全不能只翻译常用的几个。模板里只要出现一个没翻译的值那一行就过不去。我的做法是把模板里该列的所有去重值拉出来一次性翻完再让业务方确认一遍避免来回补。5.5 重复执行第二次跑变成更新或者直接报错现象第一轮导了 500 条发现 20 条数据有问题改完模板重新读、重新转、重新执行结果报错说物料已存在或者没报错但数据没更新。原因物料主数据直接输入程序的行为是“存在则更新不存在则创建”但更新只在带上了对应视图和字段的前提下才生效。数据有问题的那 20 条如果问题出在物料号本身重跑会尝试用新号创建如果问题出在其他字段重跑会更新已有物料但前提是视图选择和数据都正确。解决先确认这 20 条是新建还是更新。新建的把物料号改对模板里只留这 20 条其他 480 条删掉重新读、转、执行避免对已成功的 480 条做无意义的重复处理。更新的确认视图和字段都带上了再跑。重复执行前还有一件事要做确认上一轮的日志保存好了。直接输入的日志不会长期留在系统里跑完不保存回头查哪条失败了都查不到。我一般在步骤 13 执行完立刻把日志导出来按批次存档后面核对数据全靠它。6. 抽样、全量、回查把 LSMW 跑成可复用的三段式数据量上千以后我不再一次性把整份模板灌进去。第一轮只取 10 条覆盖所有物料类型和视图组合跑完逐条去 MM03 看重点看工厂视图和 MRP 视图的字段有没有落到位。这 10 条过不了后面全量跑就是放大错误。第二轮跑全量但执行方式选后台跑完拿日志里的成功行数和模板行数对。对不上就说明有行在读取或者转换阶段就被丢了这时候不要去猜回步骤 10 和步骤 12 把中间结果重新看一遍问题一定在那两个界面上能看到。第三轮回查用一条查询把刚导的物料拉出来和模板做字段级比对 导入后回查按物料号区间拉出关键字段和模板逐列比对 SELECT matnr, mtart, meins, matkl, ersda FROM mara INTO TABLE DATA(lt_mara) WHERE matnr IN s_matnr AND ersda sy-datum. 工厂视图单独查确认工厂级字段真的写进去了 SELECT matnr, werks, dispo, beskz FROM marc INTO TABLE DATA(lt_marc) FOR ALL ENTRIES IN lt_mara WHERE matnr lt_mara-matnr.ersda限定成当天能把这次导入的物料和存量物料分开不用手工维护物料号清单。marc那张表按工厂维度查是因为基本视图建成功不代表工厂视图也建成功两个视图的落库是分开的只查 MARA 会漏掉工厂视图缺失的情况。查询结果导成 Excel和模板按物料号做 VLOOKUP差异列就是需要补的数据。这套三段式跑下来多花的时间大概是一到两个小时但能把返工压在个位数。血泪经验是第一次做物料批导时图快全量两千条一次性灌执行到一半报错中断日志里失败原因分散在十几个字段上排查花了两天最后发现是模板里有一个物料组的编码多打了一位。从那以后我每次接 LSMW 的活都先把字段映射表打印出来贴在显示器边上步骤 12 的转换结果不逐字段扫一遍不进步骤 13。这套十三步的操作顺序、字段清单和模板格式我按章节理成了一份可以直接对照的文件拿着它对着系统走一遍比只看截图省时间。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?