При интеграции 1С с внешними системами, государственными порталами или сервисами доставки часто возникает необходимость передать глобальный уникальный идентификатор (GUID) адреса, включая конкретное здание или дом. Разберем, хранятся ли GUID домов в локальной информационной базе 1С, какими встроенными функциями их можно получить и с какими ограничениями можно столкнуться при реализации этой задачи.
Спроектированная архитектура Библиотеки Стандартных Подсистем (БСП) в конфигурации 1С:Бухгалтерия 3.0 разделяет адресные объекты на несколько категорий:
АдресныеОбъекты, где для каждого элемента доступен его открытый GUID.ДомаЗданияСтроения. Чтобы исключить взрывной рост размера информационной базы (который мог бы составлять десятки гигабайт) и сохранить высокое производительность системы, данные по домам упаковываются в бинарное ХранилищеЗначения, сгруппированное по улицам.Из-за такой структуры в локальных таблицах базы 1С нет прямых текстовых полей с GUID для каждого дома. Однако получить эти данные все же возможно несколькими способами.
В конфигурациях на БСП предусмотрен механизм обращения к облачному веб-сервису 1С для валидации и стандартизации адресов. Для получения идентификаторов адреса используется функция общего модуля АдресныйКлассификатор.
Рассмотрим пример обращения к функции:
ЗначенияИдентификаторов = АдресныйКлассификатор.ИдентификаторыАдреса(СтруктураАдреса);
При передаче корректно сформированного адреса метод возвращает уникальный номер дома. Проанализируем особенности этого решения:
Если адрес уже был введен пользователем и сохранен в базе 1С (например, в контактной информации контрагента или физического лица), обращаться к внешним сервисам не требуется.
При вводе адреса из классификатора платформа сохраняет сериализованные данные в регистре сведений КонтактнаяИнформация в поле ЗначенияПолей (в формате XML или JSON). В этой структуре уже содержатся зафиксированные идентификаторы дома.
Разберем вариант извлечения кодов с помощью программного метода:
// Извлечение кодов адреса из сохраненной структуры
СтруктураКодов = АдресныйКлассификатор.КодыАдреса(ЗначенияПолей, "ЗагруженныеДанные");
ИдентификаторДома = СтруктураКодов.ИдентификаторДома;
Параметр "ЗагруженныеДанные" указывает платформе, что поиск необходимо выполнить по зафиксированным локальным данным без отправки внешних HTTP-запросов.
При работе с современными версиями 1С следует учитывать переход с классификатора ФИАС на Государственный адресный реестр (ГАР). В формате ГАР используются два типа кодов:
Перед передачей GUID во внешнюю систему необходимо уточнить, какой именно формат кода ожидает приемная сторона.
Если задача требует массовой обработки тысяч адресов в режиме нон-стоп, обращение к веб-сервисам 1С может упереться в лимиты скорости или ограничения безопасности. В таких случаях применяются следующие подходы:
ВнешниеИсточникиДанных, что позволяет выполнять прямые быстрые SQL-запросы без раздувания основной базы 1С.