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

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

1. Базовые способы фильтрации по дате в интерфейсе 1С

Начнём с самого простого — встроенных инструментов, которые доступны даже без знания программирования. Большинство объектов в (справочники, документы, отчёты) поддерживают фильтрацию прямо в форме списка.

Чтобы отфильтровать документы по дате:

  1. Откройте журнал документов (например, Продажи → Реализация товаров и услуг).
  2. Нажмите кнопку "Все действия" → "Отбор и сортировка" (или клавишу F5).
  3. В колонке "Дата" выберите тип сравнения: =, >, <, в диапазоне.
  4. Укажите нужную дату или интервал. Для диапазона используйте формат ДД.ММ.ГГГГ – ДД.ММ.ГГГГ.

Этот метод работает во всех типовых конфигурациях (1С:Бухгалтерия, 1С:УТ, 1С:ЗУП) и подходит для быстрого поиска. Однако у него есть ограничения:

  • 🔹 Нельзя использовать сложные условия (например, "даты за текущий месяц ИЛИ за прошлый квартал").
  • 🔹 В некоторых конфигурациях отбор сбрасывается при закрытии формы.
  • 🔹 Нет возможности сохранять часто используемые фильтры (придётся настраивать заново).
💡

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

Для более гибкой работы используйте расширенный отбор (доступен в некоторых конфигурациях через кнопку Ещё → Расширенный отбор). Здесь можно комбинировать несколько условий по дате и другим полям.

2. Фильтрация по дате в отчётах 1С

Отчёты — это отдельная история. Здесь фильтрация по дате чаще всего настраивается в параметрах перед формированием. Рассмотрим на примере стандартного отчёта "Оборотно-сальдовая ведомость":

Шаги настройки:

  1. Перейдите в раздел Отчёты → Оборотно-сальдовая ведомость.
  2. В форме отчёта найдите поле "Период" (обычно вверху).
  3. Выберите один из вариантов:
    • 📅 Конкретная дата — например, 31.12.2023.
    • 📊 Диапазон — с 01.01.2023 по 31.03.2023.
    • 🔄 Относительный период — "Текущий месяц", "Прошлый квартал" и т.д.
  4. Нажмите Сформировать.
  5. В некоторых отчётах (например, "Анализ субконто") дату можно указать в нескольких разрезах. Например, фильтровать не только по дате документа, но и по дате проведения. Будьте внимательны: эти даты могут не совпадать!

    📊 Какой отчёт вы формируете чаще всего?
    Оборотно-сальдовая ведомость
    Анализ счёта
    Карточка счёта
    Взаиморасчёты с контрагентами
    Другой
    Тип отчёта Где настраивается дата Особенности
    Оборотно-сальдовая ведомость Поле "Период" в шапке Можно выбрать "рабочую дату" или произвольный интервал
    Карточка счёта Параметры → "Период" Допускает фильтрацию по дате операции и дате документа
    Анализ субконто Закладка "Отбор" Можно комбинировать с другими фильтрами (например, по контрагенту)
    Ведомость по товарам Поле "Дата" в отборе Часто используется для анализа продаж за период

    Важный нюанс: в некоторых конфигурациях (например, 1С:Управление торговлей) при формировании отчётов по датам учитываются настройки рабочей даты (Сервис → Параметры → Рабочая дата). Если она отличается от текущей, это может искажать результаты фильтрации.

    3. Фильтрация по дате в запросах 1С (для программистов)

    Если встроенные инструменты не покрывают ваши нужды, придётся писать запросы на встроенном языке. Это самый гибкий способ, но требует знания синтаксиса. Рассмотрим основные конструкции.

    Базовый синтаксис для фильтрации по дате:

    ВЫБРАТЬ
    

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

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

    ИЗ

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

    ГДЕ

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

    Где &НачалоПериода и &КонецПериода — это параметры, которые вы передаёте в запрос. Например:

    НачалоПериода = '2023-01-01';
    

    КонецПериода = '2023-03-31';

    Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);

    Запрос.УстановитьПараметр("КонецПериода", КонецПериода);

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

    • 📌 = — точное совпадение (Дата = &ТребуемаяДата).
    • 📌 >=, <= — больше/меньше или равно.
    • 📌 В(&МассивДат) — проверка на вхождение в список дат.
    • 📌 ДЕНЬ(&Дата), МЕСЯЦ(&Дата), ГОД(&Дата) — извлечение частей даты.
    Как фильтровать по текущему месяцу без жёсткого указания дат?

    Используйте функцию НАЧАЛОПЕРИОДА():

    ГДЕ Дата >= НАЧАЛОПЕРИОДА(ТекущаяДата(), "МЕСЯЦ")
    

    И Дата <= КОНЕЦПЕРИОДА(ТекущаяДата(), "МЕСЯЦ")

    Это автоматически подставит первый и последний день текущего месяца.

    Критическая ошибка новичков: при сравнении дат в запросах всегда учитывайте время! Даже если в интерфейсе вы видите только дату, в базе она хранится с временем (например, 2023-01-01 00:00:00). Если не учесть это, фильтр Дата = '2023-01-01' может не сработать, потому что реальное значение — 2023-01-01 14:30:00. Чтобы избежать проблемы, используйте:

    ГДЕ Дата >= НАЧАЛОДНЯ(&ТребуемаяДата)
    

    И Дата < КОНЕЦДНЯ(&ТребуемаяДата) + 1

    4. Фильтрация по дате в регистрах накопления и сведений

    Регистры — это особые объекты , которые хранят данные о движениях (например, остатки товаров, взаиморасчёты). Фильтрация здесь имеет свои нюансы.

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

    ВЫБРАТЬ
    

    РегистрНакопленияОстатков.Товары.Номенклатура КАК Номенклатура,

    РегистрНакопленияОстатков.Товары.КоличествоОстаток КАК Остаток

    ИЗ

    РегистрНакопления.Товары.Остатки(&ДатаОтчёта, ) КАК РегистрНакопленияОстатков

    Где &ДатаОтчёта — это дата, на которую вы хотите получить остатки. Обратите внимание на запятую после параметра — она обязательна!

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

    ВЫБРАТЬ
    

    РегистрСведений.КурсыВалют.Валюта КАК Валюта,

    РегистрСведений.КурсыВалют.Курс КАК Курс

    ИЗ

    РегистрСведений.КурсыВалют КАК РегистрСведенийКурсыВалют

    ГДЕ

    РегистрСведенийКурсыВалют.Период = &ТребуемаяДата

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

    Убедиться, что регистр не пустой|Проверить права доступа к регистру|Уточнить структуру виртуальных таблиц|Сверить формат даты (с временем или без)|Проверьте, не блокирует ли регистр другая сессия-->

    5. Типичные ошибки при фильтрации по дате и как их избежать

    Даже опытные пользователи иногда сталкиваются с неожиданными результатами фильтрации. Разберём самые распространённые ошибки.

    Ошибка 1. Неучёт времени в датах

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

    • 🔧 Используйте НАЧАЛОДНЯ() и КОНЕЦДНЯ().
    • 🔧 Или сравнивайте с диапазоном: Дата >= '2023-01-01' И Дата < '2023-01-02'.

    Ошибка 2. Путаница между датой документа и датой проведения

    В у документа есть минимум две даты:

    • 📄 Дата документа — когда он был создан (поле Дата).
    • ⚙️ Дата проведения — когда он повлиял на учёт (поле ДатаПроведения или МоментВремени).

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

    Ошибка 3. Неправильный формат даты в параметрах

    При передаче дат в запросы через параметры используйте формат ГГГГ-ММ-ДД (например, '2023-12-31'). Если передать дату в формате ДД.ММ.ГГГГ, запрос может не сработать или вернуть ошибку. Пример правильной передачи:

    ПараметрыЗапроса.ДатаНачала = Формат(НачалоМесяца(ТекущаяДата()), "ДФ=yyyy-MM-dd");
    💡

    Всегда проверяйте формат дат, передаваемых в запросы. Даже если в интерфейсе отображается ДД.ММ.ГГГГ, в коде может потребоваться ГГГГ-ММ-ДД.

    Ошибка 4. Игнорирование временных зон

    В распределённых базах или при работе с облачными сервисами (например, 1С:Fresh) даты могут храниться в UTC, а отображаться в локальном времени пользователя. Это приводит к расхождениям при фильтрации. Решение:

    • 🌍 Уточните у администратора, в каком часовом поясе хранятся даты.
    • 🌍 Используйте функцию ЛокальнаяДата() для приведения к текущему поясу.
⚠️ Внимание: В некоторых конфигурациях (например, 1С:ERP) настройки временных зон могут влиять на отчёты по датам. Если вы видите расхождения в данных, проверьте настройки сервера и клиента в Администрирование → Настройки программы → Региональные настройки.

6. Автоматизация фильтрации: сохранённые настройки и внешние обработки

Если вам приходится часто применять одни и те же фильтры по датам, имеет смысл автоматизировать процесс. Вот несколько способов:

Способ 1. Сохранённые настройки отчётов

Многие отчёты в позволяют сохранять варианты настроек:

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

Теперь вы можете быстро загружать этот вариант вместо ручной настройки.

Способ 2. Внешние обработки с предварительными фильтрами

Если стандартных инструментов недостаточно, создайте внешнюю обработку:

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

Пример кода для обработки, фильтрующей документы по дате:

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

ДатаНачала = НачалоМесяца(ТекущаяДата());

ДатаКонца = КонецМесяца(ТекущаяДата());

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

Процедура ВыполнитьФильтрацию(Команда)

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

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

"ВЫБРАТЬ

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

|ИЗ

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

|ГДЕ

| Документ.Дата МЕЖДУ &ДатаНачала И &ДатаКонца";

Запрос.УстановитьПараметр("ДатаНачала", ДатаНачала);

Запрос.УстановитьПараметр("ДатаКонца", ДатаКонца);

Результат = Запрос.Выполнить();

Выборка = Результат.Выбрать();

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

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

КонецЦикла;

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

Способ 3. Регламентные задания

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

  1. Перейдите в Администрирование → Регламентные задания.
  2. Создайте новое задание, укажите расписание (например, каждый понедельник в 9:00).
  3. В коде задания пропишите логику фильтрации по датам.

Это избавит от необходимости запускать фильтрацию вручную.

7. Продвинутые техники: динамические даты и сложные условия

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

Техника 1. Динамические даты (относительные периоды)

Вместо жёсткого указания дат ('2023-01-01') используйте функции для вычисления относительных периодов:

  • 📅 ТекущаяДата() — текущая дата на клиенте.
  • 📅 НачалоМесяца(), КонецМесяца() — первый/последний день месяца.
  • 📅 ДобавитьМесяц() — сдвиг даты на заданное количество месяцев.

Пример: выборка документов за прошлый месяц:

ДатаНачала = НачалоМесяца(ДобавитьМесяц(ТекущаяДата(), -1));

ДатаКонца = КонецМесяца(ДобавитьМесяц(ТекущаяДата(), -1));

Техника 2. Фильтрация по рабочим/выходным дням

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

Функция ЭтоРабочийДень(Дата)

ДеньНедели = ДеньНедели(Дата);

Возврат НЕ (ДеньНедели = 6 ИЛИ ДеньНедели = 7); // 6 и 7 — суббота и воскресенье

КонецФункции

Техника 3. Комбинированные фильтры (даты + другие поля)

Часто даты комбинируют с другими условиями. Например, найти документы за период И по конкретному контрагенту. Пример запроса:

ВЫБРАТЬ

Документ.ПоступлениеТоваров.Ссылка КАК Ссылка

ИЗ

Документ.ПоступлениеТоваров КАК Документ

ГДЕ

Документ.Дата МЕЖДУ &ДатаНачала И &ДатаКонца

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

Техника 4. Фильтрация по датам с учётом времени суток

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

ГДЕ Дата >= &ДатаНачала

И ЧАС(Дата) МЕЖДУ 9 И 18 // Только рабочие часы

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

Фильтрация по датам в больших базах может тормозить систему. Вот как этого избежать:

Совет 1. Используйте индексы

Убедитесь, что поля по которым фильтруете (например, Документ.Дата), проиндексированы. В Конфигураторе проверьте свойства таблиц базы данных. Если индекса нет, добавьте его:

ИНДЕКСИРОВАТЬ ПО Дата

Совет 2. Ограничивайте выборку

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

ВЫБРАТЬ * ИЗ Документ.РеализацияТоваровУслуг

используйте:

ВЫБРАТЬ

Ссылка,

Дата,

СуммаДокумента

ИЗ

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

Совет 3. Разбивайте большие периоды

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

Совет 4. Используйте временные таблицы

Для сложных отчётов с множеством фильтров по датам создавайте временные таблицы:

ВЫБРАТЬ

Документ.Ссылка КАК Ссылка

ПОМЕСТИТЬ ВТДокументы

ИЗ

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

ГДЕ

Документ.Дата МЕЖДУ &ДатаНачала И &ДатаКонца;

//////////////////////////////////////////

// Далее работаем с ВТДокументы

ВЫБРАТЬ

ВТ.Ссылка

ИЗ

ВТДокументы КАК ВТ

Совет 5. Отключайте ненужные связи

В запросах с несколькими таблицами (например, документы + справочники) отключайте ненужные связи с помощью ЛЕВОЕ СОЕДИНЕНИЕ или РАЗЛИЧНЫЕ:

ВЫБРАТЬ РАЗЛИЧНЫЕ

Документ.Ссылка,

Справочник.Наименование

ИЗ

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

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

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

⚠️ Внимание: В 1С:Предприятие 8.3 при работе с большими базами данных (более 100 ГБ) некоторые операции фильтрации по датам могут блокировать таблицы. Если пользователи жалуются на "подвисания", проверьте настройки блокировок в Администрирование → Настройки СУБД.

FAQ: Частые вопросы по фильтрации дат в 1С

Как отфильтровать документы за текущий день?

Используйте функции НачалоДня() и КонецДня():

ГДЕ Дата >= НачалоДня(ТекущаяДата())

И Дата <= КонецДня(ТекущаяДата())

Или сокращённо:

ГДЕ Дата = ТекущаяДата()

Но второй вариант менее надёжен, если в дате хранится время.

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

Вероятные причины:

  1. Вы фильтруете по дате документа, а нужно по дате проведения (или наоборот).
  2. В дате хранится время, и ваш фильтр его не учитывает (например, ищете Дата = '2023-01-01', а реальное значение '2023-01-01 15:30:00').
  3. Документы не проведены (проверьте статус в журнале).
  4. На документы наложены права доступа, и ваш пользователь их не видит.

Проверьте структуру документа в Конфигураторе (Объект → Документы → [ВашДокумент]) и уточните, какие даты в нём хранятся.

Как фильтровать по датам в динамическом списке?

Динамические списки (например, в формах справочников) поддерживают отбор через свойство Отбор. Пример:

Отбор = Новый Структура("Дата", Новый ЗначениеВДиапазоне(НачалоМесяца(ТекущаяДата()), КонецМесяца(ТекущаяДата())));

ДинамическийСписок.Отбор.Добавить(Отбор.Дата);

Или через УстановитьОтбор():

ДинамическийСписок.УстановитьОтбор(

Новый Структура("Дата", Новый ЗначениеВДиапазоне(ДатаНачала, ДатаКонца))

);

Можно ли фильтровать по датам в мобильном приложении 1С?

Да, но с ограничениями. В мобильной платформе 1С:Предприятие:

  • 📱 В стандартных формах отбор по датам работает так же, как на десктопе (через кнопку Фильтр).
  • 📱 В запросах используйте те же конструкции, но учитывайте, что некоторые функции (например, РабочийДень()) могут быть недоступны.
  • 📱 Для сложной фильтрации лучше создавать серверные обработки и вызывать их с мобильного клиента.

Обратите внимание: в мобильном приложении может