При переходе со старых редакций конфигурации «Управление торговлей», редакция 10.3 (например, с версии 10.3.47.3 на 10.3.49.4 или смежные релизы), многие технические специалисты сталкиваются с критической ошибкой на этапе первого запуска информационной базы в режиме «Предприятие». Обновление конфигурации в Конфигураторе завершается успешно, но при запуске пользовательского режима выполнение обработчиков обновления аварийно прерывается.
В журнале регистрации и на экране пользователя при этом отображается следующая техническая информация:
{Справочник.КлассификаторОрганизацийЕГАИС.МодульМенеджера(249)}: Ошибка при вызове метода контекста (Выполнить)
ПоставщикиЕГАИС=Запрос.Выполнить.Выбрать;
по причине:
Ошибка выполнения запроса по причине:
Ошибка в ограничении доступа к данным.
объект: 'РегистрСведений.СоответствиеОрганизацийЕГАИС', поле: 'Контрагент'; право: 'Чтение'
Синтаксическая ошибка "Параметр ИспользоватьОграничениеПоКонтрагенты не существует"
В этой статье мы подробно проанализируем природу этой неисправности и разберем по шагам несколько надежных способов её устранения, которые позволят успешно завершить обновление вашей системы.
Для того чтобы эффективно решить проблему, разберем механизм её проявления. Параметр ИспользоватьОграничениеПоКонтрагенты является параметром сеанса. Он активно задействован в механизме ограничения доступа на уровне записей (RLS) для фильтрации контрагентов, связанных с ними документов и регистров (включая РегистрСведений.СоответствиеОрганизацийЕГАИС).
Синтаксический сбой во время обновления происходит из-за специфики инициализации параметров сеанса в 1С:
Полные права, платформа при выполнении запросов к базам данных все равно компилирует шаблоны RLS для всех остальных ролей, назначенных этому пользователю (например, специализированных ролей для работы с ЕГАИС). Если в шаблоне RLS одной из этих ролей прописан параметр сеанса ИспользоватьОграничениеПоКонтрагенты, система попытается к нему обратиться.Проанализировав причины, рассмотрим практические варианты решения этой проблемы.
Это самый простой и безопасный способ, не требующий изменения программного кода конфигурации. Суть метода заключается в том, чтобы заставить платформу полностью игнорировать любые правила RLS в процессе обновления.
Разберем этот процесс по шагам:
После прохождения этих шагов платформа запустит обработчики обновления без проверки RLS, так как у пользователя активна исключительно роль Полные права. Обновление завершится успешно. После этого вы сможете снова зайти в Конфигуратор и вернуть пользователю все необходимые роли обратно.
Если вам необходимо выполнить обновление без изменения состава ролей учетной записи администратора, можно принудительно отключить проверку RLS с помощью параметров запуска платформы. Для этого используется запуск сеанса в привилегированном режиме.
Рассмотрим, как настроить такой запуск:
/UsePrivilegedMode (или /ВключитьПривилегированныйРежим).Пример командной строки для файлового варианта базы данных:
"C:\Program Files\1cv8\common\1estart.exe" ENTERPRISE /F "C:\Put_K_Baze" /N "ИмяАдминистратора" /P "Пароль" /UsePrivilegedMode
Этот ключ заставляет платформу выполнять все операции обновления без наложения ограничений RLS, что позволяет полностью обойти ошибку инициализации параметров сеанса.
Если вы хотите устранить проблему непосредственно в коде конфигурации (например, если база находится на поддержке с возможностью изменения), можно внести небольшие корректировки в модуль менеджера проблемного справочника.
Проанализируем ситуацию: ошибка указывает на строку в объекте Справочник.КлассификаторОрганизацийЕГАИС.МодульМенеджера. Откроем этот модуль в Конфигураторе и найдем строку 249.
Мы можем временно обойти проверку прав, принудительно установив привилегированный режим непосредственно перед вызовом запроса к базе данных. Для этого используем метод УстановитьПривилегированныйРежим():
УстановитьПривилегированныйРежим(Истина);
ПоставщикиЕГАИС = Запрос.Выполнить().Выбрать();
УстановитьПривилегированныйРежим(Ложь);
Такая конструкция временно отключает механизмы RLS на время выполнения конкретного запроса, предотвращая возникновение синтаксической ошибки, связанной с отсутствием параметров сеанса.
В некоторых случаях помогает временное отключение использования ограничений прав доступа на уровне записей в настройках самой программы.
Чтобы выполнить это действие, выполните следующие шаги:
Важное примечание: Если при открытии констант вы обнаружили, что данный флаг уже снят, но ошибка все равно возникает, это свидетельствует о том, что платформа компилирует правила RLS превентивно на уровне метаданных ролей. В этом случае используйте Способ 1 или Способ 2.
Проанализируем контекст появления этой ошибки. Релизы линейки 10.3.49.x создавались разработчиками 1С в период активного внедрения помарочного учета ЕГАИС (ЕГАИС 3.0) и перехода на новые форматы обмена. Из-за сжатых сроков разработки данные версии конфигураций содержали ряд архитектурных недоработок:
Если перед вами стоит задача обновить конфигурацию до актуального состояния, рекомендуется не задерживаться на релизах линейки 10.3.49.x. Используйте описанные выше методы для успешного прохождения промежуточного обновления, после чего сразу же планируйте переход на более стабильные последующие релизы, такие как 10.3.50.1 и выше, где большинство критических ошибок RLS и ЕГАИС уже были штатно исправлены разработчиками.