Как организовать поиск по коду в форме списка без отображения колонки на форме

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

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

Способ 1. Настройка свойства «Поля поиска» в Динамическом списке

Это самый «чистый» и правильный с точки зрения платформы способ. Динамический список — основной механизм отображения данных в управляемых формах — обладает гибкими настройками индексации полей для поиска. Рассмотрим алгоритм действий:

  1. Откроем конфигуратор и перейдем в форму списка нужного справочника.
  2. Выберем основной реквизит формы — Список (тип ДинамическийСписок).
  3. В окне свойств таблицы, связанной с этим списком, найдем раздел Использование.
  4. Нас интересует пункт Поля поиска. Нажмем на кнопку выбора (три точки).
  5. В открывшемся окне мы увидим список всех доступных полей. Найдем поле Код. Даже если эта колонка не выведена в визуальный состав элементов формы, установка флажка напротив неё позволит платформе учитывать данные этого поля при вводе запроса в стандартную строку поиска.

Проанализируем ситуацию: теперь при наборе цифр в поле поиска над списком система будет сопоставлять их не только с наименованием, но и со скрытым кодом. Это работает максимально эффективно, так как платформа оптимизирует такие запросы на уровне СУБД.

Способ 2. Использование механизма «Ввод по строке»

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

  1. В дереве конфигурации найдем нужный справочник и откроем его окно редактирования.
  2. Перейдем на вкладку Данные.
  3. Найдем кнопку Ввод по строке.
  4. В списке выбранных полей обязательно должно присутствовать поле Код. Если его там нет, добавим его из левой колонки.

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

Способ 3. Управление «Пользовательской видимостью»

Иногда программная установка свойства Видимость = Ложь приводит к тому, что платформа полностью исключает поле из состава данных, передаваемых на клиент, и, соответственно, поиск по нему перестает работать. Чтобы этого избежать, выясним причину и применим правильное свойство.

Вместо жесткого отключения видимости в конфигураторе или через код Элементы.СписокКод.Видимость = Ложь, рекомендуется использовать свойство Пользовательская видимость. Рассмотрим программный пример:


// Пример управления видимостью без потери возможности поиска
ЭлементКод = Элементы.Список.ПодчиненныеЭлементы.Код;
ЭлементКод.ПользовательскаяВидимость = Ложь;

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

Способ 4. Программная установка отбора (Кастомный поиск)

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

Разберем пример кода для обработчика события ПриИзменении вашего поля поиска:


&НаКлиенте
Процедура ПоискПоКодуПриИзменении(Элемент)
    
    // Очистим старые отборы по коду, чтобы не дублировать их
    ГруппаОтбора = Список.Отбор.Элементы;
    Для Каждого ЭлементОтбора Из ГруппаОтбора Цикл
        Если ТипЗнч(ЭлементОтбора) = Тип("ЭлементОтбораКомпоновкиДанных") 
            И ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Код") Тогда
            ГруппаОтбора.Удалить(ЭлементОтбора);
        КонецЕсли;
    КонецЦикла;

    // Если значение поиска заполнено, добавим новый отбор
    Если ЗначениеЗаполнено(ПоискПоКоду) Тогда
        НовыйОтбор = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
        НовыйОтбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Код");
        НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Содержит;
        НовыйОтбор.ПравоеЗначение = ПоискПоКоду;
        НовыйОтбор.Использование = Истина;
    КонецЕсли;
    
КонецПроцедуры

Этот метод позволяет полностью контролировать процесс и искать по коду, даже если он вообще не выведен в динамический список в качестве колонки (достаточно, чтобы он был в запросе списка).

Способ 5. Полнотекстовый поиск (ППД)

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

  1. У реквизита Код в свойствах метаданных установлено значение Полнотекстовый поиск — Использовать.
  2. В системе включено и актуализировано регламентное задание по обновлению индекса полнотекстового поиска.

Проанализируем: ППД работает медленнее, чем прямой отбор в списке, но он незаменим, если пользователь ищет запись, не зная точно, в каком справочнике она находится.

Способ 6. Пользовательская настройка через «Изменить форму»

Наконец, проанализируем ситуацию с точки зрения пользователя. Если разработка завершена, а поле Код нужно скрыть или, наоборот, сделать доступным для поиска «здесь и сейчас», можно воспользоваться механизмом Изменить форму:

  1. В режиме «1С:Предприятие» в форме списка нажмем Ещё — Изменить форму.
  2. Если поля Код нет в списке, его можно добавить через кнопку Добавить поля (если это разрешено разработчиком).
  3. После добавления просто снимите галочку видимости напротив поля Код.

В большинстве релизов платформы 8.3 такое поле останется в составе данных формы и будет доступно для расширенного поиска (Ctrl+Shift+F) в списке доступных полей, даже будучи невидимым в самой таблице.

Резюме

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

← На главную