Возвращает данные продукта, его остаток на складе и состав.

```
v2/products/get_entry.php
```

## Параметры

| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| product_id | int | Да | ID продукта |
| storage_id | int | Да | ID склада |

Продукт возвращается, только если он числится на складе storage_id. Остатки на всех складах сразу возвращает [v1/products/get_stocks](https://developers.controlata.ru/hc/api-docs/articles/products-get-stocks).

## Ответ

Объект product со всеми полями продукта, его остатком на складе storage_id, категориями, поставщиками и альтернативными артикулами (см. [Продукты](https://developers.controlata.ru/hc/api-docs/articles/products)). Кроме них в объекте есть:

| Поле | Тип | Описание |
|---|---|---|
| materials | array | Материалы в составе |
| products | array | Заготовки в составе |
| resources | array | Ресурсы в составе |
| percent | float | Себестоимость в процентах от цены продажи, с одним знаком после запятой. 0, если цена продажи не задана |

Поля строк состава:

| Поле | Описание |
|---|---|
| id | ID материала, продукта или ресурса |
| name | Название |
| sku | Артикул. Только у материалов и заготовок |
| type, dynamic, base | Тип расчета, признак «указывается в составе продукта» и база расчета. Только у ресурсов (см. [Ресурсы](https://developers.controlata.ru/hc/api-docs/articles/resources)) |
| amount_per_batch | Количество на партию |
| amount_per_unit | Количество на единицу продукта: amount_per_batch / batch_size. У процентного ресурса совпадает с amount_per_batch |
| loss_percent | Потери в процентах. Только у материалов и заготовок |
| unit | Единица строки. У процентного ресурса «%», у фиксированной ставки с ценой в составе продукта «шт», а amount_per_batch у нее означает сумму в рублях |
| status | Всегда 1 |
| cost_per_unit | Стоимость строки на единицу продукта, с учетом потерь |
| cost_per_batch | Стоимость строки на партию, с учетом потерь |
| position | Порядковый номер строки: общий для materials и products, отдельный для resources |

Как и остальные числа, поля строк приходят строками. Исключения: percent, а также cost_per_unit и cost_per_batch процентных ресурсов, которые Controlata рассчитывает при запросе: они приходят числами.

Строки состава, категории и поставщиков из ответа можно передать в [v1/products/edit](https://developers.controlata.ru/hc/api-docs/articles/products-edit) без изменений.

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

```
{
    "product_id": 3120,
    "storage_id": 3999
}
```

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

```
{
    "success": true,
    "product": {
        "id": "3120",
        "name": "Стол обеденный",
        "sku": "P100",
        "price": "45000",
        "cost": "13604.25",
        "batch_size": "10.000",
        "notes": "",
        "status": "1",
        "archived": "0",
        "stock": "12.000",
        "minimum": "3.000",
        "planned": null,
        "unit": "шт",
        "categories": [
            {
                "id": "21",
                "name": "Мебель"
            }
        ],
        "alternative_sku": [
            {
                "label": "Ozon",
                "sku": "OZ-P100"
            }
        ],
        "suppliers": [
            {
                "id": "46",
                "name": "ООО Мебельторг"
            }
        ],
        "materials": [
            {
                "id": "2051",
                "name": "Доска дубовая",
                "sku": "M010",
                "amount_per_unit": "0.05",
                "amount_per_batch": "0.5",
                "loss_percent": "5.00",
                "unit": "куб. м",
                "status": "1",
                "cost_per_unit": "7087.5",
                "cost_per_batch": "70875",
                "position": "0"
            },
            {
                "id": "2060",
                "name": "Саморез 4x40",
                "sku": "M024",
                "amount_per_unit": "40",
                "amount_per_batch": "400",
                "loss_percent": "0.00",
                "unit": "шт",
                "status": "1",
                "cost_per_unit": "80",
                "cost_per_batch": "800",
                "position": "1"
            }
        ],
        "products": [
            {
                "id": "312",
                "name": "Ножка стола",
                "sku": "P012",
                "amount_per_unit": "4",
                "amount_per_batch": "40",
                "loss_percent": "0.00",
                "unit": "шт",
                "status": "1",
                "cost_per_unit": "3400",
                "cost_per_batch": "34000",
                "position": "2"
            }
        ],
        "resources": [
            {
                "id": "57",
                "name": "Работа столяра",
                "type": "rate",
                "dynamic": "0",
                "base": null,
                "amount_per_unit": "3",
                "amount_per_batch": "30",
                "unit": "ч",
                "status": "1",
                "cost_per_unit": "1800",
                "cost_per_batch": "18000",
                "position": "0"
            },
            {
                "id": "58",
                "name": "Накладные расходы",
                "type": "percent",
                "dynamic": "0",
                "base": "cost",
                "amount_per_unit": "10",
                "amount_per_batch": "10",
                "unit": "%",
                "status": "1",
                "cost_per_unit": 1236.75,
                "cost_per_batch": 12367.5,
                "position": "1"
            }
        ],
        "percent": 30.2
    }
}
```

## Ошибки

| Ошибка | Причина |
|---|---|
| No product_id in input | Не передано обязательное поле (вместо product_id будет имя поля) |
| Storage ID not found | Склад не найден или удален |
| Product not found or access denied | Продукт не найден, удален или не числится на складе |

## Версия v1

Метод v1/products/get_entry продолжает работать с теми же параметрами. Отличие в составе: материалы и заготовки в нем приходят одним массивом components, а id в строках имеет вид «m-123» для материала и «p-45» для заготовки. Такие строки нельзя отправить в add и edit без изменений, поэтому в новых интеграциях используйте v2.
