Как исправить ошибку «Параметр ИспользоватьОграничениеПоКонтрагенты не существует» при обновлении УТ 10.3?

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

При переходе со старых редакций конфигурации «Управление торговлей», редакция 10.3 (например, с версии 10.3.47.3 на 10.3.49.4 или смежные релизы), многие технические специалисты сталкиваются с критической ошибкой на этапе первого запуска информационной базы в режиме «Предприятие». Обновление конфигурации в Конфигураторе завершается успешно, но при запуске пользовательского режима выполнение обработчиков обновления аварийно прерывается.

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


{Справочник.КлассификаторОрганизацийЕГАИС.МодульМенеджера(249)}: Ошибка при вызове метода контекста (Выполнить)
ПоставщикиЕГАИС=Запрос.Выполнить.Выбрать;
по причине:
Ошибка выполнения запроса по причине:
Ошибка в ограничении доступа к данным.
объект: 'РегистрСведений.СоответствиеОрганизацийЕГАИС', поле: 'Контрагент'; право: 'Чтение'
Синтаксическая ошибка "Параметр ИспользоватьОграничениеПоКонтрагенты не существует"

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

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

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

Синтаксический сбой во время обновления происходит из-за специфики инициализации параметров сеанса в 1С:

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

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

Способ 1. Временное ограничение ролей пользователя (Рекомендуемый метод)

Это самый простой и безопасный способ, не требующий изменения программного кода конфигурации. Суть метода заключается в том, чтобы заставить платформу полностью игнорировать любые правила RLS в процессе обновления.

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

  1. Запустите базу данных в режиме Конфигуратор.
  2. Перейдите в меню Администрирование — Пользователи.
  3. Найдите в списке свою учетную запись, под которой вы инициируете процесс обновления, и откройте её свойства.
  4. Перейдите на вкладку Прочие.
  5. В списке доступных ролей найдите и снимите флажки со всех ролей, кроме роли «Полные права» (также можно оставить роль «Администратор системного контекста» или аналогичные сервисные роли, но обязательно снимите все роли, связанные с ЕГАИС, продажами и закупками).
  6. Сохраните изменения, нажав кнопку ОК.
  7. Запустите базу в режиме 1С:Предприятие.

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

Способ 2. Запуск системы в привилегированном режиме

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

Рассмотрим, как настроить такой запуск:

  1. Откройте командную строку (cmd) или создайте ярлык для запуска платформы 1С.
  2. Пропишите команду запуска вашей информационной базы, добавив в конец специальный параметр /UsePrivilegedMode (или /ВключитьПривилегированныйРежим).

Пример командной строки для файлового варианта базы данных:


"C:\Program Files\1cv8\common\1estart.exe" ENTERPRISE /F "C:\Put_K_Baze" /N "ИмяАдминистратора" /P "Пароль" /UsePrivilegedMode

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

Способ 3. Изменение программного кода (Для разработчиков)

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

Проанализируем ситуацию: ошибка указывает на строку в объекте Справочник.КлассификаторОрганизацийЕГАИС.МодульМенеджера. Откроем этот модуль в Конфигураторе и найдем строку 249.

Мы можем временно обойти проверку прав, принудительно установив привилегированный режим непосредственно перед вызовом запроса к базе данных. Для этого используем метод УстановитьПривилегированныйРежим():


УстановитьПривилегированныйРежим(Истина);
ПоставщикиЕГАИС = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);

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

Способ 4. Временное отключение RLS через константы

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

Чтобы выполнить это действие, выполните следующие шаги:

  1. Перед началом обновления зайдите в систему под пользователем с полными правами.
  2. Перейдите через главное меню: Операции — Константы (или откройте настройки параметров учета: Сервис — Настройка учета — Настройка параметров учета).
  3. Найдите опцию «Ограничивать права доступа на уровне записей» и снимите с неё флаг.
  4. Сохраните изменения и выполните обновление конфигурации.
  5. После успешного завершения всех обработчиков обновления верните флаг в исходное положение.

Важное примечание: Если при открытии констант вы обнаружили, что данный флаг уже снят, но ошибка все равно возникает, это свидетельствует о том, что платформа компилирует правила RLS превентивно на уровне метаданных ролей. В этом случае используйте Способ 1 или Способ 2.

Особенности и сложности релизов УТ 10.3.49.х

Проанализируем контекст появления этой ошибки. Релизы линейки 10.3.49.x создавались разработчиками 1С в период активного внедрения помарочного учета ЕГАИС (ЕГАИС 3.0) и перехода на новые форматы обмена. Из-за сжатых сроков разработки данные версии конфигураций содержали ряд архитектурных недоработок:

Если перед вами стоит задача обновить конфигурацию до актуального состояния, рекомендуется не задерживаться на релизах линейки 10.3.49.x. Используйте описанные выше методы для успешного прохождения промежуточного обновления, после чего сразу же планируйте переход на более стабильные последующие релизы, такие как 10.3.50.1 и выше, где большинство критических ошибок RLS и ЕГАИС уже были штатно исправлены разработчиками.

← На главную