Изменяет материал. Меняются только переданные поля, остальные остаются прежними. Подробнее о частичном редактировании в статье [Общие правила](https://developers.controlata.ru/hc/api-docs/articles/rules).

`POST https://api.controlata.ru/connect/v1/materials/edit.php`

## Параметры

| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| material_id | int | Да | ID материала |
| name | string | Нет | Название |
| sku | string | Нет | Артикул |
| unit | string | Нет | Единица измерения |
| price | float | Нет | Цена за единицу |
| notes | string | Нет | Заметки |
| minimum | float | Нет | Минимальный остаток на складе storage_id |
| storage_id | int | С minimum | Склад, на котором меняется минимальный остаток |
| categories | array | Нет | ID категорий. Заменяют текущие целиком |
| suppliers | array | Нет | ID поставщиков. Заменяют текущих целиком |

Чтобы очистить поле, передайте пустую строку, чтобы снять все категории или поставщиков, передайте пустой массив.

## Как работает

* **Цена.** После изменения цены Controlata пересчитывает себестоимость продуктов, в состав которых входит материал. Если поставок этого материала еще не было, по новой цене переоцениваются и начальный остаток, и корректировки остатка.
* **Единица измерения.** Если новая единица из той же группы (например, `г` вместо `кг`), Controlata пересчитывает остатки, историю движений и минимальный остаток. Если цена не передана, она тоже пересчитывается: 500 за кг станет 0.5 за г. Сменить группу (например, `шт` на `кг`) нельзя, если материал входит в состав продукта.
* **Минимальный остаток** задается на конкретном складе, поэтому вместе с ним нужен storage_id. Материал должен числиться на этом складе (см. [Материалы](https://developers.controlata.ru/hc/api-docs/articles/materials)).
* **Категории** определяют, на каких складах числится материал. После их изменения материал появится на складах с новыми категориями.

## Пример запроса

```
{
    "material_id": 2051,
    "price": 135000,
    "minimum": 1,
    "storage_id": 3998
}
```

## Пример ответа

```
{
    "success": true
}
```

## Ошибки

| Ошибка | Причина |
|---|---|
| No material_id in input | Не передан material_id |
| Material not found or access denied | Материал не найден или удален |
| Name must not be empty | Передано пустое название |
| Unit not found | Неизвестная единица измерения |
| Unit cannot be changed to another unit group: the material is used in components of products | Смена группы единицы у материала из состава продукта |
| No storage_id in input | Передан minimum без storage_id |
| Material is not stored in storage location 3998, so its minimum cannot be set there | Материал не числится на складе |
| Invalid price value. Must be a number | Значение не число (так же для minimum) |
| Category 12 not found | Категория не найдена |
| Supplier not found or access denied | Поставщик не найден или удален |
