Заказ остаётся нераспределённым, когда алгоритм не нашёл для него допустимого места ни в одном маршруте или решил, что обслуживать его дороже, чем заплатить штраф. В документации Яндекс Маршрутизации такие заказы называются drops: их исключают из всех маршрутов, при нехватке машин или курьеров и когда одиночный дальний заказ выгоднее перенести на другую смену. Они возвращаются в результате отдельным списком (поле dropped_locations), а с апреля 2026 ответ API содержит подробные причины нераспределения. С них и стоит начинать разбор.

Сначала включите подробные причины

По умолчанию в ответе приходит краткая информация. Чтобы увидеть детали, включите опцию detailed_drop_reasons со значением true: в Excel она находится на листе Options, в API её передают в объекте options. После этого для каждого нераспределённого заказа в поле detailed_drop_reason возвращаются причина, список идентификаторов машин, которые не смогли выполнить заказ по этой причине, и число таких машин. Это быстрый способ понять масштаб: если причина названа для всех машин парка, править нужно сам заказ, если только для части, смотрите настройки этих машин.

Язык полей ответа, включая причины нераспределения, задаёт параметр lang при добавлении задачи через API. Полного перечня причин в документации нет, там приведён один пример: ни у одной машины нет тегов, которые требует заказ, например нужного оборудования. Поэтому читайте текст причины в собственном ответе, а таблицу ниже используйте как карту: она показывает, в каком блоке исходных данных искать ошибку.

Порядок проверки

  1. Включите подробные причины и запустите задачу заново на тех же данных. Поиск вероятностный, поэтому результат может немного отличаться от запуска к запуску, но если один и тот же заказ выпадает всякий раз, причина лежит в данных.
  2. Найдите общую примету у выпавших заказов: один склад, одно окно, одна зона, один тег, одна смена.
  3. Проверьте окна времени и сервисное время заказов.
  4. Проверьте вместимость, смены и теги машин.
  5. Проверьте адреса и координаты.
  6. Только после этого добавляйте машины или смены: часто хватает исправить единицы измерения или окно.

Меняйте по одному параметру за запуск, иначе непонятно, что именно помогло.

Диагностика по симптомам

ПричинаКак проявляетсяЧто менять
Окна времениВыпадают заказы с жёстким окном (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 доступны подробные причины нераспределения заказов.

Что проверить в первую очередь, если заказы не распределились? Окна времени, вместимость машин и время обслуживания, затем число машин и смен.

Читайте также

Раздел: Автоматизация логистики, оптимизация доставки и работы курьерской службы

Похожие записи