> ## 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"*（需要客户位置）为由按封闭方式失败。对于没有源订单的独立发票行，在发票没有**发往**（Ship To）地址时同样如此——Alforse 绝不会用账单地址替代。

## 选择规则涵盖哪些物料

规则通过两种方式之一到达其行：

* **按筛选器。** 将规则限定为**物料类型**和/或**物料组**，以 OR 或 AND 组合。空筛选器匹配**所有**物料。
* **按分配。** 从某个物料“销售”选项卡上的**销售规则**卡片，将规则附加到该特定物料。使用**从库中添加…**选择现有规则，或使用**创建新规则**在此处新建。

物料的**销售规则**卡片列出适用于该物料的每条规则。通过筛选器作用于该物料的规则无法从卡片上取消分配；要移除它，请编辑规则的项目筛选器。

销售规则始终以物料为目标。与[存储规则](https://docs.alforse.com/zh/docs/reference/storage-rules.md)不同，它没有工作中心目标。

## 何时检查规则

规则在两类检查点运行。

### 行检查

在报价、销售订单或销售发票上创建或编辑一行时，其界面包含该行类型的规则会立即评估。

### 单据关口

在单据成为承诺的每个节点，都会重新检查单据上的每一行：

* 最终确定报价；
* 将报价转换为订单，或将 RFQ 转换为报价；
* 确认销售订单；
* 过账订单的发货；
* 过账销售发票。

在这些关口重新读取**每一行**，能捕获行检查无法发现的问题：通过转换、导入或 API 创建的行、保存该行之后才编写的规则，或此后发生变化的收货地。

### 国家规则读取哪个收货地

国家条件评估货物实际前往的地方：

* 直运会覆盖订单表头的地址。
* 由销售订单转换而来的发票行通过该订单确定其目的地。
* 独立发票行使用发票自己的**发往**（Ship To）。

### 客户的数字报价

当客户接受[数字报价](https://docs.alforse.com/zh/docs/reference/quotes.md)时，没有员工在场确认任何内容：

* `error` 违规会以中性消息拒绝接受。您内部的规则文本绝不会到达客户。
* `warn` 违规会为卖方记录，接受照常通过。

## 阻止或警告

| 严重度 | 结果 |
| - | - |
| `error`（**错误**） | 在条件满足之前阻止该行或单据。无法通过确认越过。 |
| `warn`（**警告**） | 显示消息，让用户**确认并继续**。 |

两种结果都会留下记录。每次被阻止的写入和每次被确认的警告都会作为证据记录——规则、单据、行、物料、操作人和时间——并且**销售规则通知组**（设置 → 销售）中的人员会收到电子邮件。

## 套餐

HEADS UP

**仅限 Business 套餐**

销售规则需要 **Business** 套餐。在其他套餐上，销售规则界面显示升级提示，且不评估任何规则。

## 故障排除

| 症状 | 原因 | 解决办法 |
| - | - | - |
| 保存或过账失败，并出现一条您不认识的业务性消息。 | 严重度为 `error` 的销售规则触发了。 | 按消息在**销售 → 销售规则**下找到该规则，然后更正单据数据或规则。 |
| 消息以 *"…is required"* 结尾。 | 规则检查了没有值的字段，最常见的是缺少收货地位置。 | 在单据上补全缺失的值，而不是放宽规则。 |
| 保存时出现警告对话框。 | `warn` 规则触发了。 | 确认后重新提交。该确认会被记录。 |
| 规则从不触发。 | 它已停用，其界面不包含此行类型，其项目筛选器没有命中该物料，或公司不在 Business 套餐上。 | 检查规则上的**状态**、**表面**和**项目筛选器**。 |

## 相关内容

**存储规则**

同类规则家族：相同的条件构建器，应用于库存事务而不是销售单据。

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

**报价**

第一个界面：规则在编写报价行时运行，并在最终确定和转换时再次运行。

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

**销售订单**

规则把关订单确认以及履行它的发货。

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

**发票**

最后一个检查点：没有上游订单而开具的发票，在过账时仍会被检查。

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


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