|
Выполнение длительного действия при открытии формы с возможностью прерывания | ☑ | ||
---|---|---|---|---|
0
TormozIT
гуру
14.05.15
✎
01:51
|
Есть форма (касается и обычных и управляемых), при определенных параметрах выполняющая длительное действие на клиенте при открытии. Хочется предоставить пользователю удобство в виде возможности прерывания этого необязательного действия, но чтобы форма при этом осталась открытой. Я полагал, что однократный обработчик ожидания в модуле формы здесь прекрасно решит задачу. Но в текущей позиции производителя такая возможность не предоставляется, т.е. прервать такой код невозможно и это причислили к особенностями http://its.1c.ru/db/v83doc/bookmark/dev/TI000001301. Причем для обработчика ожидания в модуле приложения такого ограничения нет.
Сейчас я вижу единственное обходное решение - использовать обработчик ожидания в модуле приложения, для чего придется "городить огород" с передачей в него параметров из формы через глобальные переменные. Возможно есть какой то другой, более красивый, способ? |
|||
1
mistеr
14.05.15
✎
03:35
|
> более красивый, способ?
Не выполнять длительных действий при открытии формы. Выполнять их до или после открытия. |
|||
2
PaulBC
14.05.15
✎
03:46
|
ОбработкаПрерыванияПользователя (UserInterruptProcessing)
Синтаксис: ОбработкаПрерыванияПользователя() Описание: Предназначен для прерывания работы встроенного языка при нажатии пользователем клавиши Ctrl+Break. |
|||
3
TormozIT
гуру
14.05.15
✎
08:22
|
(1) Что значит "после открытия"? Пользователю приходится каждый раз после открытия формы жать кнопку этого действия. Логичный вопрос он задает "зачем я ее жму каждый раз, когда итак понятно, что я ее буду нажимать?"
|
|||
4
TormozIT
гуру
14.05.15
✎
08:23
|
(2) В точку, бро. Именно об этом речь и идет. Этот метод не работает как обещано в обработчике ожидания формы.
|
|||
5
IVT_2009
14.05.15
✎
09:05
|
Проблема в том , что пользователь будет прерывать это действие почти в 100 процентах случаев. Смысла нет.
|
|||
6
TormozIT
гуру
14.05.15
✎
09:12
|
(5) Ошибаешься. Пользователю показывается индикатор завершенности действия. Если он видит что ему ждать 30 сек, а результат этого действия ему в данный момент не очень нужен, то он прервет. А в подавляющем большинстве случаев 1-3 секунды он готов подождать, чтобы увидеть сразу всю подготовленную информацию.
|
|||
7
ИС-2
naïve
14.05.15
✎
09:13
|
сделаю когда-нибудь свой велосипед - при открытии порождается фоновое задание, которое выполняется расчет.
При начале задания делается запись в РС. Форма, через обработчик ожидания, опрашивает регистр на предмет появления результата вычисления по данному фоновому заданию. Таким образом, форма открывается быстро, а через некоторое время заполнятся поля формы требующие вычисления |
|||
8
TormozIT
гуру
14.05.15
✎
09:24
|
(7) Фоновое задание - в рамках описанной цели еще больше "огород", чем обработчик ожидания в модуле приложения, тем более с добавлением регистра сведений да еще в файловой версии с таким вариантом будут сложности.
|
|||
9
asady
14.05.15
✎
09:26
|
(7)+1 механизм фоновых заданий во многом под это и заточен
|
|||
10
Lexey_
14.05.15
✎
09:45
|
(0) а ОбновлениеОтображения() не устроит с дополнительным флагом (для однократного выполнения)?
|
|||
11
Lexey_
14.05.15
✎
09:56
|
(10) а не, тоже не работает...
|
|||
12
TormozIT
гуру
14.05.15
✎
10:01
|
(10) В управляемой форме такого события нет. Для обычной формы такая же беда как и с обработчиком ожидания - не срабатывает ОбработкаПрерыванияПользователя.
|
|||
13
mistеr
14.05.15
✎
11:19
|
(8) Если бы мы разрабатывали в другой среде, то естественным решением было бы выполнение длительной операции в отдельном потоке. Но в 1С мы не можем явно создавать потоки. Вместо этого нам дали механизм фоновых заданий. И сказали: "Используйте их для выполнения длительных операций." Поэтому это не огород, а нормальное решение. Сложности в файловом режиме это сложности файлового режима.
|
|||
14
TormozIT
гуру
14.05.15
✎
13:17
|
(13) Огород потому что необоснованно сужает диапазон применимости решения. Мне нужна работа в т.ч. в файловом режиме на 8.2
|
|||
15
TormozIT
гуру
14.05.15
✎
13:18
|
(14) А способ с глобальной переменной и обработчиком ожидания в модуле приложения не сужает применимости решения.
|
|||
16
TormozIT
гуру
14.05.15
✎
13:20
|
(15) Точнее сужает =), но заметно меньше чем способ с фоновым заданием.
|
|||
17
mistеr
14.05.15
✎
21:33
|
(15) Ну сделай в файловом так, а в клиент-серверном эдак.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |