Отказ от модальности. Баг в типовых конфигурациях

Опубликовал taurus taurus (taurus_) в раздел Программирование - Ошибки в отраслевых решениях

Не буду расписывать про сам отказ от модальности. Думаю если Вы это читаете, то уже знаете о чем речь. Дело в том, что при рефакторинге некоторых обработок я столкнулся с багом, который, как мне кажется есть почти во всех типовых конфигурациях.

Предположим, что во внешней обработке на форме в событии "ПриОткрытии" использовалась комбинация "Ответ = Вопрос(...)", которую в результате рефакторинга заменили на "ПоказатьВопрос(Новый ОписаниеОповещения(...), ...)". Если эту обработку открыть через "Файл -> Открыть...", то код нормально отрабатывает, вопрос задается и ответ на вопрос обрабатывается. Если же эту обработку поместить в "Дополнительные отчеты и обработки", то в этом случае при открытии обработки вопрос "моргает" (появляется и тут же исчезает). Я не случайно выделил в тексте название события, так как если использовать "ПоказатьВопрос" уже в открытой форме обработки (например, по кнопке), то он работает нормально.

Решил проблему следующим образом:

&НаКлиенте
Процедура ПриОткрытии(Отказ)

    ПодключитьОбработчикОжидания("ПроцедураОбработчикаОжидания", 1, Истина);

КонецПроцедуры

&НаКлиенте
Процедура ПроцедураОбработчикаОжидания()

    ОписаниеОповещения = Новый ОписаниеОповещения("ВопросПриОткрытии", ЭтотОбъект);
    ПоказатьВопрос(ОписаниеОповещения, "Текст вопроса", РежимДиалогаВопрос.ДаНет);

КонецПроцедуры

&НаКлиенте
Процедура ВопросПриОткрытии(РезультатВопроса, ДополнительныеПараметры) Экспорт

    // Текст процедуры

КонецПроцедуры

См. также

Комментарии
1. Виталий Черненко (SeiOkami) 582 25.09.14 07:17 Сейчас в теме
Только я не понял, зачем показывать вопрос подключением обработчика ожидания?
2. taurus taurus (taurus_) 21 25.09.14 08:58 Сейчас в теме
Потому что если сразу написать "ПоказатьВопрос", то окно с вопросом просто моргнёт и всё. Прочитайте внимательнее описание проблемы, попробуйте воспроизвести, сразу станет понятно. Может быть Вы найдёте другой способ решения?!
3. S nic (snic) 126 25.09.14 09:11 Сейчас в теме
Тоже самое с "ОткрытьФорму", если расположить в "ПриОткрытии".
Сначала открывается вызываемая форма, а потом форма объекта.
Так же использовал обработчик ожидания с параметром 0,3 сек.
4. Борис Нагорнов (b1958) 10 26.09.14 16:59 Сейчас в теме
А как решить похожий баг, возникающий при отказе от модальности?

Во внешней обработке на форме в событии "ПередЗакрытием" использовалась Помещен оператор "ПоказатьВопрос(Новый ОписаниеОповещения(...), ...), вместо просто "Вопрос(...".

В результате форма закрывается, а вопрос остается ждать ответа. И не понятно к какой форме он был задан. По-моему здесь самое правильное, чтобы форма закрывалась только после ответа на вопрос. А как это реализовать?

5. taurus taurus (taurus_) 21 26.09.14 23:25 Сейчас в теме
(4) b1958, вот здесь есть статья, в которой решается такая проблема в задаче №2. Пробовали так?
b1958; zoytsa; +2 Ответить 3
6. andr bat (zoytsa) 27.09.14 09:01 Сейчас в теме
(5) taurus_, спасибо, статья детально описывает несколько вариантов решения!
7. Борис Нагорнов (b1958) 10 01.10.14 17:02 Сейчас в теме
(5) taurus_, Спасибо за ссылку. Надо пробовать.
А как 1С-цы решают эту проблему? Как в статье?
Есть ли в типовых конфигурациях варианты?
8. Борис Нагорнов (b1958) 10 02.10.14 14:46 Сейчас в теме
(5) taurus_, Еще раз спасибо! Удалось получить нужный результат: форма не закрывается, пока не получен ответ на вопрос.
9. John Smith (PiccaHut001) 02.10.14 15:20 Сейчас в теме
(4) b1958, с рефакторингом 1с, как всегда, облажалась.
10. Яков Коган (Yashazz) 2036 03.10.14 11:47 Сейчас в теме
Ну, моделирование события "ПослеОткрытия" вообще много что помогает сделать, полезная штука. В ряде случаев, особенно при работе с разными асинхронами (не только псевдо-модальными), стартующими при открытии, это единственный выход.
11. Алексей Лапицкий (Lapitskiy) 816 07.06.15 12:20 Сейчас в теме
все гениальное просто.
Да, и по ссылке тоже полезная инфа.
Оставьте свое сообщение