Как исправить ошибку доступа при редактировании дополнительных сведений под ограниченными правами в 1С?

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

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

В данной статье мы подробно разберем, почему возникает эта ошибка, проанализируем её технические причины, связанные с механизмом ограничения доступа на уровне записей (RLS), и рассмотрим несколько способов ее решения — от установки официальных исправлений до ручной корректировки программного кода.

Симптомы и проявление проблемы

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

Если мы обратимся к технологическому журналу или посмотрим стек вызова в конфигураторе, то увидим, что падение системы происходит в общем модуле или форме БСП:

ОбщаяФорма.РедактированиеДополнительныхСведений.Форма(206) (в некоторых сборках строка может смещаться на 276).

Полный текст системного исключения выглядит следующим образом:

«Ошибка выполнения запроса по причине: Ошибка в ограничении доступа к данным. объект: "РегистрСведений.ДополнительныеСведения", поле: "Значение"; право: "Чтение". Синтаксическая ошибка "Параметр ВидыДоступаСОтключеннымИспользованием не существует"».

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

Анализ технической причины: механизм RLS и БСП

Для того чтобы понять природу ошибки, рассмотрим подробнее, как функционирует ограничение доступа на уровне записей (RLS) в Библиотеке стандартных подсистем. Когда в системе включен RLS, платформа 1С автоматически модифицирует каждый SQL-запрос к базе данных, добавляя в него условия ограничения, прописанные в ролях пользователей.

В случае с регистром сведений РегистрСведений.ДополнительныеСведения, разработчики БСП используют предопределенные шаблоны ограничений. Шаблон RLS для чтения этого регистра обращается к специальному параметру сеанса, который называется ВидыДоступаСОтключеннымИспользованием.

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

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

Варианты решения проблемы

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

Способ 1. Установка официального патча (исправления) от 1С

Поскольку ошибка 00-00240762 является зарегистрированным багом БСП, фирма 1С оперативно выпустила автоматическое исправление (патч). Это наиболее предпочтительный и безопасный способ для типовых конфигураций, находящихся на поддержке.

Разберем по шагам, как установить патч:

  1. Перейдите в раздел Администрирование — Обслуживание.
  2. Откройте подраздел Обновление программы и выберите пункт Установка обновлений и исправлений (патчей).
  3. Если у вас настроен автоматический поиск и загрузка исправлений, система сама предложит установить патч с кодом, содержащим исправление для ошибки RLS (обычно имеет префикс EF_00_00240762).
  4. Запустите процесс установки патча. После перезапуска сеансов всеми пользователями ошибка исчезнет.

Способ 2. Обновление конфигурации

Разработчики полностью устранили данную уязвимость в Библиотеке стандартных подсистем, начиная с версии 3.0.3.59. Соответственно, все последующие релизы «Бухгалтерии предприятия 3.0», собранные на этой и более новых версиях БСП, лишены данной ошибки.

Рекомендуется обновить конфигурацию до актуального релиза. Перед обновлением обязательно выполните следующие действия:

  1. Создайте резервную копию информационной базы (выгрузка .dt или копирование файла 1Cv8.1CD для файловых баз).
  2. Убедитесь, что на сервере нет активных сеансов пользователей.
  3. Проведите обновление через конфигуратор или в режиме предприятия.

Способ 3. Программный обход проблемы (для доработанных конфигураций)

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

Давайте проанализируем, где и как это сделать. Нам потребуется внести изменения в модуль сеанса.

Рассмотрим пример кода, который нужно добавить в процедуру УстановкаПараметровСеанса в модуле сеанса:


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

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

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

Способ 4. Временный обход через права доступа (быстрое решение)

Если работа пользователей заблокирована, а программиста нет на месте для внесения изменений в код, можно временно применить административное решение:

Резюме

Мы проанализировали системную ошибку RLS 00-00240762 в конфигурации «Бухгалтерия предприятия» 3.0.72.54. Выяснилось, что сбой происходит из-за отсутствия инициализации параметра сеанса ВидыДоступаСОтключеннымИспользованием при работе пользователей с ограниченными правами.

Для устранения проблемы рекомендуется использовать установку официального патча или обновление конфигурации до актуальной версии БСП. В критических ситуациях для нетиповых решений эффективным выходом станет ручная инициализация параметра в модуле сеанса программным кодом, рассмотренным выше.

← На главную