---
title: "Забрать бронь у другой продажи"
method: POST
path: "/api/v1/stock/sales/{id}/reservation/take"
tags: ["Stock purchasing"]
---

# Забрать бронь у другой продажи

`POST /api/v1/stock/sales/{id}/reservation/take`

## Request

- Base URL: `https://erp.akeda.ru`
- URL: `https://erp.akeda.ru/api/v1/stock/sales/{id}/reservation/take`
- 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

«Забрать бронь» (ERP-2581): qty брони товара переносится с продажи from_order_id на эту продажу одной транзакцией — обе продажи приводятся к новому составу штатной службой резерва (источник — свой состав минус qty, затем цель — свой плюс qty). Нового вида документа и прямой записи в регистр нет; отказ любой половины откатывает обе. Лимит — нехватка цели по товару (нужно минус обеспечено, как в short_qty): обещание цели без товара на складе нехваткой считается. Новый хвост цели — не больше нужного: min(нужно, держала + qty), поэтому если цель уже держала необеспеченное, суммарная бронь товара на складе уменьшается на излишек. Срок брони источника не меняется; место в очереди на товар (старшинство) источник сохраняет, цель получает более раннее из своего и источника — документы датируются сегодняшним днём. Два одновременных переноса с одного источника идут по очереди. Склад — склад брони источника. Комплект переносится компонентами: по товару-комплекту — отказ. Ответ — исполнение этой продажи с обеспеченностью. Отказы: qty не десятичное число больше нуля или та же продажа — 400; источник не подтверждён или нет брони по товару не меньше qty, источник держит бронь на нескольких складах, цель не может резервировать (stock.order.reserve_blocked), разные юрлица, бронь цели на другом складе, qty больше нехватки цели, товар — комплект, бронь только что изменил кто-то другой (reservation_changed; повторить) — 409 stock.order.reservation_take_refused. Идемпотентность — не нужна: повтор переносит ещё раз и упирается в остаток брони источника или в нехватку цели.

## Path parameters

- `id` string, uuid, required

## Headers

- `X-Tenant` string, required

## Request body

- StockOrderReservationTakeInput
  - `from_order_id` string, uuid, required
  - `product_id` string, uuid, required
  - `qty` string, required: Сколько брони забрать: десятичное число в базовой единице, больше нуля (дробь вида 1/3 не принимается)

## Response `200`

Исполнение продажи после переноса брони

- StockOrderShipping
  - `order_id` string, uuid, required
  - `number` string, required
  - `date` string, required
  - `state` string, required
  - `contact_id` string, uuid, required
  - `contact_name` string
  - `company_id` string, uuid
  - `warehouse_id` string, uuid
  - `warehouse_note` string
  - `channel_id` string, uuid
  - `channel_name` string
  - `channel_condition_id` string, uuid
  - `channel_condition_name` string
  - `lines` StockOrderShippingLine[], required
    - `line_id` string, uuid, required
    - `product_id` string, uuid, required
    - `title` string, required
    - `unit` string
    - `ordered_qty` string, required
    - `shipped_qty` string, required
    - `remaining_qty` string, required
    - `reserved_qty` string: ERP-2581: сколько из остатка строки обеспечено бронью с товаром на складе; раскладка по порядку строк, не больше остатка. Комплект без остатка считается по броне компонентов: обеспечено столько комплектов, сколько набирается из неё. Нет поля — бронь не посчитана
    - `short_qty` string: ERP-2581: сколько из остатка строки не обеспечено (остаток минус reserved_qty)
  - `shipments` StockOrderShipment[], required
    - `id` string, uuid, required
    - `order_id` string, uuid, required
    - `number` string, required
    - `date` string, required
    - `status` string, required
    - `warehouse_id` string, uuid
    - `deal` string, uuid
    - `lines` StockOrderShipmentLine[], required
      - `product_id` string, uuid, required
      - `qty` string, required
    - `needed_qty` string: Только у черновика сборки (ERP-2423): сколько нужно собрать по строкам немаркированного товара (picked_qty строк), в базовой единице. Нет поля — сборка марками, черновик до ERP-2423 или проведённая отгрузка
    - `picked_qty` string: Только у черновика сборки (ERP-2423): сколько собрано по тем же строкам, в базовой единице. Не меньше needed_qty — строки собраны
  - `picking` StockOrderShipment
    - `id` string, uuid, required
    - `order_id` string, uuid, required
    - `number` string, required
    - `date` string, required
    - `status` string, required
    - `warehouse_id` string, uuid
    - `deal` string, uuid
    - `lines` StockOrderShipmentLine[], required
      - `product_id` string, uuid, required
      - `qty` string, required
    - `needed_qty` string: Только у черновика сборки (ERP-2423): сколько нужно собрать по строкам немаркированного товара (picked_qty строк), в базовой единице. Нет поля — сборка марками, черновик до ERP-2423 или проведённая отгрузка
    - `picked_qty` string: Только у черновика сборки (ERP-2423): сколько собрано по тем же строкам, в базовой единице. Не меньше needed_qty — строки собраны
  - `reserved` boolean, required
  - `coverage` object: ERP-2581: обеспеченность остатка к отгрузке бронью. Остаток брони по товару минус непокрытое (бронь, под которой на складе физически нет товара — правило отчёта резервов: без товара остаются самые новые обещания). Нет поля — отгружать нечего
    - `state` 'full' | 'partial' | 'none', required: full — все строки к отгрузке обеспечены; none — ни одной единицы; иначе partial
    - `lines` integer, required: Сколько товарных строк ещё к отгрузке
    - `covered_lines` integer, required: Сколько из них обеспечены полностью
  - `reservations` object[]: Остаток резерва самой продажи по складам (товар → количество). Свободный остаток склада его уже вычел, а отгрузка по продаже гасит свой резерв
    - `warehouse_id` string, uuid, required
    - `products` object, required
  - `can_ship` boolean, required
  - `ship_blocked` string
  - `ship_warehouse` object: Склад отгрузки по умолчанию; нет поля — сервер склад не подобрал, его выбирает человек
    - `id` string, uuid, required
    - `name` string, required
    - `source` 'order' | 'reservation' | 'channel' | 'policy' | 'stock', required

## 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)
