ERP/FIX_SUMMARY.md
zzh c11a70fdf2 修复采购需求计算和返修记录上传功能
- 修复采购需求计算时工厂匹配问题
  - calculate_purchase_demand: 添加工厂参数并按工厂过滤期初库存
  - calculate_all_purchase_demand: 添加工厂参数并按工厂过滤期初库存
  - calculate_purchase_demand_from_orders: 修复INSERT语句字段顺序
  - recalculate_purchase_demand: 添加工厂参数并按工厂过滤期初库存

- 修复返修记录上传页面按钮无响应问题
  - 修正isUploadPage判断逻辑,使事件监听器正确绑定
  - 图片上传、提交、清空按钮现在可以正常工作

- 添加数据库到Git仓库
  - 修改.gitignore允许server/data.db被提交
  - 包含所有生产数据和配置
2026-04-08 11:24:26 +08:00

2.0 KiB
Raw Blame History

🎯 问题修复总结

问题描述

计算铨宝采购需求时,期初库存显示的是友辉的数据。例如:

  • 铨宝的"667.5支架 TS-1166VW"期初库存应该是 0但显示 995友辉的库存
  • 铨宝的"0402B102K500NT"期初库存应该是 0但显示 1243友辉的库存

根本原因

/api/purchase-demand/recalculate 接口在查询期初库存时,只用了 material_code,没有按 factory 过滤:

# 错误的查询第7408行
c.execute('SELECT stock_qty, min_package as stock_min_package FROM initial_stock WHERE material_code=?', (material_code,))

当友辉和铨宝有相同的物料编码时,这个查询会返回第一个匹配的记录(通常是友辉的),导致铨宝的采购需求使用了友辉的库存数据。

修复方案

在查询时添加工厂过滤条件:

# 正确的查询第7409行
factory = item['factory'] or '友辉'  # 从采购需求记录中获取工厂字段
c.execute('SELECT stock_qty, min_package as stock_min_package FROM initial_stock WHERE material_code=? AND factory=?', (material_code, factory))

已修复的接口

  1. /api/purchase-demand/calculate - 计算单个产品采购需求
  2. /api/purchase-demand/calculate-all - 计算所有产品采购需求
  3. /api/purchase-demand/calculate-from-orders - 从客户订单计算采购需求
  4. /api/purchase-demand/recalculate - 重新计算现有采购需求(这个是你使用的接口

验证步骤

  1. 重启服务器:systemctl restart prod-mgmt
  2. 在前端选择"铨宝"工厂
  3. 选择产品(如"AP05商超")并输入数量
  4. 点击"重新计算"
  5. 检查采购需求列表中的期初库存字段:
    • 铨宝的"667.5支架 TS-1166VW"应该显示 0
    • 铨宝的"0402B102K500NT"应该显示 0
    • 铨宝的"0402B104K160NT"应该显示 30124

其他修复

  • 期初库存导入:支持同一物料在不同工厂独立存在
  • 数据备份恢复:导入/删除前自动备份,可一键恢复