☰
SAP批处理全解析:BDC与LSMW原理、实操与选型避坑指南
2026/10/17 12:51:04 网站建设 项目流程

简介:SAP批处理工具BDC与LSMW的使用方法详解,面向SAP顾问、开发人员及负责数据迁移的运维/业务人员,解决大批量数据录入与系统间数据转换的常见痛点。文档以SHDB录屏为切入点,完整介绍BDC的录制脚本、审查调整字段、导出模板、邮件合并生成批量脚本、前台/后台执行等环节,并结合物料账期逐月打开的具体案例,演示21次重复操作的自动实现;随后系统梳理LSMW的14个标准步骤,覆盖对象创建、数据文件定义、源/目标结构映射、转换规则及执行传输,帮助读者对比两者场景,合理选型。资源为单个docx文档,压缩包大小2.49MB,图文配合、步骤编号清晰,适合边看边练。已有1749人学习,无论是快速掌握SHDB录屏批处理,还是上手LSMW数据迁移项目,都能从中获得可落地的操作参考。

1. 从物料账期到项目搬家:SAP 批处理的两种打开方式

在一家制造企业的月结现场,账期没开、成本滚不平的报错弹窗能让人一上午什么都干不成;在项目上线现场,几百条旧物料主记录靠人工逐条敲进 SAP,加班到凌晨都未必敲得完。SAP 批处理工具就是专门干这个的,它把鼠标点击变成脚本、把 Excel 清单变成系统录入动作。本文要拆的是其中最常用的两个:BDC(记事物码 SHDB)和 LSMW,一个轻量录屏、一个重型迁移。我先把各自的边界和完整操作步骤摊开来讲,中间穿插我实际跑过的物料账期调整和主数据导入案例,最后把几个容易翻车的细节单独列出来。

2. BDC 实操:用 SHDB 把开账期这类重复操作录成脚本再批量复用

2.1 先搞清楚 BDC 的定位:录屏是手段,批量执行才是目的

BDC 全称 Batch Data Conversion,对应的事物码是 SHDB。它的核心思路很朴素:把人对 SAP 屏幕的一次操作录下来,生成一段脚本,然后在后台重复回放这段脚本。你录了一次“打开 1998 年 4 月物料账期”,它就能帮你把 1998 年 5 月、6 月……一直开到 1999 年 12 月。

但这里要先立一个认知:BDC 不是数据迁移工具,它不知道什么叫“主数据清洗”,也不理解“源系统字段映射”。它的最小单位是字段和屏幕,你录进去什么字段,它就替你在屏幕上填什么字段。所以它适合的是“操作路径完全一致、字段值按规律变化”的重复劳动,比如逐月开账期、逐公司代码做维护、逐日跑某个固定事务码。对于要跨系统搬数据、还要做格式转换的场景,那是 LSMW 的地盘,后面第三章再展开。

SHDB 的入口就是事务码 SHDB,进去之后能看到所有已保存的 Recording 列表。新建一个记录时,系统会要求填“记录名称”和“事务代码”。这里有个关键选项:“提交后继续”。如果你要录的事务涉及多屏,比如 MMPV 这种先输公司代码再输期间、再按回车继续的操作,必须把这个选项勾上,否则录到第二屏就断掉。

2.2 录一次 MMPV:从「新建记录」到「处理」的完整动作链

我用一个实际案例走一遍:公司代码 0001,要把物料账期从 1998 年 4 月逐月开到 1999 年 12 月,共 21 次。第一次先录一次 MMPV 打开 1998 年 4 月,之后生成 20 个脚本补足 5 月到 12 月。

操作路径是前台输入 SHDB,新建记录,填名称(比如 ZMMPV_TEST)和事务代码 MMPV,勾选“提交后继续”,点击“开始记录”。这时候系统进入录屏状态,我按正常业务操作输入公司代码 0001 和期间 1998 年 4 月,点运行。系统弹了个警告,我不做任何处理,直接回车继续,看到执行成功的结果后连续点退出键返回 SHDB 记录界面。

录屏过程中有个硬性纪律:不要有多余的鼠标和键盘动作。如果你在列表界面想翻页,一定要用 PageUp 和 PageDown,不要用鼠标去拖滚动条——鼠标滚动条在录屏脚本里会被记录成一段非标动作,回放时经常莫名卡住。我当时录的时候就踩过一次这坑,后面专门在第五节里细说。

录完返回 SHDB,你会看到类似下面的脚本片段:

* 录像脚本片段(示意):事务代码 MMPV BDC_OKCODE = /00 BDC_CURSOR = BANK1 BANK1-MONAT = 04 BANK1-LFGJA = 1998 BDC_OKCODE = ONLI

再往下会有两行关键字段:I_LFMON(月份,2 字节)和I_LFGJA(年份,4 字节),这是后续批量替换的核心变量。而I_VBUKR对应的值0001就是公司代码。在 SHDB 的脚本列表里直接改这两个字段的值,再点“处理”,就能单次执行一遍新的开账期操作——这是最轻量的用法,适合只有三五次重复的场景。

2.3 从 1 次到 21 次:导出模板、邮件合并、再导入,一次说清

二十一 次操作不能再靠手改了,标准做法是导出模板、批量生成脚本、再导回来集中执行。

第一步,在 SHDB 的脚本界面上点导出按钮,把刚才录的脚本存成一个纯文本文件,比如ZMMPV.txt。这个文件里的结构是按屏幕分隔的,每个字段一行,BDC_OKCODE和BDC_CURSOR这类控制行也都在里面。第二步,用 Office 邮件合并来制作批量脚本:把 ZMMPV.txt 作为模板,把月份、年份作为合并字段,数据源做成一张 Excel 表,一列放月份(5、6、7……12),一列放年份(1998、1999),这样每一条数据就生成一段独立的脚本。因为我第一次已经手动执行了 1998 年 4 月,所以数据源从 1998 年 5 月开始,到 1999 年 12 月结束,正好 20 条。

邮件合并完成后的文件命名为MMPV_BATH.txt,里面包含 20 段结构完全一致、仅月份和年份不同的脚本。再回到 SHDB,点导入按钮,把这个文件加载进来,会覆盖原有数据。注意一个细节:如果你原来的脚本是 13 行,导入 20 段后总行数一般是 13 乘以 20,再加末尾一个空行,我当时看到显示 261 行,心里大致就能确认加载正确。

加载完毕,点“处理”按钮,系统会弹出一个对话框,让你选择执行方式:前台(A)会逐个屏幕显示执行过程,后台(N)静默跑、不占终端。二十次操作我直接选后台,点了确认之后系统开始跑,跑完出现执行结果记录,显示每次执行的成功或失败状态。至此,公司代码 0001 的物料账期通过 1 次录像加 20 次脚本执行,开到了 1999 年 12 月。

2.4 前台与后台执行的取舍

用 BDC 执行批量脚本时,处理模式的选型直接决定你盯终端的时长:

处理模式适用场景优点缺点
前台(A)少量操作、需要看过程每步都能看到屏幕,出错能立刻定位占用终端,速度慢
后台(N)批量几十上百条不占用前台,效率高出错只在结果记录里显示,需要事后看日志
错误分析(E)排查问题出错时停在出错屏幕需要人工介入处理

如果批量数量在十次以内,我一般会老老实实选前台执行,用肉眼盯一遍屏幕流转,确认字段填充顺序、退出时机和录屏一致。超过二十次就直接后台,但跑完后要认真看处理记录列表里每条是绿灯还是红灯,不能只看“已完成”几个字就收工,红灯里往往藏着字段长度截断或权限问题。

3. LSMW 标准 14 步:从源数据准备到传输完成的完整链路

3.1 LSMW 的管理界面与分步工作台的两层设计

LSMW 全称是 Legacy System Migration Workbench,管理界面用事务码 LSMW 进去。首次进入会有一个欢迎界面,勾掉“下次不再显示”后,就进到正式的管理窗口。这个窗口解决两件事:管理批导入对象(增删改查、导入导出),以及进入录像或分步工作台。

真正的工作是在分步工作台里完成的,而进入分步工作台之前必须先在地化好三维标识:Project(项目)、Subproject(子项目)、Object(对象)。这个组合是 LSMW 的定位锚点,所有定义好的源结构、目标结构、转换规则,都挂在 Object 下面。比如我在做物料主数据导入时,Project 叫ZMM_IMPORT,Subproject 叫IDES,Object 叫MATERIAL_MASTER,这个三层命名让我后续找记录像翻文件夹一样顺手。

分步工作台在 IDES 4.71 里显示了 20 个步骤,但在 ECC 6.0 里标准只有 14 个。多出来的 6 个步骤主要是项目管理辅助项,实际做数据迁移用不上。操作上可以直接把最后 6 个菜单项取消勾选,让界面只剩标准的 14 步,这个动作完成后菜单会明显清爽很多。

3.2 数据文件定义与源、目标结构:用一棵树描述外部数据

无论做客户主数据还是物料主数据,第一步永远是准备源数据。LSMW 支持很多数据源类型:前台文件、后台文件、IDocs、表、功能模块、Batch Input 等等。最常用的就是前台文件,也就是本地 PC 上的文本或 Excel 导出文件。

文件定义要声明格式:分隔符是逗号还是制表符、文件是否含表头、字段顺序是什么、文本字段的定界符和长度。常见做法是先用一个最小数据集跑通格式,再上全量。我一般会先准备一个测试用的中间文件,比如:

物料号,物料描述,物料组,单位 M-001,六角螺栓,GRP01,PC M-002,防松螺母,GRP01,PC M-003,法兰垫片,GRP02,PC

然后定义源结构。源结构是要手动建的:给这个结构起个名字,比如SRC_HEADER,把每一列作为字段加进去。字段名不一定和 SAP 目标字段一致,但类型和长度尽量对齐。定义好源结构之后,LSMW 的读取逻辑就从文件里的字节流变成了一张二维表,每一列有名字、有语义。这一步是所有后续转换的入口,源结构建得草率,后面每一步都会被牵制。

目标结构则是 SAP 侧的结构,是系统预设的,不需要从头建,只需要通过“分配”的方式把源字段和目标字段对应起来。例如源结构里的“物料号”字段,分配给目标结构里的MATNR;“物料描述”分配给MAKTX;“单位”分配给MEINS。分配完成后,LSMW 才能知道哪一列数据填到哪一屏的哪个字段。

3.3 转换规则与预转换:在真正动手前先看一次数据草稿

转换规则是 LSMW 里最容易出幺蛾子的环节。常见规则有四类:直接字段映射、固定值常量、转译规则(比如把源系统的日期格式19980501转成 SAP 内部日期)、以及用 ABAP 表达式做拼接和查表。

举个例子,我给这个物料导入项目定的规则里,有一项是把源系统里的旧物料组代码映射到 SAP 物料组:如果源是GRP01,目标填001,走固定值映射;如果源是GRP02,目标填002。规则可以在“转换规则”步骤里逐字段维护,也可以从 Excel 里复制一大批映射关系快速贴进去。

完成规则定义后,进入“读取数据”步骤。这一阶段 LSMW 跑的只是“预转换”,意思是读入源文件,按规则生成 SAP 屏幕上的字段值,但并不真正写入数据库。所以这步多跑几次不产生业务数据风险,可以当成沙盘推演来用。运行完毕后查看读取结果,逐行确认有没有红色错误标记。常见错误包括源文件字段长度不够、日期格式无法解析、必填字段没有映射到值。双击错误行可以直接下钻到字段级,看到具体是哪个字段映射出了偏差。

预转换通过后就进入“实际转换”。执行方式可以在批量输入、会话中处理、流式处理等选项里选。转换完去查 SAP 的 Batch Input Session 日志,看每一条数据落库的结果,是成功了还是带预警。这里强烈提示:转换之前先确认当前是测试 Client,很多老手翻车就是把测试数据写进了正式环境。

3.4 IDES 4.71 的 20 步与 ECC 6.0 14 步的对齐

如果你手里既有 IDES 4.71 的文档又在 ECC 6.0 上实操,会发现菜单步骤对不上。ECC 6.0 把原来 20 步压缩成了 14 步,多出来的 6 步主要是辅助性功能,包括对象概览、用户菜单维护、转换前检查等。两者实际要做的核心链路完全一致:

步骤说明IDES 4.71ECC 6.0
定义对象、属性步骤 1-3步骤 1
数据源定义、文件声明步骤 4-6步骤 2-3
源结构、源字段步骤 7-9步骤 4-5
目标结构、关系步骤 10-12步骤 6
转换规则步骤 13步骤 7
读取数据并转换步骤 14-16步骤 8-10
分步执行与建模步骤 17-20步骤 11-14

对照这张表,你在任何一个版本上看到的术语都能对应过去。遇到文档里写了 20 步的项目资料,直接按表映射到当前版本的编号上就行,核心动作没变,只是版本把菜单重新归了类。

4. BDC 与 LSMW 的分工边界:选哪个,看数据类型和容错要求

4.1 原理差异:脚本回放是“模仿人”,数据映射是“翻译数据”

BDC 录制的本质是记录用户在 SAP GUI 里的操作序列,包括每个屏幕的字段名、光标位置、功能码,回放时它像个哑巴演员一样把这些动作再演一遍。它不关心你的源数据在哪、长什么样,只关心脚本里字段的值。这也决定了它的脆弱性:只要目标屏幕布局变化、字段顺序调整、或者出现了录屏时没出现过的弹窗,脚本就断了。

LSMW 不是录像机,它更像一个定义好的转换引擎。你告诉它“源文件里第一列是物料号,对应 SAP 的 MATNR,转换规则是直接复制”,它按这个规则一对一、一批对一批地生成 SAP 屏幕数据。LSMW 不依赖 GUI 操作路径,而是直接构造事务所需字段集合,所以屏幕布局变化对它的影响远小于 BDC。这也是为什么大批量数据迁移项目几乎都用 LSMW 而不是 SHDB。

4.2 典型选型决策表

日常工作中判断该用哪个,我基本按下面这张表对号入座:

判断维度BDC(SHDB)LSMW
操作对象单个事务码,重复操作主数据/业务对象,结构化迁移
数据来源不需要源文件,只替换脚本字段需要源文件、源结构定义
字段映射手工改脚本或邮件合并可视化字段映射
转换规则无内建转换能力日期、常量、查表、转换函数
批量规模十几次到几十次几千、几万条都是常态
容错能力差,一屏出错全部中断好,单条错误不阻塞整体
调试工具处理记录列表预转换、分步执行、逐行看错误

绝大多数批量操作请求,先用这张表过一遍就能定下主线。如果对方描述的场景是“每个月初给几十个公司代码开账期”,这是典型 BDC;如果对方说“从旧 ERP 搬物料和库存过来”,那是 LSMW 的主场。

4.3 混用模式:复杂流程拆成 BDC + LSMW 两段走

真实项目里,两种工具常常不是二选一,而是前后搭配。我做过一个客户主数据迁移:客户基础档案从旧系统整理好后,用 LSMW 导入到 SAP,能够利用它的字段映射和查重机制,把地址、税号、银行信息逐项验证好;但迁移完成后要为每个新客户在销售区域里批量激活视图,激活操作涉及的销售数据条件很琐碎,单独建 LSMW 项目反而重,这时候直接用 SHDB 录一遍 VX01 的激活路径,用邮件合并批量更新客户编码值,跑一遍后台执行就完事。两段各有其主人,衔接处只要保证客户编码值在两边的脚本中一致即可。

5. SHDB 与 LSMW 的避坑现场:4 个我踩过的批量处理坑

5.1 录屏时鼠标多点了两下,脚本直接在警告界面中断

现象:录完 MMPV 后,用导出的脚本执行新月份账期,第一次跑还能过去,第二次跑到警告界面就直接停住,回放日志里显示NO_SCREEN_ENDED。

原因:录像时遇到系统警告,我下意识用鼠标点了警告框的确认按钮,而原脚本里记录的是回车键。运行环境一旦变成后台执行,警告框出现时没有用户介入,脚本里记录的鼠标动作找不到对应屏幕位置,流程就断了。

解决:重新录了一遍,整个过程中所有弹窗、警告一律用回车键跳过,并且全程只使用键盘输入和回车确认。录完后在脚本里检查每个BDC_OKCODE之间的字段行,确认没有多余的光标移动记录。从那以后我录屏前会在桌面贴张纸:只准用 Tab 和 Enter。

5.2 邮件合并生成的脚本,第一段执行总报错

现象:按邮件合并生成的MMPV_BATH.txt导入 SHDB 后,第一段脚本跑到“处理记录”列表显示红叉,后面的 19 段全是好的。

原因:合并数据源时,第一行的数据不是从 1998 年 5 月开始的,而是沿用了 Excel 模板里的表头行,合并功能把表头也当字段值填进去了,导致第一段的月份被塞进了非数字文本。SHDB 在执行时把 19 段里唯一带文本的一段筛了出来。

解决:邮件合并的数据源做成只有两列的纯数据区,不保留表头。生成完批处理文件后,用文本编辑器搜索年份字段的左边界,确认第一行就是实际业务数据,而不是表头残留。

5.3 LSMW 读取源文件后,所有中文描述字段全部变成乱码

现象:源文件是 Excel 另存的 CSV,LSMW 读取后的“物料描述”列在预转换里显示乱码,英文倒是正常,中文全变成问号。

原因:Excel 另存的 CSV 默认是 ANSI 编码,LSMW 的前台文件解析按 UTF-8 读取,中文被转码失败。

解决:把 CSV 另存为 UTF-8 编码的文件,重新定义文件格式时,在字段定义里把“代码页”显式指定为 UTF-8。如果是从其他系统导出的数据,也要先确认源文件的编码声明,别默认按本地代码页处理。

5.4 前台方式执行几百条 LSMW 转换,把用户会话撑爆了

现象:一次库存初始化导入,几千条物料库存,选了前台模式执行转换,跑到一半系统提示Batch input session overflow,后面数据全部丢弃。

原因:前台模式会为每条数据生成一个 Batch Input Session,打开会话数量有硬限制;一条数据跨多个屏幕时更占会话资源,跑到几百条就触顶了。

解决:改成后台模式或者直接用“流式处理”方式,同时在转换之前把会话切换为后台处理。执行完毕后再去 SM35 里用表格方式查看会话结果,逐个确认。这个坑让我从此定了一条规矩:超过三百条的转换一律不上前台跑。

6. 把 LSMW 当调试器用:预转换和单步执行才是真正的排错加速器

LSMW 在排错场景里有个很顺手但很少被提到用法:拿它当调试器,而不是当一次性导入按钮。

常规操作是定义好规则,点执行,然后去看结果列表,红了就查、绿了就过。这样当然能跑完,但一旦遇到成片红色,逐行点开看字段实在太慢。更好的做法是利用 LSMW 的“分步执行”能力,把流程拆到最小颗粒度。在 ECC 6.0 下,分步执行界面可以单独跑“读取数据”和“转换字段”,并且每一步都能在一个界面里同时看到源文件原始值、转换后的屏幕字段值、以及系统反馈的错误信息。我会在这个界面里只执行一条测试数据,比如那个物料号为 M-001 的记录,让它一步一步走完,每走一步看一次字段值是否和预期一致,看到不对的当场修正规则,再重新读文件、重新走这一个条目。

这是 LSMW 比 SHDB 强太多的地方:SHDB 脚本的执行结果像黑匣子,错了只能看处理记录列表,而 LSMW 的转换规则定义和预转换过程本身就是一个可放大、可回放的现场。我在模拟项目X里做过一次一万五千条物料主数据的导入,当时有三类物料的数据每次都带警告,我没有全量重跑,而是挑出每一类的一条样本,在分步执行界面里逐字段核对,最后发现是国别税分类字段的映射规则漏了条件分支。修正规则后,全量预转换一把净过。从那以后,我每次 LSMW 全量转换前都强制先跑一套三到五条的抽样验证,再决定是否放行全量,SHDB 批量脚本执行前也强制检查首尾两段脚本内容的一致性。希望这个习惯也能帮到你。

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

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

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

立即咨询