金蝶收料通知单到MES待检信息:一条策略讲透基础资料同步怎么做
这个策略解决什么问题
某制造企业的收料流程原来是这样:仓库在金蝶云星空里录「收料通知单」,QC 同事再凭纸质单据到 MES 里手抄「待检信息」。一次实际项目里我们发现,手抄环节出错率不低,最常见的是物料编码少写一位、送检数量小数点错位,导致 MES 这边重复建单、质检任务堆积。
这条策略的目标很直接:把金蝶云星空的收料通知单(已审核状态)在排程触发后自动同步到 MES,生成待检任务。整条链路用轻易云数据集成平台(Qeasy)承接,源端走金蝶的 executeBillQuery 查询接口,目标端调 MES 的 creatQmsInspectTaskDto 写入接口,中间靠 Qeasy 做字段对齐和异常隔离。
数据流向与字段映射(源 → 中间层 → 目标)
整体流向:金蝶云星空(B) → Qeasy 中间层 → 四化智造MES(A),属于 B_TO_A 的基础资料/业务单据混合同步。
源端从金蝶拉取的关键字段,通过 Qeasy 的 request 配置声明:
| 源字段(金蝶云星空) | 含义 | 目标字段(MES) | 含义 |
|---|---|---|---|
FBillNo | 单据编号 | inspectNo | 送检单号 |
FMaterialId.FmasterID | 物料主键 | materialUuid | 物料流水 |
FMATERIALID.FNumber | 物料编码 | (透传保留) | 便于追溯 |
FStockOrgId.FNumber | 收料组织 | companyCode | 公司代码 |
FStockId(FDetailEntity 内) | 仓库签收主键 | receiveInvDetailUuid | 仓库签收 uuid |
FActlandQty | 实际收料数量 | inspectNum | 送检数量 |
| (源端无,目标端示例值) | — | inspectWeight | 送检重量 |
中间层 Qeasy 拿到源数据后,会做三件事:按 FDocumentStatus 过滤掉未审核/已作废的单据、做编码映射(物料编码→物料流水)、按 FDetailEntity_FEntryID 做幂等去重,避免重复建单。
在轻易云上如何配置
- 接入源平台:注册「金蝶云星空」适配器,填入鉴权信息(私部署内网地址,不要写进策略文件),接口选
executeBillQuery,请求方式 POST。 - 声明请求字段:在 metadata 的
request数组里把上表中的源字段逐项配上,is_required按业务必填项勾,value用金蝶的真实字段路径(例如FMaterialId.FmasterID)。 - 接入目标平台:注册「四化智造MES(API)」,接口
/api/creatQmsInspectTaskDto,POST,effect 设为EXECUTE。 - 字段映射与变量插值:目标字段
value写成{{源字段}}的模板形式(例如{{FBillNo}}、{{FActlandQty}}),companyCode这种目标端固定值直接写常量。 - 开启幂等与回写:把源端的
FDetailEntity_FEntryID设为主键,idCheck置为 true,Qeasy 会按主键判断是新增还是更新,避免重复触发。 - 异常处理:开启失败重试与「单据级隔离」,一条单据失败不会拖垮整批,失败明细可在 Qeasy 的日志中心定位。
实施步骤
我们通常分四步走,避免一上来就跑全量把两边账搞乱。
第一步:增量起点定位。 在金蝶端确定一个「业务时间起点」(例如 2025-09-01 之后审核的单据),用 FDate 配合 FDocumentStatus='B' 做初次增量,先把存量数据按日清空。
第二步:全量触发演练。 选业务低峰期(一般凌晨),手动触发一次全量,核对 Qeasy 日志中心里写入 MES 的条数与金蝶端查询结果是否一致。这里典型错误是直接拿全量上线,结果发现映射漏字段,导致 MES 端脏数据。
第三步:调度频率上线。 策略里 crontab 配的是 * 7-22 * * *,即每天 7:00 到 22:00 每小时跑一次。覆盖正常班次即可,夜里不跑,给金蝶和 MES 都留出维护窗口。
第四步:增量与全量双轨运行。 日常跑增量(按 FDate 增量拉取),每周固定时间跑一次对账全量(全量核查,差异进人工工单)。这种「增量与全量双轨」是轻易云客户里最常见的应对模式之一。
踩坑复盘
- 金蝶字段路径一定要写完整。 见过有同事把
FMaterialId.FmasterID写成FMaterialId,结果拉回来全 null。稳妥的做法是先用金蝶的查询助手跑一次,把真实返回 JSON 贴到 Qeasy 的字段探测器里自动识别。 - 表头和表体分阶段映射。 收料通知单是表头+表体结构,物料、数量都在表体里(
FDetailEntity),最早期我们把FStockId写在了表头位置,导致目标端仓库签收 uuid 全部为空,后改用 Qeasy 的「表头表体分阶段」配置才解决。 - 编码映射集中管理。 物料编码→物料流水的映射不能散落在策略脚本里,应统一放到 Qeasy 的「编码映射中心」,否则换一批物料就要改 N 条策略。
- 目标端
companyCode不要硬编码到生产环境。 私部署不同环境的companyCode不同,稳妥的做法是放在环境变量里,避免测试环境的值漏到生产。 - 小时级调度要带时间窗。
* 7-22 * * *这种写法比0 * * * *(整点全跑)更友好,既能覆盖业务,又把金蝶端的并发压力错开。
适用场景与不适用场景
适用:金蝶云星空作为 ERP 主干、MES 作为车间执行系统,且收料通知单是双方唯一对接单据形态的制造企业。 不适用:金蝶端有自定义二开字段未在标准接口暴露、MES 端待检任务需要先做库存预占、或物料编码尚未在 MES 端建档(需先跑物料主数据策略)。