Имя: Пароль:
1C
 
Данные формы коллекция как сделать индексы?
0 Web00001
 
26.03.19
08:28
Доброго времени суток! Имеем таблицу значений которая лежит на УФ. ТЗ имеет порядка 20 колонок и 700 строк в среднем. На форме она имеет тип соответственно "ДанныеФормыКоллекция". Конструкция вида: ТЗ.НайтиСтроки(Новый Структура("Поле1,Поле2", Значение1, Значение2)); приводит к замиранию на целых полсекунды. Из за чего при работе с формой возникает неприятный лаг. Если ли вариант как-то ускорить процесс? Потому, что как наложить индексы на "ДанныеФормыКоллекция" я не нашел.
1 Фрэнки
 
26.03.19
08:36
Я заново выводил на форму выбранную инфу, которая выбиралась из данных объекта, а не из данных формы
2 SleepyHead
 
гуру
26.03.19
08:37
(0) Выгрузить в ТЗ обычную, добавить индексы, искать. Продумать соответствие номеров строк меджду строками на форме и в ТЗ.
3 SleepyHead
 
гуру
26.03.19
08:38
Причем выгружать в ТЗ не все колонки таблицы, а только те, которые используются при поиске.
4 RomanYS
 
26.03.19
08:43
(0) где выполняется данная конструкция? Если на сервере, то возможно сам поход на сервер для такой формы занимает полсекунды и оптимизация поиска ничем не поможет.
5 Фрэнки
 
26.03.19
08:43
Просто по тексту топика не понятно, что должно происходить с данными формы коллекция после завершения поиска. Если ничего не должно происходить, а запускается некое иное действие, напрямую не изменяющее отображение на форме, то тогда и обрабатывать нужно не в данных формы, а в данных объекта так, чтобы это было без шараханья массивов данных со стороны сервера на форму клиента и обратно, например.
6 FIXXXL
 
26.03.19
08:49
(4) НайтиСтроки

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, мобильное приложение(клиент), мобильное приложение(сервер).
Вызов метода выполняет обращение к серверу.
7 Web00001
 
26.03.19
09:06
(1)(2)Не очень хочется на каждый чих ходить на сервер.
(5)Есть общая таблица с общими данным, пользователь щелкает по строкам получает в другой таблице, развернутую информацию.
(6)Это беда печаль конечно. Таблица лежит на клиенте, но что бы сделать поиск нужно все равно ходить на сервер. Очень плохо. Придется все переделывать, раз уж он все равно генерит обращения к серверу.
8 Кац
 
26.03.19
09:07
(7) не надо ходить на сервер чтобы найти строки. делайте на клиенте
9 Web00001
 
26.03.19
09:11
(8)Каким образом? Перебором? Единственный метод который делает поиск по коллекции генерит как выяснилось(слона то я и не заметил), неявное обращение к серверу.
10 Кац
 
26.03.19
09:12
(9) ТЗ.НайтиСтроки где делаете, на сервере или все же на клиенте?
11 Rovan
 
гуру
26.03.19
09:15
12 aleks_default
 
26.03.19
09:23
Видел на инфостарте свою реализацию индексов на клиенте с помощью соответствия.
13 Фрэнки
 
26.03.19
09:24
(10) перечитай еще раз текст в (6)
14 Кац
 
26.03.19
09:27
(13) я знаю про вызов сервера, но найтистроки на клиенте отрабатывает все равно быстрее
15 Фрэнки
 
26.03.19
09:28
(7) // Есть общая таблица с общими данным, пользователь щелкает по строкам получает в другой таблице, развернутую информацию.

Значит уже не нужно ничего искать. Данные строки уже должны содержать ссылки на элементы коллекции до момента клика
16 Фрэнки
 
26.03.19
09:30
(14) найти строки по значениям из коллекции в 700 строк и 20 столбцов за полсекунды - это довольно быстро :-)
17 Кац
 
26.03.19
09:47
(16) провел опыт.
тз на форме 5 колонок и 10 тыс. строк

тз.НайтиСтроки(Новый Структура("Реквизит1,Реквизит2","1", "2"))

на клиенте 3 милисекунды
на сервере 280 милисекунды

но
первый запуск метода на клиенте отрабатывает 1.5 секунды, далее 3 мс
18 1Сергей
 
26.03.19
09:58
(17) кеширование? не, не слышал
19 Кац
 
26.03.19
10:01
(18) оно самое
20 RomanYS
 
26.03.19
10:13
(7) Так если вопрос отображения, может просто отборы переключать?
21 Web00001
 
26.03.19
12:27
(10) Поиск происходит на клиенте. Вопрос в (0) как делать поиск быстро и не ходить при этом на сервер за ТЗ с индексами. Но судя по (6) и (11) никак
(17)Спасибо большое, но поиск от этого быстрее не стал.
(15) Как вариант
22 aleks_default
 
26.03.19
12:42
Вот примерно подобное. Правда это для дерева
http://catalog.mista.ru/public/538733/
23 Rema Dan
 
26.03.19
13:01
(0) Год назад спрашивал решение похожей проблемы тут: Оптимизация поиска в УФ с большим числом строк. Как в УФ хранить ТЗ только на сервере?
Основная проблема любого поиска на клиенте в том, что пока пользователь не увидел строчки на своём экране, то с большой вероятностью их на клиенте ещё нет. Любой поиск приводит сначала к получению всех строк на клиента (тот самый лаг первого поиска) и потом уже к поиску. Я свою проблему решил храня проиндексированную ТЗ во временном хранилище на сервере и получал номера нужных строк неконтекстным сетевым вызовом.
24 Rema Dan
 
26.03.19
13:03
(23) *неконтекстным серверным вызовом
25 Web00001
 
26.03.19
13:12
(23) >>пока пользователь не увидел строчки на своём экране, то с большой вероятностью их на клиенте ещё нет
Мне просто непонятно, если этих данных нет на клиенте, то где они? На сервере, если не тащить туда контекст их тоже нет.
26 Rema Dan
 
26.03.19
13:24
(25) На сервере всё есть. Контекстный вызов как бы "обновляет" данные сервера по последним данным клиента. В теории там вроде как есть оптимизация и на сервер передаются только изменившиеся с последнего вызова данные, но я бы не стал на это сильно надеятся.
27 Web00001
 
26.03.19
13:28
(26)Очень мило со стороны 1С ) "Я вам посылку принес, только я ее вам не отдам, потому, что у вас документОв нету".
28 Rema Dan
 
26.03.19
13:31
(27) С другой строноны, если в посылке приехало 18 контейнеров картошки, то для росписи в получения не требуется их предварительно разгружать. Т.е. при открытии документа с 100500 строками форма не висит.
29 Web00001
 
26.03.19
13:37
(28)Нет разговоров, когда данные изначально были на сервере и их надо перетащить на клиента. Вот тут нет вопросов. Все верно. Но когда изначально данные есть и имеют смысл только на клиенте.А на сервер должны попадать только в момент записи этих данных в БД, какой смысл гонять за их обработкой на сервер? Особенно если у меня там 100500 строк.
30 Rema Dan
 
26.03.19
13:46
(29) Все данные формы изначально есть на сервере. Клиент нужен чтобы их отрисовать и выполнять простенькие локальные расчёты по локальным данным. При разработке УФ нужно соблюдать баланс, чтобы и на клиента передавать как можно меньше данных, и чтобы при этом клиент мог проводить как можно больше локальных расчётов без лишних обращений к серверу.