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