При разработке расширений для системы 1С:Предприятие 8.3 программисты часто сталкиваются с ситуацией, когда новый объект (например, справочник), добавленный в расширение, ведет себя не так, как типовой. Одной из наиболее раздражающих проблем является неработающий поиск. Пользователь вводит данные в строку поиска на форме списка или в форме подбора, но система не выдает никаких результатов, хотя данные в базе точно есть. Рассмотрим подробно, почему это происходит и как пошагово решить данную проблему.
Проанализируем техническую сторону вопроса. В версиях платформы ниже 8.3.15 (например, в релизе 8.3.14.1630) существовали внутренние ошибки механизма индексации объектов расширений. Метаданные, которые «накладываются» расширением на основную конфигурацию, не всегда корректно регистрировались в системе полнотекстового поиска (ППП). В результате фоновые задания индексации просто игнорировали таблицы расширений.
Выясним, как это лечится. В большинстве случаев единственным надежным решением является обновление технологической платформы. Рассмотрим пример из практики: переход с версии 8.3.14 на 8.3.16.1063 полностью устраняет проблему «невидимости» данных расширения для поисковых индексов. Если вы столкнулись с подобным поведением, первым делом проверьте версию вашей платформы.
Разберем ситуацию, когда обновление платформы невозможно или не помогло. Для того чтобы стандартный поиск (особенно строковый поиск в динамическом списке) работал корректно, платформа должна иметь возможность быстро находить данные. За это отвечает свойство реквизитов «Индексировать».
Посмотрим, какие настройки должны быть установлены у ключевых полей вашего справочника в расширении (например, Наименование, Код или ваши дополнительные реквизиты):
Без физического индекса в базе данных SQL или в файловом варианте поиск по строке в больших списках может игнорироваться платформой для оптимизации производительности, что внешне выглядит как «неработающий поиск».
Проанализируем работу формы списка справочника. Поиск в поле на форме напрямую зависит от того, как настроен ДинамическийСписок. Если форма создана вручную или была значительно изменена в расширении, проверьте свойство «Основная таблица» в настройках списка.
Если в качестве источника данных используется произвольный запрос, но не указана Основная таблица (например, Справочник.МойСправочникИзРасширения), механизм стандартного поиска 1С не «понимает», к каким полям и индексам обращаться. Убедитесь, что в поле Основная таблица выбран именно ваш справочник из расширения.
Выясним, включен ли вообще механизм поиска для конкретного объекта. У каждого справочника в расширении есть свойство «Использовать полнотекстовый поиск». По умолчанию оно может стоять в значении Авто, но для надежности рекомендуется проверить следующие моменты:
Использовать.Рассмотрим важный нюанс: даже если вы установили самую новую платформу (например, 8.3.23), ваша конфигурация может работать в режиме совместимости со старой версией (например, 8.3.12). В этом режиме многие механизмы расширений работают по «старым» правилам, которые содержали ошибки индексации. Если есть возможность, попробуйте постепенно повышать режим совместимости основной конфигурации (это требует тщательного тестирования всей системы).
Иногда проблема кроется не в коде, а в «зависшем» состоянии метаданных на сервере приложений 1С. Если чистка локального кэша пользователя не помогает, необходимо выполнить очистку серверного кэша. Для этого выполните следующие шаги:
C:\Program Files\1cv8\srvinfo\reg_1541).snccntx. В ней хранятся закэшированные метаданные расширений.После этой процедуры платформа будет вынуждена заново пересчитать структуру расширений и сопоставить их с индексами поиска.
Если вы хотите убедиться, что данные вашего справочника попали в индекс программно, можно воспользоваться следующим кодом (например, в консоли кода или во внешней обработке):
// Принудительное обновление индекса полнотекстового поиска
ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);
// Проверка состояния индекса
Если ПолнотекстовыйПоиск.ОбновитьИндекс() Тогда
Сообщить("Индекс успешно обновлен и готов к работе.");
КонецЕсли;
Резюмируем: если у вас не работает поиск по справочнику в расширении, начните с проверки версии платформы. Если обновление до актуального релиза не помогает, последовательно проверьте индексацию реквизитов, настройки основной таблицы динамического списка и состояние полнотекстового поиска в базе данных.