Настройка ограничений доступа на уровне записей (RLS — Row-Level Security) в программных продуктах 1С часто преподносит сюрпризы администраторам и разработчикам. Особенно остро это ощущается в конфигурации 1С:Зарплата и Управление Персоналом 3.1 (ЗУП), где права сотрудников и табельщиков тесно переплетены со сложной структурой кадровых данных.
В этой статье мы подробно разберем распространенную проблему, когда после включения RLS по группам физических лиц табельщики теряют возможность создавать и даже открывать документы ТабельУчетаРабочегоВремени, получая критическую ошибку прав доступа. Мы выясним глубинную причину этого сбоя, проанализируем стек вызова ошибки и рассмотрим методы решения проблемы.
Представим стандартный сценарий: на предприятии внедряется разграничение прав. Табельщик Ivanov должен видеть и заполнять табели только по своей бригаде или подразделению. Для реализации этой задачи администратор выполняет следующие действия:
Фильтр в списках сотрудников начинает работать корректно — табельщик видит только «своих» людей. Однако при попытке открыть существующий документ Табель или создать новый система аварийно завершает работу с сообщением: «У пользователя недостаточно прав на исполнение операции над базой данных».
Давайте проанализируем запись в Журнале регистрации, которая фиксируется в момент падения системы:
{ОбщийМодуль.ОбщегоНазначения.Модуль(266)}: Выборка = Запрос.Выполнить().Выбрать();
{ОбщийМодуль.ПодписиДокументовВызовСервера.Модуль(5)}: Возврат ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ФизическоеЛицо, "Фамилия,Имя,Отчество,Инициалы");
{ОбщийМодуль.ПодписиДокументовКлиентСервер.Модуль(189)}: ИОФамилии.Добавить(ФизическиеЛицаЗарплатаКадрыКлиентСервер.ФамилияИнициалы(...))
{ОбщийМодуль.ПодписиДокументовФормы.Модуль(347)}: ПодписиДокументовКлиентСервер.УстановитьЗаголовокГруппеПодписей(Форма, ОписаниеФормыОбъекта);
{ОбщийМодуль.ПодписиДокументовФормы.Модуль(37)}: ЗаполнитьВторичныеРеквизитыФормыПодписейДокументов(Форма, ОписаниеФормыПоОрганизации);
{ОбщийМодуль.ПодписиДокументов.Модуль(163)}: ПодписиДокументовФормы.ЗаполнитьПодписиПоОрганизации(Форма, ОписаниеФормыДляПодписей, ИмяРеквизитаОрганизация);
{Документ.ТабельУчетаРабочегоВремени.Форма.ФормаДокумента.Форма(589)}: ПодписиДокументов.ЗаполнитьПодписиПоОрганизации(ЭтаФорма);
Обратите внимание на верхние строки стека вызова. Проблема кроется в вызове метода ОбщегоНазначения.ЗначенияРеквизитовОбъекта(), который пытается получить текстовое представление (ФИО и инициалы) для переменной ФизическоеЛицо.
В документе Табель встроена подсистема автозаполнения ответственных лиц (подписантов) организации. К ним относятся руководитель организации, руководитель кадровой службы, главный бухгалтер и исполнители. Все эти ответственные лица в системе также являются элементами справочника ФизическиеЛица.
Когда табельщик открывает форму документа, код инициализации пытается прочитать ФИО подписантов (например, директора предприятия), чтобы вывести их внизу формы. Однако директор предприятия не входит в ту группу доступа физических лиц, которая разрешена нашему табельщику! Шаблон RLS блокирует запрос к справочнику физических лиц для этой записи, СУБД возвращает ошибку нехватки прав, и транзакция аварийно прерывается.
Таким образом, ограничение, призванное защитить персональные данные рядовых сотрудников, непреднамеренно блокирует доступ к публичным реквизитам руководителей организации, без которых документ не может быть корректно открыт.
Рассмотрим два основных варианта решения этой проблемы в зависимости от возможности обновления вашей конфигурации.
Компания «1С» признала данное поведение ошибкой проектирования прав доступа в ранних релизах ветки 3.1.13. Проблема была полностью локализована и исправлена начиная с релиза 3.1.13.146 и во всех последующих ветках (включая 3.1.14, 3.1.17 и современные 3.1.18+ / 3.1.27+).
В новых релизах разработчики применили один из следующих подходов:
ФизическиеЛица, позволяющие считывать краткую информацию (ФИО) должностных лиц.Порядок действий для исправления:
1С:ЗУП 3.1 до актуального релиза (минимально до версии 3.1.13.146, если вы находитесь на старой ветке поддержки).ЗапускОбновленияИнформационнойБазы или дождитесь автоматического выполнения отложенных обработчиков обновления.Если по каким-то причинам вы не можете оперативно обновить конфигурацию (например, она сильно доработана), можно применить временные административные меры.
Нам необходимо явно предоставить табельщикам доступ на чтение карточек подписантов документов. Для этого выполним следующие действия:
После этого система перестанет блокировать запросы на получение ФИО подписантов, и документы будут открываться без ошибок. Единственный минус этого подхода — табельщики смогут увидеть карточки руководителей в справочнике физических лиц, но обычно эта информация не является строго секретной в рамках предприятия.
Внедряя RLS для табельщиков, необходимо помнить о нескольких важных архитектурных особенностях системы:
ЗаполнениеДанныхДляОграниченияДоступа.Табель на весь отдел, и в этот документ случайно попадет хотя бы один сотрудник, к которому у табельщика нет прав, табельщик потеряет доступ ко всему документу целиком. Рекомендуется настраивать ввод документов индивидуально или строго в разрезе групп доступа.Соблюдение этих правил и своевременное обновление платформы и конфигурации позволит вам построить стабильно работающую систему разграничения прав для кадровиков и табельщиков без регулярных сбоев.