原材料

定义原材料身份的属性表——材质、形态、尺寸、表面处理、牌号和类型。

原材料(material)是一类 Material 类型的物料,用作库存原料。结构化的属性表定义了它的材质、形态、尺寸,以及可选的表面处理、牌号和类型。Carbon 使用这些值生成原材料的身份、显示名称和编码。

每条原材料记录(material 表)只保存指向这些查找表的外键:materialSubstanceId、materialFormId、dimensionId、finishId、gradeId 和 materialTypeId。六个字段都可为空,因此原材料可以按需要精确或宽松地定义。

属性表

六个查找表共同构成一个原材料。材质和形态相互独立;其余选项受其中一个或两者约束,因此会级联。

字段类型
原材料的构成材料:钢、铝、不锈钢、钛。包含 name 和 code。
原材料的形状或产品形态:板材、厚板、圆棒、铸锭。包含 name 和 code。
具名规格,归属于某个形态(板材的尺寸列表与棒材不同)。包含 isMetric。
表面处理方式,归属于某个材质。
材料牌号,归属于某个材质(例如 1018 钢)。
具名的产品类型,同时绑定材质和形态,例如热轧钢板。包含 name 和 code。
NOTE

查找表是级联的

材质和形态相互独立。牌号和表面处理从所选材质的列表中选择;尺寸从所选形态的列表中选择;类型取两者的交集。更换材质后,可选的牌号和表面处理列表随之变化。这就是新建原材料界面的表单自上而下依次填写的原因。

作用域:系统级或公司级

Carbon 提供一套初始分类。每个查找表都有可为空的 companyId。companyId 为空的记录是系统值,对所有公司可见;带公司 ID 的记录是该公司的自定义补充。

唯一性按作用域约束,因此系统值和公司值不会冲突:

字段类型
同一公司内,材质的 code 唯一。
同一公司内,形态的 code 唯一。
同一形态内,尺寸名称唯一。
同一材质内,表面处理名称唯一。
同一材质内,牌号名称唯一。
同一「材质 + 形态」组合内,类型的 code 和名称均唯一。
NOTE

材质和形态字段更完整,其余更精简

只有 materialSubstance 和 materialForm 有 code、自定义字段和审计字段。materialDimension、materialFinish、materialGrade 和 materialType 是精简查找表,没有自定义字段和审计记录,其预置 ID 是可读字符串(如 steel-1018),而非生成的键。

原材料如何引用这些属性

原材料通过位置关系关联到它的物料记录,而不是外键。创建原材料时,Carbon 先插入 type 为 Material 的 item 记录,再以物料的可读 ID 作为 material.id 插入 material 记录。这里没有 itemId 列。两者在同一公司内通过 item.readableId = material.id 关联,因此原材料的部件号就是它的原材料 ID。

由于关联基于可读 ID,一个原材料可以横跨多条 item 记录:不同的版本,以及每种库存规格各一条 item。你分配的 sizes 会成为生产订单和采购订单上的可选变体,每个变体都是一条共享该原材料 ID 的 item 记录。

NOTE

生成原材料只要求材质和形态

Carbon 生成原材料及其 ID 时,materialSubstanceId 和 materialFormId 是必填项;尺寸、表面处理、牌号和类型可选。原材料最少就是「某种形态的某种材质」,其余属性用于进一步细化。

命名与唯一性

Carbon 用材质、形态以及可选的表面处理、牌号、尺寸名称组合出原材料的显示名称;用材质、形态和类型的编码组合出原材料编码。属性组合提供结构化的身份,而不是依赖自由文本。

由于尺寸属于形态、牌号和表面处理属于材质,合法的原材料始终是一组内部一致的选择。你无法为板材选择棒材的尺寸,也无法为铝选择不锈钢的牌号,因为这些列表已按先选的父级过滤。

相关内容