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

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

При переходе на новые версии платформы «1С:Предприятие 8» (начиная с 8.3.15, 8.3.16 и далее, включая 8.3.17) многие разработчики и пользователи сталкиваются с неожиданным поведением интерфейса поиска. Особенно часто вопросы возникают при работе с табличными частями документов и справочников: пропадает строка поиска, в меню управления поиском отсутствуют привычные кнопки (например, «Отменить поиск»), или поиск вообще перестает выводиться на форму, поэтому для автоматизации процесса обновления и тестирования баз в таких условиях удобно использовать инструмент для автоматического обслуживания 1С.

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

Архитектурные различия: Динамический список против Табличной части

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

  1. Динамический список: Этот объект работает непосредственно с базой данных на сервере. При поиске платформа может использовать полнотекстовый поиск (ППД) и формировать сложные SQL-запросы к СУБД. Именно поэтому меню «Управление поиском» динамического списка содержит обширный набор команд: «Найти по текущему значению», «Расширенный поиск», «Установить период» и кнопку «Отменить поиск». Отмена поиска здесь — это тяжелая операция, которая требует отправки повторного запроса к СУБД для получения полного списка данных без фильтрации.
  2. Табличная часть (коллекция в памяти): Данные табличной части документа или справочника уже полностью загружены на сторону клиента и находятся в оперативной памяти компьютера (в виде объекта ДанныеФормыКоллекция). Полнотекстовый поиск для локальных данных невозможен по определению. Поиск по табличной части — это, по сути, быстрый локальный отбор (фильтрация) строк по набранным символам. Он выполняется мгновенно силами самого клиента.

Именно из-за этого логика платформы для табличных частей отличается. Отдельная кнопка «Отменить поиск» в подменю управления локальной таблицей была признана разработчиками 1С избыточной (поведение by design). Так как поиск в табличной части — это простая фильтрация, отмена поиска выполняется стандартным стиранием текста в поле ввода (нажатием на «крестик» очистки) или с помощью стандартных горячих клавиш:

Таким образом, «урезанное» меню управления поиском в табличной части — это не ошибка, а штатное поведение платформы, обусловленное локальным характером обрабатываемых данных.

Почему строка поиска и управление поиском пропадают из формы?

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

Причина А: Отключение автозаполнения командной панели таблицы

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

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

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

Причина Б: Специфика работы расширений и сброс свойств

При заимствовании форм в расширения конфигурации свойства элементов управления (включая настройки отображения поиска) могут сбрасываться в значения по умолчанию или вести себя некорректно из-за несоответствия версий совместимости платформы. На платформе 8.3.17 и выше часто требуется явно инициализировать свойства таблицы формы в коде, чтобы гарантировать появление поиска. Для исследования структуры и изменения свойств элементов прямо в пользовательском режиме можно использовать редактор управляемых форм в режиме Предприятия.

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

Программная настройка и вывод элементов поиска

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

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

Разберем пример программного создания таблицы и настройки поиска:


&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

КонецПроцедуры

В данном коде мы использовали системное перечисление ПоложениеСтрокиПоиска и ПоложениеУправленияПоиском. Возможные значения для этих свойств:

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


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

Конфликт стандартного поиска с программным свойством ОтборСтрок

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

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


// Пример программной установки отбора строк, который может заблокировать поиск
Элементы.Товары.ОтборСтрок = Новый ФиксированнаяСтруктура("Активный", Истина);

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

Резюме и рекомендации

Проанализировав поведение платформы 1С при работе с поиском по табличным частям, мы можем сформулировать следующие правила для успешной разработки:

  1. Примите как данность отсутствие кнопки «Отменить поиск» в меню локальных таблиц. Обучите пользователей использовать очистку поля ввода («крестик») или горячие клавиши Ctrl + Q и Esc.
  2. Если в форме сброшено автозаполнение командной панели, всегда вручную добавляйте элементы типа «Дополнение элемента формы» для строки поиска и управления поиском.
  3. При доработке форм через расширения всегда явно прописывайте свойства ПоложениеСтрокиПоиска и ПоложениеУправленияПоиском в обработчике ПриСозданииНаСервере, чтобы избежать их непредсказуемого сброса платформой.
  4. Избегайте использования свойства ОтборСтрок, если пользователям жизненно необходим стандартный полнотекстовый поиск по строкам табличной части.
← На главную