跳到主要内容

版本更新历史

每个版本发布时间 + 主要改动。最新版本在最上面。

升级方式:左侧菜单 AboutCheck for Updates → 按提示安装。Plugin 端 .app 由 Solution Provider 帮你装。


v1.6.5 — 2026-05-04

多 GRN per PO + Delta 计算 + Master/Detail 视图

一张 PO 可以有多张 GRN

  • 之前每张 PO 只对应一张 GRN,partial receipt 时容易丢数据。
  • 现在 每个 RECEIVING / RECEIVED / CLOSED webhook 都建一张新 GRN,只含本次新增的 delta(cumulative - 之前已 booked)。
  • 重传 webhook 自动跳过(delta = 0)—— 没有重复入库。

修复重大 bug

  • EA vs UOM 单位错误PODTL.TransferedQty 实际存的是 EA,之前误当 PO line UOM 比较 → delta 计算混乱。现在统一用 EA 比较。
  • GRN 不更新 PODTL.TransferedQtygrn.AddDetail() 不会自动建 PO ↔ GRN 链接,所以 AutoCount 不更新已收数。现在 grn.Save() 后手动 UPDATE PODTL.TransferedQty += 实际 SmallestQty,下次 webhook 算 delta 才能基于准确基线。
  • Qty 四舍五入漂移:用 PO line UOM 写入时 AutoCount 按 item decimal places round Qty。现在回读 GRDTL.SmallestQty 用实际值更新 PODTL,保证 PO ↔ GRN ↔ inventory 三边一致。

Webhook 数据来源更稳健

  • WMS 有时把 cumulative 留在 asnLineItems.quantity = 0,把实际接收量写在 asnItemReceiveDetails(per-event RV records)。
  • 新逻辑 sum 两个来源的 receiveQty 取 MAX,不管 WMS 哪边填了都能拿到正确累计。

Plugin UI: PO → ASN Sync master/detail

  • 主行:PO + GRNs count 列
  • ▶ 展开看每张 GRN:GRN# (View button) / WMS Status / GRN Date / Created By / Items / Webhook At

移除

  • 旧的 "DUPLICATE_SKIPPED" 防御机制(v1.6.3 加的)—— 用 delta 逻辑天然替代。

v1.6.4 — 2026-05-03

修复 plugin 卡顿

  • M009 schema migration:自动加上 Z_WmsPickingNoteStatus(WmsSyncEnabled) 的 filtered index。
    • 之前 PickingNoteWorker 每 15 秒 poll 一次都要全表扫描,在 50K+ 行的客户 DB 上一锁就是几十秒,plugin UI 同时读这些表也跟着卡。
    • 现在 worker 只摸索引里的"正在同步"小子集,几毫秒搞定。Plugin 加载 Picking List 不再卡。
    • 客户无感知:API 启动那一瞬间自动建好 index(< 1 秒),不影响数据。

v1.6.3 — 2026-05-02

Sync Log 大改 + 防重复 GRN + Retry Failed 按钮

Sync Log 增强

  • View Payload 对话框:选中行点 View Payload(或双击行)打开弹窗,pretty-print 完整 Request + Response JSON,每个面板有 Copy 按钮。
  • Ctrl + Alt + 0 cleanup panel:在 Sync Log tab 按这个组合键弹出"Cleanup & Retention"对话框,可以按日期范围 + Type 批量 Clear Payloads(保留行)或 Delete Rows(硬删除)。
  • 自动按天清理PayloadRetentionDays 设置控制(默认 90 天),每小时 API 自动 NULL 出超过 N 天的 payload 字段,bound DB 体积。
  • 所有 worker 现在都写完整 payload:之前只有 PoTransferController + ItemSync 写 payload;现在 PickingNoteWorker / AsnCreateWorker / CancellationWorker / AsnCancellationWorker 也全部写。

防重复 GRN

  • WmsCallbackController.HandleAsnStatus:创建 GRN 之前先检查 Z_WmsAsnReceivingPODTL.TransferedQty
  • 之前 WMS 重发 webhook(网络重传、partial→complete、per-SKU partial deliveries)会每次都建一张新 GRN。现在跳过重复,把 callback 行链接到原始 GRN。
  • 修复 source 标注:Z_WmsAsnReceivingPODTL.TransferedQty,让审计清晰。

新增 Retry Failed 按钮

  • 三个 tab 各加一个:
    • Item Code Sync → "Retry Failed Items"(按勾选行)
    • PO → ASN Sync → "Retry Failed PO Pushes"(按 Ctrl+Click 选中行)
    • Picking List Sync → "Retry Failed Picking Notes"(按勾选行)
  • 都有确认对话框列出要重试的 ID。只动选中的行,不会一键 retry 所有。

AsnCreateWorker 不再无限重试

  • 失败的 PO 现在 park 为 WmsStage = 'Failed',下一轮 poll 跳过。
  • 之前每 15 秒都重试,PO 数据有问题会一直骚扰 WMS。
  • 用户必须看 Sync Log 找出失败原因,修复后用 Retry Failed PO Pushes 主动重试。

其他

  • 所有 Sync Now 按钮加确认对话框(Picking / Item Code / Item Type)。
  • Item Code Sync Now 上限从 5 提到 20
  • Sync Log tab 列标题修复(z-order bug 导致表头被遮)。

v1.6.2 — 2026-05-02

支持大 PO + B2B 订单类型 + Picking Note SQL 超时修复

  • WmsGatewayClient:替换 FormUrlEncodedContent 为手动 byte-identical StringContent
    • FormUrlEncodedContent 内部有 ~65520 字符的 URI 长度上限,超过 200+ 行 line items 的 PO 推送会报 "Invalid URI: The Uri string is too long"。
    • 现在 1000+ 行的 PO 也能推。
  • PickingNoteWorker:OrderType 改为 B2B,加 serviceLevel = LTL
    • Melodies 客户的仓库流程需要这两个字段,否则后续操作(点 Ship 按钮)会失败。
  • PickingNoteWorker SQL 超时:把 db.GetDataTable 换成原生 SqlCommand + CommandTimeout = 120
    • 客户 DB 有 50K+ Z_PickingNote 行 + 几百万 detail 行,30 秒默认超时不够。

v1.6.1 — 2026-05-02

PO Transfer 跳过本地 item 检查 + 完整 payload 日志

  • PoTransferController:取消推送前的 item-exists 预检查。
    • 客户偏好让 WMS 自己返回错误(更权威 + 实时)。
    • WMS 错误信息(含完整 request + response)写入 Z_WmsSyncLog,方便排查。
  • 推送失败时,整张 request + response payload 落到 sync log。

v1.6.0 — 2026-05-02

导航与 UI 大整理

默认菜单顺序变了

  • Operation Menu 顺序:Item Code Sync → PO → ASN Sync → Picking List Sync → Cancel Picking Job → Sync Log → About
  • Item Type SyncUOM Names Sync 不再是独立菜单 —— 改为 Item Code Sync 页右上角的两个按钮(弹窗形式)。

默认行为变更

  • Picking List Sync 默认 manual:Auto-sync new 默认 OFF,由 Ctrl + Alt + 0 弹窗启用(高级选项)。
  • Cancel Picking Job 默认只读:行不能勾选,必须 Ctrl + Alt + 0 进入"可选模式"才能勾。
  • 打开主窗口默认停在 Item Code Sync(之前是 Picking List)。

搜索功能

  • 每个 tab 顶部都有 Search 文本框 + Filter 按钮。
  • Enter 键 = 触发 Filter
  • 搜索是"任意列匹配":item code、PN 号、PO 号、客户名、driver、备注……都可以。

页面标题

  • Header 上动态显示当前页面("WMS Sync Hub / Item Code Sync"),不再只是 logo。

Picking List 列宽优化

  • Picking Note 列宽缩小 70%,腾出空间给其他信息。
  • ItemCode 列宽缩小 20%。

v1.5.0 — 2026-05-02

UOM 推送变 opt-in + 单行触发按钮 + 完整 sync log 审计

  • PackageInfoSyncStarted master switch:UOM 描述推送(Phase 2)默认 OFF,必须显式启用。
  • Push UOM (focused) 按钮:Item Code Sync 页右上角,针对当前光标行单独推送 UOM。前提:item 必须已经同步过(LastSyncDate 不为空)。
  • Z_WmsSyncLog 审计:UOM_PUSH 类型的记录写完整 payload。

v1.4.0 — 2026-05-01

BAS Packaging Description Sync (Phase 2 of Item Sync)

  • 新增 WmsBasService:通过 BAS direct API(gwmsth.best-inc.com)登录拿 token + cookie。
  • ItemSyncWorker 加 Phase 2:Phase 1(GLINK BatchOperateItem 推 SKU)成功后,自动调 BAS API 把 AutoCount UOM 名字(UN / CT 等)覆盖到 WMS packaging description。
  • 1-5 秒随机 jitter + 每 cycle max 10 个 item,防止打死 BAS API。

v1.3.x — 2026-05-01

Item Type Sync via WMS BAS direct API

  • v1.3.0:后端 ItemTypeSyncWorker,通过 BAS API 把 AutoCount.ItemType 推到 WMS 商品分类。
  • v1.3.1:硬化 + plugin UI 加 Start Sync 按钮。
  • v1.3.2:修复 navBar inject bug + Sync Now 重试 fail / never-seen 的行。

v1.2.x — 2026-05-01 / 2026-04-27

早期功能迭代

  • v1.2.3:Item Sync UX 大改 + worker 硬化 + 切换到 AED_LS_01 数据库。
  • v1.2.4:AutoCount resolver 跳过 backup 文件夹(_bk20250207 等),加 appsettings 覆盖路径。
  • ShipFrom 支持 StreetLine2 + StreetLine3(长地址)。
  • DPAPI 自动加密 SqlPassword + LoginPassword(service 启动时)。

早期版本 — 2026-04-24 / 25

基础设施

  • API 用 Topshelf 包装为 Windows Service。
  • About 对话框 + Check-for-Updates(WmsHubUpdater + S3 release pipeline)。
  • Plugin 端 ErrorLogger 接到 hot paths + footer 版本指示器。

查看最新公告

有时候发布间隔很短(v1.6.0 到 v1.6.4 同一天发了 5 个版本)—— 这是因为客户实测中发现的问题陆续修复。保持 API 自动更新打开就不会落后。