Почему в Яндекс.Картах в 1С перестал работать drag-and-drop и как это исправить

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

При разработке интерфейсов в 1С:Предприятие часто возникает необходимость интеграции интерактивных карт. Однако при переходе на новые версии платформы, начиная с 8.3.14, многие разработчики столкнулись с неприятным эффектом: в ПолеHTMLДокумента перестало работать перемещение карты мышью (drag-and-drop). Карта отображается, кнопки нажимаются, но «схватить» и передвинуть её невозможно. В этой статье мы подробно разберем, почему это происходит, какие версии платформы затронуты и как решить проблему программными средствами или обновлением.

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

Проанализируем техническую подоплеку. Начиная с версии 8.3.14, компания 1С начала отказываться от использования движка Internet Explorer (MSHTML) внутри толстого и тонкого клиентов под Windows в пользу WebKit. Это позволило использовать современные стандарты HTML5 и CSS3, однако привнесло специфические ошибки самого движка WebKit.

Суть проблемы заключается в некорректной интерпретации событий мыши. Когда пользователь зажимает левую кнопку мыши на карте и пытается её сдвинуть, WebKit внутри платформы 1С ошибочно полагает, что пользователь хочет выделить текст или перетащить объект как картинку, а не взаимодействовать с JavaScript-кодом карты. Это происходит из-за конфликта между обработчиками mousedown и mousemove. В результате стандартный функционал Яндекс.Карт блокируется программным слоем платформы.

Выясним, в каких версиях платформы наблюдается проблема

Проблема носит массовый характер и подтверждена официально (ошибка 000051584 на Bugboard 1C). Проанализируем список затронутых версий:

Если вы используете версию 8.3.13, ошибки не будет, так как там используется старый движок. Но как только вы обновляетесь до 8.3.14 или первых релизов 8.3.15/16, функционал карт ломается.

Рассмотрим варианты решения проблемы

Существует два основных пути решения: административный (обновление) и программный (код-«костыль», если обновиться прямо сейчас невозможно).

Способ 1: Обновление платформы 1С

Самый правильный и надежный метод — установка релиза, в котором ошибка WebKit была исправлена силами разработчиков 1С. Рассмотрим рекомендуемые версии:

  1. Для ветки 8.3.15: устанавливаем релиз 8.3.15.1747 или выше.
  2. Для ветки 8.3.16: устанавливаем релиз 8.3.16.1030 или выше.
  3. Для всех последующих веток (8.3.17, 8.3.18 и т.д.) проблема уже не актуальна, так как исправление включено в базовый код.

Способ 2: Использование CSS-свойств для обхода блокировки

Если по какой-то причине вы вынуждены оставаться на «проблемном» релизе, попробуем исправить поведение движка через внедрение стилей в HTML-код страницы. Посмотрим на пример кода, который нужно добавить в секцию style вашей HTML-страницы:


/* Отключаем стандартное поведение touch и drag для контейнера карты */
#map {
    width: 100%;
    height: 100%;
    touch-action: none;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

Разберем, что делают эти свойства. Свойство touch-action: none является ключевым: оно указывает браузеру (WebKit), что обработку всех жестов и движений мыши берет на себя JavaScript, и браузеру не нужно пытаться прокручивать страницу или выделять элементы. Свойство user-select: none предотвращает случайное выделение невидимых элементов карты, которое часто мешает корректному срабатыванию события drag.

Способ 3: Настройка параметров API Яндекс.Карт

Проанализируем ситуацию с инициализацией самой карты. Иногда помогает явное указание опций при создании объекта карты. Посмотрим на пример JavaScript-кода:


var myMap = new ymaps.Map("map", {
    center: [55.76, 37.64],
    zoom: 10,
    controls: []
}, {
    // Явно разрешаем перетаскивание и отключаем задержки
    dragEvents: true,
    yandexMapDisableAddressPopup: true
});

Дополнительно убедимся, что мы используем актуальную версию API. В заголовке страницы должен быть указан правильный скрипт. Посмотрим на строку подключения:

script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"

Проанализируем перспективу: переход на Chromium (CEF)

Важно понимать, что в последних версиях платформы (начиная с 8.3.20) 1С сделала еще один важный шаг — переход на движок Chromium Embedded Framework (CEF) для Windows. Это практически полностью снимает проблемы совместимости, так как CEF работает аналогично современному браузеру Google Chrome.

Если вы планируете долгосрочную поддержку решения с Яндекс.Картами, рекомендуем ориентироваться на использование Платформа 8.3.20+. В этом случае вы сможете использовать даже третью версию API Яндекс.Карт (v3.0), которая требует современных JS-возможностей, недоступных в старом WebKit.

Заключение и рекомендации

Подведем итоги нашего исследования:

  1. Если у вас пропал драг-дроп на картах, первым делом проверьте версию 1С:Предприятие. Если она попадает в диапазон 8.3.14 — 8.3.15.1746, причина именно в платформе.
  2. Для быстрого решения без обновления платформы внедрите в HTML-страницу стили touch-action: none и user-select: none.
  3. Обязательно проверьте, нет ли «залипания» кэша. Для этого можно очистить папку vrs-cache в локальном профиле пользователя, так как WebKit иногда сохраняет старые некорректные скрипты.
  4. При первой возможности обновите платформу до стабильных релизов 8.3.16+ или 8.3.20+ для перехода на более современный движок Chromium.

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

← На главную