Как изменился механизм расчета прав доступа в 1С:Документооборот и как ускорить работу дескрипторов?

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

Проблема длительного расчета прав доступа (дескрипторов) является одной из самых обсуждаемых среди администраторов и разработчиков систем на базе 1С:Документооборот. В старых версиях программы (например, 1.3) процесс пересчета прав мог занимать десятки часов или даже несколько суток, что парализовало работу крупных предприятий. В этой статье мы проанализируем, как изменилась ситуация в современных версиях 2.1 и 3.0, и разберем механизмы, которые позволяют ускорить работу системы.

Эволюция механизмов ограничения доступа: от дескрипторов к динамическим правам

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

Рассмотрим ситуацию, когда в базе накоплено более 500 000 документов и миллионы задач. Полный пересчет прав в таких условиях может длиться до двух суток. Современные конфигурации предлагают несколько путей решения этой проблемы:

  1. Переход на версию 2.1: В этой версии формирование прав было ускорено более чем в 10 раз за счет оптимизации алгоритмов расчета дескрипторов и уменьшения их количества (обобщение дескрипторов).
  2. Использование производительного режима RLS (Record Level Security): Этот механизм появился в платформе начиная с 8.3.14 и активно внедрен в современные версии БСП (Библиотека стандартных подсистем).
  3. Переход на 1С:Документооборот 3.0: В этой версии архитектура прав была радикально пересмотрена, фактически внедрив элементы «динамических прав», о которых мечтали разработчики.

Механизм «Производительного RLS»: почему он работает быстрее?

Проанализируем работу нового режима RLS. В классическом режиме (старом) проверка прав происходила через сложные вложенные запросы на языке 1С, которые выполнялись СУБД при каждом обращении к данным. Это создавало огромную нагрузку при открытии списков документов.

В новом производительном режиме система работает иначе:

  1. Права доступа рассчитываются в момент записи объекта (асинхронно или через фоновые задания).
  2. Результаты расчета сохраняются в специальные «плоские» таблицы прав.
  3. При чтении данных платформа выполняет простое соединение (JOIN) с этой плоской таблицей, что практически не замедляет запрос.

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

Оптимизация прав в 1С:Документооборот 3.0

Выясним причину, по которой версия 3.0 считается прорывной в плане прав доступа. Разработчики реализовали концепцию «Автоматических ролей» и значительно упростили структуру хранения данных. В версии 2.1 основной проблемой был экспоненциальный рост таблиц прав (иногда до десятков миллионов записей). В версии 3.0 за счет группировки пользователей по «Группам доступа» объем этих таблиц удалось сократить на несколько порядков.

Также в 3.0 появился режим «С упрощенными правами». Посмотрим на примерную логику работы системы при добавлении пользователя в рабочую группу:


// Псевдокод логики обновления прав в ДО 3.0
Процедура ПриДобавленииВРабочуюГруппу(Объект, НовыйУчастник)
    // Вместо пересчета всей иерархии дескрипторов
    // выполняется инкрементальное обновление прав доступа
    МенеджерДоступа = РегистрыСведений.ПраваПользователей.СоздатьМенеджер();
    МенеджерДоступа.ДобавитьПрямоеПраво(Объект, НовыйУчастник, ВидДоступа.Чтение);
    // Система не трогает связанные задачи и процессы сразу,
    // если включен режим оптимизации
КонецПроцедуры

Как бороться с «зависшими» дескрипторами в текущей базе?

Если вы до сих пор используете версию 2.1 и сталкиваетесь с тормозами, проанализируем следующие шаги по оптимизации:

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

Практические советы для программистов

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

Таким образом, в современном 1С:Документооборот проблема «суточного» расчета прав практически решена архитектурно. Переход на производительный RLS и версию 3.0 позволяет забыть о дескрипторах как о «бутылочном горлышке» системы, превращая управление доступом в быстрый и прозрачный процесс.

← На главную