При работе с интеграцией 1С и внешних геосервисов часто возникает ситуация, когда отлаженный годами функционал внезапно перестает работать. Одной из самых распространенных проблем является отказ функций маршрутизации (построения путей между точками) в API Яндекс Карт. В этой статье мы подробно разберем, почему это происходит, рассмотрим технические нюансы взаимодействия 1С с движком браузера и выясним, как правильно настроить код макета, чтобы восстановить работоспособность карт.
Проанализируем ситуацию: в вашей конфигурации или внешней обработке точки на карту по-прежнему наносятся, сама карта загружается корректно, однако попытка вызвать функцию построения маршрута (например, через ymaps.route или ymaps.multiRouter) приводит к ошибке выполнения скрипта или простому отсутствию результата. Выясним причину этого явления.
Основная причина кроется в изменении политики компании Яндекс, которое произошло в 2018–2019 годах. Ранее JavaScript API Карт позволяло использовать базовый функционал без обязательной регистрации. Теперь же использование apikey является строгим требованием для работы большинства функций, особенно тех, что связаны с маршрутизацией и геокодированием. Без указания ключа функции маршрутизатора блокируются на стороне серверов Яндекса, даже если остальные части карты продолжают отображаться.
Посмотрим, как правильно изменить строку подключения в вашем HTML-макете. Если в вашем коде подключение скрипта выглядит упрощенно, его необходимо дополнить. Рассмотрим пример правильного подключения:
<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=ВАШ_КЛЮЧ" type="text/javascript"></script>
Где ВАШ_КЛЮЧ — это уникальный идентификатор, полученный в Кабинете разработчика. Обратите внимание на версию API: рекомендуется использовать ветку 2.1 без указания жесткой минорной сборки (например, 2.1.70), чтобы система автоматически подтягивала исправления ошибок совместимости.
Важно помнить, что платформа 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 (которые использует Яндекс) могут вызывать синтаксические ошибки в старом движке.
Выясним, почему даже с ключом маршруты могут не строиться. Яндекс разделяет использование API на бесплатное и коммерческое. Бесплатное использование накладывает ряд существенных ограничений, нарушение которых ведет к блокировке:
Для стабильной работы внутри корпоративных учетных систем (таких как 1С:Управление торговлей или ERP) зачастую требуется приобретение коммерческой лицензии на "API Маршрутизатора".
Рассмотрим пример кода 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-ключ неверный или лимиты превышены, управление перейдет во вторую функцию, где мы выведем описание ошибки.
Если решение не заработало сразу, проанализируем возможные дополнительные проблемы:
about:blank), Яндекс может их отклонить. Попробуйте оставить поле "Домен" в настройках ключа пустым.Документ.html.parentWindow.DrawRoute() убедитесь, что координаты передаются как строки или числа в правильном формате, понятном JavaScript.Таким образом, для восстановления работы карт в 1С нам необходимо выполнить три основных действия: получить и прописать API-ключ, установить режим совместимости IE=edge и убедиться в соблюдении лицензионной политики. Проанализировав эти аспекты, вы сможете не только вернуть работоспособность маршрутам, но и сделать интеграцию более отказоустойчивой.