简介:面向不具备 ABAP 开发能力的 SAP 业务顾问与实施人员,《LSMW 批导物料主数据教程》聚焦系统上线前物料主数据的批量创建问题,讲解如何借助 LSMW(Legacy System Migration Workbench)自行搭建批导程序,替代逐条手工录入或等待开发人员写程序的被动做法。内容先对比 Standard Batch/Direct Input、Batch Input Recording、BAPI 与 IDoc 四种批导方式的适用场景与优劣,再以 Standard Batch/Direct Input 为主线,把创建项目、子项目与对象,定义数据结构,整理 Excel 模板,字段映射与默认值,逻辑文件路径,数据读取与转换,执行导入及结果核对等十余个步骤逐一展开,并提示物料类型视图差异、税码与国家等默认值设置、仅跳过单层结构相关步骤等实操细节。压缩包内为 1 个 docx 文档,约 920KB,保留逐屏操作截图与字段配置说明,便于对照界面练习。该资源已有 3476 人学习,适合希望独立完成物料主数据批导的初、中级顾问作为上手参考与排错查阅。
1. LSMW 批导物料主数据:为什么业务顾问要自己动手
上线前物料主数据堆在 Excel 里,等 ABAP 排期往往比等测试环境还慢。我第一次认真拆 sap lsmw 批导 物料 这套流程,是因为手工建一条物料要跳十几个屏幕,物料编码、描述、分类、价格还散在多个表里。LSMW 不是万能钥匙,但它把“外部数据源→源结构→字段映射→批处理”这条链路摆在你面前,业务顾问也能自己做出可复现的批导程序。这篇笔记按 Standard Batch/Direct Input 讲清楚:四种方式怎么选、十三步哪些能跳、模板和字段怎么对、失败时看哪里,适合要独立扛物料主数据导入的人。
2. 四种导入方式怎么选:Standard Batch/Direct Input 的边界与代价
2.1 四种方式放在一张表里:速度、维护成本、适用边界
LSMW 全称是 Legacy System Migration Workbench,本质是一个数据迁移工作台。它不替你写业务逻辑,只负责把外部文件读进来、按规则转换、再交给 SAP 的标准批输入程序执行。物料主数据导入常见四种方式,先把边界摆清楚,后面十三步才不会白做。
| 方式 | 原理 | 速度 | 维护成本 | 适用场景 |
|---|---|---|---|---|
| Standard Batch/Direct Input | 外部数据读入源结构,映射到目标结构,生成批输入会话,由标准程序执行 | 较快,适合批量 | 中,字段和模板要维护 | 物料主数据、客户主数据等标准对象 |
| Batch Input Recording | 录屏模拟用户操作,把屏幕字段录成 BDCDATA | 慢,逐屏模拟 | 高,物料类型视图变化要重录 | 少量、非标准屏幕、临时导入 |
| Business Object Method (BAPI) | 调用业务对象方法,走 BAPI 接口 | 快 | 高,需要开发或接口知识 | 有复杂业务校验、系统间集成 |
| IDoc (Intermediate Document) | 用标准中间文档格式传输 | 快 | 高,要配伙伴、消息类型 | 系统与系统之间批量集成 |
Standard Batch/Direct Input 的优势是“标准”二字:它走的是 SAP 已经写好的批输入程序,业务顾问只要把字段映射对,不需要碰 ABAP。Batch Input Recording 看起来最直观,录一遍屏幕就能跑,但它有一个致命缺点:不同物料类型定义的视图不一样,基本视图、工厂视图、采购视图、销售视图、会计视图只要有增减,录屏就得按物料类型分别重录。项目上物料类型一多,录屏文件会变成维护负担,速度也慢。BAPI 和 IDoc 更适合有开发资源、有系统间接口的场景;如果只是上线前把 Excel 里的物料主数据灌进去,优先标准批导。
提示:选型时不要只看“能不能导进去”,还要看“下次物料类型视图变了,改哪个文件”。标准批导改模板和映射,录屏要重录,这是后期维护成本的差别。
2.2 物料主数据为什么优先标准批导:视图、组织级别与字段稳定性
物料主数据不是一张表,而是一组视图。基本视图放物料号、描述、物料类型、基本计量单位;工厂视图放工厂、采购组、MRP 相关字段;采购视图放采购组织、税码、价格;销售视图放销售组织、分销渠道;会计视图放评估类、价格控制。标准批导可以按目标结构一次性映射多组字段,适合“字段相对稳定、模板固定、批量重复”的上线场景。
真正要小心的是组织级别字段。工厂、采购组织、销售组织、公司代码这些字段不是每一行都相同,模板里必须按行给值,不能图省事在 LSMW 第五步写死默认值。默认值只适合国家、语言、税码这类全表一致的字段;如果不同工厂税率不同,默认值写死就是给自己埋后悔药。常见做法是:模板里保留组织级别列,第五步只给“全表恒定”的字段设默认值,映射完逐列检查来源。
| 前置条件 | 检查项 | 说明 |
|---|---|---|
| 物料编码规则 | 外部给号还是内部给号 | 外部给号要在模板里给物料号,内部给号要留空并确认编号范围 |
| 物料类型 | 每种类型的视图是否一致 | 视图差异大时,按类型拆对象或拆模板 |
| 组织级别 | 工厂、采购组织、销售组织是否齐全 | 缺组织字段会导致只建基本视图 |
| 字段检查表 | 物料组、税码、计量单位是否存在 | 值不在检查表里,转换阶段会报错 |
| 文件格式 | TXT 分隔符、起始行、编码 | 读数据错位多半出在这里 |
2.3 开工前的十分钟:建项目、子项目、对象与命名约定
进入事务代码 LSMW,主界面有 Project、Subproject、Object 三个输入框。这三个值由用户自定义,不是系统预置。常见做法是按“上线批次/模块→数据对象→视图组合”三层命名:项目写模块和批次,子项目写物料主数据,对象写基本视图或工厂视图组合。命名避免特殊字符和空格,描述写清楚范围,后面生成会话、查日志都靠这个名字定位。
| 字段 | 示例 | 建议 |
|---|---|---|
| Project | ZMM_LOAD | 模块+批次,短且可读 |
| Subproject | MAT | 数据对象,物料主数据 |
| Object | BASIC | 视图或物料类型组合 |
| 描述 | 物料主数据基本视图导入 | 写清范围,不写人名和项目名 |
操作步骤很短:输入三层值,点击新建,输入描述,回车返回主界面,再双击进入第一步。这里有一个小坑:对象名建好后不要随意改。LSMW 的会话、日志、文件路径都挂在对象下,改名后旧会话不好找。命名时就把“这次导哪些视图”想清楚,宁可多建一个对象,也不要把基本视图和工厂视图硬塞进同一个对象里反复改映射。
3. 十三步拆成可复现流程:从项目对象到数据源结构
3.1 第一步到第二步:对象属性与源结构,先把字段清单捞出来
第一步是 Maintain Object Attributes。双击进入后,选择 Standard Batch/Direct Input,按界面红框填写并保存,返回主界面。这一步决定后面走标准批输入,不是录屏,也不是 BAPI。保存后回到主界面,第二步双击 Maintain Source Structures,点击新建结构,输入结构名和描述,回车保存。
第二步里有一个很实用的按钮:Object Overview。点进去后点击 List,把目标结构字段清单导成 Excel。这份清单是后面整理模板的底稿,不要凭记忆写字段。物料主数据字段多,凭记忆一定会漏组织级别字段。把 Excel 按“视图→字段技术名→字段描述→是否必输→是否组织级别”整理,模板只保留这次要导的列,但检查时按清单逐项过。
| 整理列 | 用途 | 注意 |
|---|---|---|
| 视图 | 基本/工厂/采购/销售/会计 | 不同视图分开看,避免漏字段 |
| 字段技术名 | 源字段命名依据 | 与 TXT 第一行保持一致 |
| 字段描述 | 给业务确认 | 不要只写英文技术名 |
| 是否必输 | 决定模板必填列 | 必输为空,转换阶段会报错 |
| 是否组织级别 | 决定是否逐行给值 | 不能写死默认值 |
3.2 第三步到第四步:源字段与结构关系,字段长度别抠太紧
第三步 Maintain Source Fields 定义源结构里的字段。源字段要和 TXT 列一一对应,顺序也尽量一致。字段类型按数据特性选:物料号、物料描述、物料组用文本;日期用字符型,统一 YYYYMMDD;数量、价格用数字型,但模板里不要带千分位和货币符号。源字段长度不够会截断,物料描述尤其容易翻车,长度按目标字段上限留余量。
第四步 Maintain Structure Relations 建源结构和目标结构的关系。单层结构只建一条关系,保存即可。很多“保存报错、结构关系未维护”的问题,根源是第四步没做或做漏了。结构关系是后面字段映射的前提,第三步定义字段,第四步告诉系统这些字段往哪个目标结构走,顺序不要颠倒。
注意:源字段顺序一旦确定,TXT 列顺序就不要随意调。后面读数据错位,十有八九是模板列顺序和源字段顺序不一致。
3.3 第五步:字段映射与默认值,别把默认值当业务字段
第五步 Maintain Field Mapping and Conversion Rules 是核心。进入后先点自动匹配字段,系统会按字段名和描述做匹配,匹配不上的要手工指定。自动匹配后逐列检查,尤其是物料号、物料类型、基本计量单位、工厂、采购组、税码这几类字段。物料号如果外部给号,源字段必须映射;如果内部给号,源字段留空但编号范围要提前确认。
默认值在这里设。国家、语言、税码这类全表一致的字段可以设固定值;工厂、采购组织、销售组织不能写死。默认值写死以后,模板里不同组织的行会全部变成同一个值,执行完看起来成功,实际数据全错。常见做法是:默认值只设“全表恒定”的三五列,组织级别字段全部来自模板列。设完点回车回到映射界面,保存并返回主界面。
| 字段 | 来源 | 默认值 | 说明 |
|---|---|---|---|
| 物料号 | 模板列 | 不设 | 外部给号必须逐行给 |
| 物料描述 | 模板列 | 不设 | 长度留余量 |
| 物料类型 | 模板列 | 不设 | 不同行可不同 |
| 基本计量单位 | 模板列 | 不设 | 值必须在检查表 |
| 工厂 | 模板列 | 不设 | 组织级别,不能写死 |
| 采购组 | 模板列 | 不设 | 工厂视图相关 |
| 国家 | 固定值 | 按业务定 | 全表一致才设 |
| 语言 | 固定值 | 按业务定 | 描述语言要对应 |
3.4 第七步到第八步:逻辑路径、逻辑文件名与单层结构跳过
第七步 Specify Files 定义逻辑路径和逻辑文件名。逻辑路径是系统里配置的路径别名,逻辑文件名是这次读取的文件名。物理文件放在逻辑路径指向的目录下,文件名和逻辑文件名一致。路径不要含空格和中文,目录权限要确认。业务顾问常见做法是先在应用服务器目录放一个小样本文件,读通后再换全量文件。
第八步 Assign Files 对单层结构可以跳过。单层结构只有一个源结构,系统按第七步的逻辑文件名直接找文件;多层结构才需要在这里分配文件到结构。跳过不代表不用管文件,第七步的路径和文件名必须对,否则第九步读数据会报“文件不存在”。
| 参数 | 建议 | 原因 |
|---|---|---|
| 逻辑路径 | 用系统已配置的路径别名 | 避免手写绝对路径 |
| 逻辑文件名 | 与物理文件名一致 | 大小写按系统环境 |
| 物理目录 | 无空格、无中文、有读权限 | 权限不足读不到 |
| 样本文件 | 先放 5 到 10 行 | 先跑通再全量 |
3.5 第九步之前:Excel 模板转 TXT 的格式契约
模板格式是 LSMW 读数据的契约。第一行放字段技术名,第二行放字段描述,第三行开始放数据。第九步读数据时选择从第三行开始,就是为了跳过这两行标题。模板不要合并单元格,不要隐藏列,不要留空列;空列会被当成一个字段,导致后面列错位。整理完 Excel 后另存为制表符分隔的 TXT,编码按系统环境统一,建议无 BOM。
MATNR MAKTX MTART MEINS MATKL WERKS EKGRP MWSKZ LAND1 物料号 物料描述 物料类型 基本单位 物料组 工厂 采购组 税码 国家 100000001 测试物料A 成品 EA 001 1000 001 J1 CN 100000002 测试物料B 成品 EA 001 1000 001 J1 CN这段模板里,第一行是源字段技术名,第二行是描述,第三行开始是数据。列顺序必须和第三步源字段顺序一致;物料号用文本格式保留前导零;日期列如果要导,统一写成 YYYYMMDD,不要用 Excel 日期序列值。TXT 里不要出现制表符以外的分隔符,否则读数据会把整行当成一列。
4. 读数据、转换与执行:把 TXT 灌进物料主数据
4.1 第九步读数据:从第三行开始与行数核对
第九步 Read Data 双击进入,选择第七步定义的文件,指定起始行 3,执行。执行后看日志里的读取行数,和 TXT 数据行数对一遍。比如模板有 100 行数据,日志应该显示读到 100 行;如果显示 101 行,说明标题行没跳干净;如果显示 99 行,可能最后一行空行被吞或文件没保存完整。读数据阶段只负责把文件读进源结构,不校验业务值,所以字段错位在这里就能看出来。
| 检查点 | 期望 | 异常处理 |
|---|---|---|
| 起始行 | 3 | 标题行两行,从第三行读 |
| 读取行数 | 等于数据行数 | 多一行查标题,少一行查空行 |
| 字段列数 | 与源字段数一致 | 列数不一致查隐藏列和分隔符 |
| 样本行 | 前 5 行字段对得上 | 错位就回模板调列顺序 |
常见做法是先拿 5 到 10 行样本跑第九步,字段对上了再换全量文件。全量文件跑完不要急着转换,先点第十步 Display Read Data 看一眼,物料号有没有丢前导零,物料描述有没有被截断,工厂列是不是跑到了采购组列。读数据阶段翻车,后面转换和执行都是白跑。
4.2 第十步到第十二步:看读入、转换与错误消息
第十步 Display Read Data 看读入结果,第十一步 Convert Data 执行转换,第十二步 Display Converted Data 看转换后数据。转换阶段会做字段类型转换、检查表校验、必填校验。常见错误有三类:必填字段为空、值不在检查表、日期或数字格式不对。转换日志会给出消息号和字段名,按字段名回到第五步映射和模板列查。
| 错误类型 | 表现 | 处理 |
|---|---|---|
| 必填为空 | 转换日志提示字段为空 | 模板补值,或确认该字段是否必输 |
| 检查表不存在 | 物料组、税码、计量单位报错 | 先维护检查表,或改用已有值 |
| 日期格式 | 转换后日期为空或错乱 | 模板统一 YYYYMMDD,不用 Excel 日期 |
| 字段截断 | 描述少字 | 源字段长度加长,模板列宽不是字段长度 |
转换阶段不要只看“转换完成”四个字,要点进日志看错误行号和消息。错误行号对应 TXT 行号,减 2 就是 Excel 数据行号,方便业务回去改。转换不通过就不要执行第十三步,否则批输入会话里会带错误数据,执行时一条条报错,排查更费时间。
4.3 第十三步执行:生成批输入会话还是立即执行
第十三步 Create Batch Input Session 有两个常用做法:一是生成会话后到 SM35 前台跑,二是直接执行。上线前我一般建议先生成会话,选保留会话,到 SM35 先用“仅显示错误”前台跑一条样本,确认物料主数据各视图都建出来,再后台跑全量。会话名按对象和日期命名,方便回查。
| 参数 | 推荐值 | 原因 |
|---|---|---|
| 会话名 | 对象名+日期+序号 | 便于 SM35 查找 |
| 保留会话 | 是 | 出错可回看,不覆盖 |
| 执行模式 | 先前台样本,再后台全量 | 先验证再放量 |
| 错误处理 | 仅显示错误 | 快速定位失败行 |
执行时还要确认物料号是外部给号还是内部给号。外部给号模板里必须有物料号,内部给号模板里物料号留空,编号范围提前配好。两种方式混在一个模板里,执行时会有一部分成功、一部分报错,看起来像玄学,其实是给号方式不统一。
4.4 执行后的验证:MM03 按视图抽检与会话日志
执行完不要只看“会话已处理”。到 MM03 按物料号抽检,基本视图看物料描述、物料类型、基本计量单位;工厂视图看工厂、采购组、MRP 字段;采购视图看采购组织、税码;会计视图看评估类、价格控制。每个视图抽 2 到 3 条,基本视图全抽,工厂和采购视图按组织抽。SM35 里看会话日志,成功行数和失败行数要对上。
| 验证点 | 看什么 | 通过标准 |
|---|---|---|
| 基本视图 | 描述、类型、单位 | 与模板一致 |
| 工厂视图 | 工厂、采购组 | 组织级别字段逐行正确 |
| 采购视图 | 采购组织、税码 | 没有默认值串行 |
| 会计视图 | 评估类、价格控制 | 按物料类型配置正确 |
| 会话日志 | 成功/失败行数 | 失败行有消息号可查 |
5. 常见问题与避坑:字段、模板、权限、执行失败怎么排查
5.1 模板与读数据:列错位、前导零、日期翻车
现象一:第九步读数据后,物料描述列里出现了工厂值,后面所有列整体错位。原因:Excel 里有隐藏列或空列,另存 TXT 后多出一个制表符;也可能是模板列顺序和第三步源字段顺序不一致。解决:取消所有隐藏列,删除空列,按源字段顺序重排列;用文本编辑器打开 TXT 看第一行制表符数量,和源字段数对一遍。读数据前先跑 5 行样本,错位在样本阶段就能发现。
现象二:物料号导入后前导零丢失,或者日期变成一串数字。原因:Excel 把物料号当数字,把日期当日期序列值;另存 TXT 后格式已经变了。解决:物料号列先设文本格式再填值,日期列直接写成 YYYYMMDD 文本;不要依赖 Excel 显示格式,TXT 里看到什么就是什么。这个坑很常见,尤其是物料号有前导零的编码规则,翻车一次后面全要返工。
5.2 结构关系与字段映射:保存报错、默认值写死
现象三:第五步字段映射保存时报“结构关系未维护”或类似错误。原因:第四步 Maintain Structure Relations 没做,或者源结构和目标结构的层级不匹配。解决:回到第四步,单层结构建一条关系并保存;多层结构按层级逐条建。第三步定义字段、第四步建关系、第五步做映射,顺序不要跳。跳步省下的几分钟,后面要用几倍时间查。
现象四:执行成功,但所有物料的工厂都变成同一个,或者税码全表一样。原因:第五步把组织级别字段设成了固定默认值。默认值适合国家、语言这类全表恒定字段,工厂、采购组织、销售组织必须来自模板列。解决:回到第五步,把组织级别字段的来源改成源字段,模板里逐行给值;改完先跑样本,用 MM03 抽检两个不同工厂的物料。
5.3 执行与权限:会话锁、视图缺失、后台失败
现象五:SM35 里会话跑不动,提示会话被锁定或没有权限。原因:会话正在被其他用户处理,或者当前账号缺 SM35 执行权限、缺物料主数据维护权限。解决:先看会话状态,锁定的等释放或找 Basis 处理;权限问题用 SU53 看缺什么对象,补权限后再跑。后台作业失败还要看 SM37 作业日志,不要只盯 SM35。
现象六:物料建出来了,但只有基本视图,工厂视图和采购视图是空的。原因:模板缺组织级别列,或者第五步只映射了基本视图字段;也可能是物料类型本身不允许某些视图。解决:按目标结构清单逐视图检查映射,模板补工厂、采购组织、销售组织列;确认物料类型的视图配置。执行后不要只查一条物料,按视图各抽两条,基本视图通过不代表其他视图通过。
6. 进阶用法与验证:用检查点、日志和回滚思路收尾
6.1 三段式验证:读入行数、转换错误、执行抽检
我习惯把 LSMW 的验证拆成三段,每段都有硬检查点,不靠“看起来成功”。第一段在第九步读数据后,看读取行数是否等于 TXT 数据行数,抽前 5 行看字段有没有错位;第二段在第十一步转换后,看错误行号和消息号,错误不清零不执行;第三段在 SM35 执行后,用 MM03 按视图抽检,基本视图全抽,工厂和采购视图按组织各抽两条。三段都过了,才认为这批物料主数据导入完成。
| 检查点 | 看什么 | 通过标准 |
|---|---|---|
| 读数据后 | 行数、前 5 行字段 | 行数一致,列不错位 |
| 转换后 | 错误行号、消息号 | 无未处理错误 |
| 执行后 | MM03 各视图 | 组织级别字段逐行正确 |
| 会话日志 | 成功/失败行数 | 失败行有明确原因 |
6.2 版本留痕与回滚思路:TXT、会话名、映射截图都留一份
LSMW 对象建好以后,模板和映射会反复改。我的习惯是每次全量前把 TXT 文件按“对象名_日期_序号”留一份,会话名同样带日期,第五步映射改完截一张关键字段图。这样执行出问题,能对上“哪版模板、哪版映射、哪个会话”。回滚不要直接删生产物料,先确认物料是否已被业务使用;常见做法是先用 MM06 标记删除,或者冻结相关视图,再按项目流程处理。生产数据没有后悔药,样本和小批量验证就是唯一的保险。
从那以后我每次跑 LSMW 都强制先跑 5 条样本,保存会话名和 TXT 版本,再放全量。希望帮到你。
本文还有配套的精品资源,点击获取