Возможные логистические сценарии

Для всех логистических сценариев обязательно укажите склады, заказы и курьеров. Набор данных является зависимым по составу курьеров и заказов. Если их можно разделить на независимые части (когда какую-то группу заказов выполняют только определенные машины и смешивания не происходит), то рекомендуем делать несколько отдельных запусков планирования, каждый со своим составом заказов и курьеров. Например, в таких ситуациях:

  • Несколько складов, с каждого склада отгружается свой набор заказов и каждый склад обслуживается своим набором транспорта.

  • Доставка со склада и сбор грузов на склад осуществляется разными машинами (и это разные независимые заказы).

  • У одного склада есть несколько географических зон, каждая из которых обслуживается своим набором транспорта.

Описанные ниже логистические сценарии можно комбинировать между собой. Если в приведенных примерах нет ничего похожего на вашу бизнес-задачу — обратитесь к вашему менеджеру из команды Яндекс Маршрутизации или в техническую поддержку routing-support@yandex-team.ru.

Доставка с одного склада

Это сценарий по умолчанию, когда необходимо спланировать доставку товаров по клиентам или построить маршрут для посещения заданного набора точек. Он используется, если в запросе есть только один склад, а для заказов в поле location указан тип delivery, или это поле не задано (см. Тип заказа). Алгоритм построит маршрут для доставки всех заказов с указанного склада.

Схема

Пример

В этом решении 30 заказов. Все они доставляются с одного склада. Тип заказа type не обозначен явно, поэтому по умолчанию принимает значение delivery.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Сбор грузов на склад

Это сценарий по умолчанию, когда грузы собираются с клиентов для доставки на склад. Такими грузами могут быть, например:

  • медицинские анализы, которые осуществляются на дому;

  • одежда для химчистки;

  • возвраты от клиентов на склад.

В последнем случае этот сценарий часто используется в комбинации с доставкой с одного склада.

Для указания точек сбора груза на склад необходимо указать тип заказа type = pickup (см. Тип заказа). Дальше возможны варианты:

  1. Все курьеры должны в конце дня возвращаться на склад (см. Возврат на склад в конце рабочего дня), то есть опция return_to_depot = true. В этом случае ничего дополнительно настраивать не нужно, курьер завершает маршрут на складе по умолчанию.

  2. Груз должен остаться в машине курьера и вернуться на склад уже утром, когда курьер приезжает на следующую смену. Для этого нужно задать return_to_depot = false. Маршрут закончится в последней точке pickup. Также ничего не нужно настраивать дополнительно.

  3. Не все курьеры в конце дня возвращаются на склад – алгоритм выберет, какие должны вернуться. Для курьера используется поле return_to_depot = false, а для pickup-заказов указывается обязательность доставки на склад в текущем маршруте pickup_must_reach_depot = true или настраивается delivery_deadline — время доставки заказа на склад.

    Если заказ привязан к складу, то есть в поле depot_id указан один или несколько идентификаторов складов, pickup-заказ будет доставлен в текущем маршруте на один из этих складов независимо от значения поля pickup_must_reach_depot.

Схемы

  • Доставка груза на склад.

  • Доставка груза на один из нескольких складов.

Пример 1

Сбор грузов на склад, все машины в конце дня должны вернуться на склад (return_to_depot = true). 30 заказов, 1 склад, 5 точек сбора груза на склад.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

То же, что в примере 1. Для одного из автомобилей указано return_to_depot = false, то есть груз останется в машине курьера и вернется на склад уже утром.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 3

То же, что в примере 1, но точки сбора выбраны другие. Ко всем автомобилям применяется return_to_depot = false, а для точек сбора грузов указано delivery_deadline. На склад в конце дня вернется только машина, в которую попали все заказы с типом pickup.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Старт или окончание маршрута в произвольной точке

В каких ситуациях использовать

По умолчанию маршрут для курьера начинается и завершается на складе. Однако бывают ситуации, когда необходимо планировать маршрут с места парковки машины, из дома курьера или наоборот — завершать маршрут поближе к этим точкам.

Как реализовать сценарий

За определение точек старта отвечают параметры start_at и visit_depot_at_start, точек окончания — finish_at и return_to_depot.

Совет

Не при всех сочетаниях этих параметров в решении используется склад (например, если все курьеры стартуют из дома и сразу едут на заказы), но он является обязательным для заполнения в схеме данных. В этом случае в качестве склада можно указать координаты офиса или координаты центра города.

Параметры точек старта и окончания являются независимыми относительно друг друга, поэтому здесь можно настраивать любые сочетания:

  • Точки старта и окончания задаются отдельно для каждого курьера.

  • Одну и ту же точку можно указывать для нескольких курьеров.

  • Можно указывать одинаковые точки для старта и окончания.

Чтобы указать определенную точку старта или окончания маршрута, используйте тип заказа garage. Если vehicle.visit_depot_at_start = false, а значение параметра vehicle.start_at не определено, то алгоритм считает, что курьер может начинать маршрут с первого заказа, не посещая склад.

Внимание

Комбинация параметров, когда start_at не определено и visit_depot_at_start = false, применима в случае, если в маршруте есть заказы типа pickup или связка pickup & delivery. Заказы, которые доставляются со склада, не планируются первыми и появляются в маршруте только после посещения склада курьером.

Если vehicle.visit_depot_at_start = false, но курьеру все же нужно начать маршрут с посещения склада (например, чтобы забрать заказы типа delivery), укажите значение параметра vehicle.can_visit_depot_at_start = true. В этом случае курьер сможет заехать на склад.

Если при этом определено start_at и заказы:

— привязаны к складу (задан параметр location.depot_id), то курьер начнет маршрут из точки типа garage, затем заедет за заказами на склад, после чего продолжит маршрут;

— не привязаны к складу (параметр location.depot_id не задан), то курьер не будет заезжать на склад и начнет работу сразу из точки типа garage.

Схемы для точек старта

  • Старт маршрута из точки заказа без заезда на склад (start_at не определено, visit_depot_at_start = false). Начальную точку заказа для курьера выбирает алгоритм.

  • Старт маршрута со склада (start_at не определено, visit_depot_at_start = true). Поведение алгоритма по умолчанию.

  • Старт маршрута из определенной точки без заезда на склад (start_at определено, visit_depot_at_start = false). Точка старта может быть различна для разных курьеров.

  • Старт маршрута из определенной точки с заездом на склад (start_at определено, visit_depot_at_start = true). Точка старта может быть различна для разных курьеров.

  • Старт маршрута при visit_depot_at_start = false и can_visit_depot_at_start = true (start_at определено, первый заказ привязан к складу с помощью location.depot_id).

Схемы для точек окончания

  • Окончание маршрута в последней точке без возврата на склад (finish_at не определено, return_to_depot = false).

  • Возврат на склад по окончании маршрута (finish_at не определено, return_to_depot = true).

  • Окончание маршрута в определенной точке без возврата на склад (finish_at определено, return_to_depot = false). Точка окончания может быть различна для разных курьеров.

  • Окончание маршрута в определенной точке с предварительным заездом на склад (finish_at определено, return_to_depot = true). Точка окончания может быть различна для разных курьеров.

Pickup & delivery: прием и доставка груза в произвольных точках

В каких ситуациях использовать

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

  • товар необходимо забрать со склада поставщика и отвезти клиенту (в том числе поддерживаются сценарии множественных pickup, когда нужно собрать товар на нескольких складах от разных поставщиков и отвезти одному клиенту);

  • возврат товара (необходимо забрать у клиента и отвезти не на основной склад, а на склад для возвратов).

Также сценарий можно использовать в ситуации, когда есть простые зависимости между точками. Например, прежде чем оказаться у клиента, нужно заехать за инструментами, документами или ключами.

Этот сценарий можно использовать вместе со сценариями сбора грузов на складе и доставки с одного склада.

Как реализовать сценарий

Отличительной особенностью использования сценария pickup & delivery является использование связанной пары точек, одна из которых всегда посещается раньше другой: сначала pickup, затем delivery. Связка осуществляется по полю delivery_to, которое заполняется для точки pickup и в котором указывается идентификатор связанного delivery.

В сценарии со множественным pickup для нескольких различных точек pickup можно указывать одно и то же значение в поле delivery_to. Группа из множественных pickup и одного delivery всегда будет планироваться для выполнения одним курьером.

В случае, если из одной точки pickup нужно доставить на разные точки delivery — необходимо указать различные пары pickup & delivery (при этом pickup заказы будут иметь одинаковые координаты, но должны иметь разные идентификаторы). Такие пары pickup & delivery могут быть запланированы на разных курьеров (несмотря на то, что pickup точка у них одинаковая). Для обязательного планирования на одного курьера рекомендуется воспользоваться группировкой заказов.

Внимание

Для точки типа delivery можно не указывать вес, объем и количество мест, но их обязательно указывать для связанного pickup.

В случае, если на точке типа delivery указываются объемно-весовые характеристики, то они должны быть одинаковы на связанном pickup заказе. То есть для ситуации множественного pickup вес, объем и количество мест достаточно указывать только на pickup заказах.

Для управления последовательностью при выполнении пар pickup & delivery рекомендуется воспользоваться функциональностью location.in_lifo_order(подробнее в разделе Очередность приема и доставки).

Схемы

  • pickup & delivery.

  • Множественный pickup для одной точки delivery.

Пример 1

Планируем 12 разных точек. Половина имеет тип pickup, другая половина — delivery. Итого получаем 6 доставок «от двери до двери».

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

Задаем 8 разных адресов для точек типа pickup и указываем для них в поле delivery_to одно и то же значение. Получаем план, по которому курьер должен забрать заказы из разных мест и привезти их все в одно место.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 3

Планируем доставку с 1 адреса на 16 разных адресов. Задаем тип pickup для 16 точек с одинаковыми адресами и тип delivery для других 16 точек.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Доставка с одного из нескольких складов

В каких ситуациях использовать

Этот сценарий используется, когда на нескольких складах есть в достаточном количестве один и тот же товар, и при планировании нужно выбрать, с какого склада его доставить.

Как реализовать сценарий

Внимание

При использовании этого сценария перечислите всех курьеров, которые стартуют с каждого склада.

Укажите при планировании несколько складов, а для каждого курьера — к каким складам он привязан (т.е. склады, с которых он может стартовать и которые может посещать в ходе маршрута). Подробнее в разделах Доставка с одного из нескольких складов и Старт с одного из нескольких складов.

Помимо этого, для сценария можно использовать функцию старта в произвольной точке без заезда на склад (подробнее в разделе Старт или окончание маршрута в произвольной точке, когда start_at определено, а visit_depot_at_start = false). Если указать для каждого курьера склад как точку старта, в которой необходимо начать отгрузку, то результат планирования будет аналогичным планированию с нескольких складов.

Примечание

Если известно, с какого склада должен отгружаться определенный заказ, используйте параметр location.depot_id. В значении параметра укажите id склада или массив id складов.

Сценарий можно реализовать и без функций сервиса, а именно через жесткое закрепление заказа за складом. Есть несколько вариантов жесткого закрепления:

  • Ближайший склад

    Между координатами адреса заказа и всеми складами рассчитывается расстояние (используйте для расчета сервис Матрица расстояний). Для заказа выбирается ближайший склад.

  • Зона доставки

    Для каждого склада заранее определена зона доставки (отрисованная с помощью Конструктора карт Яндекса). Для каждого заказа предварительно проверяется, в зону доставки какого склада он попадает. Каждый склад планируется отдельно и независимо по сценарию Доставка с одного склада.

Схема

Пример 1

В этом примере через параметр depot_id указано, к какому складу прикреплен каждый курьер. Так курьеры доставляют заказы только со своих складов.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

В этом примере курьеры начинают свой маршрут не со склада, а с одной из двух точек с типом garage. Точка старта маршрута определена через start_at.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 3

Даны три склада, три заказа и три автомобиля. Каждый автомобиль стартует со своего склада. Привязка заказов к складам через location.depot_id:

  • Заказ № 1 не привязан к складам. Его можно доставлять с любого склада.

  • Заказ № 2 привязан к складам № 1 и № 2. Этот заказ можно доставить с одного из двух указанных складов.

  • Заказ № 3 привязан к складу № 3. Он находится на определенном складе.

В результате алгоритм рассчитал два маршрута:

  1. Один курьер обслуживает заказы № 1 и № 2 со склада № 2.
  2. Другой курьер обслуживает заказ № 3 со склада № 3.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Маршруты с несколькими складами

Множественные склады

Посмотреть видео

Заезд на дополнительный склад

В каких ситуациях использовать

Частым сценарием при планировании является заезд на дополнительный склад для дозагрузки:

  1. Курьеры стартуют с основного склада 1.

  2. Часть курьеров сразу отправляется на доставку.

  3. Часть курьеров заезжает для дозагрузки на склад 2, где находится часть заказов для некоторых клиентов.

  4. Курьеры, которые отправились на дозагрузку, могут доставить часть заказов по пути на склад 2.

Как реализовать сценарий

Используйте следующие обязательные поля:

  • vehicle.allow_different_depots_in_route — возможность посещать несколько складов в одном маршруте:

    • Если true, то курьер может посещать различные склады в одном маршруте.
    • Если false (значение по умолчанию), то курьер может посещать только один склад — тот, с которого начал маршрут.
  • vehicle.max_middle_depots — максимальное количество промежуточных складов в маршруте. По умолчанию равно 0.

  • Если неважно, с какого склада начинать или где заканчивать маршруты, перечислите все склады в поле vehicle.depot_id.

    Если порядок посещения складов важен, заполните поля:

    • vehicle.starting_depot_id — склады, с которых курьер может начинать маршрут;

    • vehicle.middle_depot_id — склады для дозагрузки (промежуточные склады);

    • vehicle.ending_depot_id — склады, на которых курьер может завершить маршрут.

    Списки складов могут пересекаться.

    Если курьер завершает маршрут не на складе (return_to_depot = false), но поля vehicle.starting_depot_id и vehicle.middle_depot_id используются, в поле vehicle.ending_depot_id укажите любой склад, его посещение не будет запланировано.

Также вы можете использовать опциональные поля:

  • vehicle.depots_only_at_run_beginning — курьер может заезжать на промежуточные склады для дозагрузки только в начале рейса. По умолчанию false.

  • vehicle.finish_route_in_starting_depot или vehicle.finish_run_in_starting_depot — курьер должен завершить маршрут или рейс на том же складе, откуда выехал. По умолчанию false. Эти параметры имеет смыл использовать, только если allow_different_depots_in_route = true. Подробнее см. Возврат на склад в конце маршрута или рейса.

Посмотреть, на каком из складов был взят и куда отвезен заказ, можно в ответе API в полях picked_orders и delivered_orders.

Схемы

  • Курьер может посещать промежуточный склад в середине рейса.

  • Курьер может посещать промежуточный склад только в начале рейса (параметрvehicles.depots_only_at_run_beginning = true).

Пример 1

Курьеру необходимо доставить 4 заказа, которые находятся на 2 складах. Поэтому курьер:

  1. Стартует со склада 2, где загружает заказы 2, 3 и 4.
  2. Доставляет по дороге заказ 3.
  3. Заезжает на дозагрузку на склад 1.
  4. Доставляет оставшиеся заказы.

В результате планирования в поле picked_orders вы увидите следующие значения:

  • Order 3, Order 4, Order 2 для Depot 2;
  • Order 1 для Depot 1.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

То же, что и в примере 1, но параметр depots_only_at_run_beginning = true. В результате планирования курьер:

  1. Стартует со склада 2, где загружает заказы 2, 3 и 4.
  2. Заезжает на дозагрузку на склад 1, где забирает заказ 1.
  3. Доставляет заказы.

Запрос API (JSON)Ответ APIОткрыть на карте

Пример 3

Необходимо доставить 4 заказа:

Заказ Тип заказа Что нужно сделать
Заказ 1 delivery Забрать со склада 1 или 2
Заказ 2 delivery Забрать со склада 3 или 4
Заказ 3 pickup Отвезти на склад 1 или 3
Заказ 4 pickup Отвезти на склад 2 или 4

Поэтому курьер:

  1. Стартует со склада 2, где забирает заказ 1.
  2. Забирает по очереди pickup-заказы 3 и 4.
  3. Заезжает на промежуточный склад 3, где выгружает заказ 3 и забирает заказ 2.
  4. Отвозит по очереди заказы 2 и 1.
  5. Возвращается на склад 2, где выгружает заказ 4.

Посмотреть, на каком складе был взят заказ, можно в ответе API в поле picked_orders, а на какой склад был отвезен заказ — в поле delivered_orders.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Старт нового рейса с другого склада

В каких ситуациях использовать

В этом сценарии курьер может сделать несколько рейсов. При этом новый рейс можно начинать с другого склада (который указан в vehicle.starting_depot_id). Между рейсами возможен порожний пробег с одного склада на другой.

Как реализовать сценарий

Используйте те же параметры, что и при планировании заезда на дополнительный склад.

Чтобы курьер между рейсами мог переехать с одного склада на другой, задайте параметр can_change_depot_between_runs = true (по умолчанию false).

Схема

Пример

То же, что и в примере с заездом на дополнительный склад, но есть ограничения по весу — в автомобиль помещаются только 2 заказа. При этом курьер может совершить 2 рейса: vehicle.max_runs = 2. Каждый рейс должен начинаться на складе 2, а заканчиваться на складе 1. Чтобы курьер между рейсами мог переехать с одного склада на другой, задан параметр can_change_depot_between_runs = true. Курьер выполняет следующие действия:

  1. Стартует со склада 2, где загружает заказ 4. Заезжает на дозагрузку на склад 1 за заказом 1. Доставляет заказы 4 и 1. Завершает первый рейс на складе 1.
  2. Переезжает на склад 2. Загружает заказы 2 и 3 для второго рейса. Доставляет загруженные заказы. Снова возвращается на склад 1 в конце рейса.

Запрос API (JSON)Ответ APIОткрыть на карте

Выбор оптимального склада для старта

В каких ситуациях использовать

В этом сценарии необходимо решить, как распределить курьеров между складами, исходя из объема отгрузки на складах. Условия:

  • есть несколько складов;

  • парк автомобилей общий для всех складов.

Этот сценарий можно использовать как в том случае, когда нет необходимости заезжать на дополнительные склады, так и когда для доставки в одну точку может потребоваться заезд на дополнительные склады.

Как реализовать сценарий

Для каждого курьера в поле vehicle.starting_depot_id укажите один или несколько складов, с которых он может стартовать и забирать заказы. Алгоритм выберет оптимальный склад для старта. Также нужно указать vehicle.ending_depot_id — склады, на которых курьер может завершить маршрут.

При необходимости используйте следующие поля:

  • vehicle.allow_different_depots_in_route — возможность посещать несколько складов в одном маршруте:

    • Если true, то курьер может посещать различные склады в одном маршруте.
    • Если false, то курьер может посещать только один склад — тот, с которого начал маршрут.
  • vehicle.middle_depot_id — склады для дозагрузки (промежуточные склады).

  • vehicle.max_middle_depots — максимальное количество промежуточных складов во всем маршруте. По умолчанию равно 0.

Примечание

Списки складов могут пересекаться. Если состав начальных, промежуточных и конечных складов совпадает, вместо указания трех отдельных полей можно перечислить их в поле vehicle.depot_id.

Схема

Пример

Товары для доставки есть на двух складах. Для курьера в поле starting_depot_id указаны оба склада, но завершить маршрут нужно на складе 2. Так как склад 2 находится дальше от адресов доставки, то алгоритм выбирает для старта склад 1, но завершает маршрут на складе 2.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Доставка в одну из возможных точек

В каких ситуациях использовать

Используйте этот сценарий для ситуаций, когда груз можно доставить в одну из нескольких возможных точек и при планировании нужно выбрать оптимальную из них:

  • Прием медицинских анализов на дому — отвезти их в ближайшую лабораторию.

  • Вывоз мусора или сбор металлолома — отвезти все на ближайших полигон.

  • Получение посылки от клиента — отправить ее через стороннюю транспортную компанию, а для этого — отвезти в ближайший терминал приема.

  • Курьерская доставка — спланировать встречу обычного курьера и курьера с фиксированным маршрутом, который собирает срочные отправления у обычных курьеров.

Как реализовать сценарий

Реализуйте сценарий доставки в одну из возможных точек с помощью параметра delivery_to_any.

Посмотреть, куда был отвезен заказ, можно в ответе API — у складов или заказов drop_off в поле delivered_orders.

Схема

Пример

В этом примере реализован набор заказов pickup, у каждого из которых в delivery_to_any указано несколько одинаковых точек. Собрав заказы, в конце смены курьер отвезет их на ближайшую точку drop_off. Для первого курьера это будет «Лаборатория 4», а для второго «Лаборатория 2» — в ответе API доставленные в эти точки заказы перечислены в полях delivered_orders.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Получение груза в одной из возможных точек

В каких ситуациях использовать

Используйте этот сценарий в ситуациях, когда определенный груз можно получить в одной из нескольких точек и при планировании нужно выбрать оптимальную из них. Например:

  • товар для доставки находится в разных точках (например, в одном из продуктовых магазинов или аптек);

  • груз можно получить в одном из терминалов сторонней транспортной компании;

  • необходимо спланировать встречу обычного курьера и курьера с фиксированным маршрутом, который передает срочные отправления обычным курьерам.

Как реализовать сценарий

Подробнее читайте в разделе с описанием параметра pickup_from_any.

Схема

Пример

В примере определены 2 заказа delivery, у которых pickup_from_any равен true. С каждым из этих заказов связано по 2 заказа pickup.

Обратите внимание, что у всех pickup и у связанного delivery вес должен быть одинаковым.

Запрос API (JSON)Ответ APIОткрыть на карте

Планирование нескольких рейсов со склада для одного курьера

В каких ситуациях использовать

  • Объем отгрузки превышает доступную грузоподъемность

    В этом случае все автомобили либо часть из них должны совершить более одного рейса, чтобы вывезти весь объем заказов.

  • Невозможно собрать все заказы к отгрузке

    Иногда мощности склада не позволяют собрать все заказы к началу отгрузки, но доставку нужно начинать сразу же, чтобы обеспечить выполнение окон заказов. В этом случае в первый рейс курьеры буду выезжать недогруженными, чтобы успеть развезти заказы с более ранними окнами доставки. Тем временем склад будет собирать заказы с более поздним окном доставки, которые будут доставляться уже следующими рейсами.

Как реализовать сценарий

Схема

Пример 1

В этом примере суммарный вес трех заказов (3000 кг) превышает суммарную грузоподъемность двух машин (2500 кг). Курьер № 2 совершит два рейса (max_runs), и во втором рейсе отвезет третий заказ.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

В этом примере курьер сначала развезет более ранние заказы (time_window), готовность которых определяется через depot_ready_time. Параметр max_runs позволит ему вернуться на склад для дозагрузки более поздних заказов.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Кросс-докинг

Кросс-док — это склад, на котором осуществляется перевалка, переконсолидация или догрузка товара. Для таких складов в поле type указывается значение crossdock.

Кросс-докинг можно использовать для части заказов, чтобы обеспечить скорость доставки и сократить затраты на транспорт: заказы заранее отвозят на кросс-док поближе к дальним заказам. Например, склад расположен к северу от города, и доставка происходит днем. Тогда для доставки заказов в южную часть города организуют кросс-док на юге, куда часть заказов доставляют ночью крупным транспортом.

На кросс-доках заказы не хранятся — сначала один или несколько автомобилей привозят заказы, а затем один или несколько автомобилей забирают эти заказы и отвозят клиентам. На текущий момент перевозить заказы до кросс-дока и после должны разные автомобили.

Для автомобилей устанавливается ограничение по работе с кросс-доками с помощью параметра crossdock_mode. Он может принимать следующие значения:

  • allow — автомобиль может отвозить заказы и клиентам, и на кросс-док (это значение по умолчанию);
  • deny — автомобиль может отвозить заказы только клиентам;
  • mandatory — автомобиль может отвозить заказы только на кросс-док.

Чтобы указать, какие склады или кросс-доки посещает автомобиль, используйте поля vehicle.depot_id, vehicle.starting_depot_id, vehicle.middle_depot_id и vehicle.ending_depot_id.

Внимание

В полях vehicle.depot_id, vehicle.starting_depot_id, vehicle.middle_depot_id и vehicle.ending_depot_id нельзя одновременно указывать и обычные склады, и кросс-доки. В одном маршруте курьер может посещать или только обычные склады, или только кросс-доки.

Для заказов также задается параметр crossdock_mode со следующими значениями:

  • allow — заказ можно доставлять и напрямую со склада, и через кросс-док (это значение по умолчанию);
  • deny — заказ можно доставлять только напрямую со склада;
  • mandatory — заказ можно доставлять только через кросс-док.

Чтобы указать, на каком складе находится заказ или через какой кросс-док он должен быть доставлен, используйте поле location.depot_id. Если указано несколько складов и кросс-доков, это означает, что заказ можно забрать с любого из них.

Для заказов типа pickup можно задать параметр may_drop_in_crossdock, который принимает следующие значения:

  • true — заказ можно оставить в кросс-доке (значение по умолчанию);
  • false — заказ должен быть доставлен на обычный склад.

Параметр may_drop_in_crossdock можно использовать только в сценарии Доставка в одну из возможных точек. Если есть связки заказов pickup&delivery с возможностью перевалки в кросс-доке, используйте сценарий Pickup & delivery через кросс-док.

Примечание

Курьер сначала отвозит заказы типа delivery на кросс-док и только после этого забирает заказы типа pickup с кросс-дока.

Время обслуживания

Для заказов, которые доставляются через кросс-док, учитывается сервисное время location.crossdock_service_duration_s. Когда автомобиль приезжает с обычного склада на кросс-док, время обслуживания для него считается по формуле:

depot.service_duration_s + Сумма{ location.crossdock_service_duration_s} по всем заказам, которые привез автомобиль.

При кросс-докинге полезно закладывать запас по времени depot.crossdock_safety_waiting_duration_s — минимальный интервал времени, который должен пройти с момента разгрузки заказа на кросс-доке, прежде чем этот заказ можно будет забрать для доставки клиенту (по умолчанию 3600 сек., или 1 час). Этот запас нужен для того, чтобы возможное опоздание первого автомобиля (везущего заказы в кросс-док) не нарушало маршруты тех автомобилей, которые забирают заказы из кросс-дока.

Схема

Пример 1

4 курьера и 6 заказов, которые нужно развезти из 2 складов и частично через кросс-док. Склады находятся на западе Москвы, а кросс-док — на востоке. Заказы 1, 2 и 3 находятся на западе и доставляются со складов. Заказы 4, 5 и 6 находятся на востоке и доставляются через кросс-док.

Результат планирования:

Курьер Характеристики курьера Маршрут
Курьер 1 Стартует со склада 1. Ему запрещено отвозить заказы на кросс-док. Забирает на складе 1 заказы 1 и 3 и развозит их клиентам.
Курьер 2 Стартует со склада 2. Ему разрешены любые маршруты. Забирает на складе 2 заказы 2 и 6. Заказ 2 отвозит клиенту, а заказ 6 — на кросс-док.
Курьер 3 Стартует со склада 1. Может только отвозить заказы на кросс-док. Забирает на складе 1 заказы 4 и 5, отвозит их на кросс-док и возвращается на склад 1.
Курьер 4 Стартует с кросс-дока. Забирает на кросс-доке заказы 4, 5 и 6 и отвозит их клиентам.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

В задаче планирования 2 курьера, 1 склад на юге Москвы и кросс-док на востоке. Для заказов заданы следующие условия:

Заказ Тип заказа Где находится Куда доставляется Через кросс-док Можно оставить в кросс-доке
1 delivery На складе Клиенту Да -
2 pickup У клиента В кросс-док Нет Да
3 pickup У клиента В кросс-док Нет Да
4 pickup У клиента На склад Да Нет

Результат планирования:

Курьер Характеристики курьера Маршрут
Курьер 1 Стартует со склада 1. Может только отвозить заказы на кросс-док. Забирает со склада заказ 1 и отвозит его на кросс-док. После ожидания забирает с кросс-дока заказ 4 и отвозит его на склад.
Курьер 2 Стартует с кросс-дока. Забирает с кросс-дока заказ 1. Забирает заказы 2, 3 и 4 у клиентов и доставляет заказ 1 клиенту. Отвозит заказы 2, 3 и 4 на кросс-док.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 3

Те же склады и курьеры, что в примере 2. Для заказов заданы следующие условия:

Заказ Тип заказа Где находится Куда доставляется Через кросс-док Можно оставить в кросс-доке
1 delivery На складе Клиенту Да -
2 pickup У клиента В drop_off или drop_off_2 (delivery_to_any) Нет Да
3 pickup У клиента В кросс-док Нет Да
4 pickup У клиента На склад Да Нет

Результат планирования:

Курьер Характеристики курьера Маршрут
Курьер 1 Стартует со склада 1. Может только отвозить заказы на кросс-док. Забирает со склада заказ 1 и отвозит его на кросс-док. Забирает с кросс-дока заказ 4 и отвозит его на склад.
Курьер 2 Стартует с кросс-дока. Забирает с кросс-дока заказ 1. Забирает заказ 3 у клиента, доставляет заказ 1 клиенту, забирает заказы 2 и 4 у клиентов, доставляет заказ 2 в drop_off_2, отвозит заказы 3 и 4 на кросс-док.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Планирование без учета плеча доставки до кросс-дока

В каких ситуациях использовать

Используйте этот вариант настройки, если нет необходимости учитывать плечо доставки от основного склада до кросс-дока.

Как реализовать сценарий

Этот сценарий аналогичен доставке с одного из нескольких складов, и его можно реализовать такими же способами.

Внимание

В отличие от описанного выше сценария кросс-докинга, в данном сценарии доставка заказов до кросс-дока не входит в маршруты. При планировании предполагается, что любой заказ может оказаться на кросс-доке, и нужно выбрать, какие из заказов отгружать оттуда выгоднее. Также должно быть заранее известно, какие машины стартуют с основного склада, а какие — с кросс-докинговой площадки.

Схема

Пример

60 точек с типом delivery — это заказы, которые нужно доставить. 1 точка с типом garage — это кросс-док. Для одного курьера указано начать маршрут со склада, для другого — с кросс-дока.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Pickup & delivery через кросс-док

В каких ситуациях использовать

Данный сценарий используется, если заказы, которые необходимо развести с кросс-дока, предварительно нужно собрать по точкам pickup.

Как реализовать сценарий

Задайте ограничения по времени для маршрутов сбора заказов на кросс-док и последующей доставки заказов клиентам.

  • Сбор и доставка разными автомобилями

    Разделите доставку до кросс-дока и после него на разные планирования. Вы получите одно планирование по сценарию Сбор грузов на склад и второе по сценарию Доставка с одного склада.

    Пример

    Кросс-докинг через два разных планирования: сбор и доставка.

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

    Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

    2. Вторая часть — доставка. Другой автомобиль в дневную смену забирает заказы со склада и развозит получателям.

    Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

  • Сбор и доставка одним автомобилем

    Задайте ограничение по времени на сбор и доставку заказов.

    1. Для заказов, которые необходимо собрать на кросс-доке:

    • задайте тип pickup;
    • используйте параметр delivery_deadline.

    2. Для заказов, которые необходимо доставить с кросс-дока:

    • задайте тип delivery;
    • используйте параметр depot_ready_time.

    Между значениями параметров delivery_deadline и depot_ready_time должно быть окно для выполнения кросс-докинговых операций. Например, сбор груза выполнить до 13:00, а доставку начать в 14:00.

    Пример

    1 курьер, 10 заказов pickup и 10 заказов delivery. Заказы не связаны между собой. Все pickup нужно доставить на склад до 13:00, а все delivery можно забрать со склада с 14:00. Чтобы курьер мог выполнить заказы за 2 рейса, указано vehicle.max_runs = 2.

    Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Схема

Доставка с парковкой автомобиля перед пешей частью маршрута

В каких ситуациях использовать

Сценарий используется, когда в маршруте есть несколько близко расположенных заказов. Курьер может доехать на автомобиле, припарковаться и разнести заказы пешком. Если за один раз все заказы унести невозможно, курьер делает несколько заходов. В начале каждого захода курьер берет часть заказов, разносит их, а затем возвращается к автомобилю и берет следующую часть заказов.

Пеших частей в маршруте может быть несколько.

Как реализовать сценарий

Задайте параметры:

  • location.parking_service_duration_s — время, которое курьер тратит на парковку автомобиля.

    Примечание

    Для способов передвижения walking и transit параметр location.parking_service_duration_s не участвует в расчетах затраченного времени.

    Для остальных способов передвижения время, указанное в параметре location.parking_service_duration_s, будет учтено только один раз — перед началом пешеходной части маршрута.

  • vehicle.walking_courier.capacity.units — максимальное количество юнитов, которое может унести курьер. Чтобы использовать эту функциональность, дополнительно укажите число юнитов для заказа с помощью параметра location.shipment_size.

    Если курьеру нужно разнести больше юнитов, чем указано в параметре vehicle.walking_courier.capacity.units, то алгоритм может сформировать маршрут, при котором курьер сделает несколько заходов. Например, если нужно разнести пешком 10 юнитов, а параметр vehicle.walking_courier.capacity.units = 5, то курьер сначала доставит 5 юнитов, затем вернется к  автомобилю и заберет оставшиеся 5 юнитов.

    Примечание

    В Маршрутизации поддерживаются сценарии, когда только один курьер выходит из автомобиля и разносит заказы пешком.

  • vehicle.walking_courier.cost.hour и/или vehicle.walking_courier.cost.km — стоимость пешей доставки за час и за километр. Стоимость пешей доставки рассчитывается так же, как и стоимость автомобиля или курьера.

  • vehicle.walking_courier.restrictions — ограничения для пеших частей маршрутов:

    • max_walking_edge_distance_m.value и max_walking_edge_distance_m.penalty — максимально допустимое расстояние (в метрах) между двумя точками внутри пеших частей маршрута и штраф за нарушение ограничения.
    • max_parking_walking_distance_m.value и max_parking_walking_distance_m.penalty — максимально допустимое расстояние (в метрах), которое можно пройти в рамках одной парковочной сессии, и штраф за нарушение ограничения.
    • max_parking_duration_s.value и max_parking_duration_s.penalty — максимально допустимая длительность (в секундах) одной парковочной сессии и штраф за нарушение ограничения.
    • close_locations — массив ограничений для близких заказов:
    • duration_till_service_s.value и duration_till_service_s.penalty — максимально допустимое время (в секундах) между обслуживанием двух близких заказов и штраф за нарушение ограничения.
    • distance_till_service_m.value и distance_till_service_m.penalty — максимально допустимое пройденное расстояние (в метрах) между обслуживанием двух близких заказов и штраф за нарушение ограничения.
    • search_radius_m — расстояние между двумя заказами, которые считаются близкими и на которые распространяются ограничения.
    • soft_search_radius_m — если значение этого параметра превышает значение соответствующего search_radius_m , то на заказы на расстоянии от search_radius_m до soft_search_radius_m также будет накладываться штраф, но его размер линейно уменьшается в зависимости от расстояния. Например, на расстоянии (search_radius_m + soft_search_radius_m) / 2 будет действовать штраф с весом 0,5.
    Пример использования настроек близких заказов
    {
    ...
    "walking_courier": {
    ...
    "restrictions": {
            "close_locations": [
                {
                    "routing_mode": "walking",
                    "search_radius_m": 400,
                    "soft_search_radius_m": 500,
                    "distance_till_service_m": {
                        "penalty": 0.02,
                        "value": 1500
                    }
                },
                {
                    "routing_mode": "walking",
                    "search_radius_m": 100,
                    "soft_search_radius_m": 160,
                    "duration_till_service_s": {
                        "penalty": 0.02,
                        "value": 1500
                    }
                }
            ],
    ...
          }
    ...
        },
    ...
    }
    

    В примере выше первое ограничение устанавливает, что заказы на расстоянии до 400 метров друг от друга должны быть обслужены в пределах следующих 1500 метров движения. Превышение ограничения штрафуется на 0.02 за каждый метр. Для заказов на расстоянии от 400 до 500 метров данное ограничение также действует, но уменьшается линейно в зависимости от расстояния — например, для заказа на расстоянии 430 метров будет применен штраф в размере 0.7 от основного.

    Второе ограничение аналогично первому, но устанавливает время между обслуживанием заказов. Заказы в радиусе 100 метров должны быть обслужены в пределах 25 минут со штрафом 0.02 за каждую секунду превышения. На заказы на расстоянии от 100 до 160 метров штраф накладывается, но уменьшается линейно по мере отдаления.

Для балансировки стоимости посещения заказов пешком и на автомобиле используйте options.average_projection_walking_part_distance_m — опция задает среднюю длину пешеходной части от дороги до заказа. При использовании опции за каждое посещение заказа на автомобиле курьер получает штраф в размере двойной стоимости пешеходного пути.

Например, если average_projection_walking_part_distance_m = 15, то к стоимости каждого посещения будет добавлена стоимость 30 метров пешего маршрута. Настройка позволяет компенсировать стоимость пешей части пути при использовании способа передвижения driving по сравнению с аналогичным расстоянием в случае использования walking.

Схема

Пример 1

Маршрут состоит из 10 заказов. Некоторые заказы расположены недалеко друг от друга:

  • заказы 1, 2, 3 и 4;
  • заказы 5, 7 и 9;
  • заказы 8 и 10.

Поскольку стоимость пешей доставки меньше, чем на автомобиле, для доставки близких заказов курьер паркуется и разносит их пешком. Для доставки остальных заказов курьер передвигается на автомобиле.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

То же, что и в примере 1, только vehicle.walking_courier.capacity.units = 2. Для доставки близких заказов курьер паркуется и разносит их не более, чем по два юнита за заход.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Использование прицепа

В каких ситуациях использовать

По умолчанию в точку заказа может приехать только грузовик без прицепа. Используйте этот сценарий, если точка заказа доступна для грузовика с прицепом. Настройки грузовика с прицепом см. в разделе Сцепки.

Примечание

Для грузовиков с полуприцепом сценарий не используется.

Как реализовать сценарий

Доступность точки для грузовика с прицепом задается в поле location.allow_trailers. По умолчанию location.allow_trailers = false — неподъездная точка, в которую может приехать только грузовик без прицепа. Чтобы реализовать сценарий с подъездной точкой, укажите location.allow_trailers = true. В такую точку может приехать грузовик с прицепом.

Типы заказов для грузовиков с прицепами:

  • anchor — точка, в которой можно оставить прицеп на некоторое время и при необходимости сделать перекатку;

  • parking — точка, где можно оставить прицеп только на время разгрузки заказов, на которые запрещено приезжать с прицепом.

В точку с типом anchor (якорную) можно приехать с прицепом, оставить его на несколько часов, сделать перекатку. У такого заказа должен быть уникальный id. Если в эту точку нужно привезти груз, то необходимо создать еще один заказ с типом delivery (см. Тип заказа).

Число автомобилей (сцепок грузовика и прицепа), которые может обслужить якорная точка, по умолчанию не ограничено. При необходимости укажите в параметре max_total_vehicles максимальное число автомобилей, которое может обслужить якорная точка за всё время планирования.

Для ограничения количества автомобилей, которые могут одновременно находиться в якорной точке, используйте поле rolling_throughput.vehicle_count.

Если при планировании пропускная способность якорной точки превышена, за это начисляются штрафы:

  • penalty.rolling_throughput.fixed — за факт нарушения;

  • penalty.rolling_throughput.vehicle — за каждый автомобиль превышения относительно ограничения rolling_throughput.vehicle_count.

В точке с типом parking можно оставить прицеп только на время разгрузки нескольких заказов в неподъездных точках.

В решении задачи планирования для заказов с типом anchor и parking появляются поля:

Поле

Описание

trailer_used

Показывает, как грузовик выехал со склада, с прицепом или без. Принимает значения true/false. Грузовик может приехать к неподъездной точке, если выехал без прицепа (trailer_used = false).

trailer_decoupled

Описывает случай, когда грузовик выехал с прицепом. Показывает, отцепил он прицеп по пути или нет. Принимает значения true/false. Грузовик может приехать к неподъездной точке, если отцепил прицеп (trailer_decoupled = true).

Фрагмент ответа
{
    "arrival_time_s": 36726.340873455316,
    "node": {
        "type": "location",
        "used_time_window": "12:00:00-18:00:00",
        "value": {
            "anchor_mode": "Decoupling",
            "hard_window": false,
            "id": 1,
            "penalty": {
                "out_of_time": {
                    "fixed": 1000,
                    "minute": 17
                }
            },
            "point": {
                "lat": 55.780426,
                "lon": 37.712129
            },
            "ref": "",
            "service_duration_s": 0,
            "shared_service_duration_s": 0,
            "time_window": "12:00:00-18:00:00",
            "total_service_duration_s": 0,
            "trailer_decoupled": true,
            "trailer_used": true,
            "type": "anchor"
        }
    },
    "transit_distance_m": 4035.227074751774,
    "transit_duration_s": 726.3408734553194,
    "violations": [],
    "waiting_duration_s": 6473.659126544684
  }

Следующие поля появляются в решении только для заказов с типом anchor:

Поле

Описание

anchor_mode

Режим использования якорной точки. Принимает значения:

  • Decoupling — отцепить прицеп и поехать дальше.
  • Coupling — забрать прицеп и поехать дальше.
  • Rolling — сделать перекатку из прицепа, отцепить и поехать.

load_to_head

Содержит список заказов, которые надо переместить из прицепа в грузовик (только для точек с anchor_mode = Rolling). При этом заказ может быть перемещен в грузовик частично. Часть такого заказа останется в прицепе, если после перемещения целиком была бы превышена вместимость грузовика.

Фрагмент ответа
{
    "route": [
        {
            "arrival_time_s": 49003,
            "departure_time_s": 52603,
            "load_to_head": [
                "Order 1",
                "Order 2",
                "Order 3",
                "Order 4"
            ],
            "node": {
                "type": "location",
                "used_time_window": "08:00:00-14:00:00",
                "value": {
                    "anchor_mode": "Rolling",
                    "hard_window": false,
                    "id": "anchor43",
                    "point": {
                        "lat": 52.527983,
                        "lon": 85.227133
                    },
                    "ref": "",
                    "service_duration_s": 3600,
                    "shared_service_duration_s": 0,
                    "time_window": "08:00:00-14:00:00",
                    "total_service_duration_s": 3600,
                    "trailer_decoupled": true,
                    "trailer_used": true,
                    "type": "anchor"
                }
            }
        }
    ]
  }

У склада в решении задачи маршрутизации со сцепками появляются поля:

Поле

Описание

trailer_used

Показывает, как грузовик выехал на маршрут из гаража: с прицепом или без. Принимает значения true/false. Может поменяться во время маршрута.

trailer_decoupled

Показывает, как грузовик выехал со склада: с прицепом или без. Принимает значения true/false. Может поменяться во время маршрута.

load_to_head

Список заказов, которые должны быть загружены в грузовик.

load_to_trailer

Список заказов, которые должны быть загружены в прицеп.

Фрагмент ответа
{
    "route": [
        {
            "arrival_time_s": 0,
            "departure_time_s": 5040,
            "load_to_head": [
                "Order 5",
                "Order 6",
                "Order 7",
                "Order 8"
            ],
            "load_to_trailer": [
                "Order 1",
                "Order 2",
                "Order 3",
                "Order 4"
            ],
            "node": {
                "type": "depot",
                "used_time_window": "00:00:00-1.23:59:59",
                "value": {
                    "finish_service_duration_s": 1800,
                    "flexible_start_time": true,
                    "hard_window": true,
                    "id": "576",
                },
                "point": {
                    "lat": 53.400374288503,
                    "lon": 83.967696868016
                },
                "preliminary_service_duration_s": 0,
                "ref": "",
                "service_duration_s": 5040,
                "time_window": "00:00:00-1.23:59:59",
                "total_service_duration_s": 5040,
                "trailer_decoupled": false,
                "trailer_used": true
            }
        }
    ]
  }

Схема

Примечание

Чтобы точки перекатки, отсоединения и присоединения прицепа отображались на карте, обратитесь в службу поддержки для подключения этой опции.

Выгрузка решений с прицепами в Мониторинг пока не поддерживается.

Пример 1

В примере один грузовик с прицепом должен развезти три заказа. К одной из точек подъехать с прицепом можно (allow_trailers = true), к двум другим — нет (allow_trailers = false). В маршруте есть точки, в которых можно на некоторое время оставить прицеп (type = parking).

В полученном решении грузовик сначала заезжает на парковку, оставляет там прицеп, а потом едет разгружаться в неподъездную точку. После доставки груза он возвращается в точку парковки, забирает прицеп и едет дальше по маршруту.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 2

В примере один грузовик с прицепом должен развезти четыре заказа. К двум точкам подъехать с прицепом нельзя (allow_trailers = false), а к двум другим — можно (allow_trailers = true). В маршруте есть также якорная точка (type = anchor), в которой можно оставить прицеп на продолжительное время.

Алгоритм строит маршрут с учетом неподъездных точек. Сначала грузовик приезжает в якорную точку и оставляет прицеп. Потом доставляет заказы в точки, где его не приняли бы с прицепом. Затем возвращается за прицепом в якорную точку и везет груз туда, куда с ним приехать разрешено.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 3

В примере один грузовик с прицепом должен развезти четыре заказа в точки, к которым подъехать с прицепом нельзя (allow_trailers = false). В маршруте есть якорная точка (type = anchor). При этом общий вес заказов значительно больше грузоподъемности ТС, то есть грузовик не может развезти все заказы без использования прицепа.

Сначала грузовик приезжает в якорную точку, оставляет прицеп и отвозит два заказа без прицепа. Затем возвращается в якорную точку, делает перекатку груза из прицепа в грузовик и снова уезжает без прицепа на доставку оставшихся заказов.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 4

В примере 23 заказа с неподъездными точками (allow_trailers = false) и 4 курьера. В маршруте есть две якорные точки (type = anchor). Ограничение пропускной способности не задано, поэтому в решении все курьеры пользуются только одной якорной точкой.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 5

То же, что и в примере 4, но для якорных точек заданы ограничения пропускной способности. В первой одновременно могут находиться не более двух автомобилей (rolling_throughput.vehicle_count = 2). Вторая якорная точка может обслужить только 2 грузовика за день (max_total_vehicles = 2). Установлены штрафы за нарушение пропускной способности за каждый автомобиль (penalty.rolling_throughput.vehicle).

В решении используются 2 якорные точки с учетом их пропускной способности.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Пример 6

В примере один грузовик с прицепом должен доставить 6 заказов. К трем точкам подъехать с прицепом можно (allow_trailers = true), к остальным — нет (allow_trailers = false). В маршруте есть точка, где можно на некоторое оставить прицеп (type = parking).

В результате грузовик заезжает на парковку, оставляет там прицеп и развозит три заказа, к которым запрещено приезжать с прицепом. После доставки этих заказов курьер возвращается на точку парковки, забирает прицеп и продолжает движение по маршруту.

Пример ExcelЗапрос API (JSON)Ответ APIОткрыть на карте

Написать в службу поддержки