> ## 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-Hant/docs/reference/methods.md)，作為起點。 |
| **參數** | 工程 | 下單時詢問的問題，例如長度、表面處理或材料。 |
| **規則** | 工程 | 讀取參數答案，並設定方法欄位或篩選方法明細行的程式碼。 |

已配置的零件加入訂單時，使用者回答參數，規則執行，該行便取得自己解析出的方法：一個具體的變體實例，而不是範本。

## 為零件開啟配置

開啟零件的製造設定，並開啟**已配置**（「零件已配置為製造用」）。從此以後，零件儲存的方法會被視為範本，每張使用該零件的工單或報價單明細都會執行規則來產生自己解析出的方法。

## 定義參數

參數是配置器要求的一個輸入。每個參數有一個**標籤**（使用者看到的）、一個機器用的**鍵**（規則參照的），以及一個**資料類型**。

### 參數鍵

鍵由字母與數字組成，各段之間用單一底線連接，例如 `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>

### 將參數分組

把參數整理成**群組**，讓訂單表單呈現為幾個區段（例如尺寸、表面處理、公差），而不是一長串清單。群組是具有排序的命名標題。新參數會先落在自動建立的**「未分組」**群組，直到你移動它們為止。群組與參數都可以用拖放重新排序。

## 撰寫規則

**規則**把一個方法欄位綁定到用參數計算該欄位值的程式碼。

### 規則掛在哪裡

你在內嵌的[方法](https://docs.alforse.com/zh-Hant/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-Hant/docs/reference/quotes.md)明細、[銷售訂單](https://docs.alforse.com/zh-Hant/docs/reference/sales-orders.md)明細或[工單](https://docs.alforse.com/zh-Hant/docs/reference/jobs.md)時，就會執行配置。

1. 在明細或工單表單上選擇已配置的零件。表單會顯示**配置**，且**儲存**維持停用。
2. 選擇**配置**並回答參數。
3. 提交。Alforse 把你的答案存在該行上，並用它們執行[取得方法](https://docs.alforse.com/zh-Hant/docs/reference/methods.md)引擎。
4. 規則執行，該行取得自己的物料清單、途程與成本。**儲存**現在可用。

之後重新配置某一行，會清除它的價格，並根據新的答案再次推導方法。

HEADS UP

**你無法為已配置的品項手動挑選方法**

因為方法來自規則，你無法為已配置的品項把工單或明細指向不同的方法；取得方法引擎會以 "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-Hant/docs/reference/items.md)

**方法與採購來源**

配置器依訂單解析的物料清單與途程。

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


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