简介:这份SAP批处理工具详解面向ERP顾问、数据运维及系统迁移人员,围绕BDC和LSMW两大主流工具展开。文档先从BDC入手,说明SHDB录屏生成脚本、前台/后台执行、模板导出与Office邮件合并批量处理等关键操作;再系统讲解LSMW的创建对象、定义数据文件、源/目标结构映射、转换规则及数据传输流程,并结合物料账期开启等业务场景对比两者适用性。压缩包内含1个docx文档,约2.49MB,内容结构清晰,既有分步图文示例,也有后台配置转前台、维护视图等扩展技巧,适合需要落地批处理或准备数据迁移的SAP从业人员参考学习。该资源已有1749人学习,是快速理解SAP批处理机制与操作细节的实用资料。
1. SAP批处理绕不开的两种工具:从21次重复操作说起
某项目里有个需求很不起眼:公司代码 0001 的物料帐期要从 1998 年 3 月逐月打开到 1999 年 12 月,业务上每个月都执行一次 MMPV,一共 21 次几乎一样的操作。有人说手工点 21 次不就完了?一次操作三四个屏幕,21 次下来至少一小时,点错一个月份就得返工。更现实的是,这只是上线数据准备里最不起眼的一环——真正的主数据导入是几十万条起。当时摆在我面前的选择就是 SAP 批处理的两条主流路线:BDC(Batch Data Conversion)和 LSMW(Legacy System Migration Workbench)。前者轻量、上手快,适合系统内重复业务操作;后者重流程、带完整转换规则,适合旧系统数据迁到 SAP。这篇方案讲清楚两条路各自怎么走、什么场景选哪个,最后怎么验收才算真跑通。
2. SHDB全流程实操:从录屏到批量执行21条物料帐期脚本
2.1 录屏前的准备:SHDB界面与创建记录的三要素
BDC 对应的事务码是 SHDB,进入后看到的是已有记录的概览列表。新建一条记录时有三个参数必须理解清楚:记录名称、事务代码、以及“提交后继续”选项。记录名称是给这次录屏起的标识,建议命名成能看出业务用途的形式;事务代码填你要录像的业务入口,本例是 MMPV;第三个“提交后继续”非常关键,MMPV 这类事务涉及多屏跳转和多张表更新,不勾这个选项,录到第一屏提交就中断了,后面根本录不完整。
对 SAP 有一点基础但不熟悉录屏的人,最容易在这里翻车。很多人以为录屏就是把操作录下来,结果录完回来看脚本只有一两个屏幕,就是因为漏勾了“提交后继续”。我的习惯是:凡是涉及凭证过账、期间维护、主数据批维护这类事务,一律勾上;但如果是纯查询类事务,不勾反而干净——查询完后多余的子屏幕会塞进大量无意义字段,影响后续批量脚本的可读性。
参数都维护好后点击“开始记录”,SAP 会立即切换到 MMPV 所在的业务界面,从这一刻起你的每一次回车和输入都会被记录成脚本。
2.2 录屏执行细节:MMPV三屏操作与页面翻页姿势
录屏过程要模拟一次真实、干净的单次操作。以打开 1998 年 4 月物料帐期为例:先在 MMPV 界面输入公司代码 0001 和期间,点击运行,系统弹出警告提示,此时不要做任何编辑修改,直接按回车继续,最后进入执行结果界面,连续按退出键离开。
这里有一个容易被忽略的技术细节:录屏过程中如果界面出现滚动条,禁止用鼠标拖动滚动条或用鼠标滚轮翻页,必须用键盘上的 PageUp、PageDown 翻页。原因是 SHDB 记录的是用户交互事件,鼠标滚轮和滚动条拖动的位移可能被记录成无法回放的屏幕坐标操作,批量执行时这些坐标往往对不上目标屏幕的控件位置,导致脚本中断。这类问题很难在单次录屏时发现,要等批量执行才暴露,排查成本很高。
录完退出 MMPV 后回到 SHDB,就能看到刚才三个屏幕的脚本。注意观察关键字段:I_VBUKR 是公司代码,值是 0001;I_LFMON 是月份字段,宽度 2 字节;I_LFGJA 是年份字段,宽度 4 字节。这几个字段就是后续批量脚本要替换的变量核心。
2.3 小批量直接执行:改字段值而不重新录屏
录好的脚本在保存之前就可以直接复用。回到 SHDB 的脚本明细界面,手动把 I_LFMON 改成 05、I_LFGJA 改成 1998,再点“处理”按钮,SAP 就会用新值重新执行一遍 MMPV。这样不需要重录,就能完成 1998 年 5 月的帐期打开。
这种做法适用于重复次数很少的场景,比如三五次以内的临时性操作。改字段时要注意字段宽度不能超:I_LFMON 是 2 字节,填 5 会显示为 05;I_LFGJA 是 4 字节,填 98 会被当成 0098,而不是 1998。年份必须写全。另一个容易出错的地方是,改完字段直接执行不会校验你改的值是否与前面屏幕的上下文一致——比如你改了月份但没改标题栏的期间描述,某些事务会在后续屏幕校验画面报错。
手工改字段适合应急,真正批量还得靠导出模板加工。
2.4 大批量生成脚本:导出模板、邮件合并、导入覆盖
批量执行的完整链路是:导出模板脚本 → 用 Office 邮件合并生成 N 条脚本 → 合并后的文件重新导入 SHDB。先把刚才录好的单次脚本导成文本文件,本例导出为 ZMMPV.txt,打开后会看到下面这种结构:
BDC_TRANSACTION TCODE: MMPV BDC_OKCODE: /00 BDC_CURSOR: I_LFMON I_VBUKR: '0001' I_LFMON: '04' I_LFGJA: '1998'这个文本就是模板。接下来用 Word 邮件合并,把模板中的月、年两个值替换成合并域,数据源里准备好 20 行记录(1998 年 5 月至 1999 年 12 月),执行合并后生成一个包含 20 次完整脚本块的文件,保存为纯文本格式,也就是本例的 MMPV_BATH.txt。
BDC_TRANSACTION TCODE: MMPV BDC_OKCODE: /00 BDC_CURSOR: I_LFMON I_VBUKR: '0001' I_LFMON: '05' I_LFGJA: '1998' BDC_TRANSACTION TCODE: MMPV ...合并时最容易踩坑的是换行符和缩进。邮件合并生成的文件默认带段落标记,如果模板块之间有空行或多余空格,导入 SHDB 时会被解析成额外的空记录或坏字段。我把模板做成每行一个字段、块与块之间不留空行,并在合并后用一个简单的脚本检查所有 BDC_TRANSACTION 标记的数量是否等于 20,等于再导。导入时点击 SHDB 的导入键,选择 MMPV_BATH.txt,系统提示覆盖原有记录,确认后脚本列表会变成原来的 13 行乘以 20 条记录,外加一个空行。看到 261 行这个数字,基本可以判断导入数量是准确的。
2.5 执行方式选择:前台显示每个屏幕,后台处理当黑匣子
脚本加载完点“处理”按钮,SAP 会弹出执行方式选择对话框。前台处理模式下会逐屏显示每个屏幕的执行画面,适合单条脚本排错;本例 20 条连续执行,采用后台处理模式,整个执行过程不会弹出业务画面,跑完后直接看执行结果记录。
选择后台模式后,系统逐条执行脚本,执行完毕会生成一条执行结果记录,显示每条脚本的状态。由于后台不显示业务屏幕,判断成功与否的唯一依据就是执行日志里的返回信息和系统消息。这里建议逐个核对结果记录中的状态码,不要只看最后的绿色标识——有些脚本中途有警告也会显示完成。
至此,公司代码 0001 通过 1 次录像加 20 次批量脚本,一共 21 次操作,把物料帐期从 1998 年 4 月开到了 1999 年 12 月。最后记得把这条记录保存到 SHDB 里,下次做类似期间维护可以直接套用或再导出加工。
3. LSMW落地步骤:管理界面、分步菜单与14步数据迁移流水线
3.1 管理界面:Project、Subproject、Object三层结构决定迁移粒度
LSMW 的事务码就是 LSMW,首次进入会有欢迎界面,勾选“下次不再显示”后进入管理界面。这个界面的核心不是菜单,而是左上角的三个输入框:Project、Subproject、Object。
这三层结构决定了一次数据迁移的粒度。Project 通常按整个迁移项目命名,比如“财务主数据迁移”;Subproject 按数据类别或模块区分,例如“供应商主数据”或“物料主数据”;Object 是最小执行单元,对应一份具体的源文件和处理规则。三层结构的好处是:同一个 Project 下可以挂多个 Subproject,每个 Subproject 下又可以定义多个 Object,执行时按 Object 粒度控制,不会牵一发动全身。
管理界面还负责批导入对象的新增、删除、查找、导出、导入。一个务实的小建议:每个 Object 的名称里带上日期或版本号,例如“供应商主数据_门店维度_20250401”,这样后面执行出错时,通过日志里的 Object 名就能快速定位用的是哪一版转换规则。
3.2 分步操作界面:从20步精简到14步标准流程
在管理界面选好三层对象后点运行键,进入分步操作界面。不同版本 LSMW 显示步骤数不一样:SAP IDES 4.71 显示 20 步,ECC 6.0 标准版本是 14 步。20 步版本多出来的 6 步通常是一些附加功能和辅助工具,对常规数据迁移不是必须项。
通过“选择用户菜单”按钮进入菜单配置对话框,找到最后 6 项,取消勾选,确认后界面变成标准的 14 步。需要恢复默认菜单时,直接点恢复按钮即可。界面下方有显示序号的开关键,按一下会显示每个步骤的编号,再按一下隐藏。建议做正式迁移时把序号打开,因为 LSMW 的报错信息会直接引用步骤编号,例如“在步骤 7 读取数据时发生错误”,有编号能直接跳转,省得一个个数。
3.3 14步流水线:数据准备、映射规则、预转换、实际转换
14 步的 LSMW 流程大致分四段:定义(准备源数据、定义源结构、定义目标结构、维护字段映射和转换规则)、读取(读取源数据、显示读取结果)、转换(预转换、显示转换结果、生成批输入会话)、执行(创建批输入会话、运行会话、查看日志)。
第一段是工作量最大的部分。准备工作是把源数据整理成 LSMW 能读的格式,一般用文本文件或 Excel 另存的 CSV。比如要导入物料主数据,源文件每行一个物料,字段包括物料号、物料类型、行业领域、基本计量单位等。定义源结构时指定源文件的字段顺序和类型,目标结构则要对应 SAP 的 BDC 录屏字段——LSMW 本身基于录屏技术,它会调用你录好的批输入会话模板,把源字段映射到录屏字段上。
字段名 起始位置 长度 类型 MATNR 1 18 CHAR MTART 20 4 CHAR MBRSH 25 1 CHAR MEINS 27 3 CHAR这里的关键是将源数据格式和录屏脚本字段对齐。LSMW 的映射规则支持直接字段赋值、常值、公式转换、查表转换(例如把外部系统编码映射成 SAP 内部编码)。字段映射的逻辑准确度决定了最终数据的干净程度,我一般会在此步骤投入整个迁移周期三分之一的时间。做完映射后进入读取阶段,LSMW 会按源结构定义把源文件读进内存,并允许预览读取结果;预转换则把源字段按规则转成 SAP 目标值,同样可以模拟执行。只有预转换全部通过后才进入实际转换和批输入会话执行。
3.4 什么数据必须走LSMW而不是SHDB
SHDB 适合轻量、一次性、小规模的操作重复,比如 21 次开帐期。但遇到下面这些情况,直接用 SHDB 会非常痛苦:数据量上万条、源数据来自老系统(非 SAP)、源字段与 SAP 字段存在编码体系差异、需要在导入过程中做字段校验和查表转换。
LSMW 的价值不在“录制和执行”,而在“转换规则”这一层。旧系统里的物料分类码、供应商编号、会计科目表,跟 SAP 里维护的编码体系几乎不可能一致,LSMW 自带查表转换和固定值映射,能在预转换阶段把差异显现出来。而 SHDB 要自己做这些映射,等于在邮件合并里手工维护一张映射表,数据量一大根本维护不过来。主数据、初始化库存、历史销售订单这三类数据,我的通常做法是默认走 LSMW。
4. 常见坑与排查:录屏污染、后台黑匣子与脚本错位
4.1 录屏被多余操作污染,批量执行时无故中断
现象:脚本前台执行时,某一步屏幕无法回放,报“屏幕不存在或字段无法输入”的错误。
原因:录屏过程中有多余的键盘或鼠标操作,最常见的是鼠标滚动、点了一下不相关的按钮、或者录完后多按了几次回车。这些操作被写入脚本,批量执行时目标屏幕可能没有对应的控件。
解决:回到 SHDB 重新录一次,录制过程中只做必要的输入和回车。如果滚动条界面出现,强制用 PageUp/PageDown 代替鼠标。录完后打开脚本逐屏检查,确认每个 BDC_OKCODE 和字段赋值都在预期范围内。
4.2 后台执行像黑匣子,看不出到底哪一步失败了
现象:后台处理模式跑完,会话状态显示“已完成”,但业务数据没变,或者部分数据对而部分数据错。
原因:后台执行不显示屏幕,任何中间屏幕的警告或错误都会被吞掉,只保留最终返回码。很多事务在数据不合规时发出黄色警告,后台模式会继续执行完成,但该条记录实际未更新。
解决:改变执行策略,小批量时先用前台模式跑一次,确认每个屏幕的走向。大批量执行后用执行结果记录逐条核对,重点看状态栏里的系统消息。如果对返回码不放心,用 SE16 直接查对应业务表,核对最终落库的数据,而不是只看批处理完成标识。
4.3 邮件合并生成的脚本错位,月份和年份对不上
现象:导入 MMPV_BATH.txt 后,SHDB 显示的脚本数量和预期一致,但执行后发现某些月份重复、某些月份缺失,甚至年份错乱。
原因:数据源 Excel 里的日期列被格式化成文本或序列值,合并后生成的值与预期不一致;或者模板块之间没有正确分隔,导入时把两条脚本粘连成一条。
解决:数据源列统一设置为文本格式,日期写成“199805”这种明确的数字,不要写“1998-05”,邮件合并输出的月份列用{MERGEFIELD}前后加上单引号'05'这种固定格式。导入前用文本编辑器打开合并结果,检查 BDC_TRANSACTION 出现次数是否等于数据条数。
4.4 SHDB录屏没勾“提交后继续”,脚本只有半个屏幕
现象:录完 MMPV 后看脚本,只有第一屏的录入数据,没有后续的警告确认屏幕和执行结果屏幕。
原因:创建记录时没有勾选“提交后继续”。事务在第一个屏幕提交后,后续屏幕操作没有被记录。
解决:删除这条记录重新创建,勾选“提交后继续”后再录一次。这个选项对多屏事务是硬性要求,对单屏查询可以不勾。
4.5 LSMW预转换通过但实际转换报错,报错定位不到字段
现象:读取数据和预转换都正常,实际转换时提示字段值无效,但不知道是哪个字段、哪条记录出的问题。
原因:预转换是按映射规则生成的模拟值,实际转换时 SAP 的业务逻辑会做更严格的校验,例如会计科目长度、主数据必填字段、编码表不存在等。预转换只验证映射规则本身,不验证业务表约束。
解决:先把 LSMW 的步骤 7 和步骤 9 的报错明细打开,通常错误信息里会带行号。用源文件行号反查该条数据,看对应字段在源文件里的原始值。大部分情况是源数据里有空值、超长值或特殊字符,排查时按报错字段段在 LSMW 的转换规则里加固定值兜底,而不是逐条改源文件。
5. 选型与脚本工程化:两个工具怎么划定职责边界
5.1 场景与工具对照:什么时候用BDC,什么时候用LSMW
| 维度 | BDC(SHDB) | LSMW |
|---|---|---|
| 适用数据量 | 小规模、几十到几百条 | 大规模、千条到几十万条 |
| 操作形式 | 录屏脚本,前台或后台执行 | 录屏 + 源结构 + 映射规则 + 转换 |
| 源数据要求 | 在 SAP 内部生成脚本 | 支持外部系统文件导入 |
| 字段映射 | 手工改脚本字段值 | 可视化字段级映射和规则定义 |
| 查表转换 | 不支持,依靠外部加工 | 内置查表和固定值映射 |
| 典型场景 | 期间维护、零星主数据修正 | 旧系统主数据迁移、初始化库存、历史订单 |
| 出错排查 | 靠执行结果记录和进程日志 | 靠步骤 7/9/14 的明细日志 |
这个对照表是我选型时的主要依据。一个业务需求到了手里,先问数据量级和来源:如果源数据本来就在 SAP 里,只是做重复操作,BDC 足够;如果数据在 Excel 或老系统里,且字段编码与 SAP 不一致,直接上 LSMW。中间地带(几百条、字段简单)我一般看是否涉及查表转换:涉及就 LSMW,不涉及就 BDC。
5.2 邮件合并模板怎么设计才稳定:字段标识与分隔符规范
用邮件合并生成 BDC 脚本时,模板设计决定了批量脚本的稳定性。我见过最稳定的模板是下面这种写法:所有变量统一用单引号包住,字段名顶格,每条脚本块之间不加空行,文件末尾保留一个换行符。数据源里不要用自然日期格式,全部拆成年、月两个数字字段。合并域在 Word 里显示为{MERGEFIELD 年}和{MERGEFIELD 月},合并后生成的就是I_LFGJA: '1998'和I_LFMON: '05'这种可以直接吃的脚本行。
生成之后不要直接导入,先用文本编辑器或命令统计 BDC_TRANSACTION 关键字数量。统计值等于待执行次数再导入,否则在 SHDB 里覆盖了原始记录,又要重新导出模板。
5.3 LSMW转换规则设计的三个层次:直接映射、查表、固定值
LSMW 做映射时遵循一个优先级逻辑:源字段有值且格式正确,用直接映射;源字段的值是外部编码,用查表转换映射成 SAP 编码;源字段缺失或无需传入 SAP 的值,用固定值兜底。三个层次里最容易出问题的是查表转换——查表匹配不到值不会报致命错误,而是落到异常记录里,这时候需要在错误处理里设置“写入错误文件”并收集未匹配的值,再回到源数据里统一清洗。
5.4 生产执行之前:先跑5条再跑5000条
我有一次做物料主数据迁移,预转换显示 8000 条全部通过,放到生产环境实际转换时,前 3000 条里有 400 条因物料组未维护被 SAP 拒绝。此后我再也不信完整的预转换通过率,改成固定的小批量验证:取源文件前 5 条、中间 5 条、最后 5 条做全流程穿透,确认三条路径都落库成功后再跑全量。这个习惯后来救回过一次供应商主数据迁移——中间批次里有一个编码前导零被 Excel 吃掉了,5 条验证一眼就看出来。
6. 验收与答辩:用执行日志和结果清单证明21次开帐期全部成功
6.1 用执行结果清单锁死每一项交付
验收不是“跑完就说成功”,而是把每一条执行结果落到业务表里。以开物料帐期为例,验收做两件事:
第一件事,核对 SHDB 执行结果记录,确认 21 条脚本状态全部正常,逐条查看系统消息里是否包含成功提示。第二件事,用 SE16 查询物料帐期表,按公司代码 0001 列出 1998 年 4 月到 1999 年 12 月每条记录是否存在。
| 序号 | 期间(月/年) | 执行脚本条数 | 落库标记 |
|---|---|---|---|
| 1 | 04/1998 | 1(录屏执行) | 已存在 |
| 2 | 05/1998 | 1(批量脚本) | 已存在 |
| ... | ... | ... | ... |
| 21 | 12/1999 | 1(批量脚本) | 已存在 |
答辩时讲这套方案,核心逻辑是:业务背景 → 选型理由 → 录屏规则 → 批量生成链路 → 验收证据。选型部分讲清楚两点即可:为什么开帐期这种系统内重复操作选 BDC,而主数据迁移选 LSMW;批量生成为什么用邮件合并而不是手工改文件。讲到验收证据时,直接把执行结果记录和 SE16 查出的数据表对照展示,比任何讲解都有说服力。
LSMW 的验收也同理——不只看步骤 14 的绿色勾,而是随机抽取若干主数据,在 SAP 前台用事务码查一遍,确认关键业务字段值与源文件一致。从那以后,我每次做批量导入都强制走一遍“前 5 条穿透 + 结果表对照”的流程,黑匣子一样的东西拿数据说话,翻车概率降了一大半。希望这套验收思路也能帮到你。
本文还有配套的精品资源,点击获取