Как выбрать API для построения и оптимизации маршрутов в 1С?

Программист Управленческий учет IT и автоматизация бизнеса
← На главную

При автоматизации логистики в 1С перед разработчиком часто встает задача не просто проложить путь от точки А до точки Б, а составить оптимальный маршрут для водителя, который должен объехать 10–20 адресов за день. Ситуация осложняется лимитами бесплатных сервисов, стоимостью коммерческих решений и необходимостью учитывать специфику дорог РФ (пробки, грузовые каркасы). Разберем по шагам, какие инструменты существуют на рынке и как правильно организовать архитектуру взаимодействия 1С с картографическими сервисами.

Постановка задачи: маршрутизация vs оптимизация

Прежде всего проанализируем разницу между двумя типами запросов, которые часто путают. Построение маршрута — это получение геометрии пути для заранее определенной последовательности точек. Оптимизация маршрута (задача коммивояжера или VRP — Vehicle Routing Problem) — это когда сервис сам определяет, в каком порядке лучше объехать точки, чтобы минимизировать пробег или время. Для 1С-разработчика это означает, что нам нужен API, поддерживающий не только route, но и trip (или optimization) сервис.

Вариант 1: Коммерческие API (Яндекс, Google, 2GIS)

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

Вариант 2: Собственное решение на базе Open Source (OSRM, VROOM)

Для компаний с объемом 100–200 запросов в день и более, желающих уйти от платных подписок, проанализируем вариант развертывания собственного сервера маршрутизации. Это позволит делать неограниченное количество запросов бесплатно.

OSRM (Open Source Routing Machine) — это высокопроизводительный движок на базе данных OpenStreetMap (OSM). Рассмотрим подробнее, как работает плагин trip в OSRM. Он решает задачу коммивояжера с помощью жадной эвристики. Хотя это не всегда дает 100% идеальный результат (так как задача NP-трудная), для 20 точек решение будет очень близким к оптимальному.

Для более продвинутой оптимизации (с учетом временных окон клиентов и нескольких машин) рекомендуется использовать связку OSRM + VROOM. VROOM — это надстройка, которая забирает данные о расстояниях из OSRM и решает сложные логистические задачи оптимизации парка машин.

Техническая реализация: Матрица расстояний

Разберем эффективную схему взаимодействия 1С с любым API. Вместо того чтобы запрашивать построение полного маршрута для каждой перестановки точек, выясним причину популярности метода Distance Matrix (Матрица расстояний).

Посмотрим на пример логики: если у нас есть 10 точек, мы запрашиваем у API таблицу 10х10, где на пересечении строк и столбцов указано время или расстояние между каждой парой точек. Получив эту матрицу в 1С в формате JSON, мы можем реализовать алгоритм оптимизации локально, не делая лишних платных вызовов к картам.

Пример структуры JSON-запроса к матрице расстояний (на примере абстрактного API):


{
  "locations": [
    [55.75, 37.61], 
    [55.80, 37.70],
    [55.70, 37.50]
  ],
  "metrics": ["distance", "duration"]
}

Как обрабатывать результаты в 1С

Проанализируем программный код для получения данных от сервиса. Мы будем использовать объект HTTPСоединение и ЧтениеJSON. Предположим, мы работаем с собственным сервером OSRM:


// Создаем соединение с сервером OSRM
Соединение = Новый HTTPСоединение("localhost", 5000);
// Формируем строку запроса для сервиса TRIP (оптимизация последовательности)
ЗапросСтрока = "/trip/v1/driving/" + СписокКоординат + "?source=first&destination=last&roundtrip=false";
Запрос = Новый HTTPЗапрос(ЗапросСтрока);

Попытка
    Ответ = Соединение.Получить(Запрос);
    Если Ответ.КодСостояния = 200 Тогда
        Чтение = Новый ЧтениеJSON;
        Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
        Данные = ПрочитатьJSON(Чтение);
        // В Данные.waypoints будет содержаться оптимальный порядок посещения
    КонецЕсли;
Исключение
    Сообщить("Ошибка связи с сервером маршрутизации");
КонецПопытки;

Важные нюансы при выборе

  1. Геокодирование: Помните, что API маршрутизации принимают координаты (широту и долготу). Вам понадобится сервис геокодирования (например, DaData или Яндекс), чтобы превратить адрес из строки 1С в точку на карте. Совет: Кэшируйте координаты в справочнике Адреса или Контрагенты, чтобы не платить за повторный геокодинг одного и того же адреса.
  2. Грузовой каркас: Если ваш транспорт — грузовики, обязательно выбирайте API, поддерживающее параметр truck. Обычный навигатор может проложить путь под знаки, что приведет к штрафам.
  3. Актуальность графа дорог: Бесплатные карты OSM наполняются волонтерами. В крупных городах они точны, но в отдаленных промзонах могут отсутствовать новые проезды, которые уже есть у Яндекса или 2GIS.

Итоговые рекомендации

Выясним, какой вариант лучше подходит под ваши задачи:

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

← На главную