> ## 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 會對規則適用的每一行評估條件：

* 如果條件**成立**，該行通過。
* 如果條件**不成立**，即違反規則，並由其嚴重程度決定結果：**錯誤**會封鎖寫入，**警告**則顯示訊息，讓使用者確認後繼續。

被封鎖的文件不會寫入任何內容，因此被拒絕的行絕不會留下儲存到一半的報價單或訂單。

### 實例：出口管制零件

若要避免管制零件被賣到受限目的地：

1. 將規則的範圍限定在該零件的品項群組。
2. 啟用全部三個表面：**報價單明細**、**銷售訂單明細行**與**銷售發票明細行**。
3. 新增條件 `customer.location.countryCode` `notIn` 您的受限國家清單。
4. 將**嚴重程度**設為**錯誤**，訊息設為 `` `{item.id}` cannot ship to this destination``。

此後，該零件任何送貨國家在清單上的行都會被拒絕，並顯示該訊息，且品項 ID 會自動填入。

## 建立規則

開啟**銷售 → 銷售規則**並建立規則。清單會顯示每條規則的**名稱**、**嚴重程度**、**表面**、**狀態**（啟用中或停用），以及指派給它的**品項**數量。

FieldType

<details>
  <summary>**名稱**required</summary>

  規則的唯一名稱。
</details>

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

  是否評估此規則。關閉可暫停規則而不必刪除。
</details>

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

  規則的選用內部背景資訊。
</details>

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

  **錯誤**（儲存為 `error`）會封鎖儲存，直到問題解決。**警告**（儲存為 `warn`）允許使用者確認後繼續。
</details>

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

  規則涵蓋的品項類型和／或品項群組。留空則涵蓋所有品項。
</details>

<details>
  <summary>**表面**</summary>

  規則檢查哪些銷售文件的行：**報價單明細**、**銷售訂單明細行**、**銷售發票明細行**。
</details>

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

  比對種類，加上一列或多列欄位／運算子／值。
</details>

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

  違規時顯示的文字。支援 `{token}` 插值。
</details>

### 撰寫條件

條件是一棵小型樹狀結構：一個**比對種類**，套用到一列或多列欄位／運算子／值。

| 部分 | 選項 |
| - | - |
| 比對種類 | `all`：每一列都必須成立。`any`：至少一列必須成立。`none`：沒有任何一列可以成立。 |
| 欄位 | 品項資訊：`item.type`、`item.replenishmentSystem`、`item.itemTrackingType`，以及品項自訂欄位。客戶資訊：`customer.customerTypeId`、`customer.customerStatusId`，以及客戶自訂欄位。文件的送貨國家：`customer.location.countryCode`。該行的 `transaction.quantity`。 |
| 運算子 | 例如 `eq`、`neq`、`in`、`notIn`、`isSet`、`isNotSet`、`gt` 與 `lt`。建構器只提供所選欄位支援的運算子。 |

欄位來自固定的登錄表；除了品項與客戶自訂欄位外，您無法自行新增。

### 撰寫訊息

訊息是規則觸發時使用者看到的內容，所以請讓它指出問題所在。`` `{item.id}` `` 與 `` `{customer.location.countryCode}` `` 等代碼會被替換為該行的實際值。

NOTE

**缺少值就是違規**

除了 `isSet` 與 `isNotSet` 之外，若條件指向**沒有值**的欄位，會以\*「…is required」*違規失敗，而不是通過。因此，沒有送貨地點的訂單上的國家規則，會以*「Customer location is required」*封閉式失敗。同樣的情形也適用於獨立的發票行（沒有來源訂單），且該發票沒有*\*「送貨至」\*\*：Alforse 絕不會改用帳單地址代替。

## 選擇規則涵蓋哪些品項

規則以兩種方式觸及它的行：

* **依篩選條件。** 將規則的範圍限定在**品項類型**和／或**品項群組**，以 OR 或 AND 組合。空的篩選條件會比對**所有**品項。
* **依指派。** 從該品項銷售頁籤的**銷售規則**卡片，把規則附加到某個特定品項。使用**從資料庫新增…**挑選既有規則，或用**建立新規則**在該處開始建立。

品項的**銷售規則**卡片會列出所有適用於該品項的規則。透過篩選條件觸及該品項的規則，無法從卡片取消指派；若要移除，請編輯該規則的品項篩選條件。

銷售規則一律以品項為對象。與[儲存規則](https://docs.alforse.com/zh-Hant/docs/reference/storage-rules.md)不同，這裡沒有工作中心的目標。

## 何時檢查規則

規則在兩種檢查點執行。

### 行檢查

在報價單、銷售訂單或銷售發票上建立或編輯行時，表面包含該行類型的規則會立即被評估。

### 文件關卡

在文件成為承諾的每個時間點，文件上的每一行都會重新檢查：

* 完成報價單；
* 將報價單轉換為訂單，或將 RFQ 轉換為報價單；
* 確認銷售訂單；
* 過帳該訂單的出貨；
* 過帳銷售發票。

在這些關卡重新讀取**每一行**，可以抓出行檢查無法發現的問題：透過轉換、匯入或 API 建立的行、在行儲存之後才撰寫的規則，或之後有變更的送貨地點。

### 國家規則讀取哪個送貨地點

國家條件評估的是貨品實際前往的地方：

* 直運出貨會覆寫訂單標題的地址。
* 由銷售訂單轉換而來的發票行，會透過該訂單解析其目的地。
* 獨立的發票行使用發票本身的**「送貨至」**。

### 客戶的數位報價單

當客戶接受[數位報價單](https://docs.alforse.com/zh-Hant/docs/reference/quotes.md)時，沒有員工在場可以確認任何事：

* `error` 違規會以中性訊息拒絕接受。您的內部規則文字絕不會傳到客戶那裡。
* `warn` 違規會為賣方記錄下來，接受則照常通過。

## 封鎖或警告

| 嚴重程度 | 結果 |
| - | - |
| `error`（**錯誤**） | 封鎖該行或文件，直到條件被滿足。無法確認後略過。 |
| `warn`（**警告**） | 顯示訊息，讓使用者**確認並繼續**。 |

兩種結果都會留下軌跡。每次被封鎖的寫入與每次被確認的警告，都會被記錄為證據：規則、文件、行、品項、人員與時間；並會寄電子郵件給**銷售規則通知群組**（設定 → 銷售）中的人員。

## 方案

HEADS UP

**僅限 Business 方案**

銷售規則需要 **Business** 方案。在其他方案上，銷售規則畫面會顯示升級提示，且不會評估任何規則。

## 疑難排解

| 症狀 | 原因 | 處理方式 |
| - | - | - |
| 儲存或過帳失敗，出現一則聽起來像業務用語、您不認得的訊息。 | 嚴重程度為 `error` 的銷售規則被觸發。 | 在**銷售 → 銷售規則**下依訊息找到該規則，然後修正文件資料或規則。 |
| 訊息以*「…is required」*結尾。 | 規則檢查了沒有值的欄位，最常見的是缺少送貨地點。 | 在文件上補上缺少的值，而不是放寬規則。 |
| 儲存時出現警告對話方塊。 | `warn` 規則被觸發。 | 確認後重新送出。確認動作會被記錄。 |
| 規則從不觸發。 | 它處於停用狀態、其表面排除了此行類型、其品項篩選條件沒有涵蓋該品項，或公司不在 Business 方案。 | 檢查規則上的**狀態**、**表面**與**品項篩選條件**。 |

## 相關內容

**儲存規則**

同系列的規則：使用相同的條件建構器，但套用於庫存交易而非銷售文件。

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

**報價單**

第一個表面：規則會在報價單行寫入時執行，並在完成與轉換時再次執行。

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

**銷售訂單**

規則會把關訂單確認，以及履行該訂單的出貨。

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

**發票**

最後的檢查點：沒有上游訂單而開立的發票，仍會在過帳時檢查。

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


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