Разработка и Конфигурация · 11 мин
Как в 1С выразить дату как строку
Как в 1С преобразовать дату в строку: функции Формат(), Строка(), форматные строки ДФ, вывод в запросах, печатных формах и обмене данными. Примеры кода.
Задача преобразовать дату в строку возникает в 1С постоянно: при формировании печатных форм, выгрузке данных в файлы, записи в журнал, передаче значений через веб-сервисы и HTTP-запросы. Тип «Дата» в платформе хранит значение с точностью до секунды, и простое присвоение его строковой переменной без явного форматирования часто даёт не тот результат, который ожидает разработчик.
В языке 1С есть несколько способов выразить дату строкой: универсальная функция Формат() с форматной строкой, неявное преобразование через Строка(), функции работы с запросами и шаблоны для печатных форм. Каждый способ имеет свои ограничения, и выбор зависит от того, где будет использован результат — в интерфейсе, файле обмена или запросе к базе.
Ниже разобраны рабочие варианты с примерами кода, типичные ошибки и правила выбора подходящего формата для разных сценариев.
Функция Формат() — основной инструмент
Функция Формат() принимает значение и форматную строку, определяющую, как именно оно будет представлено текстом. Для дат используются параметры, начинающиеся с префикса ДФ (дата и время) и ДЛФ (локальное представление).
ТекущаяДата = ТекущаяДатаСеанса();
СтрокаДата = Формат(ТекущаяДата, "ДФ=dd.MM.yyyy");
// Результат: "15.03.2026"
СтрокаДатаВремя = Формат(ТекущаяДата, "ДФ='dd.MM.yyyy HH:mm:ss'");
// Результат: "15.03.2026 14:30:05"
СтрокаПолная = Формат(ТекущаяДата, "ДЛФ=DD");
// Результат: "15 марта 2026 г."
Обратите внимание: в форматной строке символы месяца и минут различаются регистром — MM означает месяц, а mm — минуты. Это одна из самых частых причин неверного результата. Также допустимы и русские обозначения (дд.ММ.гггг, чч:мм:сс) — платформа понимает оба варианта.
Если форматная строка не указана, Формат() выводит дату в соответствии с региональными настройками сеанса, что на разных компьютерах может дать разный результат. Для любого обмена данными формат нужно задавать явно.
Основные форматные коды для даты
Форматная строка собирается из кодов, каждый из которых отвечает за свой компонент даты. Ниже приведены наиболее используемые.
| Код | Значение | Пример вывода |
|---|---|---|
dd / дд | День месяца, две цифры | 05 |
MM / ММ | Месяц, две цифры | 03 |
yyyy / гггг | Год, четыре цифры | 2026 |
yy / гг | Год, две последние цифры | 24 |
HH / чч | Часы (24-часовой формат) | 14 |
mm / мм | Минуты | 30 |
ss / сс | Секунды | 05 |
MMMM | Название месяца прописью | марта |
Литеральные символы (точки, пробелы, слова) внутри форматной строки заключаются в одинарные кавычки. Например, "ДФ='дата: 'dd.MM.yyyy" выведет «дата: 15.03.2026». Если забыть кавычки, платформа попытается интерпретировать буквы как коды формата, и результат будет искажён.
Формат ISO 8601 для обмена и интеграций
При передаче дат через веб-сервисы, HTTP-API, JSON и XML требуется стандартизированное представление, не зависящее от региональных настроек. Общепринятый вариант — ISO 8601: сначала год, затем месяц и день.
СтрокаISO = Формат(ТекущаяДата, "ДФ=yyyy-MM-dd");
// Результат: "2026-03-15"
СтрокаISOВремя = Формат(ТекущаяДата, "ДФ='yyyy-MM-ddTHH:mm:ss'");
// Результат: "2026-03-15T14:30:05"
// Для XML-документов удобна встроенная функция:
СтрокаXML = XMLСтрока(ТекущаяДата);
// Результат: "2026-03-15T14:30:05"
Функция XMLСтрока() предпочтительнее ручного форматирования при работе с XDTO и XML, поскольку гарантирует каноническое представление, а обратное преобразование выполняется функцией XMLЗначение(). Для JSON в типовых механизмах платформы даты сериализуются через те же правила при использовании ЗаписатьJSON с настройками сериализации.
Неявное преобразование и функция Строка()
При конкатенации даты со строкой платформа выполняет неявное преобразование: "Документ от " + ДатаДокумента. Результат зависит от региональных установок информационной базы и обычно выглядит как «15.03.2026 14:30:05». То же самое делает явный вызов Строка(ДатаДокумента).
Такой способ допустим только для быстрых отладочных сообщений и записей в журнал регистрации, где точный вид не критичен. Во всех остальных случаях — печатные формы, файлы, сообщения пользователю — используйте Формат() с явной форматной строкой, иначе вид даты будет плавать в зависимости от настроек сервера.
Отдельная ловушка — дата с нулевым временем. При неявном преобразовании она выводится как «15.03.2026 0:00:00», и лишний хвост «0:00:00» часто попадает в печатные документы. Конструкция Формат(Дата, "ДЛФ=D") выводит только дату без времени.
Дата строкой в запросах и СКД
В языке запросов 1С функции Формат() нет — представление даты там получают через функцию ПРЕДСТАВЛЕНИЕ() или через вычисляемые поля. Однако ПРЕДСТАВЛЕНИЕ для примитивного типа «Дата» возвращает то же зависимое от настроек строковое значение, поэтому его применяют в основном для ссылочных полей.
Практичный подход — не преобразовывать дату в строку внутри запроса, а выгрузить результат и отформатировать уже в коде при обходе выборки. Это даёт полный контроль над форматом и не замедляет запрос дополнительными вычислениями.
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
СтрокаДаты = Формат(Выборка.ДатаДокумента, "ДФ=dd.MM.yyyy");
// дальнейшее использование строки
КонецЦикла;
В СКД дату в нужном виде выводят через выражение представления поля или через формат поля в настройках макета — там доступна та же форматная строка с кодами ДФ.
Сравнение вариантов
Полный контроль над видом даты; подходит для файлов, печати, API. Требует явной форматной строки.
Быстро, но результат зависит от региональных настроек. Только для отладки и журнала.
Канонический формат ISO для XML, XDTO и обменов. Не читаем для пользователя.
Локализованное представление для интерфейса и печатных форм: «15 марта 2026 г.». Не подходит для машинной обработки.
Типичные сценарии: печать, имена файлов, номера
Дата в имени файла
В имени файла недопустимы двоеточия и некоторые другие символы, поэтому время форматируют через дефис или вообще опускают:
ИмяФайла = "Выгрузка_" + Формат(ТекущаяДата, "ДФ=yyyy-MM-dd") + ".xml";
// Выгрузка_2026-03-15.xml
ИмяФайла = "Отчет_" + Формат(ТекущаяДата, "ДФ='yyyyMMdd_HHmmss'") + ".xlsx";
// Отчет_20260315_143005.xlsx — удобно для сортировки по имени
Дата прописью для печатных форм
Для договоров и актов часто требуется вид ««15» марта 2026 г.». Его собирают из частей:
ДатаПрописью = "«" + Формат(ДатаДокумента, "ДФ=dd") + "» "
+ Формат(ДатаДокумента, "ДФ='MMMM yyyy'") + " г.";
// «15» марта 2026 г.
Для склонения месяца в родительном падеже платформа обычно выдаёт корректную форму через код MMMM, но если требуется строгое соответствие, проверьте результат на реальных данных — поведение зависит от встроенного языка конфигурации.
Проверка пустой даты
Перед форматированием полезно проверить, заполнена ли дата, особенно для необязательных реквизитов:
Если ЗначениеЗаполнено(ДатаОтгрузки) Тогда
СтрокаДаты = Формат(ДатаОтгрузки, "ДФ=dd.MM.yyyy");
Иначе
СтрокаДаты = "не указана";
КонецЕсли;
Обратное преобразование: строка в дату
Задача часто двусторонняя: выразили дату строкой, передали, а на приёмной стороне нужно получить дату обратно. Конструктор Дата("20260315") понимает только канонический вид ГГГГММДД (и ГГГГММДДЧЧММСС), поэтому для обмена лучше сразу использовать именно такой формат или ISO.
// Формирование строки, которую легко распарсить обратно:
СтрокаДляОбмена = Формат(ТекущаяДата, "ДФ=yyyyMMddHHmmss");
// На приёмной стороне:
ДатаНазад = Дата(СтрокаДляОбмена);
Для произвольных строк вида «15.03.2026» надёжного встроенного парсера нет — приходится разбирать строку вручную через СтрРазделить() и собирать дату из компонентов. Это ещё один аргумент в пользу машиночитаемых форматов при любой передаче данных между системами.
Как проверить результат
Строка соответствует заданному шаблону, например 15.03.2026
Появляется время 0:00:00, месяц заменён минутами или порядок день/месяц перепутан
Выводится заданный текст («не указана») или пустая строка
Видна строка 01.01.0001 0:00:00
На приёмной стороне дата восстанавливается без ошибок и совпадает с исходной
Ошибка преобразования или сдвиг даты на месяц из-за перепутанного порядка
Файл создаётся, имена сортируются по дате
Ошибка записи из-за недопустимых символов
Частые вопросы
Чем отличаются ДФ и ДЛФ в функции Формат()?
ДФ задаёт точный шаблон из кодов (dd.MM.yyyy) и выводит дату строго по нему. ДЛФ — это локальное представление: D — краткая дата, DD — полная с названием месяца, T — время. ДЛФ зависит от языка и региональных настроек, зато даёт читаемый вид для пользователя.
Как вывести только месяц и год?
Используйте форматную строку Формат(Дата, "ДФ='MM.yyyy'") для числового вида «03.2026» или Формат(Дата, "ДФ='MMMM yyyy'") для представления «март 2026». Лишние компоненты даты в шаблон просто не включаются.
Почему Формат() выводит дату не в том порядке, что я задал?
Чаще всего причина в том, что форматная строка передана с ошибкой: лишние пробелы, пропущенный префикс ДФ= или одинарные кавычки вокруг всего шаблона. Проверьте, что строка выглядит как "ДФ=dd.MM.yyyy", а коды месяца и минут написаны в правильном регистре.
Как преобразовать дату в строку в запросе 1С?
Прямого аналога Формат() в языке запросов нет. Функция ПРЕДСТАВЛЕНИЕ(Дата) возвращает строку, зависящую от настроек, и для примитивных типов применяется редко. Рекомендуемый путь — получить дату из запроса как есть и форматировать её в коде при обходе выборки.
Какой формат выбрать для выгрузки в Excel или текстовый файл?
Для файлов, которые будет читать человек, подойдёт ДФ=dd.MM.yyyy. Если файл будет обрабатываться другой программой или сортироваться по имени, используйте yyyy-MM-dd или yyyyMMdd — такой порядок корректно сортируется как текст и однозначно интерпретируется.
Можно ли вывести день недели строкой?
Да, через код в форматной строке либо отдельно: Формат(Дата, "ДЛФ=DD") в ряде локализаций включает день недели, а гарантированный способ — функция ДеньНедели(Дата) возвращает число от 1 до 7, по которому можно подставить название из соответствия.
Что важно запомнить
Для преобразования даты в строку в 1С используйте Формат() с явной форматной строкой: ДФ для точного шаблона, ДЛФ для локализованного вывода, ДП для пустых дат. Для обмена данными применяйте машиночитаемые форматы ISO или ГГГГММДД, которые легко распарсить обратно. Неявное преобразование через Строка() оставьте для отладки — оно зависит от региональных настроек.