Разработка и Конфигурация · 9 мин
Как в запросе 1С установить формат даты
Как установить формат даты в запросе 1С с помощью функции ФОРМАТ, строки форматирования, примеры кода, типичные ошибки и способы проверки результата.
Форматирование даты прямо в тексте запроса нужно, когда результат выводится в макет печатной формы, файл обмена или отчёт без дополнительной обработки в коде. В языке запросов 1С для этого существует функция ФОРМАТ, которая принимает значение и строку форматирования и возвращает готовое текстовое представление.
Важно понимать: функция ФОРМАТ преобразует дату в строку. Это значит, что после форматирования поле теряет тип «Дата» — его нельзя сравнивать, сортировать по хронологии или использовать в арифметике дат. Поэтому форматирование всегда выполняют на последнем этапе выборки, а не в условиях и соединениях.
Ниже разобраны синтаксис функции, готовые строки форматирования для типовых задач, работа с составной датой, альтернативы без преобразования типа и способы проверить результат до вывода в печатную форму.
Как работает функция ФОРМАТ в языке запросов
Функция имеет два параметра: выражение (дата, число, булево или ссылка) и строка форматирования. Синтаксис строки полностью совпадает с параметром функции Формат() встроенного языка, поэтому все привычные конструкции ДЛФ, ДФ и числовые шаблоны работают и в запросе.
Базовый пример для выборки даты документа в коротком формате:
ВЫБРАТЬ
Реализация.Номер КАК Номер,
ФОРМАТ(Реализация.Дата, "ДЛФ=D") КАК ДатаСтрокой
ИЗ
Документ.РеализацияТоваровУслуг КАК Реализация
Результатом поля «ДатаСтрокой» будет строка вида «15.03.2026». Если строку форматирования не указать, платформа применит формат по умолчанию для текущего регионального стандарта сеанса, что на разных компьютерах может дать разный вид даты.
Основные строки форматирования даты
Для дат используются две группы параметров: локализованные форматы (ДЛФ) и произвольные шаблоны (ДФ). Локализованные зависят от региональных настроек, шаблоны дают фиксированный вид независимо от настроек сеанса.
| Строка формата | Пример результата | Когда применять |
|---|---|---|
| ДЛФ=D | 15.03.2026 | Короткая дата для печатных форм и журналов |
| ДЛФ=DD | 15 марта 2026 г. | Договоры, акты, приказы — полное наименование |
| ДЛФ=DT | 15.03.2026 10:25:41 | Дата со временем, журналы операций |
| ДФ=dd.MM.yyyy | 15.03.2026 | Фиксированный формат независимо от локали |
| ДФ=yyyy-MM-dd | 2026-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.01.0001) после форматирования превратится в «01.01.0001» или «1 января 0001 г.», что в печатной форме выглядит как ошибка. Если пустые даты возможны, добавьте ВЫБОР с проверкой:
ВЫБОР
КОГДА Документ.ДатаОтгрузки = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ""
ИНАЧЕ ФОРМАТ(Документ.ДатаОтгрузки, "ДЛФ=D")
КОНЕЦ КАК ДатаОтгрузкиСтрокой
Как проверить результат
Строка соответствует шаблону, порядок частей верный
Вместо месяца минуты, лишние нули, другой разделитель
Сортировка по исходному полю даты, порядок хронологический
Сортировка по строке — февраль раньше января
Пустая строка или заглушка через ВЫБОР/ЕСТЬ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.