Как сделать реквизит из расширения доступным в стандартном поиске динамического списка

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

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

Анализ причины проблемы: влияние ключевого слова РАЗЛИЧНЫЕ

Рассмотрим ситуацию, когда динамический список использует произвольный запрос. Часто в таких запросах для исключения дублирования строк (например, при соединении с табличными частями или регистрами сведений) используется ключевое слово РАЗЛИЧНЫЕ (DISTINCT). Выясним, как это влияет на механизмы платформы.

Когда в запросе присутствует РАЗЛИЧНЫЕ, платформа 1С воспринимает результат как некую временную выборку, а не прямую проекцию полей таблицы базы данных. В этом режиме автоматическое сопоставление полей списка и реквизитов метаданных для целей фильтрации и поиска может работать некорректно. Платформа просто «не понимает», что поле МоеПоле в результатах запроса — это тот самый индексируемый реквизит справочника, по которому нужно разрешить поиск.

Решение через расширение секции компоновки данных

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

Неправильный вариант:

В данном случае поле описано в блоке выбора, но в секции ГДЕ оно указано без псевдонима, что при использовании РАЗЛИЧНЫЕ не позволяет поисковому механизму сопоставить данные.


ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    СправочникСотрудники.Ссылка КАК Ссылка,
    СправочникСотрудники.МойРеквизитИзРасширения КАК МоеПоле
ИЗ
    Справочник.Сотрудники КАК СправочникСотрудники
{ГДЕ
    СправочникСотрудники.МойРеквизитИзРасширения
}

Правильный вариант:

Необходимо явно прописать псевдоним поля внутри фигурных скобок секции ГДЕ. Это создает жесткую связь между колонкой динамического списка и источником данных для системы компоновки (СКД), на которой базируются динамические списки.


ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
    СправочникСотрудники.Ссылка КАК Ссылка,
    СправочникСотрудники.МойРеквизитИзРасширения КАК МоеПоле
ИЗ
    Справочник.Сотрудники КАК СправочникСотрудники
{ГДЕ
    СправочникСотрудники.МойРеквизитИзРасширения КАК МоеПоле
}

После внесения таких изменений платформа получит четкую инструкцию: «Поле МоеПоле доступно для фильтрации и поиска, и оно соответствует реквизиту МойРеквизитИзРасширения».

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

Помимо редактирования текста запроса, важно проверить настройки самого объекта «Динамический список» в редакторе формы. Пройдем по шагам настройки, которые гарантируют корректную работу поиска:

  1. Основная таблица: Убедимся, что в свойствах динамического списка заполнено поле Основная таблица. Для нашего примера там должен быть выбран Справочник.Сотрудники. Если это свойство не заполнено, поиск по многим полям (особенно добавленным через расширение) может быть недоступен.
  2. Использовать всегда: Перейдем в настройки компоновки данных динамического списка (закладка «Настройки компоновки данных» -> «Поля»). Найдем наше новое поле и установим флаг «Использовать всегда». Это гарантирует, что поле будет включено в SQL-запрос платформы, даже если пользователь скрыл соответствующую колонку в интерфейсе. Это критически важно для работы глобального поиска.
  3. Автозаполнение: Если используется сложный произвольный запрос, иногда помогает снятие флага Автозаполнение и ручное указание пути к данным для каждого поля. Однако при правильном использовании фигурных скобок {} автозаполнение обычно работает корректно.

Проверка индексации и полнотекстового поиска

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

Важный нюанс: После добавления реквизита в расширение и обновления базы данных индекс полнотекстового поиска не обновляется мгновенно. Рассмотрим шаги для принудительного обновления:

  1. Зайдем в пользовательский режим под правами администратора.
  2. Перейдем в раздел Обслуживание — Управление полнотекстовым поиском.
  3. Нажмем кнопку «Обновить индекс». Только после этого новые данные из расширения станут доступны для глобальных механизмов поиска.

Особенности работы в ЗУП 3.1 и использование БСП

В конфигурациях типа «Зарплата и управление персоналом» формы списков часто строятся с использованием механизмов Библиотеки стандартных подсистем (БСП). Разберем ситуацию, когда поиск ограничен программно.

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

Резюме

Для того чтобы реквизит из расширения появился в окне поиска динамического списка, выполните следующие действия:

  1. Явно опишите поле в секции {ГДЕ ... КАК Псевдоним} внутри произвольного запроса.
  2. Укажите Основную таблицу в свойствах списка.
  3. Установите флаг «Использовать всегда» для этого поля в настройках СКД списка.
  4. Убедитесь в наличии индексов и актуальности индекса полнотекстового поиска.

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

← На главную