Разработка и Конфигурация · 9 мин
Как по адресу получить координаты в 1С
Как в 1С получить координаты по адресу: сервисы геокодирования, HTTP-запросы к API DaData, Яндекс и OpenStreetMap, хранение координат и типовые ошибки.
Задача получить координаты по адресу возникает в 1С постоянно: построить маршрут доставки, показать контрагента на карте, рассчитать расстояние до склада, сгруппировать заказы по зонам. Сама платформа 1С координаты по адресу не вычисляет — для этого используются внешние сервисы геокодирования, к которым 1С обращается по HTTP. Поэтому решение всегда состоит из двух частей: выбрать сервис и написать код обращения к нему.
Геокодирование — это преобразование текстового адреса в географические координаты (широту и долготу). Обратная операция, когда по координатам получают адрес, называется обратным геокодированием и тоже доступна в большинстве сервисов. Ниже разберём, какие сервисы подходят для работы из 1С, как сформировать запрос средствами платформы, как разобрать ответ и где хранить результат, чтобы не дергать внешний API при каждом обращении к адресу.
Какие сервисы геокодирования подходят для 1С
Для интеграции с 1С нужен сервис, который принимает адрес в параметрах HTTP-запроса и возвращает структурированный ответ в формате JSON. На практике чаще всего используют три варианта: DaData (сильная сторона — нормализация российских адресов и подсказки по ФИАС/ГАР), геокодер Яндекс.Карт (хорошее покрытие и точность по России) и Nominatim на базе OpenStreetMap (бесплатный, но с ограничениями по частоте запросов и без гарантий точности).
Все три сервиса работают по одной схеме: вы регистрируетесь, получаете API-ключ (у Nominatim ключ не нужен, но требуется корректный заголовок User-Agent), отправляете GET-запрос с адресом и получаете JSON, где среди прочих полей есть широта и долгота. Отличия — в лимитах, стоимости, формате ответа и качестве распознавания «грязных» адресов, введённых пользователями вручную.
Сравнение вариантов
Нормализует российские адреса, возвращает коды ФИАС/ГАР и координаты. Подходит для учётных систем; бесплатный лимит ограничен, далее платно.
Высокая точность по России и СНГ. Требует API-ключ; условия использования ограничивают хранение результатов — читайте лицензионное соглашение.
Бесплатный, без ключа, но с жёстким лимитом частоты запросов и требованием указывать User-Agent. Подходит для разовых и маленьких объёмов.
Как устроен HTTP-запрос к сервису геокодирования
В типовом сценарии 1С формирует GET-запрос вида «адрес сервиса + параметры: текст адреса, ключ, формат ответа». Платформа предоставляет для этого объекты HTTPСоединение и HTTPЗапрос, а также более короткий путь через ПолучениеФайлаИзИнтернета для простых случаев. Ответ приходит в теле HTTP-ответа в виде строки JSON.
Важно корректно закодировать адрес для передачи в URL: пробелы, кириллица и спецсимволы должны быть преобразованы. В платформе для этого есть функция КодироватьСтроку с методом КодировкаURL. Если пропустить кодирование, сервис вернёт ошибку разбора запроса или пустой результат, хотя сам адрес корректен.
Функция ПолучитьКоординаты(Адрес, КлючAPI)
Сервер = "geocode-maps.yandex.ru";
Ресурс = "/1.x/?apikey=" + КлючAPI + "&format=json&geocode=" + КодироватьСтроку(Адрес, СпособКодированияСтроки.КодировкаURL);
Соединение = Новый HTTPСоединение(Сервер, 443, , , , 30, Новый ЗащищенноеСоединениеOpenSSL);
Запрос = Новый HTTPЗапрос(Ресурс);
Ответ = Соединение.Получить(Запрос);
Возврат Ответ.ПолучитьТелоКакСтроку();
КонецФункцииРазбор JSON-ответа и извлечение широты и долготы
Строку ответа преобразуют в структуру данных через объект ЧтениеJSON. Дальше нужно пройти по иерархии полей до координат: у каждого сервиса свой путь. Например, у геокодера Яндекса координаты лежат в строке «долгота широта» через пробел внутри вложенных коллекций response → GeoObjectCollection → featureMember → GeoObject → Point → pos. У DaData это отдельные поля geo_lat и geo_lon в массиве suggestions.
Обязательно проверяйте, что сервис вообще нашёл адрес: массив результатов может быть пустым, а у Nominatim при отсутствии результата возвращается пустой JSON-массив. Обращение к несуществующему элементу вызовет ошибку выполнения, поэтому перед извлечением координат проверяйте количество элементов в коллекциях.
Обратите внимание на порядок координат: одни сервисы возвращают «широта, долгота», другие — «долгота, широта». Это самая коварная деталь интеграции: запрос выполняется без ошибок, но точка на карте оказывается в другом полушарии. Всегда сверяйте первый полученный результат с известным адресом.
Где и как хранить координаты в базе 1С
Повторный запрос к сервису при каждом открытии карты или построении отчёта — плохая практика: расходуется лимит API, замедляется работа, а при недоступности сервиса функционал ломается. Координаты следует получать один раз и сохранять в базе. Типовые варианты хранения: два числовых реквизита (Широта, Долгота) в справочнике контрагентов или адресов доставки, либо отдельный регистр сведений, привязанный к адресу или его коду ФИАС.
Регистр сведений удобнее, когда один адрес используется в разных объектах или когда нужно хранить дополнительные данные ответа: точность геокодирования, дату запроса, нормализованный адрес. Заполнение координат лучше выполнять регламентным заданием или по кнопке «Определить координаты», а не в момент записи объекта — иначе сетевая задержка будет мешать пользователю.
Обработка ошибок и ограничения сервисов
Внешний вызов может завершиться неудачей по многим причинам: нет интернета, неверный API-ключ, превышен лимит запросов, сервис временно недоступен. Код ответа 200 означает успех; коды 403 и 429 обычно указывают на проблемы с ключом или лимитом. Оборачивайте вызов в попытку-исключение и проверяйте КодСостояния ответа до разбора тела.
При массовой обработке адресов соблюдайте ограничения сервиса по частоте запросов. Nominatim прямо требует не чаще одного запроса в секунду, у платных сервисов лимиты привязаны к тарифу. Добавляйте паузы или обрабатывайте адреса пакетами в фоновом задании, иначе ваш ключ или IP-адрес могут временно заблокировать.
Проверка результата и контроль качества
После внедрения проверьте механизм на контрольном наборе: несколько точных адресов, адрес с опечаткой, несуществующий адрес и адрес за пределами вашего региона. Для каждого случая должно быть предсказуемое поведение: координаты найдены, найден приблизительный результат или зафиксирован отказ — без падения кода.
Полезно сохранять вместе с координатами признак качества результата, если сервис его возвращает (у DaData это поля qc_geo, у Яндекса — precision). Это позволит отличить точное совпадение с домом от приблизительной привязки к улице или населённому пункту и не использовать неточные данные там, где требуется точность до здания.
Как проверить результат
200, тело ответа содержит JSON с координатами
403, 429 или 5xx — проблема с ключом, лимитом или доступностью сервиса
Совпадает с реальным расположением адреса
Точка в другом городе или океане — перепутаны широта и долгота
Сервис сообщает о совпадении до дома
Привязка только к улице или городу при необходимости точного адреса
FAQ
Можно ли получить координаты без интернета?
Да, если развернуть локальный сервер геокодирования на базе открытых данных OpenStreetMap или справочника ФИАС/ГАР. Это требует отдельной инфраструктуры и регулярного обновления данных, поэтому оправдано только при больших объёмах или жёстких требованиях к автономности.
Чем отличается геокодирование от подсказок по адресу?
Подсказки (например, в DaData) помогают пользователю ввести корректный нормализованный адрес и часто сразу возвращают координаты вместе с ним. Геокодирование в узком смысле — это отдельный запрос «адрес → координаты». Если вы уже используете подсказки при вводе, координаты часто можно сохранить сразу, без отдельного вызова.
Как получить координаты для тысячи адресов разово?
Напишите обработку, которая перебирает адреса в фоновом задании с паузами между запросами согласно лимитам сервиса, и сохраняйте результат в регистр сведений. Предусмотрите повторную обработку только тех адресов, по которым запрос завершился ошибкой.
Что делать, если сервис не находит адрес?
Сначала нормализуйте адрес: приведите сокращения, уберите лишние слова, попробуйте вариант без номера квартиры и корпуса. Если адрес новостройки, его может ещё не быть в базе сервиса — тогда координаты придётся указать вручную по карте.
Где в типовых конфигурациях уже есть работа с картами?
В ряде конфигураций есть подсистемы работы с картами и маршрутами (например, в решениях для доставки и логистики), а в БСП есть механизмы контактной информации с поддержкой адресов по классификатору. Перед разработкой своего решения проверьте существующий функционал вашей конфигурации.
Можно ли хранить координаты в виде одной строки?
Технически да, но два числовых реквизита удобнее: они позволяют сравнивать и сортировать координаты в запросах, считать расстояния и не требуют разбора строки при каждом использовании.
Что важно запомнить
Координаты по адресу в 1С получают через внешний сервис геокодирования: HTTP-запрос с закодированным адресом, разбор JSON через ЧтениеJSON, проверка кода ответа и порядка координат. Результат сохраняют в базе и обновляют при изменении адреса, а массовую обработку выполняют с учётом лимитов сервиса.