Интеграция картографических сервисов в среду 1С:Предприятие 8.3 является востребованной задачей для логистических систем, учета недвижимости и управления выездным персоналом. Одной из самых сложных подзадач здесь является не просто отображение карты, а интерактивное взаимодействие с ней: создание пользователем произвольных областей (полигонов), сохранение их границ в базе данных и привязка к объектам системы (например, к справочнику Контрагенты или ЗоныДоставки).
В этой статье мы подробно разберем, как построить надежную систему работы с геоданными, используя современные веб-технологии и встроенные возможности платформы 1С.
Прежде всего, проанализируем доступные инструменты. Использование внешних программ-конвертеров карт, как правило, является тупиковым путем из-за сложности поддержки и проблем с обновлением данных. Современный стандарт — это использование объекта ПолеHTMLДокумента на управляемой форме 1С.
Разберем основные варианты библиотек для работы с картами:
Оптимальным выбором для 1С является связка Leaflet + OpenStreetMap (OSM). Это полностью бесплатное решение, которое легко кастомизируется под нужды предприятия.
Важным условием для стабильной работы является версия платформы. Начиная с версии 8.3.14, 1С перешла на использование движка Chromium для отображения HTML. Это критически важно, так как старый движок (Internet Explorer) не поддерживает современные стандарты JavaScript, необходимые для работы новых версий Leaflet или OpenLayers. Если вы работаете на более старых версиях, вам придется использовать устаревшие версии библиотек, что существенно ограничит функционал.
Чтобы 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Анкор));
КонецЕсли;
КонецПроцедуры
Для хранения географических объектов в 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). Вы можете хранить эту строку в реквизите справочника с типом Строка (неограниченная) или в ХранилищеЗначений.
Рассмотрим пошагово, как организовать процесс для пользователя:
Проанализируем ситуацию с выбором провайдера карт. Если ваше решение будет использоваться внутри компании для оптимизации бизнес-процессов (логистика, мониторинг), использование Google Maps и Яндекс.Карт на бесплатной основе может привести к блокировке API-ключа. Согласно их правилам, использование карт в ERP-системах требует покупки коммерческой лицензии.
OpenStreetMap (OSM) не накладывает таких ограничений, что делает его идеальным выбором для внутренних разработок на 1С. Вы можете использовать тайлы (фрагменты карт) от различных провайдеров, работающих на базе OSM данных.
Реализация карт в 1С через ПолеHTMLДокумента и JavaScript-библиотеки — это не "бред", а профессиональный стандарт. Такой подход обеспечивает гибкость, позволяет строить сложные интерфейсы и не зависеть от жестких рамок встроенных механизмов платформы. Разберитесь с библиотекой Leaflet, освойте передачу данных через v8action, и вы сможете реализовать геоинформационную систему любой сложности непосредственно в вашей базе 1С.