Как исправить ошибку «Недостаточно прав для работы с таблицей "РегистрСведений.ДатыВступленияВСилуНА"» в 1С

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

При работе в современных конфигурациях на базе платформы 1С:Предприятие 8.3, таких как ERP Управление предприятием 2, Зарплата и управление персоналом 3.1 или Комплексная автоматизация 2, пользователи часто сталкиваются с внезапным прерыванием работы. Ошибка возникает даже у тех сотрудников, чей функционал никак не связан с расчетом заработной платы — например, у кладовщиков, менеджеров по продажам или системных администраторов. Текст ошибки указывает на проблему с правами доступа к объекту РегистрСведений.ДатыВступленияВСилуНА.

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

Выясним причину возникновения ошибки

Для начала проанализируем ситуацию и поймем, что это за регистр и почему к нему обращается программа. Регистр сведений ДатыВступленияВСилуНА (Нормативных Актов) был введен разработчиками 1С для управления логикой перехода на новые законодательные нормы. В частности, в нем хранится информация о датах начала использования единого регистрационного номера СФР (Социального фонда России) и других ключевых изменениях в законодательстве.

Почему же ошибка возникает у пользователя с ролью «Кладовщик»? Казалось бы, складской учет никак не пересекается с нормативными актами СФР. Проанализируем стек вызова, представленный в тексте ошибки:

  1. При входе пользователя в систему или при обновлении рабочего стола срабатывает механизм «Текущие дела».
  2. Общий модуль ТекущиеДелаСлужебный инициирует сбор информации о задачах пользователя.
  3. В процессе сбора данных система проверяет общие настройки организации, в том числе видимость полей, связанных с регистрационными номерами.
  4. Происходит обращение к функции ЗарплатаКадрыПовтИсп.ДатаВступленияВСилуНА().
  5. Поскольку этот программный код выполняется в контексте текущего пользователя, система проверяет наличие у него прав на чтение регистра ДатыВступленияВСилуНА.

Так как в типовых профилях доступа для многих ролей (склад, продажи, закупки) права на этот «зарплатный» регистр изначально не были предусмотрены, происходит отказ в доступе (нарушение прав), и программа аварийно завершает выполнение задачи.

Способ 1. Идентификация роли в Конфигураторе

Если нам нужно быстро понять, какие роли вообще имеют доступ к этому объекту в текущей конфигурации, воспользуемся инструментами разработчика. Рассмотрим, как быстро найти нужную роль через Конфигуратор:

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

Как правило, это роли, связанные с настройкой персонифицированного учета или кадровыми данными. Однако простое добавление таких ролей кладовщику — плохая практика, так как это даст ему избыточный доступ к персональным данным сотрудников.

Способ 2. Использование расширения конфигурации (рекомендуемый метод)

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

  1. Перейдем в меню Конфигурация — Расширения конфигурации и создадим новое расширение (например, с именем ИсправлениеПравСФР).
  2. В расширение добавим объект РегистрСведений.ДатыВступленияВСилуНА (нажать правой кнопкой на объекте в основной конфигурации — «Добавить в расширение»).
  3. В расширении создадим новую Роль, назовем её ЧтениеДатВступленияВСилуНА_Точечно.
  4. В правах этой роли для нашего регистра установим только два флажка: «Чтение» и «Просмотр».
  5. Обновим конфигурацию базы данных.

После создания роли её необходимо назначить пользователям. Рассмотрим подробнее, как это сделать наиболее эффективно:

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

Способ 3. Использование патчей (исправлений) от 1С

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

  1. Зайдем в раздел Администрирование — Обслуживание — Обновление программы.
  2. Перейдем по ссылке «Установленные исправления (патчи)».
  3. Если настроена автоматическая загрузка патчей, программа может сама предложить установить исправление.

Для ошибки с регистром ДатыВступленияВСилуНА в версиях ERP 2.5.12, 2.5.17 и аналогичных ЗУП выпускались патчи с идентификаторами вида EF_60009949 или EF_00_00615467. Суть этих исправлений обычно заключается в том, что обращение к регистру в общем модуле оборачивается в привилегированный режим, как показано в примере ниже:


// Пример логики, которую вносит патч в общий модуль
УстановитьПривилегированныйРежим(Истина);
Выборка = РегистрыСведений.ДатыВступленияВСилуНА.Выбрать();
УстановитьПривилегированныйРежим(Ложь);

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

Способ 4. Программный обход в расширении (для разработчиков)

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


&Вместо("ДатаВступленияВСилуНА")
Функция Испр_ДатаВступленияВСилуНА(ИмяНА)
    
    УстановитьПривилегированныйРежим(Истина);
    Результат = ПродолжитьВызов(ИмяНА);
    УстановитьПривилегированныйРежим(Ложь);
    
    Возврат Результат;
    
КонецФункции

Этот метод считается максимально корректным, так как он не расширяет права пользователей в явном виде, а лишь позволяет служебному механизму «Текущие дела» получить необходимые технические даты для корректной отрисовки интерфейса.

Резюме и рекомендации

Подводя итоги, проанализируем, какой путь выбрать:

Важно помнить, что при следующем крупном обновлении конфигурации (например, переход на новый релиз, где эта ошибка исправлена в коде) созданные вами расширения или патчи могут стать неактуальными. Не забывайте проводить аудит установленных исправлений после каждого обновления системы.

← На главную