Работая с большими объемами данных в конфигурациях на базе платформы 1С:Предприятие 8, пользователи часто сталкиваются с необходимостью фильтрации информации. Форма списка — это основной интерфейс для просмотра справочников, документов и регистров, и умение грамотно настраивать отборы является критически важным навыком как для бухгалтера, так и для администратора системы. Неправильно настроенный отбор может привести к тому, что вы либо не увидите нужные записи, либо, наоборот, получите «кашу» из данных, в которой невозможно разобраться.
В этой статье мы детально разберем механизмы формирования отборов: от простых пользовательских действий в интерфейсе до сложных программных решений, которые закладываются разработчиками. Вы узнаете, как управлять видимостью полей, использовать логические операторы и сохранять свои настройки для быстрого доступа в будущем.
Понимание того, как работает механизм отбора на уровне метаданных и кода, позволит вам не только эффективно использовать готовые решения, но и создавать собственные обработки или дорабатывать существующие под специфические нужды вашего бизнеса.
Основы работы с отборами в пользовательском режиме
Для обычного пользователя интерфейс настройки отборов в 1С выглядит интуитивно понятным, хотя и требует знания некоторых нюансов. Стандартная форма списка содержит панель настроек, которую можно вызвать, нажав на кнопку с изображением воронки или шестеренки в верхней части окна. Именно здесь формируется условие отбора, которое платформа передает в запрос к базе данных.
При создании нового условия вы выбираете поле, по которому будет идти фильтрация. Это может быть любой реквизит объекта: дата, контрагент, сумма документа или статус проведения. Важно понимать разницу между типами сравнения. Например, для строк доступны варианты «Равно», «Содержит» или «Начинается с», а для чисел и дат — «Больше», «Меньше» или «В интервале».
Часто возникает ситуация, когда одного условия недостаточно. В таких случаях необходимо использовать составные отборы. Система позволяет добавлять несколько строк условий и связывать их логическими операторами. Вы можете построить сложную логику выборки, комбинируя требования.
- 🔍 И (AND) — запись попадет в выборку только если выполняются ВСЕ указанные условия одновременно.
- 🔍 ИЛИ (OR) — запись будет отображена, если выполняется ХОТЯ БЫ ОДНО из условий группы.
- 🔍 НЕ (NOT) — исключает записи, соответствующие указанному критерию, из общей выборки.
После настройки всех параметров необходимо нажать кнопку «Закрыть» или «ОК», чтобы форма списка перерисовалась. Если отбор настроен верно, вы увидите только те строки, которые соответствуют заданным критериям. В заголовке формы или на специальной панели обычно отображается значок воронки, сигнализирующий о том, что активен фильтр.
Сохранение и управление вариантами отборов
Ежедневно вводить одни и те же условия фильтрации — неэффективная трата времени. Платформа 1С предоставляет удобный механизм сохранения вариантов отборов. Это позволяет создать набор (пресетов) для различных рабочих ситуаций: «Мои документы за сегодня», «Товары с отрицательным остатком» или «Контрагенты-должники».
Чтобы сохранить текущую настройку, после формирования отбора нужно нажать на кнопку «Еще» в панели настроек и выбрать пункт «Сохранить вариант». Система предложит ввести имя варианта и, при необходимости, установить его как вариант по умолчанию. Это особенно полезно для автоматической фильтрации данных сразу при открытии формы списка.
Управление сохраненными вариантами осуществляется через то же меню. Вы можете редактировать условия существующего варианта, удалять устаревшие или создавать новые на основе уже имеющихся. Важно отметить, что варианты отборов могут быть как персональными (видны только вам), так и общими (доступны всем пользователям базы), в зависимости от настроек прав доступа и конфигурации.
⚠️ Внимание: При обновлении конфигурации или переносе базы данных на новый сервер пользовательские варианты отборов могут быть сброшены или потеряны, если они хранились в локальных настройках пользователя, а не в информационной базе. Всегда проверяйте наличие важных пресетов после миграции.
Использование предопределенных вариантов значительно ускоряет рутинные операции. Например, менеджер по продажам может одним кликом переключаться между просмотром всех заказов и просмотром только тех, которые требуют согласования.
Используйте понятные имена для вариантов отборов, включая дату или период, если фильтр временный. Это поможет быстро найти нужный вариант в длинном списке сохраненных настроек.
Программная установка отборов в коде 1С
Для разработчиков и администраторов, создающих внешние обработки или дорабатывающих конфигурацию, критически важно уметь устанавливать отборы программно. Это делается через объект ДинамическийСписок, который управляет данными формы. Манипуляции с отбором производятся до момента чтения данных из базы.
Основной метод для добавления условия — Отбор.Добавить. Он позволяет задать поле, тип сравнения и значение. Значение может быть константой, ссылкой на объект или результатом вычисления. При программной установке отборов важно помнить о типах данных: попытка сравнить строку с числом без явного приведения типов вызовет ошибку выполнения.
Элементы.ДинамическийСписок.Отбор.Добавить("Дата", ВидСравнения.Больше, ТекущаяДата);
Элементы.ДинамическийСписок.Отбор.Добавить("Проведен", ВидСравнения.Равно, Истина);
В более сложных сценариях может потребоваться использование структуры отборов с вложенностью. Для этого используется свойство Использование у элемента отбора, где можно указать И, Или или Не. Также разработчики часто используют метод Установить для полной перезагрузки структуры отборов, если нужно очистить предыдущие настройки перед применением новых.
- 💻 ВидСравнения — перечисление, определяющее оператор сравнения (Равно, Больше, ВПериоде и т.д.).
- 💻 Поле — строковое имя поля метаданных или пути к полю в структуре запроса.
- 💻 Значение — переменная или константа, с которой сравнивается поле.
Следует учитывать, что программные отборы имеют приоритет над пользовательскими, если они установлены жестко в коде формы. Однако, если код предусматривает возможность редактирования, пользователь сможет дополнить программный отбор своими условиями через интерфейс.
Особенность работы с составными типами
При установке отбора по полю со составным типом (например, СправочникСсылка.Номенклатура или Строка) убедитесь, что значение в условии соответствует одному из типов, иначе отбор может не сработать корректно или выдать ошибку приведения типов.
Настройка видимости и обязательности полей отбора
В режиме предприятия не все поля объекта доступны для отбора. Конфигуратор имеет возможность гибко управлять списком доступных полей через свойство СписокВыбора у самого отбора формы списка. Это позволяет скрыть от пользователя технические поля, служебные реквизиты или информацию, которую он не должен использовать для фильтрации.
Для настройки этого механизма необходимо открыть форму списка в конфигураторе, перейти к элементу «Отбор» и открыть окно свойств. В свойстве СписокВыбора можно вручную добавить нужные поля или использовать кнопку «Заполнить» для автоматического переноса всех доступных реквизитов. Здесь же можно задать псевдонимы полей, чтобы они отображались в интерфейсе более понятно для пользователя.
Кроме того, существует возможность сделать определенные поля отбора обязательными. Это реализуется через свойство ВидОтбора или программно, путем добавления условия в группу «Только для чтения» или установкой флага обязательности. Такие условия пользователь не сможет удалить или изменить, что гарантирует целостность выборки данных согласно бизнес-логике.
| Свойство | Тип значения | Описание влияния на отбор |
|---|---|---|
Заголовок |
Строка | Текст, отображаемый в интерфейсе вместо имени поля |
ВидСравнения |
ВидСравнения | Ограничивает доступные пользователю операторы (только Равно, или Все) |
ОтборПоУмолчанию |
Структура | Задает начальное значение поля при открытии формы |
Редактирование |
Булево | Запрещает или разрешает пользователю менять значение условия |
Грамотная настройка видимости полей упрощает интерфейс для конечного пользователя и снижает риск ошибок при вводе данных. Скрывайте сложные технические поля, оставляя только те, которые имеют бизнес-смысл в контексте данной формы.
Ограничение списка доступных полей для отбора — лучший способ предотвратить некорректную фильтрацию данных неопытными пользователями и ускорить их работу.
Оптимизация производительности при сложных отборах
При работе с большими информационными базами (миллионы записей) некорректно построенный отбор может привести к значительному зависанию интерфейса. Платформа 1С старается преобразовать условия отбора в оптимальный SQL-запрос, но некоторые конструкции заставляют её выполнять дополнительную обработку данных в памяти приложения, что очень медленно.
Наиболее ресурсоемкими являются отборы по полям, не имеющим индексов в базе данных, а также использование оператора «Содержит» для длинных строк в начале условия (без подстановочных знаков в конце). Также стоит избегать отборов по вычисляемым полям, если они не виртуальные таблицы регистров, так как это требует вычисления значения для каждой строки перед фильтрацией.
Для ускорения работы рекомендуется использовать отборы по индексным полям: ссылки на справочники, даты, флаги булевого типа. Если необходимо часто фильтровать по какому-то текстовому реквизиту, стоит рассмотреть возможность добавления этого поля в состав индексов таблицы на уровне СУБД (для SQL баз данных) или использования полнотекстового поиска.
⚠️ Внимание: Избегайте использования функции
ЕСТЬNULLили сложных вложенных условийИЛИпо разным таблицам в одном отборе формы списка, если это возможно. Это часто приводит к деградации производительности запроса.
Если вы разработчик, используйте инструмент «Замер производительности» или анализ планов выполнения запросов в СУБД, чтобы понять, как именно ваш отбор влияет на скорость выборки. Иногда проще создать дополнительный регистр сведений для быстрого отбора, чем оптимизировать сложный запрос к основному документу.
Частые ошибки и способы их устранения
Даже опытные пользователи иногда сталкиваются с ситуацией, когда отбор «не работает»: данные не отображаются или отображаются лишние. Самая распространенная причина — неверно выбранный логический оператор. Пользователь хочет увидеть документы «Иванов» ИЛИ «Петров», но случайно ставит между условиями оператор «И», получая пустой список, так как один документ не может быть одновременно выписан на двух разных контрагентов.
Еще одна частая проблема связана с типами данных. Например, попытка найти документ по номеру «123», когда в базе номер хранится как строка «000123» или как число 123. В таких случаях нужно внимательно смотреть на формат поля и использовать соответствующие маски или приводить типы.
Также стоит помнить о контексте «Период». Многие формы списков документов имеют глобальный отбор по периоду, который может перекрывать ваши локальные настройки. Если вы настроили отбор по контрагенту, но не видите документов, проверьте, не установлен ли период, исключающий даты этих документов.
- ❌ Пустой результат — проверьте логику «И/ИЛИ» и наличие записей, удовлетворяющих всем условиям сразу.
- ❌ Лишние данные — убедитесь, что отбор сброшен (кнопка «Сбросить отбор») и не действует старый сохраненный вариант.
- ❌ Ошибка типа — сверьте тип значения в условии с типом реквизита в конфигураторе.
Для диагностики проблем можно включить отображение технических имен полей в настройках отбора (если это разрешено правами) или попросить администратора посмотреть сформированный SQL-запрос через консоль запросов.
☑️ Диагностика неработающего отбора
Можно ли настроить отбор так, чтобы он применялся автоматически при открытии формы?
Да, это возможно. В свойствах формы списка в конфигураторе можно задать «Основной отбор» или установить вариант отбора по умолчанию. Также это можно сделать программно в событии ПриСозданииНаСервере, добавив нужные условия в коллекцию отборов динамического списка.
Как удалить все настроенные отборы и вернуть полный список?
В интерфейсе пользователя нажмите на кнопку настройки отборов (воронка) и выберите пункт «Сбросить отбор» или «Очистить отбор». Если был выбран сохраненный вариант, выберите вариант «(Без отборов)» или «Все элементы» в списке вариантов.
Почему поле для отбора отсутствует в списке доступных полей?
Вероятно, это поле исключено из списка выбора в свойствах отбора формы в конфигураторе. Также поле может быть помечено как «Не использовать в отборе» в свойствах самого реквизита метаданных, либо у пользователя недостаточно прав на просмотр этого поля.
Влияет ли отбор в форме списка на отчеты, построенные на её основе?
Как правило, да. Если вы формируете отчет или печатную форму, используя команду из панели списка, система часто учитывает текущий отбор формы, чтобы вывести данные только по выбранным элементам. Однако это зависит от конкретной реализации команды в конфигурации.