![]() |
|
Как инициировать вызов обработчика ошибки ОписанияОповещения? | ☑ | ||
---|---|---|---|---|
0
5jam
06.07.22
✎
09:29
|
Народ, всем привет!
Туплю, не пойму как работает ОписаниеОповещения и ПоказатьВопрос, вернее как запустить выполнение обработчика ошибки этого ОписанияОповещения. Пример: Платформа 8.3.18.1433 Создаю чистую конфу и делаю в ней обработку с УпрФормой, где вывожу команду "Показать вопрос", в обработчике которой создаю ОписаниеОповещения, которому, 1-м параметром указываю процедуру "ОбработчикОповещения", а 4-м параметром - процедуру "ОбработчикОшибки" Код: ОписаниеОповещ = Новый ОписаниеОповещения("ОбработчикОповещения", ЭтаФорма, , "ОбработчикОшибки", ЭтаФорма); Далее, вызываю код: ПоказатьВопрос(ОписаниеОповещ, ТекстВопр, РежимДиалогаВопрос.ПрерватьПовторитьПропустить, ,КодВозвратаДиалога.Повторить, Загол, ); а в ОбработчикеОповещения, если нажата кнопка "Прервать", выполняю деление на 0, что, в моем понимании и является той ошибкой, которая должна привести к вызову ОбработчикаОшибки. Но нет. ОбработчикОшибки НЕ вызывается, вместо этого идет показ стандартного окна "Деление на 0" с кнопками ОК и Подробно. Между тем, в СП относительно <ИмяПроцедурыОбработкиОшибки> сказано: "Имя экспортируемой процедуры модуля, которая будет вызвана в случае возникновения ошибки". Вопрос: в случае какой-такой ошибки может быть вызвана эта процедура-обработчик ошибки? Как инициировать вызов обработчика ошибки? Всех заранее благодарю за дельные комментарии!
|
|||
1
5jam
06.07.22
✎
09:31
|
Прошу админа исправить текст в тегах
, чтоб был похож на код. |
|||
2
youalex
06.07.22
✎
10:16
|
Я так понял, это нужно для обработки ошибки непосредственно асинхронного метода, когда поток не заходит в процедуру основного оповещения.
Например, в ТекстовыйДокумент.НачатьЗапись(), если имя файла указано неверно. |
|||
3
arsik
гуру
06.07.22
✎
10:47
|
(0) Ну а как ты хотел?
Вызывается асинхронная функция - например "Открыть форму". И из нее будет 2 выхода - или в ОбработчикОповещения или в ОбработчикОшибки. Ошибку ты генерируешь уже после этого выбора. ПоказатьВопрос - не может никак сгенерировать ошибку. |
|||
4
СеменовСемен
06.07.22
✎
11:14
|
Юзай ПоказатьВопрсоАсинх
|
|||
5
5jam
06.07.22
✎
11:23
|
(3) - Какой выбор? Как сделать выход в ОбработчикОшибки?
Сделал ОткрытьФорму(), а ПриЗакрытии() этой УФ сделал ошибку /0 - результат тот же: показывает "Деление на 0" и срабатывает ОбработчикОповещения. В ОбработчикОшибки НЕ выходит. |
|||
6
unbred
06.07.22
✎
11:26
|
в обычных формах это решается строчкой "ВызватьИсключение;"
|
|||
7
youalex
06.07.22
✎
11:40
|
(5)
> Как сделать выход в ОбработчикОшибки? Если ты уже зашел в Процедура ОбработчикОповещения(), то ничто не мешает тебе прямо вызвать эту функцию (или любую другую, доступную из текущего контекста). Зачем тебе именно ОбработчикОшибки, он нужен для асинхронной обработки ошибки самого асинхронного метода, по сути это такой костыль. |
|||
8
arsik
гуру
06.07.22
✎
11:47
|
(5) Ну видимо работает только для встроенных асинхронных функций типа "НачатьКопированиеФайла" и торгового оборудования в асинхронном режиме
|
|||
9
5jam
06.07.22
✎
11:57
|
(2) Да, хоть и не понял, что значит "процедуру основного оповещения",
но проверил, и действительно, попытка "ТекстовыйДокумент.НачатьЗапись(), если имя файла указано неверно" приводит к выходу в ОбработчикОшибки. Видимо в СП речь НЕ О ВСЕХ ошибках, а только о некоторых. Например, деление на 0 НЕ вызывает ОбработчикОшибки, а попытка записи ТекстДока с неверным именем файла - делает это. Неплохо бы разрабам оговорить в СП, что считается ошибкой, а что нет. Всем респект и благодарность. |
|||
10
ДедМорроз
06.07.22
✎
13:12
|
Обработка ошибок - это для ошибок,вызываемых исполнением самого асинхронного метода еще до его окончания.
Исполнение же основной процедуры оповещения происхрдит после окончания выполнения асинхронного метода,когда он выполнен успешно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |