К статье
Практический материал

Разработка и Конфигурация · 9 мин

Как сделать карту в 1С: интеграция с картографическими сервисами

Как вывести географическую карту в 1С: поле HTML-документа, API Яндекс.Карт, геокодирование адресов, отметки на карте и типичные ошибки интеграции.

Под «картой в 1С» чаще всего понимают вывод географической карты с отметками адресов клиентов, складов или маршрутов доставки прямо в форме документа или отчёта. В типовых конфигурациях такой функциональности «из коробки» либо нет, либо она ограничена, поэтому карту добавляют через механизм поля HTML-документа и JavaScript API картографических сервисов — Яндекс.Карт, 2ГИС или OpenStreetMap.

Технически задача сводится к трём шагам: получить координаты нужных адресов (геокодирование), сформировать HTML-страницу с картой и метками, отобразить её в управляемой форме 1С через реквизит с типом «ПолеHTMLДокумента». Никаких внешних компонентов и доработок платформы для этого не требуется — достаточно стандартных средств встроенного языка.

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

Что понадобится перед началом работы

Прежде чем писать код, определитесь с картографическим сервисом. Яндекс.Карты и 2ГИС дают хорошую детализацию по России и СНГ, но требуют бесплатного API-ключа, который получают в кабинете разработчика соответствующего сервиса. OpenStreetMap (через библиотеку Leaflet) ключей не требует, но детализация адресов и качество геокодера по регионам может быть ниже.

Также проверьте, что в базе есть источник адресов: обычно это табличная часть «КонтактнаяИнформация» справочников «Контрагенты», «Партнеры» или «Склады», либо адрес доставки в документах. Координаты придётся получать из текстового адреса, поэтому адреса должны быть заполнены корректно — «г. Москва, ул. Ленина, д. 5» геокодируется надёжно, а «Москва, к Ивану за складом» — нет.

Как получить координаты адресов через геокодирование

Координаты запрашивают у HTTP-сервиса геокодера. Для Яндекса это GET-запрос к адресу geocode-maps.yandex.ru с параметрами apikey, geocode (текст адреса) и format=json. В ответ приходит JSON, из которого извлекают строку координат вида «37.617698 55.755864» (сначала долгота, затем широта — порядок легко перепутать).

В 1С запрос выполняют через объект HTTPСоединение и HTTPЗапрос, ответ разбирают через ЧтениеJSON. Координаты имеет смысл сохранять в базе — например, в дополнительных сведениях контрагента или в собственном регистре сведений, — чтобы не дергать API при каждом открытии карты и не расходовать лимит запросов.

Пример фрагмента кода геокодирования:

Функция ПолучитьКоординаты(Адрес, КлючAPI)

Соединение = Новый HTTPСоединение("geocode-maps.yandex.ru",,,,,,Новый ЗащищенноеСоединениеOpenSSL);

Путь = "/1.x/?apikey=" + КлючAPI + "&format=json&geocode=" + КодироватьСтроку(Адрес, СпособКодированияСтроки.КодировкаURL);

Запрос = Новый HTTPЗапрос(Путь);

Ответ = Соединение.Получить(Запрос);

Чтение = Новый ЧтениеJSON;

Чтение.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку());

Данные = ПрочитатьJSON(Чтение);

Возврат Данные.response.GeoObjectCollection.featureMember[0].GeoObject.Point.pos;

КонецФункции

Как вывести карту в форме 1С

Добавьте в форму реквизит с типом «Строка» неограниченной длины и элемент формы с видом «Поле HTML-документа», связанный с этим реквизитом. В реквизит помещают полный HTML-код страницы: подключение JS API с ключом, блок-контейнер карты и скрипт инициализации с метками.

Координаты точек подставляют в HTML-шаблон строковой подстановкой: формируют массив меток в формате JavaScript и вставляют его в текст страницы. После присвоения текста реквизиту карта отрисуется автоматически. Удобно обернуть формирование HTML в отдельную функцию с параметрами «МассивТочек» и «ЦентрКарты», чтобы переиспользовать её в разных формах.

Порядок действий
  1. 1
    Зарегистрируйте API-ключ в кабинете разработчика картографического сервиса
  2. 2
    Реализуйте функцию геокодирования адреса в координаты с сохранением результата в базе
  3. 3
    Добавьте в форму реквизит «Строка» и элемент «Поле HTML-документа»
  4. 4
    Сформируйте HTML-код с подключением JS API и массивом меток
  5. 5
    Присвойте HTML реквизиту и проверьте отображение карты у пользователя с доступом в интернет

Как добавить метки, балуны и маршруты

Минимальная метка — это placemark с координатами и текстом подсказки. Чтобы карта была полезной, в балун (всплывающее окно метки) выводят название контрагента, адрес, телефон или ссылку-идентификатор документа. Разным статусам точек можно назначать разные цвета меток — например, «доставлено», «в пути», «просрочено».

Построение маршрута между точками в Яндекс.Картах делается через multiRoute: в массив referencePoints передают координаты в нужном порядке, и сервис сам строит автомобильный маршрут. Учтите, что оптимизация порядка точек (задача коммивояжёра) — отдельная платная возможность, в базовом ключе она ограничена.

Альтернативы: схема, картинка и внешние компоненты

Если интернета у пользователей нет или нужна не географическая карта, а схема (план склада, карта цеха, схема бизнес-процесса), подход другой. Для статичных схем подходит «Графическая схема» — штатный объект формы, позволяющий рисовать фигуры, линии и подписи программно, без каких-либо внешних сервисов.

Ещё один вариант — заранее сформированная картинка: статические карты (Static API Яндекса) возвращают готовый PNG с метками, который можно показать в элементе «Поле картинки» или вставить в табличный документ для печати. Это удобно для печатных маршрутных листов, где интерактивность не нужна.

Сравнение вариантов

Поле HTML + JS API

Интерактивная карта с метками и маршрутами. Нужны API-ключ и интернет у каждого пользователя

Static API + картинка

Готовое изображение карты для печати и отчётов. Не интерактивно, но работает в табличных документах

Графическая схема

Схемы склада, процессов, планировки. Полностью офлайн, но это не географическая карта

OpenStreetMap + Leaflet

Без API-ключа и жёстких лимитов. Детализация и геокодер могут уступать коммерческим сервисам

Проверка результата и типичные ошибки

После внедрения проверьте карту в трёх режимах: толстый клиент, тонкий клиент и веб-клиент. В веб-клиенте HTML-поле работает внутри браузера пользователя, и там могут быть свои ограничения на загрузку внешних скриптов. Также проверьте поведение при пустом списке точек — карта должна открываться с центром по умолчанию, а не падать с ошибкой скрипта.

Типичные ошибки
01
Перепутаны широта и долгота: Яндекс-геокодер возвращает «долгота широта», а placemark ожидает [широта, долгота] — метки уезжают в другую точку мира
02
Ключ API вставлен в код, но не активирован или превышен лимит — вместо карты серый прямоугольник и ошибка в консоли
03
Координаты не сохраняются в базе, геокодирование выполняется при каждом открытии формы — медленная работа и расход лимита
04
Нет обработки адресов, которые сервис не нашёл — форма падает с ошибкой обращения к пустому элементу массива
05
Проверка только в толстом клиенте: у пользователей в тонком или веб-клиенте карта не отображается
Контрольные точки

Как проверить результат

Открытие формы с картой
Норма

Карта загружается, метки стоят на нужных адресах

Тревожный признак

Серый фон, ошибка скрипта или метки в неверных местах

Адрес, который не находится геокодером
Норма

Точка пропускается, пользователь видит понятное сообщение

Тревожный признак

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

Работа без интернета
Норма

Предусмотрено сообщение о недоступности карты

Тревожный признак

Пустое поле без пояснений

Ответы на частые вопросы

Можно ли сделать карту в 1С без программирования?

Полноценную интерактивную карту — нет: потребуется код для геокодирования и формирования HTML. Без кода можно лишь вставить готовую картинку карты в макет печатной формы или показать адрес в браузере по гиперссылке.

Работает ли карта в веб-клиенте 1С?

Да, поле HTML-документа отображается и в браузере. Но внешние скрипты картографического API должны быть доступны с компьютера пользователя, а в некоторых браузерах могут понадобиться настройки разрешения загрузки смешанного контента, если база работает по HTTP, а API — по HTTPS.

Платный ли API Яндекс.Карт для 1С?

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

Как показать карту в печатной форме маршрутного листа?

Используйте Static API: сервис возвращает готовое изображение PNG с метками по заданным координатам. Картинку загружают во временное хранилище и вставляют в табличный документ как рисунок — интерактивность в печати не нужна.

Что делать, если адресов тысячи и геокодирование идёт долго?

Выполняйте геокодирование фоновым заданием порциями с сохранением координат в регистре сведений. Повторно обращайтесь к API только для новых или изменённых адресов — это резко сокращает число запросов и расход лимита.

Итог

Что важно запомнить

Карта в 1С строится на поле HTML-документа и JS API картографического сервиса: геокодируйте адреса заранее, храните координаты в базе, проверяйте работу во всех клиентах и обрабатывайте адреса, которые сервис не нашёл.