Как реализовать строку поиска и программную фильтрацию в таблице справочника «Виды номенклатуры»?

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

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

Реализация строки поиска через дополнение элемента формы

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

Для корректного отображения поиска разберем метод использования Дополнения элемента формы. Выполним следующие шаги:

  1. В конфигураторе откроем форму справочника ВидыНоменклатуры.
  2. Найдем в дереве элементов формы нужную таблицу (например, РеквизитыДляКонтроляНоменклатуры).
  3. Нажмем правую кнопку мыши на элементе таблицы и выберем пункт Добавить дополнение.
  4. В появившемся списке выберем Управление поиском (или «Строка поиска»).

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

Программная фильтрация: разделение на стандартные и дополнительные реквизиты

Одной из частых задач является создание кнопок, которые позволяют быстро переключаться между отображением только «стандартных» реквизитов (встроенных в метаданные) и «дополнительных» (созданных в ПВХ «Дополнительные реквизиты и сведения»). Выясним, как это реализовать.

В типовых решениях (ERP, УТ, КА) таблица реквизитов в справочнике ВидыНоменклатуры обычно содержит скрытую булеву колонку ЭтоДопРеквизит. Именно ее мы будем использовать для настройки отбора. Посмотрим на пример кода, который устанавливает фильтр на форме:


// Пример для отображения только дополнительных реквизитов
&НаКлиенте
Процедура ПоказатьТолькоДополнительные(Команда)
    
    // Устанавливаем фиксированную структуру для отбора
    Отбор = Новый ФиксированнаяСтруктура("ЭтоДопРеквизит", Истина);
    Элементы.РеквизитыДляКонтроляНоменклатуры.ОтборСтрок = Отбор;
    
КонецПроцедуры

// Пример для сброса фильтра (показать всё)
&НаКлиенте
Процедура ПоказатьВсеРеквизиты(Команда)
    
    Элементы.РеквизитыДляКонтроляНоменклатуры.ОтборСтрок = Неопределено;
    
КонецПроцедуры

Разберем, почему мы используем свойство ОтборСтрок. Метод НайтиСтроки, который часто путают с фильтрацией, предназначен для получения массива данных в памяти (на уровне объекта ТаблицаЗначений), но он не меняет визуальное отображение таблицы на форме. Свойство же ОтборСтрок элемента формы Таблица работает непосредственно с интерфейсом, скрывая ненужные строки от пользователя.

Особенности работы с типом данных ФиксированнаяСтруктура

Важно помнить, что свойство ОтборСтрок принимает значение типа ФиксированнаяСтруктура. Если мы попытаемся передать обычную Структура, платформа может выдать ошибку или проигнорировать установку. Проанализируем правильный синтаксис:


// Установка отбора для стандартных реквизитов
НовыйОтбор = Новый Структура;
НовыйОтбор.Вставить("ЭтоДопРеквизит", Ложь);

// Преобразуем в фиксированную структуру при назначении
Элементы.РеквизитыДляКонтроляНоменклатуры.ОтборСтрок = Новый ФиксированнаяСтруктура(НовыйОтбор);

Визуальное выделение и сортировка

Для того чтобы сделать интерфейс еще более понятным, мы можем настроить Условное оформление формы. Это позволит, например, выделить дополнительные реквизиты курсивом или подчеркиванием. Рассмотрим, как это сделать программно в процедуре ПриСозданииНаСервере:


ЭлементОформления = УсловноеОформление.Элементы.Добавить();

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

// Оформление: Шрифт подчеркнутый
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("Шрифт", Новый Шрифт(,,Истина));
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("РеквизитыДляКонтроляНоменклатурыНаименование");

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


// Сортировка данных в табличной части
Объект.РеквизитыДляКонтроляНоменклатуры.Сортировать("ЭтоДопРеквизит Убыв, ИмяРеквизита Возр");

Работа в расширении конфигурации

При переносе данных доработок в расширение, нужно учитывать несколько нюансов. Чтобы не добавлять каждый объект вручную, мы можем добавить весь справочник ВидыНоменклатуры в расширение целиком. Однако, если мы планируем изменять только форму, достаточно добавить в расширение именно форму.

Обратите внимание: если вы добавляете новые реквизиты в табличную часть РеквизитыДляКонтроляНоменклатуры, убедитесь, что эти реквизиты также проброшены в расширение. В противном случае программный код в модуле формы расширения (например, при установке отбора) не увидит этих полей и вызовет ошибку времени выполнения.

Таким образом, сочетание использования Дополнений элемента формы для поиска и свойства ОтборСтрок для фильтрации позволяет создать профессиональный и удобный интерфейс в справочнике видов номенклатуры без значительных затрат ресурсов платформы.

← На главную