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