Разработка и Конфигурация · 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) задаёт локальный формат даты и полезен, когда строка предназначена для человека: в печатных формах, подписях, текстах писем. Параметр ДФ — когда нужен строго контролируемый шаблон, например для выгрузки в файл или сопоставления с внешней системой.
ФОРМАТ(Документ.Дата, "ДФ=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. Иначе в отчёте часть строк окажется с пустой датой без видимой причины.
ФОРМАТ в СКД, динамических списках и консоли запросов
В схеме компоновки данных ФОРМАТ работает так же, но решение о месте форматирования стоит принимать осознанно. Если дата нужна для группировки, отбора по периоду или сортировки — оставляйте поле типом «Дата» и настраивайте отображение через формат поля в настройках. Преобразование в строку в наборе данных лишает СКД возможности строить по этому полю периодические группировки и интервальные отборы.
В динамических списках произвольный запрос с ФОРМАТ допустим, но учитывайте: поле, входящее в ключевые поля списка, преобразовывать нельзя, а форматирование выполняется при каждом обновлении списка. Для объёмных списков это заметная нагрузка — лучше форматировать на уровне оформления формы.
При отладке в консоли запросов проверяйте тип колонки результата: после ФОРМАТ она должна иметь строковый тип. Если колонка осталась датой — значит, функция не применилась, и стоит проверить синтаксис форматной строки и версию платформы.
Как проверить результат
Строка, значение вида «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), полностью контролируемый разработчиком. ДЛФ выбирает готовое локальное представление (краткое, длинное, полное), вид которого зависит от настроек локализации. Для обмена данными используйте ДФ, для вывода пользователю — ДЛФ.