Заказ остаётся нераспределённым, когда алгоритм не нашёл для него допустимого места ни в одном маршруте или решил, что обслуживать его дороже, чем заплатить штраф. В документации Яндекс Маршрутизации такие заказы называются drops: их исключают из всех маршрутов, при нехватке машин или курьеров и когда одиночный дальний заказ выгоднее перенести на другую смену. Они возвращаются в результате отдельным списком (поле dropped_locations), а с апреля 2026 ответ API содержит подробные причины нераспределения. С них и стоит начинать разбор.
Сначала включите подробные причины
По умолчанию в ответе приходит краткая информация. Чтобы увидеть детали, включите опцию detailed_drop_reasons со значением true: в Excel она находится на листе Options, в API её передают в объекте options. После этого для каждого нераспределённого заказа в поле detailed_drop_reason возвращаются причина, список идентификаторов машин, которые не смогли выполнить заказ по этой причине, и число таких машин. Это быстрый способ понять масштаб: если причина названа для всех машин парка, править нужно сам заказ, если только для части, смотрите настройки этих машин.
Язык полей ответа, включая причины нераспределения, задаёт параметр lang при добавлении задачи через API. Полного перечня причин в документации нет, там приведён один пример: ни у одной машины нет тегов, которые требует заказ, например нужного оборудования. Поэтому читайте текст причины в собственном ответе, а таблицу ниже используйте как карту: она показывает, в каком блоке исходных данных искать ошибку.
Порядок проверки
- Включите подробные причины и запустите задачу заново на тех же данных. Поиск вероятностный, поэтому результат может немного отличаться от запуска к запуску, но если один и тот же заказ выпадает всякий раз, причина лежит в данных.
- Найдите общую примету у выпавших заказов: один склад, одно окно, одна зона, один тег, одна смена.
- Проверьте окна времени и сервисное время заказов.
- Проверьте вместимость, смены и теги машин.
- Проверьте адреса и координаты.
- Только после этого добавляйте машины или смены: часто хватает исправить единицы измерения или окно.
Меняйте по одному параметру за запуск, иначе непонятно, что именно помогло.
Диагностика по симптомам
| Причина | Как проявляется | Что менять |
|---|---|---|
| Окна времени | Выпадают заказы с жёстким окном (hard_window равно true). Нарушение жёсткого окна исключает заказ из маршрутов, мягкое даёт только штраф | Проверьте time_window заказа (он обязателен) и совпадение со сменами машин. Сделайте окно мягким или добавьте второе через time_windows (окна не должны пересекаться). Учтите, что сервисное время по умолчанию не входит в окно: это регулирует options.penalize_late_service |
| Вместимость | Заказ больше любой машины по весу, объёму или местам | Сверьте shipment_size заказа с capacity машины и с limits (проценты загрузки). Названия пользовательских единиц в shipment_size.custom и capacity.custom должны совпадать. Если заказ можно делить, используйте can_be_split |
| Время обслуживания | Заказы не помещаются в окна, нужно больше курьеров, чем есть | Проверьте service_duration_s: значения задаются в секундах, поэтому десять минут записывают как 600, а число 10 означало бы десять секунд. Завышенное сервисное время увеличивает число нужных курьеров |
| Нехватка машин и смен | Заказов больше, чем вмещают смены; выпадает хвост списка, часто самые дальние адреса | Проверьте жёсткие границы смены (hard_max_duration_s, hard_window). По умолчанию машина делает один рейс за смену: число рейсов задаёт max_runs. Посмотрите, не стоит ли ограничение на использование части автомобилей. Затем добавляйте машины или смены |
| Теги, зоны, несовместимость | В причине фигурирует отсутствие нужных свойств у машин | Сверьте required_tags заказа с vehicle.tags и excluded_tags машин, проверьте allowed_zones и forbidden_zones (запрет приоритетнее разрешения), а также incompatible_load_types |
| Координаты и адреса | Выпадает один заказ или группа заказов с общим признаком, например из одного файла | Широта и долгота задаются в WGS84 (point.lat, point.lon). Координаты 0,0 приводят к ошибке запроса, а выброс из-за неудачного геокодирования может увести точку так далеко, что ни один маршрут её не берёт. Если координат нет, обязателен address, и геокодировать его нужно самостоятельно |
| Ограничения склада и транзита | Заказы выпадают у конкретного склада | Проверьте depot_ready_time, depot_expiring_time и transit_time.hard_limit_s: это жёсткие ограничения, исключающие заказ. Для pickup-заказа с pickup_must_reach_depot, равным true, нужен курьер, посещающий склад, иначе задача завершится ошибкой |
Когда часть заказов остаётся намеренно
Алгоритм сравнивает стоимость задействованных машин со штрафами, поэтому при большом штрафе за недоставку он будет тянуть любой заказ, а при малом оставит дальний адрес без маршрута. Штраф за нераспределение задаётся в locations.penalty.drop, по умолчанию он равен 1 000 000. Допустимую долю нераспределённых заказов регулирует max_drop_penalty_percentage в options: для этого добавляют блок penalty с полем drop_penalty_percentage (поля fixed и per_percent) и уменьшают penalty.drop. Диапазон значений max_drop_penalty_percentage на странице документации описан противоречиво, поэтому проверьте его перед использованием.
Если нераспределённых заказов много и это допустимо, можно включить options.restart_on_drop: задача запустится повторно, маршруты для распределённых заказов получатся оптимальнее, но время расчёта вырастет. Документация советует эту опцию только при допустимо большом числе нераспределённых заказов.
Жёсткие ограничения алгоритм не нарушает никогда: число курьеров, вместимость машины, несовместимость заказов и машин, последовательность выполнения заказов. Мягкие, как временные окна (если они не заданы жёсткими), пробег за смену, число остановок и длительность смены, он нарушает за штраф. Время решения ограничено, а при более чем 1000 заказах оно растёт, поэтому для крупных задач сравнивайте два или три запуска.
Частые вопросы
Где посмотреть причину, по которой заказ не распределился? С апреля 2026 года в ответе API доступны подробные причины нераспределения заказов.
Что проверить в первую очередь, если заказы не распределились? Окна времени, вместимость машин и время обслуживания, затем число машин и смен.
Читайте также
- Яндекс Маршрутизация: как работает сервис, инструкция
- Яндекс Маршрутизация 2026: обновления и новинки по месяцам
- Маршрутизация доставки: как задавать окна, вес и время
- Как включить Яндекс Маршрутизацию: регистрация и тест
- Excel-шаблон для Яндекс Маршрутизации: как заполнить
- Яндекс Маршрутизация API: возможности планирования
- Глоссарий Яндекс Маршрутизации
Раздел: Автоматизация логистики, оптимизация доставки и работы курьерской службы