При работе в типовых конфигурациях, таких как 1С:Бухгалтерия предприятия 3.0, построенных на базе Библиотеки стандартных подсистем (БСП), программисты и администраторы часто сталкиваются с ошибкой ограничения доступа. Текст ошибки обычно выглядит так: Требуется обновить шаблон на актуальную версию, поставляемую в роли ИзменениеУчастниковГруппДоступа по причине: Используется устаревшая версия 17 шаблона ограничения доступа ПоЗначениям. Рассмотрим подробно, почему возникает эта ситуация и как её эффективно устранить.
Проанализируем архитектуру механизма RLS (Record Level Security). В современных версиях БСП логика ограничения доступа на уровне записей постоянно совершенствуется. Шаблоны ограничений, такие как ПоЗначениям, ПоЗначениямРасширенный или ПоОбъектам, имеют свои версии. Когда происходит обновление конфигурации, ядро БСП ожидает, что во всех ролях текст этих шаблонов будет соответствовать актуальному эталону.
Выясним причину конфликта: версия 17 шаблона ПоЗначениям считается устаревшей в современных релизах (начиная с БСП 3.1.5 и выше). В новых версиях (18, 19 и далее) оптимизирована производительность запросов и изменены алгоритмы обработки пустых ссылок. Если система обнаруживает в метаданных текст старого шаблона, парсер RLS выдает синтаксическую ошибку, так как конструкция старого шаблона более не поддерживается ядром системы.
Как показывает практика, в большинстве случаев проблема кроется не в основной конфигурации, а в подключенных расширениях. Если в расширение была заимствована роль или объект с установленным RLS из старой версии базы, то при обновлении основной конфигурации текст шаблона в расширении автоматически не меняется. Система «видит» конфликт версий между основной базой и расширением.
Разберем порядок действий для исправления:
Если обновление расширений не помогло или роли были изменены непосредственно в основной конфигурации, применим метод глобального поиска. Этот способ позволяет точечно выявить проблемные места.
Проделаем следующие шаги:
ПоЗначениям17 (или номер версии, указанный в вашей ошибке).ПолныеПрава или ЧтениеБухгалтерскихОтчетов) и заменим им текст в проблемной роли. Важно убедиться, что имя шаблона и его параметры совпадают.Иногда текст шаблонов в метаданных корректен, но ошибка сохраняется из-за «зависших» данных в системных регистрах сведений, которые хранят параметры доступа. В этом случае нам поможет выполнение служебных процедур БСП.
Запустим базу в режиме «1С:Предприятие» и выполним следующий код через консоль кода или внешнюю обработку:
// Выполняем обновление вспомогательных данных системы доступа
УправлениеДоступомСлужебный.ОбновитьВспомогательныеДанныеПоИзменениямКонфигурации();
// В некоторых случаях полезно также запустить полное обновление прав
УправлениеДоступом.ОбновитьПараметрыОграниченияДоступа();
После выполнения этого кода рекомендуется дождаться завершения регламентного задания Обновление прав доступа в разделе «Обслуживание» — «Управление доступом». Для точечного обновления прав без ожидания завершения общего задания пригодится обработка для точечного пересчета прав доступа пользователей.
Для массового исправления подобных ошибок в составе официальных инструментов разработчика БСП существует специальная обработка. Рассмотрим её применение:
Найдем в дистрибутиве БСП обработку АвтоматическоеОбновлениеШаблоновОграниченияДоступа.epf. Она предназначена для автоматического сканирования всех ролей конфигурации и расширений. Программа сравнивает тексты шаблонов с эталонными и предлагает обновить их одним нажатием кнопки. Это самый безопасный и быстрый способ, если у вас много кастомных ролей.
Если ошибка возникает в абсолютно типовой конфигурации, где все роли находятся на поддержке («на замке»), это явный признак того, что при последнем обновлении через сравнение-объединение не были применены изменения в текстах шаблонов ограничений.
Посмотрим, как это исправить:
.cf текущего актуального релиза.Если после всех манипуляций ошибка Синтаксическая ошибка ":" сохраняется, проанализируем состояние кэша конфигурации. Выполним следующие действия:
/ClearCache.Важный момент: всегда проверяйте наличие записей в регистре сведений ПараметрыОграниченияДоступа. Если регистр пуст или содержит неактуальные записи, система будет выдавать ошибки RLS даже при корректных шаблонах в конфигураторе.