Top.Mail.Ru
Full-time, 5/2
Формат: удаленный
Вакансия «1С-программист»

Управляемые формы: не срабатывает оповещение о закрытии формы

После появления управляемых форм и отключения в них модального режима какие-то данные из формы разработчики стали получать через описание оповещения, а точнее через параметр «ОписаниеОповещенияОЗакрытии» при открытии формы. Для того чтобы процедура, прописанная в этом параметре, получила необходимые данные важно принудительно закрыть форму, передавая туда данные.

В коде это обычно выглядит:

Параметры = Новый Структура;
Параметры.Вставить("Ключ", Заказ);
ОповешениеЗакрытия = Новый ОписаниеОповещения("ОтгрузитьЗаказОкончание", ЭтотОбъект, Параметры);
ОткрытьФорму("Документ.ЗаказКлиента.Форма.ФормаДокумента", Параметры, ЭтотОбъект,,,, ОповешениеЗакрытия, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

Далее создаем функцию, в которую будет возвращаться информация из формы:

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

    Если Результат = Неопределено Тогда
        Возврат;
    КонецЕсли;
    Заказ = Результат;
    Если ЗаказГотовКОтгрузке(Заказ) тогда
        СоздатьОтгрузкиПоЗаказам(Заказ);
    Иначе
        Сообщить(СокрЛП(Заказ) + " заказ не готов к отгрузке!");    
    КонецЕсли;
КонецПроцедуры

Добавляем код в самой форме:

&НаКлиенте
Процедура ЗакрытьОтложенно(Команда)
    Закрыть(ТекущийЗаказ);
КонецПроцедуры

Все это писали, всё это хорошо работает, но у вендора есть сюрприз. При принудительном закрытии формы из события «ПриОткрытии» оповещение о закрытии не срабатывает. И что же делать? Я знаю два пути обхода, один я нашел, второй придумал.

Первый способ

Можем воспользоваться функцией «ПодключитьОбработчикОжидания» при открытии формы, а в назначенной процедуре форму закроем.

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

&НаКлиенте
Процедура ЗакрытьОтложенно()
    Закрыть(ТекущийЗаказ);
КонецПроцедуры

Способ рабочий, но при нем форма все же открывается. Если в ней есть множество процедур до подключения обработчика, то она некоторое время висит, потом исчезает. Получается некрасиво.

Второй способ

Воспользуемся тем, что мы открыли форму и передали в нее оповещение закрытия формы. Можем получить его в самой форме (лежит в свойстве формы «ОписаниеОповещенияОЗакрытии») и выполнить напрямую, не открывая форму.

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

    Отказ = Истина;
    ВыполнитьОбработкуОповещения(ОписаниеОповещенияОЗакрытии, ТекущийЗаказ);

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

В этом случае пользователь даже не заметит попытку открытия формы.

Comments

So empty here ... leave a comment!

Добавить комментарий

Sidebar