Разработчики, начинающие изучать управляемые формы в 1С, часто сталкиваются с неочевидным поведением стандартных механизмов платформы. Типичная ситуация: в справочнике созданы реквизиты Артикул и Комментарий, настроено их индексирование, включен полнотекстовый поиск и даже задан «Ввод по строке». При этом в документе автоподбор по артикулу работает идеально, а вот в самом списке справочника стандартный поиск упорно игнорирует эти поля, предлагая искать только по коду и наименованию. В этой статье мы подробно разберем, почему так происходит, как устроены поисковые механизмы платформы 1С v8.3 и как обойти существующие ограничения интерфейса.
Основная причина такого поведения кроется в базовом алгоритме работы динамического списка. По умолчанию стандартный поиск в управляемых формах (как через поисковую строку в шапке списка, так и через окно «Найти») анализирует исключительно те колонки, которые выведены на форму и видимы пользователю в данный момент.
Если колонка с реквизитом отсутствует на форме или для элемента формы установлено свойство Видимость = Ложь, платформа оптимизирует передачу данных: она перестает считывать эти значения с сервера и полностью исключает их из индекса клиентского поиска. Именно поэтому стандартное окно «Расширенный поиск» в поле «Где искать» отображает только те реквизиты, колонки которых физически видны на экране.
Часто возникает путаница из-за того, что в полях ввода документов поиск по артикулу работает без проблем. Давайте разберем по шагам, почему это разные механизмы:
В процессе решения этой проблемы разработчики часто пробуют установить свойство Использовать всегда (UseAlways) для нужного реквизита в схеме компоновки данных или в списке полей динамического списка. Однако сам по себе этот флаг проблему с поиском не решает. Назначение этого свойства совершенно иное:
Элементы.Список.ТекущиеДанные.ИмяРеквизита) без вызова контекста сервера.Что делать, если вам критически важно обеспечить поиск, например, по реквизиту Артикул или Комментарий, но перегружать интерфейс лишними колонками нельзя? Существует элегантное решение, позволяющее обмануть платформу и заставить её индексировать невидимые визуально данные.
Разберем алгоритм настройки по шагам:
Артикул) из списка полей динамического списка в элементы таблицы формы. Теперь он стал колонкой.Видимость в значение Ложь.Артикул).При таком подходе платформа считает колонку технически «активной» и участвующей в компоновке данных на клиенте, поэтому стандартный поиск будет без проблем находить по ней данные. При этом благодаря условному оформлению пользователь визуально колонку на форме не увидит.
Ниже рассмотрим пример того, как настроить такое скрытие программно в модуле формы, чтобы не загромождать настройки в конфигураторе:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
// Программное добавление элемента условного оформления для скрытия колонки Артикул
ЭлементОформления = Список.УсловноеОформление.Элементы.Добавить();
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь);
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("Артикул");
// Условие оставляем пустым, чтобы скрытие работало для всех строк
ЭлементОформления.Использование = Истина;
КонецПроцедуры
При настройке поиска по дополнительным реквизитам важно понимать, как именно платформа осуществляет поиск физически в базе данных. Здесь есть два принципиально разных сценария:
ОбновлениеИндексаППС), то при вводе запроса в строку поиска динамического списка платформа обращается к индексу полнотекстового поиска. Это происходит мгновенно даже в базах с миллионами записей.LIKE '%СтрокаПоиска%' ко всем доступным текстовым колонкам. На больших таблицах это гарантированно приводит к полной загрузке процессора сервера СУБД, блокировкам таблиц и зависанию интерфейса у пользователей.Важная особенность ППС: полнотекстовый поиск по умолчанию настроен на поиск совпадений с начала слов. Если ваш артикул имеет вид "123456", а пользователь пытается найти его по подстроке "345", стандартная строка поиска через ППС может ничего не вернуть. В таких ситуациях пользователям следует рекомендовать использовать механизм «Расширенного поиска» (вызывается по кнопке Alt+F или Ctrl+F), который переводит поиск в режим точного сканирования подстроки.
Для того чтобы предоставить пользователям удобный и быстрый поиск по любым реквизитам в динамических списках, придерживайтесь следующего чек-листа:
Использовать всегда в настройках схемы списка.