Разработка и Конфигурация · 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Зарегистрируйте API-ключ в кабинете разработчика картографического сервиса
- 2Реализуйте функцию геокодирования адреса в координаты с сохранением результата в базе
- 3Добавьте в форму реквизит «Строка» и элемент «Поле HTML-документа»
- 4Сформируйте HTML-код с подключением JS API и массивом меток
- 5Присвойте HTML реквизиту и проверьте отображение карты у пользователя с доступом в интернет
Как добавить метки, балуны и маршруты
Минимальная метка — это placemark с координатами и текстом подсказки. Чтобы карта была полезной, в балун (всплывающее окно метки) выводят название контрагента, адрес, телефон или ссылку-идентификатор документа. Разным статусам точек можно назначать разные цвета меток — например, «доставлено», «в пути», «просрочено».
Построение маршрута между точками в Яндекс.Картах делается через multiRoute: в массив referencePoints передают координаты в нужном порядке, и сервис сам строит автомобильный маршрут. Учтите, что оптимизация порядка точек (задача коммивояжёра) — отдельная платная возможность, в базовом ключе она ограничена.
Альтернативы: схема, картинка и внешние компоненты
Если интернета у пользователей нет или нужна не географическая карта, а схема (план склада, карта цеха, схема бизнес-процесса), подход другой. Для статичных схем подходит «Графическая схема» — штатный объект формы, позволяющий рисовать фигуры, линии и подписи программно, без каких-либо внешних сервисов.
Ещё один вариант — заранее сформированная картинка: статические карты (Static API Яндекса) возвращают готовый PNG с метками, который можно показать в элементе «Поле картинки» или вставить в табличный документ для печати. Это удобно для печатных маршрутных листов, где интерактивность не нужна.
Сравнение вариантов
Интерактивная карта с метками и маршрутами. Нужны API-ключ и интернет у каждого пользователя
Готовое изображение карты для печати и отчётов. Не интерактивно, но работает в табличных документах
Схемы склада, процессов, планировки. Полностью офлайн, но это не географическая карта
Без API-ключа и жёстких лимитов. Детализация и геокодер могут уступать коммерческим сервисам
Проверка результата и типичные ошибки
После внедрения проверьте карту в трёх режимах: толстый клиент, тонкий клиент и веб-клиент. В веб-клиенте HTML-поле работает внутри браузера пользователя, и там могут быть свои ограничения на загрузку внешних скриптов. Также проверьте поведение при пустом списке точек — карта должна открываться с центром по умолчанию, а не падать с ошибкой скрипта.
Как проверить результат
Карта загружается, метки стоят на нужных адресах
Серый фон, ошибка скрипта или метки в неверных местах
Точка пропускается, пользователь видит понятное сообщение
Ошибка выполнения и форма не открывается
Предусмотрено сообщение о недоступности карты
Пустое поле без пояснений
Ответы на частые вопросы
Можно ли сделать карту в 1С без программирования?
Полноценную интерактивную карту — нет: потребуется код для геокодирования и формирования HTML. Без кода можно лишь вставить готовую картинку карты в макет печатной формы или показать адрес в браузере по гиперссылке.
Работает ли карта в веб-клиенте 1С?
Да, поле HTML-документа отображается и в браузере. Но внешние скрипты картографического API должны быть доступны с компьютера пользователя, а в некоторых браузерах могут понадобиться настройки разрешения загрузки смешанного контента, если база работает по HTTP, а API — по HTTPS.
Платный ли API Яндекс.Карт для 1С?
У сервиса есть бесплатные лимиты запросов, которых обычно хватает для небольшой компании. При интенсивном использовании — массовом геокодировании, построении маршрутов для логистики — может потребоваться платный тариф. Условия меняются, актуальные лимиты смотрите в кабинете разработчика сервиса.
Как показать карту в печатной форме маршрутного листа?
Используйте Static API: сервис возвращает готовое изображение PNG с метками по заданным координатам. Картинку загружают во временное хранилище и вставляют в табличный документ как рисунок — интерактивность в печати не нужна.
Что делать, если адресов тысячи и геокодирование идёт долго?
Выполняйте геокодирование фоновым заданием порциями с сохранением координат в регистре сведений. Повторно обращайтесь к API только для новых или изменённых адресов — это резко сокращает число запросов и расход лимита.
Что важно запомнить
Карта в 1С строится на поле HTML-документа и JS API картографического сервиса: геокодируйте адреса заранее, храните координаты в базе, проверяйте работу во всех клиентах и обрабатывайте адреса, которые сервис не нашёл.