SAP LSMW数据批导实战:默认值配置、字段删除与跨客户端传输
2026/9/16 7:20:44 网站建设 项目流程

干过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的批导流程基本固定,标准路径是这样的:

  1. 进入LSMW事务代码。
  2. 创建项目Project、子项目Subproject、对象Object。
  3. 定义对象属性,选择录屏或BAPI方式。
  4. 维护源结构(Source Structures)。
  5. 维护源字段(Source Fields)。
  6. 维护结构关系(Source Structure and Field Relations)。
  7. 维护字段映射和转换规则(Field Mapping and Conversion Rules)。
  8. 维护固定值、事务、规则(Fixed Values, Transactions and Rules)。
  9. 读入数据(Read Data)。
  10. 显示读取后的数据(Display Read Data)。
  11. 转换数据(Convert Data)。
  12. 显示转换后的数据(Display Converted Data)。
  13. 创建批输入会话(Create Batch-Input Session)。
  14. 运行批输入会话(Run Batch-Input Session)。
  15. 查看批输入会话日志(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这工具简单归简单,但多个顾问各自用各自的方式操作,最后产生的一堆对象、录屏、工程会很乱,事后清理比新建还麻烦。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询