Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подписка на событие для отчетов
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.3
Talkman
Добрый день. Стоит задача сделать интерактивную возможность разрешать/запрещать пользователям открывать различные отчеты. Думал сделать данный функционал через подписку на событие и проверку по справочнику, куда вносить данные по названию отчета и перечню пользователей с доступом. 1С 8.3.16.1659 УТ 2.3. В перечне подписок на событие есть событие ОтчетМенеджер.ОбработкаПолученияФормы. По смыслу вроде как подходит. При получении формы проверяю можно или нет пользователю открывать отчет и соответственно даю добро на открытие формы или нет. Но при отладке открытия отчета 1С-ка не прыгает в процедуру, описанную в обработчике. Где я просчитался и правильная ли моя логике в принципе?
Vofka
Могу предположить, что этот обработчик срабатывает только для объектов, у которых есть разные виды форм: форма объекта, форма списка, форма выбора. Другими словами, это те объекты, которые можно как-то показывать. А отчет или, например, обработку нельзя показать в виде списка (не бывает список отчетов) или сделать так, чтобы отчет выбирался в какое-то поле ввода.
sava1
Цитата(Talkman @ 25.04.23, 15:58) необходимо зарегистрироваться для просмотра ссылки
Но при отладке открытия отчета 1С-ка не прыгает в процедуру


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

а как запретить открытие формы? там должна выскакивать ошибка о невозможности работы ...
andreydv87
Не уверен, что через подписку получится. Надо делать через "Права доступа" и "Роли".
Проанализируйте у кого какие роли включены, запретите этим ролям доступ к отчетам.
А потом создайте новую роль и дайте доступ к отчетам, тогда Вы сможете включить эту роль у конкретного пользователя.
Talkman
andreydv87 @ Сегодня, 10:36 необходимо зарегистрироваться для просмотра ссылки ,
Слишком много ролей прийдется создавать для различных отчетов.
Сейчас сделал в процедуре ПередОткрытием вызов функции поиска справочника с реквизитом имени отчета, смотрю есть ли там открывающий отчет пользователь и возвращаю Ложь или Истина. Минус в том, что для всех отчетов нужно прописывать процедуру перед открытием. Что то типа такого.
Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
    Отказ = УправлениеОтчетами.ОграничениеДоступаПользоватем(ЭтотОбъект);
    Если Отказ Тогда
        Предупреждение("Отказано в доступе!")  
    КонецЕсли;
КонецПроцедуры


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

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

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


andreydv87
Talkman @ Сегодня, 15:42 необходимо зарегистрироваться для просмотра ссылки ,
Можно и так, но это не красиво.

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

Если этого всего нету, то можно и так.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.