Поиск в 1С: от быстрого отбора до полнотекстового индекса

· 9 мин

Содержание

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

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

Три механизма поиска и когда какой нужен

Прежде чем что-то настраивать, определитесь, какой поиск вам нужен. От этого зависит, куда идти.

  • 🔍 Быстрый поиск в списке — когда открыт журнал документов или справочник и нужно найти строку по видимому значению. Нажимаете Ctrl+F или просто начинаете печатать, курсор прыгает на совпадение.
  • 🧮 Отбор списка — когда нужно показать только документы по одному контрагенту, складу, за период. Это фильтр по реквизитам, а не поиск по тексту.
  • 🌐 Полнотекстовый поиск — когда вы не знаете, где лежит объект, и ищете по обрывку текста сразу во всех справочниках и документах: по номеру, комментарию, наименованию, содержимому присоединённых файлов.

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

МеханизмГде искатьЧто настраиватьПо чему ищет
Быстрый поиск Ctrl+Fвнутри открытого списканичеговидимый текст колонок
Отбор спискаЕщё → Настроить списокусловия по полямконкретные реквизиты
Полнотекстовый поискполе с лупой в шапкеразрешить + индексвесь текст базы и файлов

Главная развилка простая: знаете, в каком журнале объект и по какому полю его искать, — отбор или быстрый поиск; не знаете, где лежит, — полнотекстовый.

Как включить полнотекстовый поиск и построить индекс

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

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

  1. Включите отображение команды «Все функции»: Главное меню → Сервис → Параметры (или Главное меню → Параметры), поставьте флажок Отображать команду «Все функции».
  2. Откройте Главное меню → Все функции → Стандартные → Управление полнотекстовым поиском.
  3. В открывшемся окне нажмите Разрешить, затем Обновить индекс.

После этого в шапке программы появляется рабочее поле поиска с лупой.

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

Проверка полнотекстового поиска
Выполнено: 0 / 5

Индекс не обновляется в реальном времени сам по себе: между созданием документа и его появлением в полнотекстовом поиске проходит время до очередного обновления. Поэтому только что проведённый документ лупа может ещё не видеть — это нормально.

Синтаксис запроса: маски, фразы и логика

Полнотекстовый поиск понимает не только отдельное слово. В строку поиска можно задать условия и так резко сузить выдачу.

  • Слово целиком — болт найдёт объекты, где встречается это слово в любой форме (учитывается морфология русского языка).
  • Маска * — бол* найдёт «болт», «болты», «болторез». Звёздочка заменяет окончание слова.
  • Точная фраза в кавычках — "акт сверки" найдёт только это словосочетание подряд, а не «акт» и «сверка» по отдельности.
  • Логические операторы — болт AND оцинкованный, болт OR гайка, болт NOT нержавеющий. Вместо английских слов можно писать русские И, ИЛИ, НЕ.

Эти операторы комбинируются. Запрос "гарантийное письмо" AND Ромашк* найдёт письма с упоминанием контрагента, чьё название начинается на «Ромашк».

Поиск по одной-двум буквам ничего толкового не даст: слишком короткие слова индекс отсеивает. Задавайте минимум корень слова плюс маску.

Поиск по конкретным полям: отбор и настройка списка

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

Быстрый отбор по значению из ячейки. Встаньте в списке на нужное значение (например, на контрагента), вызовите правой кнопкой контекстное меню и выберите команду отбора по текущему значению. Список свернётся до строк с этим контрагентом.

Гибкий отбор по нескольким полям. В командной панели списка откройте меню Ещё → Настроить список и перейдите на вкладку Отбор. Слева — доступные поля (реквизиты документа, реквизиты шапки, иногда реквизиты табличной части), справа — условия. Так собирается фильтр вида «Склад = Основной И Сумма ≥ 100 000».

Быстрый поиск по колонке. Внутри открытого списка Ctrl+F открывает строку поиска по видимым колонкам. Это именно поиск по тексту на экране, а не фильтр: он подсвечивает совпадение, но не прячет остальные строки.

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

Поиск по содержимому вложенных файлов: PDF, Word, Excel

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

Работает это так: при обновлении индекса платформа извлекает текстовый слой из вложений и добавляет его в общий полнотекстовый индекс. После этого запрос договор поставки оцинкован* может вернуть PDF или документ Word, в теле которого встречается эта фраза.

Что важно понимать про файлы:

  • Находятся только форматы с текстовым слоем — docx, xlsx, текстовые PDF, txt. Отсканированный PDF (картинка без текста) поиск не найдёт — там нечего индексировать, нужен предварительный OCR.
  • Файл попадёт в выдачу только после очередного обновления индекса, как и обычные данные.
  • Очень крупные вложения индексируются дольше и заметнее тормозят обновление индекса в большой базе.

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

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

На базе в десятки гигабайт обновление полнотекстового индекса становится заметной нагрузкой, а сам поиск — медленнее. Ускоряют его так.

Обновляйте индекс по расписанию, а не вручную в рабочее время. В клиент-серверном варианте вынесите обновление индекса в регламентное задание на ночь или на обеденный перерыв. Постоянное фоновое переиндексирование в пик нагрузки ощутимо бьёт по отзывчивости.

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

Сужайте запрос. Маска от короткого корня (а*) заставляет перебирать половину индекса. Чем конкретнее слово и чем длиннее корень до звёздочки, тем быстрее ответ.

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

Полная переиндексация большой базы может идти долго и грузить сервер. Запускайте её вручную в часы, когда пользователей в базе нет, а не в разгар дня.

Поиск из встроенного языка и в запросах

Для разработчиков в 1С есть два принципиально разных способа найти данные кодом.

Поиск по подстроке в запросе — оператор ПОДОБНО. Он сравнивает значение поля с шаблоном, где % заменяет любое число символов, а _ — один символ:

ВЫБРАТЬ
    Номенклатура.Ссылка,
    Номенклатура.Наименование
ИЗ
    Справочник.Номенклатура КАК Номенклатура
ГДЕ
    Номенклатура.Наименование ПОДОБНО "%болт%"

Если сам символ % или _ должен искаться буквально, экранируйте его через конструкцию СПЕЦСИМВОЛ. Такой поиск идёт по конкретному полю и точен, но на больших справочниках без индекса по полю он медленный — это полный перебор.

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

Простое правило выбора: ищете точное совпадение по известному полю — ПОДОБНО в запросе; ищете «где-то в базе по обрывку текста» — полнотекстовый поиск.

Внешние поисковые системы и поиск в мобильном клиенте

Коротко по двум частым вопросам, чтобы не искать ответ по форумам.

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

Мобильный клиент 1С. В мобильном клиенте и мобильном приложении поиск по списку и отбор работают так же, как в десктопном клиенте: тянете строку поиска или задаёте отбор. Глобальный полнотекстовый поиск опирается на тот же серверный индекс базы — отдельно «для телефона» его настраивать не нужно.

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

Самая частая жалоба: документ в базе лежит, а поиск молчит. Причина почти всегда в одном из нескольких мест.

Диагностика: выберите симптом

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

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

Чем полнотекстовый поиск отличается от отбора списка?
Полнотекстовый поиск ищет по всей базе по тексту и использует индекс. Отбор фильтрует один открытый список по конкретным реквизитам и индекса не требует. Для поиска по номеру или сумме точнее отбор, для поиска «где-то в базе по слову» — полнотекстовый.
Нужно ли вручную обновлять индекс после каждого документа?
Нет. В типовых конфигурациях индекс обновляется регламентным заданием в фоне. Вручную обновление запускают, только если нужно немедленно найти что-то свежесозданное или после массовой загрузки данных.
Можно ли искать по части слова?
Да, через маску *: запрос оцинков* найдёт все словоформы. Поиск по одной-двум буквам платформа отсекает, задавайте корень подлиннее.
Почему поиск по тексту внутри PDF не работает?
Скорее всего, это отсканированный PDF без текстового слоя — индексировать в нём нечего. Нужен файл с распознанным текстом либо предварительный OCR. Проверьте также, что индекс перестроен уже после загрузки файла.
Поиск стал медленным на большой базе — что сделать первым?
Перенесите обновление индекса на нерабочее время регламентным заданием и ограничьте индексирование тяжёлых вложений. Запросы задавайте конкретнее — длинный корень до маски ищется быстрее короткого.