Методы для работы с продуктами: создание, редактирование, удаление, получение продуктов и обновление их остатков.
Все адреса указаны относительно базового https://api.controlata.ru/connect/v1/. Формат запросов и авторизация описаны в статье Обзор API.
Остатки в Controlata ведутся по складам, поэтому большинство методов принимает storage_id. Как узнать ID склада, описано в статье Обзор API.
Поля продукта
| Поле | Тип | Описание |
|---|---|---|
| name | string | Название |
| sku | string | Артикул |
| unit | string | Единица измерения, код из статьи Единицы измерения |
| price | float | Цена продажи. По умолчанию 0 |
| batch_size | float | Размер партии, больше 0. По умолчанию 1 |
| minimum | float | Минимальный остаток на складе storage_id. По умолчанию 0 |
| notes | string | Заметки |
Создание продукта
POST products/add.php
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| name | string | Да | Название |
| unit | string | Да | Единица измерения |
| storage_id | int | Да | Склад, на котором создается остаток |
| sku | string | Нет | Артикул |
| price | float | Нет | Цена продажи |
| batch_size | float | Нет | Размер партии |
| stock | float | Нет | Начальный остаток на складе storage_id |
| minimum | float | Нет | Минимальный остаток на складе storage_id |
| notes | string | Нет | Заметки |
Продукт появится на складе storage_id и на складах, в настройках которых для продуктов выбрано Все. Начальный остаток записывается только на склад storage_id и с себестоимостью 0.
Уникальность артикула не проверяется. Если в системе уже есть продукт с таким артикулом, в заказах будет выбран первый найденный.
Пример запроса:
{
"name": "Стул обеденный дубовый",
"sku": "F003",
"unit": "шт",
"price": 45000,
"storage_id": 3998,
"stock": 10,
"minimum": 5
}
Пример ответа:
{
"success": true,
"product_id": 48390
}
Редактирование продукта
POST products/edit.php
Обязательные поля: product_id, name, unit и storage_id. Необязательные: sku, price, batch_size, minimum, notes.
Важно: метод перезаписывает продукт целиком. Если поле не передано, sku и notes станут пустыми, price и minimum станут равны 0, batch_size станет равен 1.
storage_idнужен только дляminimum: минимальный остаток меняется на этом складе.- Поле
stockздесь не учитывается. Чтобы изменить остаток, используйтеproducts/update_stock.php. - Изменение цены сохраняется в истории цен продукта.
- Как работает смена единицы измерения, описано в статье Единицы измерения.
Пример ответа:
{
"success": true
}
Обновление остатка
POST products/update_stock.php
| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| product_id | int | Да | ID продукта |
| storage_id | int | Да | ID склада |
| stock | float | Да | Новый остаток |
| notes | string | Нет | Заметки к корректировке |
Передавайте итоговый остаток, а не изменение. Controlata создаст корректировку на разницу между текущим и новым остатком.
Пример запроса:
{
"product_id": 48390,
"storage_id": 3998,
"stock": 25,
"notes": "Синхронизация с сайтом"
}
Удаление продукта
POST products/delete.php
Обязательное поле: product_id.
Продукт пропадает из каталога, его файлы удаляются. Если продукт входил в состав других продуктов, он убирается из их состава, а их себестоимость пересчитывается.
Получение списка продуктов
POST products/get_list.php
Обязательное поле: storage_id.
Метод возвращает продукты, у которых есть остаток на складе storage_id (в том числе нулевой), отсортированные по названию, без постраничной разбивки. Архивные продукты тоже попадают в список.
| Поле ответа | Описание |
|---|---|
| stock | Остаток на складе |
| minimum | Минимальный остаток на складе |
| planned | Изменение остатка по запланированным операциям или null, если их нет |
| cost | Себестоимость единицы |
| categories | Категории продукта |
Пример ответа:
{
"success": true,
"products": [
{
"id": "48390",
"name": "Стул обеденный дубовый",
"sku": "F003",
"price": "45000.00",
"cost": "24880.00",
"batch_size": "1.000",
"notes": "",
"status": "1",
"stock": "10.000",
"minimum": "5.000",
"planned": null,
"unit": "шт",
"categories": [
{
"id": "12",
"name": "Стулья"
}
]
}
]
}
Получение данных продукта
POST products/get_entry.php
Обязательные поля: product_id и storage_id.
Кроме полей из списка, метод возвращает:
| Поле ответа | Описание |
|---|---|
| alternative_sku | Альтернативные артикулы: label и sku |
| components | Состав продукта: материалы (id с префиксом m-) и заготовки (id с префиксом p-) |
| resources | Ресурсы для производства продукта |
| percent | Доля себестоимости в цене продажи, % |
У строк components и resources есть поля amount_per_unit и amount_per_batch (количество на единицу продукта и на партию), unit, cost_per_unit и cost_per_batch (стоимость на единицу и на партию) и position (порядок в составе).
Пример ответа:
{
"success": true,
"product": {
"id": "48390",
"name": "Стул обеденный дубовый",
"sku": "F003",
"price": "45000.00",
"cost": "24880.00",
"batch_size": "1.000",
"notes": "",
"status": "1",
"stock": "10.000",
"minimum": "5.000",
"planned": null,
"unit": "шт",
"categories": [
{
"id": "12",
"name": "Стулья"
}
],
"alternative_sku": [
{
"label": "Сайт",
"sku": "CHAIR-OAK"
}
],
"components": [
{
"id": "m-2051",
"name": "Доска дубовая",
"sku": "M010",
"amount_per_unit": "0.050",
"amount_per_batch": "0.050",
"unit": "куб. м",
"status": "1",
"cost_per_unit": "6500.00",
"cost_per_batch": "6500.00",
"key": "9911",
"position": "0"
}
],
"resources": [
{
"id": "311",
"name": "Работа столяра",
"amount_per_unit": "6.000",
"amount_per_batch": "6.000",
"unit": "ч",
"status": "1",
"cost_per_unit": "9000.00",
"cost_per_batch": "9000.00",
"key": "5120",
"position": "0"
}
],
"percent": 55.3
}
}
Ошибки
| Ошибка | Причина |
|---|---|
| No name in input | Не передано обязательное поле (вместо name будет имя поля) |
| Product not found or access denied | Продукт не найден или у него нет остатка на складе storage_id |
| Storage ID not found | Склад с таким ID не найден |
| Unit not found | Неизвестная единица измерения |
| Batch size must be greater than 0 | batch_size меньше или равен 0 |