Почему некорректно работает полнотекстовый поиск в динамических списках 1С и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия IT и автоматизация бизнеса
← На главную

Многие технические специалисты сталкиваются с ситуацией, когда полнотекстовый поиск (ППД) в 1С ведет себя непредсказуемо. Например, при поиске номера документа по последним цифрам «89» результат находится, а при вводе более длинной подстроки «689» — нет. Это создает серьезные неудобства для пользователей, особенно в нагруженных списках, таких как «Поступление товаров и услуг» в «1С:Бухгалтерия 3.0». В этой статье мы подробно разберем причины такого поведения и рассмотрим комплекс мер по восстановлению корректной работы поиска.

Разберем логику работы полнотекстового поиска

Для начала проанализируем, как платформа 1С взаимодействует с данными при поиске. Важно понимать, что полнотекстовый поиск — это не просто перебор строк (как оператор LIKE в SQL), а сложная система индексации слов. Когда мы вводим запрос в динамическом списке, система может использовать разные механизмы поиска в зависимости от настроек платформы и актуальности индекса.

Рассмотрим основные причины «странного» поведения, когда часть номера находится, а часть — нет:

  1. Морфология и разбиение на слова: Индексатор может воспринимать префиксы (например, «ТГ») или длинные цифровые последовательности как разные смысловые единицы. Если индекс «недопонимает» структуру номера, поиск по середине строки без специальных символов может не дать результатов.
  2. Минимальная длина слова: В настройках поиска существуют ограничения. Если искомый фрагмент слишком короток или, наоборот, попадает под правила игнорирования «шумовых» слов, результат будет пустым.
  3. Синтаксис поиска: Для поиска по части слова часто требуется использование символа * (звездочка). Без нее система ищет совпадение по началу слова.

Решение проблемы для серверных баз (SQL Server)

Как показывает практика, стандартной процедуры «Очистить и обновить индекс» в консоли администратора 1С или через регламентное задание не всегда достаточно. Если ваша база работает на MS SQL Server, платформа 1С часто делегирует функции поиска встроенному механизму Full-Text Search самого SQL-сервера.

Проанализируем ситуацию: если на уровне SQL-сервера полнотекстовый каталог поврежден или находится в состоянии «Offline», 1С не сможет получить актуальные данные, даже если в самой конфигурации индексы числятся как обновленные. Для решения этой проблемы выполним следующие шаги:

  1. Проверим наличие и состояние службы SQL Server Full-Text Search на сервере базы данных.
  2. Настроим или запустим вручную план обслуживания в SQL Management Studio. Нам необходимо выполнить обновление статистик и реорганизацию/перестроение индексов.
  3. В некоторых случаях помогает выполнение команды для исправления счетчиков идентификаторов, что косвенно влияет на таблицы индексации: DBCC CHECKIDENT ('ИмяТаблицыИндексаППД', RESEED);
  4. После обновления индексов средствами SQL выполните полную переиндексацию в 1С.

Важный момент: Если вы используете собственный запрос в динамическом списке, убедитесь, что в нем корректно настроены связи. Использование сложных вложенных запросов или LEFT JOIN с таблицами, которые не входят в состав полнотекстового поиска, может заставить платформу отказаться от использования индекса ППД в пользу обычного SQL-запроса, который работает медленнее или по другой логике.

Особенности работы ППД в файловых базах

Если проблема возникла в файловой версии (например, в «1С:УНФ» или «1С:Бухгалтерия»), механизмы SQL нам не помогут. Здесь платформа хранит индекс в специальных файлах внутри каталога информационной базы. Разберем алгоритм восстановления поиска для файлового режима:

Посмотрим на структуру каталога базы. За полнотекстовый поиск отвечает папка 1Cv8FTxt. Если стандартная обработка «Управление полнотекстовым поиском» не помогает, выполним «жесткую» очистку:

  1. Завершим все сеансы работы с базой данных (включая конфигуратор и фоновые задания).
  2. Полностью удалим папку 1Cv8FTxt из каталога базы.
  3. Запустим базу в монопольном режиме.
  4. Перейдем в раздел Администрирование — Поддержка и обслуживание — Полнотекстовый поиск.
  5. Нажмем кнопку Выполнить обновление индекса. Система заново создаст структуру файлов в удаленной ранее папке.

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

Влияние версии платформы и настроек динамического списка

Начиная с версии 8.3.10, платформа 1С использует разные режимы поиска в списках. Выясним, какой режим установлен у вас. В свойствах конфигурации или программно через настройки компоновки данных можно управлять параметром СпособПоискаВДинамическомСписке.

Существует три режима:

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


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    Список.СпособПоиска = СпособПоискаВДинамическомСписке.ПолнотекстовыйПоиск;
КонецПроцедуры

Работа с дополнительными реквизитами

Если в ваш динамический список добавлены дополнительные реквизиты (через механизм характеристик или прямым соединением в запросе), проанализируем их влияние. Для того чтобы поиск по этим полям работал через ППД, необходимо, чтобы у этих объектов метаданных (ПланыВидовХарактеристик, ДополнительныеСведения) в свойстве «Полнотекстовый поиск» было установлено значение Использовать.

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

Резюме: контрольный список действий

Чтобы окончательно решить проблему, рекомендуем последовательно выполнить следующие действия:

  1. Убедиться, что в строке поиска используется *, если нужно найти фрагмент внутри слова.
  2. Для SQL-баз: настроить планы обслуживания и обновить индексы на уровне СУБД.
  3. Для файловых баз: физически удалить папку 1Cv8FTxt и переиндексировать данные.
  4. Проверить свойства Использовать в объектах метаданных, участвующих в поиске.
  5. При использовании кастомных запросов в динамических списках убедиться, что основные таблицы списка (например, Документ.ПоступлениеТоваровУслуг) определены как основные таблицы (свойство ОсновнаяТаблица в настройках списка).

Выполнение этих шагов позволяет в большинстве случаев восстановить работоспособность поиска и обеспечить пользователям комфортную работу с документами.

← На главную