Цитата |
---|
Светлана Сулименко написал: 1. с помощью значимых событий можно сделать указанные Вами настройки |
Мне тоже стало интересно, можно ли прервать запись или проведение документа через значимые события (хотя с точки зрения быстродействия, на мой взгляд, это существенно выгоднее делать напрямую в модуле).
С настройками значимого события все довольно однозначно - на событие "ПриЗаписи" заказ-наряда вешаем условие, что состояние равно "Выполнен". А вот с действием на него возникает проблема. Во-первых, очевидно, что единственным подходящим нам видом действия является "Прочее" (т. е. выполнение произвольного кода).
Далее же нужно определиться со способом прерывания процесса записи. Наиболее красивым решением было бы из нашего произвольного кода перевести флаг "Отказ" процедуры "ПриЗаписи" в состояние "Истина". Однако в конечном итоге произвольный код выполняется в контексте процедуры "ВыполнитьПрочееДействие" общего модуля "сбСобытия":
Код |
---|
Процедура ВыполнитьПрочееДействие(ВыборкаИзРезультатЗапроса, Параметры)
Попытка
Выполнить(ВыборкаИзРезультатЗапроса.ПроизвольныйКод); // <<< Вот тут
Исключение
#Если Клиент Тогда
Сообщить(ОписаниеОшибки());
#КонецЕсли
КонецПопытки;
КонецПроцедуры |
Выполняется эта процедура уже после обработчиков "ПриЗаписи" и "ОбработкаПроведения". Поэтому на флаг "Отказ", равно как и на ход записи или проведения документа, мы из нее повлиять не можем. Максимум, что мы можем отсюда выжать - это объект документа, вызвавшего значимое событие:
Код |
---|
Параметры.ОбъектИсточникСобытия |
Поэтому с моей точки зрения, реализовать с помощью значимых событий дополнительные проверки при записи или проведении документа невозможно. Хотя, вполне вероятно, я что-то упускаю из вида.