При работе в программе «1С:Документооборот» (особенно в релизах ветки 2.1, таких как 2.1.11.5) пользователи часто сталкиваются с неприятной проблемой. При попытке открыть любую задачу в списке «Задачи мне» на начальной странице или при обращении к документам с дополнительными реквизитами система аварийно завершает операцию и выводит сообщение об ошибке: «Синтаксическая ошибка "Параметр.ВидыДоступаСОтключеннымИспользованием не существует"». Эта неполадка может проявляться как в тонком, так и в толстом клиенте в файловом или клиент-серверном режимах работы.
В этой статье мы подробно разберем природу возникновения данной ошибки, проанализируем внутренние механизмы платформы «1С:Предприятие» и предложим несколько эффективных способов решения — от простых настроек в пользовательском интерфейсе до внесения изменений в конфигурацию и использования механизмов расширений.
Давайте разберем по шагам, что происходит в системе в момент возникновения сбоя. Параметр ВидыДоступаСОтключеннымИспользованием является важнейшим элементом подсистемы «Управление доступом» в составе Библиотеки стандартных подсистем (БСП), на базе которой построен «1С:Документооборот». Физически это параметр сеанса — ПараметрыСеанса.ВидыДоступаСОтключеннымИспользованием.
Этот параметр хранит в себе информацию о тех видах доступа (например, по организациям, группам доступа физических лиц, контрагентам), использование которых отключено администратором в настройках программы. Механизм ограничения доступа на уровне записей (RLS — Row-Level Security) обращается к этому параметру при выполнении запросов. Это необходимо для оптимизации производительности: если какой-то вид доступа отключен в целом для базы, шаблоны RLS игнорируют его проверку в запросах, чтобы не перегружать СУБД.
Синтаксическая ошибка «Параметр не существует» возникает по одной из двух причин:
БазовыеПрава), отсутствует право «Получение» на этот конкретный параметр сеанса. Для платформы «1С» отсутствие прав на объект метаданных в рамках текущего сеанса равносильно его физическому отсутствию, что и приводит к синтаксической ошибке в запросе RLS.Разработчики фирмы «1С» официально признали этот баг в версии 2.1.11. Полноценное исправление вошло в релиз 2.1.12. Тем не менее, если вы по каким-то причинам не можете оперативно обновить конфигурацию, давайте рассмотрим практические способы обхода этой ошибки.
Самый надежный и правильный способ борьбы с этой проблемой — обновление конфигурации «1С:Документооборот» до релиза 2.1.12 или выше. В этих версиях разработчики полностью переработали шаблоны ограничений RLS и оптимизировали код инициализации параметров сеанса при запуске системы.
Если у вас используется типовая конфигурация, находящаяся на поддержке, выполните стандартную процедуру обновления через конфигуратор или в режиме «1С:Предприятие».
Проанализируем ситуацию: если ваша база данных используется в небольшой компании или в режиме демонстрационной базы (как в случае автора темы на форуме), жесткое ограничение прав на уровне записей может быть избыточным. Мы можем полностью отключить механизм RLS в пользовательском интерфейсе, что мгновенно снимет проблему без изменения метаданных конфигурации.
Выполним следующие шаги:
После отключения этой опции шаблоны RLS перестанут применяться к запросам, нагрузка на базу данных снизится, а синтаксическая ошибка при открытии задач полностью исчезнет.
Если вам обязательно нужно сохранить работоспособность механизма RLS, но обновить конфигурацию прямо сейчас невозможно, придется внести изменения в метаданные. Как отметили участники обсуждения на форуме, ошибка часто связана с обращением к плану видов характеристик ДополнительныеРеквизитыИСведения и некоторым справочникам.
Рассмотрим детально, как скорректировать права доступа:
БазовыеПрава (или БазовыеПраваДокументооборот в зависимости от точной редакции).ДополнительныеРеквизитыИСведения.ВидыДоступаСОтключеннымИспользованием и убедитесь, что для роли БазовыеПрава установлено свойство Получение.Важное предупреждение: Данный метод требует снятия конфигурации с полной поддержки, что может усложнить процесс последующих обновлений на новые релизы. Используйте его только в крайнем случае.
Чтобы решить проблему программным путем и при этом не снимать основную конфигурацию с поддержки, мы можем применить механизм расширений. Это современный и экологичный способ кастомизации систем «1С».
Давайте разберем по шагам, как настроить принудительную инициализацию параметра сеанса при старте программы:
ИсправлениеОшибкиRLS), снимите у него флажки «Безопасный режим» и «Защита от опасных действий».УправлениеДоступомСлужебный).УстановкаПараметровСеанса. Напишем обработчик, который гарантированно заполнит нужный параметр сеанса при входе любого пользователя в систему.Посмотрим на пример кода, который необходимо разместить в расширении:
&После("УстановкаПараметровСеанса")
Процедура Расш1_УстановкаПараметровСеанса(ТребуемыеПараметры)
// Проверим, инициализирован ли наш проблемный параметр сеанса
Попытка
ЗначениеПараметра = ПараметрыСеанса.ВидыДоступаСОтключеннымИспользованием;
Исключение
// Если параметра не существует или к нему нет доступа, принудительно инициализируем его пустым массивом или значением по умолчанию
МассивПустой = Новый Массив;
ПараметрыСеанса.ВидыДоступаСОтключеннымИспользованием = Новый ФиксированныйМассив(МассивПустой);
КонецПопытки;
КонецПроцедуры
Этот простой код перехватывает момент инициализации параметров сеанса платформой и в случае возникновения исключения принудительно присваивает параметру пустое значение. Это предотвращает возникновение синтаксической ошибки в запросах RLS, при этом основная конфигурация остается полностью типовой.
В некоторых случаях параметры сеанса и связанные с ними таблицы прав доступа не заполняются должным образом из-за сбоя при выполнении отложенных обработчиков обновления БСП (например, если обновление конфигурации было выполнено некорректно или прервано).
Проанализируем возможность принудительного исправления структуры данных:
/C ЗапуститьОбновлениеИнформационнойБазыМы подробно разобрали синтаксическую ошибку RLS в «1С:Документооборот». Наиболее быстрым решением для демонстрационных баз является простое отключение лимитов RLS в пользовательском интерфейсе (Способ 2). Для промышленных баз оптимальным выбором станет обновление на стабильный релиз 2.1.12 (Способ 1) либо внедрение небольшого корректирующего расширения (Способ 4), сохраняющего поддержку вашей конфигурации в чистоте.