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

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

Как в 1С найти объект по реквизиту

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

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

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

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

Какие инструменты поиска доступны в 1С

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

Третий механизм — полнотекстовый поиск (лупа в панели инструментов или Ctrl+Shift+F): он ищет по всем данным, включённым в полнотекстовый индекс, включая текстовые реквизиты и содержимое файлов. Четвёртый — программный поиск: методы НайтиПоРеквизиту(), НайтиПоКоду(), НайтиПоНаименованию() и произвольные запросы.

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

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

Быстро и без настроек, но ищет только по полям с включённым поиском по подстроке — обычно код и наименование

Отбор в списке (Настроить список)

Позволяет задать условие по любому доступному реквизиту, но работает медленнее на больших таблицах без индекса

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

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

Запрос или НайтиПоРеквизиту

Точный программный поиск любого объекта, но требует навыков встроенного языка или консоли запросов

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

Откройте нужный список — например, «Справочники → Контрагенты» или «Покупки → Поступления товаров». Нажмите Ctrl+F или кликните в поле поиска в верхней части списка и введите значение: ИНН, артикул, фрагмент наименования. Платформа покажет совпадения по полям, для которых в конфигурации включён поиск по подстроке.

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

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

Типичные ошибки при поиске в списке
01
Поиск по реквизиту, не включённому в поиск по подстроке — результат пустой, хотя объект есть в базе
02
Забытый отбор в настройках списка скрывает искомые записи, и пользователь считает, что объект удалён
03
Поиск по номеру документа без учёта префикса базы — номер вводят не полностью
04
Лишние пробелы или неразрывные пробелы в скопированном значении дают пустой результат при точном сравнении

Отбор по реквизиту через «Настроить список»

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

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

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

Как найти объект отбором по реквизиту
  1. 1
    Откройте список объектов (справочник, документы, регистр сведений)
  2. 2
    Нажмите «Ещё → Настроить список» и добавьте условие отбора
  3. 3
    Выберите реквизит, вид сравнения (Равно, Содержит, В списке) и введите значение
  4. 4
    Примените настройку и проверьте результат
  5. 5
    После работы сбросьте отбор, чтобы список снова показывал все записи

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

Когда неизвестно, где именно хранится значение — в каком справочнике или документе — используйте полнотекстовый поиск: значок лупы на панели или сочетание Ctrl+Shift+F. Введите значение реквизита целиком: система найдёт все объекты, где оно встречается, включая текстовые поля, комментарии и многострочные части документов.

У механизма два важных ограничения. Во-первых, полнотекстовый поиск должен быть включён администратором (в режиме конфигуратора: Администрирование → Полнотекстовый поиск), а индекс — актуализирован; иначе результаты будут неполными или пустыми. Во-вторых, поиск работает по словам и их частям с учётом морфологии, поэтому для числовых значений вроде ИНН лучше вводить значение целиком и в кавычках для точной фразы.

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

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

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

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

// То же через запрос (подходит для документов)
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ Ссылка ИЗ Документ.ПоступлениеТоваровУслуг
|ГДЕ НомерВходящегоДокумента = &Номер";
Запрос.УстановитьПараметр("Номер", "А-1024");
Результат = Запрос.Выполнить().Выгрузить();

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

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

Как проверить результат и не ошибиться

Найденное значение стоит проверить перед использованием: убедитесь, что объект именно тот — сверьте дополнительные реквизиты (организацию, дату, сумму, статус). Для контрагентов по ИНН проверьте КПП и наименование: одно юрлицо может быть заведено дублем с опечаткой в названии.

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

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

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

Найденный объект открывается
Норма

Открывается форма с ожидаемыми данными

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

Ошибка «Объект не найден» — битая ссылка

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

Одна запись или ожидаемый набор

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

Десятки дублей с одинаковым значением реквизита

Значение реквизита в объекте
Норма

Совпадает с искомым с учётом регистра и пробелов

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

Отличается скрытыми символами — значение скопировано извне

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

Находятся недавно созданные объекты

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

Новые объекты не находятся — индекс устарел

Частые проблемы и их решение

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

Если программный поиск по строковому реквизиту возвращает пустую ссылку, проверьте длину значения: строковый реквизит фиксированной длины дополняется пробелами, и сравнение может не совпасть. В запросах для таких случаев используют ВЫРАЗИТЬ(... КАК Строка(N)) или поиск с ПОДОБНО.

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

Маршрут решения

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

Нужно быстро найти элемент по коду, наименованию или номеруИспользуйте строку поиска в форме списка (Ctrl+F)
Искомый реквизит не находится стандартным поискомЗадайте отбор через «Ещё → Настроить список» по нужному полю
Неизвестно, в каком объекте хранится значениеЗапустите полнотекстовый поиск по всей базе (Ctrl+Shift+F)
Поиск нужен в обработке, отчёте или обменеИспользуйте НайтиПоРеквизиту() для справочников или запрос с условием ГДЕ
Поиск выполняется регулярно и медленноПроверьте индексацию реквизита и при необходимости согласуйте её включение с администратором
Перед программным поиском по строковому реквизиту очищайте входное значение: СокрЛП и замена неразрывных пробелов (Символ(160)) на обычные избавляют от большинства случаев «не находится». Особенно это актуально для значений, загруженных из Excel или внешних систем.
ПЗ
Практическое замечание

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

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

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

Чем НайтиПоРеквизиту отличается от запроса?

Метод НайтиПоРеквизиту() возвращает только первую найденную ссылку, работает лишь со ссылочными объектами (справочники, планы счетов и т. п.) и только по реквизитам примитивных типов. Запрос универсальнее: подходит для документов и регистров, позволяет искать по нескольким условиям, получать списки результатов и любые поля.

Как найти документ по номеру, если есть префикс базы?

Вводите номер полностью, включая префикс, например «ЦБ00-001234». Если префикс неизвестен, ищите через отбор с видом сравнения «Содержит» и частью номера или используйте полнотекстовый поиск — он находит документы по фрагменту номера.

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

Индекс не актуализирован. Попросите администратора обновить его в разделе «Администрирование → Обслуживание → Полнотекстовый поиск» или проверить расписание регламентного задания обновления индекса. До обновления индекса новые объекты в результатах не появятся.

Нашлось несколько элементов с одинаковым ИНН — это нормально?

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

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

Стандартный отбор списка по табличным частям не работает. Используйте запрос с соединением с табличной частью (например, Документ.РеализацияТоваровУслуг.Товары) и условием по её полю, либо отчёт по документам, если он предусмотрен конфигурацией. Полнотекстовый поиск также может найти документ по данным табличной части, если она включена в индекс.

Итог

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

В пользовательском режиме ищите по реквизиту через строку поиска, отбор «Настроить список» или полнотекстовый поиск; в коде — НайтиПоРеквизиту() для справочников и запрос с условием ГДЕ для документов и регистров. Если поиск не находит объект, проверьте скрытые отборы, актуальность индекса, права доступа и невидимые символы в значении.