做过 K3 WISE 跨账套基础资料同步的人都知道,物料同步是最容易埋雷的地方。核心只有一句话:FItemID 是全局唯一主键,绝对不能修改,它是同步的锚点。
为什么不能改
K3 的单据、库存、成本、凭证,全部通过 FItemID 关联物料。你在目标账套里重新生成一个新的 FItemID,看似数据进去了,但所有历史单据的关联全部断裂。表现出来就是:物料档案能看到,但报表查不到、成本算不出、单据打开报错。这种损坏是不可逆的,只能回滚重来。
FNumber 与 FItemID 的关系
FNumber 是业务编码,人看的是它;FItemID 是内码,系统认的是它。目标账套里可能已经存在同编码但不同 FItemID 的物料,这时候既不能直接 INSERT(主键冲突),也不能盲目 UPDATE(业务含义可能完全不同)。正确做法是先做查重,输出「编码相同但内码不同」的清单,人工判断是同一个物料还是编码复用,再决定是更新还是跳过。
同步顺序不能错
这是最容易踩的坑。物料表的 FParentID 指向分类表,FUnitID 指向计量单位。如果先同步物料再同步单位,物料的单位引用就指向不存在的 ID,或者存在但换算率不对。
正确顺序是:先同步计量单位组,再同步计量单位(组的 ID 要用目标账套的映射,不是源账套的),然后同步物料分类树,最后同步物料。每一层都要用 FNumber 做跨账套映射,不能直接用源账套的内码。
增量判断要双保险
只用 FDate 会漏数据:批量导入时 FDate 可能全是同一秒,历史数据也可能被人工改过。建议用 FInterID 大于目标账套当前最大值,并且 FDate 大于上次同步时间,两个条件同时满足。FInterID 是自增流水号,删记录后会有空缺,所以用大于而不是等于。
必同步的字段
物料内码、编码、名称、规格型号、启用状态、上级分类。特别提醒 FUseStatus:很多同步失败表现为「目标账套物料显示已停用」,原因就是脚本漏了这个字段,源端是启用但目标端默认成了禁用。
上线前必做
在测试账套完整跑一遍,然后抽查十张历史单据能否正常打开、成本能否正常计算。这一步省不得。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。