При интеграции 1С с внешними государственными информационными системами (где важно автоматическое обновление токенов) (например, ЕГИСЗ, Честный знак или МДЛП) разработчики часто сталкиваются с жестким требованием (которое иногда требует автоматической отправки документов): адрес должен быть передан в формате уникальных идентификаторов ГАР (ранее ФИАС). Однако при попытке извлечь id адресного объекта из структуры 1С (БСП) выясняется, что он либо не совпадает с сайтом налоговой, либо поле идентификатора дома вовсе оказывается пустым. В этой статье мы подробно разберем, почему так происходит и как получить корректные данные.
Прежде всего, проанализируем, как Библиотека стандартных подсистем (БСП) хранит адресную информацию. В современных конфигурациях (БП 3.0, ЗУП 3.1, ERP) адрес хранится в виде строки JSON или XML-пакета XDTO. Когда мы открываем форму ввода адреса, программа обращается к регистру сведений АдресныеОбъекты. Важно понимать, что 1С перешла на формат ГАР (Государственный адресный реестр), который является развитием ФИАС. Для изучения программных интерфейсов подсистем и поиска готовых фрагментов кода можно использовать справочник по методам БСП с примерами использования.
Рассмотрим пример данных, которые видит разработчик в поле адреса:
{
"value": "171132, Тверская обл, р-н Вышневолоцкий, д Гарусово, д. 2",
"type": "Адрес",
"addressType": "Административно-территориальный",
"id": "b9af1fbb-55ce-40f5-817a-698c19f5e919",
"areaId": "61723327-1c20-42fe-8dfa-402638d9b396",
"localityId": "b9af1fbb-55ce-40f5-817a-698c19f5e919",
"houseId": "fcb98052-9d30-462d-80e2-df40016949eb"
}
Здесь id — это идентификатор последнего значимого адресного объекта (в данном случае деревни), а houseId — идентификатор дома. Проблема часто заключается в том, что при проверке через портал fias.nalog.ru эти GUID могут не совпадать с ожидаемыми. Выясним основные причины этого явления.
С 2021 года в России официально сосуществуют две структуры адресного деления. Это ключевой момент, который часто путают программисты при сопоставлении данных. Рассмотрим их подробнее:
В системе ГАР один и тот же населенный пункт может иметь разные пути подчинения. Например, деревня может входить в состав Вышневолоцкого района (административно) или в состав Вышневолоцкого городского округа (муниципально). Если в 1С выбран муниципальный тип адреса, а вы ищете его в базе по административному дереву, GUID вышестоящих объектов (parent IDs) и даже самого объекта могут отличаться, так как это разные записи в реестре ГАР, связанные с разными типами иерархии.
Многие пользователи замечают, что в 1С домов гораздо меньше, чем на сайте ФИАС, или идентификатор houseId не заполняется автоматически. Проанализируем механику загрузки классификатора. Полная база ГАР со всеми домами России занимает сотни гигабайт. По умолчанию 1С загружает данные только до уровня улиц.
Если при вводе адреса вы просто вписываете номер дома вручную, программа не всегда может сопоставить его с базой ГАР, если эти данные не были предварительно загружены. В этом случае 1С записывает адрес как "текстовое описание" без привязки к HOUSEGUID.
Для решения этой проблемы мы рекомендуем:
houseId.houseId.Посмотрим на ситуацию со стороны жизненного цикла объектов. В ФИАС/ГАР существуют понятия OBJECTGUID (постоянный идентификатор) и OBJECTID (внутренний код записи, который меняется при переименовании или переподчинении объекта).
БСП старается хранить OBJECTGUID, но если адрес был введен в базу год назад, а за это время в реестре произошли изменения (например, деревня Гарусово была передана из одного сельского поселения в другое), то старый идентификатор может стать "историческим". На сайте ФНС по умолчанию отображаются только актуальные записи. Проанализируем ситуацию: если ваша база обновляется редко, данные классификатора начинают отставать от эталона.
Если вам необходимо выгрузить адрес с корректными GUID для внешней системы, воспользуйтесь методами БСП. Посмотрим на пример кода, который позволяет получить структуру адреса со всеми идентификаторами:
// Получаем структуру адреса из контактной информации
АдреснаяСтруктура = РаботаСАдресами.СведенияОбАдресе(ТекстАдресаJSON);
// Идентификатор последнего объекта (улицы или НП)
АдресныйОбъектGUID = АдреснаяСтруктура.id;
// Идентификатор дома
ДомGUID = АдреснаяСтруктура.houseId;
Если вы обнаружили, что houseId пустой, выполните следующие шаги:
Часто возникает вопрос: почему для города идентификатор совпадает, а для деревни — нет? Выясним причину. В городах структура адреса обычно жесткая: Город — Улица — Дом. В деревнях улицы часто отсутствуют. В этом случае "адресным объектом" для дома становится сама деревня (Locality). Если в 1С адрес записан некорректно (например, название деревни попало в поле "Улица"), связка с ГАР разорвется, и вы получите произвольный или пустой GUID.
Всегда проверяйте соответствие полей: area (область), district (район), locality (населенный пункт) и street (улица). Только при правильном заполнении всех уровней иерархии БСП сможет гарантировать корректность houseId.
Мы выяснили, что несовпадение ГУИДов — это не всегда ошибка программы. Чаще всего это следствие использования разных моделей деления (муниципальной против административной) или отсутствия детальной информации о домах в локальном классификаторе. Для получения гарантированно верных данных используйте веб-сервисы поддержки 1С и следите за актуальностью адресного классификатора в вашей информационной базе.