> **先读** [`shb-warehouse-bom-mutation-common.md`](shb-warehouse-bom-mutation-common.md)（本域全部变更安全规则的唯一出处，含「组件只能走 `--data`」「禁带 `children`」）。

# shb-cli warehouse bom create（创建物料服务BOM）

## 用法

```bash
# 快捷 flag（零组件，仅 BOM 头）
shb-cli warehouse bom create --material-id <主物料id> --remark "CLI创建"

# 带组成物料（必须用 --data，原因见 mutation-common 安全规则第 6 条）
shb-cli warehouse bom create --data '{"bomInfo":{"materialId":2001,"remark":"CLI创建"},"materialList":[{"materialId":3001,"num":2},{"materialId":3002,"num":1}]}'
```

- `--material-id` 必填（快捷 flag 模式），是主物料的 `id`——主物料 id 的查询走 [`../../shb-warehouse-material/SKILL.md`](../../shb-warehouse-material/SKILL.md)。
- **一个主物料只能有一个启用中的 BOM**，重复为同一主物料建 BOM 会报错，创建前建议先用 `bom search --material-sn <物料编号>` 或 `--material-id` 检查是否已存在（搜索用法见 [`shb-warehouse-bom-search.md`](shb-warehouse-bom-search.md)）。
- `materialList` 里不能有重复 `materialId`，也不能包含主物料自己的 id；任何一项都**绝不能带 `children` 字段**（原因见 mutation-common 安全规则第 3 条）。
- BOM 编号（`sn`）由服务端自动生成，不接受客户端指定。
- 创建成功后打印新 BOM `id`（后续操作直接复用）；加 `--format-data` 会立即查一次详情并按格式化输出展示。
- 无需 `--yes`（风险档位见 [`shb-warehouse-bom-mutation-common.md`](shb-warehouse-bom-mutation-common.md)）。

## 典型组合场景

### 创建一个 BOM 并追加一条备注

```bash
# 1. 创建前先确认主物料还没有 BOM
shb-cli warehouse bom search --material-id <主物料id> --format-data --fields sn,id,enabled

# 2. 创建（带一个组件物料）
shb-cli warehouse bom create --data '{"bomInfo":{"materialId":<主物料id>},"materialList":[{"materialId":<组件物料id>,"num":1}]}'

# 3. 后续只改备注，组件保持不变（编辑用法见 shb-warehouse-bom-edit.md）
shb-cli warehouse bom edit --id <上一步返回的id> --remark "首批建档"
```
