Версия для печати темы (https://pro1c.org.ua/index.php?s=16bce66f22a0c18db85ec2b91f8ccdd9&showtopic=67231)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Подписка на событие для отчетов

Автор: Talkman 25.04.23, 14:58

Добрый день. Стоит задача сделать интерактивную возможность разрешать/запрещать пользователям открывать различные отчеты. Думал сделать данный функционал через подписку на событие и проверку по справочнику, куда вносить данные по названию отчета и перечню пользователей с доступом. 1С 8.3.16.1659 УТ 2.3. В перечне подписок на событие есть событие ОтчетМенеджер.ОбработкаПолученияФормы. По смыслу вроде как подходит. При получении формы проверяю можно или нет пользователю открывать отчет и соответственно даю добро на открытие формы или нет. Но при отладке открытия отчета 1С-ка не прыгает в процедуру, описанную в обработчике. Где я просчитался и правильная ли моя логике в принципе?

Автор: Vofka 26.04.23, 8:29

Могу предположить, что этот обработчик срабатывает только для объектов, у которых есть разные виды форм: форма объекта, форма списка, форма выбора. Другими словами, это те объекты, которые можно как-то показывать. А отчет или, например, обработку нельзя показать в виде списка (не бывает список отчетов) или сделать так, чтобы отчет выбирался в какое-то поле ввода.

Автор: sava1 26.04.23, 8:52

Цитата(Talkman @ 25.04.23, 15:58) *
Но при отладке открытия отчета 1С-ка не прыгает в процедуру


отладка на сервере включена?
это серверная процедура

а как запретить открытие формы? там должна выскакивать ошибка о невозможности работы ...

Автор: andreydv87 26.04.23, 9:36

Не уверен, что через подписку получится. Надо делать через "Права доступа" и "Роли".
Проанализируйте у кого какие роли включены, запретите этим ролям доступ к отчетам.
А потом создайте новую роль и дайте доступ к отчетам, тогда Вы сможете включить эту роль у конкретного пользователя.

Автор: Talkman 26.04.23, 14:42

andreydv87 @ Сегодня, 10:36 * ,
Слишком много ролей прийдется создавать для различных отчетов.
Сейчас сделал в процедуре ПередОткрытием вызов функции поиска справочника с реквизитом имени отчета, смотрю есть ли там открывающий отчет пользователь и возвращаю Ложь или Истина. Минус в том, что для всех отчетов нужно прописывать процедуру перед открытием. Что то типа такого.

Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Отказ = УправлениеОтчетами.ОграничениеДоступаПользоватем(ЭтотОбъект);
    Если Отказ Тогда
        Предупреждение("Отказано в доступе!")  
    КонецЕсли;
КонецПроцедуры


Функция ОграничениеДоступаПользоватем(Объект) Экспорт

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

КонецФункции //



Автор: andreydv87 26.04.23, 19:01

Talkman @ Сегодня, 15:42 * ,
Можно и так, но это не красиво.

При обновлении не затереть, если сотрудник уволится, то новому сотруднику надо будет выставить права (также как и с ролями)
если будет новый отчет добавлен, то тоже не забыть...

Если этого всего нету, то можно и так.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua