简介: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个标准步骤拆解:对象、结构、映射、转换、执行
完整流程见下表:
| 步骤 | 名称 | 用途 |
|---|---|---|
| 1 | Define Object Attributes | 定义对象属性,指定源数据语言、转换程序 |
| 2 | Maintain Source Structures | 维护源结构,定义数据文件在LSMW里的字段结构 |
| 3 | Maintain Source Fields | 维护源字段,逐个定义字段名、类型、长度 |
| 4 | Maintain Structure Relations | 维护结构关系,把源结构和目标SAP结构绑定 |
| 5 | Maintain Field Mapping and Conversion Rules | 字段映射与转换规则,核心步骤 |
| 6 | Maintain Fixed Values, Translations, User-Defined Routines | 固定值、翻译、自定义例程 |
| 7 | Specify Files | 指定文件路径和文件名 |
| 8 | Assign Files | 把文件分配给对应的源结构 |
| 9 | Read Data | 读取文件数据到LSMW |
| 10 | Display Read Data | 显示读取的数据,检查是否正确 |
| 11 | Convert Data | 按映射规则转换数据 |
| 12 | Display Converted Data | 显示转换后的数据 |
| 13 | Create Batch Input Session | 创建批输入会话 |
| 14 | Run 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头,读进来第一列第一个字符多了不可见图元。
字段映射表在管理界面里维护,核心是把源字段对应到目标表字段:
| 源字段 | 目标字段 | 说明 |
|---|---|---|
| MATNR | MARA-MATNR | 物料号 |
| MAKTX | MAKT-MAKTX | 物料描述 |
| MATKL | MARA-MATKL | 物料组 |
| MTART | MARA-MTART | 物料类型 |
| MEINS | MARA-MEINS | 基本单位 |
| NTGEW | MARA-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 |
|---|---|---|
| 入口事物码 | SHDB | LSMW |
| 核心原理 | 直接录屏回放 | 录像+字段映射+转换规则 |
| 典型场景 | 小批量重复操作、期间维护 | 大批量主数据/动态数据迁移 |
| 脚本可控性 | 弱,脚本裸替换 | 强,靠映射规则控制 |
| 错误处理 | 执行后看处理记录 | 预转换阶段可拦截大量错误 |
| 学习曲线 | 低 | 中高 |
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批处理,数据能进系统只是第一步,能验证每一步进了什么,才叫真正掌握。这套方法不挑环境,照着这份详解走一遍,遇到问题再看第五章的排查,基本能自己收尾。希望帮到你。
本文还有配套的精品资源,点击获取