Справочники и Данные · 11 мин
Как сделать поиск по справочнику в 1С
Как сделать поиск по справочнику в 1С: поиск по наименованию, коду, реквизитам, настройка строки поиска и программный поиск в коде. Пошаговая инструкция.
Поиск по справочнику в 1С — базовая операция, с которой сталкиваются и пользователи, и разработчики. Пользователю нужно быстро найти контрагента, номенклатуру или сотрудника в списке из тысяч записей, а разработчику — организовать поиск программно или настроить удобный ввод по строке. В типовых конфигурациях на управляемых формах механизмы поиска уже встроены, но их поведение зависит от настроек справочника, и понимание этих настроек экономит массу времени.
Материал охватывает три уровня работы: поиск в интерфейсе пользователя без изменения конфигурации, настройку параметров поиска в конфигураторе и программный поиск средствами встроенного языка. Примеры ориентированы на платформу 1С:Предприятие 8.3 и типовые конфигурации на управляемых формах, но большинство приёмов работает и в обычных формах.
Как искать по справочнику в режиме пользователя
В форме списка любого справочника есть строка поиска. Откройте нужный справочник, например «Номенклатура» или «Контрагенты», и найдите поле поиска над таблицей — обычно оно расположено в командной панели формы и помечено значком лупы. Введите часть наименования и нажмите Enter: список отфильтруется по найденным элементам.
Если поля поиска не видно, воспользуйтесь сочетанием клавиш Ctrl+F — откроется стандартный диалог поиска по текущему списку. В нём можно указать, по какой колонке искать, и направление поиска. Этот способ ищет только по видимым колонкам таблицы, поэтому перед поиском убедитесь, что нужная колонка выведена в список через «Ещё → Изменить форму» или настройку списка.
Третий способ — кнопка «Найти» (лупа) в командной панели динамического списка. Она открывает расширенный поиск с возможностью задать условия по нескольким полям одновременно: наименование содержит текст, код равен значению, реквизит заполнен. Это самый гибкий вариант без изменения конфигурации.
- 1Откройте справочник через раздел меню или функцию «Все функции»
- 2Найдите поле поиска над списком или нажмите Ctrl+F
- 3Введите часть наименования, кода или другого видимого реквизита
- 4Проверьте результат: список должен отфильтроваться по найденным элементам
- 5Сбросьте поиск крестиком в поле поиска, чтобы вернуть полный список
Поиск при выборе элемента: ввод по строке
Когда вы заполняете документ и выбираете значение справочника в поле ввода, работает механизм «ввод по строке»: начните печатать наименование прямо в поле, и программа покажет выпадающий список подходящих элементов. Это самый быстрый способ найти нужную позицию, не открывая форму списка.
По умолчанию ввод по строке ищет по основным представлениям объекта — обычно по наименованию и коду. Если нужно искать, например, контрагентов по ИНН или номенклатуру по артикулу прямо в поле ввода, эти реквизиты должны быть добавлены в настройки поиска справочника в конфигураторе — об этом ниже. Во многих типовых конфигурациях поиск по ИНН и артикулу уже включён.
Учтите особенность: ввод по строке ищет по началу слова или по подстроке в зависимости от настроек. Если вы вводите середину наименования и ничего не находится, попробуйте ввести первое слово. Также проверьте, не установлен ли в поле ввода отбор, который ограничивает доступные элементы — например, отбор по организации или по группе.
Настройка полнотекстового поиска по данным
Для поиска по всем справочникам и документам сразу в 1С есть полнотекстовый поиск — аналог поисковой системы внутри базы. Он включается в настройках программы или через раздел администрирования, пункт «Полнотекстовый поиск». После включения нужно обновить поисковый индекс — только после этого появятся результаты.
Полнотекстовый поиск вызывается через главное меню или кнопку поиска в панели навигации. Вы вводите фразу, и система показывает все объекты — элементы справочников, документы, — где эта фраза встречается. Это удобно, когда вы не помните, в каком именно справочнике хранится информация, или ищете по тексту из длинного поля вроде описания или комментария.
Индекс полнотекстового поиска не обновляется мгновенно. В файловых базах обновление выполняется по расписанию или вручную, в клиент-серверных — регламентным заданием. Если свежие данные не находятся, первым делом проверьте дату последнего обновления индекса в настройках полнотекстового поиска.
Настройка поиска по реквизитам в конфигураторе
Если пользователям нужно искать элементы по артикулу, ИНН, штрихкоду или другому реквизиту, а стандартный поиск этого не делает, настройте справочник в конфигураторе. Откройте конфигуратор, найдите нужный справочник в дереве конфигурации и откройте его свойства.
На закладке «Поле ввода» (или в палитре свойств — свойство «Ввод по строке») укажите реквизиты, по которым будет выполняться поиск при вводе по строке. Например, для справочника «Номенклатура» добавьте реквизит «Артикул», для «Контрагенты» — «ИНН». После сохранения конфигурации и обновления базы данных ввод по строке начнёт находить элементы по этим полям.
Дополнительно проверьте свойство «Представление объекта» и основные поля справочника: длина наименования, длина кода. Если поиск по коду не находит значения с лидирующими нулями, убедитесь, что код имеет строковый тип и введён с нулями, либо ведите поиск без них — поведение зависит от настроек серии и типа кода.
Программный поиск элементов справочника
Разработчику для поиска элементов доступны методы менеджера справочника. Три основных: НайтиПоКоду, НайтиПоНаименованию и НайтиПоРеквизиту. Все они возвращают ссылку на элемент или пустую ссылку, если ничего не найдено. Проверка результата обязательна — обращение к реквизитам пустой ссылки вызовет ошибку.
НайденныйЭлемент = Справочники.Номенклатура.НайтиПоНаименованию("Кабель ВВГ 3х2.5");
Если НайденныйЭлемент.Пустая() Тогда
Сообщить("Элемент не найден");
Иначе
Сообщить("Найден: " + НайденныйЭлемент);
КонецЕсли;
Метод НайтиПоНаименованию ищет точное совпадение. Для поиска по части наименования используйте запрос с оператором ПОДОБНО или выборку с перебором. Запрос предпочтительнее: он выполняется на сервере СУБД и работает быстрее перебора.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ Ссылка
|ИЗ Справочник.Номенклатура
|ГДЕ Наименование ПОДОБНО &ЧастьНаименования";
Запрос.УстановитьПараметр("ЧастьНаименования", "%кабель%");
Результат = Запрос.Выполнить().Выбрать();
Для поиска по произвольному реквизиту используйте НайтиПоРеквизиту("Артикул", "АРТ-001"). Учтите: метод работает только с реквизитами, для которых включено индексирование, либо поиск будет медленным на больших объёмах. Индексирование включается в свойствах реквизита в конфигураторе.
Ссылка = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7707083893");Типичные проблемы и их решение
Самая частая жалоба — «поиск не находит элемент, который точно есть». Причины обычно такие: поиск идёт по началу строки, а вы вводите середину; в списке установлен отбор, скрывающий элемент; элемент помечен на удаление и отфильтрован настройками списка; полнотекстовый индекс устарел. Проверяйте эти четыре пункта в первую очередь.
Вторая типичная проблема — медленный поиск в больших справочниках. Причиной почти всегда является отсутствие индекса по реквизиту поиска или поиск по подстроке (ПОДОБНО с символом % в начале), который не использует индекс. Решение — включить индексирование реквизита и по возможности искать по началу строки.
Третья ситуация — ввод по строке не предлагает подсказок. Проверьте, что у поля ввода не отключено свойство «АвтоОтметкаНезаполненного»/быстрый выбор, что у пользователя есть права на просмотр справочника и что справочник не входит в исключения функциональных опций, отключённых в базе.
Как проверить результат
Список фильтруется, элемент виден и открывается
Список пуст при заведомо существующем элементе — проверьте отборы
Выпадающий список показывает подходящие элементы по мере ввода
Подсказки не появляются — проверьте права и настройку «Ввод по строке»
Находятся и старые, и свежие объекты
Не находятся новые данные — обновите поисковый индекс
Какой способ поиска выбрать
Выбор зависит от задачи. Разовый поиск известного элемента — строка поиска в форме списка. Подбор значения в документе — ввод по строке. Поиск по нестандартному реквизиту массово и регулярно — настройка «Ввод по строке» в конфигураторе. Поиск по тексту в разных объектах — полнотекстовый поиск. Обработка данных в коде — методы менеджера справочника и запросы.
Сравнение способов поиска
Подходит для разового поиска пользователем; не требует настройки, но ищет только по основным полям
Самый быстрый при заполнении документов; состав полей поиска настраивается в конфигураторе
Ищет по всем объектам и длинным текстам; требует включения и регулярного обновления индекса
Для обработок и интеграций; требует проверки результата и индексов для больших объёмов
Что важно запомнить
Базовый поиск доступен из коробки: строка поиска в списке, Ctrl+F и ввод по строке. Поиск по дополнительным реквизитам включается в конфигураторе через свойство «Ввод по строке». Для программного поиска используйте НайтиПоНаименованию, НайтиПоКоду, НайтиПоРеквизиту и запросы с ПОДОБНО, всегда проверяя результат на пустую ссылку. Перед изменением конфигурации делайте резервную копию базы.
Частые вопросы
Почему поиск не находит элемент, который точно есть в справочнике?
Чаще всего в форме списка установлен отбор (по группе, владельцу, пометке удаления), который скрывает элемент. Снимите отборы через «Ещё → Настроить список». Также проверьте, что вы ищете по началу наименования, а не по середине, если используется ввод по строке.
Как искать контрагента по ИНН при выборе в документе?
Во многих типовых конфигурациях поиск по ИНН уже включён — просто начните вводить ИНН в поле контрагента. Если подсказки не появляются, попросите разработчика добавить реквизит «ИНН» в свойство «Ввод по строке» справочника контрагентов в конфигураторе.
Чем отличается НайтиПоНаименованию от запроса с ПОДОБНО?
НайтиПоНаименованию ищет только точное совпадение всей строки и возвращает один элемент. Запрос с ПОДОБНО ищет по шаблону, включая часть строки, и может вернуть множество элементов. Для поиска «по фрагменту» используйте запрос.
Почему полнотекстовый поиск не находит свежие данные?
Полнотекстовый поиск работает по индексу, который обновляется отдельно — вручную или регламентным заданием. Проверьте дату последнего обновления индекса в настройках полнотекстового поиска и выполните обновление.
Как ускорить поиск в справочнике с сотнями тысяч элементов?
Включите индексирование для реквизитов, по которым выполняется поиск (свойство «Индексировать» в конфигураторе). Избегайте поиска по подстроке с символом % в начале шаблона — такой поиск не использует индекс. По возможности ищите по началу строки или по точному значению.
Можно ли искать по справочнику без прав на изменение конфигурации?
Да. Строка поиска в форме списка, Ctrl+F, расширенный поиск по кнопке «Найти» и полнотекстовый поиск доступны обычному пользователю без доработок. Настройка поиска по дополнительным реквизитам требует доступа к конфигуратору.