В современных конфигурациях 1С, таких как Бухгалтерия предприятия 3.0, ERP 2.5 или ЗУП 3.1, работа с адресными сведениями существенно усложнилась по сравнению со старыми версиями. Это связано с переходом на хранение данных в формате JSON и интеграцией с Государственным адресным реестром (ГАР/ФИАС). В данной статье мы подробно разберем, как извлечь код региона (цифровой код субъекта РФ), имея данные о регистрации физического лица.
Прежде чем приступать к написанию кода, проанализируем ситуацию с хранением данных. В типовых решениях контактная информация (адреса, телефоны) хранится в табличных частях справочников (например, ФизическиеЛица.КонтактнаяИнформация) или в специальном регистре сведений. Ключевым полем здесь является ЗначенияПолей. Это строка в формате JSON, которая содержит все составляющие адреса: индекс, город, улицу и, конечно же, регион.
Прямое чтение этой строки через строковые функции (например, Сред или Найти) является крайне ненадежным методом. Для корректной работы мы будем использовать механизмы Библиотеки стандартных подсистем (БСП). Для быстрого изучения функций подсистем и подбора готового кода можно использовать справочник по методам БСП с примерами использования.
Рассмотрим наиболее современный и простой способ получения кода региона. В составе БСП есть специализированный общий модуль УправлениеКонтактнойИнформацией, который инкапсулирует в себе всю логику разбора сложных структур адреса.
Разберем пример кода, который получает код региона напрямую из строки ЗначенияПолей:
// Предположим, мы уже получили строку ЗначенияПолей из табличной части
СтрокаJSON = СтрокаКонтактнойИнформации.ЗначенияПолей;
// Используем функцию БСП для извлечения кода
КодРегиона = УправлениеКонтактнойИнформацией.КодРегионаВАдресе(СтрокаJSON);
Если ЗначениеЗаполнено(КодРегиона) Тогда
Сообщить("Код региона получен: " + КодРегиона);
Иначе
Сообщить("Не удалось определить код региона. Возможно, адрес введен в свободном формате.");
КонецЕсли;
Этот метод хорош тем, что он автоматически обрабатывает изменения в форматах хранения данных, которые 1С внедряет в обновлениях конфигураций.
Если помимо кода региона вам требуются другие составляющие (например, краткое наименование региона или его идентификатор в ГАР), проанализируем использование функции СведенияОбАдресе из модуля РаботаСАдресами. Этот метод десериализует JSON-строку в удобную структуру.
Разберем по шагам, как это реализовать:
КонтактнаяИнформация по типу (Адрес регистрации).
Функция ПолучитьДанныеРегиона(ФизЛицоСсылка) Экспорт
// Ищем строку с адресом регистрации
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Тип", Перечисления.ТипыКонтактнойИнформации.Адрес);
ПараметрыОтбора.Вставить("Вид", Справочники.ВидыКонтактнойИнформации.ЮрАдресФизЛица); // Адрес регистрации
СтрокиАдреса = ФизЛицоСсылка.КонтактнаяИнформация.НайтиСтроки(ПараметрыОтбора);
Если СтрокиАдреса.Количество() > 0 Тогда
ЗначенияПолей = СтрокиАдреса[0].ЗначенияПолей;
// Получаем структуру сведений
СведенияОбАдресе = РаботаСАдресами.СведенияОбАдресе(ЗначенияПолей);
// В структуре будет доступно поле КодРегиона
Возврат СведенияОбАдресе.КодРегиона;
КонецЕсли;
Возврат "";
КонецФункции
Обратите внимание, что СведенияОбАдресе.КодРегиона обычно возвращает строковое представление кода (например, "77" для Москвы или "50" для Московской области).
Бывают ситуации, когда у вас на руках есть только название региона (например, "Алтайский край"), полученное из текстового представления адреса или из сторонней системы. В этом случае выясним причину, почему стандартные методы поиска по JSON могут не подойти, и воспользуемся адресным классификатором.
Посмотрим на пример использования метода КодРегионаПоНаименованию:
НазваниеРегиона = "Свердловская обл";
Код = АдресныйКлассификатор.КодРегионаПоНаименованию(НазваниеРегиона);
Если ЗначениеЗаполнено(Код) Тогда
// Код вернется в формате числа или строки, в зависимости от версии БСП
Сообщить("Код региона по классификатору: " + Код);
КонецЕсли;
Важный момент: этот способ менее надежен, так как написание региона может отличаться (наличие точек, сокращений "обл." или "область"). Рекомендуется всегда отдавать приоритет работе с идентификаторами или JSON-данными.
С переходом на ГАР адресные объекты стали жестко привязываться к уникальным идентификаторам (UUID). Если в ваших данных заполнен идентификатор адресного объекта, мы можем программно получить любые сведения о нем напрямую из классификатора.
Проанализируем ситуацию: нам нужно получить код региона, имея UUID города или улицы. Для этого используется метод СведенияОбОбъектеГАР.
// Идентификатор объекта в системе ГАР
ИдентификаторГАР = "..." ; // UUID объекта
Сведения = АдресныйКлассификатор.СведенияОбОбъектеГАР(ИдентификаторГАР);
Если Сведения <> Неопределено Тогда
// В структуре Сведения содержатся данные о вышестоящих объектах
КодРегиона = Сведения.КодРегиона;
КонецЕсли;
Многие разработчики стремятся получить данные через запрос для оптимизации производительности. Однако, поскольку данные в поле ЗначенияПолей хранятся в формате JSON, разобрать их средствами чистого 1С-запроса практически невозможно.
Рассмотрим варианты обхода этой проблемы:
КонтактнаяИнформация заполнено поле Регион (строка), вы можете попробовать связать таблицу физлиц с регистром сведений АдресныеОбъекты по наименованию. Но помните о риске неточного совпадения строк.Прежде чем использовать полученный код для налоговой отчетности или интеграции с ГИС, стоит убедиться, что адресные сведения в базе актуальны. Выясним, как проверить загрузку региона в систему:
КодРегионаДляПроверки = "23"; // Краснодарский край
Если Не АдресныйКлассификатор.РегионЗагружен(КодРегионаДляПроверки) Тогда
Сообщить("Внимание: Данные классификатора по региону " + КодРегионаДляПроверки + " не загружены!");
КонецЕсли;
Подведем итоги нашего исследования. Для максимально корректного получения кода региона в 1С:Бухгалтерия предприятия 3.0 следует придерживаться следующего алгоритма:
УправлениеКонтактнойИнформацией.КодРегионаВАдресе(), передавая в нее содержимое колонки ЗначенияПолей.АдресныйКлассификатор.КодРегионаПоНаименованию(), предварительно очистив строку от лишних символов.Применяя данные методы, вы обеспечите стабильную работу вашей обработки или отчета даже при обновлении конфигурации или изменении структуры адресного классификатора со стороны 1С. Для быстрого поиска других процедур и функций конфигурации подойдёт справочник методов Бухгалтерии предприятия 3.0.