Преобразование даты в строковый формат — одна из самых частых задач при работе с 1С:Предприятие 8.3. Без этого не обойтись при формировании отчетов, экспорте данных, интеграции с внешними системами или даже при банальном выводе даты пользователю в удобочитаемом виде. Казалось бы, что может быть проще? Но в есть целых 5 различных способов конвертировать дату в строку, каждый из которых имеет свои нюансы, преимущества и подводные камни.

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

1. Стандартная функция Формат() — базовый инструмент

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

Примеры использования:

// Базовый формат (по умолчанию для текущей локали)

Результат = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy");

// С временем

Результат = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy; ВФ=ЧЧ:мм:сс");

// Только месяц и год

Результат = Формат(ТекущаяДата(), "ДФ=MMMM yyyy"); // "июнь 2026"

  • 📅 Д — день без ведущего нуля (1-31)
  • 📅 дд — день с ведущим нулем (01-31)
  • 📅 М — месяц без нуля (1-12), ММ — с нулем (01-12)
  • 📅 ММММ — полное название месяца ("январь")
  • 📅 г — короткий год (24), гггг — полный (2026)
⚠️ Внимание: Если передать в функцию Формат() пустую дату (Дата(1,1,1)), результат будет пустой строкой. Это может привести к ошибкам при конкатенации строк!
📊 Какой формат даты вы чаще используете в отчетах?
ДД.ММ.ГГГГ
ММММ ГГГГ
ДД МММ ГГГГ
ISO (ГГГГ-ММ-ДД)
Другой

2. Функция Строка() — простой, но опасный метод

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

Примеры:

// На русскоязычной системе

Результат = Строка(Дата(2026, 6, 15)); // "15.06.2026"

// На англоязычной системе

Результат = Строка(Дата(2026, 6, 15)); // "6/15/2026"

Когда использовать Строка():

  • ✅ Для внутреннего логгирования (где формат не важен)
  • ✅ При выводе даты пользователю в его локальном формате
  • Никогда для интеграций с внешними системами
  • Никогда при сохранении в базу данных
💡

Если вам нужно гарантированно получить дату в формате ISO (YYYY-MM-DD) для API, используйте комбинацию: Формат(Дата, "ДФ=гггг-ММ-дд"). Этот формат понимают все современные системы.

3. Метод ПредставлениеДата() — для пользовательского вывода

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

Особенности метода:

  • 🔹 Автоматически подставляет разделители согласно локали
  • 🔹 Может выводить месяц прописью (Формат = 1)
  • 🔹 Поддерживает сокращенные форматы (Формат = 2 — "15 июн")
  • 🔹 Умеет обрабатывать пустые даты (возвращает пустую строку)
// Полный формат с месяцем прописью

Результат = ПредставлениеДата(ТекущаяДата(), 1); // "15 июня 2026 года"

// Краткий формат

Результат = ПредставлениеДата(ТекущаяДата(), 2); // "15 июн. 2026"

Параметр "Формат" Пример вывода Описание
0 или не указан "15.06.2026" Краткий цифровой формат
1 "15 июня 2026 года" Полный формат с месяцем прописью
2 "15 июн. 2026" Сокращенный формат
3 "июнь 2026" Только месяц и год

4. Работа с временными метками: дата + время

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

// Дата + время через разделитель

Результат = Формат(ТекущаяДата(), "ДФ=dd.MM.yyyy; ДР=' '; ВФ=ЧЧ:мм:сс");

// Только время

Результат = Формат(ТекущаяДата(), "ВФ=ЧЧ:мм"); // "14:30"

Особенности форматирования времени:

  • 🕒 ЧЧ — часы (00-23)
  • 🕒 мм — минуты (00-59)
  • 🕒 сс — секунды (00-59)
  • 🕒 т — миллисекунды (0-999)
⚠️ Внимание: При работе с временными зонами помните, что по умолчанию использует локальное время сервера. Если вам нужно UTC, используйте метод УниверсальноеВремя() перед форматированием.
Как вывести дату в формате Excel?

Используйте функцию Формат(Дата, "ДФ=dd.MM.yyyy; ДР=' '; ВФ=ЧЧ:мм:сс") и затем замените разделители на нужные. Для Excel подойдет формат "дд/ММ/гггг ЧЧ:мм".

5. Продвинутые техники: кастомные функции и обработка ошибок

Иногда стандартных методов недостаточно. Например, когда нужно:

  • 🔧 Выводить дату в нестандартном формате (например, "15 июня, суббота")
  • 🔧 Обрабатывать пустые даты особым образом
  • 🔧 Добавлять префиксы/суффиксы ("Срок до: 15.06.2026")

В таких случаях пишут собственные функции. Пример универсальной функции с обработкой ошибок:

Функция ДатаВСтроку(ЗначениеДата, ФорматСтроки = "dd.MM.yyyy", Разделитель = ".", ПустаяДатаКак = "")

Если ЗначениеДата = Дата(1,1,1) Тогда

Возврат ПустаяДатаКак;

КонецЕсли;

Попытка

Результат = Формат(ЗначениеДата, "ДФ=" + ФорматСтроки + "; ДР='" + Разделитель + "'");

Возврат Результат;

Исключение

Возврат "#ОШИБКА_FORMAT#";

КонецПопытки;

КонецФункции

Преимущества такого подхода:

  • ✔ Гибкая настройка разделителей
  • ✔ Контролируемая обработка пустых дат
  • ✔ Защита от ошибок форматирования
  • ✔ Легко модифицировать под новые требования

Учтена ли локализация?|Обработаны ли пустые даты?|Есть ли защита от некорректных форматов?|Протестировано ли на граничных значениях?-->

6. Особенности для отчетов и СКД

В системе компоновки данных (СКД) форматирование дат имеет свои нюансы. Здесь нельзя просто так вызвать Формат() — нужно либо настраивать пользовательские поля, либо использовать выражения в схеме компоновки.

Пример настройки в СКД:

  1. Откройте схему компоновки данных
  2. Перейдите на закладку "Параметры"
  3. Добавьте новый параметр типа "Строка"
  4. В выражении укажите: Формат(Документ.Дата, "ДФ=dd.MM.yyyy")
  5. Используйте этот параметр в выводе отчета

Для динамического форматирования в отчетах можно использовать условное оформление:

// В модуле отчета

Процедура ПриКомпоновкеРезультата(ДанныеРасшифровки, ДанныеОбъекта, ПараметрыФорматирования)

Если ДанныеОбъекта.Дата < ТекущаяДата() Тогда

ПараметрыФорматирования.ЦветТекста = ВебЦвета.Красный;

ПараметрыФорматирования.Текст = Формат(ДанныеОбъекта.Дата, "ДФ=dd.MM.yyyy") + " (просрочено)";

КонецЕсли;

КонецПроцедуры

⚠️ Внимание: В отчетах СКД форматирование дат на уровне схемы компоновки работает быстрее, чем программная обработка в модуле. Используйте программный код только когда нужно динамическое изменение формата.
💡

Для отчетов всегда предпочитайте настройку формата на уровне СКД — это значительно ускоряет выполнение по сравнению с программной обработкой каждого поля.

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

Даже опытные разработчики иногда допускают ошибки при работе с датами. Вот самые распространенные:

Ошибка Причина Как избежать
Некорректный разделитель Использование Строка() без учета локали Всегда используйте Формат() с явным указанием разделителя
Пустые даты в строках Конкатенация с Дата(1,1,1) дает "01.01.0001" Проверяйте дату на пустоту перед преобразованием
Ошибки при интеграции Передача даты в строковом виде во внешние системы Используйте ISO-формат гггг-ММ-дд для API
Производительность в отчетах Форматирование каждой строки в модуле Настраивайте формат на уровне СКД

Еще одна распространенная проблема — несоответствие форматов при обмене данными. Например, если вы получаете дату из Excel в формате "DD/MM/YYYY", а затем пытаетесь преобразовать ее в дату 1С без проверки, может возникнуть путаница с днем и месяцем.

Решение — всегда валидируйте входящие строковые даты:

Функция СтрокаВДату(СтрокаДата, ФорматСтроки = "dd.MM.yyyy")

Попытка

Возврат Формат(СтрокаДата, ФорматСтроки);

Исключение

// Попробуем альтернативные форматы

Попытка

Возврат Формат(СтрокаДата, "MM.dd.yyyy");

Исключение

Возврат Неопределено;

КонецПопытки;

КонецПопытки;

КонецФункции

Сравнительная таблица всех методов

Метод Преимущества Недостатки Рекомендации по использованию
Формат() Максимальная гибкость, кроссплатформенность Длинный синтаксис для сложных форматов Универсальное решение для большинства задач
Строка() Краткость, автоматически учитывает локаль Непредсказуемый результат на разных системах Только для внутреннего использования
ПредставлениеДата() Учитывает пользовательские настройки, поддерживает прописные месяцы Ограниченные возможности кастомизации Для вывода пользователю в интерфейсе
Кастомные функции Полный контроль, обработка ошибок Требует дополнительного кода Для сложной логики и интеграций
Форматирование в СКД Высокая производительность в отчетах Ограниченные возможности динамического изменения Для отчетов и больших выборок

FAQ: Частые вопросы по преобразованию дат в строки

Как вывести дату в формате "15 июня 2026 года" с учетом склонения?

Используйте функцию ПредставлениеДата() с параметром 1:

Результат = ПредставлениеДата(ТекущаяДата(), 1);

Для кастомного вывода с правильным склонением ("1 день", "2 дня", "5 дней") потребуется написать отдельную функцию с использованием ЧислоПрописью().

Почему функция Формат() возвращает ошибку при преобразовании строки в дату?

Скорее всего, формат строки не соответствует шаблону. Например, вы пытаетесь преобразовать "15/06/2026" с шаблоном "dd.MM.yyyy". Всегда проверяйте:

  1. Совпадают ли разделители (точка, слеш, тире)
  2. Корректно ли указан порядок дня/месяца
  3. Нет ли лишних символов (пробелов, букв)

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

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

Для JSON рекомендуется использовать формат ISO 8601:

Результат = Формат(Дата, "ДФ=гггг-ММ-ддТЧЧ:мм:сс");  // "2026-06-15T14:30:00"

Если нужно только дату без времени:

Результат = Формат(Дата, "ДФ=гггг-ММ-дд");  // "2026-06-15"
Можно ли получить название дня недели?

Да, для этого используйте комбинацию функций:

ДеньНедели = Формат(ТекущаяДата(), "ДН=Полное");  // "понедельник"

КраткийДень = Формат(ТекущаяДата(), "ДН=Сокращенное"); // "пн"

Для вывода типа "15 июня, суббота":

Результат = Формат(ТекущаяДата(), "ДФ=dd MMMM") + ", " + Формат(ТекущаяДата(), "ДН=Полное");
Как обработать ситуацию, когда дата может быть пустой?

Всегда проверяйте дату перед преобразованием:

Функция БезопаснаяДатаВСтроку(Дата, Формат = "dd.MM.yyyy", ПустаяКак = "")

Если Дата = Дата(1,1,1) Тогда

Возврат ПустаяКак;

Иначе

Возврат Формат(Дата, "ДФ=" + Формат);

КонецЕсли;

КонецФункции

Использование:

Результат = БезопаснаяДатаВСтроку(Документ.ДатаДоставки, , "не указана");