Максим

Максим

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

Методы для работы с заказами: создание, редактирование, смена статуса и статуса оплаты, удаление и получение заказов.

Все адреса указаны относительно базового https://api.controlata.ru/connect/v1/. Формат запросов и авторизация описаны в статье Обзор API.

Номер заказа и префикс

К номеру заказа Controlata добавляет Префикс для номеров заказов из настроек интеграции. Например, при префиксе A- и "num": "1001" заказ получит номер A-1001, и в ответах методов get_list и get_entry поле num придет уже с префиксом.

Важно: в orders/edit.php передавайте номер без префикса. Если отправить "num": "A-1001", номер станет A-A-1001.

Уникальность номера не проверяется.

Состав заказа

Продукты передаются в массиве products, материалы в массиве materials. У каждой строки три поля:

Поле Тип Описание
sku string Артикул
amount float Количество
total float Сумма строки (цена × количество)

Продукт ищется сначала по основному артикулу, затем по альтернативным. Если артикул не найден, строка пропускается, а в заметки заказа добавляется сообщение вида Product with SKU "A001", amount 2, total 1800 not found in Controlata, check sku.. Заказ создается из найденных строк. Если не найдена ни одна строка, вернется ошибка.

Материалы можно передавать, только если в Настройки → Основные включена Возможность заказа материалов. У материалов нет альтернативных артикулов.

Сумма заказа: сумма строк + delivery_price − discount.

Статусы

Код Статус заказа Код Статус оплаты
0 Новый 0 Не оплачен
1 Упакован 1 Частично оплачен
2 Частично отправлен 2 Оплачен
3 Отправлен
4 Отменен

Статус 2 приходит в ответах, но установить его через API нельзя.

Статус влияет на остатки. В статусах Упакован и Отправлен продукты и материалы заказа списаны со склада. В статусе Новый списание только запланировано. В статусе Частично отправлен списаны отгруженные строки, остальные запланированы. В статусе Отменен заказ на остатки не влияет.

Создание заказа

POST orders/add.php

Поле Тип Обязательное Описание
num string Да Номер заказа без префикса
products array Да* Продукты заказа
materials array Да* Материалы заказа
customer_id int Да** ID существующего покупателя
customer_name string Да** Имя нового покупателя. Не учитывается, если передан customer_id
products_storage_id int Нет Склад для продуктов. По умолчанию Склад по умолчанию для продуктов в заказах. Старое название поля storage_id тоже работает
materials_storage_id int Нет Склад для материалов. По умолчанию Склад по умолчанию для материалов в заказах
date_placed string Нет Дата заказа. По умолчанию сегодня
date_shipped string Нет Дата отправки
delivery_price float Нет Стоимость доставки
discount float Нет Скидка суммой, не процентом
production int Нет 1: создать производство под заказ
notes string Нет Заметки

* Нужен хотя бы один из массивов: products или materials. ** Нужно одно из полей: customer_id или customer_name.

Новый покупатель создается из полей customer_name и необязательных customer_type, customer_email, customer_phone, customer_address_real, customer_address_legal, customer_inn, customer_kpp, customer_ogrn, customer_agreement, customer_manager_name, customer_manager_post, customer_notes. Значения такие же, как у полей в статье Покупатели.

Заказ создается в статусе из настройки Статус нового заказа по умолчанию (Настройки → Основные) и со статусом оплаты Не оплачен.

При "production": 1 Controlata создает производство «Под заказ <номер>» на складах по умолчанию для производства. Продукты для такого заказа выпускает производство, поэтому products_storage_id не учитывается. Материалы заказа списываются со склада как обычно.

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

{
    "num": "1001",
    "customer_name": "Петров Иван",
    "customer_email": "petrov@example.com",
    "delivery_price": 500,
    "discount": 100,
    "products": [
        {
            "sku": "A001",
            "amount": 2,
            "total": 1800
        },
        {
            "sku": "A002",
            "amount": 1,
            "total": 1000
        }
    ]
}

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

{
    "success": true,
    "order_id": 456,
    "customer_id": 789
}

Редактирование заказа

POST orders/edit.php

Обязательные поля: order_id, num, состав (products или materials) и покупатель (customer_id или customer_name). Остальные поля такие же, как при создании.

Важно: метод перезаписывает заказ целиком. Если поле не передано:

  • date_placed станет сегодняшней датой
  • date_shipped, notes станут пустыми
  • delivery_price, discount станут равны 0
  • production станет равен 0, и связанное производство будет удалено
  • склады останутся прежними

Передавайте customer_id, а не customer_name: с customer_name при каждом редактировании создается новый покупатель.

Статус и статус оплаты при редактировании не меняются.

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

{
    "success": true
}

Смена статуса заказа

POST orders/update_status.php

Поле Тип Обязательное Описание
order_id int Да ID заказа
status int Да Новый статус: 0, 1, 3 или 4
date_shipped string Нет Дата отправки. Учитывается при переходе в статус Отправлен

Как статус влияет на остатки, описано выше в разделе Статусы. Если перевести заказ из статуса Отправлен или Частично отправлен в Новый, Упакован или Отменен, отгрузки по заказу удаляются. Повторная установка того же статуса ничего не меняет.

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

{
    "success": true
}

Смена статуса оплаты

POST orders/update_payment.php

Поле Тип Обязательное Описание
order_id int Да ID заказа
status int Да Статус оплаты: 0, 1 или 2

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

{
    "success": true
}

Удаление заказа

POST orders/delete.php

Обязательное поле: order_id.

Заказ удаляется полностью. Отгруженные продукты и материалы возвращаются на склад, связанное производство удаляется.

Получение списка заказов

POST orders/get_list.php

Поле Тип Обязательное Описание
date_from string Нет Дата заказа от, включительно
date_to string Нет Дата заказа до, включительно

Заказы приходят от новых к старым, без постраничной разбивки. Используйте date_from и date_to, чтобы ограничить выборку. Состав заказа в списке не передается, его возвращает orders/get_entry.php.

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

{
    "success": true,
    "orders": [
        {
            "id": "31591",
            "num": "A-103",
            "status": "0",
            "payment": "0",
            "date_placed": "2025-08-09",
            "date_shipped": "2025-08-11",
            "total": "480000.00",
            "subtotal": "480000.00",
            "delivery_price": "0.00",
            "discount": "0.00",
            "cost": "229400.00",
            "notes": "",
            "amount": "6.000",
            "lines": "3",
            "shipments_count": "0",
            "production": "0",
            "production_num": null,
            "source": "api",
            "products_storage_id": "3998",
            "products_storage_name": "Главный",
            "materials_storage_id": null,
            "materials_storage_name": null,
            "customer_id": "4877",
            "customer_name": "Михаил Петров",
            ...
        }
    ]
}

Поля покупателя в списке такие же, как в orders/get_entry.php.

Получение данных заказа

POST orders/get_entry.php

Обязательное поле: order_id.

Строки заказа приходят в двух массивах, products и materials. Поле position сквозное для обоих массивов и задает порядок строк в заказе. Поле amount у заказа равно null, если у строк разные единицы измерения.

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

{
    "success": true,
    "order": {
        "id": "31591",
        "num": "A-103",
        "status": "0",
        "payment": "0",
        "date_placed": "2025-08-09",
        "date_shipped": "2025-08-11",
        "subtotal": "480000.00",
        "delivery_price": "0.00",
        "discount": "0.00",
        "total": "480000.00",
        "cost": "229400.00",
        "notes": "",
        "amount": "6.000",
        "lines": "3",
        "source": "api",
        "production": "0",
        "production_num": null,
        "customer_id": "4877",
        "customer_type": "3",
        "customer_name": "Михаил Петров",
        "customer_email": "petrov@example.com",
        "customer_phone": "",
        "customer_address_real": "",
        "customer_address_legal": "",
        "customer_inn": "",
        "customer_kpp": "",
        "customer_ogrn": "",
        "customer_agreement": "",
        "customer_manager_name": "",
        "customer_manager_post": "",
        "customer_notes": "",
        "products_storage_id": "3998",
        "products_storage_name": "Главный",
        "materials_storage_id": null,
        "materials_storage_name": null,
        "products": [
            {
                "id": "48390",
                "sku": "F003",
                "name": "Стул обеденный дубовый",
                "amount": "4",
                "unit": "шт",
                "total": "180000",
                "price": "45000",
                "cost": "99520",
                "position": "0"
            }
        ],
        "materials": []
    }
}

Поля storage_id и storage_name тоже приходят в ответе и повторяют products_storage_id и products_storage_name. Они оставлены для совместимости, в новом коде используйте products_storage_id.

Ошибки

Ошибка Причина
No num in input Не передано обязательное поле (вместо num будет имя поля)
No products or materials in input Нет ни продуктов, ни материалов
Products is not an array products передан не массивом (так же для materials)
SKU not set for product 0 У строки нет артикула (так же Amount not set, Total not set)
All products have wrong SKU Ни один артикул не найден
Materials in orders are disabled in company settings Переданы материалы, но заказ материалов выключен в настройках
No customer_name or customer_id in input Не указан покупатель
Customer not found Покупатель с таким customer_id не найден
Storage ID not found Склад с таким ID не найден
Date is not a valid date in format YYYY-MM-DD Неверный формат даты
Order not found or access denied Заказ с таким ID не найден
Invalid status value. Must be one of: 0, 1, 3, 4 Неверный статус заказа
Invalid payment status value. Must be one of: 0, 1, 2 Неверный статус оплаты