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

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

Как перевести дату в строку в 1С

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

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

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

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

Функция Формат() — основной способ

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

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

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

// Результат: "15.03.2026" (вид зависит от фактической даты)

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

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

Параметр ДП определяет, что выводить вместо пустой даты (01.01.0001). Без него пустая дата превратится в строку вида «01.01.0001 0:00:00», что почти всегда нежелательно в пользовательских документах и отчётах.

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

Шаблон ДФ строится из управляющих символов: d — день, M — месяц, y — год, H — часы, m — минуты, s — секунды. Количество повторений символа определяет вид компонента: например, dd — день с ведущим нулём, MMMM — полное название месяца.

ШаблонПример результатаГде применять
ДФ=dd.MM.yyyy05.03.2026Печатные формы, документы
ДФ=yyyy-MM-dd2026-03-05Обмен данными, веб-сервисы
ДФ="dd.MM.yyyy HH:mm:ss"05.03.2026 14:30:00Логи, журналы событий
ДФ="d MMMM yyyy 'г.'"5 марта 2026 г.Тексты договоров, письма
ДФ=yyMMdd240305Префиксы номеров, имена файлов
ДЛФ=DD5 марта 2026 г.Длинное представление даты

Литеральный текст внутри шаблона (например, букву «г.» или слово «от») заключают в одинарные кавычки, чтобы платформа не пыталась интерпретировать его как управляющие символы. Это частая причина «битых» строк: буква «д» в слове без кавычек будет воспринята как символ дня.

// Договор с датой в тексте

ТекстДоговора = "Договор № " + НомерДоговора + " от "

+ Формат(ДатаДоговора, "ДЛФ=DD");

Функция Строка() и её ограничения

Функция Строка() преобразует любое значение к строковому типу. Для даты она вернёт представление по региональным настройкам сеанса, обычно с временем: «05.03.2026 0:00:00». Это удобно для быстрой отладки, но создаёт проблемы в прикладном коде.

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

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

Формат(Дата, "ДФ=...")

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

Строка(Дата)

Быстро и коротко, но вид строки зависит от региональных настроек сеанса и включает время. Допустимо только для отладки и сообщений.

XMLСтрока(Дата)

Строка в формате ISO (YYYY-MM-DDThh:mm:ss) для сериализации и обмена по стандартам XML. Не читается пользователем, но однозначно парсится обратно.

Третий вариант — XMLСтрока() — используют, когда дату нужно сохранить в XML, JSON или передать через HTTP-сервис. Обратное преобразование выполняется функцией XMLЗначение(), что гарантирует точное восстановление исходного значения.

Дата в строку в запросах

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

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

"ВЫБРАТЬ

| ПРЕДСТАВЛЕНИЕ(Реализация.Дата) КАК ДатаСтрокой

|ИЗ

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

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

Типовые сценарии применения

Имя файла с датой выгрузки

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

ИмяФайла = "Выгрузка_" + Формат(ТекущаяДатаСеанса(), "ДФ=yyyyMMdd_HHmmss") + ".xml";

Надпись на форме документа

Для отображения даты пользователю в человекочитаемом виде удобен локальный формат:

Элементы.НадписьДата.Заголовок = "Документ создан "

+ Формат(Объект.Дата, "ДЛФ=DD");

Параметр для HTTP-запроса

Внешние API обычно требуют дату в формате ISO. Здесь подходит либо явный шаблон, либо XMLСтрока():

ПараметрДаты = Формат(НачалоПериода, "ДФ=yyyy-MM-dd");
Порядок действий
  1. 1
    Определите, где будет использоваться строка: интерфейс, файл, обмен, лог
  2. 2
    Выберите подходящий шаблон ДФ или ДЛФ под этот сценарий
  3. 3
    Добавьте параметр ДП для обработки пустой даты
  4. 4
    Проверьте результат на реальной и на пустой дате
  5. 5
    Убедитесь, что строка нигде не используется для сравнения дат

Типичные ошибки и как их избежать

Первая ошибка — перепутанные символы месяца и минут. В шаблоне mm означает минуты, а месяц — это MM (латинская M). Строка ДФ="dd.mm.yyyy" выведет вместо месяца минуты, и результат будет выглядеть правдоподобно, но неверно.

Вторая ошибка — использование кириллических символов в шаблоне. Параметр называется ДФ кириллицей, но внутри шаблона управляющие символы — латинские. Смешение раскладок приводит к тому, что шаблон выводится как обычный текст.

Третья ошибка — игнорирование пустых дат и дат с ненулевым временем. Если дата документа хранится со временем, а шаблон его не включает, время просто отбрасывается — это нормально для печати, но критично для логов, где важна точность до секунды.

Типичные ошибки
01
Шаблон dd.mm.yyyy выводит минуты вместо месяца — используйте латинскую MM для месяца
02
Строка(Дата) в файлах обмена — вид строки зависит от региональных настроек сервера
03
Отсутствие параметра ДП — пустая дата превращается в '01.01.0001 0:00:00' в печатной форме
04
Литеральный текст без кавычек внутри шаблона — буквы интерпретируются как управляющие символы
05
Сравнение дат как строк — нарушается хронологический порядок сортировки

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

Проверить преобразование проще всего через сообщение пользователю или запись в журнал регистрации на этапе отладки:

Сообщить("Дата строкой: [" + Формат(Объект.Дата, "ДФ=dd.MM.yyyy") + "]");

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

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

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

Обычная заполненная дата
Норма

Строка точно соответствует заданному шаблону

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

Вместо месяца минуты, лишнее время, иной разделитель

Пустая дата (01.01.0001)
Норма

Выводится текст из параметра ДП или пустая строка

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

В строке появляется '01.01.0001'

Дата с временем
Норма

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

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

Время теряется там, где оно важно (логи, обмен)

Итог

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

Используйте Формат(Дата, "ДФ=...") для любого прикладного вывода, Строка() — только для отладки, XMLСтрока() — для сериализации. Всегда обрабатывайте пустую дату параметром ДП и никогда не сравнивайте даты как строки.

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

ДФ задаёт произвольный шаблон даты из управляющих символов, а ДЛФ выбирает один из предопределённых локальных форматов: D — короткая дата, DD — длинная с названием месяца, DT — дата со временем. ДЛФ удобен для пользовательского интерфейса, ДФ — когда нужен точный вид строки.

Как вывести месяц прописью, например «5 марта 2026 г.»?

Используйте шаблон ДФ="d MMMM yyyy 'г.'" или локальный формат ДЛФ=DD. Оба варианта склоняют название месяца согласно региональным настройкам и языку сеанса.

Почему Формат() выводит минуты вместо месяца?

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

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

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

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

Универсальной функции разбора произвольной строки нет. Если строка в формате XML (ISO), используйте XMLЗначение(Тип("Дата"), СтрокаДаты). Для строк фиксированного вида дату собирают функцией Дата(Год, Месяц, День), извлекая компоненты через Лев(), Сред() и Прав().

Что выведет Формат() для пустой даты без параметра ДП?

Строку вида «01.01.0001 0:00:00» — это значение пустой даты в 1С. Чтобы вместо неё выводился осмысленный текст или пустая строка, добавьте в строку форматирования параметр ДП, например: "ДФ=dd.MM.yyyy; ДП='не указана'".