Управляет выполнением цепочки обработчиков события.
Синтаксис
УстановитьВыполнениеОбработчиковСобытия(<Действие>)Полное описание, параметры и ограничения
ФормаКлиентскогоПриложения.УстановитьВыполнениеОбработчиковСобытия (ClientApplicationForm.SetEventHandlersExecution)
ФормаКлиентскогоПриложения (ClientApplicationForm)
УстановитьВыполнениеОбработчиковСобытия (SetEventHandlersExecution)
Доступен, начиная с версии 8.3.6.
Синтаксис:
УстановитьВыполнениеОбработчиковСобытия(<Действие>)
Параметры:
<Действие> (обязательный)
Тип: Булево.
Если установлено Ложь - после завершения текущего обработчика выполнение цепочки обработчиков будет прервано.
Если установлено Истина - выполнение цепочки обработчиков будет продолжено.
Описание:
Управляет выполнением цепочки обработчиков события.
Доступность:
Тонкий клиент, веб-клиент, сервер, толстый клиент.
Примечание:
Метод может быть вызван только в формах конфигураций расширений.
Использование в версии:
Доступен, начиная с версии 8.3.6.
Методическая информация
Практические примеры
Проверить продолжение и остановку настоящей цепочки обработчиков своего расширения формы
Собственная базовая форма и ровно одно собственное CFE. В продолжении реально исполняется базовый обработчик и затем добавленный обработчик; при Ложь база не должна исполняться.
Где и как запускать
Полный модуль заимствованной ОбщаяФорма.ЦепочкаФормы85 ВНУТРИ собственного расширения Цепочка85; клиентское событие ПриОткрытии.
Подготовка
Создайте отдельную пустую CF УчебнаяЦепочкаФормы85 на 8.5.1.1343, управляемое приложение, без бизнес-объектов. Создайте ОбщаяФорма.ЦепочкаФормы85.
Реквизиты формы: Прервать85 Булево, СчетчикБазы85 Число 9,0, Цепочка85 Строка 200, Состояние85 Строка 500. Выведите их только для просмотра; параметр формы Прервать85 Булево.
В базовый модуль вставьте supporting CHAIN_BASE. Свяжите ПриСозданииНаСервере и ПриОткрытии с соответствующими процедурами: счетчик и строка — реальные свидетельства исполнения базы.
Создайте собственное расширение конфигурации Цепочка85, назначение Адаптация, заимствуйте ОбщаяФорма.ЦепочкаФормы85 и необходимые реквизиты. Не используйте чужое расширение.
В редакторе заимствованной формы установите ее собственное событие ПриОткрытии = ПриОткрытииРасширения85. В модуль заимствованной формы расширения вставьте основной код. Это именно обработчик события расширенной формы, не &Перед, &После или &Вместо перехват процедуры.
Создайте базовую ОбщаяФорма.ПускЦепочки85 с двумя командами ПроверитьПродолжение85 и ПроверитьОстановку85. Вставьте supporting launcher; команды каждый раз открывают собственную целевую форму с новым UUID.
В своей новой CF примените только собственное Цепочка85. В базе и активном сеансе должно быть ровно это одно расширение, отключенных — 0. Вручную перезапустите свой учебный сеанс; никакое расширение инструментами здесь не устанавливается.
&НаКлиенте
Процедура ПриОткрытииРасширения85(Отказ)
Если Прервать85 Тогда
Цепочка85 = "расширение: остановлено;";
ЭтотОбъект.УстановитьВыполнениеОбработчиковСобытия(Ложь);
Состояние85 = "После текущего расширения цепочка прекращена; счетчик базы должен остаться 0";
Возврат;
КонецЕсли;
Цепочка85 = "расширение;";
ЭтотОбъект.УстановитьВыполнениеПослеОбработчиковСобытия("ПослеБазового85");
ЭтотОбъект.УстановитьВыполнениеОбработчиковСобытия(Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПослеБазового85(Отказ)
Цепочка85 = Цепочка85 + "после базы;";
Если СчетчикБазы85 <> 1 Или Цепочка85 <> "расширение;база;после базы;" Тогда
ВызватьИсключение "Реальная цепочка собственной формы не соответствует ожидаемому порядку";
КонецЕсли;
Состояние85 = "Расширение → базовый обработчик → собственный после-обработчик: проверено";
КонецПроцедуры
Полный модуль собственной базовой целевой формы
Основная CF УчебнаяЦепочкаФормы85, ОбщаяФорма.ЦепочкаФормы85; server создания и client ПриОткрытии.
Основная CF УчебнаяЦепочкаФормы85, ОбщаяФорма.ЦепочкаФормы85; server создания и client ПриОткрытии.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ПроверитьСвойПустойСтенд();
Прервать85 = Ложь;
Если Параметры.Свойство("Прервать85", Прервать) Тогда
Если ТипЗнч(Прервать) <> Тип("Булево") Тогда
ВызватьИсключение "Собственный параметр Прервать85 должен быть Булево";
КонецЕсли;
Прервать85 = Прервать;
КонецЕсли;
СчетчикБазы85 = 0;
Цепочка85 = "";
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
СчетчикБазы85 = СчетчикБазы85 + 1;
Цепочка85 = Цепочка85 + "база;";
КонецПроцедуры
&НаСервере
Процедура ПроверитьСвойПустойСтенд()
Если Метаданные.Справочники.Количество() <> 0 Или Метаданные.Документы.Количество() <> 0 Или Метаданные.Перечисления.Количество() <> 0 Или Метаданные.РегистрыСведений.Количество() <> 0 Или Метаданные.РегистрыНакопления.Количество() <> 0 Или Метаданные.РегистрыБухгалтерии.Количество() <> 0 Или Метаданные.РегистрыРасчета.Количество() <> 0 Или Метаданные.ПланыВидовХарактеристик.Количество() <> 0 Или Метаданные.ПланыВидовРасчета.Количество() <> 0 Или Метаданные.ПланыСчетов.Количество() <> 0 Или Метаданные.ПланыОбмена.Количество() <> 0 Или Метаданные.Последовательности.Количество() <> 0 Или Метаданные.БизнесПроцессы.Количество() <> 0 Или Метаданные.Задачи.Количество() <> 0 Или Метаданные.ОбщиеРеквизиты.Количество() <> 0 Или Метаданные.ПодпискиНаСобытия.Количество() <> 0 Или Метаданные.РегламентныеЗадания.Количество() <> 0 Или Метаданные.ВнешниеИсточникиДанных.Количество() <> 0 Тогда
ВызватьИсключение "Нужен только свой новый пустой учебный стенд";
КонецЕсли;
Источники = Новый Массив;
Источники.Добавить(ИсточникРасширенийКонфигурации.БазаДанных);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансАктивные);
Источники.Добавить(ИсточникРасширенийКонфигурации.СеансОтключенные);
Для Каждого Источник Из Источники Цикл
Список = РасширенияКонфигурации.Получить(, Источник);
Если Источник = ИсточникРасширенийКонфигурации.СеансОтключенные Тогда
Если Список.Количество() <> 0 Тогда
ВызватьИсключение "Не должно быть отключенных чужих расширений";
КонецЕсли;
Иначе
Если Список.Количество() <> 1 Тогда
ВызватьИсключение "Требуется ровно собственное расширение Цепочка85";
КонецЕсли;
Если Список[0].Имя <> "Цепочка85" Тогда
ВызватьИсключение "Чужое расширение не разрешено";
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ТранзакцияАктивна() Тогда
ВызватьИсключение "Транзакция не требуется для своей учебной формы";
КонецЕсли;
КонецПроцедуры
Отдельный пуск двух ветвей собственной цепочки
Основная CF, ОбщаяФорма.ПускЦепочки85; клиентские обработчики двух собственных команд.
Основная CF, ОбщаяФорма.ПускЦепочки85; клиентские обработчики двух собственных команд.
&НаКлиенте
Процедура ПроверитьПродолжение85(Команда)
ОткрытьФорму("ОбщаяФорма.ЦепочкаФормы85", Новый Структура("Прервать85", Ложь), ЭтаФорма, Новый УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ПроверитьОстановку85(Команда)
ОткрытьФорму("ОбщаяФорма.ЦепочкаФормы85", Новый Структура("Прервать85", Истина), ЭтаФорма, Новый УникальныйИдентификатор);
КонецПроцедуры
Разбор по шагам
Расширение имеет первый обработчик ПриОткрытии; базовая форма — следующий. Оба работают с одними настоящими реквизитами собственной формы.
При Прервать85 = Ложь расширение начинает строку, добавляет ПослеБазового85 через УстановитьВыполнениеПослеОбработчиковСобытия и разрешает продолжение.
ПослеБазового85 имеет тот же состав параметров, что ПриОткрытии: один Отказ. Не передаем необязательный дополнительный параметр, чтобы не выдумывать иной callback контракт.
База увеличивает свой счетчик ровно один раз. После-обработчик проверяет точный порядок расширение;база;после базы; и счетчик 1.
При Прервать85 = Истина УстановитьВыполнениеОбработчиковСобытия(Ложь) прекращает цепочку после текущего обработчика. Это не Отказ открытия формы: учебная форма остается открытой для проверки счетчика 0.
Guard допускает только реальное собственное CFE Цепочка85, проверяет все три источника расширений. Нельзя просто убрать контроль расширений для выполнения в рабочей базе.
Как проверить результат
Продолжение: счетчик 1, точная строка расширение;база;после базы;, итоговый статус проверено.
Остановка: счетчик 0, строка расширение: остановлено;, после-обработчик не выполняется.
Каждая кнопка создает новый UUID формы: повторные проверки не используют предыдущий счетчик.
Неверный тип параметра Прервать85 отказывает на сервере до открытия.
Отсутствующее или чужое расширение отказывает в guard; не считайте такой запуск проверкой порядка.
Отдельно сопоставьте шаги отладки ПриОткрытииРасширения85 → базовый ПриОткрытии → ПослеБазового85; native методы сами не создают CFE.
Ожидаемый результат
Два специальных метода показаны на настоящей форме собственного расширения с независимым счетчиком базы и проверкой обеих ветвей.
На что обратить внимание
В обычной форме базовой конфигурации метод управления цепочкой применять нельзя по native примечанию.
Код не является примером &Вместо: это другой механизм.
Дополнительные расширения меняют цепочку, поэтому не допускаются.
Прервать цепочку не означает отменить открытие формы.
Не устанавливайте этот CFE в рабочую CF.
Расширение и UI здесь не применялись; все проверки статические.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.