☰
SAP批处理与数据迁移实战:BDC和LSMW全流程解析
2026/10/2 10:51:10 网站建设 项目流程

简介:SAP批处理工具使用详解是一份面向SAP顾问、运维及数据迁移项目人员的文档型资源,重点讲透BDC(Batch Data Conversion)与LSMW(Legacy System Migration Workbench)的适用场景与操作流程。压缩包内为1个docx文档,大小约2.49MB,以图文步骤说明SHDB录屏脚本的录制与执行、前台/后台模式选择、模板导出及Office邮件合并生成批量脚本,同时覆盖LSMW对象创建、源结构与目标结构定义、转换规则设定、数据传输等关键环节。文档结合物料账期逐月调整、公司代码维护等实例,给出从单个事物码录屏到生成批量执行脚本的完整思路,既有录屏与脚本生成的操作截图,也有转换规则配置要点,便于按图索骥。已有1748人学习下载。对需要快速上手批处理操作的读者,可按文档步骤直接实践,提升效率并减少手工错误。

1. SAP批处理工具从哪入手:先分清BDC和LSMW的边界

做SAP数据迁移和批处理,绕不开BDC和LSMW这两个词。BDC轻量,事务码SHDB录屏回放,解决几十次这种量级的重复操作;LSMW是重武器,14个标准步骤走完,适合大批量主数据和业务数据迁移。两种工具我都实际用过,BDC开物料帐期、LSMW导主数据,各有各的顺手和坑。这篇文章按两条线走一遍:BDC从录屏到批量执行的完整链路,LSMW从数据准备到批输入会话的14步流程,参数怎么设、哪些地方容易翻车,都写在后面。适合SAP顾问、月结运维和刚接触数据迁移的读者。

2. BDC实战:用SHDB把21次物料帐期操作压成一次批量执行

2.1 SHDB录屏的三个前提:事务代码、提交后继续、录屏纪律

进入事务码SHDB,点“新建记录”,弹出来的对话框只有三个关键输入:记录名称、事务代码、提交后继续。记录名称自己起,能看懂就行;事务代码这次填MMPV,也就是打开物料帐期的事务码。第三个“提交后继续”要打勾,因为MMPV是多屏操作,从输入公司代码和期间的屏幕,到报警提示屏幕,再到结果展示屏幕,如果这个选项不打勾,录到第一个屏幕结束就停了,后面的屏幕进不去。

录屏过程中最重要的是纪律:不做任何多余操作。点错了按钮、鼠标划过菜单、列表出现时用鼠标拖滚动条,这些都会被记录进脚本,后面批量执行时就会变成多余的屏幕操作,导致脚本错乱。遇到有滚动条的列表,用PageUp、PageDown翻页,不要用鼠标滚轮。

MMPV这个事务码录的过程是三屏:第一屏输公司代码0001、期间1998年4月,点执行;第二屏弹出警告,直接回车;第三屏显示执行结果,连续按退出键返回。回到SHDB后能看到录屏脚本,里面有三个屏幕的记录。这时注意脚本里的关键字段:I_LFMON是月份,2字节;I_LFGJA是年份,4字节;I_VBUKR是公司代码。

提示:脚本里I_LFMON是两位的月份,5月必须写成05,写成4会在这个字段上报错。

2.2 录制完脚本的两种用法:改字段重执行与导出模板

录屏脚本在SHDB里可以直接改字段值再点“处理”重新执行。比如把I_LFGJA改成1998、I_LFMON改成05,再点处理,就把5月的帐期开了。这种方式适合重复次数少的情况,比如三五次的手工调整,改字段比重新录一遍快。

超过十次就不值得手工改了。点导出键把脚本存成文本文件,比如ZMMPV.txt,这个文件就是批量脚本的模板。导出来以后,用Office邮件合并加工,把月份、年份替换成变量,先生成一个包含20次执行的批量脚本MMPV_BATH.txt。邮件合并的原理不复杂,把Excel或Word表里的年月字段和脚本模板里对应的行绑定,合并后每条记录展开成一段完整脚本。

合并后的脚本长这样:

BDC_TCODE MMPV BDC_OKCODE /11 BDC_CURSOR I_VBUKR BDC_FIELD I_VBUKR, '0001' BDC_FIELD I_LFGJA, '1998' BDC_FIELD I_LFMON, '05' BDC_OKCODE = 'ONLI' BDC_TCODE MMPV BDC_OKCODE /11 BDC_CURSOR I_VBUKR BDC_FIELD I_VBUKR, '0001' BDC_FIELD I_LFGJA, '1998' BDC_FIELD I_LFMON, '06' BDC_OKCODE = 'ONLI'

每次执行以BDC_TCODE开头,后面跟屏幕操作。BDC_OKCODE /11表示回车或执行当前屏幕,不同屏幕的操作码不一样;BDC_CURSOR是指定光标位置,通常放在要输入的字段上;BDC_FIELD就是实际要写入的界面字段值,格式是字段名、逗号、单引号包住的值。这里注意月份I_LFMON是两位,5月要写成'05',年份I_LFGJA四位,'1998'。按这个格式,20次执行就是把20段这样的脚本纵向拼在一起。

2.3 导入批量脚本与处理模式:前台A还是后台N

在SHDB界面点导入键,选择MMPV_BATH.txt,导入后原来录屏的单条脚本被覆盖,列表里能看到第一条显示的已经是1998年5月。20次执行对应261行左右,比原来13行多出20倍。点“处理”后会弹处理记录对话框,处理模式有前台(A)和后台(N)两种。

前台模式会把每次执行的屏幕都回放一遍,能看到每个屏幕的字段和确认画面,适合执行前验证脚本是否正确。后台模式直接在系统里跑,看不到屏幕,但速度快,适合确认过脚本可靠之后的大量执行。本例20次操作选后台。执行完毕SHDB列表会显示处理记录,逐条展开能看到每次执行的状态,有成功、有失败。下一章把LSMW的14步走一遍。

3. LSMW实操:14个步骤完成主数据迁移,比BDC重但稳

3.1 LSMW的三层结构与两种界面

LSMW的事务码就是LSMW,第一次进入会先看到欢迎界面,勾选“下次不再显示”然后确认。管理界面主要做项目对象的管理:Project、Subproject、Object三层,一个Project是一个迁移项目,Subproject可以按数据类型分组,比如静态数据、动态数据、业务数据,Object就是具体的导入对象,比如物料主数据、客户主数据。

选定三层对象后点运行进入分步操作界面。IDES 4.71老版本显示20个步骤,ECC 6.0只有14个,把固定值维护、翻译、用户例程这些合并了。14个步骤从定义对象属性开始,一直到运行批输入会话结束,整个流程覆盖了“准备数据→定义模板→读取预转换→实际转换”四个阶段。

3.2 14个标准步骤拆解:对象、结构、映射、转换、执行

完整流程见下表:

步骤名称用途
1Define Object Attributes定义对象属性,指定源数据语言、转换程序
2Maintain Source Structures维护源结构,定义数据文件在LSMW里的字段结构
3Maintain Source Fields维护源字段,逐个定义字段名、类型、长度
4Maintain Structure Relations维护结构关系,把源结构和目标SAP结构绑定
5Maintain Field Mapping and Conversion Rules字段映射与转换规则,核心步骤
6Maintain Fixed Values, Translations, User-Defined Routines固定值、翻译、自定义例程
7Specify Files指定文件路径和文件名
8Assign Files把文件分配给对应的源结构
9Read Data读取文件数据到LSMW
10Display Read Data显示读取的数据,检查是否正确
11Convert Data按映射规则转换数据
12Display Converted Data显示转换后的数据
13Create Batch Input Session创建批输入会话
14Run Batch Input Session运行批输入会话写入SAP

前6步是搭架子和映射规则,中间4步是文件和数据读取,后4步是转换和实际写入。多数人卡在第5步字段映射,多数数据错误都出在第12步之前没仔细看转换结果。

3.3 源文件格式与字段映射:文本文件怎么排、映射表怎么建

LSMW读取源文件有固定格式要求。文本文件通常用分隔符或固定列宽,以物料主数据为例,我一般用竖线分隔的文本:

10000001|螺丝M6x20|M-001|STCK|KG|1 10000002|螺母M6|M-001|STCK|KG|2

第一列物料号,第二列物料描述,第三列物料组,第四列物料类型,第五列基本计量单位,第六列净重。文件编码要用SAP的代码页能认的格式,中文环境常见的问题是Excel另存的CSV带BOM头,读进来第一列第一个字符多了不可见图元。

字段映射表在管理界面里维护,核心是把源字段对应到目标表字段:

源字段目标字段说明
MATNRMARA-MATNR物料号
MAKTXMAKT-MAKTX物料描述
MATKLMARA-MATKL物料组
MTARTMARA-MTART物料类型
MEINSMARA-MEINS基本单位
NTGEWMARA-NTGEW净重

映射时字段转换规则也很关键。源文件里的值经常和SAP内部值不一样,比如计量单位源文件里是KG,SAP里要转成内部编码;物料组、工厂这类字段存在前导零问题,物料号看着是10000001,SAP内部可能是补零后的12位。这类转换规则在步骤5里设定。LSMW还支持固定值翻译表,把源值映射到目标值,比如把“01”翻译成“0001”。

3.4 读取、预转换、实际转换:三步分开,每步都要看结果

从第9步开始每步都不能跳。第9步Read Data执行后,第10步Display Read Data展示的是从文件读进来的原始数据,这步看的是文件有没有读错、字段有没有错位。第11步Convert Data按映射规则转换,第12步Display Converted Data看的是转换后的数据,这步看的是映射规则有没有生效,固定值翻译后的结果对不对。

预转换阶段检查完,才到第13步Create Batch Input Session。这一步为每条数据生成一个批输入会话,相当于把转换好的数据交给录屏脚本去回放。第14步运行会话,可以设前台或后台,前台一条条看屏幕,后台跑完后到SM35里看会话状态。14步走完,数据就写入SAP了。LSMW写数据走的是后台批处理,提交机制和BDC在SHDB里跑是一样的。

4. 选型对比:BDC和LSMW,什么场景用哪个

4.1 底层原理的差异:录屏回放 vs 带映射层的回放

BDC和LSMW底层都有录屏的影子。BDC就是直接录屏,脚本里录了什么,执行时就回放什么,字段值批量替换。LSMW也有录屏,但前面多了源结构定义、字段映射、转换规则这三层,录屏只是最后第13步批输入会话的载体。所以LSMW的脚本生成是受控的,字段值经过映射再填进屏幕字段;BDC则是裸脚本,字段值直接替换。

这个差异决定了适用边界。数据量小、字段关系简单,用BDC;数据来自旧系统、字段和SAP字段对不上、需要做值翻译,用LSMW。LSMW的映射层相当于把“改脚本”这件事变成了“改映射表”,对业务人员更友好。

两种方式的对比放在一起看更清楚:

对比维度BDC(SHDB)LSMW
入口事物码SHDBLSMW
核心原理直接录屏回放录像+字段映射+转换规则
典型场景小批量重复操作、期间维护大批量主数据/动态数据迁移
脚本可控性弱,脚本裸替换强,靠映射规则控制
错误处理执行后看处理记录预转换阶段可拦截大量错误
学习曲线低中高

4.2 事务型重复操作用BDC:物料帐期、期间维护、批量过账

BDC适合的事务型操作有几个特征:重复次数多但操作路径固定;屏幕字段固定、没有复杂的条件和分支;字段值可以用简单规则生成。物料帐期逐月打开就是典型例子,事务码MMPV,屏幕就三个,字段就公司代码、年份、月份,值可以按序列生成。公司代码维护、物料凭证结算期间设定这些场景也一样。

BDC还有一个场景是后台配置类的批量维护,但SHDB不能直接录后台,需要先把后台配置转到前台操作,或者用SM30、SM34维护视图的方式。很多配置表支持SM30直接维护,录一段SM30的脚本,把配置行数据批量带进去,比一条条在后台点快得多。

4.3 大批量数据迁移用LSMW:主数据、动态数据、业务数据

LSMW适合的是“有一整份数据要进来”的场景。静态数据比如客户、物料、供应商主数据,动态数据比如期初库存,业务数据比如历史销售订单。这类数据的特征是来自旧系统或Excel,字段命名和SAP不一样,可能有脏数据、重复数据,需要在导入过程中做转换和校验。

LSMW的数据量上限比BDC高。BDC生成的脚本文件越大,导入越慢,因为每一段脚本都是一次屏幕回放;LSMW有独立的数据读取和转换阶段,数据在转换阶段可以做批量校验,最后批输入会话的创建和运行也可以分批控制。做过数据迁移项目的人都知道,期初库存导入几十万条,用LSMW跑预转换后创建会话,分批次运行,出错了还能重新读取、重新转换、重新运行,不用从头录脚本。

4.4 两个工具结合用的习惯

实际项目里我常看到两种工具混用。大批量主数据用LSMW,导入过程中发现某些业务数据量小但逻辑复杂,就用BDC先录一遍再批量执行。LSMW最后创建的批输入会话,本质上就是BDC会话,运行后能到SM35里看状态。理解了这层关系,排障思路就清晰:先看映射和转换,再看会话里具体报错。

5. BDC与LSMW常见问题排查:录屏翻车、映射错位、后台失效的五个现场

5.1 BDC的坑

现象一:录屏时多点了按钮,批量执行时屏幕跳转错乱。原因:SHDB录屏把键盘和鼠标操作全部记录,多余的点击、滚动、回车都进了脚本,回放时屏幕顺序和预期不一致,系统在找不到目标字段时报错。解决:重新录屏,严格只做目标操作,遇到警告屏直接回车,列表屏用PageUp、PageDown翻页,退出MMPV用退出键不要用鼠标点。

现象二:后台执行完成,状态看起来正常,但实际数据没进。原因:后台模式不显示屏幕,执行结果记录里某几条其实是失败状态,或者值没有写入,比如MMPV开的期间没生效。解决:执行完不要只看“完成”,展开处理记录逐条核对状态,再进MMPV的显示界面反查开的帐期。批量大时我先拿一条数据前台跑,确认屏幕逻辑正常再放量。

现象三:邮件合并后导入SHDB报错或行数不对。原因:邮件合并输出的文件带了额外换行符或编码不对,SHDB导入时解析失败;常见的是文本文件每段脚本之间的空行数不对,系统把空行也当执行块。解决:导出文件用纯文本编码保存,Windows下用记事本另存时选ANSI或无BOM的UTF-8,具体按SAP代码页来;合并后检查每个BDC_TCODE前面的空行数和末尾多余行,导入前先在记事本里看一遍结构。

5.2 LSMW的坑

现象四:预转换这一步全部正常,实际转换后数据有错。原因:预转换只校验格式和映射,不校验业务逻辑。比如物料号映射对了,但单位没有做翻译,系统按源值写入后单位字段的值不对;或者固定值翻译表只做了部分值,漏了某个值,第12步显示转换后数据不会明显报错,写入后才发现脏数据。解决:预转换的展示结果不能只看不报错,要抽查几条关键字段:物料号位数、工厂、采购组织这些值是否和SAP标准一致,固定值翻译覆盖全量清单,宁可多做一次转换检查也不要直接创建会话。

现象五:读取数据显示字段错位,物料号跑到描述列。原因:源文件的分隔符指定错了,或者文件带了BOM头,第一列第一个字符多了不可见字符。解决:在第9步读取前,先确认Specify Files里文件格式设置:列分隔符、字符串引号、字符集。文本文件尽量用竖线而不是逗号做分隔符,因为物料描述里可能有逗号。如果文件是CSV另存的,先检查开头有没有BOM,用支持编码转换的编辑器转成纯文本再喂给LSMW。

这五条归纳起来就是三件事:录屏不干净、文本文件格式不对、转换规则不完整。踩过一次以后,我每次做LSMW都会提前把源数据的枚举值拉一遍清单,和固定值翻译表对比,缺一个补一个。

6. 批量执行后的验证技巧:从处理记录反查数据正确性

BDC执行完毕,不要关了屏幕就走。处理记录里每一条执行都能展开看状态,红色图标说明那条数据失败,双击进去能看到具体报错屏幕。物料帐期这个例子,验证最简单的方法是重新打开事务码MMPV,进入显示界面直接看公司代码0001的期间开到了哪一个月。对LSMW,验证分两步:先看SM35会话状态,绿的是已执行成功的,失败的会留在表里,双击能看到卡在哪一步;再用事务码或SE16N查目标表,比如导物料主数据就查MARA、MAKT对应物料号是否存在,或用MM02显示该物料,核对描述、物料组、单位这些字段。

这里我有个一直保留的习惯:批量执行分两批走,第一批发两条数据,前台模式跑,确认屏幕逻辑和数据正确,再改后台全量执行。这个习惯救了我很多次,特别是用BDC跑大段脚本的时候,因为邮件合并出来的脚本如果有细微格式错,前台跑第二条就会发现,后台跑到底全部失败才回头改模板,时间成本差很多。从那以后,我每次批量执行前都会强制走一遍“先验两条、再全量跑、最后反查结果”的流程。做SAP批处理,数据能进系统只是第一步,能验证每一步进了什么,才叫真正掌握。这套方法不挑环境,照着这份详解走一遍,遇到问题再看第五章的排查,基本能自己收尾。希望帮到你。

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

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

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

立即咨询