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

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

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

Как в запросе 1С 8 преобразовать дату в строку: функция ФОРМАТ, ВЫРАЗИТЬ, форматные строки ДЛФ, ДФ, типичные ошибки и примеры кода с пояснениями.

Подзадача «выразить дату как строку» возникает в запросах 1С 8 постоянно: дату нужно показать в произвольном формате в отчёте, склеить с другим текстом, вывести в печатной форме или передать в поле, тип которого уже строковый. Язык запросов 1С не имеет привычного «кастового» преобразования даты в строку через ВЫРАЗИТЬ — вместо этого используется функция ФОРМАТ, которая преобразует значение в строковое представление по заданной форматной строке.

Ключевой момент, который нужно понять сразу: конструкция ВЫРАЗИТЬ(Поле КАК СТРОКА(...)) не преобразует тип, а лишь приводит значение к указанному типу, если оно уже совместимо. Для даты это не работает — попытка выразить дату как строку через ВЫРАЗИТЬ приведёт к ошибке или пустому результату. Правильный инструмент — функция ФОРМАТ с форматной строкой вида ДФ=dd.MM.yyyy.

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

Почему ВЫРАЗИТЬ не подходит для преобразования даты в строку

Оператор ВЫРАЗИТЬ в языке запросов 1С предназначен для приведения значения к конкретному типу, а не для конвертации. Он полезен, когда поле имеет составной тип (например, строка неограниченной длины или ссылка на разные справочники) и нужно «указать» запросу, с каким типом работать дальше. Классический пример — ВЫРАЗИТЬ(Комментарий КАК СТРОКА(100)), чтобы обрезать неограниченную строку и получить возможность сравнивать её или группировать по ней.

Дата и строка — несовместимые типы для ВЫРАЗИТЬ. Попытка написать ВЫРАЗИТЬ(Документ.Дата КАК СТРОКА(20)) не даст строку «01.03.2026»: в зависимости от контекста вы получите ошибку построения запроса или значение NULL. Поэтому запомните правило: ВЫРАЗИТЬ — для приведения, ФОРМАТ — для преобразования в строку.

Функция ФОРМАТ: базовый синтаксис

Функция ФОРМАТ принимает два аргумента: значение и форматную строку. В тексте запроса это выглядит так:

ВЫБРАТЬ

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

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

ИЗ

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

Результатом поля «ДатаСтрокой» будет строка вида «15.04.2026». Форматная строка передаётся как строковый литерал прямо в тексте запроса — в двойных кавычках. Параметры внутри форматной строки разделяются точкой с запятой, если их несколько.

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

Форматные строки для даты: что ставить после ДФ=

Форматная строка для дат начинается с параметра ДФ (в локализованных версиях — DF), после знака равенства указывается шаблон. Основные обозначения: d или dd — день, M или MM — месяц, yy или yyyy — год, H или HH — часы, m или mm — минуты, s или ss — секунды. Одиночные символы убирают ведущий ноль, двойные — сохраняют.

Типовые варианты, которые закрывают большинство задач:

  • ДФ=dd.MM.yyyy — «05.03.2026», стандартный вид даты;
  • ДФ="dd.MM.yyyy HH:mm:ss" — дата со временем, «05.03.2026 14:30:00»;
  • ДФ=yyyy-MM-dd — формат, удобный для обмена и сортировки строк;
  • ДЛФ=D — длинное представление даты словами, например «5 марта 2026 г.»;
  • ДЛФ=DD — полная дата с днём недели.

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

1c
ФОРМАТ(Документ.Дата, "ДФ=yyyy-MM-dd") КАК ДатаISO

Вывод даты в составе текста и склейка строк

Частая задача — получить фразу вида «Реализация № 145 от 05.03.2026» одним полем. В языке запросов 1С нет оператора конкатенации строк, поэтому склейку делают либо через СОЕДИНИТЬ в СКД, либо уже после выполнения запроса — в модуле, при обходе выборки. В самом запросе корректный путь — вывести дату строкой отдельным полем и собрать итоговый текст при обработке результата:

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

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

"ВЫБРАТЬ

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

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

|ИЗ

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

Выборка = Запрос.Выполнить().Выбрать();

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

Представление = "Реализация № " + Выборка.Номер + " от " + Выборка.ДатаСтрокой;

КонецЦикла;

Внутри строкового литерала запроса кавычки форматной строки удваиваются — это стандартное правило встроенного языка 1С. Если пишете текст запроса в консоли запросов или в конструкторе, удваивать кавычки не нужно: там текст хранится как есть.

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

Пустые даты и значения NULL

Если дата не заполнена, ФОРМАТ вернёт строку «01.01.0001 0:00:00» или её сокращённый вариант в соответствии с шаблоном — например «01.01.0001». Для пользователя такой вывод выглядит как мусор. Чтобы показать пустую строку, оберните поле в ВЫБОР:

ВЫБОР

КОГДА Реализация.Дата = ДАТАВРЕМЯ(1, 1, 1)

ТОГДА ""

ИНАЧЕ ФОРМАТ(Реализация.Дата, "ДФ=dd.MM.yyyy")

КОНЕЦ КАК ДатаСтрокой

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

Типичные ошибки
01
Использование ВЫРАЗИТЬ(Дата КАК СТРОКА(20)) — даст ошибку или NULL, а не строку с датой
02
Пропуск обработки пустой даты — в отчёте появляется «01.01.0001» вместо пустой строки
03
Сортировка по полю с ФОРМАТ — строки сортируются по алфавиту, а не по хронологии
04
Одинарные кавычки вокруг форматной строки в тексте запроса — синтаксическая ошибка, нужны двойные

ФОРМАТ в СКД, динамических списках и консоли запросов

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

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

При отладке в консоли запросов проверяйте тип колонки результата: после ФОРМАТ она должна иметь строковый тип. Если колонка осталась датой — значит, функция не применилась, и стоит проверить синтаксис форматной строки и версию платформы.

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

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

Тип поля в результате запроса
Норма

Строка, значение вида «05.03.2026»

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

Тип Дата или NULL — ФОРМАТ не применился

Строки без даты
Норма

Пустая строка или осмысленная заглушка

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

Выводится «01.01.0001»

Порядок строк в отчёте
Норма

Хронологический порядок сохранён

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

Строки перемешаны — сортировка идёт по строковому представлению

Альтернативы: когда форматировать лучше вне запроса

Не всегда преобразование в строку нужно делать в запросе. Если результат обходится в коде, функция встроенного языка Формат(Дата, "ДФ=dd.MM.yyyy") делает то же самое гибче: форматную строку можно вынести в параметр, применять разные шаблоны для разных строк и не усложнять текст запроса. Для печатных форм это обычно удобнее.

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

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

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

Нужна строка с датой прямо в результате запроса или выгрузкеИспользуйте ФОРМАТ с шаблоном ДФ в тексте запроса
Дата нужна для сортировки, отборов и группировок в отчёте СКДОставьте поле датой и задайте формат в настройках поля
Строка собирается при обходе выборки в кодеФорматируйте функцией Формат() встроенного языка вне запроса
Итог

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

Дату в строку в запросе 1С 8 преобразует только функция ФОРМАТ с форматной строкой (ДФ=dd.MM.yyyy или ДЛФ=D). ВЫРАЗИТЬ для этого не работает. Обрабатывайте пустые даты и NULL через ВЫБОР и ЕСТЬNULL, а для сортировки и группировок оставляйте отдельное поле с исходной датой.

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

Можно ли в ФОРМАТ передать форматную строку параметром запроса?

Нет, второй аргумент ФОРМАТ в языке запросов должен быть строковым литералом в тексте запроса. Если нужен переменный формат, формируйте текст запроса программно или форматируйте дату уже после выполнения запроса функцией Формат() встроенного языка.

Почему ФОРМАТ возвращает пустое значение в некоторых строках?

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

Как вывести дату словами, например «5 марта 2026 г.»?

Используйте локальный формат: ФОРМАТ(Поле, "ДЛФ=D"). Параметр ДЛФ=D даёт длинную дату, ДЛФ=DD — длинную дату с днём недели. Результат зависит от региональных настроек сеанса.

Работает ли ФОРМАТ в динамическом списке?

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

Как отсортировать результат по дате, если она выведена строкой?

Добавьте в запрос исходное поле даты и укажите его в предложении УПОРЯДОЧИТЬ ПО, а строковое поле оставьте только для вывода. Сортировка по строке «dd.MM.yyyy» даст неверный порядок, потому что строки сравниваются посимвольно.

Чем ДФ отличается от ДЛФ в форматной строке?

ДФ задаёт точный шаблон из символов дня, месяца и года (dd.MM.yyyy), полностью контролируемый разработчиком. ДЛФ выбирает готовое локальное представление (краткое, длинное, полное), вид которого зависит от настроек локализации. Для обмена данными используйте ДФ, для вывода пользователю — ДЛФ.