После обновления конфигурации 1С, например, «Комплексной автоматизации», пользователи с ограниченными правами могут столкнуться с ошибкой при входе или открытии объектов: «Синтаксическая ошибка. Требуется обновить шаблон на актуальную версию, поставляемую в роли... Используется устаревшая версия X шаблона ограничения доступа...». При этом под правами администратора система работает корректно. Давайте подробно разберем, почему возникает эта проблема и как ее исправить.
Основная причина кроется в механизме ограничения прав доступа на уровне записей (RLS). Разработчики 1С периодически обновляют и оптимизируют шаблоны, по которым рассчитываются права. Эти эталонные шаблоны хранятся в типовых ролях, чаще всего в роли ИзменениеУчастниковГруппДоступа. Если в вашей конфигурации есть самописные или скопированные из типовых роли, которые тоже используют RLS, их шаблоны при обновлении автоматически не меняются. В результате возникает конфликт версий, который и приводит к ошибке.
Проанализируем несколько проверенных способов решения этой задачи.
Иногда проблема может заключаться в ошибке конкретного релиза конфигурации. Разработчики могли допустить неточность, которую исправили в следующем обновлении. Именно это и помогло автору исходного вопроса.
Это наиболее частый и надежный способ, который устраняет первопричину проблемы. Задача состоит в том, чтобы найти все роли с устаревшими шаблонами RLS и обновить их текст вручную, взяв за образец актуальный шаблон из типовой роли.
Разберем процесс по шагам:
Используется устаревшая версия 8 шаблона ограничения доступа для Регистра или Используется устаревшая версия 17 шаблона ПоЗначениям. Нам важны название шаблона (ДляРегистра, ПоЗначениям) и его устаревший номер версии (8, 17).
ДляРегистра8ПоЗначениям17ИзменениеУчастниковГруппДоступа.Справочник.НоменклатураКонтрагента, как в исходном вопросе).Важный совет: Рекомендуемой практикой является не изменение типовых ролей, а создание новых для внесения доработок. Если вы копировали типовую роль для кастомизации, именно в этой копии и нужно обновлять шаблоны. Это позволяет избежать проблем при последующих обновлениях.
Иногда проблема может быть в том, что пользователю назначена какая-то старая, давно забытая роль, которая содержит устаревшие шаблоны RLS. Даже если эта роль кажется неактивной, система все равно пытается скомпилировать ее шаблоны при входе пользователя, что и вызывает ошибку.
Проверьте полный список ролей, назначенных пользователю, у которого возникает ошибка. Возможно, среди них найдется устаревшая, самописная или тестовая роль, которую можно безболезненно удалить. Удалив такую роль у пользователя, вы можете сразу решить проблему.
В качестве временного решения, если нет времени на поиск и исправление всех ролей, можно программно заставить систему считать устаревшие шаблоны актуальными. Этот способ не решает проблему, а лишь маскирует ее, и его не рекомендуется использовать на постоянной основе.
Необходимо найти в конфигурации общий модуль, отвечающий за настройку RLS (например, УправлениеДоступомСлужебный). В нем есть процедура, где программно устанавливаются актуальные версии шаблонов. Можно временно изменить код, указав в нем предыдущие номера версий, чтобы система не выдавала ошибку. Однако при следующем обновлении вам, скорее всего, придется повторить эту операцию или все же исправить роли, как описано во втором решении.