Как правильно отобразить Яндекс Карты в 1С 8.3 на управляемых формах и исправить ошибки загрузки

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

Интеграция картографических сервисов в среду 1С:Предприятие — это востребованная задача для логистических систем, сервисов доставки и CRM-решений. Однако при реализации стандартного примера из документации Яндекс Карт в поле HTML-документа 1С разработчики часто сталкиваются с критическими ошибками, такими как console — определение отсутствует, ymaps — определение отсутствует или Stack overflow at line 2. Рассмотрим подробно причины возникновения этих проблем и разберем по шагам современные способы их решения.

Проанализируем причины ошибок рендеринга в 1С

Основная причина нестабильной работы JavaScript в среде 1С заключается в том, что по умолчанию поле HTML-документа в тонком и толстом клиентах на Windows использует движок Internet Explorer. В зависимости от версии платформы и настроек системы, это может быть режим совместимости с крайне устаревшими версиями (IE7 или IE8), которые не поддерживают современные стандарты JS и объекты, необходимые для работы API Яндекс Карт.

Выясним, что означают конкретные ошибки:

  1. console — определение отсутствует: Современные библиотеки (включая скрипты Яндекса) часто используют console.log() для отладки. В старых версиях IE объект console не инициализирован, что приводит к прерыванию выполнения всего скрипта.
  2. ymaps — определение отсутствует: Эта ошибка является следствием первой или возникает из-за того, что скрипт API не успел загрузиться из сети до того, как был вызван метод инициализации карты ymaps.ready().
  3. Stack overflow (Переполнение стека): Обычно связано с рекурсивными вызовами в устаревших движках JS при попытке обработать сложные объекты API.

Шаг 1: Подготовка корректного HTML-шаблона

Разберем, как должен выглядеть правильный код HTML-страницы для отображения карты. Во-первых, необходимо использовать актуальную версию API (на данный момент это 2.1). Во-вторых, крайне важно добавить «заглушку» для объекта console, чтобы избежать ошибок в старых движках.

Рассмотрим пример исправленного кода:


<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <!-- Принудительно используем последний доступный режим IE -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    
    <script type="text/javascript">
        // Решаем проблему "console - определение отсутствует"
        if (!window.console) console = {log: function() {}, error: function() {}};
    </script>

    <!-- Подключаем API 2.1 с вашим ключом (API-ключ теперь обязателен) -->
    <script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU&apikey=ВАШ_КЛЮЧ" type="text/javascript"></script>

    <style>
        html, body, #map {
            width: 100%; height: 100%; padding: 0; margin: 0;
        }
    </style>

    <script type="text/javascript">
        var myMap;
        ymaps.ready(init);

        function init() {
            try {
                myMap = new ymaps.Map('map', {
                    center: [55.76, 37.64], // Москва
                    zoom: 10
                });
            } catch (e) {
                alert("Ошибка при инициализации карты: " + e.message);
            }
        }
    </script>
</head>
<body>
    <div id="map"></div>
</body>
</html>

Шаг 2: Настройка платформы 1С для использования современного движка

Начиная с версии платформы 8.3.14, разработчики 1С добавили возможность переключить движок поля HTML-документа с Internet Explorer на Webkit (Chromium). Это кардинально решает все проблемы с совместимостью JavaScript.

Проанализируем, как это настроить:

  1. Откройте управляемую форму в конфигураторе.
  2. Выберите элемент формы с типом ПолеHTMLДокумента.
  3. В палитре свойств найдите раздел Использование.
  4. Установите свойство РежимИспользованияHTMLДокумента в значение Webkit (или Chromium в более новых версиях).

Если ваша версия платформы ниже 8.3.14, единственным выходом будет использование мета-тега IE=edge и тщательная проверка настроек безопасности Internet Explorer в ОС Windows. Помните, что 1С в режиме IE берет настройки из "Свойств браузера" системы. Попробуйте добавить домены Яндекса в зону "Надежные сайты".

Шаг 3: Работа с API-ключами

Важно помнить, что Яндекс уже несколько лет требует обязательного наличия API-ключа для использования своих карт. Если ключ не указан в параметре apikey, скрипт загрузки может вернуть ошибку или работать нестабильно. Получить бесплатный ключ для разработчика можно в Кабинете разработчика Яндекса. Без него попытки вызвать ymaps.ready часто будут приводить к ошибке «определение отсутствует», так как сервер просто блокирует загрузку библиотеки.

Шаг 4: Организация кода в 1С (Макеты)

Вместо того чтобы формировать огромную строку HTML прямо в коде модуля, проанализируем более профессиональный подход. Создадим Макет типа «Текстовый документ» и назовем его КартаШаблон. Вставьте туда ваш HTML-код. Это позволит избежать проблем с экранированием кавычек и спецсимволов.

Посмотрим на пример кода 1С для вывода карты на форму:


&процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    
    // Получаем текст шаблона из макета
    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("КартаШаблон");
    ТекстHTML = Макет.ПолучитьТекст();
    
    // Если нужно передать координаты динамически, используем СтрЗаменить
    ТекстHTML = СтрЗаменить(ТекстHTML, "55.76", Формат(Широта, "ЧРД=.; ЧГ=0"));
    ТекстHTML = СтрЗаменить(ТекстHTML, "37.64", Формат(Долгота, "ЧРД=.; ЧГ=0"));
    
    // ПолеКарты - это имя реквизита формы с типом Строка, 
    // связанного с элементом Поле HTML документа
    ПолеКарты = ТекстHTML;
    
КонецПроцедуры

Дополнительные рекомендации по отладке

Если карта все равно не отображается, попробуйте следующие шаги:

Подводя итог, можно сказать, что стабильное отображение Яндекс Карт в 1С сегодня достигается сочетанием трех факторов: использованием движка Webkit/Chromium в свойствах формы, переходом на API 2.1 с ключом и обязательным внедрением заглушек для объекта console. Следуя этим рекомендациям, вы сможете избежать стандартных ошибок и обеспечить корректную работу картографии во всех типах клиентов 1С.

← На главную