> ## 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 据此生成针对该订单的方法。

## 工作原理

配置型零件有三层：

| 层 | 由谁设置 | 包含内容 |
| - | - | - |
| **模板方法** | 工程部 | 零件已存储的[物料清单和工序清单](https://docs.alforse.com/zh/docs/reference/methods.md)，作为起点。 |
| **参数** | 工程部 | 下单时提出的问题，例如长度、表面处理或材料。 |
| **规则** | 工程部 | 读取参数答案并设置方法字段，或筛选方法行的代码。 |

当配置型零件被添加到订单时，用户回答参数，规则运行，该行随即获得自己已解析的方法：族中的一个具体实例，而不是模板。

## 为零件启用配置

打开零件的制造设置，开启**已配置**（“Part is configured for manufacturing”，零件已配置用于制造）。此后，零件已存储的方法被视为模板，每个使用该零件的工单或报价行都会运行规则，生成自己已解析的方法。

## 定义参数

参数是配置器要求输入的一项内容。每个参数有一个**标签**（用户看到的内容）、一个机器用的**键**（规则引用的内容）和一个**数据类型**。

### 参数键

键由字母和数字组成，各段之间用单个下划线连接，例如 `length` 或 `wall_thickness`。空格、连字符以及开头、结尾或连续的下划线都会被拒绝，因为规则代码通过键读取每个值。错误消息要求使用小写键，这是约定。

### 数据类型

FieldType

<details>
  <summary>**text**`string`</summary>

  自由文本值。
</details>

<details>
  <summary>**numeric**`number`</summary>

  数字，例如长度、数量或孔径。
</details>

<details>
  <summary>**boolean**`true / false`</summary>

  是/否开关。
</details>

<details>
  <summary>**list**`enum`</summary>

  从您提供的固定选项中选择一项。此类型必须提供选项（`listOptions`）。
</details>

<details>
  <summary>**material**`material`</summary>

  对实际原材料物料的引用，可按某一种材料形态筛选。
</details>

<details>
  <summary>**date**`date`</summary>

  日历日期。
</details>

### 参数分组

将参数归入**分组**，使订单表单按部分显示（例如尺寸、表面处理、公差），而不是一长串列表。分组是带排序号的命名标题。新参数会落入自动创建的**“未分组”**（Ungrouped）分组，直到您移动它们。分组和参数都可以通过拖放重新排序。

## 编写规则

**规则**把一个方法字段与根据参数计算该字段值的代码绑定在一起。

### 规则附加的位置

您在嵌入的[方法](https://docs.alforse.com/zh/docs/reference/methods.md)编辑器中逐字段附加规则：

* **物料清单：** 每个组件开放 `itemId`（替换组件）、`quantity`、`unitOfMeasureCode` 和 `methodType`。
* **工序清单：** 工序字段，例如工作中心、工艺，以及换型、人工和机器时间。

有规则的字段会显示“已配置”标记，而不是静态值。

### 编写规则

规则在代码编辑器中编写，编辑器会根据您的参数生成函数骨架和类型定义。代码是 `configure(params)` 函数的函数体：`params` 按键保存各个答案，您用 `return` 返回该字段的值。

```typescript theme={null}
function configure(params: Params): number {
  // one thread every 2mm of engagement, minimum 4
  return Math.max(4, Math.ceil(params.engagement_length / 2));
}
```

保存之前，选择**运行测试**检查输出。

### 筛选整行

规则也可以保留或丢弃整行。`billOfMaterial` 或 `billOfProcess` 规则返回要保留的组件或工序名称列表。例如，一个布尔参数可以移除整个子装配件或外协加工步骤。

### 沙箱限制

NOTE

**规则在沙箱中运行，请保持其纯粹**

规则代码在隔离的 JavaScript 沙箱中运行，无论是创建方法时还是在编辑器中测试规则时。参数是唯一的输入，返回值是唯一的输出。规则没有网络访问、没有定时器，也无法访问页面或服务器，且每次运行都有时间和内存限制。

如果规则编译失败、抛出异常或超出限制，Alforse 会忽略它：该字段保留默认值，物料清单或工序清单保留其所有行。

## 在订单上配置物料

当您把配置型零件添加到[报价](https://docs.alforse.com/zh/docs/reference/quotes.md)行、[销售订单](https://docs.alforse.com/zh/docs/reference/sales-orders.md)行或[工单](https://docs.alforse.com/zh/docs/reference/jobs.md)时，配置随即运行。

1. 在行或工单表单上选择配置型零件。表单显示**配置**，**保存**保持禁用。
2. 选择**配置**并回答参数。
3. 提交。Alforse 将您的答案存储在该行上，并携带这些答案运行 [get-method](https://docs.alforse.com/zh/docs/reference/methods.md) 引擎。
4. 规则运行，该行获得自己的物料清单、工艺路线和成本。**保存**现在可用。

之后重新配置某一行会清除其价格，并根据新的答案重新推导方法。

HEADS UP

**您无法为配置型物料手动指定方法**

由于方法来自规则，您无法让工单或行指向配置型物料的另一个方法；get-method 引擎会以“Cannot override method of configured item”（无法覆盖配置型物料的方法）拒绝该尝试。要获得不同的结果，请更改参数。

## 故障排查

| 现象 | 原因 | 解决 |
| - | - | - |
| “Key must be lowercase and underscore separated”（键必须为小写并以下划线分隔） | 参数键包含空格、连字符或位置不当的下划线。 | 使用类似 `wall_thickness` 的键。 |
| “List options are required”（列表选项为必填） | 数据类型为 **list**，但没有输入选项。 | 添加选项，或选择其他类型。 |
| “Cannot override method of configured item”（无法覆盖配置型物料的方法） | 您试图为配置型物料指定其他方法。 | 请改为更改参数。 |
| 规则似乎没有效果 | 规则在沙箱中失败，因此字段保留了默认值。 | 打开该规则，选择**运行测试**，并修复错误。 |
| **保存**保持禁用 | 配置型的行尚未配置。 | 选择**配置**，回答参数并提交。 |

## 相关内容

**物料**

物料主数据及其按类型划分的设置，包括“已配置”。

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

**方法与寻源**

配置器按订单解析出的物料清单和工艺路线。

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


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