Почему в динамическом списке 1С поиск через Ctrl+F не находит новые документы, а Alt+F работает?

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

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

Различие механизмов поиска: Ctrl+F против Alt+F

Для начала проанализируем техническую сторону вопроса. В динамических списках 1С существует два принципиально разных метода поиска, которые визуально могут казаться похожими, но работают по-разному:

  1. Поиск по значению или части строки (Alt+F): Этот механизм чаще всего инициирует прямой SQL-запрос к базе данных. Платформа формирует запрос с оператором LIKE (ПОДОБНО) или простым равенством. Поскольку обращение идет напрямую к таблицам базы данных (SQL Server, PostgreSQL и др.), поиск всегда выдает актуальные данные, существующие в базе на текущий момент. Однако на миллионах записей такой поиск может существенно замедлять работу системы.
  2. Общий поиск по списку (Ctrl+F): По умолчанию это поле поиска в шапке динамического списка задействует механизм полнотекстового поиска (ППД). Платформа не обращается к SQL-таблицам напрямую, а ищет данные в заранее подготовленном специальном индексе. Если этот индекс не успел обновиться или поврежден, новые документы в результатах поиска просто не появятся, хотя физически они записаны в базу.

Таким образом, если Alt+F работает, а Ctrl+F — нет, мы имеем дело с проблемой актуальности индекса полнотекстового поиска.

Анализ состояния индекса полнотекстового поиска

Рассмотрим структуру полнотекстового индекса. Он состоит из двух частей:

Основной индекс: Это основной массив данных, по которому осуществляется поиск. Его построение — ресурсоемкая операция, которая обычно выполняется редко.

Добавочный индекс: В него попадают все изменения, произошедшие в базе с момента последнего построения основного индекса. Когда пользователь вводит поисковый запрос, система объединяет результаты из обеих частей.

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

Решение 1: Проверка регламентных заданий

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

Зайдем в «Консоль регламентных заданий» (или раздел «Обслуживание» -> «Регламентные операции») и проверим дату последнего завершения и статус этих заданий. Если задания «зависли» или завершаются с ошибкой, индекс перестанет быть актуальным.

Решение 2: Полная переиндексация через пользовательский интерфейс

Если регламентные задания работают, но поиск все равно не выдает новые данные, значит, индекс поврежден. Проанализируем, как его исправить. В типовых конфигурациях (ЕРП, УТ 11, БП 3.0) путь обычно следующий:

НСИ и администрирование -> Администрирование -> Поддержка и обслуживание -> Управление полнотекстовым поиском.

В открывшемся окне выполним следующие действия:

  1. Нажмем кнопку «Очистить индекс». Это полностью удалит файлы индекса с диска сервера.
  2. Нажмем кнопку «Обновить индекс». Система начнет процесс первичного построения данных.

Важный момент: для больших баз данных процесс может занять значительное время (от нескольких часов до суток). Однако пользователям это мешать не должно — платформа умеет эмулировать поиск по базе, пока индекс строится, хотя это и будет работать медленнее.

Решение 3: Радикальная очистка файлов на сервере

Бывают ситуации, когда кнопка «Очистить индекс» в интерфейсе не помогает, так как файлы заблокированы процессами сервера rphost. В этом случае нам потребуется помощь системного администратора. Разберем шаги для серверного варианта базы:

  1. Остановим службу сервера 1С:Предприятие.
  2. Перейдем в каталог данных сервера (обычно это C:\Program Files\1cv8\srvinfo).
  3. Найдем папку конкретной информационной базы (ее ID можно посмотреть в консоли администрирования).
  4. Внутри папки базы найдем директорию 1Cv8FTxt и полностью удалим её содержимое.
  5. Запустим службу сервера 1С.
  6. Зайдем в базу и запустим полное обновление индекса через интерфейс.

Это гарантирует удаление всех «битых» сегментов индекса, которые могли возникнуть из-за блокировок антивируса или аварийного завершения работы сервера.

Программное управление индексом

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


// Принудительное обновление индекса полнотекстового поиска
Если ПолнотекстовыйПоиск.ПолучитьРежим() = РежимПолнотекстовогоПоиска.Разрешить Тогда
    // Первый параметр - Истина (разрешить слияние), второй - Ложь (не только порция)
    ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Ложь);
КонецЕсли;

Метод ПолнотекстовыйПоиск.ОбновитьИндекс позволяет поддерживать базу в актуальном состоянии, если по какой-то причине стандартные регламентные задания не подходят под ваши задачи. При возникновении ошибок совместимости или необходимости переключения режимов работы можно использовать обработку для изменения версии полнотекстового поиска в базе.

Настройки динамического списка и метаданных

Иногда причина кроется не в поломке индекса, а в настройках самой конфигурации. Проанализируем два важных момента:

  1. Свойство «Поиск при вводе»: В свойствах динамического списка на форме есть параметр ПоискПриВводе. Если там жестко установлено значение Использовать полнотекстовый поиск, система всегда будет зависеть от индекса. Рекомендуется использовать значение Авто.
  2. Свойства реквизитов: Убедимся, что для реквизита «Склад» в конфигураторе установлено свойство Полнотекстовый поиск -> Использовать. Если это свойство отключено, данные этого поля вообще не попадут в индекс ППД, и поиск Ctrl+F по ним никогда не сработает, в то время как Alt+F будет продолжать работать через SQL.

Также стоит учитывать версию платформы. В ветках 8.3.15–8.3.18 наблюдались ошибки, когда поиск игнорировал данные, если текст запроса динамического списка содержал сложные объединения (LEFT JOIN). В таких случаях помогает либо упрощение запроса (выборка из основной таблицы), либо обновление платформы до актуального релиза.

Подведем итог: если поиск перестал видеть новые документы, в 95% случаев это лечится полной очисткой и перестроением индекса ППД в сочетании с проверкой регламентных заданий на сервере.

← На главную