Использование средств встроенного языка
Этот метод является наиболее гибким, а в ряде случаев, и мене трудоемким для разработчика, чем перечисленные выше. Суть его сводится к установке обработчиков действий пользователя, связанны с редактированием и/или удалением «ведущих» объектов, и, на основании доступной с помощью специальных функций информации принятия решения о разрешении или запрещении этого действия.
В таблице приведены некоторые примеры системных предопределенных процедур, предназначенных для «перехвата» действий пользователя.
Процедура |
Перехватываемое действие |
ПриУдаленииДокумента |
Удаление пользователем документа |
ПриУдаленииЭлемекта |
Удаление пользователем элемент справочника |
ПриУдаленииСчета |
Удаление пользователем бухгалтерского счета |
ПриЗаписиКонстанты |
Изменение значения константы |
ПриОткрытии |
Открытие формы элемента справочника, документа или счета. Функция Выбран() должна вернуть 1, если форма открывается для редактирования. |
Описание этих процедур, а также процедур и функций, приведенных ниже, смотрите в книге «1С:Предприятие. Описание встроенного языка».
Запретить или разрешить перехваченное действие пользователя возможно на основании обширного набора информации:
• место создания объекта;
• И Б, на которой исполняется 1:Предприятие;
• используемый интерфейс пользователя:
• название прав доступа.
Также допустимо использование любой комбинации этих данных, что обеспечивает максимальную гибкость в настройке конфигурации для исключения коллизий.
Запретить выполнение перехваченного действия можно с помощью процедуры СтатусВоз врата с параметром 0 (ноль). Если эту процедуру использовать в системной предопределенной процедуре ПриОткрытии, то форма не откроется вообще, для открытия формы только для просмотра используйте процедуру ТолькоПросмотр с параметром 1.
Примеры:
// Корректировка значения константы "Директор" разрешено
// только на центральной ИБ
Процедура ПриЗаписиКонстанты( Наин, Знач)
Если (ТекущаяИБЦентралькая() -= 0) И (Наим - "Директ- ,"'' Тогда
Сообщ ^ "Имя директора можно поменять только в центре!*;
Предупреждение(Сообщ, 2);
СтатусВозврата(0);
КонецЕсли;
КонецПроцедуры