Помогите понять ВыполнитьОбработкуОповещения

1. proger2021 27.04.24 12:05 Сейчас в теме
На ИТС написано.
Этот метод требуется в сложных «многоуровневых» алгоритмах асинхронных вызовов, т.к. описание оповещения может быть сконструировано в начале алгоритма, а реальное использование этого обработчика может понадобиться через несколько вложенных процедур


Пример от туда же на картинке

Зачем использовать ВыполнитьОбработкуОповещения в этом примере, когда я просто могу вызвать процедуру ОбрабобкаКомандыЗаверешения()
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Sashares 35 27.04.24 12:12 Сейчас в теме
(1)Т.к. описание оповещения передается в параметре, то в общем случае может быть несколько разных процедур "ОбработкаКоманды" в каждой из которых будет использоваться свое описание оповещения.

То есть, если есть разные команды, например, одна Удалить, вторая Добавить, и после ответа на вопрос, в каждой надо выполнить свою процедуру - и какая эта будет процедура указывается в описании оповещения.
3. proger2021 27.04.24 13:05 Сейчас в теме
(2) Смотрю код типовой ЕРП. Примерно 15000 раз используется ВыполнитьОбработкуОповещения. Но не как вы описали типа есть варианты после вопроса, а скорее как в примере с итс (на скрине). А если смотреть код с итс на скрине, то мне опять непонятно зачем использовать ВыполнитьОбработкуОповещения, можно просто вызвать что надо.
4. Sashares 35 27.04.24 13:09 Сейчас в теме
(3)Да, иногда можно. Тоже периодически задаюсь этим вопросом =)
5. proger2021 27.04.24 13:11 Сейчас в теме
Или вот яркий пример из типовой ЕРП

Функция ПечатьСПроверкойОтраженияВРеглУчете(ОписаниеКоманды) Экспорт

	ПараметрыПечати = Новый Структура;
	ПараметрыПечати.Вставить("ОписаниеКоманды", ОписаниеКоманды);
	ПараметрыПечати.Вставить("ОбъектыПечати", ОписаниеКоманды.ОбъектыПечати);
	
	ДокументыДляПроверки = ПараметрыПечати.ОбъектыПечати;
	
	ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьПечать", ЭтотОбъект, ПараметрыПечати);
	
	ДокументыБезПроводок = РеглУчетВызовСервера.ПроверитьПраваДоступаОтражениеДокументовВРеглУчете(ДокументыДляПроверки);
	ПараметрыПечати.Вставить("ДокументыБезПроводок", ДокументыБезПроводок);
	Если ДокументыБезПроводок.Количество() > 0 Тогда
		ПроверкаОтраженияВРеглУчетеДиалогОтражения(ОписаниеОповещения);
	Иначе
		ВыполнитьОбработкуОповещения(ОписаниеОповещения);
	КонецЕсли;
	
	Возврат Истина;
	
КонецФункции
Показать


Ну тут то зачем ВыполнитьОбработкуОповещения? В чём смысл, кто объяснит? Тут даже нет ассинронных вызовов, нет сложных цепочек. Ничего нет, просто на ровном месте ВыполнитьОбработкуОповещения
6. Sashares 35 27.04.24 13:34 Сейчас в теме
(5) Тут для единообразия, например.
Если процедура из описания оповещения изменится, или параметры для нее, править нужно будет только в одном месте.
А если явно вызывать процедуру ПродолжитьПечать, то при изменении процедуры, править надо будет в 2х местах, как процедуру, так и параметры.

У всего есть плюсы и минусы.
Плюс - поддержка проще, минус - читаемость кода хуже.
7. proger2021 27.04.24 13:39 Сейчас в теме
(6) Ну это уж слишком притянуто за уши. Предполагается что имя не меняется, если уже поменялось то придётся шерстить всю конфигурацию и описаниеоповещения тут капля в море. А параметры и так тут в структуре в начале все описаны. Дичь какаято...
8. spacecraft 27.04.24 13:50 Сейчас в теме
(7) не учитываете где дальше выполняется оповещение. Оно может передаваться через десятки вызовов и выполняться там, где вообще не ясно что вызывать. Но есть ОписаниеОповещения и этого достаточно.
Ну а ветка вызова из метода, где создано описание оповещения... А зачем тут напрямую вызывать метод, если уже создано описание оповещения? Так более логично и понятно. И поддержка кода более простая.
9. proger2021 27.04.24 13:55 Сейчас в теме
(8) Я правильно понимаю что пишу я такой код и бац "вообще не ясно что вызывать" а потом такой, ой у меня тут какоето описаниеоповещения. Дайка его попробую вызвать.
Я слабо себе представляю такой сценарий работы. Я всётаки предпочитаю чётко понимать что и где я вызываю. И если я знаю что буду вызывать, то почему бы не вызвать просто без ВыполнитьОбработкуОповещения.
10. spacecraft 27.04.24 14:01 Сейчас в теме
(9)
И если я знаю что буду вызывать, то почему бы не вызвать просто без ВыполнитьОбработкуОповещения.

Просто еще не дошли до момента, когда это нужно. Привыкли вызывать напрямую.
Простой пример:
Делаете/дорабатываете общий модуль, в котором общий код для нескольких разных типов метаданных.
В котором нужно вызвать метод (формы), но имя метода для каждого типа может быть разный и заранее не известный.
Вот тут поможет описание оповещения.
12. proger2021 27.04.24 14:43 Сейчас в теме
(10)
Делаете/дорабатываете общий модуль, в котором общий код для нескольких разных типов метаданных.
В котором нужно вызвать метод (формы), но имя метода для каждого типа может быть разный и заранее не известный.

Я даже сомневаюсь что этот случай есть среди 15000 случаев использования ВыполнитьОбработкуОповещения в типовой ЕРП
11. proger2021 27.04.24 14:35 Сейчас в теме
Мы немного отвлеклись от сути вопроса. Я переформулирую его немного :)
Зачем разработчики из 1С в типовой ЕРП 15000 раз использовали ВыполнитьОбработкуОповещения?
Есть в этом какой-то сакральный смысл или это просто всё притянуто за уши.
13. user1880116 27.04.24 15:51 Сейчас в теме
(11) Тебя же не устроит ни один их вариантов ответа. Ты же пришел сюда не спрашивать, а донести своё Очень Ценное Мнение.
Вырази его наконец и разойдемся.
14. proger2021 27.04.24 16:32 Сейчас в теме
(13)

Тебя же не устроит ни один их вариантов ответа

Ну ок. Тут написали, насколько я понял, несколько вариантов. В (6) для единообразия. Ну ок, меня устраивает такой вариант. Теперь я знаю что ВыполнитьОбработкуОповещения используется для единообразия. Все согласны? Расходимся? Мне надо просто поверить и не пытаться аргументировать и не дискутировать.

Ты же пришел сюда не спрашивать, а донести своё Очень Ценное Мнение.
Вырази его наконец и разойдемся.

В том то и дело что пока не могу сформулировать его для себя и поэтому сюда обратился.
15. VmvLer 27.04.24 16:42 Сейчас в теме
(14) в СП же есть аргумент

Примечание:
Используется в реализации процедур, которые внутри себя могут открывать блокирующие окна (например, вызывать метод ПоказатьВопрос) и при этом должны каким-то образом вернуть свой результат в вызывающие процедуры.


15000 случаев использования в ЕРП, вероятно, предполагают выполнение методов, которые внутри себя могут открывать блокирующие окна.
16. proger2021 27.04.24 16:52 Сейчас в теме
(15)
Используется в реализации процедур, которые внутри себя могут открывать блокирующие окна (например, вызывать метод ПоказатьВопрос) и при этом должны каким-то образом вернуть свой результат в вызывающие процедуры.


Я вот это не понял. Может ктонить пример кода накидать?
17. user1880116 27.04.24 17:23 Сейчас в теме
(16)
Может ктонить
Читай рекомендации вендора https://its.1c.ru/docs/v8nonmodal/ в части "Вопрос во вложенной процедуре, после которой есть код"
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот