> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alforse.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 存储规则

> Alforse 在库存或车间事务过账时检查的条件，要么以错误阻止事务，要么发出警告并允许用户确认后继续。

**存储规则**是您的公司针对库存和车间事务定义的检查。库存和质量经理用它在错误发生的当下将其拦住，例如物料被放入错误类型的库位，或某个批次过账时缺少编号。

## 规则如何工作

规则在过账时检查。当规则的条件不满足时，它会做两件事之一：**阻止**该事务，或**警告**并允许用户确认后继续。每条规则针对一种目标：**物料**或**工作中心**。

NOTE

规则是只读检查。它们从不修改数值、提供默认值或计算价格；唯一的输出是带有严重度的消息。

### 示例：化学品必须冷藏存放

假设批次化学品绝不能放入常温库位。按如下方式设置的规则可以强制执行：

| 设置 | 值 |
| - | - |
| 目标 | **物料**，筛选为化学品物料组 |
| 表面 | **收货**和 **place** |
| 条件 | `storageUnit.storageTypeId` `eq` 冷藏存储类型 |
| 严重度 | **error** |
| 消息 | `{item.id} must be stored in cold storage` |

现在，将化学品收入任何其他类型的存储单元都会失败，用户会看到该消息，并带有填入的物料 ID。

## 条件

规则所应用的测试是一棵小型**条件树**。它由一个匹配类型和一行或多行组成，每行指定一个字段、一个运算符和一个值。

| 部分 | 选项 |
| - | - |
| **匹配类型** | `all`：每一行都必须成立。`any`：任意一行成立即可。`none`：不得有任何一行成立。 |
| **字段** | 从固定列表中选择。物料信息：`item.type`、`item.replenishmentSystem`、`item.itemTrackingType` 以及自定义字段。存储位置：`storageUnit.storageTypeId` 和 `storageUnit.locationId`。此外还有工作中心信息和该行的 `transaction.quantity`。 |
| **运算符** | 见下表。 |

当条件成立时，规则*通过*。不成立时，则产生一次违规。

### 运算符

| 运算符 | 含义 |
| - | - |
| `eq` / `neq` | 字段等于 / 不等于该值 |
| `in` / `notIn` | 字段的值出现在 / 不出现在列表中 |
| `gt` / `lt` | 字段大于 / 小于该值 |
| `isSet` / `isNotSet` | 字段有值 / 无值 |

### 缺失值

NOTE

当条件的字段**为空**时，该条件不成立，违规信息显示为\*“…is required”\*（……为必填）。唯一的例外是 `isSet` 和 `isNotSet`，它们本来就是用来检测是否为空的。实际上，这使得任何规则同时也成为存在性检查，例如要求在发货过账前必须有批号。

### 消息

在**消息**中放入 `{item.id}` 和 `{transaction.quantity}` 之类的标记，它们会被替换为出错行中的值，因此用户能准确看到是哪一行违反了规则。

## 规则在何处运行

每条规则指定它所把关的**表面**；表面就是一种事务类型。目标决定了可选的表面：

* **物料规则**可在 `receipt`、`shipment`、`stockTransfer`、`warehouseTransfer`、`inventoryAdjustment` 以及库位移动 `place` 和 `pick` 上运行。
* **工作中心规则**可在 `operationStart`、`operationFinish`、`materialIssue` 和 `materialReceive` 上运行。

评估在服务器上过账期间进行，先于任何会计分录或库存移动。因此被阻止的事务不会留下任何痕迹：不会写入任何内容。

## 阻止或警告

| 严重度 | 效果 |
| - | - |
| `error` | 在数据满足规则之前，事务无法过账。 |
| `warn` | 显示消息，用户可以**确认并继续**。 |

NOTE

`error` 无法绕过。`warn` 只会让事务暂停到用户确认为止，此后同一次提交即可过账。警告适用于“您确定吗？”之类的检查，它标记异常情况，而不会使车间停工。

例如，在**库存调整**上设置一条 `warn` 规则，条件为 `transaction.quantity` `gt` `750`，消息为 `Large adjustment — confirm the count`。异常大的盘点数量会被标记，但用户确认警告后即可立即过账。

## 规则适用于哪些行

决定规则检查哪些行有两种方式：

| 方式 | 工作原理 |
| - | - |
| **筛选** | 仅限物料规则。将规则限定在**物料类型**、**物品组**或两者，以 OR（类型或组）或 AND（类型且组）连接。不设筛选则适用于**所有**物料。 |
| **分配** | 在物料的**规则**选项卡中将规则固定到单个物料，或固定到单个工作中心。工作中心规则也可以改为适用于所有工作中心。 |

## 创建规则

1. 前往**库存管理 → 存储规则**并选择**添加规则**。**新规则**表单随即打开。
2. 输入**名称**，并可选填**描述**。保持**启用**开启，规则才会被评估。
3. 选择**严重度**：**错误**会阻止保存，直至问题解决；**警告**允许确认后继续。
4. 限定规则范围。对于物料规则，选择**物料类型**和**物品组**以及如何**合并筛选**；两者都留空则匹配所有物料。对于工作中心规则，如果要覆盖所有工作中心，请开启**适用于所有工作中心**。
5. 选择规则运行的表面。
6. 在**条件**下设置匹配类型，并为每一行字段 / 运算符 / 值使用**添加条件**。
7. 编写规则失败时向用户显示的消息。使用**插入令牌**添加物料 ID 之类的值。
8. 选择**保存**。

已有规则了吗？可在某个物料的**规则**选项卡中将其附加到该特定物料。

### 规则字段

FieldType

<details>
  <summary>**Name**required</summary>

  在列表和分配中标识该规则。最多 120 个字符。
</details>

<details>
  <summary>**Description**</summary>

  为维护规则的人员提供的可选说明。
</details>

<details>
  <summary>**Severity**</summary>

  `error` 阻止；`warn` 要求确认，然后继续。
</details>

<details>
  <summary>**Conditions**</summary>

  一个匹配类型，以及它所组合的由字段、运算符和值构成的各行。
</details>

<details>
  <summary>**Message**required</summary>

  违规时用户看到的内容，最多 500 个字符。`{token}` 占位符会根据该行填充。
</details>

<details>
  <summary>**Surfaces**</summary>

  至少一种事务类型。条件中使用的每个字段都必须存在于所选的每个表面上。
</details>

<details>
  <summary>**Target**</summary>

  `item` 或 `workCenter`。
</details>

<details>
  <summary>**Item filters**</summary>

  物料类型、物品组或两者。留空则规则适用于所有物料。
</details>

<details>
  <summary>**Active**</summary>

  关闭表示保留规则但不评估。
</details>

## 套餐与权限

HEADS UP

您需要 **Business** 套餐。在任何其他套餐上，存储规则界面会显示升级提示，且 Alforse 不会评估任何规则。

从**存储规则**列表添加规则需要设置的创建权限。

## 相关内容

**销售规则**

相同的条件构建器，但应用于报价、销售订单和销售发票行，而非库存。

[Open](https://docs.alforse.com/zh/docs/reference/sales-rules.md)

**物料**

规则最常以物料为目标，按类型、按组或逐个物料。

[Open](https://docs.alforse.com/zh/docs/reference/items.md)

**库存管理**

收货、发货、转移和拣货：这些规则所把关的事务。

[Open](https://docs.alforse.com/zh/docs/reference/inventory.md)

**工作中心**

规则也可以把关工序开始和完成，以及物料领用和接收。

[Open](https://docs.alforse.com/zh/docs/reference/work-centers.md)

**保质期**

第二道库存防线，为追踪库存标注日期并在过期后予以阻止。

[Open](https://docs.alforse.com/zh/docs/reference/shelf-life.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.