Имя: Пароль:
1C
1С v8
Получить строки выше и ниже ОформленияСтрок
0 Septera
 
15.03.19
15:42
Доброго времени суток!
Обычные формы, платформа 8.3.10.2772. Хочу сделать предзагрузку данных в кэш чтобы выводить информацию из кэша при обработке события ПриПолученииДанных табличного поля СправочникаСписка. Как получить строки которые находятся выше и ниже текущих получаемых из ОформленияСтрок?
1 Septera
 
15.03.19
15:44
Наверное надо получить текущую сортировку и запросом получить ПЕРВЫЕ выше и ниже первой и последней строки с такой же сортировкой
2 RomanYS
 
15.03.19
15:45
(1) А можно исходную задачу озвучить?
3 Rema Dan
 
15.03.19
15:46
(0) По хорошему никак. Порядок строк в списке зависит от фильтров/сортировки/иерархии. В теории можно всё это разробрать, собрать запрос и попытаться вычислить следующие строки, но лучше пересмотреть идею кеширования. Что кешируем то?
4 ssh2006
 
15.03.19
15:50
(0) городилово какое то
5 Septera
 
15.03.19
15:50
(2) Юзер открывает форму подбора товара, нажимает на сортировку по наименованию, вводит первые символы наименования и ему отображается часть товара, начинает листать вниз и происходят зависания потому что ПриПолученииДанных выполняются тяжелые запросы. Оптимизировать запросы не вариант, все что можно уже выжал. Поэтому и хочу получить сразу 100 строк вниз например.
6 RomanYS
 
15.03.19
15:55
(5) Если сами запросы оптимизировать дальше некуда, возможно стоит озаботиться хранением промежуточных данных.

Размер справочника какой - может целиком в кэш?
7 Septera
 
15.03.19
15:59
(3) фильтр и сортировку не проблема получить, а текущий каталог как? проверить включен иерарх просмотр и получить текущего родителя любого товара из ОформленияСтрок?
8 Mort
 
15.03.19
15:59
Листание это дурная привычка. Попробуй разобраться почему пользователю приходится листать, может ему не хватает инструментов поиска?
9 Septera
 
15.03.19
16:00
(6) 200 тыс. товаров, для каждого товара надо отображать 5 типов цен, остатки с 4 складов и 4 свойства
10 Septera
 
15.03.19
16:02
(8) первое что сделал сказал что вы страдаете херней давайте поиск по частям слов, зачем искать глазами? в итоге переубедить не получилось - это привычка выработанная в течении 6 лет работы...
11 Rema Dan
 
15.03.19
16:04
(9) Всё перечисленное можно весьма оперативно получать из текущих итоговов. Возможно, что всё таки есть ещё что выжать из запросов. На крайняк можно всё это рассчитывать фоном/регламентом и помещать в какой-нибудь регистр сведений для быстрой выборки.
12 Rema Dan
 
15.03.19
16:05
(7) Из ОформленияСтрок никак, но можно получить всё это из свойств табличного поля СправочникаСписка.
13 Mort
 
15.03.19
16:07
Я уже давно не занимался обычными формами. А нельзя ли игнорить часть "ПриПолученииДанных" путем обработчика ожидания? Т.е. откладываем расчет полей на обработчик ожидания с задержкой 0.1, а в обработчике вызывает обновить ТП и уже обрабатываем "ПриПолученииДанных" нормально?
14 Ёпрст
 
15.03.19
16:09
(9) фигня какая..
Ну закешируй всё, если памяти не жалко, будет не быстро, а очень быстро
15 Septera
 
15.03.19
16:10
(11) Усё выжато, это прям вот в серверный модуль отправляются параметры, а там происходит анализ количества товаров для которых нужно получить, если товар один то "=" если массив то "В", а потом пакетом выбираются и подготавливаются данные. Скорость выполнения тестировали в консоле замером производительности. Насчет регистра это слишком фундаментально.
16 Septera
 
15.03.19
16:19
(13) то есть ПриПолученииДанных добавляем обработчик ожидания и в него засовываем обработку ОформленияСтрок? шило на мыло мне кажется, все равно будут запросы и ожидание
17 mikecool
 
15.03.19
16:21
когда то давно - лет 5-8 назад обсуждалось
при листании сбрасываем обработчик ожидания, как прекратили листать - срабатывает обработчик и вызывает ПриПолученииДанных
18 mikecool
 
15.03.19
16:22
у меня в моих темах где то есть и хорошее решение там есть
19 mikecool
 
15.03.19
16:23
как искать только в своих темах - я хз )
20 Ёпрст
 
15.03.19
16:26
Проще (14).
21 RomanYS
 
15.03.19
16:30
(14) Так заполняться 200 тыс долго будет, а остатки неплохо бы обновлять.
(17) Норм идея, а зачем искать - добавить флаг, поднимать в обработке ожидания, при опущенном ПриПолученииДанных - возврат. Вроде всё просто
22 mikecool
 
15.03.19
16:31
(21) да какой то затык был, в теме решение было без затыков
23 Ёпрст
 
15.03.19
16:32
(21) ну хз, пару милисекунд, не долго
24 sieben
 
15.03.19
16:33
(16) Жестокий костыль:
- при активизации строки регистрировать отложенный обработчик и сбрасывать некий флаг
- в отложенном обработчике устанавливать флаг и принудительно вызывать обновление для получения данных
- в обработчике получения данных, если нет флага, ничего не делать. если есть - получать данные и сбрасывать флаг обратно

Как-то так.
25 RomanYS
 
15.03.19
16:34
(23) Засунуть результат запроса в 200 тыс строк в кэш-соответствие - 2 мс?
26 sieben
 
15.03.19
16:40
(16) Костыль попроще:
- Показыыать в списке только то, что надо.
- Вычисляемые данные текущей строки показывать в отдельном окне через обработку ожидания активизации
27 Ёпрст
 
15.03.19
16:45
(25) да
28 Ёпрст
 
15.03.19
16:47
запрос выгрузить() + добавить индекс. Это всяко быстрее, чем ловить скролинг обработками ожидания
29 Rema Dan
 
15.03.19
16:55
(15) Звучит как попытки самостоятельно решить кодом 1С проблемы, которые должна решать СУБД. Может тогда для скорости стоит наоборот убрать немного "оптимизаций"?
(16) Разница в том, что для пользовователя список "не лагает". Лагают только колонки с остатками товаров. Да и запросов становится значительно меньше, т.к. остатки получаются не каждый скролл, а только в момент остановки.
30 RomanYS
 
15.03.19
17:15
(27) 200к строк по 100 байт это 20МБ. Только передать их через гигабитную сеть на клиент - 160 мс, а данные ещё надо прочитать и обработать средствами (медленной) 1с на клиенте. Может мы всё таки про секунды говорим, а не про мс?
31 Ёпрст
 
15.03.19
18:02
(30) Какой в жж..у клиент на оф ? Все тупо сидят в терминале на одном сервере.
32 RomanYS
 
15.03.19
18:24
(31) т.е. продолжаешь утверждать, что запрос на 200к записей с 13 соединениями(9 из которых с виртуальными таблицами) можно выполнить за 2 миллисекунды. Можно железо озвучить вашего "терминального сервера"?
33 Ёпрст
 
15.03.19
18:38
(32) древний ксенон 5699, гигов 160 оперативки, рейд на серверных ссд под систему и отдельно на базы
34 Ёпрст
 
15.03.19
18:38
5690
35 RomanYS
 
15.03.19
19:25
(33) тестить будем)?
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший