Этот метод требуется в сложных «многоуровневых» алгоритмах асинхронных вызовов, т.к. описание оповещения может быть сконструировано в начале алгоритма, а реальное использование этого обработчика может понадобиться через несколько вложенных процедур
Пример от туда же на картинке
Зачем использовать ВыполнитьОбработкуОповещения в этом примере, когда я просто могу вызвать процедуру ОбрабобкаКомандыЗаверешения()
(1)Т.к. описание оповещения передается в параметре, то в общем случае может быть несколько разных процедур "ОбработкаКоманды" в каждой из которых будет использоваться свое описание оповещения.
То есть, если есть разные команды, например, одна Удалить, вторая Добавить, и после ответа на вопрос, в каждой надо выполнить свою процедуру - и какая эта будет процедура указывается в описании оповещения.
(2) Смотрю код типовой ЕРП. Примерно 15000 раз используется ВыполнитьОбработкуОповещения. Но не как вы описали типа есть варианты после вопроса, а скорее как в примере с итс (на скрине). А если смотреть код с итс на скрине, то мне опять непонятно зачем использовать ВыполнитьОбработкуОповещения, можно просто вызвать что надо.
Функция ПечатьСПроверкойОтраженияВРеглУчете(ОписаниеКоманды) Экспорт
ПараметрыПечати = Новый Структура;
ПараметрыПечати.Вставить("ОписаниеКоманды", ОписаниеКоманды);
ПараметрыПечати.Вставить("ОбъектыПечати", ОписаниеКоманды.ОбъектыПечати);
ДокументыДляПроверки = ПараметрыПечати.ОбъектыПечати;
ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьПечать", ЭтотОбъект, ПараметрыПечати);
ДокументыБезПроводок = РеглУчетВызовСервера.ПроверитьПраваДоступаОтражениеДокументовВРеглУчете(ДокументыДляПроверки);
ПараметрыПечати.Вставить("ДокументыБезПроводок", ДокументыБезПроводок);
Если ДокументыБезПроводок.Количество() > 0 Тогда
ПроверкаОтраженияВРеглУчетеДиалогОтражения(ОписаниеОповещения);
Иначе
ВыполнитьОбработкуОповещения(ОписаниеОповещения);
КонецЕсли;
Возврат Истина;
КонецФункции
Показать
Ну тут то зачем ВыполнитьОбработкуОповещения? В чём смысл, кто объяснит? Тут даже нет ассинронных вызовов, нет сложных цепочек. Ничего нет, просто на ровном месте ВыполнитьОбработкуОповещения
(5) Тут для единообразия, например.
Если процедура из описания оповещения изменится, или параметры для нее, править нужно будет только в одном месте.
А если явно вызывать процедуру ПродолжитьПечать, то при изменении процедуры, править надо будет в 2х местах, как процедуру, так и параметры.
У всего есть плюсы и минусы.
Плюс - поддержка проще, минус - читаемость кода хуже.
(6) Ну это уж слишком притянуто за уши. Предполагается что имя не меняется, если уже поменялось то придётся шерстить всю конфигурацию и описаниеоповещения тут капля в море. А параметры и так тут в структуре в начале все описаны. Дичь какаято...
(7) не учитываете где дальше выполняется оповещение. Оно может передаваться через десятки вызовов и выполняться там, где вообще не ясно что вызывать. Но есть ОписаниеОповещения и этого достаточно.
Ну а ветка вызова из метода, где создано описание оповещения... А зачем тут напрямую вызывать метод, если уже создано описание оповещения? Так более логично и понятно. И поддержка кода более простая.
(8) Я правильно понимаю что пишу я такой код и бац "вообще не ясно что вызывать" а потом такой, ой у меня тут какоето описаниеоповещения. Дайка его попробую вызвать.
Я слабо себе представляю такой сценарий работы. Я всётаки предпочитаю чётко понимать что и где я вызываю. И если я знаю что буду вызывать, то почему бы не вызвать просто без ВыполнитьОбработкуОповещения.
И если я знаю что буду вызывать, то почему бы не вызвать просто без ВыполнитьОбработкуОповещения.
Просто еще не дошли до момента, когда это нужно. Привыкли вызывать напрямую.
Простой пример:
Делаете/дорабатываете общий модуль, в котором общий код для нескольких разных типов метаданных.
В котором нужно вызвать метод (формы), но имя метода для каждого типа может быть разный и заранее не известный.
Вот тут поможет описание оповещения.
Делаете/дорабатываете общий модуль, в котором общий код для нескольких разных типов метаданных.
В котором нужно вызвать метод (формы), но имя метода для каждого типа может быть разный и заранее не известный.
Я даже сомневаюсь что этот случай есть среди 15000 случаев использования ВыполнитьОбработкуОповещения в типовой ЕРП
Мы немного отвлеклись от сути вопроса. Я переформулирую его немного :)
Зачем разработчики из 1С в типовой ЕРП 15000 раз использовали ВыполнитьОбработкуОповещения?
Есть в этом какой-то сакральный смысл или это просто всё притянуто за уши.
(11) Тебя же не устроит ни один их вариантов ответа. Ты же пришел сюда не спрашивать, а донести своё Очень Ценное Мнение.
Вырази его наконец и разойдемся.
Ну ок. Тут написали, насколько я понял, несколько вариантов. В (6) для единообразия. Ну ок, меня устраивает такой вариант. Теперь я знаю что ВыполнитьОбработкуОповещения используется для единообразия. Все согласны? Расходимся? Мне надо просто поверить и не пытаться аргументировать и не дискутировать.
Ты же пришел сюда не спрашивать, а донести своё Очень Ценное Мнение.
Вырази его наконец и разойдемся.
В том то и дело что пока не могу сформулировать его для себя и поэтому сюда обратился.
Примечание:
Используется в реализации процедур, которые внутри себя могут открывать блокирующие окна (например, вызывать метод ПоказатьВопрос) и при этом должны каким-то образом вернуть свой результат в вызывающие процедуры.
15000 случаев использования в ЕРП, вероятно, предполагают выполнение методов, которые внутри себя могут открывать блокирующие окна.
Используется в реализации процедур, которые внутри себя могут открывать блокирующие окна (например, вызывать метод ПоказатьВопрос) и при этом должны каким-то образом вернуть свой результат в вызывающие процедуры.
Я вот это не понял. Может ктонить пример кода накидать?