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