Как исправить синтаксическую ошибку «Параметр.ВидыДоступаСОтключеннымИспользованием не существует» в 1С:Документооборот

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

При работе в программе «1С:Документооборот» (особенно в релизах ветки 2.1, таких как 2.1.11.5) пользователи часто сталкиваются с неприятной проблемой. При попытке открыть любую задачу в списке «Задачи мне» на начальной странице или при обращении к документам с дополнительными реквизитами система аварийно завершает операцию и выводит сообщение об ошибке: «Синтаксическая ошибка "Параметр.ВидыДоступаСОтключеннымИспользованием не существует"». Эта неполадка может проявляться как в тонком, так и в толстом клиенте в файловом или клиент-серверном режимах работы.

В этой статье мы подробно разберем природу возникновения данной ошибки, проанализируем внутренние механизмы платформы «1С:Предприятие» и предложим несколько эффективных способов решения — от простых настроек в пользовательском интерфейсе до внесения изменений в конфигурацию и использования механизмов расширений.

Выясняем причину: почему возникает эта ошибка?

Давайте разберем по шагам, что происходит в системе в момент возникновения сбоя. Параметр ВидыДоступаСОтключеннымИспользованием является важнейшим элементом подсистемы «Управление доступом» в составе Библиотеки стандартных подсистем (БСП), на базе которой построен «1С:Документооборот». Физически это параметр сеанса — ПараметрыСеанса.ВидыДоступаСОтключеннымИспользованием.

Этот параметр хранит в себе информацию о тех видах доступа (например, по организациям, группам доступа физических лиц, контрагентам), использование которых отключено администратором в настройках программы. Механизм ограничения доступа на уровне записей (RLS — Row-Level Security) обращается к этому параметру при выполнении запросов. Это необходимо для оптимизации производительности: если какой-то вид доступа отключен в целом для базы, шаблоны RLS игнорируют его проверку в запросах, чтобы не перегружать СУБД.

Синтаксическая ошибка «Параметр не существует» возникает по одной из двух причин:

  1. Нарушение порядка инициализации: Платформа пытается выполнить запрос с ограничением RLS (например, при чтении списка задач или дополнительных реквизитов на главной странице) еще до того, как программный код БСП успел инициализировать и заполнить параметры сеанса для текущего пользователя при старте системы.
  2. Недостаток прав доступа: У роли, назначенной пользователю (чаще всего это роль БазовыеПрава), отсутствует право «Получение» на этот конкретный параметр сеанса. Для платформы «1С» отсутствие прав на объект метаданных в рамках текущего сеанса равносильно его физическому отсутствию, что и приводит к синтаксической ошибке в запросе RLS.

Разработчики фирмы «1С» официально признали этот баг в версии 2.1.11. Полноценное исправление вошло в релиз 2.1.12. Тем не менее, если вы по каким-то причинам не можете оперативно обновить конфигурацию, давайте рассмотрим практические способы обхода этой ошибки.


Способ 1. Обновление конфигурации (Рекомендуемый путь)

Самый надежный и правильный способ борьбы с этой проблемой — обновление конфигурации «1С:Документооборот» до релиза 2.1.12 или выше. В этих версиях разработчики полностью переработали шаблоны ограничений RLS и оптимизировали код инициализации параметров сеанса при запуске системы.

Если у вас используется типовая конфигурация, находящаяся на поддержке, выполните стандартную процедуру обновления через конфигуратор или в режиме «1С:Предприятие».


Способ 2. Отключение RLS в режиме «Предприятие» (Без программирования)

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

Выполним следующие шаги:

  1. Запустите программу под учетной записью администратора (пользователя с полными правами).
  2. Перейдите в раздел Настройка и администрирование, затем выберите пункт Настройки программы и перейдите в подраздел Права доступа.
  3. Найдите флаг Ограничивать доступ на уровне записей (или аналогичную настройку использования RLS в вашей версии БСП) и снимите его.
  4. Сохраните изменения и перезапустите сеанс под проблемным пользователем.

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


Способ 3. Изменение роли в конфигурации (Решение с форума)

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

Рассмотрим детально, как скорректировать права доступа:

  1. Откройте базу данных в режиме «Конфигуратор».
  2. Включите возможность изменения конфигурации (меню Конфигурация -> Поддержка -> Настройка поддержки -> Включить возможность изменения).
  3. В дереве метаданных найдите роль БазовыеПрава (или БазовыеПраваДокументооборот в зависимости от точной редакции).
  4. Перейдите на вкладку Права этой роли.
  5. Найдите объект плана видов характеристик ДополнительныеРеквизитыИСведения.
  6. В окне ограничения доступа к данным (RLS) удалите строковые шаблоны ограничений на чтение для этого объекта. Также проверьте справочники, связанные с дополнительными реквизитами, и очистите условия RLS для них.
  7. Дополнительно найдите в ветке Параметры сеанса параметр ВидыДоступаСОтключеннымИспользованием и убедитесь, что для роли БазовыеПрава установлено свойство Получение.
  8. Обновите конфигурацию базы данных (клавиша F7).

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


Способ 4. Создание расширения конфигурации (Безопасная разработка)

Чтобы решить проблему программным путем и при этом не снимать основную конфигурацию с поддержки, мы можем применить механизм расширений. Это современный и экологичный способ кастомизации систем «1С».

Давайте разберем по шагам, как настроить принудительную инициализацию параметра сеанса при старте программы:

  1. В конфигураторе перейдите в меню Конфигурация -> Расширения конфигурации.
  2. Добавьте новое расширение (например, с именем ИсправлениеОшибкиRLS), снимите у него флажки «Безопасный режим» и «Защита от опасных действий».
  3. В расширение добавьте модуль сеанса или общий модуль, отвечающий за установку параметров сеанса (обычно это УправлениеДоступомСлужебный).
  4. Нам необходимо перехватить событие УстановкаПараметровСеанса. Напишем обработчик, который гарантированно заполнит нужный параметр сеанса при входе любого пользователя в систему.

Посмотрим на пример кода, который необходимо разместить в расширении:


&После("УстановкаПараметровСеанса")
Процедура Расш1_УстановкаПараметровСеанса(ТребуемыеПараметры)
    
    // Проверим, инициализирован ли наш проблемный параметр сеанса
    Попытка
        ЗначениеПараметра = ПараметрыСеанса.ВидыДоступаСОтключеннымИспользованием;
    Исключение
        // Если параметра не существует или к нему нет доступа, принудительно инициализируем его пустым массивом или значением по умолчанию
        МассивПустой = Новый Массив;
        ПараметрыСеанса.ВидыДоступаСОтключеннымИспользованием = Новый ФиксированныйМассив(МассивПустой);
    КонецПопытки;

КонецПроцедуры

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


Способ 5. Принудительный запуск обновления информационной базы

В некоторых случаях параметры сеанса и связанные с ними таблицы прав доступа не заполняются должным образом из-за сбоя при выполнении отложенных обработчиков обновления БСП (например, если обновление конфигурации было выполнено некорректно или прервано).

Проанализируем возможность принудительного исправления структуры данных:

  1. Полностью закройте все сеансы пользователей в базе данных.
  2. Запустите систему в режиме «1С:Предприятие» из командной строки или через настройки запуска в окне запуска «1С» с использованием специального параметра: /C ЗапуститьОбновлениеИнформационнойБазы
  3. Дождитесь завершения всех процедур обновления прав и пересчета параметров доступа. Программа выполнит все необходимые служебные обработчики, инициализирует кэш и параметры сеанса.

Резюме

Мы подробно разобрали синтаксическую ошибку RLS в «1С:Документооборот». Наиболее быстрым решением для демонстрационных баз является простое отключение лимитов RLS в пользовательском интерфейсе (Способ 2). Для промышленных баз оптимальным выбором станет обновление на стабильный релиз 2.1.12 (Способ 1) либо внедрение небольшого корректирующего расширения (Способ 4), сохраняющего поддержку вашей конфигурации в чистоте.

← На главную