К статье
Практический материал

Разработка и Конфигурация · 10 мин

Критерии отбора в 1С: как использовать и настраивать

Критерии отбора в 1С: что это, как создать критерий отбора в конфигураторе, настроить состав и тип, использовать для поиска связанных документов и справочников.

Критерий отбора в 1С — это объект метаданных, который объединяет разнородные данные (документы, справочники, регистры) по общему реквизиту и позволяет одной командой получить список всех объектов, где встречается заданное значение. Классический пример: по контрагенту собрать все счета, накладные, акты и платёжные поручения, хотя физически это разные документы с разной структурой.

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

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

Что такое критерий отбора и когда он нужен

Критерий отбора — объект конфигурации из ветки «Общие» дерева метаданных. Он не хранит данные сам по себе, а описывает правило: «по значению такого-то типа искать в таких-то реквизитах таких-то объектов». Платформа на основе этого правила строит выборку в момент обращения.

Типовые сценарии применения: показать все документы по контрагенту, все документы по договору, все объекты, где используется конкретная номенклатура, все записи, связанные с проектом или сотрудником. В типовых конфигурациях уже есть готовые критерии, например «Документы по контрагенту», но в собственных доработках их почти всегда приходится создавать заново.

Важно понимать отличие от похожих механизмов. Отбор в динамическом списке фильтрует записи одного объекта. Подчинённость документов показывает цепочку «введён на основании». Критерий отбора работает шире: он ищет совпадение значения в любых указанных реквизитах, независимо от связей по основанию.

Как создать критерий отбора в конфигураторе

Создание выполняется в конфигураторе и требует прав на изменение конфигурации. В пользовательском режиме критерии отбора не создаются — только используются.

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

Ключевой момент — свойство «Тип». Оно определяет, какое значение будет передаваться в отбор. Если выбрать составной тип (например, контрагент или физическое лицо), в состав попадут реквизиты всех входящих типов, но поиск будет работать по каждому из них.

В свойстве «Состав» платформа автоматически предлагает все реквизиты конфигурации, тип которых совместим с типом критерия. Отмечайте только реально нужные: каждый включённый реквизит увеличивает объём поиска. Для реквизитов табличных частей отбор тоже поддерживается — платформа найдёт документы, где значение встречается в строках таблицы.

Как использовать критерий отбора в интерфейсе

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

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

Если кнопка перехода не появилась, проверьте три вещи: обновлена ли конфигурация базы данных, есть ли у пользователя права на критерий, входит ли тип текущего объекта в тип критерия. Чаще всего причина — забытое обновление базы после изменения состава.

Использование критерия отбора в коде

Программно критерий отбора доступен через менеджер критериев отбора. Основной метод — Найти(ЗначениеОтбора), который возвращает таблицу значений со ссылками на найденные объекты.

ЗначениеОтбора = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");

Найденные = КритерииОтбора.ДокументыПоКонтрагенту.Найти(ЗначениеОтбора);

Для Каждого Строка Из Найденные Цикл

Сообщить(Строка.Ссылка);

КонецЦикла;

Таблица результата содержит колонку «Ссылка» и служебные колонки с типом объекта. Дальше ссылки можно выводить в отчёт, обрабатывать или передавать в динамический список как отбор.

Метод Найти() выполняет запросы по всем объектам из состава критерия. Если объектов много и база крупная, вызов может занять заметное время — в обработках массового характера лучше использовать собственный оптимизированный запрос вместо критерия.
ПЗ
Практическое замечание

Настройка состава: что включать и что проверить

Состав критерия — главное место, где допускают ошибки. Включайте только те реквизиты, по которым поиск действительно осмыслен. Например, для критерия «по контрагенту» логично включить реквизиты «Контрагент» документов продажи, закупки и оплаты, но не нужно включать реквизиты «Грузоотправитель», если аналитика по ним не требуется — иначе пользователь получит лишние строки и запутается.

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

Контрольные точки

Как проверить результат

Кнопка перехода в форме объекта
Норма

Команда с именем критерия видна в меню «Перейти»

Тревожный признак

Команды нет — проверьте тип критерия, права и обновление конфигурации

Содержимое списка
Норма

В списке только объекты, где значение реально встречается

Тревожный признак

Лишние строки — в состав включены ненужные реквизиты; пусто — реквизиты не отмечены в составе

Скорость открытия
Норма

Список открывается за секунды

Тревожный признак

Заметная задержка — слишком широкий состав или отсутствуют индексы по реквизитам

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

Типичные ошибки и ограничения

Типичные ошибки
01
В состав включены все реквизиты подходящего типа подряд — пользователь получает избыточный список, а поиск работает медленно.
02
Забыто обновление конфигурации базы данных после изменения состава — кнопка перехода не появляется или показывает старый состав.
03
Не выданы права на критерий отбора ролям пользователей — механизм работает у администратора, но недоступен остальным.
04
Критерий используется в массовых обработках вместо прямого запроса — производительность падает, потому что платформа строит запросы по всем объектам состава.
05
Ожидается поиск по подстроке или нескольким значениям — критерий отбора ищет только точное совпадение одного значения ссылки.

Главные ограничения механизма: отбор возможен только по одному значению и только на равенство; нельзя задать условия «больше», «содержит» или период. Значение отбора должно быть ссылкой на объект — примитивные типы вроде строки или числа в качестве типа критерия не поддерживаются осмысленно, так как критерий ориентирован именно на ссылочные связи.

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

Альтернативы критериям отбора

Сравнение вариантов

Критерий отбора

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

Отбор в динамическом списке

Подходит для фильтрации записей одного объекта по любым полям; не объединяет разные виды объектов.

Запрос с объединением

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

Структура подчинённости

Подходит для показа цепочки связанных документов по основанию; не находит объекты, связанные только по реквизиту.

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

Маршрут решения

Как выбрать действие

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

Частые вопросы

Почему критерий отбора не находит документ, хотя реквизит заполнен?

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

Можно ли использовать критерий отбора по нескольким значениям сразу?

Нет, штатно критерий принимает одно значение и ищет точное совпадение. Для отбора по списку значений или диапазону напишите запрос с условием В(&СписокЗначений) или используйте отчёт на СКД.

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

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

Влияет ли критерий отбора на производительность базы?

Сам по себе критерий ничего не хранит и нагрузки не создаёт. Нагрузка возникает в момент вызова: платформа выполняет запросы по всем объектам состава. Чем шире состав и чем меньше индексов по реквизитам, тем медленнее поиск на больших базах.

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

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

Итог

Что важно запомнить

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