Имя: Пароль:
1C
1С v8
УТ 11. Вопрос перед закрытием формы.
0 Вельможа
 
21.04.19
13:25
Здравствуйте.
УТ 11.4. В расширении конфы при попытке пользователем закрыть форму нужно спросить у него, точно ли он это хочет сделать в зависимости от некоторого условия.
Вопрос ему задаю с помощью ПоказатьВопрос(). То есть, он пытается закрыть форму, а перед этим ему должен быть задан вопрос вида "Ты точно этого хочешь" и кнопки да/нет. Но, вопрос-то появляется, а форма все равно сразу после появления вопроса закрывается. В итоге у пользователя остается висеть вопрос о закрытии формы, хотя она уже закрылась.
Как сделать так, чтобы форма ждала ответа пользователя?
1 Mort
 
21.04.19
13:32
1. Флажок что мы точно закрываем форму. Если флажка не стоит - перед закрытием отказ.
2. Корректно обработать завершение работы - там при отказе свой диалог появляется.
2 Вельможа
 
21.04.19
13:34
(1), переменную отказ в расширении менять нельзя. В этом вся соль.
3 Вельможа
 
21.04.19
13:47
Пока не задашь вопрос, не решишь задачу))
Переменную отказ можно менять в обработчике расширения ПЕРЕД. В ПОСЛЕ уже нельзя.
Вот так решил задачу.

&НаКлиенте
Перем МожноЗакрыть;

&НаКлиенте
Процедура СформироватьОтветНаВопрос(Ответ, ДополнительныеПараметры)Экспорт
    Если Ответ = КодВозвратаДиалога.Да Тогда
        МожноЗакрыть = Истина;
        ЭтаФорма.Закрыть();  
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура РасшВОТ_ПередЗакрытиемПеред(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
    Если МожноЗакрыть <> Неопределено Тогда Возврат; КонецЕсли;
    Если НЕ Объект.ОплатаВыполнена Тогда
        ПоказатьВопрос(Новый ОписаниеОповещения("СформироватьОтветНаВопрос", ЭтотОбъект), "Братан, ты точно этого хочешь?", РежимДиалогаВопрос.ДаНет);
        Отказ = Истина;
    КонецЕсли;
КонецПроцедуры
4 Сияющий в темноте
 
22.04.19
11:36
(1)можно и завершение также отменить и показать свой диалог,просто,после диалога нужно не форму закрывать,а работу завершать.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.