При разработке и сопровождении конфигураций на базе 1С:Предприятие 8 часто возникает необходимость расширить стандартный набор данных объекта без изменения структуры самой конфигурации. Для этого в Библиотеке стандартных подсистем (БСП) предусмотрен механизм дополнительных реквизитов и сведений. В этой статье мы подробно разберем, как устроена система хранения дополнительных сведений для справочника ФизическиеЛица, как они заполняются и как программно проверить наличие определенного значения в базе данных.
Прежде чем переходить к коду, важно четко разграничить два понятия, которые часто путают. Несмотря на то что они настраиваются в одном разделе, технически это разные механизмы:
В нашем случае мы рассматриваем именно дополнительные сведения для физических лиц.
Проанализируем структуру метаданных, отвечающих за этот функционал. Информация о дополнительных сведениях распределена между двумя ключевыми объектами:
ДополнительныеРеквизитыИСведения: здесь хранятся определения самих свойств (их названия, типы данных, настройки видимости).ДополнительныеСведения: это основное хранилище значений. Именно здесь устанавливается связь между конкретным физическим лицом, свойством и его значением.Рассмотрим процесс подготовки системы к работе со сведениями. Прежде чем пользователь сможет заполнить информацию в режиме «Предприятие», программист или администратор должен выполнить следующие действия:
ФизическиеЛица.Строка, Число или ссылка на другой справочник).После этого у всех физических лиц в меню Еще появится пункт для заполнения этого нового поля.
Выясним, как в конфигураторе можно проверить, какое значение установлено у конкретного физического лица по определенному сведению. Самый эффективный способ — использование языка запросов. Разберем пример запроса, который позволяет получить данные по конкретному объекту и свойству:
ВЫБРАТЬ
ДополнительныеСведения.Значение КАК Значение
ИЗ
РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
ГДЕ
ДополнительныеСведения.Объект = &ФизическоеЛицо
И ДополнительныеСведения.Свойство = &Свойство
В данном запросе параметр &ФизическоеЛицо — это ссылка на элемент справочника ФизическиеЛица, а параметр &Свойство — это ссылка на элемент плана видов характеристик ДополнительныеРеквизитыИСведения. Если запрос не возвращает строк, значит, значение для этого лица не задано.
В современных конфигурациях (ЗУП 3.1, ERP, БП 3.0) крайне рекомендуется использовать методы встроенной подсистемы «Управление свойствами» вместо прямых запросов к регистру. Это гарантирует корректную работу кода даже при обновлении платформы или изменении логики хранения данных в БСП.
Рассмотрим, как получить значение свойства одной строкой кода:
// Получаем значение дополнительного сведения
ЗначениеСвойства = УправлениеСвойствами.ЗначениеСвойства(ОбъектСсылка, СвойствоСсылка);
Если ЗначениеЗаполнено(ЗначениеСвойства) Тогда
// Обработка полученного значения
КонецЕсли;
Здесь ОбъектСсылка — это наше физическое лицо, а СвойствоСсылка — конкретный элемент ПВХ. Функция сама обратится к нужным таблицам и вернет результат в типизированном виде.
Проанализируем ситуацию, когда нам нужно проверить наличие сведений сразу у списка лиц. В этом случае лучше использовать запрос к виртуальной таблице среза последних (если бы это был периодический регистр) или к основной таблице, используя условие В (&СписокФизЛиц).
Важный нюанс: если записи в регистре ДополнительныеСведения для объекта нет, это означает, что сведение никогда не заполнялось или было очищено. При проверке «есть ли оно вообще» достаточно убедиться в существовании записи в регистре по ключу Объект + Свойство.
Дополнительные сведения очень удобно использовать в аналитике. Поскольку они хранятся в отдельном регистре, система компоновки данных (СКД) позволяет легко «подтянуть» их в любой отчет. В настройках отчета (например, в «Универсальном отчете») пользователь может самостоятельно добавить поле дополнительного сведения в группировку или отбор, просто развернув дерево полей объекта Физическое лицо. Программа автоматически выполнит левое соединение с регистром ДополнительныеСведения, что избавляет программиста от необходимости доработки схемы компоновки.
Подводя итог, можно сказать, что работа с дополнительными сведениями — это гибкий и мощный инструмент. Для правильной работы в конфигураторе следуйте этим правилам:
УправлениеСвойствами.Таким образом, мы разобрали не только структуру хранения дополнительных сведений физических лиц, но и научились эффективно извлекать эти данные программным путем, используя как прямые запросы, так и стандартные механизмы 1С.