1. 先搞清楚ECC到底指什么
如果你搜“ECC”搜到我这篇东西,大概率已经发现情况不对了:这个词的歧义大到离谱。有人搜ECC是为了配服务器内存条,有人搜ECC是为了做HTTPS证书加密,还有人搜ECC是因为公司里那套SAP ECC系统要导数据。这三个方向风马牛不相及,但缩写全叫ECC。
先花两分钟把它们分清,免得你看我后面内容以为我跑题了。
1.1 三个最容易混淆的ECC
第一个是Error Correcting Code,纠错码内存。ECC内存多用在服务器、工作站上,数据在传输和存储过程中如果发生位翻转,它能靠额外的校验位自动纠正单比特错误。如果你在搞机房硬件,看到“ECC内存”指的就是这个。和后面内容无关,但记住关键词:服务器、内存、校验。
第二个是Elliptic Curve Cryptography,椭圆曲线密码学。这是现代密码学里的重要分支,基于椭圆曲线上离散对数问题的难解性,用更短的密钥就能达到RSA同等安全等级。所以你在Trustwave这类CA机构的证书链里看到“ECC P384 Certification Authority”,指的就是用P-384曲线的椭圆曲线证书。之前有个叫affaan-m/ecc的GitHub仓库,也是这类算法实现的开源项目,不过那些代码只能用在学习研究上,不建议直接搬进生产环境。
第三个就是我要重点讲的SAP ECC。全称ERP Central Component,是SAP R/3的继承者,一个覆盖财务、后勤、人力资源等模块的企业资源计划系统。很多企业用它跑核心业务,一做SAP就绕不开“ECC”这个叫法。我后面说的LSMW,就是SAP ECC环境里非常实用的数据导入工具。
所以你如果是因为“SAP ECC LSMW操作”这个词找到我这篇,可以直接跳到第2章开始看,前面不耽误你时间了。
1.2 这次核心场景:SAP ECC 与 LSMW 的关系
LSMW全称Legacy System Migration Workbench,中文常叫“旧系统迁移工作台”。它从SAP R/3时代就存在,一路用到现在。它的本质是一个批导工具,不需要写ABAP代码,就可以把外部文件(Excel、TXT、CSV)里的数据批量导入到SAP ECC各个模块的数据库表中。
有朋友会问:SAP不是有BAPI、BDC、IDoc这些导入方式吗?为什么非要学LSMW?因为LSMW对业务顾问和IT运维最友好。BAPI要写代码,BDC要懂录屏原理,IDoc要配接口。LSMW呢,鼠标点击配置就能搞定,而且可以反复使用同一种结构导入不同批次的数据,是SAP运维工具箱里被点单率极高的一件装备。
我见过不少做SAP主数据维护的同事,一开始都是手工去T-code挨个录入,慢不说,还容易录错。用LSMW把Excel里的客户、供应商、物料主数据批量导进去之后,工作效率直接翻好几倍。如果你在做SAP项目上线、公司合并、系统切换这类事情,LSMW基本上是你逃不掉的必学技能。
2. 为什么需要LSMW:数据迁移的痛点与选型逻辑
聊任何工具之前,先搞清楚要解决什么问题。LSMW并不是SAP里看起来最“高精尖”的东西,但它是数据迁移场景里性价比最高的选项,没有之一。
2.1 手工录入与批量导入的差距
想象一下公司要从旧系统切换到SAP ECC,财务部门手里有几千条科目余额,物料部门有上万条物料主数据,采购部门有几千个供应商。你让一个业务同事对着事务码一条一条录,录到天黑也录不完。更麻烦的是,旧系统里的数据格式是“脏”的,有全角半角混乱、有信息缺失、有重复记录,直接录进SAP里就是一堆垃圾数据。
LSMW的价值就在这里:先把数据在Excel里清洗成符合SAP字段规则的格式,然后通过LSMW把Excel和SAP的事务码录屏文件建立映射关系,批量执行导入。整个过程可重复、可回溯、可控错。导完之后可以用SAP标准报表查错误,不会像手工录入那样出现问题只能靠人肉回忆。
用一句大实话概括:LSMW不是最快的导入方式,但它是最稳、最容易上手、最适合非开发人员掌握的导入方式。一个资深的业务顾问半天就能学会基础操作,一周就能成为熟手。
2.2 LSMW能做什么:常见业务场景
LSMW支持的数据对象非常多,核心场景集中在主数据导入上:
- 客户、供应商主数据批量创建/修改
- 物料主数据基础数据、采购视图、会计视图、销售视图的创建和扩展
- 会计科目表的创建与维护
- 期初库存、未清采购订单、未清销售订单的导入
- 固定资产主数据的初始化
- 工厂、库位、采购信息记录等后勤基础数据的批量维护
这些场景共同的特点是:字段多、记录量大、重复性高。如果是几十条数据,确实手工也能忍;但到了成千上万条,就算你想手工录,SAP也不会让你舒服——光是一堆必填字段、字段校验、视图组合规则就够你折腾的。
LSMW还有个好处是能保存“项目/记录结构/源结构/映射规则”这套配置。也就是说,这次导入完了,下次再来一批类似数据,直接复用之前的项目模板就行。用惯了之后,你会觉得它跟“Excel模板”的体验有点像,复制一套结构,换一批数据源文件,就能重新跑。
3. LSMW实战:从录制到执行全流程拆解
下面这部分是我今天最想分享的干货。我以“批量导入物料主数据”为例子,完整走一遍LSMW的实际操作流程。无论你用的是SAP ECC 6.0还是S/4HANA(系统里仍然保留了LSMW入口),操作逻辑都是通用的。
3.1 前置准备:源数据清洗与模板设计
LSMW本身不负责清洗数据,它只负责搬运。所以Excel预处理做得好不好,直接决定你的导入成功率。
我的习惯是先下载一个SAP标准模板。怎么拿?进LSMW后,创建一个项目,选择“Batch Input”录屏方式,之后在“File”这一步可以生成一个标准格式的源文件模板。拿到模板后,按模板的列标题来整理你手里的Excel,列名、顺序、字段长度尽量对齐模板。
几件必须注意的小事:
- 所有字段都尽可能保持文本格式,尤其是物料编码、会计科目这类容易被Excel自动转换成长数字或科学计数法的列。
- 日期字段统一成SAP能识别的格式,常见的是YYYYMMDD,别带横杠。
- “数量”“金额”这类字段不要带千分位分隔符,SAP只认纯数字。
- 表头行删掉,LSMW读取源文件时是从你指定的第一行数据开始的。
- 源文件编码建议使用ANSI或者UTF-8(带BOM不建议),否则中文会出现乱码。
我做项目时见过不止一个同事,Excel里看着好好的日期,导到SAP里变成“18991231”,就是因为Excel把日期序列号暴露给了LSMW。所以清洗阶段宁可多花两小时,也不要省这一步。
3.2 四步走:录屏、定义来源字段、映射规则、创建会话执行
LSMW配置一共15个步骤(不同版本略有差异),但真正干活的可以压缩成四步。
第一步是“录制事务码录屏”。在LSMW里,先创建一个项目(Project),再创建子项目(SubProject)和对象(Object),对象指的就是你要导入的主数据类型,比如“物料主数据”。
创建好后,进入“记录”步骤,输入事务码MM01(物料主数据创建),点开始录制。系统会打开MM01的事务界面,这时候你要像人工录入一样,把物料类型、行业领域、工厂、视图等基础信息填进去,然后一路点下去,录完整个创建物料的屏幕流程。录制好的录屏会保存在LSMW里,作为后续导入的“模板行驶路线”。
录屏这一步的核心原则:录的屏幕路径一定要和你Excel里面的字段一一对应。你录入物料描述、基本计量单位、物料组、采购组这些内容,将来Excel里的数据就会填到这些位置。如果你录屏时漏填了一个必填字段,导入时每一条数据都会报错。
第二步是“定义源结构”和“定义源字段”。源结构就是你的Excel表结构,可以理解为一张表的名称;源字段就是Excel里的每个列。你在这里手动创建几个源字段,比如MATNR(物料号)、MAKTX(物料描述)、MEINS(基本单位)等,并指定它们对应源文件里的哪一列。
第三步是“字段映射”和“转换规则”。这是LSMW的核心。你需要在屏幕字段和源字段之间建立对应关系,比如把源字段MATNR映射到录屏里的“Material Number”输入项。如果某个字段在Excel里没有值,但SAP里必须填,可以在转换规则里设置固定值,比如“行业领域”固定为“M”,“事务类型”固定为“创建”等。
第四步是“创建批输入会话”和“运行导入”。映射完成后,LSMW会读取你的源文件,生成一个批输入会话(batch input session)。你可以在事务码SM35里查看这个会话,前台运行(每录一条都弹屏)或后台运行(不弹屏直接执行)。导入完成后,去SM35看会话日志,有问题的数据都在错误列表里,点进错误消息就能看到具体原因。
3.3 关键配置疑难点:文件格式、抬头记录、前导零
很多新手在LSMW里折腾半天导不进去,多半是栽在这几个坑上。
关于文件格式:LSMW读取本地文件时,默认按文件扩展名区分格式。你如果源文件是Excel .xlsx,记得在“文件”步骤里选择相应的格式;如果你用TXT或CSV,分隔符是逗号还是分号、是否有文本限定符,都需要精确配置,否则数据会串列。
关于抬头记录:某些源文件第一行是列标题,LSMW提供了一个选项,可以跳过第一行记录数。这个“Header Lines”参数我在不少项目里看到都没人动它,结果第一行表头也被当成数据导进去了,然后报一堆“物料号无效”之类的错误。
关于前导零:SAP的物料号、科目号是带前导零的,但Excel里往往把前导零当成数字的一部分处理,导致“000000000100000123”变成“100000123”之类的数字。碰到这种情况,要么在Excel里强制把物料号列设为文本,并在LSMW的转换规则里用左补零函数,要么在源文件里预先处理好。千万不要偷懒,不然导入后你会发现SAP里多了一堆长度不对、不带前导零的垃圾主数据。
还有一点值得单独拿出来说:“录屏”的屏幕字段是会变化的。不同版本SAP的MM01界面布局可能有差异,而且同一事务码在不同工厂、不同物料类型下显示的字段也可能不同。所以录屏一定要在目标系统、目标场景下录制,最好拿一条典型的数据先跑通一遍,再批量执行。
4. 常见报错与排查经验实录
LSMW导入报错,只要不是系统配置问题,绝大多数错误消息都能直接告诉你原因。但有些错误很反直觉,我今天挑几个代表性的讲一讲。
4.1 典型的报错与解决办法
| 报错消息 | 常见原因 | 排查思路 |
|---|---|---|
| “物料 XXXX 不存在” | 源文件物料号格式不对,或前导零缺失 | 去Excel里检查物料号列格式,统一补前导零 |
| “在表T001中未定义公司代码” | 公司代码配置有问题,或者录屏界面里公司代码没填准确 | 检查SPRO后台配置,确认公司代码存在并且已分配工厂 |
| “字段LGOBE必填” | 录屏时没有填存储地点,或Excel漏了对应字段 | 在转换规则里设置固定值,或回到录屏补录存储地点 |
| “会话因出现错误被终止” | 通常是必填字段缺失 | 打开SM35会话明细,看第一条错误消息,从第一条改起,后面的错误可能是连锁反应 |
| “日期格式不正确” | Excel日期列没转成纯文本,或格式不是SAP标准格式 | 源文件里用YYYYMMDD的文本格式填日期,不要用Excel日期对象 |
| “数据被截断” | 字段长度超出SAP定义长度 | 在Excel里做数据长度校验,超过SAP字段长度就要截断或者修正 |
4.2 排查思路的独门心得
第一,每次导入前先导一个小样本,比如10条数据,跑一遍前台执行,一条一条看屏幕。别一上来就上万条数据后台跑,一旦出错,排查成本非常高。
第二,SM35会话日志里,点开一条报错数据,SAP会显示它停在了哪块屏幕上、哪个字段报错。这时候你基本不用猜,直接看字段名和错误消息,按图索骥。
第三,如果遇到一堆数据同时报同一个错误,十有八九是源文件这一列整体没有映射对,或者转换规则没设置好。先停下手头的工作,打开映射关系检查配置,别一条条去改数据。
第四,LSMW本身的“批输入会话”机制和“直接导入”是两套逻辑。批输入会话的好处是可以数据入库之前先模拟检查,错误数据不会进入数据库;直接导入就是让系统直接写库表,错误率和风险都更高。只要是正式生产环境,我强烈建议用“创建会话”的方式,不要用“直接导入”。
另外提一个很多资料都不写的细节:LSMW项目做完以后,最好给每个对象写一个说明,记录源文件路径、模板版本、导入日期、导入结果。我见过太多人,项目做完了,三个月后再要导另一批数据,发现自己都看不懂当初配的源字段是什么。写注释不是给系统看的,是给未来的自己减负。
5. 从LSMW延伸到ECC周边:证书、代码库与选型补充
聊完SAP ECC和LSMW,再把开头那两个搞混的“ECC”也收个尾。既然标题是这个,我不希望你搜到这篇后发现只有SAP内容,而另外两个关键词完全没讲。
5.1 Trustwave 与 ECC P384 证书
Trustwave是一家老牌的数字证书认证机构,在证书链领域,它有一个被称为“Trustwave Global ECC P384 Certification Authority”的根证书。这里的ECC指的就是椭圆曲线密码学。为什么这家机构要专门建一个P384曲线的根证书?因为P-384曲线提供的安全强度比RSA 2048更高,密钥长度却短很多,非常适合对性能和安全性都有要求的企业应用,比如软件签章、TLS证书、文档签名等。
在企业内网部署HTTPS或者做代码签名时,如果你的Windows信任库里恰好已经包含了Trustwave这个根证书,那你签出来的文档和程序在大多数电脑上都能自动通过校验。做ECC证书选型时,可以关注曲线类型、可信根库存量、证书有效期计划和吊销机制,别只看品牌。
这里我也额外提醒一句:既然大家在用证书,也顺便把私钥保护好。密钥长度再长,私钥泄露等于把大门钥匙交给了陌生人。
5.2 affaan-m/ecc 这类开源项目带来的启发
GitHub上有一个叫affaan-m/ecc的开源项目,内容是用高级语言实现椭圆曲线加解密算法。这类项目对想学密码学原理的人来说是很好的教材,可以让人直观看到点运算、倍点、标量乘法这些概念是怎么落地的。
但如果你是做生产系统开发的,我的建议永远是:优先用成熟、经过审计的密码学库(比如OpenSSL、BouncyCastle这种业界公认的库),不要拿开源学习项目直接上生产。自己做密码学实现是一件很危险的事情,稍有常数时间泄漏、随机数失败等问题就有安全风险。这点我经验太深了,之前见过有人自己写了个“仿ECC加密”,结果被安全测试直接打穿。
如果做安全相关的数据对接,可以从这类项目中了解原理,但真正的密钥交换、签名验签,请交给专业库。这不是不信任开源社区,而是对生产安全负责。
写在最后的使用体会
我做SAP项目这些年,用过试过无数导入方案,最后发现LSMW的普及率高不是没有道理。它操作界面不漂亮,步骤又多,但胜在稳定、可控、不需要开发资源。任何人只要肯花时间把源数据清洗干净,把录屏和映射配置走通,就能把一批又一批的主数据安全、准确地送进系统里。我在实际项目中最大的体会就是:LSMW本身并不难,难的是永远有人想跳过“清洗源数据”这一步。数据源弄干净,LSMW真的会成为你舍不得交给别人的效率工具。