Имя: Пароль:
1C
1С v8
Управляемые формы. Непонятные вызовы сервера.
0 guitar_player
 
09.01.13
11:48
Коллеги! С новым рабочим годом!
Может кто-нибудь сможет мне прояснить некоторые моменты работы упр. форм.

На управляемой форме расположено 2 дерева, есть реквизит - вспомогательная таблица, в которой хранится связь элементов этих деревьев.
При активизации строки в первом дереве, второе дерево раскрашивается в событии при активизации строки.

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


// покажу только кусок кода, на котором происходят лишнии вызовы

// 1 вариант - весь код выполняется на клиенте - самый быстрый вариант раскрашивания дерева (0.1). После открытия формы (активизация первой строки) в счетчике показывается порядка 40 вызовов сервера, при активизации остальных строк дополнительные вызовы сервера не делаются.

Для Каждого ЭлементКоллекции Из ТаблицаСвязи Цикл
   Если ЭлементКоллекции.Источник = Источник Тогда  
       Соответствие.Вставить(ЭлементКоллекции.Приемник, Истина);    
   КонецЕсли;
КонецЦикла;
   
// 2 вариант - весь код выполняется на клиенте - при активизации каждой строки в счетчике накапливается по 18 серверных вызовов. По времени  получение связи и раскрашивание занимает 0.25 сек.

Для Каждого ЭлементКоллекции Из ТаблицаСвязи.НайтиСтроки(Новый Структура("Источник", Источник)) Цикл
   Соответствие.Вставить(ЭлементКоллекции.Приемник, Истина);    
КонецЦикла;

// 3 вариант - выполняю все на сервере, отображается 1 вызов сервера, по времени занимает 0.89 сек (в замере 99% времени тратится на сам вызов)

Поясните пожалуйста, почему такое может происходить?
1 MadHead
 
09.01.13
11:58
Данные на тонком клиенте хранятся порциями(если говорить упрощенно то видимая область и еще немного) Когда ты оббегаешь циклом таблицу связей то клиенту приходится получать очередную порцию данных.
2 MadHead
 
09.01.13
12:07
Попробуй сделать через условное оформление
3 guitar_player
 
09.01.13
12:20
(1) Спасибо, про это я знал, но только сейчас понял почему в первом варианте делается много вызовов в самом начале, а затем не делается. А во втором варианте вызовы делаются каждый раз.
Но я до сих пор не могу понять почему контекстный вызов сервера (как в 3-ем варианте) отнимает столько времени и как его можно было бы облегчить...

(2) про условное оформление думал, спасибо, но для этого много чего переделать придется...
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан