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

В этой статье мы разберем все способы создания отборов — от простых фильтров в формах до сложных конструкций в запросах и программном коде. Вы узнаете, как правильно задавать условия, избегать типичных ошибок и оптимизировать производительность. Материал актуален для 1С 8.3 (включая последние релизы 2026 года) и частично применим к 1С 8.2.

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

1. Основные понятия: что такое отбор в 1С и где он применяется

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

Где используется отбор:

  • 📊 Отчеты — фильтрация данных перед формированием (например, отчет по продажам только за текущий месяц)
  • 🔍 Динамические списки — ограничение выводимых строк в табличных частях документов и справочников
  • 💻 Запросы — условие ГДЕ в языке запросов 1С
  • ⚙️ Управляемые формы — настройка фильтров в интерфейсе пользователя
  • 📂 Обработки — программное ограничение выборок данных

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

⚠️ Внимание: В некоторых конфигурациях (например, 1С:Бухгалтерия 3.0) отборы в отчетах могут конфликтовать с настройками прав доступа. Если фильтр не срабатывает, проверьте права пользователя на просматриваемые данные.

2. Простой отбор в формах и списках: инструкция для пользователей

Начнем с самого доступного способа — настройки отборов непосредственно в интерфейсе программы. Этот метод не требует знания программирования и доступен любому пользователю 1С:Предприятие.

Как установить отбор в стандартном списке (например, в справочнике "Номенклатура" или документе "Реализация товаров"):

  1. Откройте нужный список (например, Справочники → Номенклатура)
  2. Нажмите кнопку Еще → Настройка списка (или Все действия → Изменить форму в управляемом интерфейсе)
  3. Перейдите на вкладку Отбор
  4. Добавьте новое условие, выбрав поле (например, "Группа номенклатуры"), оператор ("Равно") и значение
  5. Сохраните настройки и примените отбор

Пример настройки отбора по дате документа:

Выбрать поле "Дата"

Установить оператор "Больше или равно"

Ввести начальную дату (например, 01.01.2026)

Добавить второе условие с оператором "Меньше или равно"

Ввести конечную дату (например, 31.01.2026)

Применить отбор-->

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

Обратите внимание на операторы отбора:

  • 🔹 Равно / Не равно — точное совпадение
  • 🔹 Содержит / Не содержит — поиск по части строки
  • 🔹 В списке / Не в списке — выбор из нескольких значений
  • 🔹 Больше / Меньше — числовые и датовые сравнения
  • 🔹 Заполнено / Не заполнено — проверка на пустые значения
📊 Какой интерфейс 1С вы используете чаще?
Управляемый (8.3)
Обычный (8.2)
Оба примерно одинаково

3. Отборы в запросах 1С: синтаксис и примеры

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

Базовый синтаксис отбора в запросе:

ВЫБРАТЬ

Номенклатура.Наименование,

Номенклатура.Артикул

ИЗ

Справочник.Номенклатура КАК Номенклатура

ГДЕ

Номенклатура.Группа В (&ГруппаТоваров)

И Номенклатура.ПометкаУдаления = ЛОЖЬ

Ключевые моменты:

  • 📌 Условия отбора пишутся после оператора ГДЕ
  • 📌 Для параметров используйте конструкцию В (&ИмяПараметра)
  • 📌 Логические операторы: И, ИЛИ, НЕ
  • 📌 Для работы с датами: ДатаДок >= &НачалоПериода

Пример сложного отбора с несколькими условиями:

ВЫБРАТЬ

Документ.РеализацияТоваровУслуг.Номер,

Документ.РеализацияТоваровУслуг.Дата,

Документ.РеализацияТоваровУслуг.СуммаДокумента

ИЗ

Документ.РеализацияТоваровУслуг КАК Документ

ГДЕ

Документ.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

И Документ.Контрагент = &ВыбранныйКонтрагент

И Документ.СуммаДокумента > 10000

И НЕ Документ.ПометкаУдаления

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

⚠️ Внимание: В запросах 1С 8.3 при использовании параметров с типом "Дата" обязательно указывайте время (например, НачалоДня(&ДатаНачала)), иначе возможны ошибки сравнения.

4. Динамические отборы: как сделать фильтры гибкими

Статичные отборы хороши для разовых задач, но часто требуется создавать динамические фильтры, которые пользователь может менять без правки кода. Рассмотрим основные подходы.

Способ 1. Параметры отчета

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

  • 🔄 Выбирать период (день, месяц, квартал, год)
  • 🏢 Фильтровать по организации
  • 💰 Ограничивать по валюте
  • 📦 Выбирать счета бухгалтерского учета

Способ 2. Программное формирование отборов

Для разработчиков доступно создание динамических отборов через встроенный язык. Пример кода для формирования отбора по дате:

Процедура УстановитьОтборПоДате(НачалоПериода, КонецПериода)

Отбор = Новый Структура();

Отбор.Вставить("Дата", Новый УсловиеОтбора("Дата", НачалоПериода, КонецПериода));

Список.Отбор = Отбор;

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

Способ 3. Сохранение пользовательских настроек

В управляемых формах можно сохранять часто используемые отборы:

  1. Настройте нужный фильтр
  2. Нажмите "Сохранить настройки"
  3. Дайте имя настройке (например, "Товары в наличии")
  4. В следующий раз выберите сохраненную настройку из списка

Для сложных сценариев (например, когда нужно комбинировать несколько условий) используйте композитные отборы:

Отбор = Новый Структура();

Условие1 = Новый УсловиеОтбора("Склад", ЗначениеВМассиве(МассивСкладов));

Условие2 = Новый УсловиеОтбора("Дата", НачалоДня(&ДатаНачала), КонецДня(&ДатаОкончания));

Отбор.Вставить("Основной", Новый КомпозитноеУсловиеОтбора(Условие1, Условие2));

💡

Для ускорения работы с часто используемыми отборами создайте обработку с предопределенными фильтрами. Это сэкономит время пользователям и уменьшит количество ошибок при ручном вводе условий.

5. Типичные ошибки при работе с отборами и как их избежать

Даже опытные пользователи и разработчики иногда сталкиваются с проблемами при настройке отборов. Разберем наиболее распространенные ошибки и способы их решения.

Ошибка Причина Решение
Отбор не применяется Не нажата кнопка "Применить" или не сохранены настройки Всегда проверяйте, что изменения сохранены и применены
Выдаются лишние записи Неправильно выбран оператор (например, "Содержит" вместо "Равно") Уточните условие, используйте точные операторы для критичных полей
Запрос выполняется слишком долго Слишком сложный отбор или отсутствие индексов Оптимизируйте запрос, добавьте индексы в конфигураторе
Ошибка "Тип не совпадает" Попытка сравнить разные типы данных (например, дату со строкой) Преобразуйте типы явным образом перед сравнением
Отбор игнорирует пустые значения Не учтена настройка "Показывать пустые значения" Добавьте условие ИЛИ ЗначениеЗаполнено(Поле) = ЛОЖЬ

Особое внимание уделите работе с пустыми значениями. В поле может быть:

  • 🔘 Пустым (ЗначениеЗаполнено() = ЛОЖЬ)
  • 🔘 Содержать NULL (в запросах)
  • 🔘 Иметь значение по умолчанию (например, пустую строку или ноль)

Пример корректной обработки пустых значений в запросе:

ВЫБРАТЬ

Товары.Наименование

ИЗ

Справочник.Номенклатура КАК Товары

ГДЕ

(Товары.Артикул = &Артикул ИЛИ &Артикул = "")

И (Товары.Группа = &Группа ИЛИ &Группа = ЗНАЧЕНИЕ(Справочник.ГруппыНоменклатуры.ПустаяСсылка))

⚠️ Внимание: В некоторых конфигурациях (например, 1С:УТ 11) отборы по реквизитам с составным типом (например, "Контрагент" может быть и организацией, и физическим лицом) требуют особого подхода. Используйте конструкцию ВИД() для проверки типа значения.

6. Продвинутые техники: отборы в программном коде

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

Работа со структурами отбора

Базовый способ задания отбора программно:

Отбор = Новый Структура();

Отбор.Вставить("ДатаСоздания", Новый УсловиеОтбора("ДатаСоздания", НачалоДня(ТекущаяДата())));

Отбор.Вставить("Автор", Новый УсловиеОтбора("Автор", ТекущийПользователь()));

СписокДокументов.Отбор = Отбор;

Динамическое формирование условий

Пример создания гибкого отбора в зависимости от прав пользователя:

Процедура УстановитьОтборПоПравам(Список)

Отбор = Новый Структура();

// Если пользователь не администратор - ограничиваем его данные

Если НЕ Пользователь.Администратор Тогда

Отбор.Вставить("Автор", Новый УсловиеОтбора("Автор", Пользователь));

КонецЕсли;

// Добавляем отбор по дате в любом случае

Отбор.Вставить("Дата", Новый УсловиеОтбора("Дата", НачалоМесяца(ТекущаяДата()), ТекущаяДата()));

Список.Отбор = Отбор;

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

Работа с композитными условиями

Для сложной логики используйте КомпозитноеУсловиеОтбора:

Условие1 = Новый УсловиеОтбора("СуммаДокумента", 10000, "");

Условие2 = Новый УсловиеОтбора("Статус", Перечисление.СтатусыДокументов.Оплачен);

Условие3 = Новый УсловиеОтбора("ДатаОплаты", НачалоДня(ТекущаяДата()));

КомпозитноеУсловие = Новый КомпозитноеУсловиеОтбора();

КомпозитноеУсловие.Добавить(Условие1);

КомпозитноеУсловие.Добавить(Условие2, Ложь); // Условие2 с оператором ИЛИ

КомпозитноеУсловие.Добавить(Условие3);

Отбор.Вставить("Основное", КомпозитноеУсловие);

Оптимизация производительности

При работе с большими объемами данных:

  • 🚀 Используйте ИндексироватьПо для часто фильтруемых полей
  • 🚀 Ограничивайте количество возвращаемых полей в запросах
  • 🚀 Применяйте РАЗРЕШЕННЫЕ для проверки прав доступа на уровне СУБД
  • 🚀 Для исторических данных используйте виртуальные таблицы
Пример оптимизированного запроса с виртуальной таблицей

ВЫБРАТЬ

ПродажиТовар.Номенклатура КАК Товар,

СУММА(ПродажиТовар.Количество) КАК Количество

ИЗ

Документ.РеализацияТоваровУслуг.Товары КАК ПродажиТовар

ГДЕ

ПродажиТовар.Ссылка В &

(ВЫБРАТЬ

РеализацияТоваровУслуг.Ссылка

ИЗ

Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

ГДЕ

РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания

И РеализацияТоваровУслуг.Организация = &Организация)

СГРУППИРОВАТЬ ПО

ПродажиТовар.Номенклатура

7. Отборы в отчетах: особенности и примеры

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

Стандартные отчеты

В большинстве типовых конфигураций (1С:Бухгалтерия, 1С:УТ, 1С:ЗУП) отборы настраиваются через:

  1. Кнопку "Настройки" в форме отчета
  2. Вкладку "Отбор" или "Фильтр"
  3. Добавление новых условий через интерфейс

Пример настройки отбора в "Анализе субконто":

  • 📅 Установите период (начало и конец)
  • 🏢 Выберите организацию
  • 💰 Отфильтруйте по счетам бухгалтерского учета
  • 👥 Добавьте отбор по субконто (например, конкретный контрагент)

Создание пользовательских отчетов с отборами

Для разработчиков доступно создание отчетов с программно настраиваемыми фильтрами:

Процедура ПриОткрытии()

// Создаем параметры отбора

ПараметрыОтчета = Новый Структура();

ПараметрыОтчета.Вставить("ДатаНачала", НачалоМесяца(ТекущаяДата()));

ПараметрыОтчета.Вставить("ДатаОкончания", КонецМесяца(ТекущаяДата()));

ПараметрыОтчета.Вставить("Организация", Справочники.Организации.НашаФирма);

// Передаем параметры в схему компоновки данных

СхемаКомпоновкиДанных.Параметры.УстановитьПараметр("Период", ПараметрыОтчета);

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

Работа с вариантами отчетов

В 1С 8.3 реализована система вариантов отчетов, где можно сохранять:

  • 📋 Настройки отборов
  • 📊 Параметры группировок
  • 🖼️ Внешний вид (условное оформление)
  • 📄 Параметры вывода (Excel, PDF)

Чтобы сохранить вариант отчета:

  1. Настройте все необходимые отборы и параметры
  2. Нажмите "Сохранить вариант"
  3. Укажите имя (например, "Продажи по региону Сибирь")
  4. Выберите, делать ли вариант общим для всех пользователей
💡

Использование вариантов отчетов экономит до 70% времени на повторную настройку фильтров, особенно в компаниях с большим количеством пользователей.

8. Отборы в обменах данными и интеграциях

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

  • 🔄 Ограничивать объем передаваемых данных
  • 🔒 Исключать конфиденциальную информацию
  • 🚀 Ускорять процесс обмена
  • 🔄 Синхронизировать только измененные записи

Отборы в планах обмена

Пример настройки отбора для узла обмена:

Процедура УстановитьОтборДляОбмена(УзелОбмена)

Отбор = Новый Структура();

Отбор.Вставить("ДатаМодификации", Новый УсловиеОтбора("ДатаМодификации",

УзелОбмена.ПоследняяДатаОбмена));

// Добавляем отбор по нашему подразделению

Отбор.Вставить("Подразделение", Новый УсловиеОтбора("Подразделение",

Справочники.Подразделения.НашеПодразделение));

УзелОбмена.Отбор = Отбор;

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

Фильтрация данных при выгрузке в XML/JSON

Пример кода для выборочной выгрузки документов:

Процедура ВыгрузитьДокументыПоОтбору(ФайлРезультата)

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| Документ.РеализацияТоваровУслуг.Ссылка КАК Ссылка

|ИЗ

| Документ.РеализацияТоваровУслуг КАК Документ

|ГДЕ

| Документ.Дата >= &ДатаНачала

| И Документ.Организация = &Организация";

Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ТекущаяДата() - 30));

Запрос.УстановитьПараметр("Организация", Справочники.Организации.НашаФирма);

Выборка = Запрос.Выполнить().Выбрать();

ЗаписьXML = Новый ЗаписьXML;

ЗаписьXML.ОткрытьФайл(ФайлРезультата);

Пока Выборка.Следующий() Цикл

ЗаписьXML.ЗаписатьОбъект(Выборка.Ссылка.ПолучитьОбъект());

КонецЦикла;

ЗаписьXML.Закрыть();

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

Особенности отборов при интеграции с внешними системами

При обмене данными с 1С:EDT, Bitrix24, МойСклад или другими системами:

  • 🔌 Всегда проверяйте соответствие типов данных в отборах
  • 🔌 Учитывайте ограничения API внешней системы
  • 🔌 Используйте пагинацию для больших выборок
  • 🔌 Логируйте ошибки отборов для отладки
⚠️ Внимание: При настройке отборов для обменов данными между разными версиями (например, 8.2 и 8.3) могут возникать проблемы с совместимостью типов данных. Всегда тестируйте обмен на тестовых базах перед применением в рабочей среде.

FAQ: Ответы на частые вопросы об отборах в 1С

Как сделать отбор по нескольким значениям в одном поле (например, по нескольким складам)?

Используйте оператор В (или В ИЕРАРХИИ для справочников) с массивом значений:

ГДЕ

Документ.Склад В (&МассивСкладов)

Где &МассивСкладов — это массив ссылок на нужные склады. В интерфейсе пользователя это условие называется "В списке".

Почему отбор по дате иногда не срабатывает корректно?

Частая проблема — неучет времени в датах. В дата без времени считается как 00:00:00. Используйте функции:

  • НачалоДня() — для начала дня
  • КонецДня() — для конца дня
  • НачалоМесяца()/КонецМесяца() — для месячных периодов

Пример корректного отбора:

ГДЕ Документ.Дата МЕЖДУ НачалоДня(&ДатаНачала) И КонецДня(&ДатаОкончания)
Можно ли сделать отбор по полю, которого нет в основной таблице (например, по реквизиту из связанного справочника)?

Да, для этого используйте соединения (ЛЕВОЕ СОЕДИНЕНИЕ, ВНУТРЕННЕЕ СОЕДИНЕНИЕ) в запросах:

ВЫБРАТЬ

Документ.Номер,

Документ.Дата,

Контрагент.Наименование КАК Контрагент

ИЗ

Документ.РеализацияТоваровУслуг КАК Документ

ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагент

ПО Документ.Контрагент = Контрагент.Ссылка

ГДЕ

Контрагент.Группа = &ГруппаКонтрагентов

В интерфейсе пользователя такие отборы доступны через механизм "Дополнительные отборы" или "Расширенный фильтр".

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

Есть несколько способов:

  1. Сохранение настроек списка — в большинстве форм есть кнопка "Сохранить настройки"
  2. Варианты отчетов — сохраняйте часто используемые комбинации фильтров
  3. Избранные отборы — в управляемых формах можно сохранять фильтры как "избранные"
  4. Обработки с предопределенными отборами — для разработчиков

В 1С 8.3 сохраненные настройки доступны всем пользователям, если при сохранении выбрать соответствующую опцию.

Почему при применении отбора выдается ошибка "Тип не совпадает"?

Эта ошибка возникает, когда вы пытаетесь сравнить значения разных типов. Например:

  • Сравниваете дату со строкой
  • Пытаетесь отфильтровать число по строковому полю
  • Используете справочник там,