Добрый день. Стоит задача сделать интерактивную возможность разрешать/запрещать пользователям открывать различные отчеты. Думал сделать данный функционал через подписку на событие и проверку по справочнику, куда вносить данные по названию отчета и перечню пользователей с доступом. 1С 8.3.16.1659 УТ 2.3. В перечне подписок на событие есть событие ОтчетМенеджер.ОбработкаПолученияФормы. По смыслу вроде как подходит. При получении формы проверяю можно или нет пользователю открывать отчет и соответственно даю добро на открытие формы или нет. Но при отладке открытия отчета 1С-ка не прыгает в процедуру, описанную в обработчике. Где я просчитался и правильная ли моя логике в принципе?
Могу предположить, что этот обработчик срабатывает только для объектов, у которых есть разные виды форм: форма объекта, форма списка, форма выбора. Другими словами, это те объекты, которые можно как-то показывать. А отчет или, например, обработку нельзя показать в виде списка (не бывает список отчетов) или сделать так, чтобы отчет выбирался в какое-то поле ввода.
Не уверен, что через подписку получится. Надо делать через "Права доступа" и "Роли".
Проанализируйте у кого какие роли включены, запретите этим ролям доступ к отчетам.
А потом создайте новую роль и дайте доступ к отчетам, тогда Вы сможете включить эту роль у конкретного пользователя.
andreydv87 @ Сегодня, 10:36
,
Слишком много ролей прийдется создавать для различных отчетов.
Сейчас сделал в процедуре ПередОткрытием вызов функции поиска справочника с реквизитом имени отчета, смотрю есть ли там открывающий отчет пользователь и возвращаю Ложь или Истина. Минус в том, что для всех отчетов нужно прописывать процедуру перед открытием. Что то типа такого.
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = УправлениеОтчетами.ОграничениеДоступаПользоватем(ЭтотОбъект);
Если Отказ Тогда
Предупреждение("Отказано в доступе!")
КонецЕсли;
КонецПроцедуры
Функция ОграничениеДоступаПользоватем(Объект) Экспорт
Отчет = Объект.Метаданные().Имя;
Доступ = Справочники.ДоступыКОтчетам.НайтиПоРеквизиту("Отчет",Отчет);
ТекПользователь = ПараметрыСеанса.ТекущийПользователь;
Если НЕ Доступ.Пустая() Тогда
Для каждого ЗапП Из Доступ.Пользователи Цикл
Если ЗапП.Пользователь = ТекПользователь Тогда
Возврат Ложь;
КонецЕсли;
КонецЦикла;
Возврат Истина;
КонецЕсли;
Возврат Ложь;
КонецФункции //
Talkman @ Сегодня, 15:42
,
Можно и так, но это не красиво.
При обновлении не затереть, если сотрудник уволится, то новому сотруднику надо будет выставить права (также как и с ролями)
если будет новый отчет добавлен, то тоже не забыть...
Если этого всего нету, то можно и так.
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua