Полезный класс, предназначенный для перехвата предопределенных событий 1С и ВК FormEx, вызываемых для групповых контекстов, модулей проведения документов и/или глобального модуля, с помощью специальных объектов пользовательских классов 1С++.
Используя данный функционал разработчику не придется ломать код типовой конфигурации для обработки событий работы пользователя с объектами метаданных. Например, если нам необходимо чтобы документ открывал только автор документа, можно поступить так:
А) В модуле формы каждого документа, в процедуру ПриОткрытии добавить код:
Если СокрЛП(ТекущийДокумент().Автор) <> СокрЛП(ИмяПользователя()) Тогда
Предупреждение("Нет прав на открытие документа",25);
СтатусВозврата(0);
Возврат;
КонецЕсли;
Б) В глобальном модуле использовать процедуру 1cpp ПослеОткрытия:
Процедура ПослеОткрытия(Конт)
Если СокрЛП(Конт.ТекущийДокумент().Автор) <> СокрЛП(ИмяПользователя()) Тогда
Предупреждение("Нет прав на открытие документа",25); СтатусВозврата(0);
Возврат;
КонецЕсли
КонецПроцедуры
В) Использовать Прерывание.
Глобальный модуль:
ЗагрузитьВнешнююКомпоненту("1cpp.dll");
глУпрНастройками =СоздатьОбъект("УправлениеНастройками");
глУпрНастройками.Установить("ПерехватитьСобытияГК",1);
глПерехватчикСобытийГМ = СоздатьОбъект("КлассПерехватСобытий");
глПерехватчик =СоздатьОбъект("Перехватчик");
глПерехватчик.ПерехватитьСобытияГлобальногоМодуля(ПерехватчикСобытийГМ);
Обработка "КлассПерехватСобытий":
Перем КонтФормы Экспорт, Док Экспорт;
Процедура СобытиеГМ_ПриОткрытии(Конт,ФлагЧтенияНастройки) Экспорт
КонтФормы = Конт;
Попытка
Док = КонтФормы.ТекущийДокумент();
Исключение
Возврат;
КонецПопытки;
ПерехватчикСобытийГК=СоздатьОбъект("КлассПерехватСобытий");
ПерехватчикСобытийГК.КонтФормы=КонтФормы;
ПерехватчикСобытийГК.Док=Док;
Перехватчик = СоздатьОбъект("Перехватчик");
Перехватчик.ПерехватитьСобытияГК(КонтФормы,ПерехватчикСобытийГК);
КонецПроцедуры
Функция Событие_ПриОткрытии() Экспорт
Если СокрЛП(Док.Автор) = СокрЛП(ИмяПользователя()) Тогда
Предупреждение("Нет прав на открытие документа",25);
Возврат 0;
КонецЕсли;
Возврат 1;
КонецФункции
Суть Перехвата: процедура "СобытиеГМ_ПриОткрытии" перехватывает событие любых форм 1С, в этой процедуре для открытой формы документа будет создаваться новый экземпляр пользовательского класса и назначаться обработчиком системных событий. В данном примере мы обрабатываем событие ПриОткрытии. Вот функция Событие_ПриОткрытии() будет выполнятся перед выполнением процедуры ПриОткрытии в форме документа(если Событие_ПриОткрытии() вернет 1).
Перехватчик может быть использован при организации прав доступа к объектам и т.д.
Его использование должно облегчить труд программиста при обновлении релиза конфигурации, которую он адаптировал под нужды заказчика.
Документация по классу "Перехватчик":
http://www.1cpp.ru/docum/icpp/html/Hooker.html
Статья Венгера Александра "[Обучаловка] Преимущества класса «Перехватчик» внешней компоненты «1С++»"
http://infostart.ru/public/73221/
P.S. Лтично я еще не определился насколько полезен данный класс в использовании, но знать о возможностях использования класса "Перехватчик" не помешает.
Комментариев нет:
Отправить комментарий