1. Настройка автоматического добавления фильтра в универсальный отчет.
1.1 Необходимо добавить настройку или доп. право пользователя, которая будет определять, что этому пользователю ограничивается доступ.
1.2 В общем модуле пишем процедуру, которая будет устанавливать отбор, которая будет выглядеть так:
Процедура УстановитьФильтрыВОтчете(УниверсальныйОтчет) Экспорт
ФильтроватьОтчетыПоСкладуИКассе = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ФильтроватьОтчетыПоСкладуИКассе");
Если ФильтроватьОтчетыПоСкладуИКассе Тогда
//отбор по складам
//отбор по кассам
КонецЕсли;
КонецПроцедуры
Сам отбор устанавливается через метод Универсального отчета ДобавитьОтбор().
1.3 Прописать вызов процедуры в нужных универсальных отчетах, в конце процедуры УстановитьНачальныеНастройки().
2. Запрет пользователю менять добавленный выше фильтр.
Находим форму настроек универсального отчета.
Создаем процедуру (можно и в общем модуле):
Процедура КонтрольДоступа(ТекСтрока, Отказ)
ФильтроватьОтчетыПоСкладуИКассе= УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "ФильтроватьОтчетыПоСкладуИКассе");
Если ФильтроватьОтчетыПоСкладуИКассе Тогда
Если ТекСтрока.Имя = "Склад"
ИЛИ ТекСтрока.Имя = "РозничнаяТочка"
ИЛИ ТекСтрока.Имя = "БанковскийСчетКасса" Тогда
Отказ = Истина;
Предупреждение("Недостаточно прав!");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
На форме ищем элементы формы ТабличноеПолеОтбор, ТабличноеПолеОтбор1, ТабличноеПолеОтбор2. Это будет просто сделать с помощью списка элементов управления формы (находится в меню Форма). В обработчках события ПередНачаломИзменения для этих элементов пишем вызов вышенаписанной процедуры:
Процедура ТабличноеПолеОтборПередНачаломИзменения(Элемент, Отказ)
ТекСтрока = ЭлементыФормы.ТабличноеПолеОтбор.ТекущаяСтрока;
КонтрольДоступа(ТекСтрока, Отказ);
КонецПроцедуры
Процедура ТабличноеПолеОтбор1ПередНачаломИзменения(Элемент, Отказ)
ТекСтрока = ЭлементыФормы.ТабличноеПолеОтбор1.ТекущаяСтрока;
КонтрольДоступа(ТекСтрока, Отказ);
КонецПроцедуры
Процедура ТабличноеПолеОтбор2ПередНачаломИзменения(Элемент, Отказ)
ТекСтрока = ЭлементыФормы.ТабличноеПолеОтбор2.ТекущаяСтрока;
КонтрольДоступа(ТекСтрока, Отказ);
КонецПроцедуры
Теперь при попытке изменения строки с фильтром, пользователь будет видеть такую картину: