Разработка и Конфигурация · 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.yyyy | 05.03.2026 | Печатные формы, документы |
ДФ=yyyy-MM-dd | 2026-03-05 | Обмен данными, веб-сервисы |
ДФ="dd.MM.yyyy HH:mm:ss" | 05.03.2026 14:30:00 | Логи, журналы событий |
ДФ="d MMMM yyyy 'г.'" | 5 марта 2026 г. | Тексты договоров, письма |
ДФ=yyMMdd | 240305 | Префиксы номеров, имена файлов |
ДЛФ=DD | 5 марта 2026 г. | Длинное представление даты |
Литеральный текст внутри шаблона (например, букву «г.» или слово «от») заключают в одинарные кавычки, чтобы платформа не пыталась интерпретировать его как управляющие символы. Это частая причина «битых» строк: буква «д» в слове без кавычек будет воспринята как символ дня.
// Договор с датой в тексте
ТекстДоговора = "Договор № " + НомерДоговора + " от "
+ Формат(ДатаДоговора, "ДЛФ=DD");
Функция Строка() и её ограничения
Функция Строка() преобразует любое значение к строковому типу. Для даты она вернёт представление по региональным настройкам сеанса, обычно с временем: «05.03.2026 0:00:00». Это удобно для быстрой отладки, но создаёт проблемы в прикладном коде.
Главный риск — зависимость от окружения. На разных серверах и у разных пользователей региональные установки могут отличаться, и одна и та же дата превратится в строки разного вида. Для файлов обмена, веб-сервисов и интеграций это недопустимо: принимающая система ожидает строго определённый формат.
Сравнение вариантов
Полный контроль над видом строки, предсказуемый результат. Подходит для файлов, печати, интеграций. Требует указания шаблона.
Быстро и коротко, но вид строки зависит от региональных настроек сеанса и включает время. Допустимо только для отладки и сообщений.
Строка в формате 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Определите, где будет использоваться строка: интерфейс, файл, обмен, лог
- 2Выберите подходящий шаблон ДФ или ДЛФ под этот сценарий
- 3Добавьте параметр ДП для обработки пустой даты
- 4Проверьте результат на реальной и на пустой дате
- 5Убедитесь, что строка нигде не используется для сравнения дат
Типичные ошибки и как их избежать
Первая ошибка — перепутанные символы месяца и минут. В шаблоне mm означает минуты, а месяц — это MM (латинская M). Строка ДФ="dd.mm.yyyy" выведет вместо месяца минуты, и результат будет выглядеть правдоподобно, но неверно.
Вторая ошибка — использование кириллических символов в шаблоне. Параметр называется ДФ кириллицей, но внутри шаблона управляющие символы — латинские. Смешение раскладок приводит к тому, что шаблон выводится как обычный текст.
Третья ошибка — игнорирование пустых дат и дат с ненулевым временем. Если дата документа хранится со временем, а шаблон его не включает, время просто отбрасывается — это нормально для печати, но критично для логов, где важна точность до секунды.
Проверка результата и FAQ
Проверить преобразование проще всего через сообщение пользователю или запись в журнал регистрации на этапе отладки:
Сообщить("Дата строкой: [" + Формат(Объект.Дата, "ДФ=dd.MM.yyyy") + "]");
Квадратные скобки вокруг результата помогают увидеть лишние пробелы или пустую строку. Перед сдачей кода проверьте три случая: обычная дата, пустая дата и дата с ненулевым временем.
Как проверить результат
Строка точно соответствует заданному шаблону
Вместо месяца минуты, лишнее время, иной разделитель
Выводится текст из параметра ДП или пустая строка
В строке появляется '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; ДП='не указана'".