Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Отображение формы длительной операции в ВебКлиенте

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

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

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

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

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

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

&НаКлиенте
Перем ФормаОжидания;
#КонецЕсли


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

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

        ТяжелаяФормаПослеОткрытияФормыОжидания();
    #КонецЕсли

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

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

    ОткрытьФорму("Документ.МойДокумент.Форма.ТяжелаяФорма");
    
    #Если ВебКлиент Тогда

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


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

#Если ВебКлиент Тогда

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

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

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

Список тем форума
Рекламное место пустует  Рекламное место пустует
Здесь можно задать вопрос "Как сделать?" и получить кучу ответов, что тебе это делать не надо. Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.