简介:这是一份面向SAP实施顾问与后勤数据迁移用户的LSMW批量导入操作手册,全面讲解如何利用LSMW工具将外部系统数据导入SAP。压缩包仅3.54MB,包含1个PDF文档,适合在项目现场随时查阅,目前已有752人学习下载。手册按实操流程拆解14个关键步骤,从设置项目名称、定义对象属性与创建录屏,到定义源结构、字段映射与转换关系,再到指定导入文件、读取/转换数据并创建批处理会话,形成完整可落地的导入链路。同时补充了录屏后不点Default All可能导致失败的细节提醒、自动映射时的接受操作技巧、Excel数据整理时对逗号/空格/制表符的避坑说明,以及分隔符选错引发转换报错的处理思路,能帮助初学者快速上手,也能为有经验者提供标准化操作参照。
1. LSMW批量导入是什么:先看完这几个场景再决定要不要碰它
第一次碰 SAP LSMW 批量导入的人,通常栽在同一件事上:录屏录得飞快,结果跑完一万条只成功一半。LSMW 是 SAP Legacy System Migration Workbench 的缩写,ECC 和 S/4 里都自带,不需要额外许可。它解决的是把 Excel、CSV、SAP 旧表里的数据,按标准事务代码的屏幕顺序回填进去,适合物料、客户、供应商、总账凭证、成本中心这类结构化主数据和业务数据。这篇笔记按一张总账凭证从模板到落库的全过程,把 LS M W 批导的路走一遍,重点回答四个问题:录屏前要做什么、项目怎么建、会话怎么跑、坑在哪。适合负责数据迁移的财务顾问、MM 顾问和运维工程师看,也适合刚接手批导任务的 ABAP 新人顺着步骤走一遍。
2. 做LSMW批量导入前的三板斧:录屏路径选择、数据模板清洗与SHDB录制参数
2.1 选录屏还是选BAPI:LSMW批导的两种路径怎么挑
LSMW 本身只是一套框架,真正干活的是底层的数据传输机制。创建对象的时候,系统会让你选对象类型,常见两类:一类是录屏回放(Batch Input Recording,也就是常说的 BDC),另一类是 BAPI 调用。选哪个,直接决定了后面录屏和映射的工作量。
我的判断标准很简单:先查这个事务代码有没有公开 BAPI。比如物料主数据有 BAPI_MATERIAL_SAVEDATA,成本中心有 BAPI_COSTCENTER_CREATEMULTIPLE,银行主数据有 BAPI_BANK_CREATE,这些能直接当 LSMW 对象类型选的,就别走录屏。BAPI 路径的字段语义清楚,报错信息也比录屏友好,字段映射时直接对着 BAPI 参数填就行。
反过来,FICO 里的一堆转账、清账、凭证过账事务,很多没有像样的 BAPI,或者 BAPI 的字段覆盖不全。这时录屏回放反而是更可靠的路子。录屏回放的本质是把用户在 SAP GUI 上的操作记录下来,生成一串包含程序名、屏幕号、字段名、字段值和 OK_CODE 的指令序列,LSMW 在后台按这段序列把数据填进标准屏幕。它不要求你会 ABAP,唯一的要求是屏幕字段和源数据字段能对上。
一个容易踩的误区是:很多人以为录屏比 BAPI 差。实际上对于凭证类批量导入,录屏能完整覆盖界面上的所有字段,包括 BAPI 没暴露的字段,比如某些行项目增强字段、状态字段。SAP BDC 组件在 ECC 到 S/4 一路都能跑,我这些年交付的批导项目里,至少一半走的是录屏路径。决策顺序是:有 BAPI 且字段够用 → 用 BAPI;没有 BAPI 或字段不全 → 用录屏;两者都拿不准 → 录屏兜底,因为录屏的排查链路更直观。
2.2 用SHDB录事务代码:录屏的动作规范和五个必盯的录制细节
录屏工具不是 LSMW 里的,而是事务代码 SHDB。全称 Batch Input Recorder,打开后界面很简单:新建录制、输入名字、输入事务代码,然后你就像正常操作一样把界面走一遍,最后保存退出,这段操作就存下来了。
先说命名规范。录制名建议按“Z_用途_流水号”来,例如 Z_FB50_001,别用中文名,也别起 TEST1 这样的名字。批导项目一旦多了,录制文件就是你的资产,命名随意后面根本找不到对应关系。录完第一版后,在 SHDB 里双击录制名可以回放、查看、删除,也可以导出/导入录制文件,这个功能后面排错和迁移系统时特别有用。
录屏过程的动作规范是我每次培训新人必强调的部分:
- 字段之间用 Tab 切换,不要用鼠标点选。鼠标点选虽然也能录进去,但会让光标定位和字段顺序不可控。
- 尽量少按 Enter。Enter 在 BDC 里对应 OK_CODE 为 /00的动作,它会触发校验、弹窗、屏幕切换。录制时每按一次 Enter,就要在源字段映射阶段给这个动作准备数据或规则,否则回放时会卡在中间屏幕。
- 每个可输入字段都要录一遍,哪怕源数据里没有这个字段。比如 FB50 的“参考”字段、行项目里的“文本”,你在录制时先填个占位值进去,后面用常量或映射规则填充,这样回放时才不会漏字段导致屏幕布局漂移。
- 保存动作要明确。FB50 这类凭证事务代码,保存的 OK_CODE 是 /11。录制时最后一步一定是从“保存”按钮退出,不要用 Exit 或 Cancel,否则回放会生成未保存的凭证。
- 录完不要急着关,先在 SHDB 里点“测试”或模拟回放一遍,确认这条录制能静静走完整个屏幕流。
SHDB 录制文件实际是一串 BDC 指令,底层长这样:
* SHDB 录制生成的 BDC 数据块(查看方式:SHDB → 双击录制名 → 双击某行) * PROGRAM:当前所在程序名 * DYNPRO:当前屏幕号 * BDC_OKCODE:本次动作的功能码,/00 是回车,/11 是保存 * BDC_CURSOR:光标所在字段 PROGRAM = 'SAPMF05A' DYNPRO = '0100' FIELDS: BDC_OKCODE = 'MODA' BDC_CURSOR = 'BKPF-BKTXT' BKPF-BUKRS = '1000' BKPF-BUDAT = '20250617' BKPF-BLART = 'SA' BKPF-BKTXT = '批量导入测试'这段结构里最关键的是 BDC_OKCODE 和 BDC_CURSOR。OKCODE 决定当前屏幕执行什么动作,是回车还是保存还是 F4 帮助,录屏回放几乎所有异常都出在 OKCODE 上。CURSOR 决定光标落在哪个字段,不填多数情况下不影响,但如果屏幕有动态字段显示,光标位置错会导致界面重排。后面的字段列表按屏幕顺序排列,顺序错了数据就会填到别的框里。回放时如果报“字段不存在”或“屏幕布局异常”,第一个怀疑对象就是录制时按了多余的回车,导致多出来一段屏幕跳转指令。
2.3 数据模板与电子表格格式:洗好源数据再进LSMW
录屏录好了,接下来是数据侧的准备。LSMW 支持的数据来源很多,前台文件、服务器文件、SAP 表、数据库表都有,但项目里最常用的是 Excel 文件。LSMW 的一个坑在这里埋着:它读 Excel 依赖的是 ODBC 驱动和系统中配置的电子表格格式,不是直接读 .xlsx 文件那么简单。版本匹配不上、驱动缺失,后面读数据时会报一些看不明白的错误。
我在实践里的做法是:项目根目录放一份模板 Excel,第一行是字段名,以下每一行为一条数据;对于表头表项结构的对象,再准备一个带批次的平铺结构。比如 FB50 凭证,抬头信息在每一行重复出现,行项目字段跟在后面,行数不足的补空。这样一份模板老用户看着也直观,不用管 LSMW 内部结构。
| 公司代码 | 凭证日期 | 过账日期 | 凭证类型 | 抬头文本 | 行项目文本 | 科目 | 金额 | 记账码 |
|---|---|---|---|---|---|---|---|---|
| 1000 | 20250617 | 20250617 | SA | 广告费 | 6月广告费 | 600010 | 5600.00 | 40 |
| 1000 | 20250617 | 20250617 | SA | 广告费 | 应付客户A | 200010 | 5600.00 | 50 |
模板里有一个细节:金额和日期列必须设成文本格式,或者统一成不含千分位的数字。Excel 一旦把日期转成“2025/6/17”、把金额显示成“5,600.00”,LSMW 读到的是日期序列号和带千分位的字符串,转换阶段要么报错要么落库时金额翻一倍。我一般直接在 Excel 单元格格式里锁定文本,数据录入时强制不带千分位。
源数据在进入 LSMW 之前还要过一遍清洗:科目号和客户号是否有前导零,文本字段是否有多余空格,凭证日期和过账日期跨月时过账期间是否正确。这些在 Excel 里用一两列公式先算好,不要指望 LSMW 的转换规则覆盖所有脏数据。LSMW 的转换规则处理固定值、去零、拼接没问题,但清洗逻辑复杂时,规则树会变得难以维护,不如源头先洗干净。
3. 从零建LSMW项目:源字段定义、结构对应与转换规则的完整四步
3.1 建项目和对象:把录屏挂进LSMW的主体流程
进入事务代码 LSMW,第一屏会看到一个项目树。项目下面的层级是:项目 → 子项目 → 对象。这个层级不是摆设,建议按模块和业务场景分:比如项目叫 ZDATA_MIG,子项目按模块分 MM、FI、SD,对象按具体的导入场景命名,比如 FI_GL_POST、FI_AP_INVOICE。
建完对象双击进去,会看到执行流程树,这就是接下来要一步步走完的任务清单。流程按顺序执行,缺一步后面的菜单就灰着。我按常用顺序整理如下:
| 步骤 | 作用 | 对应准备工作 |
|---|---|---|
| 维护对象属性 | 指定对象类型、文件类型 | 确定录屏还是 BAPI |
| 维护源结构 | 定义数据层级 | 决定表头表项 |
| 维护源字段 | 定义每个字段 | 对应 Excel 列 |
| 维护结构关系 | 关联源结构 | 平铺数据可跳过 |
| 维护字段映射 | 屏幕字段和源字段对应 | 录屏回放的核心 |
| 维护固定值/转换规则 | 补充常量、格式转换 | 前导零、固定记账码 |
| 读取数据 | 从 Excel/SAP 表加载 | 数据文件就位 |
| 显示读取数据 | 检查读入内容 | 排查列错位 |
| 转换数据 | 把源数据转为 BDC 指令 | 此处报错最多 |
| 创建批导会话 | 生成批导队列 | 按批次拆分 |
| 处理批导会话 | 前台/后台执行 | 落入 SAP 系统 |
前面 1-6 步是配置,7-9 步是试跑,10-11 步是正式执行。这套流程第一次做的人容易犯的错是:配置完直接进第 9 步转换,报错后不知道回头查哪,其实查数据在 8、9 两步的显示界面上就能定位。
3.2 定义源结构和源字段:表头表项怎么设,三个好用的转换规则
源结构描述的是数据在 LSMW 里按什么层级组织。凭证类数据一般设两个源结构:抬头(HEADER)和行项目(ITEM),二者的关系是 1:N。如果数据只有一层,比如物料主数据的基本视图,就设一个源结构,运行级别选“1”表示单层。这一步的界面长这样:
* 源结构定义界面 * 源结构:抬头表结构 源结构 : ZFI_HEADER 描述 : 凭证抬头 运行级别 : 1 * 源结构:行项目表结构(挂在抬头下面) 源结构 : ZFI_ITEM 描述 : 凭证行项目 运行级别 : 2这里的运行级别很关键。1 级是抬头层,2 级挂在 1 级下面,表示每个抬头下面有多条行项目。源数据读取时,LSMW 按这个层级关系来回填 BDC 指令,抬头字段只在第一条行项目里带一次,行项目字段反复循环。如果平铺结构只设一个源结构,那抬头字段和行项目字段就在同一层,转换时每行都会重复填一次抬头字段,屏幕回放会多出大量冗余赋值,不影响结果但性能差、日志长。
源字段就是 Excel 列名的映射。把 Excel 每一列和源结构里的字段名一一注册进去,字段类型选字符(CHAR)最多,日期字段选 DATS,数额字段选 CURR。设置错了类型,读取数据阶段不会直接报错,但转换时会出现一堆“数值格式无效”。这一步我最常被问的是:Excel 里的表头要不要和这里完全一致。答案是完全一致,字段名不要带括号、空格、单位,一律英文字母加下划线。
转换规则里有三个高频用的规则,我在字段映射前先把它们设好:
| 规则 | 写法 | 用途 |
|---|---|---|
| 固定常量 | CONSTANT | 把某个屏幕字段固定填一个值,比如凭证类型 SA |
| 直接赋值 | = 源字段 | 默认映射,源字段直接填到屏幕字段 |
| 前导零 | 规则里设 X | 科目、客户、供应商号缺零时补足 |
前导零那条最容易漏。Excel 里科目号写 600010,但 SAP 标准科目表里存的是 0000600010,如果映射规则里不补零,回放时屏幕会报“科目 600010 不存在”。补零不是 LSMW 界面里一个勾选按钮,而是在转换规则里对目标字段设置一个带前导零规则的转换,熟练的人一眼就知道哪里补。
3.3 字段映射:屏幕字段和源字段一一对应,别漏记账码和金额
字段映射是 LSMW 配置里最直观也最考验耐心的一步。界面左边是源结构树和源字段列表,右边是录屏里出现的程序名、屏幕号和字段列表。你要做的就是把右侧屏幕字段和左侧源字段拉到对应关系里,拉完之后这一步还能补固定值。
以 FB50 为例,右侧屏幕字段一堆,我每次都先勾这几个,防止漏:
- BKPF-BUKRS 公司代码
- BKPF-BUDAT 凭证日期
- BKPF-BLART 凭证类型
- BKPF-BKTXT 抬头文本
- BSEG-HKONT 科目
- BSEG-WRBTR 金额
- BSEG-BSCHL 记账码
- BSEG-SGTXT 行项目文本
这里最容易翻车的是“记账码”和“金额”这两个字段。很多人录屏时录到了,但映射时只顾着填科目和金额,记账码漏了。回放时屏幕默认带出来的记账码是 40,如果源数据里全是 40 开头还好,一旦混了 50(贷方)、31(客户发票)这种,后半批数据全部过不了行项目校验。所以记账码不要用默认值,要么映射源字段,要么用固定值拆分两种凭证类型分别建对象。
金额的正负号也要在映射阶段处理。很多业务数据里借方正数贷方负数,但 FB50 屏幕只认记账码不认正负号,负号传输进去会报“金额必须大于零”或者反过来把金额折半。我的建议是源数据里金额全部存正数,正负通过记账码区分,模板生成时就处理掉,不要在 LSMW 转换规则里做乘负一的操作。
映射完成后,一定要点一次界面上的“检查”按钮。LSMW 会提示哪些必需字段没有被映射。这一步拦截的问题,比后面转换阶段报的错容易理解得多。但注意:检查通过不代表万事大吉,它只检查映射关系存在性,不检查值是否合法,值层面的问题只能在转换和试跑里暴露。
3.4 源数据清洗脚本:把Excel模板拆成LSMW能吃的表头和表项
前面说了模板是平铺的,但 LSMW 源结构是分层的,需要把平铺数据拆成抬头表和行项目表。这一步我用 Python 脚本做,干净可重复。脚本放在项目模板同目录下,每次拿到新月份数据跑一遍即可。
import pandas as pd # 读取模板:抬头列和行项目列都在同一个 sheet 里 raw = pd.read_excel("FB50_模板.xlsx", dtype=str) # 抬头字段:取前 6 列,去掉行项目相关列 header_cols = ["BUKRS", "BUDAT", "BLART", "BKTXT"] header = raw[header_cols].drop_duplicates().reset_index(drop=True) header.insert(0, "批次", range(1, len(header) + 1)) # 行项目字段:每条抬头对应一行或多行 item_cols = ["BUKRS", "BUDAT", "BKTXT", "SGTXT", "HKONT", "WRBTR", "BSCHL"] item = raw[item_cols].copy() item.insert(0, "批次", 0) # 行项目按抬头字段合并批次号 merge_keys = ["BUKRS", "BUDAT", "BKTXT"] batch_map = header.reset_index().set_index(merge_keys)["批次"] item["批次"] = item.set_index(merge_keys).index.map(batch_map) header.to_csv("FBN_HEADER.csv", index=False, encoding="utf-8-sig") item.to_csv("FBN_ITEM.csv", index=False, encoding="utf-8-sig")脚本逻辑是先把抬头去重,再给每一条抬头编批次号,最后把行项目挂到对应批次下。批次号是 LSMW 分层数据读取的关键,抬头表和行项目表靠批次号关联。实际使用时把列名替换成你的模板列名就行,字段名要严格等于 LSMW 里源字段定义的名称,否则读取阶段对不上。
这一段脚本的价值在于:模板里数据再乱,只要抬头键值组合能唯一定位,生成的两个 CSV 就能稳定喂给 LSMW。我见过不少人手工在 Excel 里拆表头表项,拆到两三千条就眼花了,批次对错位、抬头落到别的凭证上,这种低级错误用脚本一次根治。
4. 创建并处理批导会话:前台调式、后台跑批与日志核对
4.1 创建批导会话:先跑10条样本再决定要不要全量
配置做完了,数据也读取转换完了,接下来到第 10 步“创建批导会话”。这一步把转换好的数据生成一个批导会话队列,后面 SM35 里处理的就是这个队列。
在点创建之前,我的习惯是先把源数据文件截断成 10 条,走完整个读取和转换流程,再创建批导会话,用前台模式跑一遍。“截断”不是删,是新建一个叫 TEST 的源结构对应当前模板的子集,或者直接复制 Excel 前 10 行另存一份。10 条数据的批次信息足够覆盖一个抬头挂多个行项目的场景,也能验证两条抬头之间的切换逻辑。
创建批导会话界面里有个必填参数:会话名称。名称里带上日期和用途,比如 ZFB50_20250617_V1。这里的版本号 V1 是我的习惯,第一次跑 V1,有问题改完配置后跑 V2,这样 SM35 会话列表里按名称排序,永远能找到最新版本,出问题也能翻出旧版本对比数据转换结果。
会话大小也要关心。LSMW 里一次创建的会话数据量过大,处理的时候内存占用高、卡死、中途断掉都是常事。我一般控制在一个会话两三千条以内,超过的就拆批。拆批的逻辑在创建前数据源就规划好,不要在 SM35 里把一个大会话拆,那个过程反而麻烦。
4.2 处理批导会话:SM35前台/后台的取舍与重跑逻辑
创建完会话,去事务代码 SM35 就能看到它。SM35 是批导会话处理的总入口,界面上有会话名称、创建日期、状态、条目数这些信息。选中会话,点“处理”按钮,弹出的选项框决定执行方式:
| 选项 | 含义 | 适用场景 |
|---|---|---|
| 前台处理 | 逐屏回放,能看到每一条数据的屏幕状态 | 10 条以内排错 |
| 后台处理 | 直接跑,不弹屏幕 | 数据量大的正式批导 |
| 仅显示错误 | 只回放有问题的数据 | 大批量第一轮排错 |
后台处理时可以勾选“错误时取消”“错误时继续”“仅处理错误数据”这些分支动作。我的做法是:第一轮用“仅显示错误”模式把错误数据挑出来看,第二轮把正确数据用后台处理跑掉,第三轮针对错误数据修正后单独跑一个会话。这样循环,错误数据不会反复占用批导队列。
正式后台跑之前,一定要确认会话状态是“已创建”而不是“正在处理”。有些新手在 SM35 里重复点处理同一个会话,会报会话被锁或者重复过账。LSMW 生成的会话处理完就没了,如果处理过程中系统崩了,SM35 里会话状态会是“错误”,这时需要把会话标记为删除重建,而不是硬着头皮再点一次处理。
还有一个容易被忽略的点:批导会话处理时,后台作业是立刻排到 SAP 后台的。如果有多个会话同时跑,尤其它们操作的是同一类主数据,会出现数据库锁等待。最常见的就是物料主数据批导,两个会话同时创建同一个物料号,后一个等前一个的表锁等到超时。所以大批量任务,要么分批串行跑,要么不同会话错开时间跑,别一起压在服务器上。
4.3 日志核对:BDC错误行、事务码和底表的三种验证方式
会话跑完,日志分两处:一处是 SM35 会话列表的日志按钮,另一处是 LSMW 流程树第 11 步的执行日志。SM35 里的日志按会话记录,执行日志按数据行记录,两边都能定位到具体是哪条源数据出了问题。
SM35 日志里最常见的报错是“字段值无效”“金额格式不正确”“科目不存在”。双击错误行会展开到具体的 BDC 指令,能看到是哪个字段报错。但这里有一个坑:SM35 日志显示的是 BDC 指令层面的错,不是业务层面的错。比如凭证过账成功但抬头文本被截断、日期被系统自动修正,SM35 日志里显示成功,实际数据已经变了样。这种业务层面的错,SM35 看不出来,只能查底表。
查底表我用 SE16N 直接翻,比看日志直观得多。凭证类数据查 BKPF(凭证抬头)和 BSEG(凭证行项目),物料主数据查 MARA(基本数据)和 MARC(工厂视图)。SE16N 里按公司代码、过账日期过滤,把当天批导产生的凭证导出来,跟源文件逐条对,核对科目、金额、日期、文本四个关键字段。
日志核对这一步是决定批导项目能不能交付的关键。我在项目上的要求是:无论 LSMW 日志多干净,都必须做底表抽验。抽验比例一般 5%,随机抽样,日期选月初月末跨过账期间的,最容易暴露出会计期间的坑。底表抽验通过,批导会话这一步才算真正收口。
5. LSMW批导五个高频坑:现象、原因与处理办法
坑一:回放时报“字段 BKPF-WAERS 不存在”
现象:后台处理会话,SM35 日志里大量报错,全是指向凭证货币字段。原因:录制时你在凭证抬头界面手工输过一次货币,但这个字段在屏幕上是可选的,后来系统里默认货币已经带出,录屏回放时字段被系统隐藏或只读,导致回放找不到这个输入框。解决:录制时不要手工输入系统自动带出的字段。货币、公司代码、过账期间这类自动带出值,录制时直接跳过,回放时由系统默认值填充,顶多在映射阶段用固定值兜底。
坑二:前导零导致物料号报错
现象:MM 物料主数据批导,源数据 Excel 里物料号是 1000,系统里实际是 000000000000001000,回放时屏幕报“物料 1000 不存在”。原因:源数据没有补足 18 位前导零,BDC 在某层屏幕上做存在性检查直接失败。解决:用转换规则对映射字段做前导零补齐。做法是维护转换规则时选“前导零”处理方式,让系统自动按字段定义长度补零,源文件里保持不带零的原始值,规则层统一补全。
坑三:Excel 日期被自动转成序列号
现象:读取数据阶段正常,转换阶段大量报日期格式错误,报错指向 BUDAT 字段。原因:Excel 里日期列是真正的日期格式,而不是文本,LSMW 通过 ODBC 读到时拿到的是 45890 这样的数值序列号。解决:模板里日期列从源头锁定文本格式,或者数据录入时统一用 YYYYMMDD 格式字符串。已经变成序列号的,在 Excel 里用 TEXT 函数转回文本再另存一份,不要在 LSMW 里做格式修复,那个过程又慢又容易漏。
坑四:批导会话后台处理说完成了,凭证却没生成
现象:SM35 会话状态显示“已完成”,但用 SE16N 查 BKPF 找不到任何新凭证。原因:处理会话时勾了“测试运行”或者在 LSMW 对象的录屏里录制时勾选了测试模式。测试运行会在最后一步模拟过账但不写表,日志看起来全绿,实际一条数据没落库。解决:到 SM35 里看会话处理详情的模式列,确认是“显示”还是“更新”,更新模式才会真正写表。LSMW 录屏录制阶段也要确认最后保存动作是真正的保存事务,而不是测试保存。
坑五:记账码和金额正负不匹配导致行项目一半失败
现象:一批凭证只有贷方行全部失败,借方行全成功。原因:源文件里金额带负号表示贷方,而屏幕字段把负号当非法字符拒绝。解决:模板生成时规范金额永远存正数,正负关系由记账码表达,40 记借方、50 记贷方。如果源数据是 ERP 导出的余额,导出时先做一层正负转换,把金额取绝对值并生成对应记账码,再进 LSMW 模板。这个规则要写进模板使用说明里,不然每个月的财务导数据都会踩一次。
6. 让LSMW批导更省事的三个进阶习惯
第一个习惯:录屏文件也做版本管理。SHDB 录完的录制文件,可以导出来存一份。系统刷新、迁移到新环境、S/4 升级,录屏文件大多还能用,但录过屏的人都知道,升级后屏幕布局一旦变,回放就卡屏。我现在的做法是每个录制文件导出一份命名带日期和版本的文件放在项目目录,升级后先拿旧录制文件回放一次,回放正常就用,回放异常就基于旧文件重新录一版,比从零录快很多。
第二个习惯:大批量批导用 SM36 排作业,不用人工盯。数据量上十万的导入,SM35 里挂着会话等它跑完,中间出个数据库锁能等半小时。把会话交给 SM36 后台作业,频率设成每 15 分钟轮询一次,错误自动记录。处理完后系统会自动跑一遍检查,把结果发到 SP01 输出列表里。这个习惯在月度大批量导入时特别好用,晚上挂上,第二天早上看输出报告收结果。
第三个习惯:验证流程固定成三段式。第一段看日志,SM35 错误率降到零以下才算过;第二段看底表,SE16N 里按当天日期查 BKPF/BSEG 的凭证数和金额合计,跟源文件总数对上;第三段看业务报表,用事务代码跑一遍总账科目余额表或者物料价值串起底账,确认数据在业务侧也是通的。这里有一段查凭证的 SQL 可以做参考:
SELECT BUKRS, BELNR, GJAHR, BLART, BUDAT FROM BKPF WHERE BUKRS = '1000' AND BUDAT = '20250617' ORDER BY BELNR; SELECT BUKRS, BELNR, GJAHR, POSNR, HKONT, WRBTR, BSCHL FROM BSEG WHERE BUKRS = '1000' AND BUDAT = '20250617' AND HKONT IN ('600010', '200010') ORDER BY BELNR, POSNR;三段式验证每做一次,批导出问题的定位时间就从小时级降到分钟级。我个人的习惯是,正式批导前一定留好“后悔药”:源文件备份、生成的 CSV 备份、批导会话名称带版本号,必要时还能靠这些在几小时内重建会话重新跑。这个备份习惯在一次公司迁移项目里救过我,源文件被人覆盖了,靠模板目录下的历史 CSV 在一小时内重新生成了所有文件。做批导,真正值钱的从来不是点击的那一下,而是你留下的完整链路记录。希望帮到你。
本文还有配套的精品资源,点击获取