# 物料库位功能调整设计方案 ## 一、背景 当前系统在新建、编辑物料时会维护物料的默认库位,并在数据库中写入物料与货位的初始关系。该机制会导致物料主档承担库存库位职责,也会在无真实库存的情况下生成 `货位存量 = 0` 的物料货位记录。 本次需求由仓库主管提出。现场正在进行库存盘点,盘点人员需要依据系统库存数据到对应库位核对物料实物数量、批次和状态。但当前系统内的库存库位设置并非由仓库人员在实际入库、上架或盘点业务中选择确认,而是在物料基础资料维护阶段预先设置,导致系统记录的库位与现场实际存放库位不匹配。该问题会直接影响盘点人员按系统数据查找物料,容易出现找不到物料、盘点库位错误、盘点差异无法快速定位等情况,进而影响库存准确性和仓库现场作业效率。 因此,本次功能调整的核心诉求不是单纯修改一个库位字段,而是将“物料标准库位”从物料主档维护中剥离,把库位确认权回归到仓库实际业务动作中,由仓库人员在入库、上架、调拨、盘点等场景按现场真实情况选择和确认库位,确保系统库存库位能够反映实际库存位置,为当前及后续库存盘点提供可靠的数据依据。
本次调整目标是: 1. 物料主档不再设置库位。 2. 物料标准维护组件不再编辑物料库位。 3. 入库时根据真实库存情况选择库位。 4. 有现有库存库位时优先显示已有库存库位;没有库存库位时显示全库位。 5. 盘点人员后续依据系统库存查询结果进行盘点时,系统库位应尽可能来源于仓库真实业务记录,减少基础资料预设库位造成的现场偏差。 ## 二、现状核对 ### 2.1 前端现状 物料维护入口: - `src/views/TechnologyCenter/MaterialMaintain/index.vue` - `src/views/TechnologyCenter/MaterialQuery/index.vue` 原逻辑: - 新增/编辑物料弹窗中存在“库位”下拉。 - 新增物料默认设置 `form.库位 = 2514`。 - 表单规则要求库位必填。 - 新增/编辑提交时传递 `货位流水号`。 物料库位维护入口: - `src/views/WarehouseManagement/MaterialLocation/index.vue` 原逻辑: - 页面查询物料主档库位。 - 行内可编辑 `货位流水号`。 - 点击确定后调用 `仓储管理_物料库位_编辑数据`。 入库入口: - `src/views/WarehouseManagement/PurchasePartsStorage/index.vue` 原逻辑: - 采购入库、自制件入库行内可选择库位。 - 已有 `getInventoryLocateName(row)` 方法,可按物料查询库存库位。 - 但无库存库位时没有完整 fallback 到全库位的闭环。 ### 2.2 数据库现状 已核对相关存储过程: - `物料管理_增加` - `物料管理_增加新` - `物料管理_编辑` - `仓储管理_物料库位_编辑数据` - `仓储管理_库存盘点_查询` - `仓储管理_库位_查询` 当前数据库行为: - `物料管理_增加`、`物料管理_增加新` 会把 `@货位流水号` 写入 `库存管理_物料主文件_基本.货位流水号`。 - 新增物料后会向 `库存管理_物料与货位对照表` 插入一条 `货位存量 = 0` 的记录。 - `物料管理_编辑` 会更新 `库存管理_物料主文件_基本.货位流水号`,并同步更新 `库存管理_物料与货位对照表.货位流水号`。 - `仓储管理_物料库位_编辑数据` 会同时更新物料主文件和物料货位对照表。 ## 三、设计原则 1. 物料主档只维护物料基础属性,不再维护库存库位。 2. 库位选择只发生在入库、调拨、盘点等库存业务动作中。 3. 入库库位选择以真实库存记录优先。 4. 保留旧接口参数兼容,降低前后端发布顺序风险。 5. 不删除历史库位数据,避免影响历史库存、出入库记录和查询报表。 6. 仓库库位数据应以仓库人员实际作业确认结果为准,避免由技术、基础资料维护环节提前指定库位。 7. 当前库存盘点期间,优先保障盘点人员能够通过系统库存数据定位真实库位;对历史不准确库位数据不做批量自动修正,防止误改真实库存,需要结合盘点结果逐步校正。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ## 四、前端改造方案 ### 4.1 物料维护页面 涉及文件: - `src/views/TechnologyCenter/MaterialMaintain/index.vue` - `src/views/TechnologyCenter/MaterialQuery/index.vue` 改造内容: - 删除新增/编辑弹窗中的“库位”下拉控件。 - 删除 `form.库位` 字段。 - 删除 `库位` 必填校验。 - 删除 `inventoryLocation` 数据源。 - 删除 `getInventoryLocation()` 方法及页面初始化调用。 - 删除新增时默认 `form.库位 = 2514`。 - 编辑物料时不再从行数据读取 `货位流水号` 回填到表单。 - 新增/编辑提交时保留 `货位流水号 = null` 参数,用于兼容旧存储过程参数要求。 说明: 前端不再提供物料库位维护入口。保留 `货位流水号 = null` 是为了在数据库脚本未执行或前后端不同步发布时,减少接口缺参风险。 该调整可以避免非仓库人员在维护物料基础资料时预先指定库位,减少后续库存盘点时系统库位与实物库位不一致的问题。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ### 4.2 物料库位维护页面 涉及文件: - `src/views/WarehouseManagement/MaterialLocation/index.vue` 改造内容: - 删除行内库位下拉编辑。 - 删除编辑、确定、取消按钮。 - 删除双击行切换编辑状态。 - 删除 `storageLocation` 数据源。 - 删除 `getLocateName()`。 - 删除 `confirmEdit()`,不再调用 `仓储管理_物料库位_编辑数据`。 - 删除页面中不可达的“增加库位”弹窗和新增库位方法。 - 页面保留查询能力,用于查看历史物料库位数据。 说明: 该页面调整为只读查询页。后续如果确认不再需要查看历史标准库位,可在菜单侧隐藏该页面。 只读保留的目的,是在盘点期间为仓库主管和盘点人员提供历史库位追溯依据,便于判断差异来源是历史标准库位错误、实际移库未更新,还是入库时选择库位不准确。该页面不再允许直接修改库位,避免绕过真实库存业务动作造成新的库位偏差。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ### 4.3 入库库位选择 涉及文件: - `src/views/WarehouseManagement/PurchasePartsStorage/index.vue` 改造内容: - 页面创建时加载全库位列表。 - `getLocateName()` 返回 Promise,并统一生成 `{ label, name, value }` 结构。 - `getInventoryLocateName(row)` 按当前物料名称、图号或型号查询 `仓储管理_库存盘点_查询`。 - 查询结果中只保留库存大于 0 的库位。 - 如果存在库存库位: - 当前行 `locateName` 使用库存库位列表。 - 下拉显示格式为 `货位名称(库存:数量)`。 - 设置 `locateSource = 'inventory'`。 - 如果不存在库存库位: - 当前行 `locateName` 使用全库位列表。 - 设置 `locateSource = 'all'`。 - 入库提交逻辑保持不变,继续校验并提交 `货位流水号组`。 业务要求: - 仓库人员办理采购入库、自制件入库时,必须根据现场实际上架库位选择系统库位。 - 系统存在该物料真实库存库位时,优先引导仓库人员选择已有库存库位,便于同物料集中存放和后续盘点。 - 系统不存在该物料真实库存库位时,允许从全库位中选择本次实际上架库位,形成后续库存查询和盘点依据。 - 盘点发现实物库位与系统库位不一致时,应通过盘点调整、移库或后续明确的库存业务流程修正,不再通过物料基础资料维护直接改库位。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ## 五、后端改造方案 新增 SQL 脚本: - `sql/移除物料标准库位维护.sql` 脚本调整对象: - `物料管理_增加` - `物料管理_增加新` - `物料管理_编辑` 调整内容: - 保留 `@货位流水号` 参数,兼容旧调用。 - 新增物料时不再写入 `库存管理_物料主文件_基本.货位流水号`。 - 新增物料时不再向 `库存管理_物料与货位对照表` 插入 `货位存量 = 0` 的初始记录。 - 编辑物料时不再更新 `库存管理_物料主文件_基本.货位流水号`。 - 编辑物料时不再更新 `库存管理_物料与货位对照表.货位流水号`。 不调整内容: - 入库过程仍继续接收 `货位流水号组`。 - 历史物料主档中的 `货位流水号` 暂不清理。 - 历史 `库存管理_物料与货位对照表` 中的 0 库存记录暂不清理。 后端调整边界: - 本次不批量重算历史库存库位,避免在盘点期间引入新的数据扰动。 - 对已产生实际库存的物料库位关系,以库存业务单据和库存现存量记录为准。 - 后续若仓库主管确认需要清理历史 `货位存量 = 0` 的无效库位记录,应另行制定数据清理脚本,并在盘点结束或盘点数据确认后执行。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ## 六、入库库位选择流程 ```mermaid flowchart TD A["用户点击入库行的库位按钮"] --> B["按物料名称和图号查询库存盘点"] B --> C{"是否存在库存大于 0 的库位"} C -->|是| D["显示已有库存库位"] C -->|否| E["显示全库位"] D --> F["用户选择库位"] E --> F F --> G["写回行数据: 货位流水号、货位名称"] G --> H["入库提交"] H --> I["提交货位流水号组"] ``` ## 七、影响范围 ### 7.1 受影响页面 - 技术中心物料维护 - 技术中心物料查询 - 仓储管理物料库位 - 仓储管理采购入库 - 仓储管理自制件入库 - 库存盘点人员使用的库存查询和盘点核对结果会间接受益于本次调整,后续新增库存的系统库位将更贴近现场真实库位。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ### 7.2 受影响数据库对象 - `库存管理_物料主文件_基本` - `库存管理_物料与货位对照表` - `库存管理_外购件累计库存` - `物料管理_增加` - `物料管理_增加新` - `物料管理_编辑` ### 7.3 不受影响业务 - 已有库存查询。 - 已有入库记录查询。 - 已有出库、领料、调拨中基于真实库存记录的库位逻辑。 - 库位基础资料维护页面 `LocationManagement`。 - 当前历史库存数量不因本次调整自动变化。 - 当前盘点差异数据不因本次调整自动生成或自动消除。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ## 八、发布步骤 1. 发布前端代码。 2. 执行 `sql/移除物料标准库位维护.sql`。 3. 清浏览器缓存后进入系统验证。 4. 验证物料新增、编辑不再出现库位字段。 5. 验证物料库位维护页不可编辑。 6. 验证采购入库和自制件入库的库位选择逻辑。 7. 由仓库主管或指定仓库人员抽取正在盘点的物料进行核对,确认系统库存库位、入库选择库位和现场实际库位的对应关系。 8. 对盘点期间发现的历史库位不一致数据,记录物料名称、图号、系统库位、实际库位和差异原因,作为后续数据清理或库存调整依据。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 推荐前后端同时发布。若不能同时发布,先发布后端脚本更稳妥。 ## 九、验证清单 ### 9.1 物料新增 - 新增弹窗不显示库位。 - 新增物料可正常保存。 - 新增后 `库存管理_物料主文件_基本.货位流水号` 不写入新默认库位。 - 新增后不生成 `货位存量 = 0` 的物料货位对照记录。 ### 9.2 物料编辑 - 编辑弹窗不显示库位。 - 修改名称、图号、单位、材料、类型、物料库等字段可正常保存。 - 编辑时不改变物料已有真实库存库位。 ### 9.3 物料库位查询 - 页面可正常按物料名称、图号、库位查询。 - 页面不显示编辑按钮。 - 双击行不进入编辑状态。 - 不再调用 `仓储管理_物料库位_编辑数据`。 ### 9.4 入库库位选择 - 物料已有库存库位时,下拉只显示已有库存库位。 - 下拉显示库存数量。 - 物料没有库存库位时,下拉显示全库位。 - 未选择库位时不允许入库。 - 选择库位后采购入库可正常提交。 - 选择库位后自制件入库可正常提交。 ### 9.5 盘点业务核对 - 盘点人员按系统库存查询结果查看物料库位时,可以明确区分历史库位数据和后续真实入库库位数据。 - 仓库人员新办理入库后,库存查询或盘点查询中的库位应与入库时选择的实际库位一致。 - 对无真实库存的物料,不应因为物料新增自动生成 `货位存量 = 0` 的库位记录干扰盘点查询。 - 对现场已发现系统库位与实际库位不一致的物料,应形成差异记录,不通过物料主档编辑直接修正。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ## 十、风险与回退 ### 10.1 风险 - 若后端脚本未执行,前端传 `货位流水号 = null` 时,旧过程仍可能向物料主档或对照表写入空库位记录。 - 历史 0 库存物料货位记录仍存在,若库存盘点视图没有过滤库存数量,可能仍被查询出来。 - 部分报表如依赖物料主档默认库位,展示结果会从“标准库位”转为“历史库位”或空值。 - 当前盘点期间已经暴露的历史库位不匹配问题,不会因本次功能调整自动修复,需要仓库结合盘点结果进行后续校正。 - 若仓库人员入库时未按实际上架位置选择库位,仍可能继续产生新的系统库位与实际库位不一致问题,因此需要同步明确仓库操作要求。 备注:修改人:Ld 修改时间:2026-06-29 13:11:25 ### 10.2 回退方式 - 前端回退相关 Vue 文件。 - 数据库可用脚本备份中的原存储过程定义恢复。 - 回退后重新构建并发布前端。