К статье
Практический материал

Разработка и Конфигурация · 10 мин

Как указать формат даты в запросе 1С

Как задать формат даты в запросе 1С: литерал ДАТАВРЕМЯ, функции периода, Представление, форматирование в СКД и типовые ошибки при работе с датами.

Работа с датами в запросах 1С вызывает вопросы даже у опытных разработчиков: язык запросов не содержит прямого аналога функции Формат() из встроенного языка, поэтому «указать формат даты» приходится разными способами в зависимости от задачи. Иногда нужно задать дату-константу в тексте запроса, иногда — привести дату к началу периода, а иногда — вывести дату в нужном виде в отчёте на СКД.

Ниже разобраны все рабочие сценарии: литерал ДАТАВРЕМЯ, функции обработки периодов, получение строкового представления даты и форматирование на уровне компоновки данных. Отдельно рассмотрены типичные ошибки, которые приводят к пустым выборкам и несравнимым условиям.

Как задать дату-константу: литерал ДАТАВРЕМЯ

Единственный способ записать конкретную дату прямо в тексте запроса — литерал ДАТАВРЕМЯ. Формат строго фиксированный: сначала год четырьмя цифрами, затем месяц, день и при необходимости часы, минуты, секунды. Разделителей вроде точек или дефисов нет — только числа через запятую.

ВЫБРАТЬ

Продажи.Сумма

ИЗ

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

ГДЕ

Продажи.Дата >= ДАТАВРЕМЯ(2026, 1, 1)

И Продажи.Дата < ДАТАВРЕМЯ(2026, 2, 1)

Если время не указать, оно будет равно 00:00:00. Это важно: условие Дата <= ДАТАВРЕМЯ(2026, 1, 31) отсекает все документы, проведённые 31 января после полуночи. Поэтому верхнюю границу либо задают строгим неравенством со следующим днём, либо используют функцию КОНЕЦПЕРИОДА.

Передача даты через параметр запроса

На практике даты почти всегда приходят извне — из формы отчёта или кода. В этом случае в запросе используют параметр, а значение присваивают перед выполнением. Тип параметра должен быть именно «Дата», а не строка: сравнение даты со строкой даст либо ошибку, либо пустой результат.

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

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

"ВЫБРАТЬ

| Продажи.Сумма

|ИЗ

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

|ГДЕ

| Продажи.Дата МЕЖДУ &НачалоПериода И &КонецПериода";

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

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

При передаче параметров применяйте функции встроенного языка НачалоДня() и КонецДня(), чтобы границы периода были предсказуемыми. Если дату вводит пользователь в формате «дд.мм.гггг», преобразуйте её в тип Дата функцией Дата() до установки параметра — не передавайте строку «как есть».

Приведение даты к периоду: НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА

Когда нужно сгруппировать данные по дням, месяцам или кварталам, дату приводят к началу периода функцией НАЧАЛОПЕРИОДА(Дата, Период). Допустимые значения периода: СЕКУНДА, МИНУТА, ЧАС, ДЕНЬ, НЕДЕЛЯ, МЕСЯЦ, КВАРТАЛ, ГОД, а также ДЕКАДА и ПОЛУГОДИЕ.

ВЫБРАТЬ

НАЧАЛОПЕРИОДА(Продажи.Дата, МЕСЯЦ) КАК Месяц,

СУММА(Продажи.Сумма) КАК Сумма

ИЗ

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

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

НАЧАЛОПЕРИОДА(Продажи.Дата, МЕСЯЦ)

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

Месяц

Функция КОНЕЦПЕРИОДА возвращает последнюю секунду периода (23:59:59). Её удобно применять для правой границы условия, чтобы не потерять документы, проведённые в течение последнего дня. Обе функции работают и с параметрами, и с полями таблиц.

Извлечение частей даты: ГОД, МЕСЯЦ, ДЕНЬ

Если нужна не дата, а отдельная её часть — например, номер месяца для сравнения или фильтрации — язык запросов предоставляет функции ГОД(), МЕСЯЦ(), ДЕНЬ(), ЧАС(), МИНУТА(), СЕКУНДА(), ДЕНЬНЕДЕЛИ(), ДЕНЬГОДА() и НЕДЕЛЯГОДА(). Все они возвращают число.

ВЫБРАТЬ

ГОД(Заказы.Дата) КАК Год,

МЕСЯЦ(Заказы.Дата) КАК Месяц,

КОЛИЧЕСТВО(Заказы.Ссылка) КАК КоличествоЗаказов

ИЗ

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

ГДЕ

ДЕНЬНЕДЕЛИ(Заказы.Дата) < 6

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

ГОД(Заказы.Дата), МЕСЯЦ(Заказы.Дата)

Учтите, что фильтрация по извлечённым частям даты (например, ГОД(Дата) = 2026) обычно медленнее сравнения диапазоном, потому что индекс по полю даты при вызове функции не используется. Для отбора по году лучше писать условие через ДАТАВРЕМЯ или параметры.

Строковое представление даты: функция Представление

Прямого способа отформатировать дату в произвольную строку в языке запросов нет. Ближайший инструмент — функция ПРЕДСТАВЛЕНИЕ(), которая возвращает строковое представление значения. Для даты она выдаёт строку в региональном формате информационной базы, например «01.02.2026 15:30:00».

ВЫБРАТЬ

ПРЕДСТАВЛЕНИЕ(НАЧАЛОПЕРИОДА(Продажи.Дата, МЕСЯЦ)) КАК МесяцСтрокой,

СУММА(Продажи.Сумма) КАК Сумма

ИЗ

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

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

НАЧАЛОПЕРИОДА(Продажи.Дата, МЕСЯЦ)

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

Форматирование даты в СКД и после выполнения запроса

В отчётах на системе компоновки данных правильное место для форматирования — закладка «Наборы данных», список полей: у поля даты есть параметр «Формат», куда вписывают строку формата, аналогичную функции Формат(). Например, ДФ='ММММ гггг' выведет месяц прописью, а ДФ=dd.MM.yy — короткую дату. Запрос при этом остаётся чистым, а вид настраивается декларативно.

Если запрос выполняется программно и результат обрабатывается в коде, форматирование делают уже после выборки: Формат(СтрокаВыборки.Дата, "ДЛФ=D") вернёт дату в длинном формате, а Формат(Дата, "ДФ=yyyy-MM-dd") — вид, принятый при обмене данными. Такой подход даёт полный контроль над строкой, включая локаль и пустые даты.

При выгрузке во внешние системы обращайте внимание на пустую дату: в 1С это 01.01.0001 00:00:00, и без проверки на ЗначениеЗаполнено() она уедет в файл обмена в таком виде.

Способы задать формат даты

Литерал ДАТАВРЕМЯ

Константа в тексте запроса. Подходит для фиксированных границ, не подходит для пользовательских дат.

НАЧАЛОПЕРИОДА / КОНЕЦПЕРИОДА

Приведение к периоду для группировок и границ. Не даёт строкового формата.

ПРЕДСТАВЛЕНИЕ

Строка в региональном формате. Только для отображения, сортировка ломается.

Формат поля в СКД

Полный контроль вида в отчёте без изменения запроса. Только внутри СКД.

Формат() в коде

Максимальная гибкость после выборки. Требует программной обработки.

Типичные ошибки при работе с датами в запросах

Большинство проблем с датами сводится к нескольким повторяющимся сценариям. Знание их заранее экономит часы отладки, особенно когда запрос «не видит» заведомо существующие документы.

Типичные ошибки
01
Передача строки «01.02.2026» в параметр вместо типа Дата — условие молча не срабатывает или падает с ошибкой сравнения типов.
02
Правая граница периода без учёта времени: «Дата <= ДАТАВРЕМЯ(2026,1,31)» теряет документы за 31 января.
03
Сортировка по ПРЕДСТАВЛЕНИЮ даты — месяцы выстраиваются по алфавиту, а не по времени.
04
Фильтр через ГОД(Дата) вместо диапазона — запрос перестаёт использовать индекс и тормозит.
05
Пустая дата 01.01.0001 попадает в отчёт или обмен, потому что не добавлено условие на заполненность.

Отдельного внимания заслуживают виртуальные таблицы регистров: у таблиц «Остатки» и «Обороты» параметр периода задаётся в скобках после имени таблицы, и если передать туда дату с временем, результат может отличаться от ожиданий. Для остатков на конец дня передавайте дату со временем 23:59:59 либо используйте границу.

Контрольные точки

Как проверить результат

Границы периода
Норма

В выборку попадают документы первого и последнего дня периода в любое время суток

Тревожный признак

Документы за последний день отсутствуют

Тип параметра
Норма

В консоли запросов параметр показан как Дата, условие срабатывает

Тревожный признак

Параметр — строка, выборка пуста

Сортировка периодов
Норма

Месяцы идут хронологически

Тревожный признак

Порядок алфавитный: апрель раньше января

Пустые даты
Норма

Пустые значения отфильтрованы или осмысленно показаны

Тревожный признак

В отчёте видно 01.01.0001

Итог

Что важно запомнить

В запросе дату-константу пишут литералом ДАТАВРЕМЯ, периоды приводят функциями НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА, части даты извлекают функциями ГОД/МЕСЯЦ/ДЕНЬ, а красивый строковый формат задают в СКД или функцией Формат() после выборки. Верхнюю границу периода всегда проверяйте на учёт времени.

Частые вопросы

Можно ли в запросе вывести дату в формате «ГГГГ-ММ-ДД»?

Напрямую в языке запросов — нет: произвольная строка формата недоступна. Варианты: задать формат поля в СКД строкой ДФ=yyyy-MM-dd, применить Формат() после выборки в коде либо собрать строку вручную из функций ГОД, МЕСЯЦ, ДЕНЬ с дополнением нулями — последний способ громоздкий и используется редко.

Почему условие по дате не находит документы?

Чаще всего причина во времени: дата документа содержит время, а граница задана без него. Проверьте, что левая граница — начало дня, а правая — конец дня или строгое неравенство со следующим днём. Вторая причина — параметр передан строкой вместо типа Дата.

Как сгруппировать данные по неделям?

Используйте НАЧАЛОПЕРИОДА(Дата, НЕДЕЛЯ) — функция вернёт понедельник соответствующей недели. Для отображения номера недели есть функция НЕДЕЛЯГОДА(Дата), возвращающая число.

Чем отличается ПРЕДСТАВЛЕНИЕ от Формат()?

ПРЕДСТАВЛЕНИЕ работает внутри запроса, но отдаёт строку в региональном формате без возможности настройки. Формат() — функция встроенного языка, применяется после выполнения запроса и позволяет задать любой шаблон, локаль и обработку пустой даты.

Как задать параметр периода у виртуальной таблицы «Остатки»?

Период указывается в скобках после имени таблицы: РегистрНакопления.Товары.Остатки(&Период, ). Чтобы получить остатки на конец дня, передайте КонецДня(Дата) или объект Граница с видом «Включая» — иначе движения последнего дня могут не учесться.

Что делать с пустой датой 01.01.0001 в результатах?

Добавьте в запрос условие на заполненность, например Дата <> ДАТАВРЕМЯ(1,1,1), либо обрабатывайте значение при выводе через ЗначениеЗаполнено() в коде. В СКД для пустой даты можно задать формат с параметром ДП, выводящий нужный текст вместо даты.