gifts2017

Автоматический фильтр в универсальном отчете

Опубликовал Анна Загребельная (ankawaiii) в раздел Программирование - Практика программирования

В статье описана методика, позволяющая ограничить доступ пользователям таким образом, чтоб они могли просматривать отчеты, построенные на базе универсального, только по разрешенным значениям параметров, например, Группы доступности складов и Кассы.

1. Настройка автоматического добавления фильтра в универсальный отчет.

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

Новая настройка

1.2 В общем модуле пишем процедуру, которая будет устанавливать отбор, которая будет выглядеть так:

Процедура УстановитьФильтрыВОтчете(УниверсальныйОтчет) Экспорт

   ФильтроватьОтчетыПоСкладуИКассе = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ФильтроватьОтчетыПоСкладуИКассе");

   Если ФильтроватьОтчетыПоСкладуИКассе Тогда

      //отбор по складам

      //отбор по кассам

   КонецЕсли;

КонецПроцедуры

Сам отбор устанавливается через метод Универсального отчета ДобавитьОтбор().

1.3 Прописать вызов процедуры в нужных универсальных отчетах, в конце процедуры УстановитьНачальныеНастройки().

Вызов процедуры

 

2. Запрет пользователю менять добавленный выше фильтр.

Находим форму настроек универсального отчета.

Форма настроек универсального отчета

Создаем процедуру (можно и в общем модуле):

Процедура КонтрольДоступа(ТекСтрока, Отказ)

   ФильтроватьОтчетыПоСкладуИКассе= УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ФильтроватьОтчетыПоСкладуИКассе");

   Если ФильтроватьОтчетыПоСкладуИКассе Тогда
      Если ТекСтрока.Имя = "Склад"
              ИЛИ ТекСтрока.Имя = "РозничнаяТочка"
              ИЛИ ТекСтрока.Имя = "БанковскийСчетКасса" Тогда
             Отказ = Истина;
             Предупреждение("Недостаточно прав!");
      КонецЕсли;
   КонецЕсли;

КонецПроцедуры

На форме ищем элементы формы ТабличноеПолеОтбор, ТабличноеПолеОтбор1, ТабличноеПолеОтбор2. Это будет просто сделать с помощью списка элементов управления формы (находится в меню Форма). В обработчках события ПередНачаломИзменения для этих элементов пишем вызов вышенаписанной процедуры:

Процедура ТабличноеПолеОтборПередНачаломИзменения(Элемент, Отказ)
   ТекСтрока = ЭлементыФормы.ТабличноеПолеОтбор.ТекущаяСтрока;
   КонтрольДоступа(ТекСтрока, Отказ);
КонецПроцедуры

Процедура ТабличноеПолеОтбор1ПередНачаломИзменения(Элемент, Отказ)
   ТекСтрока = ЭлементыФормы.ТабличноеПолеОтбор1.ТекущаяСтрока;
   КонтрольДоступа(ТекСтрока, Отказ);
КонецПроцедуры

Процедура ТабличноеПолеОтбор2ПередНачаломИзменения(Элемент, Отказ)
   ТекСтрока = ЭлементыФормы.ТабличноеПолеОтбор2.ТекущаяСтрока;
   КонтрольДоступа(ТекСтрока, Отказ);
КонецПроцедуры

Теперь при попытке изменения строки с фильтром, пользователь будет видеть такую картину:

Недостаточно прав


См. также

Подписаться Добавить вознаграждение
Комментарии
1. KindLion (KindLion) 27.10.14 16:14
Добрый день!

Спасибо, пригодилось!
Была проблема с запретом доступа к изменению пункта отбора. Использовал вашу идею.