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

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

Как добавить панель поиска в 1С

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

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

Для типовых конфигураций на управляемых формах (БП, УТ, ЗУП, ERP) значительная часть работы уже сделана платформой: строка поиска в списках включена по умолчанию, если у списка корректно настроены поля поиска. Проблемы начинаются, когда список построен на произвольном запросе, когда нужен поиск по нетиповым реквизитам или когда требуется отдельная панель поиска на форме обработки.

Ниже разобраны все основные сценарии: от включения штатной строки поиска до программной реализации собственной панели с примерами кода на встроенном языке 1С.

Какие виды поиска существуют в 1С и что выбрать

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

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

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

Отборы и СКД — структурированная фильтрация по конкретным полям с условиями (равно, содержит, в списке). Это не «поисковая строка», но часто именно отбор решает задачу точнее.

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

Строка поиска динамического списка

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

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

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

Отборы СКД

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

Собственная панель поиска на форме

Подходит для обработок и нестандартных сценариев. Ограничение: требует программирования и тестирования.

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

Откройте конфигуратор, найдите нужный объект (справочник или документ) и перейдите к основной форме списка. В дереве элементов формы выберите таблицу, связанную с динамическим списком, и откройте палитру свойств.

Ключевые свойства находятся у реквизита формы типа «ДинамическийСписок» и у элемента таблицы:

  • У реквизита «Список» — свойство «Произвольный запрос» должно быть выключено для автоматической работы строки поиска, либо при включённом произвольном запросе нужно корректно заполнить основную таблицу.
  • У таблицы формы — свойство «ПоложениеСтрокиПоиска» (варианты: «Нет», «Верх», «Низ», «Авто»). Установите «Верх» или «Авто», чтобы строка поиска отображалась над списком.

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

Включение строки поиска в списке
  1. 1
    Откройте форму списка объекта в конфигураторе
  2. 2
    Выберите таблицу списка и в свойствах установите «ПоложениеСтрокиПоиска» = «Верх»
  3. 3
    Проверьте, что у динамического списка указана основная таблица
  4. 4
    Сохраните конфигурацию и обновите её (F7)
  5. 5
    Откройте список в режиме предприятия и введите текст в строку поиска

Настройка полей, по которым выполняется поиск

Если строка поиска появилась, но не находит нужные данные, причина почти всегда в наборе полей поиска. Для динамического списка с основной таблицей платформа ищет по полям, входящим в представление объекта и помеченным как поисковые.

Для справочников и документов набор полей поиска задаётся на уровне объекта метаданных: откройте свойства объекта, перейдите на закладку «Поле ввода по строке» и проверьте, какие реквизиты включены в поиск. Добавьте сюда реквизиты, по которым пользователи реально ищут (например, «Артикул», «ИНН», «Телефон»), но не перегружайте список — каждое дополнительное поле замедляет поиск.

Для динамического списка с произвольным запросом автоматический поиск по строке работает ограниченно. В этом случае надёжнее обрабатывать введённый текст программно: в событии изменения строки поиска формировать отбор списка с условием «ПОДОБНО» по нужным полям запроса.

Как включить полнотекстовый поиск по базе

Глобальная панель поиска (Ctrl+Shift+F в тонком клиенте) работает только при включённом полнотекстовом поиске. Включение выполняется в режиме предприятия пользователем с правами администратора: раздел «Администрирование» → «Обслуживание» → «Полнотекстовый поиск» (в типовых конфигурациях путь может незначительно отличаться).

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

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

Программная панель поиска на форме обработки

Если штатной строки поиска недостаточно — например, нужна панель на форме внешней обработки с поиском сразу по нескольким объектам — создайте собственное поле поиска. Добавьте на форму реквизит «СтрокаПоиска» (тип Строка) и элемент «Поле ввода», связанный с этим реквизитом.

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

&НаКлиенте

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

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

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

&НаСервере

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

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

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

Возврат;

КонецЕсли;

ГруппаИЛИ = Список.Отбор.Элементы.Добавить(

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

ГруппаИЛИ.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли;

ДобавитьУсловие(ГруппаИЛИ, "Наименование", СтрокаПоиска);

ДобавитьУсловие(ГруппаИЛИ, "Артикул", СтрокаПоиска);

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

&НаСервере

Процедура ДобавитьУсловие(Группа, ИмяПоля, Значение)

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

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

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

Элемент.ПравоеЗначение = Значение;

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

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

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

Для удобства пользователей настройте у поля ввода свойство «КнопкаОчистки» и событие «АвтоПодбор» либо обновление списка по таймеру, чтобы не требовать нажатия Enter после каждого символа.

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

Поиск по строке в обычных формах и самописных конфигурациях

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

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

Типичные ошибки
01
Отбор по нескольким полям без группы «ИЛИ» — список пустеет, потому что текст должен совпасть во всех полях сразу
02
Не очищается отбор при пустой строке поиска — пользователь видит старый фильтр и считает, что данные пропали
03
Поиск по нетиповому реквизиту без добавления его в поля поиска объекта — строка поиска «не работает»
04
Включение полнотекстового поиска без регламентного обновления индекса — новые документы не находятся
05
Поиск с видом сравнения «Содержит» по большому списку без ограничений — заметное падение скорости на больших таблицах

Проверка результата и производительность

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

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

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

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

Строка поиска отображается над списком
Норма

Поле ввода видно, при вводе текста список фильтруется

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

Поле есть, но список не реагирует — проверьте поля поиска и основную таблицу

Поиск находит по части наименования
Норма

Записи находятся по фрагменту слова

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

Находит только по точному совпадению — проверьте вид сравнения

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

Список возвращается к полному виду

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

Остаётся старый отбор — добавьте очистку отбора

Свежие документы в полнотекстовом поиске
Норма

Новые данные находятся после обновления индекса

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

Не находятся — проверьте регламент обновления индекса

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

Часто задаваемые вопросы

Почему строка поиска в списке есть, но ничего не находит?

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

Можно ли сделать поиск сразу по нескольким полям через «ИЛИ»?

Да. В программном отборе динамического списка создайте группу элементов отбора с типом «ГруппаИли» и добавьте в неё условия по каждому полю с видом сравнения «Содержит». Без группы условия объединяются по «И».

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

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

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

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

Поиск по «Содержит» сильно тормозит на большом списке. Что делать?

Условие «Содержит» не использует индексы СУБД. Сократите число полей поиска, добавьте обязательные отборы (период, организация), ограничьте область поиска или перенесите сценарий на полнотекстовый поиск, который работает по индексу.

Можно ли добавить панель поиска без изменения конфигурации?

Частично. Включить полнотекстовый поиск и пользоваться штатной строкой поиска можно без доработок. А вот изменить набор полей поиска или добавить панель на форму обработки без конфигуратора не получится — это требует правки метаданных или расширения конфигурации.

Итог

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

Штатная панель поиска в списках включается свойством «ПоложениеСтрокиПоиска» и настройкой полей поиска объекта. Для произвольных запросов и обработок отбор реализуется программно через группу «ИЛИ» с видом сравнения «Содержит». Полнотекстовый поиск требует включения и регулярного обновления индекса. После настройки проверяйте поиск на реальных сценариях и следите за производительностью на больших таблицах.