Почему в 1С перестали рисоваться маршруты на Яндекс.Картах и как это исправить?

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

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

Разберем причину возникновения ошибки

Проанализируем ситуацию: в вашей конфигурации или внешней обработке точки на карту по-прежнему наносятся, сама карта загружается корректно, однако попытка вызвать функцию построения маршрута (например, через ymaps.route или ymaps.multiRouter) приводит к ошибке выполнения скрипта или простому отсутствию результата. Выясним причину этого явления.

Основная причина кроется в изменении политики компании Яндекс, которое произошло в 2018–2019 годах. Ранее JavaScript API Карт позволяло использовать базовый функционал без обязательной регистрации. Теперь же использование apikey является строгим требованием для работы большинства функций, особенно тех, что связаны с маршрутизацией и геокодированием. Без указания ключа функции маршрутизатора блокируются на стороне серверов Яндекса, даже если остальные части карты продолжают отображаться.

Шаг 1: Регистрация и подключение API-ключа

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


<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=ВАШ_КЛЮЧ" type="text/javascript"></script>

Где ВАШ_КЛЮЧ — это уникальный идентификатор, полученный в Кабинете разработчика. Обратите внимание на версию API: рекомендуется использовать ветку 2.1 без указания жесткой минорной сборки (например, 2.1.70), чтобы система автоматически подтягивала исправления ошибок совместимости.

Шаг 2: Решение проблемы с движком Internet Explorer в 1С

Важно помнить, что платформа 1С для отображения полей HTML-документа использует движок Internet Explorer, установленный в системе. По умолчанию 1С часто запускает этот компонент в режиме совместимости с IE7, который не поддерживает современные функции JavaScript API Яндекс Карт. Рассмотрим, как принудительно заставить 1С использовать современный режим рендеринга.

Для этого в макет вашей страницы, в секцию <head>, необходимо добавить специальный мета-тег. Проанализируем пример структуры макета:


<!DOCTYPE html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <!-- Принудительное использование современного движка IE -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=КЛЮЧ" type="text/javascript"></script>
</head>
<body>
    <div id="map" style="width: 100%; height: 100%"></div>
</body>
</html>

Использование IE=edge критически важно, так как без него современные методы работы с массивами и объектами в JavaScript (которые использует Яндекс) могут вызывать синтаксические ошибки в старом движке.

Шаг 3: Проверка лицензионных ограничений

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

  1. Публичность: Ваша карта должна быть доступна в открытом интернете. Если вы используете её внутри закрытой базы 1С, к которой нет доступа извне, это формально нарушает правила бесплатного тарифа.
  2. Цели использования: Запрещено использовать бесплатное API для задач мониторинга транспорта, управления логистикой или курьерской доставки. Если алгоритмы Яндекса определят, что вы строите множество маршрутов для логистических целей, ключ может быть заблокирован.
  3. Сохранение данных: Нельзя сохранять полученные координаты или длины путей в базу данных 1С (кэшировать их).

Для стабильной работы внутри корпоративных учетных систем (таких как 1С:Управление торговлей или ERP) зачастую требуется приобретение коммерческой лицензии на "API Маршрутизатора".

Шаг 4: Реализация маршрутизации в коде 1С

Рассмотрим пример кода JavaScript, который должен находиться в вашем макете 1С для корректного построения пути. Мы воспользуемся программным методом ymaps.route, который принимает массив точек и параметры отображения.


function DrawRoute(PointA, PointB) {
    ymaps.route([PointA, PointB], {
        mapStateAutoApply: true
    }).then(function (route) {
        myMap.geoObjects.add(route);
        
        // Получим данные о маршруте для передачи обратно в 1С
        var distance = route.getLength(); // Расстояние в метрах
        var time = route.getTime();       // Время в секундах
        
        console.log("Длина пути: " + distance);
    }, function (error) {
        alert("Возникла ошибка при построении маршрута: " + error.message);
    });
}

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

Типичные ошибки и способы их диагностики

Если решение не заработало сразу, проанализируем возможные дополнительные проблемы:

  1. Ограничение по HTTP Referer: При регистрации ключа в кабинете разработчика вы могли указать домен. Поскольку запросы из 1С идут с локального компьютера (или через about:blank), Яндекс может их отклонить. Попробуйте оставить поле "Домен" в настройках ключа пустым.
  2. Лимиты запросов: На бесплатном тарифе существует суточный лимит (например, 1000 запросов к геокодеру). Если вы активно тестируете обработку, лимит может исчерпаться.
  3. Синтаксис в 1С: При передаче параметров из 1С в JavaScript через Документ.html.parentWindow.DrawRoute() убедитесь, что координаты передаются как строки или числа в правильном формате, понятном JavaScript.

Таким образом, для восстановления работы карт в 1С нам необходимо выполнить три основных действия: получить и прописать API-ключ, установить режим совместимости IE=edge и убедиться в соблюдении лицензионной политики. Проанализировав эти аспекты, вы сможете не только вернуть работоспособность маршрутам, но и сделать интеграцию более отказоустойчивой.

← На главную