Имя: Пароль:
1C
1С v8
Отображение формы длительной операции в ВебКлиенте
0 Perez512
 
30.01.20
09:44
8.3.16.1063, самописная конфигурация, работаем через веб.
Задача: перед открытием "тяжёлой" формы (через браузер открывается секунды 3-4) - показывать форму просто с текстовой декорацией "Пожалуйста, подождите", а после открытия "тяжёлой" формы - её закрывать.
Ок, сделал, в тонком клиенте всё работает, а в вёб клиенте эта форма не показывается. Не показывается, я так понимаю, пока ФормаПодождите.Открыть() и ФормаТяжелая.Открыть() находятся подряд, без ПодключенияОбработокОжидания, т.е.:

Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
ФормаПодождите=ПолучитьФорму(....);
ФормаПодождите.Открыть();//вот тут, по идее, она должна открыться и показывать "Пожалуйста, подождите" пока происходят длительные события ниже, но отображается она только в тонком клиенте, а в веб-клиенте - нет, ждёт, пока наступит КонецПроцедуры.

//тут заполнение параметров, для передачи в ФормаТяжелая
ФормаТяжелая=ПолучитьФорму(....);
//тут заполнение реквизитов ФормаТяжелая
ФормаТяжелая.Открыть();//при открытии закрывается ФормаПодождите

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

Пробовал:
* Открыть ФормаПодождите через подключение обработчика ожидания, но не вариант, иногда ТяжелаяФорма открывается быстрее (если в ней мало данных), чем срабатывает этот обработчик.
* ФормаПодождите.ОбновитьОтображениеДанных();
* ФормаПодождите.Активизировать();// вот, хочется, какой-то подобный вариант решения найти. Потомучто открывать ТяжелаяФорма через обработчик ожидания, с передачей всех необходимых ей параметров через "жопу" - не очень хочется...

Может, кто сталкивался уже с таким? Помогите, плиз!
1 Perez512
 
30.01.20
09:53
Попробовал поставить между открытиями форм ОбработкаПрерыванияПользователя(); тоже не помогает...
2 Cyberhawk
 
30.01.20
10:12
ПолучитьФорму // Тебе не поможет
3 DrWatson
 
30.01.20
10:12
#Если ВебКлиент Тогда
&НаКлиенте
Перем ФормаОжидания;
#КонецЕсли

&НаКлиенте
Процедура ОткрытьТяжелуюФорму(Команда)
    
    #Если ВебКлиент Тогда
        ФормаОжидания = ОткрытьФорму("Документ.МойДокумент.Форма.ФормаОжидания",, ЭтотОбъект);
        ЭтотОбъект.ПодключитьОбработчикОжидания("ТяжелаяФормаПослеОткрытияФормыОжидания", 0.1, Истина);
    #Иначе
        ТяжелаяФормаПослеОткрытияФормыОжидания();
    #КонецЕсли
    
КонецПроцедуры

&НаКлиенте
Процедура ТяжелаяФормаПослеОткрытияФормыОжидания()

    ОткрытьФорму("Документ.МойДокумент.Форма.ТяжелаяФорма");
    
    #Если ВебКлиент Тогда
        ЭтотОбъект.ПодключитьОбработчикОжидания("ТяжелаяФормаПослеОткрытияТяжелойФормы", 0.1, Истина);
    #КонецЕсли

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

#Если ВебКлиент Тогда
&НаКлиенте
Процедура ТяжелаяФормаПослеОткрытияТяжелойФормы()

    Если НЕ ФормаОжидания  = Неопределено Тогда
    
        ФормаОжидания .Закрыть();
        ФормаОжидания = Неопределено;
    
    КонецЕсли;

КонецПроцедуры
#КонецЕсли
4 Perez512
 
30.01.20
10:56
(3) Да, примерно так и придётся делать, только параметры заранее собирать и через переменную в ПроцедуруПодключенияОбработчикаОжидания передавать (там их дофига)...
И я сделал закрытие ФормыОжидания через Оповестить(..), наверное, переделаю через переменную, меньше ресурсов будет жрать, думаю.
Спасибо!