Редактирование поставки

Максим

Максим

Обновлено Oct 6, 2026

Изменяет поставку. Меняются только переданные поля, остальные остаются прежними. Подробнее о частичном редактировании в статье Общие правила.

v1/purchases/edit.php

Параметры

Поле Тип Обязательное Описание
purchase_id int Да ID поставки
supplier_id int Нет ID поставщика
supplier_name string Нет Имя поставщика и поля supplier_*
materials array Нет Строки материалов. Заменяют текущие строки целиком
products array Нет Строки продуктов. Заменяют текущие строки целиком
date_placed string Нет Дата заказа поставки
date_received string Нет Дата получения. Пустая строка очищает ее
materials_storage_id int Нет Склад материалов
products_storage_id int Нет Склад продуктов
delivery_price float Нет Стоимость доставки
discount float Нет Скидка
notes string Нет Заметки

Статус и статус оплаты этим методом не меняются, для них есть v1/purchases/update_status и v1/purchases/update_payment.

Как работает

  • Строки. Если передан materials или products, состав заменяется целиком, а непереданный массив считается пустым. Строки из ответа v1/purchases/get_entry можно отправить обратно без изменений.
  • Строки не переданы. Controlata восстанавливает суммы строк такими, какими их ввели, до распределения доставки и скидки. Поэтому, если изменить только delivery_price или discount, суммы строк останутся прежними, а себестоимость строк распределится заново.
  • Скидка на всю сумму. Если итог поставки равен 0 (скидка равна сумме строк и доставке), исходные суммы строк восстановить нельзя. Тогда передайте materials и products явно, иначе запрос будет отклонен.
  • Цены. Цены материалов и себестоимость продуктов без состава обновляются только по строкам, у которых изменились количество, сумма или себестоимость. Изменение доставки или скидки меняет себестоимость всех строк, поэтому обновит цены всех позиций поставки.
  • Поставщик. Без supplier_id и supplier_name поставщик остается прежним. supplier_name с тем же именем, что у текущего поставщика, не создает дубль. Другое имя создает нового поставщика. Текущего поставщика можно передать по supplier_id, даже если он уже удален.
  • Склады. При смене склада поступление переносится на новый склад, остатки пересчитываются на обоих складах.
  • Статус сохраняется. Если поставка уже получена, новые строки сразу поступают на склад. Если поставка получалась частями, изменение количества сначала затрагивает неполученную часть.

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

Изменить стоимость доставки, не передавая строки:

{
    "purchase_id": 29645,
    "delivery_price": 3000
}

Суммы строк останутся 26000 и 4000, а себестоимость станет 28600 и 4400. Цены материалов обновятся по новой себестоимости.

Заменить состав поставки:

{
    "purchase_id": 29645,
    "materials": [
        {
            "sku": "M010",
            "amount": 0.25,
            "total": 32500
        }
    ]
}

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

{
    "success": true
}

Ошибки

Ошибка Причина
No purchase_id in input Не передан purchase_id
Purchase not found or access denied Поставка не найдена или удалена
The purchase total is 0, so line totals cannot be restored. Pass materials and products explicitly Итог поставки равен 0, а строки не переданы
Storage ID is not set Передан пустой склад
Storage ID not found Склад не найден или удален
Date is not a valid date in format YYYY-MM-DD Неверная дата. Пустая date_placed тоже отклоняется
Materials is not an array materials не массив (так же для products)
No products or materials in input Переданы пустые materials и products
Material with SKU "M010" not found Позиция не найдена или удалена
Supplier not found or access denied Поставщик supplier_id не найден или удален
Supplier name must not be empty Пустое supplier_name
Invalid supplier_type value. Must be one of: 1, 2, 3 Неверный тип нового поставщика

Остальные ошибки в строках те же, что в v1/purchases/add.