Что делать с ошибкой "Синтаксическая ошибка. Требуется обновить шаблон на актуальную версию" в 1С?

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

После обновления конфигурации 1С, например, «Комплексной автоматизации», пользователи с ограниченными правами могут столкнуться с ошибкой при входе или открытии объектов: «Синтаксическая ошибка. Требуется обновить шаблон на актуальную версию, поставляемую в роли... Используется устаревшая версия X шаблона ограничения доступа...». При этом под правами администратора система работает корректно. Давайте подробно разберем, почему возникает эта проблема и как ее исправить.

Основная причина кроется в механизме ограничения прав доступа на уровне записей (RLS). Разработчики 1С периодически обновляют и оптимизируют шаблоны, по которым рассчитываются права. Эти эталонные шаблоны хранятся в типовых ролях, чаще всего в роли ИзменениеУчастниковГруппДоступа. Если в вашей конфигурации есть самописные или скопированные из типовых роли, которые тоже используют RLS, их шаблоны при обновлении автоматически не меняются. В результате возникает конфликт версий, который и приводит к ошибке.

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

Решение 1: Обновление конфигурации и очистка кэша

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

  1. Обновитесь до последнего релиза. Прежде чем приступать к ручным правкам, проверьте наличие более свежих версий вашей конфигурации и установите их. Часто это самый простой и быстрый способ устранить проблему.
  2. Очистите кэш. Если обновление не помогло или пока невозможно, обязательно выполните очистку кэша для проблемной информационной базы. Иногда ошибка может быть вызвана некорректными закэшированными данными.

Решение 2: Поиск и исправление устаревших шаблонов (основной метод)

Это наиболее частый и надежный способ, который устраняет первопричину проблемы. Задача состоит в том, чтобы найти все роли с устаревшими шаблонами RLS и обновить их текст вручную, взяв за образец актуальный шаблон из типовой роли.

Разберем процесс по шагам:

  1. Анализируем текст ошибки. В сообщении об ошибке содержится ключевая информация для поиска. Например: Используется устаревшая версия 8 шаблона ограничения доступа для Регистра или Используется устаревшая версия 17 шаблона ПоЗначениям. Нам важны название шаблона (ДляРегистра, ПоЗначениям) и его устаревший номер версии (8, 17).
  2. Выполняем глобальный поиск по конфигурации. Откройте конфигуратор и запустите глобальный поиск (Ctrl+Shift+F). В строке поиска укажите имя шаблона с его устаревшим номером версии.
    • Для ошибки про "версию 8 ... ДляРегистра" ищите текст: ДляРегистра8
    • Для ошибки про "версию 17 ... ПоЗначениям" ищите текст: ПоЗначениям17
    В результатах поиска установите отбор по объектам типа «Роль». Так вы найдете все роли, которые содержат устаревший код.
  3. Копируем актуальный шаблон. Теперь нужно получить текст правильного, обновленного шаблона.
    • Откройте в конфигураторе эталонную роль. Чаще всего это ИзменениеУчастниковГруппДоступа.
    • Перейдите на вкладку «Права».
    • Найдите нужный объект метаданных, на который ругается система (например, Справочник.НоменклатураКонтрагента, как в исходном вопросе).
    • В колонке «Ограничение доступа» для права «Чтение» будет указан шаблон. Нажмите на него и скопируйте весь текст из открывшегося окна шаблона.
  4. Заменяем устаревший шаблон. Вернитесь к проблемной роли, которую вы нашли на шаге 2. Откройте в ней тот же шаблон ограничения доступа и полностью замените его содержимое текстом, скопированным из эталонной роли.
  5. Повторяем для всех найденных ролей. Проделайте операцию замены для каждой роли, которая нашлась в результатах глобального поиска. После этого обновите конфигурацию базы данных (F7).

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

Решение 3: Проверка и удаление лишних ролей у пользователя

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

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

Решение 4: Временный откат версий шаблонов (для опытных)

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

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

← На главную