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

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

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

Подготовка формы и добавление реквизита

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

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

⚠️ Внимание: Не создавайте реквизиты отбора с типом "Произвольный", если планируете использовать их в стандартных механизмах отбора 1С. Это может нарушить работу оптимизации запросов и привести к полному сканированию таблиц вместо использования индексов.

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

💡

Для полей типа "Дата" рекомендуется использовать период, состоящий из двух реквизитов (ДатаНачала и ДатаКонца), чтобы пользователь мог выбрать диапазон, а не конкретный день.

Настройка связи отбора с основным запросом

Просто добавить поле на форму недостаточно — система должна понимать, как использовать введенное значение. В платформе 1С:Предприятие 8 существует механизм автоматической связи реквизитов формы с параметрами основного запроса. Для этого в свойствах добавленного реквизита необходимо установить параметр "Вид" в значение "Отбор".

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

Важно правильно настроить условие сравнения. Платформа предлагает множество вариантов: Равно, Не равно, Больше, Содержит и другие. Выбор условия зависит от логики работы. Для поиска по части названия товара лучше всего подойдет условие Начинается с или Содержит, а для точного поиска по номеру документа — Равно.

Тип данных Рекомендуемое условие Особенности ввода
Строка Содержит / Начинается с Регистронезависимый поиск
Число Равно / Больше Точное числовое совпадение
Дата В интервале Требует два значения (с и по)
Справочник Равно Выбор из списка элементов

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

📊 Какой тип отбора вы используете чаще всего?
Точное совпадение (Равно)
Поиск по части строки (Содержит)
Период (Дата)
Составной тип
Другое

Программная установка отборов в модуле формы

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

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


&НаСервере

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

// Получаем текущую дату

ТекущаяДата = НачалоДня(ТекущаяДата());

// Устанавливаем отбор по дате документа

Отбор = ЭлементыФормы.Список.ПолучитьЭлементыОтбора().Добавить();

Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Дата");

Отбор.ВидСравнения = ВидСравнения.БольшеИлиРавно;

Отбор.ПравоеЗначение = ТекущаяДата;

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

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

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

Работа с динамическими списками и СКД

Современные формы списков в 1С часто строятся на основе системы компоновки данных (СКД). В этом случае механизм отборов работает несколько иначе, чем в обычных динамических списках. Здесь отборы настраиваются через параметры схемы компоновки, а не напрямую через свойства элементов формы.

Для добавления отбора в СКД необходимо открыть редактор схемы компоновки данных. В разделе "Параметры" создается новый параметр, который затем связывается с полем вывода в настройках. На форме этот параметр автоматически отображается как поле ввода, если правильно настроено соответствие имен.

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

Особенности производительности СКД

При использовании больших объемов данных СКД может работать медленнее простых динамических списков из-за накладных расходов на формирование структуры отчета. Оптимизируйте запросы и используйте индексы в базе данных.

Если вам необходимо программно изменить параметры СКД, следует обращаться к свойству ПараметрыДанных объекта списка. Значения параметров передаются в запрос компоновки, который затем формирует итоговый набор записей.

Обработка событий и обновление списка

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

Для реквизитов, добавленных как отборы, платформа обычно автоматически подписывается на событие изменения значения. Однако, если вы используете сложные вычисляемые поля или каскадные отборы (когда выбор в одном поле влияет на доступные значения в другом), может потребоваться явная обработка события ПриИзменении.

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

☑️ Проверка работы отборов

Выполнено: 0 / 5

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

Типовые ошибки и способы их устранения

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

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

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

⚠️ Внимание: Интерфейс и точные названия свойств в конфигураторе могут незначительно отличаться в зависимости от версии платформы 1С:Предприятие. Всегда сверяйтесь с официальной документацией для вашей конкретной версии релиза.

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

💡

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

Как добавить отбор по периоду на форму списка?

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

Почему отбор не применяется после ввода значения?

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

Можно ли сделать отбор по нескольким полям одновременно?

Да, вы можете добавить на форму любое количество реквизитов-отборов. Все они будут работать в связке по логическому правилу "И". То есть в список попадут только те записи, которые удовлетворяют всем установленным условиям одновременно.

Как программно очистить все отборы на форме?

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