|
Аналог "Состояние()" в управляемом приложении | ☑ | ||
---|---|---|---|---|
0
YF
25.11.11
✎
10:30
|
Имеем управляемое приложение и тонкий клиент.
Отчет с управляемой формой. В форме выбираются параметры отчета затем они передаются в процедуру модуля отчета, выполняемую на сервере. Процедура долгая, может быть минуту, может больше формирует отчет. После выполнения процедуры получаем сформированный табличный документ. Как во время выполнения процедуры на сервере давать пользователю понять, что программа не висит, а работает. В обычном приложении помогала Состояние() выводишь там счетчик, он "бежит" - пользователь видит, что работа идет... А как в управляемом приложении сделать такое, при условии, что работа происходит на сервере? |
|||
1
Wobland
25.11.11
✎
10:34
|
Глобальный контекст (Global context)
Состояние (Status) Доступность: Тонкий клиент, веб-клиент, толстый клиент. что, не работает? |
|||
2
CepeLLlka
25.11.11
✎
10:38
|
Вот как я использую это...
Текст = Новый ТекстовыйДокумент; Текст.Прочитать(ИмяФайла); ШагИндикатора = 100/Текст.КоличествоСтрок(); Индикатор = ШагИндикатора; Для к = 1 по Текст.КоличествоСтрок() Цикл Стр = Текст.ПолучитьСтроку(к); МассивЭлементов = РазложитьСтрокуВМассивПодстрок(Стр); Состояние("Выполняется загрузка контрагента - "+МассивЭлементов[0], Индикатор,,БиблиотекаКартинок.ДлительнаяОперация48); СоздатьКонтрагента(МассивЭлементов, Группа); Индикатор = Индикатор + ШагИндикатора; КонецЦикла; |
|||
3
orefkov
25.11.11
✎
10:39
|
(1)
Ему на сервере надо... |
|||
4
acsent
25.11.11
✎
10:41
|
||||
5
CepeLLlka
25.11.11
✎
10:41
|
На сервере никак.. в любом случае данные должны бегать с сервера на форму чтобы дать понимать..
Состояние() работает на Клиенте. в моём примере процедура исполняется на клиенте, и в цикле вызывает процедуру исполняемую на сервере.. вот. |
|||
6
Wobland
25.11.11
✎
10:41
|
(3) хм.. клиент же в таком случае должен как-то знать, сколько сервер уже обработал? в цикле всё время спрашивать?
|
|||
7
Maxus43
25.11.11
✎
10:41
|
Текстовое поле на клиенте со словами "Идёт обработка..." выводи перед началом процесса)
|
|||
8
CepeLLlka
25.11.11
✎
10:42
|
(4) Фигасе..
|
|||
9
Wobland
25.11.11
✎
10:43
|
(4) спасибо
|
|||
10
Defender aka LINN
25.11.11
✎
10:46
|
(5) "в цикле вызывает процедуру исполняемую на сервере" - расстрелять
|
|||
11
Defender aka LINN
25.11.11
✎
10:46
|
+(10) Автора статьи в (4) - тоже.
|
|||
12
orefkov
25.11.11
✎
10:47
|
(4)
То есть вместо одного длинного вызова сервера сделать кучку мелких? Так сказать, "запрос в цикле". 1С в своем репертуаре :) Все нормальные люди показывают анимированную гифку, где ченить крутиться, и не парятся по этому поводу. А 1С что, не умеет? |
|||
13
acsent
25.11.11
✎
10:48
|
(10) Есть более лучшие предложения? Экономить пару вызовов сервера и терять при этом отражение прогресса?
|
|||
14
ДенисЧ
25.11.11
✎
10:50
|
мда...
Дебилизм разработчиков 1с во всей красе... коллбеки не предусмотрели... |
|||
15
Escander
25.11.11
✎
10:51
|
(12) кроме того в веб-клиенте ОбновитьОтображениеДанных() обновит прогресс бар только при выходе из клиентской процедуры
|
|||
16
Defender aka LINN
25.11.11
✎
10:51
|
(13) Пару? Или пару сотен?
(12) А при чем тут 1С? Это (4) отложил код :) |
|||
17
orefkov
25.11.11
✎
10:53
|
(13), (14)
Да проблема высосана из пальца. В веб серверах тоже никаких колбеков нету, и никого это особо не парит. |
|||
18
acsent
25.11.11
✎
10:53
|
(17) В вебе не бывает процессов на несколько часов
|
|||
19
acsent
25.11.11
✎
10:54
|
(16) И даже если пару сотет или пару тысяч. В общем счете - это вообще мизер
|
|||
20
Defender aka LINN
25.11.11
✎
10:56
|
(18) И как тебе поможет отображение процесса, которое еще и время выполнения увеличит?
|
|||
21
VVi3ard
25.11.11
✎
10:56
|
В 4 нормальный подход, если принять для себя что нет смысла отображать изменения более 1% то за все время работы сервер будет вызван 100 раз в не зависимости от количества обрабатываемых данных.
|
|||
22
Defender aka LINN
25.11.11
✎
10:56
|
(19) Хорошо, что я в твоем коде копаться не буду...
|
|||
23
Defender aka LINN
25.11.11
✎
10:57
|
(21) Это 100 совершенно ненужных серверных вызовов, которые можно заменить одним.
|
|||
24
acsent
25.11.11
✎
10:58
|
(20) Вместо часа допустим будет час 05, но зато видно что работа кипит
|
|||
25
VVi3ard
25.11.11
✎
10:58
|
(20) 100 вызовов сервера без контекста увеличат время выполнения ну от силы на 15 секунд. Не вижу проблем никаких.
|
|||
26
orefkov
25.11.11
✎
10:58
|
(18)
Ну, хотели настоящий классический "клиент-сервер" - получите, со всеми плюсами, и минусами. "Любишь медок - люби и холодок". Хотя 1С могла бы и доработать движок, чтобы хотя-бы "Состояние" работало на сервере. |
|||
27
VVi3ard
25.11.11
✎
10:59
|
Да какой час 05 10-15 секунд МАКСИМУМ вы же без контекста сервер вызываете
|
|||
28
aleks-id
25.11.11
✎
10:59
|
поставь вместо прогресса анимированную гифку на которой баба сисками трясет. это для сотрудника. для сотрудниц - мужика.
|
|||
29
Defender aka LINN
25.11.11
✎
11:01
|
А я-то надеялся, что после того, как код принудительно разделили на клиентский и серверный, одинэснеги проникнутся и ВНЕЗАПНО начнут писать руками... Какой же я наивный...
|
|||
30
YF
25.11.11
✎
11:09
|
Да, вижу, что только решение из (4) ...
Но, а как тогда штатная СКД рисует прогресс бар в форме? |
|||
31
Defender aka LINN
25.11.11
✎
11:12
|
(30) "Штатная СКД" уже ХЗ сколько времени отчеты вообще фоново выполняет. И без всяких прогресс-баров.
|
|||
32
YF
25.11.11
✎
11:15
|
(31) Отстал я от жизни
|
|||
33
CepeLLlka
25.11.11
✎
11:18
|
(27) Да.. именно так.. как у GROOVY в обучении.. всё без конекста и ок.. у меня кароче всё быстро работает.. я хз.
У меня просто обработка по загрузке контрагентов.. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |