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

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

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

Вариант 1: Использование вариантов отчета и ограничение прав на настройки

Один из наиболее простых способов — это создание нескольких Вариантов отчета в рамках одной схемы компоновки данных. Вы можете подготовить «Административный» вариант с полным набором данных и «Пользовательский» вариант с ограниченным составом полей.

  1. Создайте в СКД нужное количество вариантов настроек.
  2. Для каждого варианта настройте состав выводимых полей.
  3. Используйте механизм ограничения прав доступа к вариантам отчетов. В системе 1С существует возможность ограничить сохранение настроек, что не позволит пользователю через расширенные настройки «дотащить» скрытые колонки, если права на изменение состава колонок ограничены на уровне ролей.

Вариант 2: Программное удаление полей из состава настроек

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

Рассмотрим, как можно программно воздействовать на КомпоновщикНастроек в процедуре ПриОткрытии:


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

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

Вариант 3: Ограничение доступности элементов управления формы

Часто для решения задачи достаточно ограничить доступ пользователя к самому инструменту «Настройки» в интерфейсе отчета. Если пользователю не разрешено изменять настройки отчета, он будет довольствоваться только тем вариантом, который вы для него подготовили.

Разберем пример отключения стандартных кнопок в коде формы:


Процедура ПриОткрытии()
    Если Не РольДоступна("Администратор") Тогда
        // Отключаем доступ к кнопкам настройки
        Элементы.ФормаНастройкиОтчета.Доступность = Ложь;
        Элементы.ФормаИзменитьВариант.Доступность = Ложь;
    КонецЕсли;
КонецПроцедуры

Такой подход позволяет сохранить структуру отчета нетронутой, просто перекрывая «лазейки» для несанкционированного изменения состава полей.

Вариант 4: Модификация схемы в событии ПриКомпоновкеРезультата

Самый надежный метод — это обработка события ПриКомпоновкеРезультата в модуле отчета. В этом обработчике можно получить доступ к объекту СхемаКомпоновкиДанных и программно удалить из неё наборы данных или конкретные поля. Это гарантирует, что данные даже не будут получены из базы данных, что повышает уровень информационной безопасности.

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

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

Заключение

Комбинируя указанные методы, можно добиться гибкой настройки системы без необходимости написания сложных механизмов RLS. Для большинства задач достаточно ограничить доступ к кнопкам настройки и зафиксировать варианты отчетов. Если же требуется высокий уровень защиты, используйте программное вмешательство в КомпоновщикНастроек или событие ПриКомпоновкеРезультата.

← На главную