Разработка и Конфигурация · 10 мин
Критерии отбора в 1С: как использовать и настраивать
Критерии отбора в 1С: что это, как создать критерий отбора в конфигураторе, настроить состав и тип, использовать для поиска связанных документов и справочников.
Критерий отбора в 1С — это объект метаданных, который объединяет разнородные данные (документы, справочники, регистры) по общему реквизиту и позволяет одной командой получить список всех объектов, где встречается заданное значение. Классический пример: по контрагенту собрать все счета, накладные, акты и платёжные поручения, хотя физически это разные документы с разной структурой.
Без критерия отбора разработчику пришлось бы писать отдельные запросы к каждому виду документов и вручную объединять результат. Критерий отбора делает это на уровне платформы: вы один раз описываете состав объектов и общий реквизит, а дальше пользователь видит готовую кнопку перехода в формах, а программист получает результат одним вызовом метода.
Дальше разберём, как устроен критерий отбора, как создать его в конфигураторе, как использовать в интерфейсе и в коде, а также какие ограничения и ошибки встречаются чаще всего.
Что такое критерий отбора и когда он нужен
Критерий отбора — объект конфигурации из ветки «Общие» дерева метаданных. Он не хранит данные сам по себе, а описывает правило: «по значению такого-то типа искать в таких-то реквизитах таких-то объектов». Платформа на основе этого правила строит выборку в момент обращения.
Типовые сценарии применения: показать все документы по контрагенту, все документы по договору, все объекты, где используется конкретная номенклатура, все записи, связанные с проектом или сотрудником. В типовых конфигурациях уже есть готовые критерии, например «Документы по контрагенту», но в собственных доработках их почти всегда приходится создавать заново.
Важно понимать отличие от похожих механизмов. Отбор в динамическом списке фильтрует записи одного объекта. Подчинённость документов показывает цепочку «введён на основании». Критерий отбора работает шире: он ищет совпадение значения в любых указанных реквизитах, независимо от связей по основанию.
Как создать критерий отбора в конфигураторе
Создание выполняется в конфигураторе и требует прав на изменение конфигурации. В пользовательском режиме критерии отбора не создаются — только используются.
- 1Откройте конфигуратор и в дереве метаданных найдите ветку «Общие» → «Критерии отбора».
- 2Добавьте новый критерий, задайте имя и синоним, например «ДокументыПоПроекту».
- 3В свойстве «Тип» выберите тип значения отбора, например СправочникСсылка.Проекты.
- 4В свойстве «Состав» отметьте реквизиты документов, справочников и регистров, по которым нужно искать — платформа покажет только реквизиты подходящего типа.
- 5Обновите конфигурацию базы данных (F7) и проверьте работу в пользовательском режиме.
Ключевой момент — свойство «Тип». Оно определяет, какое значение будет передаваться в отбор. Если выбрать составной тип (например, контрагент или физическое лицо), в состав попадут реквизиты всех входящих типов, но поиск будет работать по каждому из них.
В свойстве «Состав» платформа автоматически предлагает все реквизиты конфигурации, тип которых совместим с типом критерия. Отмечайте только реально нужные: каждый включённый реквизит увеличивает объём поиска. Для реквизитов табличных частей отбор тоже поддерживается — платформа найдёт документы, где значение встречается в строках таблицы.
Как использовать критерий отбора в интерфейсе
После создания критерия платформа автоматически добавляет команду перехода в формы объектов, которые могут быть значением отбора. Например, если критерий построен по ссылке на справочник «Проекты», то в форме элемента справочника и в форме списка появится кнопка «Перейти» → имя критерия. Пользователь нажимает её и видит список всех документов и записей с этим проектом.
Стандартная форма списка критерия отбора содержит закладки по видам объектов: отдельно документы, отдельно справочники, отдельно регистры сведений. Форму можно переопределить, создав собственную форму списка критерия в конфигураторе — например, чтобы добавить колонки или отбор по периоду.
Если кнопка перехода не появилась, проверьте три вещи: обновлена ли конфигурация базы данных, есть ли у пользователя права на критерий, входит ли тип текущего объекта в тип критерия. Чаще всего причина — забытое обновление базы после изменения состава.
Использование критерия отбора в коде
Программно критерий отбора доступен через менеджер критериев отбора. Основной метод — Найти(ЗначениеОтбора), который возвращает таблицу значений со ссылками на найденные объекты.
ЗначениеОтбора = Справочники.Контрагенты.НайтиПоНаименованию("ООО Ромашка");
Найденные = КритерииОтбора.ДокументыПоКонтрагенту.Найти(ЗначениеОтбора);
Для Каждого Строка Из Найденные Цикл
Сообщить(Строка.Ссылка);
КонецЦикла;
Таблица результата содержит колонку «Ссылка» и служебные колонки с типом объекта. Дальше ссылки можно выводить в отчёт, обрабатывать или передавать в динамический список как отбор.
Метод Найти() выполняет запросы по всем объектам из состава критерия. Если объектов много и база крупная, вызов может занять заметное время — в обработках массового характера лучше использовать собственный оптимизированный запрос вместо критерия.
Настройка состава: что включать и что проверить
Состав критерия — главное место, где допускают ошибки. Включайте только те реквизиты, по которым поиск действительно осмыслен. Например, для критерия «по контрагенту» логично включить реквизиты «Контрагент» документов продажи, закупки и оплаты, но не нужно включать реквизиты «Грузоотправитель», если аналитика по ним не требуется — иначе пользователь получит лишние строки и запутается.
Для регистров сведений и накопления в состав включаются измерения и реквизиты подходящего типа. Это удобно для поиска записей регистров, связанных со значением, без написания запроса.
Как проверить результат
Команда с именем критерия видна в меню «Перейти»
Команды нет — проверьте тип критерия, права и обновление конфигурации
В списке только объекты, где значение реально встречается
Лишние строки — в состав включены ненужные реквизиты; пусто — реквизиты не отмечены в составе
Список открывается за секунды
Заметная задержка — слишком широкий состав или отсутствуют индексы по реквизитам
Отдельно проверьте индексирование реквизитов, входящих в состав. Если реквизит документа не входит ни в один индекс, поиск по большой таблице будет медленным. Для часто используемых критериев имеет смысл включить индексирование соответствующих реквизитов в свойствах объекта.
Типичные ошибки и ограничения
Главные ограничения механизма: отбор возможен только по одному значению и только на равенство; нельзя задать условия «больше», «содержит» или период. Значение отбора должно быть ссылкой на объект — примитивные типы вроде строки или числа в качестве типа критерия не поддерживаются осмысленно, так как критерий ориентирован именно на ссылочные связи.
Если требуется сложный отбор — по нескольким условиям, периоду, с группировкой — критерий отбора не подходит. Используйте запрос, динамический список с произвольным текстом запроса или отчёт на СКД.
Альтернативы критериям отбора
Сравнение вариантов
Подходит для быстрого поиска всех объектов по одному ссылочному значению; не поддерживает сложные условия и периоды.
Подходит для фильтрации записей одного объекта по любым полям; не объединяет разные виды объектов.
Подходит для произвольных условий и объединения разных таблиц; требует ручного написания и сопровождения кода.
Подходит для показа цепочки связанных документов по основанию; не находит объекты, связанные только по реквизиту.
На практике механизмы комбинируются: критерий отбора даёт кнопку быстрого перехода в формах, а аналитические задачи решаются отчётами на СКД. Выбирая инструмент, исходите из вопроса пользователя: «покажи всё по этому контрагенту» — это критерий отбора; «покажи продажи по контрагенту за квартал с суммами» — это отчёт.
Как выбрать действие
Частые вопросы
Почему критерий отбора не находит документ, хотя реквизит заполнен?
Чаще всего реквизит не отмечен в составе критерия или конфигурация базы данных не обновлена после изменения состава. Также проверьте, что тип реквизита в точности совпадает с типом критерия: если в критерии указан один вид справочника, а в документе составной тип, совпадение может не сработать.
Можно ли использовать критерий отбора по нескольким значениям сразу?
Нет, штатно критерий принимает одно значение и ищет точное совпадение. Для отбора по списку значений или диапазону напишите запрос с условием В(&СписокЗначений) или используйте отчёт на СКД.
Как добавить критерий отбора в командный интерфейс подсистемы?
Откройте свойства критерия, на закладке «Командный интерфейс» или через настройку подсистемы включите видимость стандартной команды открытия критерия. После этого он появится в панели навигации выбранной подсистемы.
Влияет ли критерий отбора на производительность базы?
Сам по себе критерий ничего не хранит и нагрузки не создаёт. Нагрузка возникает в момент вызова: платформа выполняет запросы по всем объектам состава. Чем шире состав и чем меньше индексов по реквизитам, тем медленнее поиск на больших базах.
Можно ли создать критерий отбора без конфигуратора, в режиме предприятия?
Нет, критерий отбора — объект метаданных, он создаётся и изменяется только в конфигураторе. В пользовательском режиме доступны близкие по смыслу механизмы: отборы в списках, сохранённые варианты отчётов, групповые отборы.
Что важно запомнить
Критерий отбора создаётся в конфигураторе: задаётся тип значения и состав реквизитов для поиска. Платформа сама строит список связанных объектов и кнопку перехода в формах. Включайте в состав только нужные реквизиты, следите за правами и индексами, а для сложных условий используйте запросы и СКД.