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

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

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

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

Преобразование даты в строку — одна из самых частых задач при разработке на платформе 1С:Предприятие. Дату нужно вывести в сообщение пользователю, подставить в текст письма, сформировать имя файла, передать в веб-сервис или показать в печатной форме в нужном виде. Во всех этих случаях тип «Дата» напрямую не подходит — требуется строковое представление.

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

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

Как работает функция Формат() для даты

Функция Формат() — главный инструмент преобразования даты в строку с контролем вида результата. Она принимает значение и строку формата, которая описывает, как именно должна выглядеть дата: порядок дня, месяца и года, разделители, наличие времени.

Базовый синтаксис выглядит так:

ДатаДокумента = ТекущаяДатаСеанса();

СтрокаДаты = Формат(ДатаДокумента, "ДФ=dd.MM.yyyy");

// Результат: "15.03.2026" (для соответствующей даты)

Параметр ДФ (DateFormat — формат даты) задаёт шаблон из символов-подстановок. Регистр символов в шаблоне значения не имеет, но принято писать dd.MM.yyyy или дд.ММ.гггг — оба варианта работают одинаково.

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

Символы шаблона ДФ и готовые примеры

Шаблон параметра ДФ собирается из символов-подстановок. Основные из них:

  • d (д) — день месяца; dd — день с ведущим нулём;
  • M (М) — месяц числом; MM — месяц с ведущим нулём; MMM и MMMM — краткое и полное название месяца;
  • yy (гг) — две цифры года; yyyy (гггг) — четыре цифры;
  • q (к) — номер квартала;
  • H (Ч) — часы; m (м) — минуты; s (с) — секунды;
  • dddd (дддд) — полное название дня недели.

Примеры готовых шаблонов для типовых задач:

Формат(Дата, "ДФ=dd.MM.yyyy")            // 15.03.2026

Формат(Дата, "ДФ='дд.ММ.гггг ЧЧ:мм:сс'") // 15.03.2026 14:30:05

Формат(Дата, "ДФ=yyyy-MM-dd") // 2026-03-15 (ISO-вид)

Формат(Дата, "ДФ=ddMMyyyy_HHmmss") // 15032026_143005 — для имени файла

Формат(Дата, "ДФ='MMMM yyyy'") // март 2026

Обратите внимание на вложенные кавычки: если внутри шаблона нужны пробелы или буквы, весь шаблон заключают в одинарные кавычки внутри строки, а саму строку — в двойные. Это частая причина синтаксических ошибок у начинающих разработчиков.

bsl
СтрокаДаты = Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy");

Когда достаточно функции Строка()

Функция Строка() приводит значение любого типа к строке, используя представление по умолчанию. Для даты результат зависит от региональных настроек сеанса: чаще всего это вид «15.03.2026 14:30:05» с полным временем.

ДатаДокумента = ТекущаяДатаСеанса();

ТекстСообщения = "Документ создан " + Строка(ДатаДокумента);

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

Важно помнить: при конкатенации строки с датой платформа неявно вызывает то же самое приведение. Код "Дата: " + ДатаДокумента сработает, но результат будет зависеть от настроек сеанса. Явное форматирование делает поведение предсказуемым.

Локализованные форматы через параметр ДЛФ

Параметр ДЛФ (DLF — Date Local Format) задаёт стандартные локализованные представления даты без ручной сборки шаблона. Доступны значения Д (дата), В (время), ДВ (дата и время), ДД (длинная дата с названием месяца и дня недели).

Формат(Дата, "ДЛФ=D")   // 15.03.2026

Формат(Дата, "ДЛФ=DD") // 15 марта 2026 г.

Формат(Дата, "ДЛФ=DT") // дата и время по региональным настройкам

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

Сравнение способов

Формат() с ДФ

Полный контроль вида строки. Подходит для файлов, обмена, имён документов. Требует аккуратности с шаблоном.

Формат() с ДЛФ

Локализованный вид с названием месяца. Подходит для сообщений и печати. Не подходит для машиночитаемых форматов.

Строка()

Быстро и просто, но вид зависит от настроек сеанса. Только для служебных целей.

Дата в строку для файлов и обмена данными

При выгрузке в XML, JSON или веб-сервисы дату обычно требуется представить в формате ISO 8601: 2026-03-15T14:30:05. В платформе для этого есть готовые функции работы с датами в формате XML, а также возможность собрать строку через Формат().

// Вариант 1: через Формат

СтрокаISO = Формат(Дата, "ДФ=yyyy-MM-dd") + "T" + Формат(Дата, "ДФ=HH:mm:ss");

// Вариант 2: штатная функция для XML

СтрокаISO = XMLСтрока(Дата); // 2026-03-15T14:30:05

Для имён файлов нельзя использовать двоеточия и некоторые другие символы — файловая система их не примет. Поэтому время в имени файла записывают без разделителей или через дефис: ДФ=yyyyMMdd_HHmmss.

Как проверить результат и типичные ошибки

Проверить результат преобразования проще всего через Сообщить() или окно вычисления выражения в отладчике (Shift+F9): введите выражение Формат(ТекущаяДатаСеанса(), "ДФ=dd.MM.yyyy") и посмотрите полученную строку.

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

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

Длина и структура строки
Норма

Разделители и порядок частей соответствуют шаблону

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

Месяц и день перепутаны местами, пропали ведущие нули

Время в строке
Норма

Часы, минуты, секунды присутствуют, если нужны

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

Время обрезано или добавлено нежелательное 0:00:00

Пустая дата
Норма

Пустая дата обработана отдельной веткой кода

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

В строку попало 01.01.0001 и ушло в документ

Типичные ошибки
01
Не задан формат явно — вид даты меняется от компьютера к компьютеру и ломает разбор на приёмной стороне.
02
Перепутаны MM (месяц) и mm (минуты) — в строке вместо месяца появляются минуты.
03
Пустая дата не проверена — в сообщение или файл попадает 01.01.0001 0:00:00.
04
Двойные кавычки внутри шаблона без экранирования — синтаксическая ошибка модуля.
05
Строка с датой используется для сравнения дат — сравнение строк даёт неверный порядок, сравнивать нужно значения типа Дата.

Отдельно стоит сказать о пустой дате. Значение «пустая дата» в 1С — это 1 января 0001 года. Если переменная не заполнена, Формат() честно вернёт «01.01.0001 0:00:00», и эта строка может уйти в печатную форму или файл обмена. Перед форматированием проверяйте заполненность:

Если ЗначениеЗаполнено(ДатаДокумента) Тогда

СтрокаДаты = Формат(ДатаДокумента, "ДФ=dd.MM.yyyy");

Иначе

СтрокаДаты = "";

КонецЕсли;

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

Как вывести дату без времени, если в значении время есть?

Используйте шаблон без компонентов времени: Формат(Дата, "ДФ=dd.MM.yyyy") — часы, минуты и секунды просто не попадут в результат. Либо параметр ДЛФ=D, который по определению выводит только дату.

Как получить название месяца прописью, например «15 марта 2026 г.»?

Примените Формат(Дата, "ДЛФ=DD") — платформа подставит полное название месяца в нужном падеже и добавит «г.» после года. Вручную через ДФ такой вид собирается шаблоном ДФ='dd MMMM yyyy', но буква «г» и падеж потребуют дополнительной обработки.

Почему Формат() возвращает дату в другом виде на разных компьютерах?

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

Как преобразовать строку обратно в дату?

Функция Дата("20260315") принимает строку вида ГГГГММДД (опционально с временем ЧЧММСС). Для строк в формате ISO используйте XMLЗначение(Тип("Дата"), СтрокаISO). Произвольные строки вида «15.03.2026» придётся разбирать вручную через СтрРазделить и собирать дату из чисел.

Можно ли отформатировать дату прямо в запросе?

Функции Формат() в языке запросов нет. Доступно ПРЕДСТАВЛЕНИЕ(Дата) с видом по умолчанию. Для точного формата в отчётах на СКД создайте вычисляемое поле и в его выражении используйте Формат() на встроенном языке.

Чем ТекущаяДата() отличается от ТекущаяДатаСеанса() при форматировании?

Само форматирование одинаково, разница в источнике значения: ТекущаяДата() берёт время клиентского компьютера, ТекущаяДатаСеанса() — время сервера с учётом часового пояса сеанса. В серверном коде и при работе нескольких пользователей корректнее использовать ТекущаяДатаСеанса().

Итог

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

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