Проблема длительного расчета прав доступа (дескрипторов) является одной из самых обсуждаемых среди администраторов и разработчиков систем на базе 1С:Документооборот. В старых версиях программы (например, 1.3) процесс пересчета прав мог занимать десятки часов или даже несколько суток, что парализовало работу крупных предприятий. В этой статье мы проанализируем, как изменилась ситуация в современных версиях 2.1 и 3.0, и разберем механизмы, которые позволяют ускорить работу системы.
Разберем, как исторически менялся подход к расчету прав. В ранних версиях 1С:Документооборот активно использовался механизм дескрипторов. Дескриптор — это своего рода «ключ доступа», который рассчитывается для каждого объекта (документа, задачи, процесса) на основе настроек прав (папок, грифов, рабочих групп). Проблема заключалась в том, что при любом изменении в оргструктуре или настройках прав система инициировала массовый пересчет этих ключей в фоновом режиме.
Рассмотрим ситуацию, когда в базе накоплено более 500 000 документов и миллионы задач. Полный пересчет прав в таких условиях может длиться до двух суток. Современные конфигурации предлагают несколько путей решения этой проблемы:
Проанализируем работу нового режима RLS. В классическом режиме (старом) проверка прав происходила через сложные вложенные запросы на языке 1С, которые выполнялись СУБД при каждом обращении к данным. Это создавало огромную нагрузку при открытии списков документов.
В новом производительном режиме система работает иначе:
Важный момент: Платформенный механизм проверки через шаблоны ролей теперь срабатывает преимущественно только на операцию Чтение. Проверка прав на Изменение, Добавление или Удаление происходит непосредственно перед записью в модуле объекта. Это позволяет разгрузить запросы на выборку данных.
Выясним причину, по которой версия 3.0 считается прорывной в плане прав доступа. Разработчики реализовали концепцию «Автоматических ролей» и значительно упростили структуру хранения данных. В версии 2.1 основной проблемой был экспоненциальный рост таблиц прав (иногда до десятков миллионов записей). В версии 3.0 за счет группировки пользователей по «Группам доступа» объем этих таблиц удалось сократить на несколько порядков.
Также в 3.0 появился режим «С упрощенными правами». Посмотрим на примерную логику работы системы при добавлении пользователя в рабочую группу:
// Псевдокод логики обновления прав в ДО 3.0
Процедура ПриДобавленииВРабочуюГруппу(Объект, НовыйУчастник)
// Вместо пересчета всей иерархии дескрипторов
// выполняется инкрементальное обновление прав доступа
МенеджерДоступа = РегистрыСведений.ПраваПользователей.СоздатьМенеджер();
МенеджерДоступа.ДобавитьПрямоеПраво(Объект, НовыйУчастник, ВидДоступа.Чтение);
// Система не трогает связанные задачи и процессы сразу,
// если включен режим оптимизации
КонецПроцедуры
Если вы до сих пор используете версию 2.1 и сталкиваетесь с тормозами, проанализируем следующие шаги по оптимизации:
Обновление прав доступа (дескрипторов) так, чтобы оно работало в несколько потоков. Это позволит системе обрабатывать очередь дескрипторов параллельно, не блокируя всю очередь из-за одного «тяжелого» процесса.Если вы планируете дорабатывать механизм прав самостоятельно (как это предлагал автор в обсуждении), помните, что полное замещение типового механизма динамическими правами может привести к конфликтам при обновлении конфигурации. Однако, вы можете использовать следующие подходы:
ПередЗаписью или ПриЗаписи).Таким образом, в современном 1С:Документооборот проблема «суточного» расчета прав практически решена архитектурно. Переход на производительный RLS и версию 3.0 позволяет забыть о дескрипторах как о «бутылочном горлышке» системы, превращая управление доступом в быстрый и прозрачный процесс.