Как выполнить полный пересчет прав доступа (RLS) в ЗУП 3.1 и исправить отсутствие документов в общих журналах?

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

В процессе эксплуатации 1С:Зарплата и управление персоналом 3.1 технические специалисты часто сталкиваются с ситуацией, когда механизмы ограничения доступа на уровне записей (RLS) начинают работать некорректно. Одной из самых загадочных проблем является "рассинхрон" отображения данных: пользователь прекрасно видит документ в его специализированном списке (например, в списке документов Приостановление договоров), может его открывать и редактировать, но этот же самый документ полностью отсутствует в общем журнале Кадровые документы. В данной статье мы подробно разберем, как инициировать полный пересчет прав и восстановить корректную работу журналов.

Анализ механизмов ограничения доступа в ЗУП 3.1

Для начала проанализируем, почему возникает подобная ситуация. В современных версиях ЗУП 3.1 используется производительный режим работы RLS. В отличие от стандартного режима, где условия доступа вычисляются "на лету" при каждом запросе к базе данных, в производительном режиме система заранее рассчитывает права и сохраняет их в специальные таблицы — ключи доступа. Если данные в этих таблицах становятся неактуальными или повреждаются, возникают ошибки отображения.

Кроме того, общие журналы документов в ЗУП 3.1 (такие как Кадровые документы или Документы по сотрудникам) работают через вспомогательный регистр сведений СоставДокументовЗарплатаКадры. Если запись о документе не попала в этот регистр или не связалась с правами пользователя, документ исчезнет из журнала, даже если права на сам объект у пользователя есть.

Способ 1. Использование стандартного интерфейса обновления прав

Рассмотрим первый и самый простой шаг, который необходимо выполнить при возникновении проблем с доступом. Перейдем в раздел Администрирование, далее выберем Настройки пользователей и прав и откроем пункт Обновление доступа на уровне записей. Здесь мы увидим состояние текущих заданий по обновлению прав.

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

Способ 2. Принудительный сброс через изменение режима производительности

Выясним, как заставить систему полностью перестроить таблицы прав доступа. Одним из действенных методов является временная смена режима работы RLS. Проанализируем последовательность действий:

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

Этот маневр заставляет систему полностью очистить регистры КлючиДоступаКОбъектам и КлючиДоступаПользователей и начать их заполнение с нуля. Это наиболее близкий аналог "удаления и нарезания заново", который используется в 1С:Документооборот.

Способ 3. Диагностика через регистр «Состав документов зарплата кадры»

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

Система накладывает неявное условие, соединяя таблицу журнала с регистром СоставДокументовЗарплатаКадры. Посмотрим на пример запроса, который выполняется платформой "под капотом":


ВЫБРАТЬ
    Журнал.Ссылка,
    Журнал.Дата,
    Журнал.Номер
ИЗ
    ЖурналДокументов.КадровыеДокументы КАК Журнал
ГДЕ
    (ИСТИНА В (
        ВЫБРАТЬ ПЕРВЫЕ 1 ИСТИНА 
        ИЗ РегистрСведений.СоставДокументовЗарплатаКадры КАК Состав 
        ГДЕ Состав.ФизическоеЛицо = &ФизическоеЛицо 
        И Журнал.Ссылка = Состав.ДокументФизическогоЛица
    ))

Если в регистре СоставДокументовЗарплатаКадры отсутствуют записи по конкретному типу документа (например, Приостановление договора), то этот документ никогда не попадет в журнал. Выясним причину отсутствия записей. Часто это связано с тем, что документ был создан программно или перенесен из другой базы без вызова необходимых подписок на события.

Способ 4. Программное обновление данных журнала

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


ДокументОбъект = СсылкаНаПроблемныйДокумент.ПолучитьОбъект();
// Просто перезаписываем документ, чтобы сработали подписки на события
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

// Либо вызываем специализированный метод БСП для ЗУП
ЗарплатаКадрыСоставДокументов.ОбновитьДанныеДокумента(СсылкаНаПроблемныйДокумент);

Для массового исправления ситуации по всем документам конкретного типа (например, ПриостановлениеДоговораГПХ), выполним обход выборки:


Выборка = Документы.ПриостановлениеДоговораГПХ.Выбрать();
Пока Выборка.Следующий() Цикл
    ЗарплатаКадрыСоставДокументов.ОбновитьДанныеДокумента(Выборка.Ссылка);
КонецЦикла;

Способ 5. Очистка состояния обновления прав

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

  1. Откроем через Функции для технического специалиста регистр сведений СостоянияОбновленияПравДоступа.
  2. Найдем записи, относящиеся к проблемным метаданным или пользователям.
  3. Удалим эти записи.
  4. Запустим регламентное задание ОбновлениеДоступаНаУровнеЗаписей.

После удаления записей из этого регистра система "забудет", что она уже проверяла эти объекты, и проведет полную верификацию прав доступа для них при ближайшем цикле обновления. Также рекомендуется провести анализ прав доступа к метаданным конфигурации.

Важные замечания по документу «Приостановление договора»

Проанализируем специфику типа документа Приостановление договора. В некоторых релизах ЗУП 3.1 наблюдалась ошибка, при которой при записи этого документа неверно определялась группа доступа физических лиц. Если у вас в настройках включено ограничение прав по Группам физических лиц, обязательно убедитесь, что:

  1. В самом документе заполнено поле Физическое лицо, а управление доступом к формам не блокирует видимость объекта.
  2. Это физическое лицо включено в корректную группу доступа, к которой у пользователя есть права.
  3. В регистре КлючиДоступаКОбъектам для данного документа создана запись, содержащая верный идентификатор группы доступа.

Резюмируем: Полный пересчет прав в ЗУП 3.1 — это комплексная мера, включающая как управление режимами БСП (Производительный/Стандартный), так и контроль за вспомогательными регистрами журналов. Если очистка ключей доступа не решает проблему видимости в журнале Кадровые документы, причину следует искать в регистре СоставДокументовЗарплатаКадры.

← На главную