保质期
Carbon 如何为跟踪库存写入到期日,以及在过期后如何阻止消耗。
保质期决定序列号或批次跟踪的库存何时过期,以及过期后能否继续使用。到期日属于物理的**,因此保质期只适用于和**跟踪的物料。
三个值控制保质期:物料级的策略、跟踪实体的到期日,以及公司级的过期库存规则。
例如,在 180 天策略下收货一个批次,会把其到期日设为 180 天后。超过该日期后,Carbon 会阻止发料到生产订单,除非有权限的用户覆盖该阻止。
日期如何确定:三种模式
物料的保质期策略只有一个模式。NotManaged 是默认值——不跟踪过期,选择它会移除现有策略。其余三种模式各自决定到期日如何计算:
| 模式 | 日期是…… | 适用于 |
|---|---|---|
| 固定时长 | 起始事件 + 天数 | 制造或采购物料 |
| 计算得出 | 所消耗组件的最早到期日 | 制造物料 |
| 收货时设置 | 收货时由操作员录入,不做计算 | 采购物料 |
保质期不是物料上的一个「天数」字段。只有固定时长是天数计数。 计算得出继承其输入中最早的到期日,收货时设置由人工录入供应商印制的日期。三种模式中有两种都不符合「收货日 + N 天」的直觉。
起始时间从何时算
对于固定时长,起始事件取决于物料的来源:
- 制造物料从某个生产订单工序完成(或开始)时起算——可限定到特定的触发工艺(例如巴氏杀菌或包装),并选择之前或之后计时。子装配从其自身工序为自己的批次写日期。
- 采购物料从收货单的过账日期起算(而不是「今天」),再加上配置的天数。
计算得出物料取其消耗的跟踪组件中的最早到期日,因此成品绝不会超过其最短保质期的原料。该最小值是覆盖所有有日期的输入,还是只覆盖自身带保质期策略的输入,由公司的计算输入范围决定:AllInputs(默认)或 ManagedInputsOnly。
策略字段
策略保存在物料的拣货方法上:
到期日只在为空时写入一次。Carbon 绝不会悄悄覆盖批次已有的日期。可以手工覆盖,但必须填写原因,并保留在实体历史中。
过期库存会怎样
公司级的过期实体策略约束所有发料和库存调拨:
| 策略 | 库存超过日期时的效果 |
|---|---|
| 警告 | 允许,但给出警告。 |
| 阻止 | 拒绝。(默认) |
| 带覆盖的阻止 | 拒绝,除非用户提供覆盖原因。 |
过期是强制执行的,不是装饰性的。 默认策略是阻止。消耗或调拨过期批次会被直接拒绝,错误为 "Cannot consume expired tracked entit(y/ies)"。检查在所有消耗或移动库存的地方运行(发料、库存调拨和维护作业),因此无论操作来自办公室还是车间都同样生效。
拣货会考虑 (先到期先出):可用跟踪实体按最早到期优先提供,因此默认先出最老的库存。临近到期警告会在跟踪实体列表中高亮即将到期的批次;在公司设置中设置其提前天数,留空则关闭该标记。
公司设置
在设置 → 库存中设置公司级选项:
AllInputs 或 ManagedInputsOnly。在哪里设置
| 设置 | 位置 |
|---|---|
| 按物料的策略(模式、天数、触发工艺、计时) | 物料的拣货方法(物料 ↔ 地点)下的保质期字段。 |
| 过期实体策略、临近到期天数、默认天数 | 设置 → 库存的保质期区域。 |
| 一次性日期更正 | 跟踪实体上的到期日编辑操作(需填写原因)。 |
只有序列号或批次物料才能设置保质期策略。通用库存和非库存物料没有可承载日期的跟踪实体,因此不适用。