配置器

把一个部件号变成一个参数化族。输入驱动规则,按订单解析 BOM、工艺路线和价格。

配置器在同一个物料下对一族变体建模。用户提供参数,规则用这些值在接单时解析物料的。规则可以选择物料清单组件、工艺路线细节和行成本。

在部件的制造设置中启用 Requires Configuration(需要配置)(requiresConfiguration,apps/erp/app/modules/items/ui/Item/ItemManufacturingForm.tsx:82)。之后保存的制造方法会成为模板。每个生产订单或报价行都会运行规则,生成自己解析后的制造方法。

参数——输入

每个参数都有标签、机器键和数据类型(configurationParameterValidator,apps/erp/app/modules/items/items.models.ts:341)。规则引用的是键。请使用小写字母数字段,以单个下划线分隔,例如 length 或 wall_thickness。

字段类型
自由文本值。
数值——长度、数量、孔径。
是/否开关。
你提供的固定选项之一(该类型必须提供 listOptions)。
对真实原材料物料的引用,可选限定到某种材料形态。
日历日期。

基础集合(text、numeric、boolean、list、material)来自 configurationParameterDataTypes(items.models.ts:22);date 由校验器补充(items.models.ts:347)。material 是在迁移 20250809000000_add-material-configurator-type.sql 中加入底层枚举的。

参数可以排序到分组中,使订单表单按「尺寸」「表面处理」「公差」等分节显示,而不是一个平铺列表。分组只是一个带排序权的命名标题(configurationParameterGroupValidator,items.models.ts:325);在你归档之前,参数会落在自动创建的 "Ungrouped"(未分组) 中。分组和参数都支持拖拽排序,两个界面编辑同一批记录(ConfigurationParameters.tsx)。

规则——推导制造方法

规则把某个制造方法字段绑定到一段代码,由参数计算其值(configurationRuleValidator,items.models.ts:369)。

规则按字段挂在内嵌的制造方法编辑器上。在物料清单中,每个组件都暴露可配置字段——itemId(替换组件)、quantity、unitOfMeasureCode 和 methodType(BillOfMaterial.tsx:841,866,890,1043);在工艺清单中则是工作中心、工艺以及准备/人工/机器时间等工序字段。带规则的字段会显示「已配置」标记,而不是静态值。

你在 Monaco 编辑器(ConfigurationEditor.tsx)中编写代码,它会根据参数生成函数骨架和类型定义,并提供 Run 按钮在保存前测试输出。代码是 configure(params) 函数体;params 按键保存参数,你 return 该字段的值:

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

规则在沙箱中运行——请保持纯函数

规则代码在隔离的 JavaScript 沙箱(QuickJS,packages/database/src/configuration-rule.ts)中运行,无论是在创建制造方法时还是在编辑器中测试规则时。参数是唯一输入,返回值是唯一输出:规则没有网络、定时器,也无法访问所在页面或服务器,每次运行都有时间和内存限制。编译失败、抛出异常或超出限制的规则会被忽略:字段保留默认值,物料清单或工艺清单保留全部行。规则用于从输入推导值,而不是产生副作用。

规则还可以整体筛选制造方法:billOfMaterial 或 billOfProcess 规则返回要保留的组件或工序名称列表,因此一个布尔参数就能从配方中去掉整个子装配或外部加工步骤。

接单时选择已配置物料

当已配置部件被加入报价行、销售订单行或生产订单时会运行配置。表单显示 Configure(配置),并在提交必需参数之前禁用 Save(保存)(QuoteLineForm.tsx:556、JobForm.tsx)。

提交配置会把答案保存在行上(quoteLine.configuration / job.configuration,JSON),并用这些值调用获取制造方法引擎(x+/quote+/$quoteId.$lineId.configure.tsx)。规则运行后,该行获得自己解析出的物料清单、工艺路线和成本——参数化族的一个具体实例,而不是模板。重新配置会清除行的价格并重新推导所有内容。

HEADS UP

已配置物料的制造方法不能手工覆盖

由于制造方法由规则解析,你不能为已配置物料的生产订单或行指定不同的制造方法——获取制造方法引擎会拒绝("Cannot override method of configured item")。请修改参数,而不是配方。

相关内容