Как исправить ошибку «У пользователя недостаточно прав на исполнение операции над базой данных» у кадровика в 1С:ЗУП?

Программист 1С v8.3 (Управляемые формы) 1С:Зарплата и Управление Персоналом
← На главную

При обновлении конфигурации 1С:Зарплата и управление персоналом до определенных версий (особенно это коснулось ветки 3.1.18.х, например 3.1.18.46) пользователи часто сталкиваются с неприятной ситуацией. Кадровик, который ранее работал без проблем, начинает получать критическую ошибку при попытке открыть журнал документов «Больничные листы», список сотрудников или кадровые журналы. Текст ошибки указывает на проблему в модуле менеджера справочника ЗарплатныеПроекты.

В этой статье мы подробно разберем, почему возникает эта ошибка, как она связана с механизмом RLS (Row Level Security) и какие шаги необходимо предпринять для её устранения. Проанализируем ситуацию совместно и найдем оптимальное решение.

Разбор технической причины ошибки

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

БанкиЗарплатныхПроектов = Запрос.Выполнить().Выгрузить();

Выясним причину такого поведения системы. Когда в программе включено ограничение доступа на уровне записей (RLS), платформа 1С автоматически модифицирует все запросы к базе данных, добавляя в них условия фильтрации (например, по Организации). Если в тексте запроса программистом не указано ключевое слово РАЗРЕШЕННЫЕ, а в базе данных присутствуют записи, на которые у текущего пользователя нет прав (например, зарплатный проект другой организации), система генерирует исключение «Недостаточно прав».

В рассматриваемой версии ЗУП разработчики допустили программную ошибку: в модуле менеджера справочника ЗарплатныеПроекты запрос выполняется ко всем записям без учета прав доступа. Как только мы настраиваем в профиле «Кадровик» ограничение «по организациям» (разрешаем одну и запрещаем другую), запрос пытается прочитать «чужой» зарплатный проект и падает.

Рассмотрим, как выглядит проблемный участок кода в модуле менеджера справочника ЗарплатныеПроекты:


ТекстЗапроса = 
"ВЫБРАТЬ
|	ЗарплатныеПроекты.Банк КАК Банк
|ИЗ
|	Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты
|ГДЕ
|	ЗарплатныеПроекты.ИспользоватьЭлектронныйДокументооборотСБанком = &ИспользоватьЭлектронныйДокументооборот";

Запрос = Новый Запрос(ТекстЗапроса);
Запрос.УстановитьПараметр("ИспользоватьЭлектронныйДокументооборот", ИспользоватьЭлектронныйДокументооборот);
Результат = Запрос.Выполнить(); // Именно здесь происходит прерывание, если нет слова РАЗРЕШЕННЫЕ

Почему ошибка проявляется в «Больничных листах»?

Может возникнуть логичный вопрос: почему ошибка «вылетает» при открытии формы списка больничных листов или сотрудников, хотя проблема в справочнике зарплатных проектов? Разберем эту связь. При создании формы любого объекта в 1С:ЗУП срабатывает механизм подключаемых команд. Система анализирует, какие кнопки нужно вывести на панель инструментов (например, кнопки печати или обмена с банками).

Для этого вызывается общий модуль ОбменСБанкамиПоЗарплатнымПроектам, который, в свою очередь, обращается к методам справочника ЗарплатныеПроекты, чтобы узнать, настроен ли в базе хотя бы один проект с электронным обменом. Поскольку этот вызов происходит «под капотом» при открытии формы, пользователь видит ошибку прав доступа еще до того, как список документов отобразится на экране.

Решение №1: Установка официальных патчей (рекомендуемый способ)

Поскольку проблема признана разработчиками 1С как «баг» типовой конфигурации, самым правильным и быстрым решением будет установка исправлений (патчей). Фирма 1С выпустила несколько патчей для устранения этой коллизии в ветке 3.1.18.

Выполним следующие шаги для исправления:

  1. Перейдем в раздел Администрирование — Обслуживание.
  2. Раскроем подраздел Обновление программы.
  3. Нажмем на ссылку Установленные исправления (патчи).
  4. Если в списке нет исправлений с кодами EF_00_00384877 или EF_60000185, необходимо нажать кнопку Поиск и установка исправлений (требуется подключение к интернет-поддержке).
  5. Если автоматическая загрузка недоступна, скачаем патч EF_00_00384877 с портала ИТС вручную и загрузим его через кнопку Установить исправление из файла.

После установки патча и перезапуска сеанса пользователем, запрос в справочнике будет дополнен конструкцией РАЗРЕШЕННЫЕ, и ошибка исчезнет.

Решение №2: Настройка дополнительных прав доступа (обходной путь)

Если по каким-то причинам вы не можете установить патчи прямо сейчас (например, база сильно кастомизирована или нет доступа к интернет-поддержке), проанализируем альтернативный вариант. Нам нужно сделать так, чтобы механизм RLS «пропускал» запрос к справочнику зарплатных проектов.

Рассмотрим пошагово процесс настройки «заглушки»:

  1. Создадим новый Профиль групп доступа (например, назвав его «Доступ к зарплатным проектам (без RLS)»).
  2. В состав ролей этого профиля добавим только одну роль: Чтение зарплатных проектов.
  3. Создадим новую Группу доступа, выберем созданный профиль и добавим туда нашего пользователя (Кадровика).
  4. Важный момент: В настройках ограничений этой группы доступа (на закладке «Ограничения доступа») для вида доступа «Организации» установим значение «Все разрешены» (без исключений).

Таким образом, у пользователя появится дополнительная роль на чтение справочника, которая не ограничена правилами RLS. Платформа, объединяя права, позволит запросу выполниться без ошибки, так как у пользователя появится право видеть все зарплатные проекты, даже если он не видит документы по этим организациям.

Решение №3: Изменение программного кода (для программистов)

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


// Было:
// "ВЫБРАТЬ ЗарплатныеПроекты.Банк КАК Банк ИЗ Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты"

// Стало (добавляем РАЗРЕШЕННЫЕ):
ТекстЗапроса = 
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
|	ЗарплатныеПроекты.Банк КАК Банк
|ИЗ
|	Справочник.ЗарплатныеПроекты КАК ЗарплатныеПроекты
|ГДЕ
|	ЗарплатныеПроекты.ИспользоватьЭлектронныйДокументооборотСБанком = &ИспользоватьЭлектронныйДокументооборот";

Добавление РАЗРЕШЕННЫЕ заставляет платформу просто игнорировать записи, к которым нет доступа, вместо того чтобы прерывать работу программы. Однако помните, что внесение изменений в типовой код лишает вас возможности автоматического обновления, поэтому предпочтительнее использовать расширение конфигурации.

В расширении можно перехватить метод ИспользующиеЭлектронныйДокументооборотСБанком и подменить запрос на корректный. Это сохранит типовую конфигурацию «чистой».

Подведение итогов

Мы проанализировали ситуацию и выяснили, что корень проблемы кроется в несоответствии кода типового решения требованиям безопасности при включенном RLS. Ошибка носит массовый характер для версий ЗУП 3.1.18 и успешно лечится либо обновлением на более свежие релизы (где ошибка уже исправлена в основном коде), либо точечной установкой патчей.

Резюмируем наши действия: при возникновении ошибки прав у Кадровика первым делом проверяем настройки RLS. Если ограничения по организациям включены — смело устанавливаем патч EF_00_00384877. Это самый безопасный и эффективный способ вернуть систему в рабочее состояние.

← На главную