Files
JY1.0/docs/库房管理/库房管理方案数据流.md

12 KiB
Raw Blame History

库房管理方案数据流

1. 数据流总览

库房管理模块的数据流以 库存现存量 为当前结果表,以 库存变动流水 为全过程追溯表。所有入库、出库、移库、盘点确认都不能直接只改现存量,必须同步写入业务单据和库存流水。

flowchart LR
  A["库房主数据"] --> C["库位主数据"]
  B["物料主文件"] --> D["库存现存量"]
  C --> D
  E["入库单"] --> P1["库存增加过程"]
  F["出库单"] --> P2["库存扣减过程"]
  G["移库单"] --> P3["库存移库过程"]
  H["盘点单"] --> P4["盘点确认过程"]
  P1 --> D
  P2 --> D
  P3 --> D
  P4 --> D
  P1 --> L["库存变动流水"]
  P2 --> L
  P3 --> L
  P4 --> L
  D --> Q1["物料综合查询"]
  D --> Q2["物料正向查询"]
  D --> Q3["库位逆向查询"]
  L --> Q4["库存追溯查询"]

2. 核心数据对象

数据对象 数据来源 写入时机 主要用途
库房主表 库房管理页面 新增、编辑库房时 定义仓储空间一级单位
库位主表 库位管理页面 新增、编辑库位时 定义物料实际存放位置
物料主文件 现有物料维护 物料建档时 提供物料编码、名称、图号、规格、单位
入库单主表/明细表 入库页面 入库提交成功时 记录入库业务来源
出库单主表/明细表 出库页面 出库提交成功时 记录出库业务来源
移库单主表/明细表 移库页面 移库提交成功时 记录库位之间库存移动
盘点单主表/明细表 盘点页面 创建盘点、录入实盘、确认盘点时 记录账面、实盘和差异
库存现存量 公共库存过程 入库、出库、移库、盘点确认时 查询当前库存结果
库存变动流水 公共库存过程 每次库存数量变化时 追溯库存变化原因

3. 主数据流

主数据先建立库房,再建立库位,物料主文件沿用现有数据。库存业务发生前,库位必须归属一个有效库房。

flowchart TD
  A["维护库房"] --> B["写入 仓储管理_库房主表"]
  B --> C["维护库位"]
  C --> D["写入 仓储管理_库位主表"]
  E["现有物料维护"] --> F["库存管理_物料主文件_基本"]
  D --> G["入库/出库/移库/盘点可选择库位"]
  F --> G

数据规则:

  1. 库位主表.库房流水号 必须关联 库房主表.库房流水号
  2. 同一库房下 库位编号 不允许重复。
  3. 停用库位不允许在新业务中选择。
  4. 已有库存的库位不允许直接删除。

4. 入库数据流

入库数据流从入库页面开始,先形成入库单据,再调用公共库存增加过程,最后更新库存现存量并写流水。

sequenceDiagram
  participant UI as 入库页面
  participant API as MESCommonBase.ashx
  participant SP as 入库存储过程
  participant ADD as 仓储管理_库存_增加
  participant STOCK as 库存现存量
  participant LOG as 库存变动流水

  UI->>API: 提交物料、批次、库房、库位、入库数量
  API->>SP: name=仓储管理_入库_增加
  SP->>SP: 写入入库单主表/明细表
  SP->>ADD: 调用库存增加过程
  ADD->>STOCK: 存在则累加,不存在则新增
  ADD->>LOG: 写入变动类型=入库,数量为正数
  ADD-->>SP: 返回变动后库存
  SP-->>API: 返回成功
  API-->>UI: 刷新入库记录和库存查询

入库关键字段:

字段 去向
物料流水号 入库明细表、库存现存量、库存变动流水
库房流水号 入库明细表、库存现存量、库存变动流水
库位流水号 入库明细表、库存现存量、库存变动流水
批次编号 入库明细表、库存现存量、库存变动流水
入库数量 入库明细表,库存流水正数
入库单号 入库主表,库存流水业务单号

5. 出库数据流

出库必须先查询可用库存,再指定具体库位扣减。后端以数据库当前库存为准重新校验,不能只相信前端显示数量。

sequenceDiagram
  participant UI as 出库页面
  participant QUERY as 可用库存查询
  participant API as MESCommonBase.ashx
  participant SP as 出库存储过程
  participant SUB as 仓储管理_库存_扣减
  participant STOCK as 库存现存量
  participant LOG as 库存变动流水

  UI->>QUERY: 按物料查询可用库位库存
  QUERY-->>UI: 返回库房、库位、批次、可用数量
  UI->>API: 提交出库库位和出库数量
  API->>SP: name=仓储管理_出库_增加
  SP->>SP: 写入出库单主表/明细表
  SP->>SUB: 调用库存扣减过程
  SUB->>STOCK: 锁定库存并校验可用数量
  SUB->>STOCK: 扣减库存数量
  SUB->>LOG: 写入变动类型=出库,数量为负数
  SP-->>API: 返回成功或库存不足
  API-->>UI: 刷新出库记录和库存查询

出库控制点:

  1. 出库数量必须大于 0。
  2. 出库数量不能超过数据库当前可用库存。
  3. 同一物料多库位时,必须传入 库位流水号库存流水号
  4. 库存扣减后为 0 时,建议保留库存现存量记录,查询默认过滤 0 库存。

6. 移库数据流

移库是同一事务内完成“原库位扣减”和“目标库位增加”。前端不能拆成两个接口。

flowchart TD
  A["选择原库存记录"] --> B["输入移库数量"]
  B --> C["选择目标库房/目标库位"]
  C --> D["提交移库单"]
  D --> E["写移库单主表/明细表"]
  E --> F{"原库位库存是否足够"}
  F -->|否| X["回滚并提示库存不足"]
  F -->|是| G["原库位库存减少"]
  G --> H["目标库位库存增加"]
  H --> I["写库存流水:移出"]
  H --> J["写库存流水:移入"]
  I --> K["提交事务"]
  J --> K

移库流水规则:

流水 变动类型 库位 数量
第一条 移出 原库位 负数
第二条 移入 目标库位 正数

7. 盘点数据流

盘点分为生成账面、录入实盘、确认差异三段。只有确认差异时才改变库存。

flowchart TD
  A["创建盘点单"] --> B["按库房/库位/物料范围读取库存现存量"]
  B --> C["生成盘点明细:记录账面数量"]
  C --> D["盘点人员录入实盘数量"]
  D --> E["系统计算差异数量=实盘-账面"]
  E --> F{"差异是否为0"}
  F -->|是| G["明细标记无差异"]
  F -->|否| H["填写差异原因和处理方式"]
  H --> I["主管确认盘点"]
  I --> J{"差异方向"}
  J -->|盘盈| K["调用库存增加过程"]
  J -->|盘亏| L["调用库存扣减过程"]
  K --> M["写库存流水"]
  L --> M
  G --> N["盘点单已确认"]
  M --> N

盘点数据状态:

阶段 写入表 是否影响库存
创建盘点 盘点单主表、盘点单明细表
录入实盘 盘点单明细表
确认盘盈 库存现存量、库存变动流水 是,增加
确认盘亏 库存现存量、库存变动流水 是,减少

8. 综合查询数据流

综合查询不从单据实时汇总,而是读取 库存现存量,再关联物料、库房、库位,并可继续钻取库存流水。

flowchart LR
  A["查询条件:物料/库房/库位/是否有库存"] --> B["库存现存量"]
  B --> C["关联物料主文件"]
  B --> D["关联库房主表"]
  B --> E["关联库位主表"]
  C --> F["按物料汇总总库存"]
  D --> F
  E --> F
  F --> G["取库存最多库位作为主库位"]
  G --> H["库存综合查询主表"]
  H --> I["点击主库位:库位明细"]
  H --> J["点击物料:库存流水"]

综合查询输出:

输出字段 来源
物料编码、物料名称、图号或型号、规格、单位 物料主文件/库存现存量冗余字段
总库存 库存现存量按物料汇总
主库房、主库位 库存数量最大的库位
库位明细 库存现存量按物料展开
最近变动 库存变动流水

9. 正向查询和逆向查询数据流

9.1 物料正向查询

正向查询回答:某个物料在哪些库位。

flowchart LR
  A["输入物料编码/名称/图号"] --> B["定位物料流水号"]
  B --> C["查询库存现存量"]
  C --> D["关联库房/库位"]
  D --> E["返回库房、库位、批次、库存数量"]

9.2 库位逆向查询

逆向查询回答:某个库位放了哪些物料。

flowchart LR
  A["选择库房/库位"] --> B["定位库位流水号"]
  B --> C["查询库存现存量"]
  C --> D["关联物料主文件"]
  D --> E["返回物料、图号、规格、批次、库存数量"]

10. 数据一致性控制

控制点 说明
单事务 入库、出库、移库、盘点确认必须在数据库事务内完成
防负库存 出库、移库、盘亏都必须重新读取数据库库存并校验
流水必写 只要库存数量变化,就必须写库存变动流水
单据关联 库存流水必须记录业务类型、业务单号、业务主表流水号、业务明细流水号
库位精确 库存扣减必须精确到库位,不能只按物料扣减
0 库存保留 库存为 0 的现存量记录可保留,查询默认过滤
历史追溯 查询当前库存看现存量,查变化原因看库存流水

11. 数据落表顺序

11.1 入库落表顺序

  1. 校验物料、库房、库位、数量。
  2. 写入入库单主表。
  3. 写入入库单明细表。
  4. 调用库存增加过程。
  5. 更新或新增库存现存量。
  6. 写入库存变动流水。
  7. 提交事务。

11.2 出库落表顺序

  1. 校验物料、库位、数量。
  2. 写入出库单主表。
  3. 写入出库单明细表。
  4. 调用库存扣减过程。
  5. 锁定库存现存量并校验可用数量。
  6. 扣减库存现存量。
  7. 写入库存变动流水。
  8. 提交事务。

11.3 移库落表顺序

  1. 校验原库位、目标库位、移库数量。
  2. 写入移库单主表。
  3. 写入移库单明细表。
  4. 锁定原库位库存并扣减。
  5. 更新或新增目标库位库存。
  6. 写入移出流水。
  7. 写入移入流水。
  8. 提交事务。

11.4 盘点确认落表顺序

  1. 读取盘点单明细。
  2. 校验盘点单状态为待确认。
  3. 按明细计算差异。
  4. 无差异只确认明细。
  5. 盘盈调用库存增加过程。
  6. 盘亏调用库存扣减过程。
  7. 写库存变动流水。
  8. 更新盘点单状态为已确认。
  9. 提交事务。

12. 前端页面数据流

flowchart TD
  A["页面 created 初始化"] --> B["读取库房下拉"]
  A --> C["读取启用库位"]
  A --> D["读取库存汇总表"]
  E["用户输入查询条件"] --> F["CreateData 构建 param 字符串"]
  F --> G["ExecDatabase POST MESCommonBase.ashx"]
  G --> H["后端按 name 路由存储过程"]
  H --> I["返回中文字段结果集"]
  I --> J["el-table 展示中文字段"]
  J --> K["点击物料/库位"]
  K --> L["再次查询明细或流水"]

前端传参要求:

参数 来源
UserID Cookie 当前用户
ModularID 当前路由路径
name 中文接口名称
type 查询为 1增删改为 2批量为 7
param key=value&key2=value2 字符串

13. 推荐接口数据流名称

页面动作 name
查询库房 仓储管理_库房_查询
查询库位 仓储管理_库位_查询
入库提交 仓储管理_入库_增加
出库提交 仓储管理_出库_增加
移库提交 仓储管理_库存_移库
创建盘点 仓储管理_库存盘点_创建
录入实盘 仓储管理_库存盘点_实盘_编辑
确认盘点 仓储管理_库存盘点_确认
综合查询 仓储管理_库存_综合查询
物料正向查询 仓储管理_库存_物料正向查询
库位逆向查询 仓储管理_库存_库位逆向查询
库存流水查询 仓储管理_库存_变动流水_查询

修改人:Ld 修改时间:2026-07-29 10:42:45