При работе с большими списками документов в системе «1С:Предприятие 8.3» пользователи часто сталкиваются со странным поведением поиска: старые данные по строке находятся мгновенно, а документы, созданные сегодня или вчера, в выдачу не попадают. При этом, если использовать поиск по конкретной колонке или стандартный отбор, данные отображаются корректно. Давайте детально разберем, почему так происходит, и как восстановить работоспособность механизмов поиска. В качестве альтернативного решения, позволяющего обойти ограничения платформенных механизмов, можно использовать инструмент для организации гибкого поиска в списках.
Для начала проанализируем техническую сторону вопроса. В динамических списках 1С существует два принципиально разных метода поиска, которые визуально могут казаться похожими, но работают по-разному:
LIKE (ПОДОБНО) или простым равенством. Поскольку обращение идет напрямую к таблицам базы данных (SQL Server, PostgreSQL и др.), поиск всегда выдает актуальные данные, существующие в базе на текущий момент. Однако на миллионах записей такой поиск может существенно замедлять работу системы.Таким образом, если Alt+F работает, а Ctrl+F — нет, мы имеем дело с проблемой актуальности индекса полнотекстового поиска.
Рассмотрим структуру полнотекстового индекса. Он состоит из двух частей:
Основной индекс: Это основной массив данных, по которому осуществляется поиск. Его построение — ресурсоемкая операция, которая обычно выполняется редко.
Добавочный индекс: В него попадают все изменения, произошедшие в базе с момента последнего построения основного индекса. Когда пользователь вводит поисковый запрос, система объединяет результаты из обеих частей.
Проблема «старые ищет, новые — нет» часто возникает, когда добавочный индекс переполнен или процедура слияния индекса (переноса данных из добавочного в основной) завершается с ошибкой. В этом случае новые данные индексируются «в хвост», но механизм выдачи перестает их учитывать из-за нарушения целостности структуры 1Cv8FTxt.
Первым делом нам необходимо убедиться, что в системе исправно работают фоновые процессы. Для работы поиска в актуальном состоянии должны регулярно выполняться два регламентных задания:
Зайдем в «Консоль регламентных заданий» (или раздел «Обслуживание» -> «Регламентные операции») и проверим дату последнего завершения и статус этих заданий. Если задания «зависли» или завершаются с ошибкой, индекс перестанет быть актуальным.
Если регламентные задания работают, но поиск все равно не выдает новые данные, значит, индекс поврежден. Проанализируем, как его исправить. В типовых конфигурациях (ЕРП, УТ 11, БП 3.0) путь обычно следующий:
НСИ и администрирование -> Администрирование -> Поддержка и обслуживание -> Управление полнотекстовым поиском.
В открывшемся окне выполним следующие действия:
Важный момент: для больших баз данных процесс может занять значительное время (от нескольких часов до суток). Однако пользователям это мешать не должно — платформа умеет эмулировать поиск по базе, пока индекс строится, хотя это и будет работать медленнее.
Бывают ситуации, когда кнопка «Очистить индекс» в интерфейсе не помогает, так как файлы заблокированы процессами сервера rphost. В этом случае нам потребуется помощь системного администратора. Разберем шаги для серверного варианта базы:
C:\Program Files\1cv8\srvinfo).1Cv8FTxt и полностью удалим её содержимое.Это гарантирует удаление всех «битых» сегментов индекса, которые могли возникнуть из-за блокировок антивируса или аварийного завершения работы сервера.
Если вы разрабатываете собственное решение или расширение, вы можете инициировать обновление индекса программно. Рассмотрим пример кода, который можно поместить в обработку обслуживания:
// Принудительное обновление индекса полнотекстового поиска
Если ПолнотекстовыйПоиск.ПолучитьРежим() = РежимПолнотекстовогоПоиска.Разрешить Тогда
// Первый параметр - Истина (разрешить слияние), второй - Ложь (не только порция)
ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь);
КонецЕсли;
Метод ПолнотекстовыйПоиск.ОбновитьИндекс позволяет поддерживать базу в актуальном состоянии, если по какой-то причине стандартные регламентные задания не подходят под ваши задачи. При возникновении ошибок совместимости или необходимости переключения режимов работы можно использовать обработку для изменения версии полнотекстового поиска в базе.
Иногда причина кроется не в поломке индекса, а в настройках самой конфигурации. Проанализируем два важных момента:
ПоискПриВводе. Если там жестко установлено значение Использовать полнотекстовый поиск, система всегда будет зависеть от индекса. Рекомендуется использовать значение Авто.Полнотекстовый поиск -> Использовать. Если это свойство отключено, данные этого поля вообще не попадут в индекс ППД, и поиск Ctrl+F по ним никогда не сработает, в то время как Alt+F будет продолжать работать через SQL.Также стоит учитывать версию платформы. В ветках 8.3.15–8.3.18 наблюдались ошибки, когда поиск игнорировал данные, если текст запроса динамического списка содержал сложные объединения (LEFT JOIN). В таких случаях помогает либо упрощение запроса (выборка из основной таблицы), либо обновление платформы до актуального релиза.
Подведем итог: если поиск перестал видеть новые документы, в 95% случаев это лечится полной очисткой и перестроением индекса ППД в сочетании с проверкой регламентных заданий на сервере.