> ## 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` 冷藏儲存類型 |
| 嚴重程度 | **錯誤** |
| 訊息 | `{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}` 這類代碼，它們會被替換為失敗那一行的值，讓使用者確切看到是哪一行違反了規則。

## 規則在哪裡執行

每條規則會指定它把關的**作用點（surfaces）**；作用點是一種交易類型。對象決定提供哪些作用點：

* **品項規則**可在 `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>**名稱**required</summary>

  在清單與指派中識別規則。最多 120 個字元。
</details>

<details>
  <summary>**說明**</summary>

  給維護規則的人員的選用背景說明。
</details>

<details>
  <summary>**嚴重程度**</summary>

  `error` 封鎖；`warn` 要求確認，然後繼續。
</details>

<details>
  <summary>**條件**</summary>

  一個比對種類，以及它所組合的欄位、運算子與值的各列。
</details>

<details>
  <summary>**訊息**required</summary>

  違規時使用者讀到的內容，最多 500 個字元。`{token}` 佔位符會由該行填入。
</details>

<details>
  <summary>**作用點（Surfaces）**</summary>

  至少一種交易類型。條件中使用的每個欄位，在所選的每個作用點上都必須存在。
</details>

<details>
  <summary>**對象**</summary>

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

<details>
  <summary>**品項篩選**</summary>

  品項類型、品項群組，或兩者。留空會使規則適用於所有品項。
</details>

<details>
  <summary>**啟用中**</summary>

  關閉表示規則保留但不被評估。
</details>

## 方案與權限

HEADS UP

你需要 **Business** 方案。在任何其他方案上，儲存規則畫面會顯示升級提示，Alforse 不會評估任何規則。

從**儲存規則**清單新增規則，需要設定的建立權限。

## 相關內容

**銷售規則**

相同的條件建構器，套用在報價、銷售訂單與銷售發票行，而非庫存。

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

**品項**

規則最常以品項為對象，依類型、依群組，或一次一個品項。

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

**庫存**

收貨、出貨、移轉與揀料：這些規則把關的交易。

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

**工作中心**

規則也可以把關工序開始與完成，以及發料與收料。

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

**保存期限**

第二道庫存把關，為追蹤庫存標示日期，並在過期後封鎖。

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


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