Имя: Пароль:
1C
1С v8
УФ НачальноеОтображениеДерева - сколько элементов, столько и обр. к серверу?
,
0 Rounder
 
14.09.12
16:03
УФ
Есть ДинамическийСписок. Режим отображения - дерево.
Прописываю НачальноеОтображениеДерева.РаскрыватьВсеУровни. В итоге получаю сколько элементов в списке, столько и обращений к серверу. Так и должно быть? Если да - то почему?
1 vmv
 
14.09.12
16:13
Сервер обходит все уровни классической рекурсией - так ему дали тупую команду: "Раскрыть все уровни"

чему ты удивляешься, дложно быть по другому?
2 Rounder
 
14.09.12
16:19
Ну когда я на клиенте понятно. Но если я на сервере в ПриСоздании - разве это не должно быть в одном вызове?
3 kible
 
14.09.12
16:28
(2) Добавь команду на форму. В процедуре на клиенте вызови процедуру на сервере и напиши НачальноеОтображениеДерева.РаскрыватьВсеУровни. Посмотри сколько вызовов сервера будет.
4 Rounder
 
14.09.12
16:39
(3) Я так полагаю НачальноеОтображениеДерева.РаскрыватьВсеУровни оно потому и начальное отображение - что раскрывает уровни до того как отобразит список?
5 Defender aka LINN
 
14.09.12
16:46
(4) Нет
6 Rounder
 
14.09.12
16:52
Тогда что я делаю не так?

&НаКлиенте
Процедура КомандаРаскрытьВсеУровни(Команда)
   РаскрытьУровниНаСервере();
КонецПроцедуры

&НаСервере
Процедура РаскрытьУровниНаСервере()
   Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни;
КонецПроцедуры

Вызов сервера конечно же один. Но список остается неизменным. С открытым верхним уровнем как и был.
7 acsent
 
14.09.12
16:55
начальное отображение не раскрывает никаких уровней
8 vmv
 
14.09.12
16:55
(6) это свойство актуально при создании формы, чувак
9 Rounder
 
14.09.12
16:57
(7) (8) Именно об это я и написал в (4).
Однако мне в (5) возразили.
10 Rounder
 
14.09.12
16:59
Т.е. получается где бы я не устанавливал это свойство - я при открытии списка получаю N вызовов сервера, где N стремится к количеству элементов списка.
11 ChAlex
 
14.09.12
17:03
(9) - ну так мало ли кто чего может считать.
(10) - не знаю сколько обращений к серверу делается, но вообще-то чего им баловаться? Кроме как ПриСозданииНаСервере оно пофиг (ну при открытии можно как-то управлять) - потом - вилы, оно не приводит ни к чему. А если ты считаешь количество обращений к серверу в этом событии - то у меня вопрос: а как ты это делаешь? Ведь событие само обрабатывается на сервере. В каком это месте вы просчитали эти самые вызовы?
12 Rounder
 
14.09.12
17:05
(11) Все очень просто. Есть окошко, показывающее в режиме отладки Общее и текущее кол-во вызовов к серверу.

Даже при Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; в ПриСозданииНаСервере я получаю порядка 70 лишних вызовов к серверов.
13 ChAlex
 
14.09.12
17:09
(12) - ну чего, вызов сервера из сервера - чем мешает?
14 Rounder
 
14.09.12
17:11
(13) Тем что в этом случае список открывается 3-4 секунды. А это нуегона...
15 ChAlex
 
14.09.12
17:16
(12) -  у меня ощущение, что вы путаете причину и следствие. Если вы смотрите на окошко Показатели производительности - то оно не зависит от того отладка это или нет и прочее, и тем более оно не считает количество вызовов в каких-то процедурах. Развернутое дерево - жрет много ресурсов. А разворачивается оно по мере подчитывания данных. Если попробуете раскрыть дерево справочника в котором порядка 5000 строк - то это времяя затянется ну так секунд на 10-15, а то и больше. Ждите - может когда и дойдут руки у разработчиков до оптимизации дерева значений, но надежд пока мало
16 Rounder
 
14.09.12
17:20
(15) Но главное - что показать юзеру развернутое дерево - "дорогое" удовольствие. А жаль.
17 Rounder
 
14.09.12
17:24
Кстати - вполне можно попробовать оптимизировать и самому. Если руки дойдут. На эту мысль натолкнуло то, что очень шустро открывается любая выбранная строка нижнего уровня. Т.е. я при открытии формы выбора подразделений организации устанавливал ТекущуюСтроку на основное подразделение организации пользователя. И дерево открывалось (с одной полностью открытой веткой) без всяческих видимых задержек в сравнении с полностью закрытым деревом.
18 ChAlex
 
14.09.12
17:26
(16) - да это так. Недоделка 1С - да это тоже так. Можно ли было бы этого избежать - возможно да , а возможно идеология реализации модели платформы не позволяет - тут не скажу. Чисто с точки зрения логики - наверное можно было бы лучше это делать. Ведь просто список подчитывается динамически, а дерево - нет (читает и ищет все ветки).
(17) - ничего не получится. Открывается быстро в режиме не разворачивать или разворачивать только верхний уровень. Остальное вилы - пробовал уже (хотелось как в обычном интерфейсе отображать справочники с деревом) - в результате сделал кнопки на выбор и вида и предложение пользователю выбрать самому - или красоту или быстроку. :)
19 ChAlex
 
14.09.12
17:34
Иерархический справочник с 5000 строк открывается уже 3 минуты - еще не открылся. :) Так что лучше для больших списков это не делать.
20 Rounder
 
17.09.12
12:59
Может у кого есть объемный иерархический справочник, который вы не выводите в виде полностью раскрытого дерева в виду тормознутости раскрытия всех уровней?
Попытался оптимизировать раскрытие уровней - но на малых справочниках выигрыш не велик. А больших нет и создавать не хочется. (предполагается выигрыш раза в два в зависимости от специфики справочника)
Готов кто-нибудь потестить?
21 ChAlex
 
17.09.12
18:11
(20) - ну есть у меня большой. А в чем собственно оптимизация то?
22 vmv
 
17.09.12
20:39
да предложение теста в корне глупо с точки зрения только объема таблицы базы данных, можно подумать, что коээфицент производительности зависит только от жира таблицы - как дети прям
23 ChAlex
 
18.09.12
10:09
(22) -  в данном случае - напрямую. Кроме всего из маленьких складывается большое. Так что недооценивайте мелочи
2 + 2 = 3.9999999999999999999999999999999...