BOM 物料清单同步实战:金蝶云星空 → 四化智造 MES 修改场景深度拆解
四化智造MES(API)金蝶云星空BOM同步MES轻易云增量同步基础资料
这个策略解决什么问题
在制造业 ERP + MES 的双系统架构里,BOM(物料清单)是车间领料、齐套分析、成本核算的源头。某制造企业的 ERP 端 BOM 一旦变更(用量调整、新增替代料、损耗率修订),MES 端如果不能及时反映,车间就会按旧版本投产,导致工单报废和库存虚增。本策略专门处理 BOM 的修改同步:把金蝶云星空已审核或已关闭的 BOM,按修改/审批时间增量推到四化智造 MES 的 editBom 接口,确保车间侧始终拿着最新版工艺路线。
数据流向与字段映射
数据流向:金蝶云星空(BOM) → 轻易云数据集成平台 → 四化智造 MES(BOM editBom)。
平台作为中间层,负责取数、清洗、转换和下发,不持久化业务主数据。关键字段对照如下:
| 目标字段(MES) | 源字段/规则(金蝶) | 映射类型 | 说明 |
|---|---|---|---|
| companyCode | 固定常量 | CONSTANT | 公司代码 |
| erpId | FID | DIRECT | 金蝶 BOM 主键 |
| erpParentId | "0" | CONSTANT | 根节点固定为 0 |
| materialUuid | FMATERIALID | DIRECT | 父项物料主键 |
| outerPartNo | FMATERIALID_FNumber | DIRECT | 父项物料编码 |
| doseSon | "1" | CONSTANT | 用量分子(可改为 FNUMERATOR) |
| doseMom | "1" | CONSTANT | 用量分母(可改为 FDENOMINATOR) |
| 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 时间转 YYYY-MM-DD HH:mm:ss |
| updateName | FCreatorId | DIRECT | 修改人(可改为 FModifierId) |
| updateTime | "" | CONSTANT | 可改为 REPLACE(FModifyDate,'T',' ') |
| items | refund_order_list | COLLECTION | 子项集合,需单独配置 |
在轻易云上如何配置
在 Qeasy 轻易云数据集成平台里,这条策略对应一个独立的「同步方案」,配置分三块:
- 源端:
executeBillQuery(ENG_BOM)POST 查询,过滤条件为FDocumentStatus in ('C','D')且FModifyDate|FApproveDate >= LAST_SYNC_TIME。LAST_SYNC_TIME由平台自动维护,无需人工干预。 - 目标端:WebAPI
POST /api/bom/editBom,idCheck=true,意味着平台在写入前会拿erpId去 MES 端校验存在性,避免误创建。 - 字段映射:表头走「字段对照」配置,表体(items)走「子项集合」配置,平台支持嵌套数组结构。
_function REPLACE直接写在表达式框里即可,平台还提供_findCollection(跨方案联查)和_mongoQuery(复杂条件)作为高级工具。
实施步骤
- T0 增量起点:首次上线时,把
LAST_SYNC_TIME设为项目启动日 00:00:00,先跑一次「全量回灌」,把已审核 BOM 一次性推过去,确保两边基线一致。 - T1 全量触发:在轻易云方案上点「全量执行」按钮,平台会忽略时间戳过滤,按当前过滤条件把符合状态的全部 BOM 推到 MES。建议放在凌晨业务低峰。
- T2 调度频率:crontab 设为
* 7-22 * * *,即每天 7:00–22:00 每整点执行一次。覆盖白班作业时间,夜间停机检修期避免无效调用。 - T3 灰度与回滚:先用 1–2 个 BOM 单据验证表头+表体字段无误,再放开全量。轻易云每条同步都有运行日志,失败可单条重跑,不影响后续增量。
- T4 监控告警:平台自带成功率看板,建议给「BOM 修改同步」单独建一个看板,失败率 > 1% 触发企业微信告警。
踩坑复盘
- 首坑:createTime 格式不一致。金蝶返回的是 ISO 8601(
2025-12-12T11:21:50),MES 接口要YYYY-MM-DD HH:mm:ss。稳妥做法是直接用_function REPLACE('{{FCreateDate}}','T',' '),平台表达式框支持嵌套,不要在前置脚本里改,否则换环境会丢。 - 次坑:用量分子分母被默认成 1。模板里
doseSon、doseMom写死为 1,上线后才发现金蝶的 FNUMERATOR/FDENOMINATOR 没传过去,导致工单齐套全错。建议方案评审时就检查「未映射字段清单」,把用量、损耗这些业务强相关字段全部映射。 - updateName 错拿创建人。修改场景下
updateName取的是FCreatorId,等于永远显示最初创建人。金蝶有FModifierId字段,正确做法是改{{FModifierId.FName}},这样审计追溯才准。 - 依赖物料未先同步。BOM 的
materialUuid、outerPartNo依赖父项物料已在 MES 存在。轻易云客户常见的应对模式是把这类依赖做成「序列 A→B」:先跑物料主数据(策略 A),再跑 BOM(策略 B),通过depends_on字段声明依赖,平台会自动等待。 - 表头表体分阶段上线。BOM 是父子结构,items 子项包含子物料、用量、损耗、行号等。一开始就表头表体一起推,出问题很难定位。稳妥做法是先表头后表体:第一阶段只推表头,验证 erpId/materialUuid;第二阶段再开 items,逐字段比对。
适用场景与不适用场景
适用:ERP(已审核/已关闭状态)→ MES 的 BOM 修改同步,数据量在万级以内,字段映射相对稳定。不适用:BOM 新增(应走 createBom 策略);MES → ERP 反向同步;多级 BOM 层级关系(FParentRowId 未映射);需要实时(秒级)触发的场景(整点调度存在最长 1 小时延迟)。
本文为原创内容,转载请注明出处:/insights/solutions/strat-mes-api-kingdee-cloud-9955-mes-f0bc9f41