Имя: Пароль:
1C
1С v8
УФ Отбор в динамическом списке
0 ЛучшийПрограммер1С
 
27.07.23
12:50
Программно устанавливаю отбор в динамическом списке.

Список.Отбор.Элементы.Очистить();
Если ЗначениеЗаполнено(НомерПартии) Тогда
    ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерПартии");
    ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
    ЧтоИскать = СтрЗаменить(НомерПартии, " ", Символы.НПП);
    ЭлементОтбора.ПравоеЗначение = ЧтоИскать;
    ЭлементОтбора.Использование = Истина;
КонецЕсли;

И ситуация такая. Если данных много, за два-три месяца, то поиск идёт только за последний месяц где-то.
Строка с нужным номером партии есть в списке. Но её не находит.
Скажем строка за май.
При выборке - параметрами задаётся период
- если выборка май-июль, то не находит.
- если же март-май, то находит.
1 ЛучшийПрограммер1С
 
27.07.23
13:00
Я немного поэкспериментировал. Суть в том, что она ищет записи нужные, но очень долго.
Если они в начале списка, то находит быстро, а если далеко то очень долго, то есть несколько минут или даже часов.
Как бы ускорить это?
2 ЛучшийПрограммер1С
 
27.07.23
13:17
Ну наверное не годится тогда в запросе делать Представление для числа в виде строки, нужно тогда в отдельном поле делать строку и её брать потом в запрос.
3 ЛучшийПрограммер1С
 
27.07.23
13:29
причём как-то интересно, на каком-то количестве первых строк быстро находит, а потом тормозит
4 shuhard
 
27.07.23
13:31
(3) кэши - наше всё =)
5 ЛучшийПрограммер1С
 
27.07.23
13:40
(4) и как мне кэш увеличить?
6 ЛучшийПрограммер1С
 
27.07.23
14:27
Нашёл решение. Вместо использования приведения к строке оставил число. Получилось что в колонке или число или строка.
Отбор поменял на поиск в списке.

ЭлементОтбора = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НомерПартии");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСписке;
ЧтоИскать = СтрЗаменить(НомерПартии, " ", Символы.НПП);
ИлиИскать = Число(ЧтоИскать);
СписокЗнач = Новый Массив;
СписокЗнач.Добавить(ЧтоИскать);
СписокЗнач.Добавить(ИлиИскать);
ЭлементОтбора.ПравоеЗначение = СписокЗнач;
ЭлементОтбора.Использование = Истина;
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн