Изменяет перемещение. Меняются только переданные поля, остальные остаются прежними. Подробнее о частичном редактировании в статье [Общие правила](https://developers.controlata.ru/hc/api-docs/articles/rules).

```
v1/transfers/edit.php
```

## Параметры

| Поле | Тип | Обязательное | Описание |
|---|---|---|---|
| transfer_id | int | Да | ID перемещения |
| materials | array | Нет | Перемещаемые материалы: id или sku и amount |
| products | array | Нет | Перемещаемые продукты: id или sku и amount |
| source_storage_id | int | Нет | Склад, с которого перемещаются позиции |
| target_storage_id | int | Нет | Склад, на который перемещаются позиции |
| num | string | Нет | Номер |
| date | string | Нет | Дата перемещения, YYYY-MM-DD |
| notes | string | Нет | Заметки |

Если передан materials или products, строки заменяются целиком. Строки передаются только в одном массиве, как в [v1/transfers/add](https://developers.controlata.ru/hc/api-docs/articles/transfers-add). Если не передан ни один массив, строки остаются прежними. Статус этим методом не меняется, для него есть [v1/transfers/update_status](https://developers.controlata.ru/hc/api-docs/articles/transfers-update-status).

## Как работает

* **Пересчет.** Перемещение проводится заново: прежние движения отменяются, строки списываются с источника по FIFO с текущими остатками. Статус сохраняется.
* **Тип перемещения** меняется вместе со строками: передайте строки в другом массиве, например products вместо materials.
* **Склады** проверяются, только если переданы склады или строки. Тогда оба склада, в том числе непереданный, должны существовать, различаться и хранить позиции типа перемещения. Поэтому перемещение со складом, который позже удалили, можно изменить, если не передавать склады и строки.

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

```
{
    "transfer_id": 6967,
    "target_storage_id": 4005,
    "notes": "В магазин на Гагарина"
}
```

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

```
{
    "success": true
}
```

## Ошибки

| Ошибка | Причина |
|---|---|
| No transfer_id in input | Не передан transfer_id |
| Transfer not found or access denied | Перемещение не найдено или удалено |
| A transfer moves either materials or products. Create separate transfers | Переданы и materials, и products |
| No products or materials in input | Массивы строк переданы, но пустые |
| Product with id 512 not found | Продукт не найден или удален |
| Amount must be greater than 0 for product with id 512 | Количество не число или не больше 0 после округления |
| Storage ID is not set | Склад равен 0 или пустой |
| Storage ID not found | Склад не найден или удален |
| Source and target storage locations must be different | Склады совпадают |
| Storage location 4005 does not store products | Склад не хранит позиции этого типа |
| Date is not a valid date in format YYYY-MM-DD | Неверный формат даты |

Остальные ошибки строк такие же, как в [v1/transfers/add](https://developers.controlata.ru/hc/api-docs/articles/transfers-add).
