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

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

Как найти элемент справочника в 1С

Как найти элемент справочника 1С: быстрый поиск в форме списка, поиск по коду и наименованию, отборы, методы НайтиПоКоду и НайтиПоНаименованию в коде, типичные ошибки.

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

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

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

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

Самый быстрый способ — открыть справочник и воспользоваться строкой поиска. В управляемых формах она обычно расположена прямо над списком либо вызывается сочетанием Ctrl+F. Введите фрагмент наименования, артикул, ИНН или другой известный фрагмент — список отфильтруется по мере ввода или после нажатия Enter.

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

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

Порядок поиска в форме списка
  1. 1
    Откройте нужный справочник через раздел меню (Номенклатура, Контрагенты, Сотрудники и т. п.)
  2. 2
    Нажмите Ctrl+F или кликните в поле поиска над списком
  3. 3
    Введите фрагмент наименования, код или ИНН и нажмите Enter
  4. 4
    Проверьте, что список не ограничен ранее установленным отбором — при необходимости сбросьте его
  5. 5
    Дважды щёлкните найденную строку, чтобы открыть карточку элемента

Отбор списка по условию

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

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

Частая ситуация: пользователь «потерял» элемент, потому что ранее установленный отбор остался активным. Признак — сокращённый список и отсутствие записей, которые точно есть. Снимите отбор через «Ещё» → «Настроить список» или кнопку сброса отборов.

Глобальный поиск по всей базе

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

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

Альтернатива — команда «Найти» (Ctrl+Shift+F в ряде конфигураций) с выбором конкретного типа объекта и поиском по строке. Этот вариант медленнее, но не требует индекса.

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

Разработчику или при написании обработки элемент ищут методами менеджера справочника. Базовый шаблон:

НайденныйЭлемент = Справочники.Номенклатура.НайтиПоКоду("00012345");

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

// элемент не найден

КонецЕсли;

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

НайтиПоНаименованию ищет только точное совпадение строки. Если в базе «Болт М8х50», а вы ищете «Болт М8×50» или «болт М8х50» с другим регистром — результат будет пустым. Для неточного поиска метод не подходит.

НайденныйЭлемент = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");

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

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

КонецЕсли;

bsl
Элемент = Справочники.Номенклатура.НайтиПоРеквизиту("Артикул", "АРТ-1024");
Если Элемент.Пустая() Тогда
    Сообщить("Элемент с таким артикулом не найден");
КонецЕсли;

Поиск по реквизиту и запросом

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

Если элементов с нужным значением несколько, метод вернёт первый найденный. Для поиска всех совпадений или по сложному условию (подстрока, диапазон, комбинация полей) используется запрос:

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

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

"ВЫБРАТЬ

| Номенклатура.Ссылка

|ИЗ

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

|ГДЕ

| Номенклатура.Наименование ПОДОБНО &Фрагмент

| И НЕ Номенклатура.ПометкаУдаления";

Запрос.УстановитьПараметр("Фрагмент", "%насос%");

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

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

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

НайтиПоКоду

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

НайтиПоНаименованию

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

НайтиПоРеквизиту

Поиск по любому реквизиту (ИНН, артикул). Требует индексации реквизита, возвращает один элемент.

Запрос

Гибкие условия, подстрока, множественный результат. Медленнее при поиске по подстроке на больших объёмах.

Почему элемент не находится: типичные причины

Чаще всего элемент «не находится» не потому, что его нет, а из-за ограничений поиска. Проверьте эти причины по порядку, прежде чем делать вывод об отсутствии записи.

Типичные ошибки при поиске
01
Активный старый отбор в форме списка скрывает нужные записи — сбросьте отбор через «Настроить список»
02
Поиск по наименованию с другим регистром или лишним пробелом — НайтиПоНаименованию требует точного совпадения
03
Код передан без лидирующих нулей или как число вместо строки — НайтиПоКоду не находит элемент
04
Элемент помечен на удаление и скрыт настройкой списка — включите показ помеченных
05
Поиск в неправильной группе или у неправильного владельца при иерархическом справочнике
06
Полнотекстовый индекс не обновлён — свежие элементы не попадают в результаты глобального поиска

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

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

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

Ссылка, возвращённая методом поиска
Норма

Метод Пустая() возвращает Ложь, реквизиты элемента доступны

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

Пустая() возвращает Истина — элемент не найден, обращение к реквизитам даст ошибку

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

Карточка открывается, поля заполнены, нет пометки удаления

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

Элемент помечен на удаление или находится не в той группе

Количество совпадений
Норма

Найден ровно один нужный элемент

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

Несколько дублей с одинаковым наименованием — нужна свёртка дублей

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

Как найти элемент справочника по ИНН контрагента?

В форме списка справочника «Контрагенты» откройте «Ещё» → «Настроить список», добавьте условие «ИНН Равно» и укажите значение. Программно используйте Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", "7701234567"). Учтите, что у разных контрагентов (особенно ИП и филиалов) ИНН может совпадать — проверяйте и КПП.

Чем НайтиПоКоду отличается от НайтиПоНаименованию?

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

Как найти все элементы, содержащие фрагмент текста в наименовании?

В интерфейсе — введите фрагмент в строку поиска формы списка. Программно — запросом с условием «Наименование ПОДОБНО "%фрагмент%"». Методы НайтиПоНаименованию и НайтиПоРеквизиту для поиска по подстроке не подходят, они ищут только точное совпадение.

Элемент точно есть, но поиск его не показывает. Что делать?

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

Как проверить в коде, что элемент найден?

Сравните результат с пустой ссылкой: Если НайденныйЭлемент.Пустая() Тогда ... КонецЕсли. Обращаться к реквизитам через точку можно только после этой проверки — иначе при отсутствии элемента возникнет ошибка выполнения.

Можно ли искать элемент по штрихкоду?

Штрихкоды обычно хранятся не в справочнике, а в регистре сведений «Штрихкоды номенклатуры». Поиск выполняется запросом к этому регистру с получением связанной номенклатуры, либо в интерфейсе через обработку подбора по штрихкоду в документах.

Итог

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

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