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