其他出库单同步策略实战:从旺店通到金蝶云星空的库存单据落地
这个策略解决什么问题
某零售企业在日常运营中,除了销售出库,还有大量非销售性质的领用、调拨、报损、盘亏出库。这类业务在源端电商 WMS 里走「其他出库单」,但在目标端 ERP 的库存模块里需要落成正式的库存单据,以便财务记账、组织间结算与即时库存扣减。两边编码、组织、状态机不一致,手工二次录入既慢又容易错。这条策略的目标就是:把 WMS 中达到「待结算/已完成」状态的其他出库单,按既定规则自动写入 ERP 库存单据,做到一次配置、长期稳定运行。我们在客户现场正是用轻易云数据集成平台(Qeasy)承接了这条链路。
数据流向与字段映射
整体流向是 源(WMS 其他出库单) → 中间层(轻易云) → 目标(ERP 库存单据)。源端按状态 65(待结算)、70(已完成) 增量拉取;中间层做编码映射、字段清洗、批次合并;目标端通过 batchSave 写入。
关键字段对照(源 → 目标):
| 业务含义 | 源端字段(WMS) | 目标端字段(ERP) | 说明 |
|---|---|---|---|
| 业务单编号 | other_out_no | FBillNo | 用 {{other_out_no}} 模板直接带入 |
| 单据类型/原因 | reason | FBillTypeID | 需在映射表里转换为 ERP 的单据类型编码 |
| 库存组织 | warehouse_no(源) | FStockOrgId | 通过仓库-组织映射表转换为组织编码 |
| 领用组织 | 业务字段 | FPickOrgId | 默认与库存组织一致 |
| 库存方向 | 固定值 | FStockDirect | 通常填 0(普通出库) |
| 出库日期 | modified/check_time | FDate | 建议用审核时间作为业务日期 |
| 仓库 | warehouse_no | FStockId | 仓库编码映射 |
| 商品编码 | spec_no | FMaterialId | SKU → 物料编码映射 |
| 数量 | num | FQty | 直接带入,注意单位一致 |
在轻易云上如何配置
第一步,源端接入。 在轻易云里新建源平台连接,选择对应的 WMS 适配器,填写鉴权信息,接口选用 wdt.wms.stockother.outquery.querywithdetail(POST),设置增量字段为 modified 之后,即可按时间窗拉取变更单据。
第二步,目标端接入。 目标平台选 ERP,接口选 batchSave,请求体按 ERP 单据头+单据体的结构拼装。轻易云的写入操作会自动处理分批与重试。
第三步,编码映射集中管理。 这是轻易云客户最常见的应对模式之一:把所有跨系统编码(仓库、组织、商品、单据类型)集中放到一张「码表」里,字段映射直接引用码表。这样后续新增仓库或 SKU,只改码表,不用动策略。
第四步,表头与表体分阶段。 轻易云客户另一种常见模式是:第一阶段先跑通表头,确认单据能落得下来;第二阶段再带表体(明细行)写入。避免一次性把整张单据全部字段都铺开,出问题时定位困难。
第五步,响应处理。 源端 idCheck=true 表示以业务单编号作为幂等键,目标端 batchSave 会回写成功标识,轻易云据此把这条单据标记为「已同步」,避免重复写入。
实施步骤
我们把这个策略的实施拆成三段式调度:
- 增量起点(冷启动)。 全量触发一次,按
modified倒序拉取近 30 天单据,补齐历史数据;跑完后记录起始时间戳。 - 稳态调度。 源端 cron 设为
*/10 7-22 * * *(营业时间每 10 分钟);目标端写入错开 5 分钟,设7-59/10 7-22 * * *,避免双方在同一时刻抢资源。 - 全量兜底。 每周日凌晨低峰期跑一次全量校验,以
other_out_no为主键比对两端单据,差异部分补推。这一步是「增量与全量双轨」模式,轻易云很多客户都这么做,用来兜住任何漏单。
上线路径建议:测试环境跑通 → 预生产跑一周 → 生产灰度,逐步放量。
踩坑复盘
- 状态位选错,单据被推了一半。 早期我们只过滤
70(已完成),结果用户当天领用出库后立刻要看到库存减少,反馈「库存没动」。后来改成65,70两个状态都拉,业务体验立刻好起来。 - 仓库与组织映射漏配,单据一直卡在审核。 源端仓库编码是 WMS 自己的编码体系,目标端要的是 ERP 的组织编码。第一次上线时有一家新仓没进码表,目标端回写「组织不存在」。稳妥的做法是上线前把码表跑一遍校验。
- 数量单位不一致,出库数量翻倍。 WMS 用「件」,ERP 主单位是「盒」,1 盒 = 12 件。映射时一定要带单位换算关系,否则财务对账时数字对不上。这里容易翻车。
- 幂等键冲突,重跑时重复创建。 目标端
idCheck=true必须和FBillNo严格对齐,否则重跑全量时会重复落单。建议在轻易云的策略里把幂等检查单独勾出来做单元测试。 - 业务日期用错字段。 早期用
created(创建时间)作为 ERP 的业务日期,导致单据日期早于实际出库日,影响财务结账。典型错误是选错时间字段,稳妥的做法是用审核时间(check_time)作为业务日期。
适用场景与不适用场景
适用: 非销售性质的出库(领用、调拨、报损、盘亏),需要落到 ERP 库存模块做财务核算和即时库存扣减,源端 WMS 与目标 ERP 都有标准接口的场景。
不适用: 销售出库(走销售出库单策略);跨组织调拨且需要在途管理的(应走调拨单);源端或目标端无标准接口、需要定制开发的场景。