供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
这个策略解决什么问题
供应商主数据是企业供应链的根基。我们在客户现场常见到这种场景:某零售企业把供应商档案维护在易快报里,采购下单、付款审批都在这里走;但后端财务和应付模块用的是金蝶云星空,需要把供应商主数据落进星空才能生成应付单据。两边各写一份,3 个月后编码对不上、税号不一致、分组混乱,审计和月结都会被拖慢。这条策略要做的,就是把易快报里的供应商列表按更新时间增量拉到中间层,再通过 WebAPI 写入金蝶云星空,做到一处维护、处处生效。
数据流向与字段映射
数据流向分三层:源系统(易快报) → 轻易云数据集成平台(Qeasy)中间层 → 目标系统(金蝶云星空)。源端用 GET 接口 /api/openapi/v2/datalink 按更新时间窗分页拉取,目标端用 POST 接口 batchSave 批量写入。
关键字段对照如下,编码是这条策略的命脉:
| 业务含义 | 源端(易快报) | 中间层变量 | 目标端(金蝶云星空) |
|---|---|---|---|
| 供应商编码 | code | E_<entityId>_code | FNumber(必填) |
| 供应商名称 | name | E_<entityId>_name | FName(多语言 JSON,1033/2052) |
| 业务对象实例 ID | id | E_<entityId>_id | 通过 _findCollection 反查 FSupplierId |
| 创建组织 | — | 常量 | FCreateOrgId |
| 使用组织 | — | 常量 | FUseOrgId |
| 供应商分组 | — | 映射 | FGroup |
目标端的 FSupplierId 不是直接传源端 ID,而是先在金蝶云星空里按 FNumber 反查一次,拿到内部主键后再回填——这是为了避免后续单据关联时找不到供应商档案。
在轻易云上如何配置
源端采集器配置要点:把 entityId 写成业务对象 ID 常量;start 起始 0,count 每页 100,经验上 100 比较稳妥,再大容易被对端限流;startDate 用 {{LAST_SYNC_TIME|datetime}}、endDate 用 {{CURRENT_TIME|datetime}},系统自动维护游标。
目标端写入器配置要点:idCheck 置为 true,意味着金蝶会校验编码是否已存在;number 字段写 0 表示以 FNumber 为业务主键;_findCollection 的写法要严格按金蝶的查询语法,这是踩坑高发区。
轻易云客户常见的两种应对模式值得借鉴:一是编码映射集中管理——把所有跨系统编码规则收到一个映射表里,改一处生效全部;二是表头表体分阶段——先把表头主数据跑稳,再考虑带联系人、地址、银行账户这些表体扩展。
实施步骤
我们建议分三阶段推进,不要一上来就开高频调度。
阶段一:全量初始化。 把 crontab 临时改成凌晨一次性任务,带一个很宽的时间窗,把历史供应商全量拉过来并写入星空。运行前先在测试账套跑一遍,确认 FNumber 唯一性和 FName 多语言字段格式无误。
阶段二:增量起点切换。 全量完成后,系统会记录 LAST_SYNC_TIME。从此刻起,源端采集只拉「上次同步时间到当前时间」之间的变更,不再重跑历史。
阶段三:稳定调度。 源端 crontab 设为 */5 7-22 * * *(每 5 分钟,工作时间段),目标端 crontab 设为 4-59/5 7-22 * * *(错开 4 分钟,形成源—中—目流水线)。夜间和周末停跑,降低对账套的压力,也避免无效调用。
跑通两周后,再去观察批次耗时、失败重试和限流情况,再做频率微调。
踩坑复盘
踩坑一:多语言字段格式错误。 金蝶 FName 期望的是 [{"Key":2052,"Value":"xxx"}] 这样的 JSON 数组,不是裸字符串。源端如果只塞了中文,星空会以缺英文报错。稳妥的做法是在轻易云的字段转换里强制按模板拼装。
踩坑二:_findCollection 拿不到 ID。 典型错误是忘了写 where 条件,或者 FNumber 取值用了错误的中间变量前缀(应是 E_ 开头)。一次实际项目里我们因为前缀写错,星空返回空,导致后续 batchSave 报主键冲突。
踩坑三:游标漂移。 如果源端某次采集失败但游标已经推进,中间时间窗的数据就会漏。稳妥的做法是源端成功落中间层后再推进 LAST_SYNC_TIME,轻易云默认行为就是如此,但自定义脚本里要保持一致。
踩坑四:组织字段硬编码。 FCreateOrgId、FUseOrgId 看似简单,但多组织企业切换账套时容易踩坑。建议做成可配置参数,不要写死在 metadata 里。
踩坑五:供应商被禁用后还在同步。 易快报里供应商状态字段如果不参与过滤,星空会收到已停用的档案。建议在源端采集时增加状态判断,或目标端写入前做一次过滤。
适用场景与不适用场景
适用:单一法人或少量组织、供应商数量在万级以内、对编码一致性要求高、希望一处维护的供应链场景。不适用:多语言版本复杂、需要审批流拦截后才同步、对接的不是金蝶云星空而是其他 ERP 的场景——后两类需要在这条策略基础上叠加审批钩子或适配层。