
干过SAP项目的朋友十有八九都碰过LSMW。这个界面堪称复古的大块头虽然第一眼并不讨喜但它在数据导入这件事上确实是绕不开的免费利器。从物料主数据、客户主数据到财务期初余额、采购订单只要不是上HANA之后全面转S/4的数据迁移框架多数项目组还是会优先甩给你一个LSMW让你去批导。今天不聊BODS也不聊自开发报表导入程序就专讲LSMW本身数据批导怎么做默认值在哪里配多余字段怎么删以及最容易被问到的问题——开发机建好的LSMW工程怎么完整搬到生产机。这篇文章适合刚接触LSMW的模块顾问也适合给那些已经在用LSMW但始终没搞懂“固定值”“删除字段”和“跨客户端传输”的运维同事。我会把步骤尽量写细并把我踩过的坑一并讲清楚。1. LSMW的核心思路与方案选型1.1 LSMW到底是个什么工具LSMW全称Legacy System Migration Workbench中文常叫“旧系统数据迁移工作台”本质是一个基于SAP标准框架的数据导入平台。它的思路很简单把你Excel、CSV、TXT里的外部数据按你预先定义好的规则转换成SAP能识别的批输入会话或者BAPI/IDoc调用最终把数据写进系统。你可以把它理解成一条“翻译管道”外部数据进左端中间经过你的转换规则右端出来的就是SAP能正常处理的数据结构。LSMW不是SAP标准功能模块而是每个SAP系统里都自带的一个开发工作台工具事务代码就是LSMW。这工具最大的优势是免费、标准、不需要写ABAP代码只要你会录屏幕、会配置映射关系就能在几个小时内从零开始做出一个批量导入工具。而它的局限性也很明显界面老旧操作逻辑偏“按部就班”第一次用的人常常找不到按钮在哪它在处理特别复杂的业务校验时也比较吃力真遇到需要复杂增强的场景最终还是要回到ABAP开发。1.2 五种记录方式怎么选打开LSMW第一步就是维护对象属性界面里会让你选择迁移方式常见的有方式说明适用场景Batch Input Recording录屏录一次标准事务操作过程再循环回放数据操作简单、屏幕字段固定的主数据导入BAPI调用SAP标准BAPI接口数据量较大、有现成BAPI的业务对象IDoc通过IDoc接口接收数据有外围系统做接口时常用Batch Input BAPI录屏和BAPI结合某些录屏字段无法覆盖时Direct Input老式的直接输入程序现已不推荐新项目很少用到我最常用的还是Batch Input Recording也就是录屏。因为它对顾问的门槛最低录一次屏就能处理大量数据。尤其是MM01、XK01、FD01这些屏幕逻辑复杂的T-code直接用录屏思路最稳妥因为你能完整看到每个屏幕字段在做什么。但录屏方式也有一个毛病录出来的目标结构往往会多出很多你根本不需要的字段比如系统内部自动跳出来的状态字段、计量单位附加字段。这正好引出后文要讲的“多余字段怎么删除”——这不是技巧问题而是录屏方式天然带出来的麻烦。1.3 为什么还在用LSMW很多新入行的顾问会问现在有S/4HANA迁移工具、有RAP开发新程序、有各种国产导入工具为什么还在用LSMW我的看法是项目上多数数据迁移是一次性的或者频率很低专门开发一套ABAP报表导入程序成本高、周期长而LSMW是系统自带能力所有实施顾问基本都会一点不需要额外授权也不用写代码。有些客户安全策略严格不轻易往生产系统传自定义程序这时候LSMW反而成了最合适的方案。另外LSMW的跨客户端传输能力其实很有意思。很多顾问把LSMW在开发机配置好后不知道怎么搬到测试机、生产机于是跑到生产机重新录一遍屏白白浪费时间。这事说到底还是没理解LSMW的存储机制——它把配置存在数据库表里而不是程序里所以只要把这部分数据传过去整个工程就完整带过去了。这个思路后面第四章我会展开讲。2. 数据批导全流程拆解2.1 开工前的准备工作别急着打开LSMW录数据先把准备工作做扎实。我一般按这个顺序来明确要导什么主数据还是业务单据涉及哪些T-code哪些字段是系统必填哪些字段可以留空。准备源数据文件推荐用TXT制表符分隔或CSV格式第一行放字段名后续行放数据。LSMW读文件时不挑编码但尽量用UTF-8或ANSI避免中文乱码。在系统中先跑一遍手工记账比如要导入供应商主数据就用XK01手工创建一个供应商记录下有哪些必填项、哪些字段有默认值、哪些字段会自动校验。理清映射关系源文件里的每个字段对应SAP屏幕上哪个字段这个映射关系越早想清楚后面越省事。很多新手上来就直接录屏录完发现源字段和目标字段对不上又返工重录问题就在于准备工作没做足。尤其要提醒一点源文件里最好只放你真正需要导入的字段多余列能砍就砍。文件里堆太多无用列不仅映射麻烦后期排查问题也更困难。2.2 LSMW的标准15步流程LSMW的批导流程基本固定标准路径是这样的进入LSMW事务代码。创建项目Project、子项目Subproject、对象Object。定义对象属性选择录屏或BAPI方式。维护源结构Source Structures。维护源字段Source Fields。维护结构关系Source Structure and Field Relations。维护字段映射和转换规则Field Mapping and Conversion Rules。维护固定值、事务、规则Fixed Values, Transactions and Rules。读入数据Read Data。显示读取后的数据Display Read Data。转换数据Convert Data。显示转换后的数据Display Converted Data。创建批输入会话Create Batch-Input Session。运行批输入会话Run Batch-Input Session。查看批输入会话日志Analysis。这15步看起来多实际上可以分为三阶段前8步是“配置定义”第9到12步是“数据处理”第13到第15步是“会话运行与检查”。第一次用的人不要被这15步吓到每一个界面理解透之后操作起来很快。真正花时间的不是“点按钮”而是字段映射和转换规则的调试。2.3 实操从创建工程到读入数据这里我按录屏方式走一遍大家跟着做。在LSMW初始界面输入项目名称、子项目名称、对象名称然后回车会进入项目列表。新建项目时系统会让你维护简短描述描述建议带上日期或数据场景比如“供应商主数据期初导入202508”方便以后区分。接着双击“定义对象属性”选择录屏方式“Batch Input Recording”系统会让你输入录屏的T-code。比如导入供应商主数据就输入XK01。保存后进入录屏界面正常做一次手工创建供应商的操作录完保存录屏会被保存下来。然后依次进入源结构和源字段定义。源结构一般按业务逻辑分块比如“基础数据”“公司代码数据”“采购组织数据”等。源字段就是源文件里要导入的字段。我把它们维护好之后系统会要求维护结构和字段的对应关系。再到字段映射界面这里你会看到左边是源字段右边是录屏产生的目标字段中间通过映射关系连起来。双击一行可以定义转换规则、固定值。把源文件中的“名称1”拖到目标字段的“名称1”上把“街道”拖到“街道”上逐个对应。如果有无法映射的字段可以留空。全部映射完成后回到LSMW主界面执行“读取数据”选择本地文件LSMW会把文件读入内存。接着执行“显示读取数据”确认数据是否读成功。然后执行“转换数据”确认转换后的数据格式是否符合预期。没问题的话创建批输入会话LSMW会生成一个可以处理的会话编号。2.4 跑批导会话与日志检查创建会话后直接进入SM35事务代码能看到刚刚生成的外部会话。选中会话点“处理”系统会逐条回放录屏把数据写进SAP。这里有个细节要特别注意LSMW只负责把数据放到批输入会话里真正往数据库写数据的是SM35。所以SM35的日志才是最终结果LSMW前面转换得很好不代表SM35一定能顺利执行。SM35跑批时建议勾选“显示错误”或“前台处理”先看几条数据是否能通过校验。如果全绿再考虑后台大批量执行。一旦出现红叉双击查看报错文本绝大多数问题都在字段格式、必填项缺失、后台配置不完整三个方面。3. 默认值配置与多余字段删除3.1 默认值配置的三种做法默认值配置是LSMW批导中非常实用的一项功能。很多情况下源数据里根本没有某些字段但这些字段在屏幕上是必填的或者业务上必须固定填一个值这时候就不需要去找用户补数据直接在LSMW里配置固定值就行。我常用的方法有三种方法一在字段映射界面配置固定值还是在“维护字段映射和转换规则”里双击目标字段那一行在下方的转换规则区域把类型选为固定值然后输入你要写的值。保存后该字段在所有数据中都会填充这个固定值源文件里有没有这个字段都不影响。方法二在源结构中增加一个常量字段如果你希望这个默认值在后续统计、日志里能看到或者不想在映射界面里处理可以在维护源结构时不把默认值作为一个源字段而是在“维护固定值”步骤中定义。这种方式更接近“参数化配置”在那个固定值界面里能维护事务代码、功能模块参数等。方法三在转换规则中写赋值代码当你需要在导入时做一点判断比如“如果物料组为空就填默认物料组”可以在转换规则的ABAP代码区域写一句赋值。这个对不熟悉编程的顾问稍有点门槛但好处是灵活能处理带条件的默认值。对于普通业务场景我最推荐方法一因为最直观也最容易维护后面谁接手这个LSMW工程在里面双击一下就能看到默认值是什么。3.2 默认值配置的注意事项默认值看着简单用不好会出问题。我列举几个自己踩过的坑固定值类型必须和目标字段的数据类型匹配。比如账户组字段一般是3位字符你固定填一个数字“1”虽然能保存但执行时系统报错“值无效”排查起来容易一头雾水。固定值会覆盖源文件的值。如果你源文件里其实有这一列但映射时又给这个目标字段配了固定值那么源文件里的值会被固定值覆盖这个需要特别注意。固定值适用范围是整个读入过程不是个别行。如果你需要对某些行填“A”某些行填“B”那就不能简单用固定值而是在源文件里增加一列或者用转换规则做判断。配置了固定值不代表屏幕会自动显示。你在LSMW映射中配置了固定值SM35回放时还是会走录屏的逻辑有些字段即使固定值已经填上如果屏幕上有联动校验比如“填写字段A后必须填写字段B”你漏配了B照样报错。3.3 多余字段的三种删除方式“多余字段如何删除”这个需求我基本在每一个LSMW项目里都会碰到。数据源文件里往往有几十列真正要导入的就十几列录屏的时候更离谱一个供应商主数据可能录出上百个目标字段实际用到的不到一半。先说清楚一个概念LSMW里删除字段有三个层级分别是源字段、目标字段映射、录屏结构字段。不同场景删的内容不一样。场景一源文件列太多但不想导入这些列这个最简单在维护源结构时把需要的字段维护进去就行。LSMW读取文件时源文件多出来的列不会自动进入源字段列表相当于天然被忽略。前文我强调过源文件最好只保留必要列原因就在这里。场景二源结构里字段建多了需要删除在“维护源字段”界面选中多余的字段点删除按钮。如果系统提示“该字段已被分配”说明你已经在字段映射里使用了它需要先去字段映射界面把对应的映射关系删掉再回来删除源字段。如果执行过“读取数据”有时系统会锁定不让删。我的做法是重新执行一次“读取数据”或者把处理状态重置掉再删除字段。这属于LSMW比较别扭的地方它的操作顺序性很强不是想改就能随时改。场景三录屏产生的目标字段多不想导入这种情况最多见。录屏时会录进很多系统字段、状态字段比如“排程”“状态标识”等你并不需要在批导中手工维护但LSMW把它当成目标字段列出来了。处理方式在字段映射界面直接用菜单中的“删除映射”功能把这条映射删掉让目标字段留空。LSMW允许目标字段不映射任何源字段录屏回放时该字段保持系统默认值不会被你的文件影响。如果你连“看到它”都觉得碍眼想把目标字段本身从结构里去掉那就比较复杂了。因为目标结构是录屏自动生成的LSMW没有提供直接删除目标字段的功能强行删可能会导致会话回放异常。我的建议是目标字段多余就让它待着只要映射关系里没有它就不影响结果。3.4 一个实例供应商主数据导入时的默认值与字段清理我最近在做一个供应商主数据导入就同时遇到了默认值和多余字段两个需求。导入场景是XK01创建供应商源文件里有名称、街道、城市、国家、电话等字段。但部分公共字段比如采购组织、账户组所有供应商都是同一个值不适合要求用户逐行填写。我在字段映射中筛选出采购组织、账户组双击后直接设置为固定值比如采购组织固定为“0001”账户组固定为“0001”。这样源文件就不用包含这两列文件也清爽很多。同时录屏时录出来一批用不到的字段比如“删除标记”“集中审批”“权限组”等。我在字段映射中把不需要的字段对应的映射行全部删除保留真正需要的映射。整个批导跑下来很干净SM35日志全绿没有一条报错。4. 跨客户端传输方法4.1 为什么要传LSMW工程LSMW工程一般是在开发机或配置机里做的做完数据量测试没问题后最终要在生产系统里跑。这时候问题就来了LSMW不是标准的开发对象不能像ABAP程序一样直接进传输请求很多人就在这一步卡住。实际上LSMW的配置是存储在数据库表里的我们要做的就是把这张配置表的数据打包进传输请求然后搬到目标系统。SAP自己也提供了分发和导出导入两种方式下面一个个讲。4.2 方案一用LSMW自带分发功能这是最正统的方式也是我优先推荐的方式。在LSMW初始界面选中要传输的项目和对象然后点击菜单栏中的“对象”或“跳转”找到“分发”功能。不同版本菜单位置略有差异但关键字一般是Distribute。点开分发功能后系统会弹出一个传输请求选择界面你可以新建请求也可以选现有请求。确认后LSMW会自动把当前对象相关的配置表数据写入这个请求。然后在目标系统用STMS把请求导入。在目标系统导入完成后进入LSMW看看项目和对象是否已经出现。如果看不到刷新一下或检查请求是否完整导入。这个方法优点是能把LSMW对象完整地一次性搬过去源结构、字段映射、转换规则、固定值全部保留基本不需要再调整。4.3 方案二导出导入文件如果不方便用传输请求或者你的权限不支持创建传输请求可以用LSMW自带的导出导入功能。在LSMW对象列表中选中对象找到“导出”功能系统会把当前对象导出为一个本地文件。然后在目标系统的LSMW中新建或者选择对象后使用“导入”功能把这个文件导进去。这种方式不需要传输请求操作门槛低但有一个明显坑源数据文件不会被一起导出。也就是说你导出的只是LSMW的配置定义不包括你要导入的那个Excel或TXT文件。目标系统里导入完LSMW工程后必须在读取数据步骤重新指定本地源文件路径。另外导出导入过程中不同版本的LSMW兼容性一般没问题但如果你跨的是ECC和S/4我建议还是用传输请求方式因为S/4和ECC屏幕结构有差异录屏对象导入后可能需要重新验证一下。4.4 方案三快速重建法第三种方法听起来不太“技术”但在实际项目中非常常见直接在目标系统重新做一遍LSMW。很多顾问觉得重新录屏很浪费时间其实如果只导一个对象源结构、字段映射都比较简单重新录一遍屏也就是20到30分钟的事。这个方法尤其适合目标系统是生产系统、但传请求流程繁琐的情况。我习惯的做法是在开发机的LSMW里把字段映射界面截图把源文件模板准备好然后到目标系统照着截图快速新建工程、录屏、映射、读文件、建会话、执行。虽然看起来不够“自动化”但胜在不会污染传输请求也不需要依赖权限反而更省心。4.5 传输后的检查清单无论用哪种方式传输到了目标系统之后我建议按这个清单过一遍检查目标系统SAP版本与源系统是否一致。录屏在ECC录的到了S/4很可能屏幕字段有变化需要重新验证。检查后台配置。目标系统与源系统的必填字段、字段状态组、编号范围等如果不同批导可能直接报错。确认源数据文件路径。LSMW读数据时用的是目标系统的应用服务器路径或本地路径传输后要重新指定。建议先在目标系统建一个小批次测试数据最多10条跑一遍SM35确认没有后台校验问题再放开全量导入。传输请求如果不是同一个系统链路的注意STMS队列是否正常避免请求没有真正到达目标系统。5. 常见问题与排查技巧5.1 报错速查表LSMW的报错信息往往比较抽象我整理了一张速查表方便大家对照现象常见原因解决思路读取数据时“找不到文件”文件路径不对或文件没有传到应用服务器确认路径、文件名、文件是否已上传转换数据报“字段长度过长”源文件字段值超出目标字段域长度检查数据或对源字段做截断处理创建会话成功SM35执行后红叉必填字段缺失、后台配置不符、字段状态错误双击红叉查看详细报错逐个修正映射界面找不到某目标字段目标字段可能被录屏结构隐藏用搜索功能或重新录屏删除源字段提示“已分配”该字段已建立映射关系回到字段映射删除对应关系再删源字段跨系统导入后对象消失请求未完整导入或未刷新对象列表用SE10检查请求重新导入5.2 我的几条避坑经验LSMW这个工具本身不复杂但实际用起来容易在细节上翻车。我分享几条自己长时间积累的经验。第一录屏时动作一定要“干净”。我见过有人录XK01时顺便改了个公司代码全局参数或者录屏过程中点了一下“附加”菜单里的东西结果批导时几百条数据都带上了这个多余动作。录屏尽量一次走完正常流程不要往屏幕上添加额外操作尤其不要修改默认勾选项。第二源文件字段名前不要带空格或特殊符号。LSMW读文件时按列名识别字段如果文件第一行某些列名有空格、换行符或特殊字符字段匹配时容易出怪问题。最好全部用英文字母、数字、下划线组成。第三数据量大的时候一定要分批建会话。我一般一次读几千行然后在创建会话前按数量拆分成多个会话每个会话控制在500到1000条之间。这样即使某个会话报错也只影响那一批不需要全部重跑。第四SM35执行之前先在“读入数据”和“显示读取数据”里把数据仔细看一遍。这一步很多人直接跳过结果到了SM35才报错浪费时间还不好定位。数据行数少时可以随机抽查几行大数量时排序看关键字段有没有明显错位。第五最后也是最重要的一条做任何跨客户端传输前先在开发机做好备份。导出的LSMW配置文件、源数据文件、传输请求编号这些都单独归档到一个项目目录里。因为生产系统导入后一旦需要调整你很可能要回到原环境去修改再重新传输没有备份就只能靠记忆重建那太痛苦了。我在实际项目中还发现很多同事对LSMW的“固定值”和“删除多余字段”概念混淆以为固定值就是可以“忽略”字段删除字段就是“不用管它”。这两个其实完全不同固定值是告诉系统“这个地方填一个固定内容”删除映射是告诉系统“这个字段你不要管”。时序上固定值的优先级更高如果同一个目标字段既配了固定值又有源字段映射固定值会覆盖映射值。所以大家配置完一定要在“显示读取数据”里面检查最终结果确认每个字段最终取值是不是符合预期。如果你准备在公司内部推广LSMW做数据批导的统一工具我建议做一个小规范文档规定好源文件命名规则、字段命名规范、固定值使用规范以及传输请求的申请流程。毕竟LSMW这工具简单归简单但多个顾问各自用各自的方式操作最后产生的一堆对象、录屏、工程会很乱事后清理比新建还麻烦。