В современных конфигурациях 1С, таких как Управление торговлей 11 (УТ 11), работа с персональными данными физических лиц значительно унифицирована благодаря использованию Библиотеки стандартных подсистем (БСП). Однако для начинающего разработчика структура хранения этих данных может показаться сложной. В этой статье мы разберем по шагам, как вытащить данные о прописке, месте проживания, гражданстве и паспорте физического лица, используя как прямые запросы к базе данных, так и встроенные механизмы БСП.
Первым делом рассмотрим, где именно в базе хранятся адреса. В отличие от старых версий конфигураций, в УТ 11 адреса не являются простыми реквизитами справочника. Они хранятся в специальной табличной части. Проанализируем структуру справочника ФизическиеЛица.
Все контактные данные (телефоны, email, адреса) находятся в табличной части КонтактнаяИнформация. Для того чтобы получить данные адреса регистрации или проживания, нам нужно выполнить запрос к этой таблице, обязательно накладывая фильтр по типу и виду информации.
Пример запроса для получения адреса регистрации:
ВЫБРАТЬ
ФизЛицаКонтактнаяИнформация.Ссылка КАК ФизЛицо,
ФизЛицаКонтактнаяИнформация.Представление КАК АдресРегистрации,
ФизЛицаКонтактнаяИнформация.ЗначенияПолей КАК СтруктурированныйАдрес
ИЗ
Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизЛицаКонтактнаяИнформация
ГДЕ
ФизЛицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
И ФизЛицаКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресРегистрацииФизЛица)
И ФизЛицаКонтактнаяИнформация.Ссылка = &ФизическоеЛицо
Разберем важные детали этого запроса:
Представление содержит готовую строку адреса, которую удобно выводить в отчеты или печатные формы.ЗначенияПолей содержит внутреннюю структуру адреса (обычно в формате XML или JSON). Если вам нужно вытащить отдельно город или улицу средствами запроса, это будет затруднительно, так как данные там упакованы.Справочник.ВидыКонтактнойИнформации.АдресПроживанияФизЛица.Если ваша задача позволяет использовать встроенный язык 1С, а не только чистый запрос, крайне рекомендуется использовать функции БСП. Это избавляет от необходимости помнить названия таблиц и гарантирует правильную работу при обновлении конфигурации. Проанализируем метод КонтактнаяИнформацияОбъекта.
Для получения структуры всех адресов объекта можно использовать общий модуль УправлениеКонтактнойИнформацией. Посмотрим на пример кода:
// Получаем все адреса физлица в виде таблицы значений
ПараметрыДанных = УправлениеКонтактнойИнформацией.ДанныеОбъекта(СсылкаНаФизЛицо);
// Или используем специализированную функцию
ТаблицаАдресов = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(СсылкаНаФизЛицо);
Для Каждого СтрокаАдреса Из ТаблицаАдресов Цикл
Если СтрокаАдреса.Вид = Справочники.ВидыКонтактнойИнформации.АдресРегистрацииФизЛица Тогда
Сообщить("Адрес регистрации: " + СтрокаАдреса.Представление);
КонецЕсли;
КонецЦикла;
Выясним причину, почему это лучше: БСП автоматически обрабатывает актуальность данных, права доступа и корректно парсит внутренние форматы хранения ЗначенияПолей. Для быстрого поиска готовых программных функций и примеров кода можно использовать справочник по методам БСП.
Данные о гражданстве в УТ 11 вынесены в отдельный регистр сведений, так как гражданство может меняться со временем. Рассмотрим работу с регистром ГражданствоФизЛиц.
Так как это периодический регистр, нам всегда нужно обращаться к виртуальной таблице СрезПоследних, чтобы получить актуальную информацию на нужную дату. Посмотрим на пример запроса:
ВЫБРАТЬ
ГражданствоФизЛицСрезПоследних.Страна КАК СтранаСсылка,
ГражданствоФизЛицСрезПоследних.Страна.Наименование КАК СтранаНаименование,
ГражданствоФизЛицСрезПоследних.Страна.КодАльфа2 КАК КодСтраны
ИЗ
РегистрСведений.ГражданствоФизЛиц.СрезПоследних(&Период, ФизЛицо = &ФизЛицо) КАК ГражданствоФизЛицСрезПоследних
Обратите внимание, что поле Страна является ссылкой на справочник СтраныМира. Оттуда мы можем получить общепринятые коды стран (ISO) или полное наименование.
Аналогично гражданству, паспортные данные хранятся в периодическом регистре сведений ДокументыФизическихЛиц. Выясним, как правильно вытянуть серию и номер документа.
Важно помнить, что у одного физического лица может быть несколько документов (паспорт РФ, загранпаспорт, водительское удостоверение). Поэтому в запросе обязательно нужно указывать фильтр по ВидДокумента.
ВЫБРАТЬ
Документы.Серия,
Документы.Номер,
Документы.ДатаВыдачи,
Документы.КемВыдан
ИЗ
РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(&Период,
ФизЛицо = &ФизЛицо
И ВидДокумента = ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ)) КАК Документы
Если вам нужно получить сразу всё: и ФИО, и паспорт, и адрес, и ИНН — в БСП существует "супер-функция", которая делает это максимально эффективно. Рассмотрим работу с программным интерфейсом ОписанияФизическихЛиц.
Функция ДанныеФизическихЛиц позволяет передать массив ссылок на физлиц и список нужных полей, а на выходе получить готовую таблицу со всеми данными. Это значительно быстрее, чем писать пять разных запросов и соединять их.
// Подготовим список нужных полей
СписокПолей = "ФИО, ДатаРождения, ИНН, Пол, СтранаГражданства, ДокументСерия, ДокументНомер, АдресРегистрации, АдресПроживания";
// Вызываем функцию БСП
ТаблицаДанных = ОписанияФизическихЛиц.ДанныеФизическихЛиц(МассивФизЛиц, ТекущаяДата(), СписокПолей);
Для Каждого Данные Из ТаблицаДанных Цикл
// Обращаемся к структуре данных
ТекАдрес = Данные.АдресРегистрации;
ТекПаспорт = "Серия: " + Данные.ДокументСерия + " № " + Данные.ДокументНомер;
КонецЦикла;
Проанализируем ситуацию с безопасностью. В конфигурациях на базе БСП (включая УТ 11) персональные данные защищены на уровне прав доступа (RLS). Если ваш программный код или запрос выполняется под пользователем с ограниченными правами, он может получить пустые значения адресов или паспортов, даже если данные в базе есть. Для быстрой проверки назначенных прав и профилей подойдёт внешний отчет для анализа ролей пользователей БСП.
Рекомендации:
УстановитьПривилегированныйРежим(Истина)) перед выполнением запроса.Мы подробно разобрали все основные способы получения адресной и личной информации в УТ 11. Использование стандартных функций БСП является наиболее надежным и современным методом, в то время как прямые запросы к табличным частям и регистрам дают гибкость при построении сложных отчетов.