При разработке новых ролей в сложных конфигурациях, таких как Зарплата и управление персоналом 3.1, разработчики часто сталкиваются с парадоксальной ситуацией: права на справочник Сотрудники добавлены в полном объеме, RLS (разграничение прав на уровне записей) вроде бы настроен или вовсе отключен, но при открытии формы выбора или списка пользователь видит пустую таблицу. При этом под полными правами всё работает корректно.
В данной статье мы подробно разберем, почему так происходит, проанализируем скрытые механизмы платформы "1С:Предприятие 8.3" и выясним, как решить проблему пустых списков, используя практический опыт и технические нюансы работы с метаданными.
Первым делом рассмотрим, как именно формируется список сотрудников. В типовых конфигурациях на базе БСП (Библиотеки стандартных подсистем) справочник Сотрудники является одним из самых сложных объектов. Его данные часто собираются динамически. Если вы создали собственную форму выбора и добавили туда ДинамическийСписок, важно убедиться, к какой таблице идет обращение.
Разберем ситуацию: если запрос динамического списка обращается напрямую к таблице Справочник.Сотрудники, но в консоли запросов данные видны, а в форме — нет, это первый признак проблем с правами на уровне визуализации (права "Просмотр"), а не на уровне "Чтения".
Проанализируем типичный запрос, который может использоваться в вашей форме:
ВЫБРАТЬ
Сотрудники.Ссылка КАК Ссылка,
Сотрудники.Код КАК Код,
Сотрудники.Наименование КАК Наименование,
Сотрудники.ФизическоеЛицо КАК ФизическоеЛицо,
Сотрудники.Организация КАК Организация
ИЗ
Справочник.Сотрудники КАК Сотрудники
Если при выполнении этого запроса в форме под ограниченными правами вы видите пустые строки, это означает, что платформа смогла прочитать ссылки, но не имеет прав на отображение конкретных полей.
Одной из ключевых причин, как выяснилось в ходе обсуждения, является некорректная работа редактора ролей в некоторых версиях платформы (например, в районе релиза 8.3.13.1513). Рассмотрим этот момент подробнее.
В системе "1С:Предприятие" право Чтение (Read) позволяет получать данные программно (запросом в коде), а право Просмотр (View) отвечает за интерактивное отображение данных пользователю. Выясним, почему "автоматическая" настройка прав может подвести:
Чтение на справочник, но нет права Просмотр на реквизиты Наименование, Код или ФизическоеЛицо, то в динамическом списке пользователь не увидит этих данных.Чтобы исправить это, необходимо зайти в конфигуратор, открыть вашу роль, перейти на закладку "Реквизиты" справочника Сотрудники и вручную проверить наличие галочки в колонке "Просмотр" для каждого поля.
В ЗУП 3.1 справочник Сотрудники тесно связан со справочником Физические лица. Посмотрим на ситуацию глубже: если у пользователя нет прав на чтение справочника ФизическиеЛица, то при попытке отобразить список сотрудников платформа может столкнуться с ограничением RLS. Поскольку поле ФизическоеЛицо является ключевым для идентификации сотрудника, отсутствие доступа к нему может привести к тому, что система "схлопнет" выборку до нуля записей, защищая конфиденциальные данные.
Проверьте, даны ли права (хотя бы на чтение и просмотр) на следующие объекты:
Справочник.ФизическиеЛицаСправочник.ОрганизацииСправочник.ПодразделенияОрганизацийИногда разработчик создает свою "легкую" форму выбора, назначает ее основной или просто пытается открыть программно, но система упорно открывает типовую форму. Разберем, как это реализовано в ЗУП 3.1.
В модуле менеджера справочника Сотрудники (и многих других) существует предопределенная процедура ОбработкаПолученияФормы. Этот обработчик позволяет системе динамически определять, какую форму показать пользователю в зависимости от его прав, настроек или параметров вызова.
Пример того, как система может переопределять вашу форму:
Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
Если ВидФормы = "ФормаСписка" Или ВидФормы = "ФормаВыбора" Тогда
// Система проверяет условия и принудительно подставляет типовую форму
ВыбраннаяФорма = "Справочник.Сотрудники.ФормаСпискаТиповая";
СтандартнаяОбработка = Ложь;
КонецЕсли;
КонецПроцедуры
Если вы хотите, чтобы открывалась именно ваша форма, вам придется либо вмешаться в этот механизм (через расширение), либо убедиться, что ваша роль позволяет обходить эти условия. В контексте рассматриваемой проблемы, автор обнаружил, что даже после отключения стандартной обработки в этом методе, форма открывалась, но оставалась пустой — что опять же возвращает нас к вопросу пореквизитных прав Просмотр.
Если вы столкнулись с пустым списком сотрудников под новой ролью, выполните следующие шаги:
Сотрудники, перейдите в список реквизитов и убедитесь, что право "Просмотр" установлено для каждого поля. Не полагайтесь на кнопку "Установить все".Чтение и Просмотр для справочников ФизическиеЛица и Организации.ЧтениеДанныхСотрудниковБезОграничений (если такая есть в вашей версии БСП) или проверьте, нет ли действующих ограничений в профиле групп доступа в режиме "1С:Предприятие".Основная таблица: Справочник.Сотрудники. Это позволяет платформе правильно применять права доступа.ВЫБРАТЬ * ИЗ Справочник.Сотрудники возвращает данные, а форма — нет, проблема 100% в праве "Просмотр" на уровне метаданных роли.Таким образом, мы выяснили, что "магия" пустых списков в 1С чаще всего кроется не в программных ошибках кода, а в тонких настройках прав доступа к реквизитам и особенностях работы редактора ролей платформы. Будьте внимательны при создании минимальных ролей и всегда проверяйте права на уровне конкретных полей объектов.