Как получить данные адресов, паспортов и гражданства физических лиц в УТ 11 запросом и программно

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

В современных конфигурациях 1С, таких как Управление торговлей 11 (УТ 11), работа с персональными данными физических лиц значительно унифицирована благодаря использованию Библиотеки стандартных подсистем (БСП). Однако для начинающего разработчика структура хранения этих данных может показаться сложной. В этой статье мы разберем по шагам, как вытащить данные о прописке, месте проживания, гражданстве и паспорте физического лица, используя как прямые запросы к базе данных, так и встроенные механизмы БСП.

Способ 1. Получение адресов через запрос к табличной части

Первым делом рассмотрим, где именно в базе хранятся адреса. В отличие от старых версий конфигураций, в УТ 11 адреса не являются простыми реквизитами справочника. Они хранятся в специальной табличной части. Проанализируем структуру справочника ФизическиеЛица.

Все контактные данные (телефоны, email, адреса) находятся в табличной части КонтактнаяИнформация. Для того чтобы получить данные адреса регистрации или проживания, нам нужно выполнить запрос к этой таблице, обязательно накладывая фильтр по типу и виду информации.

Пример запроса для получения адреса регистрации:


ВЫБРАТЬ
    ФизЛицаКонтактнаяИнформация.Ссылка КАК ФизЛицо,
    ФизЛицаКонтактнаяИнформация.Представление КАК АдресРегистрации,
    ФизЛицаКонтактнаяИнформация.ЗначенияПолей КАК СтруктурированныйАдрес
ИЗ
    Справочник.ФизическиеЛица.КонтактнаяИнформация КАК ФизЛицаКонтактнаяИнформация
ГДЕ
    ФизЛицаКонтактнаяИнформация.Тип = ЗНАЧЕНИЕ(Перечисление.ТипыКонтактнойИнформации.Адрес)
    И ФизЛицаКонтактнаяИнформация.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.АдресРегистрацииФизЛица)
    И ФизЛицаКонтактнаяИнформация.Ссылка = &ФизическоеЛицо

Разберем важные детали этого запроса:

  1. Поле Представление содержит готовую строку адреса, которую удобно выводить в отчеты или печатные формы.
  2. Поле ЗначенияПолей содержит внутреннюю структуру адреса (обычно в формате XML или JSON). Если вам нужно вытащить отдельно город или улицу средствами запроса, это будет затруднительно, так как данные там упакованы.
  3. Для получения адреса проживания достаточно заменить в условии вид на Справочник.ВидыКонтактнойИнформации.АдресПроживанияФизЛица.

Способ 2. Использование программных функций БСП (Рекомендуемый метод)

Если ваша задача позволяет использовать встроенный язык 1С, а не только чистый запрос, крайне рекомендуется использовать функции БСП. Это избавляет от необходимости помнить названия таблиц и гарантирует правильную работу при обновлении конфигурации. Проанализируем метод КонтактнаяИнформацияОбъекта.

Для получения структуры всех адресов объекта можно использовать общий модуль УправлениеКонтактнойИнформацией. Посмотрим на пример кода:


// Получаем все адреса физлица в виде таблицы значений
ПараметрыДанных = УправлениеКонтактнойИнформацией.ДанныеОбъекта(СсылкаНаФизЛицо);
// Или используем специализированную функцию
ТаблицаАдресов = УправлениеКонтактнойИнформацией.КонтактнаяИнформацияОбъекта(СсылкаНаФизЛицо);

Для Каждого СтрокаАдреса Из ТаблицаАдресов Цикл
    Если СтрокаАдреса.Вид = Справочники.ВидыКонтактнойИнформации.АдресРегистрацииФизЛица Тогда
        Сообщить("Адрес регистрации: " + СтрокаАдреса.Представление);
    КонецЕсли;
КонецЦикла;

Выясним причину, почему это лучше: БСП автоматически обрабатывает актуальность данных, права доступа и корректно парсит внутренние форматы хранения ЗначенияПолей. Для быстрого поиска готовых программных функций и примеров кода можно использовать справочник по методам БСП.

Способ 3. Получение данных о гражданстве

Данные о гражданстве в УТ 11 вынесены в отдельный регистр сведений, так как гражданство может меняться со временем. Рассмотрим работу с регистром ГражданствоФизЛиц.

Так как это периодический регистр, нам всегда нужно обращаться к виртуальной таблице СрезПоследних, чтобы получить актуальную информацию на нужную дату. Посмотрим на пример запроса:


ВЫБРАТЬ
    ГражданствоФизЛицСрезПоследних.Страна КАК СтранаСсылка,
    ГражданствоФизЛицСрезПоследних.Страна.Наименование КАК СтранаНаименование,
    ГражданствоФизЛицСрезПоследних.Страна.КодАльфа2 КАК КодСтраны
ИЗ
    РегистрСведений.ГражданствоФизЛиц.СрезПоследних(&Период, ФизЛицо = &ФизЛицо) КАК ГражданствоФизЛицСрезПоследних

Обратите внимание, что поле Страна является ссылкой на справочник СтраныМира. Оттуда мы можем получить общепринятые коды стран (ISO) или полное наименование.

Способ 4. Паспортные данные (Удостоверения личности)

Аналогично гражданству, паспортные данные хранятся в периодическом регистре сведений ДокументыФизическихЛиц. Выясним, как правильно вытянуть серию и номер документа.

Важно помнить, что у одного физического лица может быть несколько документов (паспорт РФ, загранпаспорт, водительское удостоверение). Поэтому в запросе обязательно нужно указывать фильтр по ВидДокумента.


ВЫБРАТЬ
    Документы.Серия,
    Документы.Номер,
    Документы.ДатаВыдачи,
    Документы.КемВыдан
ИЗ
    РегистрСведений.ДокументыФизическихЛиц.СрезПоследних(&Период, 
        ФизЛицо = &ФизЛицо 
        И ВидДокумента = ЗНАЧЕНИЕ(Справочник.ВидыДокументовФизическихЛиц.ПаспортРФ)) КАК Документы

Комплексный метод получения всех данных (Оптимально)

Если вам нужно получить сразу всё: и ФИО, и паспорт, и адрес, и ИНН — в БСП существует "супер-функция", которая делает это максимально эффективно. Рассмотрим работу с программным интерфейсом ОписанияФизическихЛиц.

Функция ДанныеФизическихЛиц позволяет передать массив ссылок на физлиц и список нужных полей, а на выходе получить готовую таблицу со всеми данными. Это значительно быстрее, чем писать пять разных запросов и соединять их.


// Подготовим список нужных полей
СписокПолей = "ФИО, ДатаРождения, ИНН, Пол, СтранаГражданства, ДокументСерия, ДокументНомер, АдресРегистрации, АдресПроживания";

// Вызываем функцию БСП
ТаблицаДанных = ОписанияФизическихЛиц.ДанныеФизическихЛиц(МассивФизЛиц, ТекущаяДата(), СписокПолей);

Для Каждого Данные Из ТаблицаДанных Цикл
    // Обращаемся к структуре данных
    ТекАдрес = Данные.АдресРегистрации;
    ТекПаспорт = "Серия: " + Данные.ДокументСерия + " № " + Данные.ДокументНомер;
КонецЦикла;

Важные замечания по правам доступа

Проанализируем ситуацию с безопасностью. В конфигурациях на базе БСП (включая УТ 11) персональные данные защищены на уровне прав доступа (RLS). Если ваш программный код или запрос выполняется под пользователем с ограниченными правами, он может получить пустые значения адресов или паспортов, даже если данные в базе есть. Для быстрой проверки назначенных прав и профилей подойдёт внешний отчет для анализа ролей пользователей БСП.

Рекомендации:

  1. Если данные нужны для регламентированной печати, используйте установку привилегированного режима (УстановитьПривилегированныйРежим(Истина)) перед выполнением запроса.
  2. Проверьте, включена ли у пользователя роль "Чтение персональных данных физических лиц".
  3. При использовании функций БСП система обычно сама заботится о проверке прав, но в случае отсутствия прав функция вернет пустые значения полей.

Мы подробно разобрали все основные способы получения адресной и личной информации в УТ 11. Использование стандартных функций БСП является наиболее надежным и современным методом, в то время как прямые запросы к табличным частям и регистрам дают гибкость при построении сложных отчетов.

← На главную