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

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

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

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

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

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

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

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

Функция ФОРМАТ в языке запросов 1С принимает два аргумента: значение (в нашем случае — поле типа «Дата») и строку формата. Результатом всегда является строка, что и требуется при выгрузке, объединении с другими текстовыми полями или выводе в отчёт.

Форматная строка задаётся через параметр ДФ (для даты) с использованием шаблонных символов: Д — день, М — месяц, Г — год, Ч — часы, м — минуты, с — секунды. Количество повторений символа определяет длину компонента: ГГ — две цифры года, ГГГГ — четыре.

ВЫБРАТЬ

ФОРМАТ(Документ.Дата, "ДФ=dd.MM.yyyy") КАК ДатаСтрокой,

ФОРМАТ(Документ.Дата, "ДФ='MMMM yyyy'") КАК МесяцГод,

ФОРМАТ(Документ.Дата, "ДФ=yyyy-MM-dd") КАК ДатаДляВыгрузки

ИЗ

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

Обратите внимание: в русской локали конфигуратора допустимы и русские обозначения (ДФ=ДД.ММ.ГГГГ), но англоязычные шаблоны (dd.MM.yyyy) работают стабильнее при переносе кода между базами с разными региональными настройками. Для выгрузок в обменные форматы (XML, JSON, CSV) чаще всего используют ISO-подобный вид yyyy-MM-dd, поскольку он однозначно читается любыми системами.

Оператор ВЫРАЗИТЬ: приведение даты к строковому типу

Оператор ВЫРАЗИТЬ в языке запросов предназначен для приведения типов. Синтаксис для даты выглядит так: ВЫРАЗИТЬ(Поле КАК Строка(19)). Длина строки указывается с запасом — стандартное представление даты со временем занимает 19 символов (ДД.ММ.ГГГГ ЧЧ:ММ:СС).

ВЫБРАТЬ

ВЫРАЗИТЬ(Документ.Дата КАК Строка(19)) КАК ДатаСтрокой

ИЗ

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

Главное ограничение способа — вы не управляете форматом. Платформа вернёт представление даты в соответствии с региональными настройками сеанса, обычно «ДД.ММ.ГГГГ Ч:ММ:СС». Если задача — получить «2026-03» или «1 квартал», ВЫРАЗИТЬ здесь не поможет.

На практике ВЫРАЗИТЬ к дате применяют редко: чаще его используют для приведения составных полей к конкретному типу или для чисел и булево. Если вам нужна именно строка из даты с контролируемым видом — берите ФОРМАТ.

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

ФОРМАТ(Дата, "ДФ=...")

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

ВЫРАЗИТЬ(Дата КАК Строка(19))

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

Обработка результата в коде

Запрос возвращает дату как есть, а строка формируется средствами встроенного языка через Формат() или Строка(). Подходит, когда формат зависит от логики, которую сложно выразить в запросе. Требует обхода выборки в коде.

Популярные шаблоны форматов даты

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

Шаблон форматаПример результатаГде применяется
ДФ=dd.MM.yyyy15.03.2026Печатные формы, отчёты для пользователей
ДФ=yyyy-MM-dd2026-03-15Выгрузки в обменные форматы, сортировка как строки
ДФ='MM.yyyy'03.2026Группировка по месяцам в отчётах
ДФ=yyyy2026Группировка по годам
ДФ='dd.MM.yyyy HH:mm:ss'15.03.2026 14:30:05Журналы, технические выгрузки со временем
ДФ='MMMM yyyy'Март 2026Человекочитаемые представления периодов

При группировке по месяцу или году помните о ловушке: строки вида «03.2026» и «11.2023» сортируются лексикографически, то есть «11.2023» окажется раньше «03.2026». Для правильного порядка либо используйте формат yyyy-MM, либо добавьте в запрос отдельное поле с исходной датой и сортируйте по нему.

bsl
ВЫБРАТЬ
	НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ) КАК Месяц,
	ФОРМАТ(НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ), "ДФ='yyyy-MM'") КАК МесяцСтрокой,
	СУММА(Продажи.СуммаОборот) КАК Сумма
ИЗ
	РегистрНакопления.Продажи.Обороты КАК Продажи
СГРУППИРОВАТЬ ПО
	НАЧАЛОПЕРИОДА(Продажи.Период, МЕСЯЦ)
УПОРЯДОЧИТЬ ПО
	Месяц

Группировка и сортировка по дате, представленной строкой

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

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

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

Порядок действий для отчёта по месяцам
  1. 1
    Добавьте в запрос поле НАЧАЛОПЕРИОДА(Период, МЕСЯЦ) — это дата для группировки и сортировки
  2. 2
    Добавьте второе поле ФОРМАТ(НАЧАЛОПЕРИОДА(Период, МЕСЯЦ), "ДФ='yyyy-MM'") — строка для отображения
  3. 3
    Сгруппируйте запрос по полю с датой начала месяца
  4. 4
    В УПОРЯДОЧИТЬ ПО укажите поле-дату, а не строковое поле
  5. 5
    Проверьте результат: месяцы должны идти в хронологическом порядке, суммы — сходиться с отчётом без группировки

Типичные ошибки и ограничения

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

Вторая ошибка — слишком маленькая длина в ВЫРАЗИТЬ(... КАК Строка(10)) для даты со временем: значение обрежется, и время потеряется. Для полной даты-времени указывайте минимум 19 символов.

Третья проблема — пустые даты. Для пустой даты (01.01.0001) ФОРМАТ вернёт строку с этим значением, а не пустую строку. Если в отчёте такие строки недопустимы, обработайте их через ВЫБОР КОГДА Дата = ДАТАВРЕМЯ(1,1,1) ТОГДА "" ИНАЧЕ ФОРМАТ(...) КОНЕЦ.

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

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

Альтернатива: преобразование в коде после запроса

Если формат строки зависит от условий, которые сложно выразить в запросе (разные шаблоны для разных строк, настройки пользователя, локализация), разумнее вернуть из запроса дату как есть, а строку формировать при обходе выборки:

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

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

ДатаСтрокой = Формат(Выборка.Дата, "ДФ=dd.MM.yyyy");

// дальнейшая обработка

КонецЦикла;

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

Минус подхода — строка появляется только после выполнения запроса, поэтому её нельзя использовать в соединениях, группировках и отборах внутри самого запроса. Для СКД-отчётов вместо кода используйте вычисляемые поля или настройку оформления.

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

Как выбрать способ

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

Проверка результата

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

Дополнительно сверьте итоги: если запрос с группировкой по строковому представлению периода даёт другие суммы, чем тот же запрос с группировкой по дате, — значит, в данных есть записи, которые строковое представление объединило или разъединило некорректно (например, из-за разного времени внутри дня).

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

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

Формат строки в выборке
Норма

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

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

Часть строк в другом формате или обрезана — проверьте шаблон и длину при ВЫРАЗИТЬ

Порядок строк при сортировке
Норма

Периоды идут в хронологическом порядке

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

Месяцы или годы перемешаны — сортировка идёт по строке, замените на сортировку по полю-дате

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

Пустые даты показаны пустой строкой или осознанно выведены как 01.01.0001

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

В отчёте неожиданные строки 01.01.0001 — добавьте обработку через ВЫБОР

Суммы при группировке
Норма

Итоги совпадают с контрольным запросом без преобразования

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

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

Часто задаваемые вопросы

Можно ли в запросе 1С получить только год или месяц из даты числом?

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

Почему ФОРМАТ в запросе возвращает дату в другом виде, чем Формат() в коде?

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

Как вывести дату в виде «1 квартал 2026» в запросе?

Готового шаблона для квартала нет. Используйте конструкцию ВЫБОР с функцией КВАРТАЛ(Дата): ВЫБОР КОГДА КВАРТАЛ(Дата) = 1 ТОГДА "1 квартал " И Т.Д., а год добавьте через ФОРМАТ(Дата, "ДФ=yyyy"). Строки соединяются оператором «+» (конкатенация) в языке запросов.

Работает ли ВЫРАЗИТЬ(Дата КАК Строка) во всех СУБД, которые поддерживает 1С?

Да, приведение даты к строке через ВЫРАЗИТЬ и функция ФОРМАТ реализованы платформой и транслируются в корректные конструкции для всех поддерживаемых СУБД (MS SQL, PostgreSQL, Oracle, IBM DB2, файловый вариант). Однако точный вид строки при ВЫРАЗИТЬ может зависеть от региональных настроек — для переносимых решений надёжнее ФОРМАТ с явным шаблоном.

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

Приводите обе стороны к одному типу и формату: либо обе к строке через одинаковый ФОРМАТ-шаблон, либо строку обратно к дате. Второй вариант предпочтительнее: ДАТАВРЕМЯ не принимает строку в запросе напрямую, поэтому надёжнее сравнивать через НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА по диапазону месяца, чем через строковое равенство.

Итог

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

Для преобразования даты в строку в запросе 1С используйте ФОРМАТ с шаблоном ДФ — это единственный способ управлять видом результата. ВЫРАЗИТЬ(... КАК Строка(19)) пригоден только для технического приведения типа. Группировку и сортировку выполняйте по полю-дате, а строковое представление добавляйте отдельным полем. Не забывайте обрабатывать пустые даты и проверять итоги на реальных данных.