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

В этой статье разберём все способы создания фильтров — от базовых (через интерфейс платформы) до продвинутых (с использованием языка запросов и программного кода). Особое внимание уделим типичным ошибкам, из-за которых фильтр «не работает» или возвращает пустые результаты. Материал актуален для 1С 8.3 (включая последние релизы), но majority приёмов подойдут и для более ранних версий. Если вы никогда не работали с отборами — начните с первого раздела. Опытные пользователи могут сразу перейти к сложным фильтрам или программной настройке.

Базовые фильтры: как включить отбор в списках и отчётах

Начнём с самого простого — встроенных фильтров, которые доступны в любом списке (справочники, документы, регистры). Их не нужно программировать: достаточно знать, где находится кнопка «Отбор» и как правильно заполнить поля.

Чтобы активировать фильтр:

  • 📌 Откройте любой список (например, Справочники → Контрагенты или Документы → Реализация товаров).
  • 🔍 Нажмите кнопку «Отбор и сортировка»** (обычно расположена в верхней панели инструментов рядом с поиском).
  • ➕ В открывшемся окне добавьте новое условие кнопкой «Добавить»**.
  • 📝 Выберите поле для фильтрации (например, Наименование, Дата, Сумма) и укажите значение.

Пример: вам нужно найти все документы Поступление товаров от поставщика ООО «Ромашка»** за текущий месяц. Для этого:

  1. Откройте журнал Поступление товаров.
  2. Включите отбор и добавьте два условия:
    • Поле Контрагент → значение ООО «Ромашка»**.
    • Поле Дата → диапазон с 01.05.2026 по 31.05.2026.
  • Нажмите «Применить»** — список обновится автоматически.
  • 💡

    Если фильтр не сработал, проверьте регистр букв в текстовом поле (например, "ООО" и "ооо" — разные значения) и формат даты (должен совпадать с настройками системы).

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

    📊 Как часто вы используете фильтры в 1С?
    Ежедневно
    Несколько раз в неделю
    Редко
    Никогда не пользовался

    Типы фильтров: простой отбор vs. сложные условия

    Не все фильтры одинаковы. В их можно разделить на три категории по сложности:

    Тип фильтра Пример использования Как настроить
    Простой отбор Найти документы по одному полю (например, все счета от ИП Иванов) Через кнопку «Отбор и сортировка» в списке
    Составной фильтр Найти товары категории «Электроника»** со скидкой >10% и остатком >5 шт. Добавить несколько условий с логическими операторами (И, ИЛИ)
    Динамический фильтр Автоматически показывать только актуальные заказы (например, не выполненные и не просроченные) Через язык запросов или программный код
    Фильтр по связанным данным Найти клиентов, которые заказывали товар «Ноутбук X»** в прошлом квартале Использовать подчинённые запросы или виртуальные таблицы

    Самая распространённая ошибка новичков — попытка решить сложную задачу простым отбором. Например, если вам нужно найти все реализации товаров, где сумма больше 50 000 руб. И при этом клиент из Москвы, одного условия будет недостаточно. Здесь потребуется составной фильтр с оператором И:

    • 💰 Поле Сумма документа → значение > 50000.
    • 🏙️ Поле Город контрагента → значение Москва.
    Что делать, если в списке нет нужного поля для фильтра?

    Если в окне отбора отсутствует поле, которое вам нужно (например, Прибыль по сделке в документе Реализация), это означает, что оно не включено в стандартную форму списка. Решения:

    1. Добавить поле через Все действия → Настройка списка (если оно есть в методе РеквизитыШапки).

    2. Использовать отчёт с нужными полями (например, Анализ продаж).

    3. Написать запрос в консоли или через обработку.

    Для динамических фильтров (которые обновляются автоматически при изменении данных) без программирования не обойтись. Например, чтобы всегда видеть только неоплаченные счета, придётся написать обработку или использовать механизм Управляемые формы с привязкой к событию ПриОткрытии.

    Сложные фильтры: операторы, группы условий и подчинённые запросы

    Когда простых условий недостаточно, на помощь приходят логические операторы, группировка и подчинённые запросы. Рассмотрим на примерах.

    1. Операторы И, ИЛИ, НЕ

    Допустим, вам нужно найти всех клиентов, которые:

    • 📍 Из Москвы ИЛИ Санкт-Петербурга,
    • 💳 Имеют задолженность БОЛЬШЕ 10 000 руб.,
    • 📅 Но при этом НЕ являются ИП (только юридические лица).

    В окне отбора это будет выглядеть так:

    
    

    (Город = "Москва" ИЛИ Город = "Санкт-Петербург")

    И (Задолженность > 10000)

    И НЕ (ВидКонтрагента = "Индивидуальный предприниматель")

    2. Группы условий

    Если нужно комбинировать условия с разной логикой, используйте скобки для группировки. Например, найти документы, где:

    • 📦 Товар «Монитор A» ИЛИ «Клавиатура B»,
    • 📅 Дата после 01.01.2026,
    • 💰 Но сумма НЕ превышает 30 000 руб.

    Запись в отборе:

    
    

    (Товар = "Монитор A" ИЛИ Товар = "Клавиатура B")

    И (Дата > '2026-01-01')

    И (Сумма <= 30000)

    Убедитесь, что все скобки закрыты|Проверьте регистр в текстовых полях|Укажите корректный формат даты (ДД.ММ.ГГГГ)|Протестируйте фильтр на небольшом диапазоне данных

    -->

    3. Подчинённые запросы

    Иногда нужно отфильтровать данные на основе связанных таблиц. Например, найти все заказы, в которых есть хотя бы один товар из категории «Бытовая техника»**. Для этого потребуется:

    1. Открыть конструктор запросов (Файл → Новый → Запрос).
    2. Написать запрос с подчинением:
      
      

      ВЫБРАТЬ

      ЗаказыПокупателей.Ссылка КАК Ссылка

      ИЗ

      Документ.ЗаказПокупателя КАК ЗаказыПокупателей

      ГДЕ

      СУЩЕСТВУЕТ (

      ВЫБРАТЬ

      ТоварыЗаказа.Ссылка

      ИЗ

      Документ.ЗаказПокупателя.Товары КАК ТоварыЗаказа

      ГДЕ

      ТоварыЗаказа.Категория = &Категория

      И ТоварыЗаказа.Заказ = ЗаказыПокупателей.Ссылка

      )

    3. Указать параметр &Категория со значением «Бытовая техника»**.
    💡

    Подчинённые запросы значительно нагружают базу данных. Используйте их только при необходимости и оптимизируйте индексы таблиц.

    Программная настройка фильтров: язык 1С и обработки

    Если вам нужно автоматизировать фильтрацию (например, создать кнопку «Показать просроченные заказы»), придётся писать код на встроенном языке . Рассмотрим два подхода:

    1. Настройка отбора через код

    Допустим, вам нужно в форме списка документов ЗаказПокупателя добавить кнопку, которая будет показывать только заказы со статусом «Не выполнен»** и датой доставки раньше сегодняшней.

    Код для обработчика кнопки:

    
    

    Процедура КомандыФильтрПросроченныеЗаказы(Команда)

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

    Отбор.Вставить("Статус", Перечисление.СтатусыЗаказов.НеВыполнен);

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

    ЭлементыФормы.СписокЗаказов.Отбор.Установить(Отбор);

    ЭлементыФормы.СписокЗаказов.ПрименитьОтбор();

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

    2. Динамический фильтр в управляемой форме

    Чтобы фильтр обновлялся автоматически при изменении данных (например, при добавлении нового заказа), используйте событие ПриИзменении:

    
    

    Процедура СписокЗаказовПриИзменении(Элемент)

    Если ЭлементыФормы.ФильтрПоДате.Значение Тогда

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

    Отбор.Вставить("Дата", НачалоДня(ЭлементыФормы.ДатаНачала.Значение));

    ЭлементыФормы.СписокЗаказов.Отбор.Установить(Отбор);

    КонецЕсли;

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

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

    
    

    НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата())

    💡

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

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

    Даже опытные пользователи сталкиваются с проблемами при настройке фильтров. Вот самые распространённые ошибки и их решения:

    Ошибка Причина Решение
    Фильтр не находит данные, которые есть в базе Несовпадение регистра или формата (например, дата введена как 01.12.24 вместо 01.12.2026) Используйте функции НРег() для текста и НачалоДня() для дат
    Фильтр работает слишком медленно Слишком много условий или подчинённых запросов без индексов Оптимизируйте запрос, добавьте индексы на часто используемые поля
    После применения фильтра список пустой Ошибка в логике условий (например, И вместо ИЛИ) Проверьте группировку условий скобками
    Фильтр сбрасывается после обновления формы Не сохранены настройки отбора в управляемой форме Используйте событие ПередОткрытием для восстановления фильтра

    Пример ошибки с регистром:

    Вы ищете контрагента «ООО РОМАШКА», но в базе он записан как «ООО Ромашка» (с маленькой буквой). Фильтр не сработает, если не использовать функцию НРег():

    
    

    ГДЕ НРег(Контрагент.Наименование) = НРег(&Поиск)

    Почему фильтр по дате может не работать?

    Частая причина — несовпадение временной зоны. Если в базе дата хранится с временем (например, 01.05.2026 00:00:00), а вы ищете по 01.05.2026, фильтр не найдёт запись. Используйте НачалоДня() или КонецДня() для корректного сравнения.

    Ошибка с логическими операторами:

    Если вы напишете:

    
    

    ГДЕ Сумма > 1000 И Сумма < 5000 ИЛИ Статус = "Оплачен"

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

    
    

    ГДЕ (Сумма > 1000 И Сумма < 5000) ИЛИ Статус = "Оплачен"

    Оптимизация фильтров: как ускорить работу с большими данными

    Если в вашей базе миллионы записей, неоптимизированные фильтры могут тормозить систему. Вот 5 способов ускорить отбор:

    • 🚀 Индексируйте поля, по которым часто выполняется фильтрация. Например, для справочника Номенклатура добавьте индекс по полю Артикул:
      
      

      ИндексироватьПо "Артикул"

    • 🔍 Используйте виртуальные таблицы вместо прямых запросов к регистрам. Например, вместо выборки из РегистрНакопления.ОстаткиТоваров используйте виртуальную таблицу ОстаткиТоваров.Остатки().
    • ⏱️ Ограничивайте период в запросах. Вместо ГДЕ Дата > '2000-01-01' укажите конкретный диапазон: ГДЕ Дата МЕЖДУ '2026-01-01' И '2026-12-31'.
    • 🗃️ Разбивайте сложные фильтры на несколько простых. Например, сначала отфильтруйте по дате, затем по сумме.
    • 🔄 Кэшируйте результаты часто используемых фильтров в временных таблицах.

    Пример оптимизированного запроса для поиска просроченных заказов:

    
    

    ВЫБРАТЬ

    Заказы.Ссылка КАК Ссылка,

    Заказы.ДатаДоставки КАК ДатаДоставки

    ИЗ

    Документ.ЗаказПокупателя КАК Заказы

    ГДЕ

    Заказы.Статус = ЗНАЧЕНИЕ(Перечисление.СтатусыЗаказов.НеВыполнен)

    И Заказы.ДатаДоставки < НачалоДня(ТекущаяДата())

    И Заказы.Дата МЕЖДУ '2026-01-01' И '2026-12-31'

    УПОРЯДОЧИТЬ ПО

    ДатаДоставки

    💡

    Визуально отбор по индексированному полю выполняется в 10–100 раз быстрее, чем по неиндексированному.

    Если фильтр всё равно работает медленно, проверьте:

    • 🛠️ Фрагментацию индексов (используйте тестирование и исправление базы).
    • 📊 Статистику запросов в 1С:Предприятие (Администрирование → Тестирование и исправление → Анализ производительности).
    • 🖥️ Нагрузку на сервер (возможно, проблема не в фильтре, а в аппаратных ресурсах).

    Практические примеры: фильтры для бухгалтерии, торговли и ЗУП

    Разберём 3 реальных кейса из разных конфигураций .

    1. Бухгалтерия: фильтр платежей по контрагенту и статье ДДС

    Задача: найти все платежные поручения от ООО «Альфа» по статье «Оплата поставщикам» за текущий квартал.

    Решение:

    • Откройте журнал Банковские выписки.
    • Добавьте отбор:
      • Поле КонтрагентООО «Альфа»**.
      • Поле СтатьяДвиженияДенежныхСредствОплата поставщикам.
      • Поле Дата → диапазон с 01.04.2026 по 30.06.2026.

    2. Управление торговлей: фильтр товаров по остаткам и цене

    Задача: показать все товары категории «Одежда»** с остатком меньше 5 шт. и ценой выше 2 000 руб.

    Решение через запрос:

    
    

    ВЫБРАТЬ

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

    ОстаткиТоваров.КоличествоОстаток КАК Остаток,

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

    ИЗ

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

    ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОстаткиТоваров.Остатки(

    &ДатаОтчета,

    Склад = &Склад

    ) КАК ОстаткиТоваров

    ПО Номенклатура.Ссылка = ОстаткиТоваров.Номенклатура

    ГДЕ

    Номенклатура.Группа = &Группа

    И ОстаткиТоваров.КоличествоОстаток < 5

    И Номенклатура.ЦенаПродажи > 2000

    3. Зарплата и управление персоналом: фильтр сотрудников по стажу

    Задача: найти всех сотрудников со стажем работы в компании более 3 лет, но младше 40 лет.

    Решение:

    • Откройте справочник Сотрудники.
    • Добавьте вычисляемое поле Стаж через Все действия → Настройка списка → Добавить поле.
    • Укажите формулу:
      
      

      ДатаНачала = Сотрудники.ДатаПриема;

      СтажВДнях = ТекущаяДата() - ДатаНачала;

      СтажВГодах = СтажВДнях / 365

    • Настройте отбор:
      • Поле СтажВГодах> 3.
      • Поле ДатаРождения<= ДобавитьМесяц(ТекущаяДата(), -40*12).
    💡

    В ЗУП для фильтрации по датам удобно использовать виртуальную таблицу КадровыеДанныеСотрудников.СрезыПоследних(), которая хранит актуальные данные без истории.

    Частые вопросы по фильтрам в 1С

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

    В большинстве конфигураций можно сохранить настройки отбора:

    1. Настройте фильтр в списке.
    2. Нажмите на иконку «Сохранить настройки»** (обычно рядом с кнопкой отбора).
    3. Укажите имя настройки (например, «Просроченные заказы»**).

    В следующий раз вы сможете загрузить сохранённый фильтр из меню Все действия → Загрузить настройки.

    🔹 Почему фильтр по дате показывает документы не за тот период?

    Скорее всего, проблема в временной части даты. Если в базе время хранится как 00:00:00, а вы ищете по 31.12.2023, документ с датой 31.12.2023 23:59:59 не попадёт в выборку. Используйте:

    
    

    ГДЕ Дата МЕЖДУ НачалоДня(&ДатаНачала) И КонецДня(&ДатаОкончания)

    🔹 Можно ли сделать фильтр по цвету ячейки в отчёте?

    Да, но не через стандартный отбор. Вам потребуется:

    1. Открыть настройки отчёта (Показать настройки).
    2. Перейти на вкладку «Условное оформление»**.
    3. Добавить правило (например, «если сумма > 100 000, то фон красный»**).

    Это не фильтр в привычном смысле, но позволит визуально выделить нужные данные.

    🔹 Как отфильтровать данные по нескольким значениям одного поля (например, по списку товаров)?

    Используйте оператор В (или IN в английской нотации). Пример:

    
    

    ГДЕ Товар В (&СписокТоваров)

    Где &СписокТоваров — массив значений, например:

    
    

    &СписокТоваров = Новый Массив();

    &СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоНаименованию("Монитор A"));

    &СписокТоваров.Добавить(Справочники.Номенклатура.НайтиПоНаименованию("Клавиатура B"));

    🔹 Почему после обновления 1С перестали работать сохранённые фильтры?

    Это типичная проблема при переходе на новую версию платформы или конфигурации. Причины:

    • Изменилась структура метаданных (например, переименовали поле).
    • Обновился интерфейс формы списка.
    • Сбросились пользовательские настройки.

    Решение: проверьте актуальность полей в фильтре и сохраните настройки заново. Если проблема остаётся — обратитесь к администратору базы.