Имя: Пароль:
1C
 
Безусловно установить параметр закрытия формы при закрытии в немодальном режиме
,
0 Fragster
 
гуру
11.03.15
14:21
Вот такая штука валит платформу:

Если открыть форму в псевдомодальном режиме:

ОткрытьФорму(ИмяФормы, ПараметрыФормы, ЭтаФорма,,,,ОписаниеОповещения, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

И закрыть ее вот так (чтобы в любом случае передавать параметр владельцу, даже при закрытии крестиком):
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    Закрыть(ПараметрЗакрытия); // ну, или ОповеститьОВыборе
КонецПроцедуры

То платформа падает. Пока обошел через обработчик ожидания и доп. переменную:

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    Отказ = Не ВозможноЗакрытие;
    ПодключитьОбработчикОжидания("ЗакрытьСоЗначением", 0.1, Истина);
КонецПроцедуры

Процедура ЗакрытьСоЗначением()
    ВозможноЗакрытие = Истина;
    ОповеститьОВыборе(ПараметрЗакрытия);
КонецПроцедуры

но это создает неприятную задержку. Возможно ли от нее избавится (доп кнопку сделал, но надо еще и стандартный крестик перехватить)?
1 Fragster
 
гуру
11.03.15
14:51
все заворожены падениями платформы?
2 crotnn
 
11.03.15
15:14
ЕМНИП, из процедуры ПередЗакрытием нельзя вызывать Закрыть, рекурсия начинается.
3 crotnn
 
11.03.15
15:32
(0) второй вариант немного изменить. Вот так работает:

&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
    Если НЕ ВозможноЗакрытие Тогда
        Отказ = Истина;
        ЗакрытьСоЗначением();
    КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ЗакрытьСоЗначением()
    ВозможноЗакрытие = Истина;
    Закрыть(Результат);
КонецПроцедуры
4 Fragster
 
гуру
11.03.15
16:11
(2) рекурсия, или нет, но если не указывать РежимОткрытияОкнаФормы.БлокироватьОкноВладельца, то все работает
2 + 2 = 3.9999999999999999999999999999999...