K3 WISE 跨账套物料同步:FItemID 是锚点,碰了就断链
✦
← 金蝶 K3 实战

K3 WISE 跨账套物料同步:FItemID 是锚点,碰了就断链

楼主:超级管理员 · 2026-11-02 12:05 · 浏览 32

金蝶K3 数据同步 SQL 主键
超级管理员 楼主

K3 WISE 跨账套物料同步:FItemID 是锚点,碰了就断链

做过 K3 WISE 跨账套基础资料同步的人都知道,物料同步是最容易埋雷的地方。核心只有一句话:FItemID 是全局唯一主键,绝对不能修改,它是同步的锚点。

为什么不能改

K3 的单据、库存、成本、凭证,全部通过 FItemID 关联物料。你在目标账套里重新生成一个新的 FItemID,看似数据进去了,但所有历史单据的关联全部断裂。表现出来就是:物料档案能看到,但报表查不到、成本算不出、单据打开报错。这种损坏是不可逆的,只能回滚重来。

FNumber 与 FItemID 的关系

FNumber 是业务编码,人看的是它;FItemID 是内码,系统认的是它。目标账套里可能已经存在同编码但不同 FItemID 的物料,这时候既不能直接 INSERT(主键冲突),也不能盲目 UPDATE(业务含义可能完全不同)。正确做法是先做查重,输出「编码相同但内码不同」的清单,人工判断是同一个物料还是编码复用,再决定是更新还是跳过。

同步顺序不能错

这是最容易踩的坑。物料表的 FParentID 指向分类表,FUnitID 指向计量单位。如果先同步物料再同步单位,物料的单位引用就指向不存在的 ID,或者存在但换算率不对。

正确顺序是:先同步计量单位组,再同步计量单位(组的 ID 要用目标账套的映射,不是源账套的),然后同步物料分类树,最后同步物料。每一层都要用 FNumber 做跨账套映射,不能直接用源账套的内码。

增量判断要双保险

只用 FDate 会漏数据:批量导入时 FDate 可能全是同一秒,历史数据也可能被人工改过。建议用 FInterID 大于目标账套当前最大值,并且 FDate 大于上次同步时间,两个条件同时满足。FInterID 是自增流水号,删记录后会有空缺,所以用大于而不是等于。

必同步的字段

物料内码、编码、名称、规格型号、启用状态、上级分类。特别提醒 FUseStatus:很多同步失败表现为「目标账套物料显示已停用」,原因就是脚本漏了这个字段,源端是启用但目标端默认成了禁用。

上线前必做

在测试账套完整跑一遍,然后抽查十张历史单据能否正常打开、成本能否正常计算。这一步省不得。

K3 WISE 跨账套物料同步:FItemID 是锚点,碰了就断链 示意图


本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。

褚思远

先同步单位再同步物料这个顺序,我们当初就是搞反了,物料的单位引用指向不存在的 ID,排查了两天才发现。还有一点,组 ID 要用目标账套的映射,直接搬源账套内码等于埋雷。

路人0768

这条提醒得及时。早年做跨账套同步图省事,在目标账套重建物料,FItemID 一变历史单据全断,最后整账套回滚。正确姿势是按 FNumber 匹配、保留源 FItemID 直接插入,同步前先备份。辅助属性也要一起带,否则成本对象对不上。

路人1055

FItemID 绝对不能改,这是同步锚点,我们做跨账套物料同步时吃过一模一样的亏。在目标账套重新生成新 ID,档案看得到但报表查不到、成本算不出,这种损坏只能回滚。建议同步前锁住 FItemID 写保护,脚本层禁止任何修改主键的操作。

登录 后参与回复