Как исправить ошибку «Устарел шаблон у Роли» в 1С?

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

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

В этой статье мы подробно разберем, почему возникает данная неполадка, как она связана с механизмами безопасности БСП и какие шаги необходимо предпринять для ее окончательного и корректного устранения.

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

Данная проблема напрямую связана с функционированием подсистемы УправлениеДоступом в БСП и использованием механизма ограничения доступа на уровне записей (RLS). В современных версиях БСП реализовано два режима работы ограничений прав:

  1. Стандартный режим — наложение условий на чтение и изменение данных происходит динамически, непосредственно в момент выполнения СУБД-запроса. Этот режим более гибок и менее требователен к жесткой структуре метаданных ролей, но создает повышенную нагрузку на сервер при больших объемах информации.
  2. Производительный (универсальный) режим — права рассчитываются системой предварительно (в фоновом режиме) и записываются в виде специальных ключей доступа в служебные регистры сведений. Этот режим обеспечивает высокое быстродействие системы, но требует строгого соответствия шаблонов ограничений в ролях стандартам БСП.

Проанализируем классическую ситуацию: разработчик добавляет новый тип данных (например, ссылку на ПланОбмена или новый документ) в один из ключевых определяемых типов БСП — ВладелецЗначенийКлючейДоступа или ЗначениеДоступа. Как только новый объект метаданных попадает в этот контур, БСП автоматически включает его в расчет универсального RLS.

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

Под полными правами ошибка отсутствует по простой причине: для администраторов платформенные ограничения RLS не применяются, и БСП не выполняет валидацию шаблонов ролей.

---

Способ 1. Временный обход проблемы (Переключение режима работы RLS)

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

  1. Перейдем в режим 1С:Предприятие под учетной записью администратора.
  2. Откроем раздел Администрирование — Настройки пользователей и прав.
  3. Найдем настройки производительности ограничения доступа и переключим режим работы из положения Производительный в положение Стандартный.

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

---

Способ 2. Автоматическое исправление с помощью отчета БСП

Самый простой и надежный способ исправить шаблоны во всех ролях конфигурации — использовать специализированный инструмент, поставляемый разработчиками БСП.

В каталоге шаблонов установленной БСП (обычно это папка ExtFiles в дистрибутиве библиотеки) находится внешний отчет ПроверкаВнедренияБСП.erf. Посмотрим, как применить его для исправления ошибок:

  1. Запустим информационную базу в режиме 1С:Предприятие под полными правами.
  2. Откроем внешний отчет ПроверкаВнедренияБСП.erf через меню Файл — Открыть.
  3. В настройках отчета выберем проверку для подсистемы Управление доступом.
  4. Установим флаг Исправлять ошибки.
  5. Запустим выполнение проверки. Отчет проанализирует метаданные ролей, найдет устаревшие шаблоны и автоматически перезапишет их актуальным кодом, соответствующим требованиям производительного режима.

---

Способ 3. Ручное обновление шаблонов ограничений в Конфигураторе

Если автоматическое исправление по какой-то причине недоступно, выполним обновление шаблонов в ролях вручную. Выясним последовательность действий:

  1. Откроем базу в режиме Конфигуратор.
  2. Найдем роль, на которую ругается система при возникновении ошибки (именно эта роль дает обычным пользователям доступ к измененному объекту).
  3. Откроем свойства этой роли и перейдем на вкладку Шаблоны ограничений.
  4. Сравним шаблоны нашей роли с эталонными. В БСП эталонным носителем актуальных шаблонов является роль ИзменениеУчастниковГруппДоступа. Скопируем тексты шаблонов (таких как ДляОбъекта, ПоЗначениям) из нее и вставим в нашу проблемную роль.
  5. На вкладке Права выберем наш объект (например, измененный ПланОбмена) и проверим ограничения на уровне записей для прав Чтение и Изменение. Текст ограничения для производительного режима должен иметь следующий вид:

#Если &ОграничениеДоступаНаУровнеЗаписейУниверсально #Тогда
#ДляОбъекта("")
#Иначе
// Здесь может оставаться старое ограничение для стандартного режима (если применимо)
#КонецЕсли

---

Способ 4. Программная доработка модуля менеджера объекта

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

  1. Откроем модуль менеджера нашего объекта метаданных в конфигураторе.
  2. Добавим в область ДляВызоваИзДругихПодсистем экспортную процедуру ПриЗаполненииОграниченияДоступа.

// Описывает правила ограничения доступа к объекту.
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт
    
    // В простейшем случае разрешаем чтение и изменение, если значение разрешено в группах доступа
    Ограничение.Текст = "РазрешитьЧтениеИзменение ГДЕ ЗначениеРазрешено(Ссылка)";
    
КонецПроцедуры

Если требуется более сложная логика (например, ограничение видимости записей по конкретным организациям или складам), тело данной процедуры усложняется в соответствии со стандартами разработки БСП.

---

Способ 5. Регистрация объекта в переопределяемом модуле

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

  1. Найдем общий модуль УправлениеДоступомПереопределяемый.
  2. Перейдем в процедуру ПриЗаполненииСписковСОграничениемДоступа.
  3. Добавим строку инициализации нашего объекта:

Процедура ПриЗаполненииСписковСОграничениемДоступа(Списки) Экспорт
    
    // Добавляем наш план обмена в список контролируемых объектов
    Списки.Вставить(Метаданные.ПланыОбмена.ИмяВашегоПланаОбмена, Истина);
    
КонецПроцедуры

---

Завершающий шаг: Обновление параметров работы базы данных

После внесения любых изменений в конфигурацию, связанных с RLS и БСП, нам необходимо инициировать процедуру обновления вспомогательных данных в пользовательском режиме:

  1. Запустим сеанс 1С:Предприятие с параметром командной строки /C ЗапуститьОбновлениеИнформационнойБазы. Это принудительно запустит обработчики обновления БСП, которые пересчитают кэш метаданных прав доступа.
  2. Если это не помогло, воспользуемся типовой обработкой обновления ключей доступа. Для этого перейдем в раздел Администрирование — Настройки пользователей и прав — Профили групп доступа. Нажмем кнопку Еще и выберем пункт Обновить ключи доступа.

Выполнение этих шагов позволит полностью устранить ошибку «Устарел шаблон у Роли», сохранив при этом все преимущества высокопроизводительного универсального режима работы RLS.

← На главную