Проблемы с полнотекстовым поиском (ПП) в 1С — это классическая «головная боль» администраторов и разработчиков. Особенно остро это проявилось в последних релизах платформы, таких как 8.3.24 и 8.3.25. Типичная ситуация: поиск по первой букве в поле выбора срабатывает, но стоит пользователю ввести вторую букву — список становится пустым. При этом, если перезаписать объект вручную, он чудесным образом начинает находиться. Разберем детально, почему так происходит и как привести систему в чувство.
Прежде всего, проанализируем, почему «перезапись» объекта помогает. В 1С полнотекстовый поиск работает через два типа индексов: основной и дополнительный (оперативный). При массовой индексации данные попадают в основной индекс. При записи конкретного объекта он попадает в оперативный индекс, который обрабатывается механизмом поиска иначе. Если поиск ломается при вводе второй буквы, это верный признак того, что основной индекс поврежден, либо механизм лингвистического анализа версии 2.0 некорректно обрабатывает накопленные словоформы.
Стандартная кнопка «Очистить индекс» в пользовательском интерфейсе не всегда удаляет физические файлы на диске. Рассмотрим правильный алгоритм полной очистки:
srvinfo.Существуют ситуации, когда стандартные инструменты управления поиском не помогают из-за зависших системных флагов в базе данных. В этом случае применим программный метод. Создадим внешнюю обработку и выполним следующий код:
// Полное перестроение индекса программным способом
ПолнотекстовыйПоиск.УстановитьРежимПереиндексации(РежимПереиндексации.Полная);
ПолнотекстовыйПоиск.Очистить();
ПолнотекстовыйПоиск.Обновить(Истина); // Параметр Истина означает полное обновление
Этот метод принудительно устанавливает режим переиндексации, что заставляет платформу игнорировать старые системные таблицы полнотекстового поиска и строить их заново «с нуля».
Проанализируем влияние расширений конфигурации. В версиях 8.3.24+ поиск может конфликтовать с расширениями, если их режим совместимости ниже версии основной конфигурации. Посмотрим на список действий:
ОбновлениеИндексаПолнотекстовогоПоиска другими процессами. В этом поможет консоль регламентных и фоновых заданий, которая позволяет наглядно отслеживать состояние процессов. Часто антивирус на сервере блокирует доступ к временным файлам в момент их записи службой rphost.Полнотекстовый поиск 1С версии 2.0 крайне чувствителен к нетипичным символам. Если в наименовании контрагента или артикуле товара присутствуют символы типа &, #, № или неразрывные пробелы, индекс может «споткнуться». Выясним причину, попробовав ограничить область поиска:
Иногда проблема кроется не в самом индексе, а в кэшированных данных пользовательских сеансов. На сервере приложений 1С за это отвечают файлы в папке snccntxt. Разберем последовательность действий:
snccntxt в профиле пользователя, под которым запущен сервер 1С (обычно в Local Settings\Application Data\1C\1cv8\...). Чтобы упростить этот процесс в будущем, рекомендуется настроить автоматическую очистку серверного кэша скриптом.Если ни один из методов не помогает, и поиск продолжает «глючить» на платформе 8.3.25, проанализируем возможность переключения движка поиска. В некоторых конфигурациях помогает временное переключение на полнотекстовый поиск версии 1.0, который менее требователен к строковым данным, хотя и работает медленнее. Однако помните, что это лишь временная мера до обновления на исправленный релиз платформы (например, ветку 8.3.27, где многие ошибки ПП были устранены).
Важный момент: если ваша база работает на MS SQL Server, рекомендуется также выполнить реиндексацию и обновление статистик средствами самого SQL. В этом поможет инструкция по настройке регламентных операций MS SQL SERVER. Хотя ПП хранит данные в файлах, служебные связи между объектами и их индексами хранятся в SQL-таблицах, и их корректное состояние критично. Для качественного мониторинга базы лучше анализировать SQL сервер глазами 1С-ника, а при проведении обслуживания на новых версиях платформы использовать доработанный IndexOptimize, исправляющий ошибки блокировок на уровне страниц.
Подведем итог: решение проблемы с поиском «по одной букве» требует комплексного подхода — от физического удаления файлов индекса до проверки чистоты данных от спецсимволов и программного сброса состояния поиска через ПолнотекстовыйПоиск.УстановитьРежимПереиндексации.