К статье
Практический материал

Разработка и Конфигурация · 11 мин

Строка поиска в 1С: как сделать и настроить

Как сделать строку поиска в 1С: строка поиска в форме списка, динамический список, программный поиск по запросу, настройка полнотекстового поиска и типичные ошибки.

Строка поиска в 1С может означать три разные задачи: быстрый поиск в форме списка, которым пользуется обычный пользователь; настройку полнотекстового поиска по всей базе; программную строку поиска, которую разработчик добавляет в управляемую форму. Подходы различаются: в первом случае достаточно штатных возможностей платформы, во втором нужны настройки администратора, в третьем — работа в конфигураторе с динамическим списком и запросом.

Прежде чем что-то дорабатывать, определите, какой именно поиск нужен. Большинство потребностей пользователей закрывается встроенными механизмами: поиском по текущей колонке, строкой поиска в форме списка и полнотекстовым поиском по данным. Доработка формы оправдана только тогда, когда штатные средства не дают нужной логики — например, поиск сразу по нескольким реквизитам с особыми условиями.

Ниже разобраны все три сценария: пользовательский поиск без доработок, полнотекстовый поиск и программная реализация строки поиска в управляемой форме с примером кода.

Каким бывает поиск в 1С и что выбрать

Платформа 1С:Предприятие предлагает несколько механизмов поиска, и у каждого своя область применения. Поиск по текущей колонке запускается началом набора текста в таблице списка — курсор переходит к первой подходящей строке. Строка поиска в форме списка фильтрует записи по подстроке в основных полях. Полнотекстовый поиск ищет слова по всем данным базы, включая тексты документов и присоединённые файлы.

Для разработчика добавляется четвёртый вариант — собственная строка поиска на форме, связанная с динамическим списком через отбор или параметры запроса. Это самый гибкий способ: можно искать по любой комбинации реквизитов, добавлять условия «И/ИЛИ», учитывать регистр и работать с представлениями ссылок.

Сравнение вариантов поиска

Поиск по текущей колонке

Подходит для быстрого перехода к строке в отсортированном списке. Не фильтрует записи, только позиционирует курсор.

Строка поиска формы списка

Штатная фильтрация по основным полям. Не требует доработок, но набор полей ограничен настройками формы.

Полнотекстовый поиск

Ищет по всем данным базы, включая длинные тексты. Требует включения и обновления индекса, работает с задержкой актуальности.

Своя строка поиска в форме

Полный контроль над логикой через запрос динамического списка. Требует доработки конфигурации и тестирования производительности.

Поиск в форме списка без доработок

В управляемых формах списков строка поиска обычно доступна сразу. Если её не видно, откройте меню «Ещё» и проверьте пункты настройки формы — в типовых конфигурациях панель поиска включается через «Ещё → Изменить форму» или отображается автоматически над таблицей. Введите фрагмент наименования, и список отфильтруется по совпадениям.

Для точечного поиска удобен отбор: «Ещё → Настроить список» позволяет задать условие по любому доступному реквизиту с видом сравнения «Содержит», «Равно», «Начинается с». Такой отбор сохраняется для пользователя и работает быстрее ввода в общей строке поиска, когда критерий известен заранее.

Ещё один штатный приём — поиск по текущей колонке. Встаньте в колонку «Наименование» и начните набирать текст: платформа переместит курсор к первой подходящей записи. Учтите, что этот способ зависит от сортировки списка и не скрывает неподходящие строки.

Настройка полнотекстового поиска по базе

Полнотекстовый поиск ищет слова по всем объектам конфигурации, у которых включена индексация. В пользовательском режиме он вызывается через меню «Операции → Полнотекстовый поиск» или кнопку поиска в панели инструментов, если администратор этот механизм включил. Поиск понимает морфологию русского языка: запрос «накладная» найдёт и «накладные», и «накладную».

Включение выполняется в конфигураторе или в разделе администрирования: нужно разрешить полнотекстовый поиск и запустить обновление индекса. В конфигураторе за индексацию отвечает свойство «Полнотекстовый поиск» у реквизитов объектов — «Использовать» или «Не использовать». Индекс строится не мгновенно: на больших базах первичное построение занимает заметное время и нагружает сервер, поэтому его планируют на нерабочие часы.

Индекс требует регулярного обновления — иначе новые документы не будут находиться. В файловой базе обновление запускается вручную или по расписанию, в клиент-серверном варианте можно настроить автоматическое слияние и обновление индекса.

Своя строка поиска в управляемой форме

Когда штатных средств недостаточно, строку поиска добавляют в форму списка вручную. Общий принцип: создаётся реквизит формы типа «Строка», выводится на форму как поле ввода, а в обработчике «ПриИзменении» накладывается отбор на динамический список. Пользователь вводит текст — список мгновенно фильтруется.

Есть два способа применить условие. Первый — через коллекцию отбора динамического списка: добавить элемент отбора с видом сравнения «Содержит» по нужному полю. Второй — через параметры запроса динамического списка с условием «ГДЕ» и оператором «ПОДОБНО». Второй вариант гибче: позволяет искать сразу по нескольким полям через «ИЛИ» и не зависит от настроек отбора пользователя.

Порядок добавления строки поиска в форму списка
  1. 1
    Откройте форму списка в конфигураторе и добавьте реквизит формы «СтрокаПоиска» типа «Строка» без ограничения длины или с разумным ограничением.
  2. 2
    Перетащите реквизит в дерево элементов формы над таблицей списка, снимите флажок «Кнопка очистки» при необходимости и включите «Кнопку списка выбора» только если она нужна.
  3. 3
    Создайте обработчик события «ПриИзменении» для поля поиска.
  4. 4
    В обработчике установите отбор динамического списка или параметр запроса с оператором ПОДОБНО и обрамлением значения символами %.
  5. 5
    Проверьте работу: введите фрагмент наименования, убедитесь, что список фильтруется, а при очистке строки отбор снимается.

Пример кода для строки поиска

Ниже типовой фрагмент: в модуле формы списка при изменении строки поиска устанавливается отбор по наименованию. При пустой строке отбор снимается, чтобы список показывал все записи.

&НаКлиенте

Процедура СтрокаПоискаПриИзменении(Элемент)

УстановитьОтборПоСтроке();

КонецПроцедуры

&НаСервере

Процедура УстановитьОтборПоСтроке()

ЭлементыОтбора = Список.Отбор.Элементы;

ЭлементыОтбора.Очистить();

Если Не ПустаяСтрока(СтрокаПоиска) Тогда

ЭлементОтбора = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));

ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Наименование");

ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;

ЭлементОтбора.ПравоеЗначение = СтрокаПоиска;

ЭлементОтбора.Использование = Истина;

КонецЕсли;

КонецПроцедуры

Если нужен поиск сразу по нескольким полям, удобнее изменить текст запроса динамического списка, добавив условие с параметром: ГДЕ Товары.Наименование ПОДОБНО &СтрокаПоиска ИЛИ Товары.Артикул ПОДОБНО &СтрокаПоиска. Параметр при этом устанавливают как "%" + СтрокаПоиска + "%", а при пустой строке передают "%", чтобы условие не отсекало записи.

bsl
Список.Параметры.УстановитьЗначениеПараметра("СтрокаПоиска", "%" + СтрокаПоиска + "%");

Производительность и ограничения

Поиск оператором «ПОДОБНО» с подстановкой в начале строки ("%текст") не использует индекс по полю и приводит к полному сканированию таблицы. На справочнике в несколько тысяч записей это незаметно, на регистре или справочнике с сотнями тысяч записей — вызовет задержки. Для больших таблиц ограничивайте поиск началом строки («Начинается с» / "текст%"), либо выносите поиск в полнотекстовый индекс.

Учитывайте и поведение динамического списка: при каждом изменении отбора выполняется новый запрос к базе. Если строка поиска реагирует на каждое нажатие клавиши (событие «ИзменениеТекстаРедактирования»), добавьте задержку или требуйте минимальную длину ввода — два-три символа, чтобы не генерировать лишние запросы.

Отдельное ограничение — права доступа. Отбор динамического списка работает в рамках RLS и прав пользователя: записи, скрытые ограничениями, в результатах не появятся, и это нормально. Не пытайтесь «обойти» это поведение программно — такие обходы нарушают модель безопасности.

Типичные ошибки
01
Поиск через ПОДОБНО с символом % в начале на большой таблице — запрос сканирует всю таблицу и форма подвисает.
02
Отбор не снимается при очистке строки поиска — пользователь видит пустой список и считает, что данные пропали.
03
Фильтрация на каждое нажатие клавиши без минимальной длины — лишняя нагрузка на сервер и мерцание списка.
04
Поиск только по наименованию, когда пользователи ищут по артикулу или коду — строка поиска формально есть, но задачу не решает.
05
Добавление элемента отбора без очистки предыдущих — условия накапливаются, и список показывает всё меньше записей.

Проверка результата и типичные проблемы

После доработки проверьте три сценария: поиск находит запись по фрагменту из середины наименования; очистка строки возвращает полный список; повторный ввод другого текста корректно заменяет отбор, а не добавляет к нему. Полезно также проверить поиск с разным регистром букв — оператор «ПОДОБНО» в большинстве случаев регистронезависим, но поведение стоит подтвердить на тестовых данных.

Если поиск работает медленно, откройте технологический журнал или замер производительности в конфигураторе и посмотрите текст запроса. Частая находка — лишние соединения в запросе динамического списка, которые добавились из-за настроек формы, а не из-за самой строки поиска.

Контрольные точки

Как проверить результат

Ввод фрагмента наименования
Норма

Список фильтруется за секунду, нужная запись найдена

Тревожный признак

Задержка в несколько секунд или пустой результат при существующей записи

Очистка строки поиска
Норма

Отображаются все записи без ограничений

Тревожный признак

Список остаётся отфильтрованным или пустым

Повторный поиск другого текста
Норма

Старый отбор заменяется новым

Тревожный признак

Условия накапливаются, результатов становится меньше

Поиск пользователем с ограниченными правами
Норма

Находятся только доступные ему записи

Тревожный признак

Ошибки доступа или отсутствие ожидаемых записей

Итог

Что важно запомнить

Сначала используйте штатные механизмы: строку поиска формы списка, отборы и полнотекстовый поиск. Своя строка поиска делается через реквизит формы и отбор динамического списка либо параметр запроса с ПОДОБНО. Следите за производительностью на больших таблицах и всегда снимайте отбор при очистке строки.

Частые вопросы

Как включить строку поиска в форме списка, если её не видно?

Проверьте меню «Ещё» в форме списка: в типовых конфигурациях панель поиска включается через настройки формы. Если форма изменена в конфигураторе и панель убрана, её возвращают там же — через свойства формы списка или добавление стандартной команды поиска в командную панель.

Чем отличается поиск по колонке от строки поиска?

Поиск по колонке только перемещает курсор к первой подходящей строке и зависит от сортировки — все записи остаются на месте. Строка поиска фильтрует список: неподходящие записи скрываются до снятия условия.

Можно ли искать по нескольким полям одновременно?

Да. В динамическом списке добавьте в запрос условие с «ИЛИ» по нужным полям и общим параметром, например по наименованию и артикулу. Через штатный отбор формы тоже можно объединить условия группой «ИЛИ» в настройке списка.

Почему полнотекстовый поиск не находит свежие документы?

Полнотекстовый индекс обновляется отдельно от записи данных. Если обновление индекса не настроено по расписанию, новые объекты попадут в результаты только после ближайшего обновления. Запустите обновление индекса вручную и настройте его регулярное выполнение.

Как сделать поиск без учёта регистра букв?

Оператор ПОДОБНО и вид сравнения «Содержит» в типовых сценариях работают без учёта регистра. Если в запросе используются функции вроде ВРег или НРег, применяйте их к обеим сторонам сравнения, чтобы не ломать использование индексов без необходимости.

Что делать, если самодельная строка поиска тормозит форму?

Сократите нагрузку: требуйте минимум два-три символа для начала поиска, замените «Содержит» на «Начинается с», уберите лишние соединения из запроса динамического списка. На очень больших таблицах переведите поиск на полнотекстовый механизм платформы.