Имя: Пароль:
1C
 
Возможно ли отказаться от закрытия управляемой формы в режиме без модальности?
0 Gorr
 
23.06.22
17:38
Как в режиме без использования модальности. Задать уточняющий вопрос и отказаться от закрытия формы?
Нечто наподобии Ответ = Ждать ВопросАсинх("Закрыть форму?"); в событии ПередЗакрытием формы?
1 lodger
 
23.06.22
17:48
&НаКлиенте
Асинх Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
    
    Если ЗавершениеРаботы Тогда
        Отказ = Истина;
        ТекстПредупреждения = "Несохраненные данные будут потеряны. Закрыть форму?";
    Иначе
        Ответ = Ждать ВопросАсинх("Закрыть форму без сохранения данных?", РежимДиалогаВопрос.ДаНет);
        Если Ответ = КодВозвратаДиалога.Нет Тогда
            Отказ = Истина;
        КонецЕсли;
    КонецЕсли;
    
КонецПроцедуры
2 Gorr
 
23.06.22
18:04
Этот вариант был практически первым. Сложность тут вот в чем: когда добавляется "Асинх" перед обработчиком события, форма успевает закрыться до того как происходит возврат из ВопросАсинх. Без "Асинх", использование внутри процедуры "Ждать" будет вызывать ошибку.
Есть подозрение что так будет с любым обработчиком события формы. т.е. "Подвесить любой обработчик события в режиме без модальности невозможно.
3 Gorr
 
23.06.22
18:07
Таким образом использовать "Асинх" в обработчиках формы нельзя. хотя в командах формы вполне себе работает.
4 ChiginAV
 
24.06.22
07:44
Тупое решение, но тем не менее...

Добавить параметр формы "ЗакрытиеФормыРазрешено" (по умолчанию ЛОЖЬ) и проверять его "ПередЗакрытием". Это не даст закрыть форму стандартными способами.
На форму добавить свою кнопку для закрытия. В ней реализовать все вопросы/обработчики и, если все ОК, то

ЗакрытиеФормыРазрешено = ИСТИНА;
Закрыть();
5 Irbis
 
24.06.22
08:07
(4) когда-то очень похожим образом поступали в "клюшках". Всё новое — это хорошо забытое старое.
6 Gorr
 
27.06.22
21:41
(4) суть как раз была в том, чтобы перехватить стандартный обработчик. но, так тоже можно.
Я сделал аналогично - добавил флаг "ЗакрыватьБезСохранения". Перед закрытием если не сохранили, Отказ + сообщение.