При работе с конфигурацией 1С:Зарплата и управление персоналом 3.1 (особенно в версии КОРП) многие разработчики и администраторы сталкиваются с необходимостью изменить состав отображаемых данных в карточке сотрудника. Часто возникает задача: разрешить просмотр личных данных (образование, семья, стаж) для физических лиц, которые еще не являются сотрудниками организации, например, для кандидатов из кадрового резерва. За управление этими элементами интерфейса отвечают специализированные регистры сведений, логику работы которых мы подробно разберем в данной статье.
Рассмотрим, для чего предназначены регистры СведенияОРежимахРаботыФормыСотрудника и СведенияОРежимахРаботыФормыСотрудникаРасширенный. Эти объекты являются частью механизма динамического управления интерфейсом. Система использует их для оптимизации скорости открытия формы сотрудника. Вместо того чтобы при каждом открытии выполнять тяжелые запросы по проверке прав доступа, функциональных опций и статуса физического лица, программа обращается к заранее рассчитанным данным в этих регистрах.
Ключевым ресурсом здесь является ИспользоватьЛичныеДанныеВФормеСотрудника. Именно он определяет, увидит ли пользователь закладки с персональной информацией. Проанализируем ситуацию: если этот ресурс установлен в значение Ложь, то даже при наличии прав доступа к физическому лицу, соответствующие разделы в форме сотрудника могут быть скрыты.
Выясним причину, по которой ручная правка этих регистров не приносит долгосрочного результата. Как отмечают эксперты, данные регистры не предназначены для непосредственного редактирования пользователем. Система автоматически перезаписывает их содержимое при наступлении определенных событий:
В версии ЗУП КОРП настройки этого регистра напрямую зависят от включения таких опций, как ИспользоватьПодборПерсонала. В версии ПРОФ данный функционал ограничен, поэтому для "не-сотрудников" расширенные данные по умолчанию скрыты.
Проанализируем программный способ решения задачи. Если нам необходимо принудительно включить отображение личных данных, мы можем воспользоваться механизмом расширений. Рассмотрим пример кода, который можно внедрить в процедуру, отвечающую за обновление настроек интерфейса, либо перехватить момент записи в регистр.
Наиболее эффективным методом будет принудительная установка ресурса в значение Истина при выполнении расчетов. Посмотрим на логику, которую можно реализовать в расширении:
&После("ЗаполнитьСведенияОРежимахРаботыФормыСотрудника")
Процедура Расш1_ЗаполнитьСведенияОРежимахРаботыФормыСотрудника(Параметры)
// Перебираем сформированные системой настройки и подменяем нужный ресурс
Для Каждого СтрокаНастроек Из Параметры.ТаблицаНастроек Цикл
СтрокаНастроек.ИспользоватьЛичныеДанныеВФормеСотрудника = Истина;
КонецЦикла;
КонецПроцедуры
Такой подход позволяет сохранить стандартную логику работы системы, но при этом гарантировать, что нужный нам флаг всегда будет активен, независимо от того, включен ли полноценный блок КОРП или нет.
Разберем другой вариант, который предложили опытные разработчики. Вместо того чтобы бороться с автоматическим заполнением регистров, мы можем повлиять непосредственно на процесс отрисовки формы сотрудника. Для этого в расширении создается обработчик события ПриСозданииНаСервере для формы элемента справочника Сотрудники.
В этом обработчике мы можем программно изменить видимость групп формы, отвечающих за личные данные. Проанализируем пример:
&После("ПриСозданииНаСервере")
Процедура Расш1_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Проверяем, является ли объект физическим лицом без трудовых отношений
Если ЭтоНовыйКандидат(Объект.ФизическоеЛицо) Тогда
// Принудительно включаем видимость страниц с личными данными
ЭтаФорма.Элементы.ГруппаПерсональныеДанные.Видимость = Истина;
ЭтаФорма.Элементы.СтраницаОбразованиеКвалификация.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
Важный момент: При использовании этого метода необходимо убедиться, что у пользователя достаточно прав доступа на уровне RLS (Record Level Security) к самому справочнику ФизическиеЛица и его подчиненным регистрам (образование, семья и т.д.), иначе форма отобразится, но данные в ней будут пустыми.
Рассмотрим ситуацию, когда стандартная форма сотрудника слишком перегружена или ее модификация кажется избыточной. В этом случае мы можем пойти по пути создания собственной упрощенной формы в расширении. Это решение особенно актуально для кадрового резерва.
Разберем шаги реализации:
ФИО, ДатаРождения, а также списки из регистров сведений (образование, стаж).Этот путь считается наиболее "чистым" с точки зрения поддержки конфигурации, так как мы не вмешиваемся в работу сложных механизмов СведенияОРежимахРаботыФормыСотрудника, которые могут измениться в будущих обновлениях от фирмы 1С.
Мы выяснили, что регистры режимов работы формы сотрудника — это системный инструмент для кэширования настроек интерфейса. Для решения бизнес-задач по отображению данных вне рамок стандартной логики ЗУП ПРОФ/КОРП, следует использовать расширения. Выбор метода зависит от ваших компетенций: либо мы "обманываем" систему, подменяя данные в служебном регистре, либо напрямую управляем элементами формы, обеспечивая пользователям удобный доступ к информации о потенциальных сотрудниках.