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

Справочники и Данные · 11 мин

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

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

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

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

Как искать по справочнику в режиме пользователя

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

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

Третий способ — кнопка «Найти» (лупа) в командной панели динамического списка. Она открывает расширенный поиск с возможностью задать условия по нескольким полям одновременно: наименование содержит текст, код равен значению, реквизит заполнен. Это самый гибкий вариант без изменения конфигурации.

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

Поиск при выборе элемента: ввод по строке

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

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

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

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

Для поиска по всем справочникам и документам сразу в 1С есть полнотекстовый поиск — аналог поисковой системы внутри базы. Он включается в настройках программы или через раздел администрирования, пункт «Полнотекстовый поиск». После включения нужно обновить поисковый индекс — только после этого появятся результаты.

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

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

Настройка поиска по реквизитам в конфигураторе

Если пользователям нужно искать элементы по артикулу, ИНН, штрихкоду или другому реквизиту, а стандартный поиск этого не делает, настройте справочник в конфигураторе. Откройте конфигуратор, найдите нужный справочник в дереве конфигурации и откройте его свойства.

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

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

Программный поиск элементов справочника

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

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию("Кабель ВВГ 3х2.5");

Если НайденныйЭлемент.Пустая() Тогда

Сообщить("Элемент не найден");

Иначе

Сообщить("Найден: " + НайденныйЭлемент);

КонецЕсли;

Метод НайтиПоНаименованию ищет точное совпадение. Для поиска по части наименования используйте запрос с оператором ПОДОБНО или выборку с перебором. Запрос предпочтительнее: он выполняется на сервере СУБД и работает быстрее перебора.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ Ссылка

|ИЗ Справочник.Номенклатура

|ГДЕ Наименование ПОДОБНО &ЧастьНаименования";

Запрос.УстановитьПараметр("ЧастьНаименования", "%кабель%");

Результат = Запрос.Выполнить().Выбрать();

Для поиска по произвольному реквизиту используйте НайтиПоРеквизиту("Артикул", "АРТ-001"). Учтите: метод работает только с реквизитами, для которых включено индексирование, либо поиск будет медленным на больших объёмах. Индексирование включается в свойствах реквизита в конфигураторе.

bsl
Ссылка = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7707083893");

Типичные проблемы и их решение

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

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

Третья ситуация — ввод по строке не предлагает подсказок. Проверьте, что у поля ввода не отключено свойство «АвтоОтметкаНезаполненного»/быстрый выбор, что у пользователя есть права на просмотр справочника и что справочник не входит в исключения функциональных опций, отключённых в базе.

Типичные ошибки
01
Поиск по точному наименованию с лишними пробелами или другим регистром символов — совпадение не находится; используйте поиск по части строки
02
Изменение конфигурации без резервной копии — при ошибке обновления база может не открыться
03
Забытый отбор в форме списка — пользователь считает, что элемента нет, хотя он просто скрыт фильтром
04
Поиск по реквизиту без индекса в справочнике на сотни тысяч записей — запрос выполняется минутами
05
Программный поиск без проверки на пустую ссылку — ошибка при обращении к реквизитам ненайденного элемента
Контрольные точки

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

Поиск в форме списка
Норма

Список фильтруется, элемент виден и открывается

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

Список пуст при заведомо существующем элементе — проверьте отборы

Ввод по строке
Норма

Выпадающий список показывает подходящие элементы по мере ввода

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

Подсказки не появляются — проверьте права и настройку «Ввод по строке»

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

Находятся и старые, и свежие объекты

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

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

Какой способ поиска выбрать

Выбор зависит от задачи. Разовый поиск известного элемента — строка поиска в форме списка. Подбор значения в документе — ввод по строке. Поиск по нестандартному реквизиту массово и регулярно — настройка «Ввод по строке» в конфигураторе. Поиск по тексту в разных объектах — полнотекстовый поиск. Обработка данных в коде — методы менеджера справочника и запросы.

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

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

Подходит для разового поиска пользователем; не требует настройки, но ищет только по основным полям

Ввод по строке в поле ввода

Самый быстрый при заполнении документов; состав полей поиска настраивается в конфигураторе

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

Ищет по всем объектам и длинным текстам; требует включения и регулярного обновления индекса

Программный поиск

Для обработок и интеграций; требует проверки результата и индексов для больших объёмов

Итог

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

Базовый поиск доступен из коробки: строка поиска в списке, Ctrl+F и ввод по строке. Поиск по дополнительным реквизитам включается в конфигураторе через свойство «Ввод по строке». Для программного поиска используйте НайтиПоНаименованию, НайтиПоКоду, НайтиПоРеквизиту и запросы с ПОДОБНО, всегда проверяя результат на пустую ссылку. Перед изменением конфигурации делайте резервную копию базы.

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

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

Чаще всего в форме списка установлен отбор (по группе, владельцу, пометке удаления), который скрывает элемент. Снимите отборы через «Ещё → Настроить список». Также проверьте, что вы ищете по началу наименования, а не по середине, если используется ввод по строке.

Как искать контрагента по ИНН при выборе в документе?

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

Чем отличается НайтиПоНаименованию от запроса с ПОДОБНО?

НайтиПоНаименованию ищет только точное совпадение всей строки и возвращает один элемент. Запрос с ПОДОБНО ищет по шаблону, включая часть строки, и может вернуть множество элементов. Для поиска «по фрагменту» используйте запрос.

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

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

Как ускорить поиск в справочнике с сотнями тысяч элементов?

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

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

Да. Строка поиска в форме списка, Ctrl+F, расширенный поиск по кнопке «Найти» и полнотекстовый поиск доступны обычному пользователю без доработок. Настройка поиска по дополнительным реквизитам требует доступа к конфигуратору.