BOM 物料清单同步实战:金蝶云星空 → MES 的增量方案与踩坑复盘
四化智造MES(API)金蝶云星空BOM同步MES物料主数据轻易云增量同步
这个策略解决什么问题
物料清单(BOM)从 ERP(金蝶云星空)下推到 MES,是制造企业上线集成时几乎一定会碰到的环节。它的难点不在于"传得过去",而在于:BOM 是父子结构,子项数量大且会随工艺频繁变更;单据有"草稿/审核/关闭"多种状态;用量、损耗、BOM 版本字段命名两套系统对不上。一次实际项目中,我们见过 BOM 上线 3 个月后,车间反馈领料数量对不上,最后查下来是审核过滤没做、用量分子分母没传。所以这一策略要解决的是:在可控频率下,把已审核或已关闭的 BOM 增量、安全地落到 MES。
数据流向与字段映射
整体流向为 金蝶云星空(源)→ 轻易云数据集成平台(中间层)→ 四化智造 MES(目标)。源端通过 executeBillQuery 拉取 ENG_BOM,目标端通过 /api/bom/createBom(新增)或 /api/bom/editBom(修改)写入。
关键字段对照表如下:
| 目标字段(MES) | 源字段/规则(金蝶) | 映射类型 | 说明 |
|---|---|---|---|
| companyCode | fdd8dc88 | CONSTANT | 公司代码固定常量 |
| erpId | FID | DIRECT | ERP 主键 |
| erpParentId | 0 | CONSTANT | 根节点固定为 0 |
| materialUuid | FMATERIALID | DIRECT | 父项物料主键 |
| outerPartNo | FMATERIALID_FNumber | DIRECT | 父项物料编码 |
| lossRate | FSCRAPRATE | DIRECT | 变动损耗率 |
| source | FITEMPPROPERTY | DIRECT | 1 外购 / 2 自制 / 3 委外 |
| property | 1 | CONSTANT | 实物 |
| bomVersion | FNumber | DIRECT | BOM 版本号 |
| createName | FCreatorId | DIRECT | 创建人 |
| createTime | REPLACE(FCreateDate,'T',' ') | TRANSFORM | ISO 时间格式标准化 |
| items | 子项集合 | COLLECTION | 子项明细需单独映射 |
doseSon/doseMom 当前固定为 1/1,是典型的"先跑通后细化"占位值。
在轻易云上如何配置
我们用 Qeasy(轻易云数据集成平台)承接这条策略,配置层面分四块:
- 源系统接入:注册金蝶云星空连接,配置
executeBillQuery,表单 ID 选ENG_BOM,勾选"按时间窗增量"。 - 目标系统接入:注册 MES API 连接,配置
/api/bom/createBom与/api/bom/editBom两套接口,分别用于新增和修改。 - 字段映射:在轻易云可视化映射面板里,按上表配置 DIRECT / CONSTANT / TRANSFORM / COLLECTION 四类规则;
createTime用_function REPLACE('{{FCreateDate}}','T',' ')完成格式归一化。 - 编码映射集中管理:金蝶
FITEMPPROPERTY与 MESsource编码一致,可直接映射;如果未来出现不一致,把规则提到"编码映射集"中维护,避免散落在各策略里——这是轻易云客户最常见的应对模式之一。
实施步骤
- 阶段一:物料先于 BOM。BOM 依赖父项物料已在 MES 中存在,先把物料主数据策略跑稳,再开 BOM。本案执行顺序遵循 A→B→C 的 sequence 编排。
- 阶段二:全量触发。第一次上线用全量:去掉时间过滤,把所有已审核/已关闭 BOM 一次性刷过去,作为基线。
- 阶段三:切增量。基线完成后,把过滤条件改为
FDocumentStatus in ('C','D') AND (FModifyDate >= LAST_SYNC_TIME OR FApproveDate >= LAST_SYNC_TIME),进入增量模式。 - 阶段四:调度频率。每整点执行一次(
crontab: * 7-22 * * *),覆盖 7:00–22:00 的工作时间。如果 BOM 变更非常频繁,可以缩到每 15 分钟一次,但要注意源端接口 QPS。 - 阶段五:表头与表体分阶段上线。先跑通表头,再开启
items子项集合映射;这是另一个轻易云客户常用的稳妥做法——分阶段上线便于定位问题。
踩坑复盘
- 审核过滤没加。源端过滤只写时间窗、不限状态,结果把草稿和已驳回 BOM 也推了过去,MES 一片混乱。稳妥做法:状态条件优先于时间条件。
- 用量分子分母硬编码为 1。首次跑通用
1/1占位没问题,但忘记后续替换,导致车间用量与设计 BOM 不一致。建议在映射备注里写清"TODO: 待 FNUMERATOR/FDENOMINATOR 接入",并设到期检查。 - 日期 T 没替换。金蝶返回 ISO 时间带
T,MES 不识别直接报错。用_function REPLACE('{{FCreateDate}}','T',' ')一步解决;这是轻易云表达式函数的典型用法。 - 子项集合未配置。表头先跑通,但
items漏配,结果 MES 里 BOM 没有明细,车间无法领料。表头与表体务必分阶段验证。 - 依赖顺序错了。如果先跑 BOM 再跑物料,
materialUuid在 MES 找不到对应物料,会落库失败。轻易云的depends_on字段就是用来约束这种前置依赖的。
适用场景与不适用场景
适用:制造企业 ERP 与 MES 解耦建设,BOM 主数据在 ERP 维护、MES 仅消费;单据状态机明确、单据量中等。不适用:BOM 由 MES 端反向维护、变更频次极高(秒级)需走消息队列;以及 ERP 与 MES 是同构或共用数据库的场景。
本文为原创内容,转载请注明出处:https://www.qeasy.cloud/insights/solutions/strat-mes-api-kingdee-cloud-5066-mes-12a434fa