Предисловие
Прочитал статью коллеги Полнотекстовый поиск в 1С. №1 Грабли в динамических списках в которой автор описывает типовую ситуацию всех баз с большим количеством документов. При этом был разобран случай без использования РЛС, если у автора поиск длится 8 сек, то у обычного пользователя с ограничением на уровне записей он будет длиться около 20 сек (даже если фактического ограничения нет, а рлс включен).
Я честно старался, писал в 1С письма (последние, наверное, 4 года). Под разными предлогами признать и исправить очевидные проблемы полнотекстового поиска
- медленно, все как и описано в статье
- и не всегда ищет
Результат на такие обращения - ссылки на ИТС, изучайте документацию, с системой все норм.
Но решение, подходящее для меня нашел и решил внести вклад в развитие сообщества, может это избавит кого-то от головной боли.
Применяя метод костылей
Суть "метода" заключается в том чтобы заблокировать отбор по некоторым, ненужным нам полям динамического списка. Этот метод не блокирует возможности установки отборов через настройку списка или "быстрых отборов" отдельно выведенных на форму создателями типовых конфигураций. Единственный минус, который я заметил, если заблокированное поле является частью условия для условного оформления - оформление ломается. Ниже приведен код, который ограничит все поля динамического списка, кроме тех, которые есть в условном оформлении и нужны нам для поиска.
Эту процедуру можно разместить в "своем" общем модуле. У меня УТ 11.4 - поэтому примеры соответствуют этой конфигурации.
Сама процедура:
// Устанавливает ограничения в динамическогм списке на отборы, сортировки и группировку на все поля списка
// для ускорения поиска по строке поиска и уменьшает количество ошибочных настроек пользователя
// убирает из ограничений поля указанные в отборах условного оформления, т.к. это ломает оформление
// Параметры:
// Список - ДинамическийСписок - Динамический список на который устанавливается отбор
//
// РазрешенныеПоля - Массив - состоящий из строк-имен полей по которым не устанавливаются ограничения
//
//
Процедура УстановитьОграничениеДинамическогоСписка(Список, РазрешенныеПоля) Экспорт
Для Каждого ЭлементНастроек Из Список.КомпоновщикНастроек.Настройки.УсловноеОформление.Элементы Цикл
Для Каждого ЭлементОтбора Из ЭлементНастроек.Отбор.Элементы Цикл
РазрешенныеПоля.Добавить(Строка(ЭлементОтбора.ЛевоеЗначение));
КонецЦикла;
КонецЦикла;
МассивПолей = Новый Массив;
Для Каждого ЭлементСписка Из Список.КомпоновщикНастроек.Настройки.ДоступныеПоляВыбора.Элементы Цикл
Если РазрешенныеПоля.Найти(Строка(ЭлементСписка.Поле)) = Неопределено ИЛИ ЭлементСписка.Папка Тогда
МассивПолей.Добавить(Строка(ЭлементСписка.Поле));
КонецЕсли;
КонецЦикла;
Список.УстановитьОграниченияИспользованияВГруппировке(МассивПолей);
Список.УстановитьОграниченияИспользованияВОтборе(МассивПолей);
Список.УстановитьОграниченияИспользованияВПорядке(МассивПолей);
КонецПроцедуры // УстановитьОграничениеДинамическогоСписка()
Пример вызова процедуры для списка заказов клиента из модуля формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
//Пример для формы списка заказов клиента
//ЭтаФорма.ИмяФормы = "Документ.ЗаказКлиента.Форма.ФормаСпискаДокументов"
РазрешенныеПоля = СтрРазделить("Дата,Номер,СуммаДокумента,Клиент,Партнер,Ссылка", ",", Ложь);
х_ДополнительныеВозможности.УстановитьОграничениеДинамическогоСписка(ЭтаФорма.Список, РазрешенныеПоля);
КонецПроцедуры
Эффект - потрясающий. Для полноправного пользователя поиск длится около 1 сек (для базы с миллионом и более документов). Для пользователя с РЛС поиск длятся около 2 сек. Без дополнительных отборов по организации, менеджеру, дате.
Пример для формы подбора товаров:
Форма подбор товаров в документ продажи, мне для поиска нужны только артикул и наименование:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
х_ДополнительныеВозможности.УстановитьОграничениеДинамическогоСписка(ЭтаФорма.СписокНоменклатура, СтрРазделить("Артикул,Наименование", ",", Ложь));
КонецПроцедуры
Подбор, благодаря "правкам" был довольно шустрый (1-2 сек для пользователя), но с ограничением по полям результаты появляются еще до ввода строки (шутка), моментально.
Писака не писатель, это мой первый раз и т.д. прошу меня простить за допущенные ошибки.