1cv77 Торговля и Склад. Установить фильтр в списке номенклатуры

  • Автор темы leznov
  • Дата начала
L

leznov

#1
Доброго времени суток!
Помогите решить задачку.
Заключается она в след. Есть справочник номенклатуры, менеджерам он должен быть виден не весь. У каждого элемента этого справочника есть реквизит Вид.Эл кот. принимает значения 0 или 1.
Пробовал решить задачу двумя вариантами:
в модуле Справочник.Номенклатура.МодульСписка.МодульСписка
1. Вариант:
УстановитьОтбор("ВидЭл",0);
2. Вариант:
СЗ=СоздатьОбъект("СписокЗначений");
номенклатура=СоздатьОбъект("Справочник.Номенклатур­а");
номенклатура.выбратьэлементы();
Пока номенклатура.получитьэлемент()=1 Цикл
Если номенклатура.ТекущийЭлемент().ВидЭл=0 Тогда
СЗ.ДобавитьЗначение(номенклатура.ТекущийЭлемент())­;
КонецЕсли;
КонецЦикла;
Предупреждение(СЗ.РазмерСписка());
ИспользоватьСписокЭлементов(СЗ);
Оба варианта не подходят ((. Менеджеры в обоих случаях ощущают проблемы с быстрым поиском по коду(указав колонку кода, набирают его и динамически перемещаются по списку). Проблемы следующие, во-первых медленнее ищет, во-вторых поиск идет только вниз по списку, при поиске вверх либо не ищет либо подвисает на 3-5 сек. При всем при этом поиск по наименованию идет нормально в обоих направлениях.
 
C

Cirrus

#2
Эх, вы наткнулись на один из неблагоприятных размеров в семерке... Когда надо использовать не весь справочник, а только необходимый набор элементов. Метод ИспользоватьСписокЭлементов(<?>), как вы сами убедились приводит к тормозам и неудобной навигации (отключается механизм поиска по индексу). Если навигацией пренебречь, то этот метод использовать можно. Единственное, составлять список элементов методом обхода справочника - нельзя. "ДобавитьЗначение()" долго работает, лучше использовать SQL запрос компонентой v7plus. Как альтернативный вариант еще можно попробовать сделать вспомогательные справочники.