Разработка и Конфигурация · 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 и так далее. Это удобнее, чем конкатенация, когда в строке несколько значений, и упрощает локализацию текста. Внутрь шаблона также можно передавать дату напрямую — она будет преобразована автоматически, но снова без контроля формата.
Для вывода даты в элемент управления на форме (надпись, поле) обычно достаточно присвоить значение реквизиту формы соответствующего типа. Если реквизит имеет тип «Дата», платформа сама отобразит его в формате, заданном в свойствах поля. Если реквизит строковый — сначала примените Формат().
Сообщить(СтрШаблон("Отчёт сформирован %1", Формат(ТекущаяДатаСеанса(), "ДЛФ=DT")));Вывод даты в отчётах и печатных формах
В печатных формах, построенных на табличном документе, дата выводится через параметры макета. В макете в ячейке указывается параметр, например [ДатаДокумента], а в коде он заполняется методом Параметры.ДатаДокумента = Формат(Док.Дата, "ДЛФ=DD"). Если параметр объявлен как «шаблон» (квадратные скобки внутри текста ячейки), значение подставится прямо в текст.
В отчётах на СКД (системе компоновки данных) дату обычно не форматируют в коде вовсе: поле типа «Дата» выводится в формате, заданном в настройках поля на закладке «Наборы данных» или в пользовательских настройках отчёта. Если нужен нестандартный вид, формат задаётся в свойстве «Оформление» поля — параметр «Формат».
Для типовой подписи вида «от 15 марта 2026 г.» в печатной форме удобно заранее подготовить строку:
Область.Параметры.ДатаПрописью =
Формат(Документ.Дата, "ДЛФ=DD");
Учтите, что ДЛФ=DD сам добавляет «г.» после года в русской локали. Если шаблон печатной формы уже содержит это обозначение, получится дублирование — проверяйте итоговый текст на реальных данных.
Даты в запросах и представление даты в выборках
В языке запросов 1С нельзя вызвать функцию Формат() — запрос возвращает дату как значение типа «Дата», а форматирование выполняется уже после получения выборки, в коде или в настройках отчёта. Это частое заблуждение у начинающих: попытка «отформатировать дату в запросе» приведёт к ошибке синтаксиса.
В запросе доступны функции извлечения частей даты: ГОД(), МЕСЯЦ(), ДЕНЬ(), ЧАС(), МИНУТА(), СЕКУНДА(), а также НАЧАЛОПЕРИОДА() и КОНЕЦПЕРИОДА() для приведения даты к границам дня, месяца и других периодов. Если нужно вывести, например, только месяц и год, можно выбрать их числами, а строку собрать в коде обхода выборки:
ВЫБРАТЬ
МЕСЯЦ(Продажи.Период) КАК Месяц,
ГОД(Продажи.Период) КАК Год
ИЗ РегистрНакопления.Продажи КАК Продажи
Для представления периода словами в отчётах на СКД правильнее использовать стандартные возможности оформления полей, а не ручную сборку строк — так отчёт останется настраиваемым пользователем.
Типичные ошибки при выводе даты
Самая распространённая проблема — вывод пустой даты. Значение «пустая дата» в 1С — это '00010101', и при форматировании она превращается в строку вида «01.01.0001», которая выглядит в документах как мусор. Перед выводом проверяйте заполненность функцией ЗначениеЗаполнено() и при необходимости выводите пустую строку или прочерк.
Вторая частая ошибка — смешение даты и времени. Тип «Дата» в 1С всегда содержит время с точностью до секунды. Если вы сравниваете даты без учёта времени или выводите «дату без нулевого времени», используйте НачалоДня() и формат ДЛФ=D, иначе в строку попадут нежелательные «0:00:00».
Третья группа ошибок связана с региональными настройками: код, написанный и проверенный на одном компьютере, на другом выводит дату в ином порядке (день/месяц или месяц/день). Лечится это только явным указанием шаблона в Формат() во всех местах, где формат важен для логики или обмена.
Как проверить результат и выбрать подходящий способ
После внесения изменений проверьте вывод даты в трёх состояниях: обычная заполненная дата, пустая дата и дата с ненулевым временем. Убедитесь, что во всех трёх случаях строка выглядит осмысленно и не ломает верстку печатной формы или отчёта.
Выбор способа зависит от места вывода. Для сообщений и логов — Формат() с ДЛФ=DT. Для печатных форм — параметры макета с ДЛФ=DD или ДЛФ=D. Для обмена с внешними системами — фиксированный шаблон ДФ=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' для даты со временем. Такой вид одинаково читается на любой системе и подходит для файлов обмена, веб-сервисов и интеграций.