---
title: "Разнести остаток склада по зонам"
method: POST
path: "/api/v1/stock/warehouses/{id}/zones/allocation"
tags: ["Stock warehouses"]
---

# Разнести остаток склада по зонам

`POST /api/v1/stock/warehouses/{id}/zones/allocation`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/stock/warehouses/{id}/zones/allocation`
- Auth: one of:
  - HTTP bearer
  - API key in header `X-Api-Key`
  - OAuth 2 (authorization code, authorization URL `https://erp.akeda.ru/oauth2/authorize`, token URL `https://erp.akeda.ru/oauth2/token`, scopes: `akeda:delegate`)
  - HTTP bearer

Каждая пара «юрлицо и зона» даёт своё перемещение; партию и стоимость выбирает проведение. Разнести можно частично — остальное остаётся на складе и ждёт.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant` string, required

## Request body

- StockZoneAllocationInput
  - `date` string, date: Пусто — бизнес-дата кабинета
  - `lines` StockZoneAllocationLine[], required
    - `business_id` string, uuid
    - `company_id` string, uuid
    - `product_id` string, uuid, required
    - `zone_id` string, uuid, required
    - `quantity` string, required

## Response `200`

Проведённые перемещения и нераспределённый остаток

- StockZoneAllocationResult
  - `warehouse` StockWarehouse, required
    - `id` string, uuid, required
    - `code` string, required
    - `name` string, required
    - `parent_id` string, uuid, required
    - `address` object, required
    - `responsible_employee_id` string, uuid, required
    - `is_active` boolean, required
    - `sort_order` integer, required
    - `zones_enabled` boolean, required: Внутри склада работают зоны — приход разрешён только в подчинённую зону
    - `needs_allocation` boolean, required: На самом зональном складе ещё лежит остаток, оставшийся с момента включения зон
    - `inbound_mode` 'documents' | 'external_receipt' | 'external_transit' | 'transfer_transit', required: documents — приход обычными складскими документами; external_receipt — склад внешней стороны: приход даёт только её приёмка, поступление и входящее перемещение запрещены; external_transit — склад товаров в пути к площадке (заводит подключение магазина); transfer_transit — склад «В пути на <склад>» перемещения с приёмкой (ERP-2179): приход — только отправка, расход — приёмка, возврат или списание недостачи по отправке
    - `transfer_receipt` boolean, required: «Приход перемещением — с приёмкой» (ERP-2179): перемещение на склад уходит на его склад «в пути», на склад товар кладёт приёмка по перемещению. Меняется действиями transfer-receipt/enable и disable
    - `transit_warehouse_id` string, uuid, required
    - `transit_for_id` string, uuid, required
    - `bins_mode` 'off' | 'soft' | 'strict', required: Ячейки в этом месте хранения: off — ячеек нет; soft — ячейка необязательна, товар без ячейки считается не размещённым; strict — документ обязан назвать ячейку
    - `bins_count` integer, required: Сколько в этом месте активных ячеек
    - `business_id` string, uuid, required
    - `company_ids` UUID[], required: Пустой список означает доступность склада всем активным юрлицам кабинета
    - `agent_contact_id` string, uuid
    - `agent_contract_id` string, uuid
    - `default_for_company_ids` UUID[]: Юрлица, у которых этот склад выбран складом по умолчанию в политике склада (ERP-2423). Только в списке складов; нет таких юрлиц — поля нет
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
  - `documents` CoreDocument[], required: Проведённые перемещения — по одному на сочетание «бизнес, юрлицо или его отсутствие, зона»
    - `id` string, uuid, required
    - `type_id` string, uuid, required
    - `type_key` string, required
    - `type_name` string, required
    - `number` string, required
    - `date` string, date, required
    - `status` 'draft' | 'posted' | 'cancelled', required
    - `basis_type` string, uuid, required
    - `basis_id` string, uuid, required
    - `basis_number` string, required
    - `entity_refs` object, required
    - `payload` object, required
    - `comment` string, required
    - `is_marked_deleted` boolean, required
    - `created_by` integer, nullable, required
    - `created_by_name` string, required
    - `created_at` string, date-time, required
    - `updated_at` string, date-time, required
    - `posted_at` string, required
    - `cancelled_at` string, required
    - `custom` object: Значения своих полей кабинета (графы вида core.document.<ключ вида>). Отдаёт карточка документа; списки поле не несут
  - `remaining` StockZoneStockRow[], required: Остаток, который после разнесения всё ещё ждёт на складе
    - `warehouse_id` string, uuid, required
    - `business_id` string, uuid, required
    - `company_id` string, uuid, required
    - `product_id` string, uuid, required
    - `quantity` string, required: Точное decimal-количество строкой
    - `expired` string: Decimal string. Сколько из quantity лежит в партиях, просроченных на сегодня по календарю кабинета (ERP-2149). Часть количества, а не вычет из него; в день «годен до» товар ещё годен. Поля нет — просрочки в строке нет

## Other responses

- `400`: Некорректный запрос или нарушение бизнес-правила
- `401`: Сессия, ключ или кабинет не подтверждены
- `403`: Текущая роль не имеет требуемого права
- `404`: Запись не найдена или не видима текущему пользователю
- `409`: Конфликт версии, идемпотентности или бизнес-состояния

---

[API](https://skmtc.dev/akeda/apis/akeda-erp-client-api.md) · [All operations](https://skmtc.dev/akeda/apis/akeda-erp-client-api/llms.txt) · [OpenAPI document](https://skmtc.dev/akeda/apis/akeda-erp-client-api/revisions/a99574d597cc?raw)
