Как принудительно запустить пересчет прав доступа в 1С:ERP, чтобы избежать тормозов у пользователей?

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

При работе в крупных корпоративных системах, таких как 1С:ERP Управление предприятием 2, любые изменения в настройках прав доступа могут привести к серьезным проблемам с производительностью. Особенно остро это ощущается, когда администратор вносит изменения в Группы доступа или профили, использующие механизм RLS (Record Level Security) — ограничение доступа на уровне записей. Система инициирует масштабный пересчет таблиц ключей доступа, и если этот процесс начнется в разгар рабочего дня, пользователи столкнутся с критическими задержками. Чтобы частично нивелировать это влияние при чтении данных, можно использовать привилегированные отчеты, которые работают в обход стандартных ограничений RLS.

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

Разбираем причину проблемы: почему система «тормозит»?

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

Если не запустить этот процесс принудительно в нерабочее время, система начнет выполнять его динамически при входе первого же пользователя. Это вызовет огромную нагрузку на сервер базы данных (SQL) и заблокирует работу большинства сотрудников. Иногда стандартные механизмы могут давать сбой, и тогда может потребоваться точечный пересчет прав доступа для пользователя или для группы, чтобы обновить данные только по конкретным сотрудникам без полной перезагрузки всех таблиц.

Решение 1: Использование регламентного задания

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

  1. Перейдем в раздел НСИ и администрированиеОбслуживаниеРегламентные и фоновые задания.
  2. В открывшемся списке нам необходимо найти задание с наименованием Заполнение данных для ограничения доступа.
  3. Если в списке заданий его не видно, проверим настройки фильтра. Часто оно может быть выключено или скрыто, если в системе не используются ограничения на уровне записей.
  4. Чтобы запустить процесс немедленно, выделим задание и нажмем кнопку Выполнить сейчас.

Важный нюанс: в некоторых версиях ERP 2.5 это задание может называться Обновление доступа на уровне записей. Если же вы сталкиваетесь с некорректной работой прав именно в разрезе юридических лиц, стоит обратить внимание на специализированное расширение RLS по организации для 1С:ERP, которое исправляет типовые ошибки ограничения прав.

Решение 2: Программный запуск пересчета через консоль кода

Бывают ситуации, когда регламентное задание по какой-то причине не запускается или прерывается с ошибкой «Сеанс работы завершен администратором». Рассмотрим ситуацию, когда нам нужно программно инициализировать обновление. Для этого мы можем воспользоваться методами общего модуля УправлениеДоступом.

Разберем пример кода, который можно выполнить во внешней обработке или через консоль кода (поможет консоль кода и анализа прав доступа) для полной инициализации прав:


// Обновляем роли пользователей в соответствии с измененными профилями
УправлениеДоступом.ОбновитьРолиПользователей();

// Обновляем разрешенные значения, если менялись виды доступа
УправлениеДоступом.ОбновитьРазрешенныеЗначенияПриИзмененииИспользованияВидовДоступа();

// Запускаем основной процесс заполнения данных для RLS
УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступа();

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


// Если изменения касались именно групп доступа, используем специализированный метод
УправлениеДоступом.ОбновитьДоступПриИзмененииНастроекГруппДоступа();

// Принудительная установка флага необходимости обновления через служебные методы
УправлениеДоступомСлужебный.УстановитьОбновлениеДоступаНаУровнеЗаписей(Истина);

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

Инструменты мониторинга: как понять, что пересчет завершен?

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

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

Почему регламентное задание может отменяться?

Выясним причину частой ошибки: «Задание отменено пользователем по причине: Сеанс работы завершен администратором». Это часто происходит не из-за ручного вмешательства, а из-за механизмов самоконтроля платформы 1С:

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

Практические советы по оптимизации RLS

Чтобы минимизировать проблемы в будущем, проанализируем настройки производительности в самой программе. Перейдем в НСИ и администрированиеНастройки пользователей и прав.

Убедимся, что установлен флаг Производительный режим в подразделе «Ограничение доступа на уровне записей». Этот режим минимизирует количество «тяжелых» запросов к базе данных за счет использования предварительно рассчитанных данных (тех самых, которые мы обновляли ночью).

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

Подводя итог, наиболее надежный алгоритм действий выглядит так: запустить программный метод УправлениеДоступом.ЗаполнениеДанныхДляОграниченияДоступа() через консоль заданий или внешнюю обработку в конце рабочего дня и проконтролировать остаток очереди через отчет Состояние ограничения доступа перед началом следующей смены.

← На главную