简介:这份接口清单聚焦MES与ERP系统对接场景,面向智能制造、企业信息化项目中的实施顾问、系统架构师及开发人员。文档按数据流向分为ERP向MES同步销售订单、物料、供应商、客户、采购订单,MES向ERP回报外购入库、半成品完工、产成品入库、销售出库、生产领料出库、补料单,以及HR向MES同步组织架构和人员信息三类接口。每个接口均列明编号、名称、详细描述、周期及备注,例如销售订单接口同步合同号、物料编码、数量、交货日期等关键字段,能直接用于接口开发、数据映射、联调测试与项目文档编写。整个资源包仅含1个docx文档,压缩包大小约25KB,结构紧凑,便于查阅和二次编辑。目前已有204人学习,适合刚接触系统集成的读者快速建立对接全貌,也可作为需要落地实施MES与ERP集成时的接口参考清单。
1. MES与ERP接口清单值钱在哪:十三个接口、三类流向、一张表说清
制造企业上MES,百分之八十的时间耗在和ERP对数据上。我接过一个项目,ERP顾问和MES顾问关在会议室对着接口清单逐行确认,吵得最凶的不是算法,而是“销售订单同步过来,物料编码到底用谁的”。这份《MES系统与ERP系统对接接口清单.docx》整理了十三个接口,分成三类流向:ERP同步给MES的销售订单、物料、供应商、客户、采购订单;MES回报给ERP的外购入库、完工、产成品入库、销售出库、生产领料、补料;还有HR提供给MES的组织架构和人员信息。它不帮你写接口代码,但能让你在半天内把“对哪些数据、周期多长、哪个车间要用”这件事敲定。适合ERP实施工程师、MES开发、甲方信息化负责人当接口定义的底稿。
2. 先把接口看清楚:ERP→MES、MES→ERP、HR→MES三类流向的业务边界
接口清单不是字段堆砌,而是业务流向的镜子。我习惯拿到清单先按数据流向分组,再对着每个接口问三个问题:谁产生、谁消费、用来干什么。这份清单天然分好了三组,下面逐个拆。
2.1 从ERP往MES同步的5个接口:主数据和订单怎么进车间
这一组接口解决的是“车间开工的依据从哪来”。ERP是主数据源头,MES是执行层,所以销售订单、物料、供应商、客户、采购订单全部从ERP单向同步到MES。
| 接口编号 | 接口名称 | 核心内容 | 用途 | 周期 |
|---|---|---|---|---|
| 001 | 销售订单接口 | 合同号、销售订单号、购货单位;明细含物料编码、数量、单价、单位、交货日期、备注 | 创建车间生产订单 | 实时 |
| 002 | 物料接口 | 物料号、名称、规格型号、物料属性、计量单位组、详细描述、备注 | 管理原料 | 实时 |
| 003 | 供应商信息接口 | 供应商代码、供应商名称、供应商类别、供应类别、公司类别 | 物料管理 | 实时 |
| 004 | 客户接口 | 客户代码、客户名称 | MES生成销售出库单时使用 | 实时 |
| 005 | 采购订单接口 | 合同号、采购订单号、供应商编码;明细含物料编码、物料型号、物料描述、单位、单价、数量、交货日期、合同号、行号 | 生成外购入库依据 | 实时 |
注意003和004在原始文档里挤在一起,实际是两个独立接口。供应商信息挂在物料管理上,因为很多企业的物料主数据里有“默认供应商”属性;客户接口则是为了销售出库单能带上客户抬头。005采购订单有个条件备注:“如果总装车间负责辅料、包材的采购,则需要,否则不需要。”这句话很关键,后面第3章单独说。
从实施角度看,001和002必须按顺序同步。先有物料主数据,才能拉销售订单明细,否则订单明细里的物料编码在MES里是悬空的。很多项目第一次联调失败,就是先同步订单、后同步物料导致的。
特别要提一下003供应商信息接口和005采购订单接口的关系。如果005要启用,那么供应商信息必须同步完整,因为采购订单明细里的供应商编码需要在MES界面显示,否则车间签收时不知道是哪家供应商送来的。反过来说,如果公司不需要MES管采购,003也可以砍掉,但供应商信息还可能在物料主数据里用到,所以不建议砍。
这份清单里所有周期都标了“实时”,这在实际项目里要打个折扣。实时不代表毫秒级,而是“业务事件发生后尽快同步”。销售订单在ERP审核的同时推送,MES这边轮询或订阅消息队列,通常几秒内到达。如果网络抖动,至少要有重试机制。我不建议用定时任务每小时拉一次,因为车间等不起。实时性是这组接口的默认要求,除非有特殊说明。
2.2 MES回报ERP的6个接口:完工、入库、出库、领料怎么回流
MES回报给ERP的接口是执行结果的反哺。ERP发出的生产订单经过车间执行,最终要回到ERP里做成本核算和库存更新。这组接口有6个:外购入库单、半成品完工回报、产成品入库单回报、销售出库单回报、生产领料出库回报、补料单。
| 接口编号 | 接口名称 | 核心内容 | 用途 | 周期 |
|---|---|---|---|---|
| 006 | 外购入库单接口 | 采购订单号、合同号、批号、应收数量、实收数量 | 回报给ERP完成采购入库 | 实时 |
| 007 | 半成品完工回报接口 | 工单单号、完工日期;明细含物料编码、规格型号、单位、生产任务单号、工序名称、数量、线边库位信息、备注 | 回报生产进度,ERP归集在制品成本 | 实时 |
| 008 | 产成品入库单回报接口 | 入库单号、入库日期;明细含物料编码、规格型号、单位、批号(合同号或任务令号)、应收数量、实收数量、备注、收货仓库、仓位、生产任务单号 | 产成品入库,ERP更新成品库存 | 实时 |
| 009 | 销售出库单回报接口 | 销售单号、物料编码、物料名称、规格型号、应发数量、实发数量、发货仓库、仓位、批号 | 发货完成,ERP扣减库存 | 实时 |
| 010 | 生产领料出库回报接口 | 领料单号、领料部门(车间)、领料日期;明细含物料代码、物料名称、物料型号、批号、实发数量、发料仓库、生产任务令 | 领料完成,ERP发料记账 | 实时 |
| 011 | 补料单接口 | 与生产领料出库回报相同的主表和明细结构 | 超出定额领料后回报给ERP | 实时 |
注意006和销售出库、生产领料都是“回报”性质,不是“同步”。区别在于同步是ERP主动推,回报是MES主动推,ERP被动接收。接口实现时,MES侧要负责在业务动作完成后立即触发,而不是等统一批处理。比如产成品入库单在MES里审核通过那一刻,就要把008报文发出去。如果网络失败,要有队列缓冲,避免数据丢失。
回报接口有个共同点:MES端一定要有数据队列。比如车间网络突然断了,MES报完工时ERP连不上,这时候数据要先进本地队列,网络恢复后按顺序补送。没有队列的后果就是完工数据越堆越多,最后只能手工补单。我见过一个项目上线三个月,手工补了两百多张报工单,成本全乱套。
2.3 HR系统两个接口:组织架构和人员信息,为什么单独拉出来
很多接口清单只画ERP和MES两张皮,把HR忘了。实际项目里,MES系统主数据的“组织架构”和“人员信息”往往不是在自己系统里维护的,而是从HR同步过来。这份清单给了两个接口:
| 接口编号 | 接口名称 | 核心内容 | 用途 | 周期 |
|---|---|---|---|---|
| 012 | 组织架构接口 | 从HR获取企业组织架构信息 | MES系统主数据 | 实时 |
| 013 | 人员信息接口 | 从HR获取车间工作人员信息 | MES系统主数据 | 实时 |
组织架构数据用于MES里的车间、工段、班组的层级树;人员信息用于账号对应关系、工序报工、工时归集。这里有个跨系统细节:HR系统里的人员编号通常是人资编码,而MES里可能需要工号,两者要做映射。组织架构里一个车间对应ERP里的一个成本中心,联调时要把这层关系一并确认。
HR接口看起来很轻,但联调时最容易被当成“最后再说”的部分。建议在MES上线前一个月就同步组织架构和人员信息,因为账号权限、工序报工都要依赖它。等到设备已经开始录数据再发现人员编码对不上,改起来就很痛。
三组接口串起来就是一句话:ERP告诉MES要做什么,HR告诉MES谁来做,MES做完之后把结果回报给ERP。只要这个闭环完整,车间数据就和财务账对得上。
3. 接口字段设计:从合同号到库位,每个字段背后对应一个业务动作
字段不是随便填的。接口清单里每一个字段都对应一个业务动作,漏掉一个,后续追溯链就断一截。我重点拆三个接口的字段。
3.1 销售订单接口:物料编码、数量、交货日期是三个必查字段
001销售订单接口主表有合同号、销售订单号、购货单位,明细有物料编码、数量、单价、单位、交货日期、备注。开发时最容易在三个字段上翻车:物料编码、单位、交货日期。
物料编码:ERP和MES的编码规则通常一致,但偶尔有特例。比如ERP用老编码,MES用新编码,需要在接口映射表里维护转换关系。我一般建议以ERP编码为主键,在MES里加一个外部编码字段存原始值,方便回溯。
单位:销售订单明细的“单位”可能是“件”和“套”的换算关系。MES车间执行时往往用基本单位,接口同步后要按物料主数据里的换算率转成车间单位。转换发生一次就要保留日志,否则后续工时统计对不上。
交货日期:这个日期决定MES排产优先级。接口清单里没有明确格式,但实际对接时一定要约定成字符串还是日期类型。如果是字符串,要规定格式YYYY-MM-DD,避免不同系统间的日期解析差异。
单价字段在MES里不一定需要,但建议保留。有些外协结算会用到MES报工数量乘以ERP单价,两个系统对不上时,这个字段能救急。备注字段则用来传客户要求或特殊说明,别小看它,很多现场争议靠备注解决。
3.2 完工回报接口:批号(合同号/任务令号)是追溯的灵魂
007半成品完工回报接口明细里最关键的字段是“批号(合同号或者任务令号)”。在008产成品入库单回报接口里,批号字段再次出现。为什么反复强调?因为产品质量追溯就是靠批号串起来的:销售合同号或生产任务令号一路带到加工批次,哪个批次出了问题,能直接定位到工单和供应商。
联调时注意,“生产任务单号”和MES内部的工单单号是两个概念。清单里007的主表是“工单单号”,明细里又带“生产任务单号”,实际业务里同一张工单可能对应多个生产任务单。接口设计时要确认是1对1还是1对多,否则MES回报数量时ERP不知道归到哪个任务令。
“线边库位信息”也是一个容易忽略的字段。半成品完工后放在哪个线边库,这个库位在ERP里是否存在,直接决定后续领料能不能扣减。需要先同步库位主数据,或者把库位写在接口映射表里,否则回报时ERP会报“仓位无效”。
工序名称字段也要统一。ERP里的“车加工”在MES里可能叫“CNC”,如果不做映射,完工回报到ERP后成本归集会落到不同科目。我一般建议工序编码用一套,名称允许不同,接口里优先传编码。
3.3 采购订单与外购入库:为什么说“如果总装车间负责辅料采购才需要”
005采购订单接口和006外购入库单接口都有同一句备注:“如果总装车间负责辅料、包材的采购,则需要,否则不需要。”这句话很多实施顾问直接跳过,实际上它决定了两个接口要不要开发。
大部分企业辅料、包材由采购部统一采购,系统流程是ERP采购订单发供应商,供应商送货到仓库,仓库在ERP内做采购入库。这时候MES不需要碰采购订单,车间只管领用就行。
但有些企业总装车间自己有辅料库,车间现场签收供应商送货,甚至车间直接下采购订单。这种情况下,MES必须同步采购订单,并在收货时通过006外购入库单把实收数量回报给ERP,ERP才能生成采购入库凭证。判断标准就一句话:采购收货的动作发生在MES里还是ERP里。发生在MES里,005和006必须开发;发生在ERP里,这两个接口可以砍掉。
006接口里的“批号”字段要特别注意。外购入库的批号往往是供应商批次或收货日期批次。如果MES里面还要做来料批次追溯,那这个批号必须在MES里生成,并回传给ERP,保证两个系统里看到的是同一个批号。
4. 接口落地三选一:Web Service、REST API、中间库表怎么选不翻车
接口清单定义了业务需求,实现路径还得自己定。我见过同一个接口清单,三种实现都有人做。选型不取决于谁的技术新,取决于两边系统的开放程度和实施工期。
4.1 三种实现路径对比:实时性、开发量、调试难度
| 实现方式 | 实时性 | 开发量 | 调试难度 | 适用场景 |
|---|---|---|---|---|
| Web Service(SOAP) | 高 | 中 | 中 | ERP是SAP、Oracle、金蝶等成熟产品,官方提供标准服务 |
| REST API | 高 | 低 | 低 | 两边都是自研系统,或MES用Spring Boot等框架封装API |
| 中间库表 | 中(依赖轮询) | 低 | 高 | 两边数据库都开放,允许建中间表,且有DBA配合 |
现在做MES接口,我首选REST API。用Spring Boot对外提供的接口方便调试,用Postman就能直接打数据,字段对不上时后端一眼能看出来。如果ERP是SAP或金蝶这类成熟产品,优先看官方API,比如鼎捷ERP的API、金蝶的系统接口,通常已经封装好了标准功能。实在没接口,最后才用中间库表。中间库表看起来简单,但调试问题最多:两边连同一个库,写入一方锁表,另一方查询卡住,还容易把业务表当成中间表乱搞。
中间库表最坑的地方是分布式事务。两边系统都连同一个数据库,看起来简单,但MES写入中间表后ERP没读走,中间表越积越满。解决办法是给中间表加一个处理状态字段,ERP读走之前标记为已处理。同时要把中间表单独建schema,不要混进业务库。
4.2 字段映射与类型转换:日期、数字、单位别在转换里丢精度
接口联调大量时间花在字段映射上。我的习惯是拿到接口清单后,先做一张字段映射表,左边是ERP字段,右边是MES字段,中间写转换规则。以001销售订单接口为例:
| ERP字段 | MES字段 | 转换规则 |
|---|---|---|
| VBELN(销售订单号) | order_no | 直接映射,字符串 |
| POSNR(行号) | order_line | 直接映射,数字转字符串 |
| MATNR(物料编码) | item_code | 查物料映射表,不存在的报错 |
| KWMENG(数量) | order_qty | decimal(18,3),按单位换算率换算 |
| WERKS(工厂/车间) | workshop | 用映射编码,不用中文名 |
关键要注意三类:日期字段统一成字符串“YYYY-MM-DD HH:mm:ss”,不要传时间戳,否则不同时区解析出错。数字字段全部用decimal,不要用float。车间扫码枪报工时经常输入小数,float在数据库里会变成0.30000000000000004。单价涉及金额,更不能丢精度。单位字段必须做换算率,ERP按“箱”出库,MES按“件”报工,接口里没有换算率字段,目标端就直接懵了。
4.3 接口幂等性设计:重复同步不产生重复数据
接口幂等性是接口清单里没写、但你必须自己补的东西。网络抖动时,MES调用ERP接口超时,MES会重发请求,ERP如果没做幂等处理,就会生成两张领料单。做实施面试题时经常考这点,实际项目里翻车更多。
解决办法很简单:每个接口都定义一个唯一业务键。销售订单接口用“销售订单号+行号”,完工回报用“工单单号+生产任务单号+工序名称”,入库回报用“入库单号”。目标表里对唯一键加索引,插入前先查询是否已存在。
另一个习惯是加接口日志表。每次调用记录接口编号、请求时间、请求报文、响应码。出现重复数据时,先查日志确认是重复推送还是重复消费。这两个问题处理方式完全不同。日志至少保留三个月,上线初期保留半年,方便对账。
5. 避坑:接口联调时的常见问题与排查顺序
接口清单只是纸面设计,联调才见真章。下面几条都是我在现场踩过的,每一条都能对应到具体清单里的一个接口。
5.1 现象:销售订单同步过来,MES里看不到物料编码
原因:001销售订单接口和002物料接口是分开的,物料还没同步过去,销售订单明细就推过来了,MES外键找不到物料。解决:联调时先跑002物料接口,再跑001销售订单接口;在同步逻辑里加校验,物料编码不存在时先把订单放入待处理队列,不整单丢弃。
5.2 现象:半成品完工回报提示“生产任务单号不存在”
原因:007接口里的“生产任务单号”直接用MES内部工单号推送,ERP端没有这个单号。解决:在MES创建车间生产订单时,把ERP的生产订单号写入MES的扩展字段;回报时用扩展字段里的ERP单号,而不是MES的工单单号。
5.3 现象:同一张销售订单被重复拉取,生成了多张车间生产订单
原因:MES端拉取001接口后没有记录已拉取状态,或者接口调用超时后ERP端重试,MES又拉了一遍。解决:MES维护一张“销售订单拉取记录表”,以销售订单号+行号为唯一键;每次拉取先查该表,已存在的跳过。ERP端接口也要做幂等,客户端传一个流水号,ERP按流水号去重。
5.4 现象:接口提示成功,但ERP库存没有变化
原因:MES回报008产成品入库单后,ERP接口只是接收了数据,没有调用货物移动过账。或者MES里选的收货仓库在ERP里不存在。解决:联调时在ERP端查“物料凭证”而不是只看接口返回。仓库、仓位编码要在映射表里逐个核对,不能拿中文名传参。
5.5 现象:补料单回传后,ERP里没有关联到原领料单
原因:011补料单接口的主表字段和010生产领料出库回报几乎一样,但明细里没有带“原领料单号”,ERP侧无法关联。解决:在补料单明细里增加“原领料单号”字段,ERP侧按这个字段找到原领料单,做追加发料。
排查顺序我一般固定为:先看接口日志,确认请求有没有到对方系统;再查源系统单据状态,确认数据本身没问题;然后查目标系统入库结果,确认业务动作有没有执行;最后才怀疑网络和权限。按这个顺序,九成问题能定位到具体层。
6. 验证接口对不对:用“三表核对”法五分钟自查
接口联调完,怎么证明数据是对的?光看接口返回码不够。我习惯用三表核对法:源系统单据表、接口日志表、目标系统业务表,三张表对一遍。
拿001销售订单接口举例。先在ERP里查销售订单审核时间和明细行数;再到接口日志表里查这条订单的同步记录,确认拉取时间和返回结果;最后到MES的车间生产订单表里查关联生成的订单数量。三处一致,这个接口才算通。只查接口日志和MES表,很容易出现“日志成功但数据缺失”的情况。
具体步骤:
- 选一条真实业务单据,比如一张含5行明细的销售订单。
- 在ERP端查主表和明细行数,记录下来。
- 在接口日志表查这条单号的同步请求,确认返回成功码,记录时间。
- 在MES端查对应的数据行数,重点比对物料编码、数量、交货日期。
- 三张表数据一致,这个接口通过;不一致,回到对应章节排查。
这个方法也适用于回报接口。比如008产成品入库单,在MES端确认入库单审核,在接口日志里查回报结果,再到ERP里查物料凭证和库存数量。只要三表数字一致,成本核算就不会出大问题。
我从那以后每测一个接口,都强制走一遍三表核对,哪怕只是五条数据。这套方法不挑系统,换成SAP、金蝶、鼎捷都适用。希望帮到你。
本文还有配套的精品资源,点击获取