Почему при наборе номера в строке поиска динамического списка пропадают документы?

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

При работе в управляемом интерфейсе 1С:Предприятие часто возникает ситуация: пользователь вводит в поле поиска первые символы номера документа (например, 120), и в списке отображаются нужные документы, включая 12012. Однако стоит дописать следующий символ (1201), как список резко пустеет, а искомый документ исчезает. Разберем, почему возникает такое поведение платформы и как быстро восстановить корректную работу поиска.

Механика работы строки поиска в динамических списках

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

Полнотекстовый индекс состоит из двух частей:

  1. Основной индекс — содержит глобально проиндексированные данные за длительный период.
  2. Дополнительный индекс — хранит свежие изменения и дельту данных, добавленных недавно.

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

Проанализируем основные пути решения этой проблемы, от стандартного администрирования до временных обходных путей.

Решение 1. Очистка и полное перестроение индекса полнотекстового поиска

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

  1. Перейдем в режим 1С:Предприятие с правами администратора.
  2. Откроем форму управления полнотекстовым поиском. В типовых конфигурациях путь обычно следующий: Администрирование — Общие настройки — Поиск данных (либо воспользуемся стандартной обработкой УправлениеПолнотекстовымПоиском через меню «Все функции» / «Функции для технического специалиста»).
  3. Нажмем кнопку «Очистить индекс». Это действие полностью удалит старую поврежденную структуру и служебные файлы индекса.
  4. После завершения очистки нажмем «Обновить индекс». Платформа создаст актуальный индекс с нуля.

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


// Полная очистка и переиндексация данных
ПолнотекстовыйПоиск.ОчиститьИндекс();
ПолнотекстовыйПоиск.ОбновитьИндекс(Истина, Истина);

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

Решение 2. Выполнение слияния индексов

Иногда регламентное задание «Обновление индекса ППД» выполняется регулярно, но регламентное задание «Слияние индекса ППД» отключено или зависает. В результате дополнительный индекс разрастается до огромных размеров, что приводит к сбоям токенизации и неполной выдаче результатов при поиске по числам и строкам.

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


// Выполняем слияние дополнительного индекса с основным
ПолнотекстовыйПоиск.СлияниеИндексов();

Альтернативные варианты и обходные пути

Рассмотрим дополнительные методы, которые помогут пользователям находить документы, если перестроение индекса ППД в данный момент невозможно (например, в течение рабочего дня под высокой нагрузкой):

  1. Использование расширенного поиска по конкретной колонке: вместо верхней универсальной строки поиска нажмем клавишу Alt + F (или вызовем контекстное меню колонки «Номер» и выберем пункт «Найти»). В появившемся окне укажем способ поиска «по части строки». Такой поиск не обращается к ППД, а формирует прямой SQL-запрос к СУБД с условием ПОДОБНО, что гарантированно найдет документ.
  2. Отключение полнотекстового поиска в базе: если специфика работы не требует глобального полнотекстового поиска, его можно полностью выключить в настройках программы. В этом случае верхняя строка поиска динамических списков автоматически переключается на прямой поиск средствами СУБД по всем видимым колонкам списка.
  3. Проверка свойств реквизита в конфигураторе: проверим свойства реквизита документа в дереве метаданных. Свойство Полнотекстовый поиск должно иметь значение Использовать. Если установлено Не использовать, полнотекстовый поиск будет полностью игнорировать содержимое данного поля.
  4. Обновление платформы: в версиях ветки 8.3.6 (включая релиз 8.3.6.2237) наблюдались платформенные ошибки взаимодействия динамических списков и фонового получения порций индекса. При регулярном повторении проблемы рекомендуется запланировать обновление платформы на актуальный стабильный релиз.
← На главную