Как реализовать работу с географическими картами и рисование полигонов в 1С:Предприятие 8.3

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

Интеграция картографических сервисов в среду 1С:Предприятие 8.3 является востребованной задачей для логистических систем, учета недвижимости и управления выездным персоналом. Одной из самых сложных подзадач здесь является не просто отображение карты, а интерактивное взаимодействие с ней: создание пользователем произвольных областей (полигонов), сохранение их границ в базе данных и привязка к объектам системы (например, к справочнику Контрагенты или ЗоныДоставки).

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

Выбор технологии и картографического движка

Прежде всего, проанализируем доступные инструменты. Использование внешних программ-конвертеров карт, как правило, является тупиковым путем из-за сложности поддержки и проблем с обновлением данных. Современный стандарт — это использование объекта ПолеHTMLДокумента на управляемой форме 1С.

Разберем основные варианты библиотек для работы с картами:

  1. Leaflet.js — легкая, быстрая и наиболее популярная библиотека. Она идеально подходит для большинства задач 1С: отображение маркеров, рисование полигонов и слоев. Именно ее мы рекомендуем для реализации.
  2. OpenLayers — более мощный и сложный инструмент. Его стоит выбирать, если вам требуются сложные географические расчеты (например, учет кривизны земли при вычислении больших площадей) или работа со специфическими форматами проекций.
  3. API Яндекс.Карт или Google Maps — готовые экосистемы. Однако стоит помнить о лицензионных ограничениях: бесплатное использование этих API в закрытых бизнес-системах (ERP, CRM) часто запрещено правилами сервисов.

Оптимальным выбором для 1С является связка Leaflet + OpenStreetMap (OSM). Это полностью бесплатное решение, которое легко кастомизируется под нужды предприятия.

Подготовка платформы 1С

Важным условием для стабильной работы является версия платформы. Начиная с версии 8.3.14, 1С перешла на использование движка Chromium для отображения HTML. Это критически важно, так как старый движок (Internet Explorer) не поддерживает современные стандарты JavaScript, необходимые для работы новых версий Leaflet или OpenLayers. Если вы работаете на более старых версиях, вам придется использовать устаревшие версии библиотек, что существенно ограничит функционал.

Создание «мостика» между 1С и JavaScript

Чтобы 1С могла управлять картой, а карта — передавать данные обратно в 1С, необходимо организовать двусторонний обмен данными. Рассмотрим, как это работает на практике.

1. Передача данных из 1С в JavaScript

Для управления картой из программного кода 1С используется метод ВыполнитьJavaScript(). С его помощью мы можем вызывать функции, определенные внутри нашего HTML-файла.

Пример вызова функции отрисовки полигона:


// В коде 1С
ДанныеПолигонаJSON = "[ [55.75, 37.61], [55.80, 37.65], [55.78, 37.70] ]";
ТекстСкрипта = "drawPolygonFrom1C('" + ДанныеПолигонаJSON + "');";
Элементы.КартаHTML.ВыполнитьJavaScript(ТекстСкрипта);

2. Передача данных из JavaScript в 1С

Для передачи координат нарисованного пользователем полигона обратно в 1С используется механизм обработки события ПриНажатии (или OnHrefClick). В JavaScript мы инициируем переход по ссылке со специальным префиксом.

Пример JavaScript-кода для отправки данных:


function sendDataTo1C(coords) {
    // Формируем строку с данными
    var dataString = JSON.stringify(coords);
    // Инициируем событие перехода, которое перехватит 1С
    window.location.href = "v8action://savePolygon?data=" + encodeURIComponent(dataString);
}

В 1С на стороне клиента мы описываем обработчик события поля HTML-документа:


&НаКлиенте
Процедура КартаHTMLПриНажатии(Элемент, ДанныеСобытия, СтандартнаяОбработка)
    URL = ДанныеСобытия.Href;
    Если Найти(URL, "v8action://savePolygon") > 0 Тогда
        СтандартнаяОбработка = Ложь;
        // Извлекаем данные из URL и парсим JSON
        ДанныеJSON = Сред(URL, Найти(URL, "data=") + 5);
        СохранитьКоординатыВБазе(ДекодироватьСтроку(ДанныеJSON, СпособКодированияСтроки.URLАнкор));
    КонецЕсли;
КонецПроцедуры

Работа с полигонами и форматом GeoJSON

Для хранения географических объектов в 1С лучше всего использовать формат GeoJSON. Это открытый стандарт, основанный на JSON, который описывает структуры данных. Посмотрим на пример структуры полигона в этом формате:


{
  "type": "Feature",
  "geometry": {
    "type": "Polygon",
    "coordinates": [
      [[37.6, 55.7], [37.7, 55.7], [37.7, 55.8], [37.6, 55.7]]
    ]
  },
  "properties": {
    "name": "Зона обслуживания Центр"
  }
}

Выясним причину, почему это удобно: 1С имеет встроенные средства работы с JSON (объекты ЧтениеJSON и ЗаписьJSON). Вы можете хранить эту строку в реквизите справочника с типом Строка (неограниченная) или в ХранилищеЗначений.

Алгоритм реализации рисования зон

Рассмотрим пошагово, как организовать процесс для пользователя:

  1. Загрузка карты: При открытии формы 1С загружает HTML-шаблон с подключенной библиотекой Leaflet и плагином для рисования (например, Leaflet.draw).
  2. Режим рисования: Пользователь нажимает кнопку на панели инструментов карты. В этот момент JS-библиотека активирует режим создания полигона.
  3. Завершение построения: Как только пользователь замыкает полигон, JS генерирует массив координат.
  4. Связь с объектом 1С: 1С получает координаты и открывает окно выбора элемента справочника (например, "Участки").
  5. Сохранение: Координаты упаковываются в строку JSON и записываются в соответствующий реквизит элемента справочника.

Важные нюансы лицензирования

Проанализируем ситуацию с выбором провайдера карт. Если ваше решение будет использоваться внутри компании для оптимизации бизнес-процессов (логистика, мониторинг), использование Google Maps и Яндекс.Карт на бесплатной основе может привести к блокировке API-ключа. Согласно их правилам, использование карт в ERP-системах требует покупки коммерческой лицензии.

OpenStreetMap (OSM) не накладывает таких ограничений, что делает его идеальным выбором для внутренних разработок на 1С. Вы можете использовать тайлы (фрагменты карт) от различных провайдеров, работающих на базе OSM данных.

Заключение

Реализация карт в 1С через ПолеHTMLДокумента и JavaScript-библиотеки — это не "бред", а профессиональный стандарт. Такой подход обеспечивает гибкость, позволяет строить сложные интерфейсы и не зависеть от жестких рамок встроенных механизмов платформы. Разберитесь с библиотекой Leaflet, освойте передачу данных через v8action, и вы сможете реализовать геоинформационную систему любой сложности непосредственно в вашей базе 1С.

← На главную