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

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

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

Как установить формат даты в запросе 1С с помощью функции ФОРМАТ, строки форматирования, примеры кода, типичные ошибки и способы проверки результата.

Форматирование даты прямо в тексте запроса нужно, когда результат выводится в макет печатной формы, файл обмена или отчёт без дополнительной обработки в коде. В языке запросов 1С для этого существует функция ФОРМАТ, которая принимает значение и строку форматирования и возвращает готовое текстовое представление.

Важно понимать: функция ФОРМАТ преобразует дату в строку. Это значит, что после форматирования поле теряет тип «Дата» — его нельзя сравнивать, сортировать по хронологии или использовать в арифметике дат. Поэтому форматирование всегда выполняют на последнем этапе выборки, а не в условиях и соединениях.

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

Как работает функция ФОРМАТ в языке запросов

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

Базовый пример для выборки даты документа в коротком формате:

ВЫБРАТЬ

Реализация.Номер КАК Номер,

ФОРМАТ(Реализация.Дата, "ДЛФ=D") КАК ДатаСтрокой

ИЗ

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

Результатом поля «ДатаСтрокой» будет строка вида «15.03.2026». Если строку форматирования не указать, платформа применит формат по умолчанию для текущего регионального стандарта сеанса, что на разных компьютерах может дать разный вид даты.

Основные строки форматирования даты

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

Строка форматаПример результатаКогда применять
ДЛФ=D15.03.2026Короткая дата для печатных форм и журналов
ДЛФ=DD15 марта 2026 г.Договоры, акты, приказы — полное наименование
ДЛФ=DT15.03.2026 10:25:41Дата со временем, журналы операций
ДФ=dd.MM.yyyy15.03.2026Фиксированный формат независимо от локали
ДФ=yyyy-MM-dd2026-03-15Выгрузка в файлы обмена, внешние системы
ДФ="dd.MM.yyyy HH:mm:ss"15.03.2026 10:25:41Метки времени в протоколах обмена
ДФ="MMMM yyyy"март 2026Заголовки периодов в отчётах

При использовании ДФ буквы шаблона регистрозависимы: MM — месяц, а mm — минуты. Перепутанный регистр — самая частая причина «странных» значений вроде даты 15.25.2026, где на месте месяца оказались минуты времени.

Как отформатировать дату с учётом задачи

Дата для печатной формы

Для документов обычно нужен полный формат с названием месяца. Добавьте в запрос поле с ДЛФ=DD и выводите именно его в макете, а не форматируйте в коде после выборки — так вся логика представления остаётся в одном месте.

ВЫБРАТЬ

ФОРМАТ(Счет.Дата, "ДЛФ=DD") КАК ДатаПрописью

ИЗ

Документ.СчетНаОплатуПокупателю КАК Счет

ГДЕ

Счет.Ссылка = &Ссылка

Дата для обмена с внешними системами

При выгрузке в CSV, JSON или сторонние базы используйте фиксированный шаблон ДФ, чаще всего ISO-подобный «yyyy-MM-dd». Он однозначно читается независимо от региональных настроек и корректно сортируется как строка.

Только время или только часть даты

Если нужно извлечь время, применяется та же функция: ФОРМАТ(Документ.Дата, "ДЛФ=T") вернёт «10:25:41». Для группировки по месяцу или году форматирование не подходит — используйте функции НАЧАЛОПЕРИОДА, МЕСЯЦ, ГОД, которые сохраняют возможность группировки и сортировки.

Маршрут решения

Как выбрать подход

Нужно красиво показать дату в печатной форме или отчётеИспользуйте ФОРМАТ с ДЛФ или ДФ в конечной выборке
Нужно отобрать, сгруппировать или отсортировать по периодуПрименяйте НАЧАЛОПЕРИОДА, МЕСЯЦ, ГОД и оставьте тип «Дата»
Формат нужен только в одном месте кодаПроще вызвать Формат() в модуле после выполнения запроса

Ограничения и подводные камни функции ФОРМАТ

Главное ограничение уже упоминалось: результат — строка. Если по отформатированному полю построить итоги, соединение или условие, запрос либо выдаст ошибку, либо отработает с неожиданным результатом. Сортировка строк «01.02.2026» и «15.01.2026» будет лексикографической, а не хронологической.

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

Третий момент — NULL. Если поле может быть NULL (например, из левого соединения), функция ФОРМАТ вернёт NULL, и в печатной форме появится пустота. Оборачивайте такие поля в ЕСТЬNULL с подходящей заглушкой.

Типичные ошибки
01
Сортировка по отформатированному полю — порядок строк не совпадает с хронологией; сортируйте по исходному полю даты
02
Перепутан регистр в шаблоне: mm вместо MM — вместо месяца выводятся минуты
03
Форматирование даты в условии ГДЕ — сравнение строк вместо дат ломает отбор и отключает индексы
04
Использование ДЛФ в файлах обмена — результат зависит от региональных настроек сервера и может отличаться на разных машинах

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

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

Пустая дата (01.01.0001) после форматирования превратится в «01.01.0001» или «1 января 0001 г.», что в печатной форме выглядит как ошибка. Если пустые даты возможны, добавьте ВЫБОР с проверкой:

ВЫБОР

КОГДА Документ.ДатаОтгрузки = ДАТАВРЕМЯ(1, 1, 1)

ТОГДА ""

ИНАЧЕ ФОРМАТ(Документ.ДатаОтгрузки, "ДЛФ=D")

КОНЕЦ КАК ДатаОтгрузкиСтрокой

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

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

Вид даты в консоли запросов
Норма

Строка соответствует шаблону, порядок частей верный

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

Вместо месяца минуты, лишние нули, другой разделитель

Сортировка результата
Норма

Сортировка по исходному полю даты, порядок хронологический

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

Сортировка по строке — февраль раньше января

Пустая и NULL-дата
Норма

Пустая строка или заглушка через ВЫБОР/ЕСТЬNULL

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

01.01.0001 в печатной форме или пустое значение без обработки

Альтернативы форматированию в запросе

Функция ФОРМАТ — не единственный способ управлять видом даты. Форматирование в коде через Формат(Выборка.Дата, "ДЛФ=DD") удобно, когда представление нужно в одном месте и не хочется усложнять запрос. В СКД правильнее задавать формат в закладке «Наборы данных» → поле → «Оформление» или в настройках отчёта — тогда итоги и группировки работают с типом «Дата».

Для макетов табличных документов формат можно задать прямо в свойствах ячейки («Формат» в палитре свойств): параметр макета передаётся как дата, а отображение контролирует ячейка. Это самый чистый вариант для печатных форм, где одно и то же поле может понадобиться в разных представлениях.

Сравнение вариантов

ФОРМАТ в запросе

Вся логика представления в одном месте; минус — поле становится строкой, не подходит для сортировки и условий

Формат() в коде после выборки

Гибко и не портит тип в запросе; минус — форматирование размазано по модулю

Формат в СКД или свойствах ячейки макета

Тип «Дата» сохраняется, итоги работают; минус — настройка вынесена из запроса в оформление

FAQ: частые вопросы о формате даты в запросе 1С

Можно ли в запросе вывести месяц прописью в родительном падеже, например «15 марта 2026»?

Да, локализованный формат ДЛФ=DD автоматически выводит месяц в родительном падеже согласно языку сеанса. Если информационная база работает с русским региональным стандартом, результат будет «15 марта 2026 г.». Для другого языка формат зависит от настроек сеанса.

Почему ФОРМАТ выдаёт пустую строку вместо даты?

Чаще всего поле содержит NULL из левого соединения или дата не заполнена. Проверьте значение без функции ФОРМАТ, затем оберните поле в ЕСТЬNULL(Поле, ДАТАВРЕМЯ(1,1,1)) и обработайте пустую дату конструкцией ВЫБОР.

Можно ли отформатировать дату в условии ГДЕ для сравнения со строкой?

Технически можно, но делать так не стоит: сравнение строк отключает использование индекса по дате и замедляет запрос на больших таблицах. Сравнивайте дату с датой через параметр типа «Дата» или ДАТАВРЕМЯ(), а форматируйте только в списке выборки.

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

Для группировки форматирование не нужно — используйте НАЧАЛОПЕРИОДА(Поле, МЕСЯЦ) как поле группировки, а для подписи в отчёте добавьте отдельное поле ФОРМАТ(НАЧАЛОПЕРИОДА(Поле, МЕСЯЦ), "ДФ='MMMM yyyy'"). Так и сортировка, и представление будут корректными.

Работает ли функция ФОРМАТ в запросах к внешним источникам данных?

Поддержка зависит от конкретного источника и СУБД. Для таблиц самой 1С функция работает всегда, а для внешних источников надёжнее получать дату как есть и форматировать в коде после выборки.

Чем отличается ДЛФ от ДФ и что выбрать для выгрузки в файл?

ДЛФ — локализованный формат, результат зависит от региональных настроек сеанса. ДФ — фиксированный шаблон, одинаковый на любом компьютере. Для файлов обмена всегда выбирайте ДФ с явным шаблоном, например ДФ=yyyy-MM-dd, чтобы формат не «поплыл» на другом сервере.

Итог

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

Формат даты в запросе задаётся функцией ФОРМАТ(Поле, "СтрокаФормата"): ДЛФ для локализованных представлений, ДФ для фиксированных шаблонов. Результат — строка, поэтому форматируйте только на этапе вывода, а отборы, группировки и сортировку выполняйте по исходному полю типа «Дата». Пустые даты и NULL обрабатывайте через ВЫБОР и ЕСТЬNULL.