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

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

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

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

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

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

Ниже разобраны основные способы: получение текущей даты, форматирование через Формат(), вывод в сообщениях и на форме, работа с датами в запросах и печатных формах, а также типичные ошибки, из-за которых дата отображается не так, как задумано.

Получение текущей даты: ТекущаяДата и ТекущаяДатаСеанса

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

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

Пример простейшего вывода текущей даты в сообщение:

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

Сообщить("Сейчас: " + ТекДата);

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

Форматирование даты функцией Формат()

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

Параметр ДЛФ задаёт предопределённые варианты: D — только дата, DD — длинная дата (с названием месяца и дня недели), DT — дата и время, T — только время. Параметр ДФ позволяет собрать произвольный шаблон из элементов: дд — день, ММ — месяц цифрой, ММММ — название месяца, гггг — год четырьмя цифрами, ЧЧ, мм, сс — часы, минуты, секунды.

Примеры:

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

Сообщить(Формат(ДатаДок, "ДЛФ=D")); // 15.03.2026

Сообщить(Формат(ДатаДок, "ДЛФ=DD")); // 15 марта 2026 г.

Сообщить(Формат(ДатаДок, "ДЛФ=DT")); // 15.03.2026 10:30:00

Сообщить(Формат(ДатаДок, "ДФ=yyyy-MM-dd")); // 2026-03-15

Сообщить(Формат(ДатаДок, "ДФ='дд ММММ гггг'")); // 15 марта 2026

Шаблон yyyy-MM-dd особенно полезен при обмене данными с внешними системами: это общепринятый машиночитаемый вид, который не зависит от региональных настроек. Для вывода пользователю лучше подходят варианты ДЛФ=D и ДЛФ=DD, так как они учитывают локаль информационной базы.

Вывод даты в сообщениях и строковых шаблонах

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

Сообщение = Новый СообщениеПользователю;

Сообщение.Текст = СтрШаблон("Документ проведён %1",

Формат(ТекущаяДатаСеанса(), "ДЛФ=DT"));

Сообщение.Сообщить();

Функция СтрШаблон() подставляет значения вместо меток %1, %2 и так далее. Это удобнее, чем конкатенация, когда в строке несколько значений, и упрощает локализацию текста. Внутрь шаблона также можно передавать дату напрямую — она будет преобразована автоматически, но снова без контроля формата.

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

1c
Сообщить(СтрШаблон("Отчёт сформирован %1", Формат(ТекущаяДатаСеанса(), "ДЛФ=DT")));

Вывод даты в отчётах и печатных формах

В печатных формах, построенных на табличном документе, дата выводится через параметры макета. В макете в ячейке указывается параметр, например [ДатаДокумента], а в коде он заполняется методом Параметры.ДатаДокумента = Формат(Док.Дата, "ДЛФ=DD"). Если параметр объявлен как «шаблон» (квадратные скобки внутри текста ячейки), значение подставится прямо в текст.

В отчётах на СКД (системе компоновки данных) дату обычно не форматируют в коде вовсе: поле типа «Дата» выводится в формате, заданном в настройках поля на закладке «Наборы данных» или в пользовательских настройках отчёта. Если нужен нестандартный вид, формат задаётся в свойстве «Оформление» поля — параметр «Формат».

Для типовой подписи вида «от 15 марта 2026 г.» в печатной форме удобно заранее подготовить строку:

Область.Параметры.ДатаПрописью =

Формат(Документ.Дата, "ДЛФ=DD");

Учтите, что ДЛФ=DD сам добавляет «г.» после года в русской локали. Если шаблон печатной формы уже содержит это обозначение, получится дублирование — проверяйте итоговый текст на реальных данных.

Даты в запросах и представление даты в выборках

В языке запросов 1С нельзя вызвать функцию Формат() — запрос возвращает дату как значение типа «Дата», а форматирование выполняется уже после получения выборки, в коде или в настройках отчёта. Это частое заблуждение у начинающих: попытка «отформатировать дату в запросе» приведёт к ошибке синтаксиса.

В запросе доступны функции извлечения частей даты: ГОД(), МЕСЯЦ(), ДЕНЬ(), ЧАС(), МИНУТА(), СЕКУНДА(), а также НАЧАЛОПЕРИОДА() и КОНЕЦПЕРИОДА() для приведения даты к границам дня, месяца и других периодов. Если нужно вывести, например, только месяц и год, можно выбрать их числами, а строку собрать в коде обхода выборки:

ВЫБРАТЬ

МЕСЯЦ(Продажи.Период) КАК Месяц,

ГОД(Продажи.Период) КАК Год

ИЗ РегистрНакопления.Продажи КАК Продажи

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

Типичные ошибки при выводе даты

Самая распространённая проблема — вывод пустой даты. Значение «пустая дата» в 1С — это '00010101', и при форматировании она превращается в строку вида «01.01.0001», которая выглядит в документах как мусор. Перед выводом проверяйте заполненность функцией ЗначениеЗаполнено() и при необходимости выводите пустую строку или прочерк.

Вторая частая ошибка — смешение даты и времени. Тип «Дата» в 1С всегда содержит время с точностью до секунды. Если вы сравниваете даты без учёта времени или выводите «дату без нулевого времени», используйте НачалоДня() и формат ДЛФ=D, иначе в строку попадут нежелательные «0:00:00».

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

Типичные ошибки
01
Вывод пустой даты без проверки — в печатной форме появляется 01.01.0001
02
Конкатенация даты со строкой без Формат() — вид результата зависит от региональных настроек
03
Попытка отформатировать дату прямо в запросе — синтаксическая ошибка, форматирование делается после выборки
04
Игнорирование времени в типе Дата — в строку выводятся лишние 0:00:00

Как проверить результат и выбрать подходящий способ

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

Выбор способа зависит от места вывода. Для сообщений и логов — Формат() с ДЛФ=DT. Для печатных форм — параметры макета с ДЛФ=DD или ДЛФ=D. Для обмена с внешними системами — фиксированный шаблон ДФ=yyyy-MM-dd (при необходимости с временем). Для отчётов на СКД — настройка формата в свойствах поля без изменения кода.

Маршрут решения

Как выбрать способ вывода

Нужно показать дату пользователю в сообщенииИспользуйте Сообщить() вместе с Формат(Дата, "ДЛФ=D") или ДЛФ=DT
Дата выводится в печатную формуЗаполните параметр макета значением Формат(Дата, "ДЛФ=DD") и проверьте на пустой дате
Дата передаётся во внешнюю системуПримените Формат(Дата, "ДФ=yyyy-MM-dd") — формат не зависит от локали
Дата выводится в отчёте на СКДЗадайте формат в свойствах поля отчёта, не изменяя запрос
Итог

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

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

Частые вопросы

Как вывести дату без времени?

Используйте Формат(Дата, "ДЛФ=D") — будет выведена только календарная часть, например 15.03.2026. Если нужен вид «15 марта 2026 г.», примените ДЛФ=DD. Само значение при этом обрезать не обязательно, но для сравнений дат без времени используйте НачалоДня(Дата).

Как вывести дату прописью, например «15 марта 2026 г.»?

Для этого достаточно формата Формат(Дата, "ДЛФ=DD") — он выводит день, название месяца и год с учётом локали базы. Если нужен полностью произвольный вид с собственным текстом, соберите шаблон через ДФ, например ДФ='дд ММММ гггг'.

Почему вместо даты выводится 01.01.0001?

Это признак пустой даты: переменная или реквизит не заполнены. Перед выводом проверяйте значение функцией ЗначениеЗаполнено() и для пустой даты выводите пустую строку, прочерк или осмысленный текст вроде «дата не указана».

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

Нет, в языке запросов функции Формат() нет. Запрос возвращает значение типа «Дата», а строковое представление формируется после выборки — в коде обхода результата или в настройках оформления полей отчёта на СКД. В самом запросе доступны только функции извлечения частей даты: ГОД(), МЕСЯЦ(), ДЕНЬ() и другие.

Чем ТекущаяДата() отличается от ТекущаяДатаСеанса()?

ТекущаяДата() возвращает время того компьютера, где выполняется код, поэтому на клиенте и сервере значения могут различаться. ТекущаяДатаСеанса() возвращает единое время сеанса с учётом часового пояса базы и работает только на сервере. Для дат документов и проверок сроков используйте ТекущаяДатаСеанса(), чтобы все пользователи опирались на один источник времени.

Как вывести дату в формате для обмена с другой программой?

Задайте явный шаблон, не зависящий от региональных настроек: Формат(Дата, "ДФ=yyyy-MM-dd") для даты или ДФ='yyyy-MM-dd HH:mm:ss' для даты со временем. Такой вид одинаково читается на любой системе и подходит для файлов обмена, веб-сервисов и интеграций.