简介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_IMPORTSubproject 叫IDESObject 叫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 典型选型决策表日常工作中判断该用哪个我基本按下面这张表对号入座判断维度BDCSHDBLSMW操作对象单个事务码重复操作主数据/业务对象结构化迁移数据来源不需要源文件只替换脚本字段需要源文件、源结构定义字段映射手工改脚本或邮件合并可视化字段映射转换规则无内建转换能力日期、常量、查表、转换函数批量规模十几次到几十次几千、几万条都是常态容错能力差一屏出错全部中断好单条错误不阻塞整体调试工具处理记录列表预转换、分步执行、逐行看错误绝大多数批量操作请求先用这张表过一遍就能定下主线。如果对方描述的场景是“每个月初给几十个公司代码开账期”这是典型 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 另存的 CSVLSMW 读取后的“物料描述”列在预转换里显示乱码英文倒是正常中文全变成问号。原因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 批量脚本执行前也强制检查首尾两段脚本内容的一致性。希望这个习惯也能帮到你。本文还有配套的精品资源点击获取