Почему не работает поиск по справочнику из расширения в 1С и как это исправить?

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

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

Причина 1: Ошибки платформы и необходимость обновления

Проанализируем техническую сторону вопроса. В версиях платформы ниже 8.3.15 (например, в релизе 8.3.14.1630) существовали внутренние ошибки механизма индексации объектов расширений. Метаданные, которые «накладываются» расширением на основную конфигурацию, не всегда корректно регистрировались в системе полнотекстового поиска (ППП). В результате фоновые задания индексации просто игнорировали таблицы расширений.

Выясним, как это лечится. В большинстве случаев единственным надежным решением является обновление технологической платформы. Рассмотрим пример из практики: переход с версии 8.3.14 на 8.3.16.1063 полностью устраняет проблему «невидимости» данных расширения для поисковых индексов. Если вы столкнулись с подобным поведением, первым делом проверьте версию вашей платформы.

Причина 2: Свойства индексации реквизитов в расширении

Разберем ситуацию, когда обновление платформы невозможно или не помогло. Для того чтобы стандартный поиск (особенно строковый поиск в динамическом списке) работал корректно, платформа должна иметь возможность быстро находить данные. За это отвечает свойство реквизитов «Индексировать».

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

  1. Откройте свойства реквизита в расширении.
  2. Найдите поле «Индексировать».
  3. Установите значение «Индексировать» или «Индексировать с дополнительным упорядочиванием».

Без физического индекса в базе данных SQL или в файловом варианте поиск по строке в больших списках может игнорироваться платформой для оптимизации производительности, что внешне выглядит как «неработающий поиск».

Причина 3: Настройка «Основной таблицы» динамического списка

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

Если в качестве источника данных используется произвольный запрос, но не указана Основная таблица (например, Справочник.МойСправочникИзРасширения), механизм стандартного поиска 1С не «понимает», к каким полям и индексам обращаться. Убедитесь, что в поле Основная таблица выбран именно ваш справочник из расширения.

Причина 4: Использование полнотекстового поиска (ППП)

Выясним, включен ли вообще механизм поиска для конкретного объекта. У каждого справочника в расширении есть свойство «Использовать полнотекстовый поиск». По умолчанию оно может стоять в значении Авто, но для надежности рекомендуется проверить следующие моменты:

Причина 5: Режим совместимости конфигурации

Рассмотрим важный нюанс: даже если вы установили самую новую платформу (например, 8.3.23), ваша конфигурация может работать в режиме совместимости со старой версией (например, 8.3.12). В этом режиме многие механизмы расширений работают по «старым» правилам, которые содержали ошибки индексации. Если есть возможность, попробуйте постепенно повышать режим совместимости основной конфигурации (это требует тщательного тестирования всей системы).

Причина 6: Очистка серверного кэша

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

  1. Остановите службу 1C:Enterprise Server.
  2. Перейдите в папку кластера (обычно это C:\Program Files\1cv8\srvinfo\reg_1541).
  3. Найдите и удалите содержимое папки snccntx. В ней хранятся закэшированные метаданные расширений.
  4. Запустите службу сервера.

После этой процедуры платформа будет вынуждена заново пересчитать структуру расширений и сопоставить их с индексами поиска.

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

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


// Принудительное обновление индекса полнотекстового поиска
ПолнотекстовыйПоиск.ОбновитьИндекс(Ложь, Истина);

// Проверка состояния индекса
Если ПолнотекстовыйПоиск.ОбновитьИндекс() Тогда
    Сообщить("Индекс успешно обновлен и готов к работе.");
КонецЕсли;

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

← На главную