Как исключить организации из типовых отчетов в 1С:ЗУП 2.5 без ручных отборов

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

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

Метод 1: Использование механизма RLS (Ограничение доступа на уровне записей)

Рассмотрим основной способ, который предлагает платформа 1С для решения подобных задач — RLS (Record Level Security). Этот механизм позволяет настроить права так, чтобы пользователь видел в списках и отчетах только те записи, которые соответствуют заданным условиям.

Проанализируем шаги, которые необходимо выполнить в конфигураторе:

  1. Откроем нужную роль (или создадим новую), которая назначена пользователям.
  2. Найдем в списке объектов справочник Организации.
  3. На вкладке Ограничения доступа добавим условие на право Чтение.
  4. Пропишем шаблон ограничения. В простейшем случае условие может выглядеть так: ГДЕ Ссылка <> &НужнаяОрганизация Или, если организаций несколько, можно использовать список: ГДЕ НЕ Ссылка В (&СписокИсключаемыхОрганизаций)

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

Для справочника Сотрудники условие будет опираться на реквизит организации:

Сотрудники ГДЕ Организация <> &ИсключаемаяОрганизация

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

Метод 2: Решение проблемы «Недостаточно прав доступа» в отчетах

При включении RLS многие типовые отчеты в ЗУП 2.5 могут начать выдавать ошибку «Недостаточно прав доступа». Это происходит потому, что в текстах запросов отчетов отсутствует ключевое слово РАЗРЕШЕННЫЕ. Проанализируем ситуацию: запрос пытается прочитать все записи, натыкается на те, к которым доступ запрещен, и система блокирует выполнение всего отчета.

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


ВЫБРАТЬ
    Сотрудник,
    Организация,
    Результат
ИЗ
    ...

Нужно использовать модифицированный вариант:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    Сотрудник,
    Организация,
    Результат
ИЗ
    ...

Ключевое слово РАЗРЕШЕННЫЕ заставляет систему игнорировать записи, на которые у пользователя нет прав, и выводить только доступные данные без генерации ошибки. Это именно то, что позволит «скрыть» ненужные организации из отчетов «в одном месте» (через RLS) и при этом сохранить работоспособность программы.

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

Если правка RLS кажется слишком сложной или вызывает значительное замедление работы системы (что бывает на больших базах ЗУП 2.5), рассмотрим альтернативный программный метод. Большинство типовых отчетов в ЗУП 2.5 построены на базе Универсального отчета или Системы компоновки данных (СКД).

Мы можем вмешаться в процесс инициализации отчета. Проанализируем, как это сделать:

  1. Найдем общий модуль, отвечающий за настройку типовых отчетов (например, ТиповыеОтчеты).
  2. В процедуре, которая отвечает за формирование настроек или установку начальных отборов, добавим код, который будет проверять текущего пользователя.
  3. Если пользователь должен иметь ограничения, программно добавим в структуру отбора условие по организации.

Пример логики кода:


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

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

Особенности работы с физическими лицами и кадровыми данными

Разберем тонкий момент, упомянутый в обсуждении. В ЗУП 2.5 справочник ФизическиеЛица является общим для всех организаций. Если вы ограничиваете доступ только к организациям, физлица все равно могут быть видны. Это может привести к тому, что в отчетах по сотрудникам (например, в списках или Т-2) строки будут пустыми или будут содержать ошибки, если запрос пытается получить данные по сотруднику организации, к которой нет доступа.

Для корректной работы рекомендуется:

Подводя итог, наиболее правильным и системным решением для исключения организаций из отчетов является комбинация RLS по организациям и массовое добавление РАЗРЕШЕННЫЕ в запросы отчетов. Это обеспечит чистоту данных в отчетах и корректную работу пользователей с разрешенными им объектами.

← На главную