Как построить маршрут из 1С в Яндекс Картах?

Программист 1С v8.3 (Управляемые формы) Управленческий учет Торговля и дистрибуция
← На главную

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

Вариант 1: Использование официального API Яндекс Карт

Это наиболее надежный, но платный метод. Проанализируем, как работает система лицензирования. Если вы планируете использовать карты внутри закрытой системы (например, в 1С:Управление торговлей или ERP), бесплатная версия API вам не подойдет по условиям лицензионного соглашения. Для бизнеса Яндекс предлагает специализированные продукты:

  1. API Яндекс Карт (коммерческая версия): Позволяет отображать карту в ПолеHTMLДокумента, искать адреса (геокодирование) и строить простые маршруты.
  2. Яндекс Маршрутизация: Высокоуровневый сервис для решения «задачи коммивояжера». Он не просто строит путь от А до Б, а распределяет заказы по машинам с учетом их грузоподъемности и графиков работы складов.

Для технической реализации в 1С мы обычно используем два подхода. Первый — это встраивание интерактивной карты в форму. Рассмотрим пример инициализации карты через JavaScript:


// В коде 1С (ПриСозданииНаСервере или в обработчике команды)
ТекстHTML = 
"<html>
|<head>
|   <script src='https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=ВАШ_КЛЮЧ' type='text/javascript'></script>
|   <script type='text/javascript'>
|       ymaps.ready(init);
|       function init() {
|           var myMap = new ymaps.Map('map', { center: [55.76, 37.64], zoom: 10 });
|           var multiRoute = new ymaps.multiRouter.MultiRoute({
|               referencePoints: ['Москва, метро Арбатская', 'Москва, метро Молодежная'],
|               params: { routingMode: 'auto' }
|           });
|           myMap.geoObjects.add(multiRoute);
|       }
|   </script>
|</head>
|<body><div id='map' style='width: 100%; height: 100vh'></div></body>
|</html>";
ЭтаФорма.Элементы.КартаHTML.УстановитьТекст(ТекстHTML);

Вариант 2: Бесплатная маршрутизация на базе OSRM и Leaflet

Если бюджет ограничен, а требования к точности пробок не критичны, рассмотрим альтернативу на базе OpenStreetMap (OSM). Проанализируем работу с сервисом OSRM (Open Source Routing Machine). Этот движок позволяет получать данные о маршруте через обычные HTTP запросы, что очень удобно для 1С.

Разберем по шагам, как получить расстояние и время в пути без использования визуальной карты:

  1. Формируем строку координат всех точек маршрута.
  2. Отправляем GET-запрос к публичному или собственному серверу OSRM.
  3. Парсим полученный JSON.

Посмотрим на пример программного кода для расчета расстояния между двумя контрагентами:


Функция ПолучитьДанныеМаршрута(ТочкаА, ТочкаБ)
    
    // Точки в формате "долгота,широта"
    ЗапросURL = "/route/v1/driving/" + ТочкаА + ";" + ТочкаБ + "?overview=false";
    
    НТТР = Новый HTTPСоединение("router.project-osrm.org", , , , , 10);
    Запрос = Новый HTTPЗапрос(ЗапросURL);
    
    Попытка
        Ответ = НТТР.Получить(Запрос);
        Если Ответ.КодСостояния = 200 Тогда
            Чтение = Новый ЧтениеJSON;
            Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());
            Данные = ПрочитатьJSON(Чтение);
            
            РасстояниеМетры = Данные.routes[0].distance;
            ВремяСекунды = Данные.routes[0].duration;
            
            Возврат РасстояниеМетры / 1000; // Расстояние в км
        КонецЕсли;
    Исключение
        Сообщить("Ошибка связи с сервером маршрутизации");
    КонецПопытки;
    
КонецФункции

Вариант 3: Использование мобильных приложений (Deep Links)

Выясним причину, по которой многие компании отказываются от сложных интеграций в пользу Deep Links. Если ваша задача — просто передать маршрут водителю, нет смысла строить его внутри 1С. Мы можем сформировать специальную ссылку, которая при нажатии на смартфоне автоматически откроет Яндекс Навигатор с уже проложенным маршрутом.

Этот способ абсолютно бесплатен. Разберем структуру такой ссылки. Для навигатора формат будет следующим: yandexnavi://build_route_on_map?lat_to=55.7&lon_to=37.6. В 1С вы можете выводить QR-код с этой ссылкой в печатную форму путевого листа или отправлять её водителю в мессенджер.

Вариант 4: Подготовка данных и геокодирование

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

Для качественной очистки адресов рекомендуем использовать сервис DaData. Он работает точнее, чем многие бесплатные библиотеки, и позволяет привести адреса к стандарту ФИАС. После того как адрес очищен, вы один раз запрашиваете координаты и сохраняете их в справочнике Контрагенты или АдресаДоставки. Это позволит вам экономить лимиты платных API при последующих построениях маршрутов.

Вариант 5: Готовые отраслевые решения

Рассмотрим ситуацию, когда разработка с нуля нецелесообразна. В современных конфигурациях, таких как 1С:Управление нашей фирмой (УНФ) или 1С:Управление торговлей 11, уже реализованы модули взаимодействия с картами. В частности, сервис 1С-Доставка позволяет интегрироваться с логистическими экосистемами без написания сложного кода. Достаточно получить API-ключ в личном кабинете разработчика Яндекса и прописать его в константах программы.

Резюме и рекомендации

Выбор решения зависит от масштаба вашего бизнеса. Проанализировав все варианты, можно сделать следующие выводы:

  1. Для небольших компаний: Оптимальным будет использование бесплатных Deep Links для водителей и разовое геокодирование базы через DaData.
  2. Для среднего бизнеса: Рекомендуем связку OSRM (для предварительных расчетов) и визуализацию через Leaflet в 1С. Это обеспечит независимость от платных лимитов.
  3. Для крупных служб доставки: Единственным верным решением будет Яндекс Маршрутизация. Несмотря на высокую стоимость (около 3000 рублей за машину в месяц), сервис окупается за счет реальной экономии топлива и времени водителей благодаря учету актуальных пробок и сложных дорожных условий.

Помните, что при работе с любым внешним API крайне важно обрабатывать ошибки соединения через конструкцию Попытка...Исключение, чтобы нестабильный интернет или сбои на стороне сервиса не приводили к остановке работы всей системы 1С.

← На главную