Перемещения: перенос материалов или продуктов с одного склада на другой. Через API перемещения можно создавать, редактировать и удалять, менять их статус, получать список и данные перемещения.

Пути методов указаны относительно базового адреса API, а общие для всех методов правила (авторизация, формат запросов, частичное редактирование, строки операций, постраничная выдача) описаны в статьях [Обзор API](https://developers.controlata.ru/hc/api-docs/articles/overview) и [Общие правила](https://developers.controlata.ru/hc/api-docs/articles/rules).

## Методы

| Метод | Что делает |
|---|---|
| [v1/transfers/add](https://developers.controlata.ru/hc/api-docs/articles/transfers-add) | Создает перемещение |
| [v1/transfers/edit](https://developers.controlata.ru/hc/api-docs/articles/transfers-edit) | Изменяет перемещение |
| [v1/transfers/delete](https://developers.controlata.ru/hc/api-docs/articles/transfers-delete) | Удаляет перемещение |
| [v1/transfers/update_status](https://developers.controlata.ru/hc/api-docs/articles/transfers-update-status) | Меняет статус перемещения |
| [v1/transfers/get_list](https://developers.controlata.ru/hc/api-docs/articles/transfers-get-list) | Возвращает список перемещений |
| [v1/transfers/get_entry](https://developers.controlata.ru/hc/api-docs/articles/transfers-get-entry) | Возвращает перемещение со строками |

## Поля перемещения

| Поле | Тип | Описание |
|---|---|---|
| id | int | ID перемещения |
| num | string | Номер |
| date | string | Дата перемещения, YYYY-MM-DD |
| status | int | Статус: 0 План, 1 Отправлено, 2 Получено |
| source_storage_id | int | Склад, с которого перемещаются позиции |
| source_storage_name | string | Название склада-источника |
| target_storage_id | int | Склад, на который перемещаются позиции |
| target_storage_name | string | Название склада-получателя |
| cost | float | Себестоимость перемещенного по FIFO |
| price | float | Стоимость продуктов по цене продажи. У перемещения материалов 0 |
| amount | float | Общее количество. null, если у позиций разные единицы измерения |
| lines | int | Количество строк |
| notes | string | Заметки |

## Материалы или продукты

Одно перемещение переносит либо материалы, либо продукты. Поэтому строки передаются только в одном из массивов: materials или products. Чтобы переместить и то и другое, создайте два перемещения.

Оба склада должны хранить позиции этого типа: в настройках склада для материалов (или продуктов) не должно быть выбрано **Нет**. Какие позиции хранит склад, показывают поля materials и products в [v1/storages/get_list](https://developers.controlata.ru/hc/api-docs/articles/storages-get-list). Склад-источник и склад-получатель должны различаться.

## Статусы

Каждая строка перемещения состоит из двух движений: расхода на складе-источнике и прихода на складе-получателе. Статус определяет, какие из них уже произошли.

| Код | Статус | Склад-источник | Склад-получатель |
|---|---|---|---|
| 0 | План | Расход запланирован | Приход запланирован |
| 1 | Отправлено | Позиции списаны | Приход запланирован |
| 2 | Получено | Позиции списаны | Позиции поступили |

Запланированное движение не меняет остаток, а учитывается в поле planned остатков. Новое перемещение создается в статусе из настройки **Статус нового перемещения по умолчанию**. Сменить статус можно методом [v1/transfers/update_status](https://developers.controlata.ru/hc/api-docs/articles/transfers-update-status).

## Себестоимость

Позиции списываются со склада-источника по FIFO и поступают на склад-получатель с той же себестоимостью. Если остатка на источнике не хватает, перемещение все равно проводится, остаток источника уходит в минус.

## Номер

Номер перемещения строковый и задается свободно. Если не передать его при создании, Controlata присвоит следующий по порядку: наибольший числовой номер плюс 1. Уникальность номера не проверяется.
