Разработка и Конфигурация · 9 мин
Как вывести текущую дату в 1С: все рабочие способы
Способы вывести текущую дату в 1С: функции ТекущаяДата() и ТекущаяДатаСеанса(), форматирование через Формат(), вывод в отчёты, печатные формы и на форму.
Вывести текущую дату в 1С можно несколькими способами — выбор зависит от того, где именно нужна дата: в коде на встроенном языке, в запросе, в отчёте на СКД, в печатной форме или просто на экране для пользователя. Базовый инструмент — функции ТекущаяДата() (в новых версиях платформы — ТекущаяДатаСеанса()) и функция форматирования Формат().
Важно понимать разницу между датой сервера, датой клиента и датой сеанса: в клиент-серверном режиме они могут отличаться, и неправильный выбор функции приводит к расхождениям в документах и отчётах. Ниже разобраны все основные сценарии с примерами кода.
Функция ТекущаяДата() и ТекущаяДатаСеанса(): в чём разница
Функция ТекущаяДата() возвращает дату и время компьютера, на котором выполняется код. Если код работает на клиенте — это дата компьютера пользователя, если на сервере — дата сервера. В файловом режиме это обычно одно и то же, но в клиент-серверном варианте часы пользователя и сервера могут расходиться.
Функция ТекущаяДатаСеанса() возвращает дату сеанса, которая формируется на сервере с учётом часового пояса сеанса. Именно её рекомендуется использовать в прикладном коде: она гарантирует, что все пользователи информационной базы видят единообразное время независимо от настроек их компьютеров.
// Рекомендуемый вариант
ТекДата = ТекущаяДатаСеанса();
// Устаревший вариант, зависит от места выполнения кода
ТекДата = ТекущаяДата();
Обе функции возвращают значение типа Дата с точностью до секунды. Если нужна только дата без времени, используйте функцию НачалоДня(): она обнуляет время, что важно при сравнении дат в условиях.
Как вывести дату в нужном формате
По умолчанию при преобразовании даты в строку 1С выводит её в виде «01.03.2026 10:30:15». Для управления отображением служит функция Формат() со строкой форматной строки. Чаще всего используются предопределённые конструкции с параметром ДЛФ.
Сообщить(Формат(ТекущаяДатаСеанса(); "ДЛФ=D")); // 01.03.2026
Сообщить(Формат(ТекущаяДатаСеанса(); "ДЛФ=DD")); // 1 марта 2026 г.
Сообщить(Формат(ТекущаяДатаСеанса(); "ДЛФ=DT")); // 01.03.2026 10:30:15
Сообщить(Формат(ТекущаяДатаСеанса(); "ДЛФ=T")); // 10:30:15
Если нужен произвольный шаблон, используется параметр ДФ с описанием формата: д — день, М — месяц, г — год, ч — часы, м — минуты, с — секунды. Количество букв определяет число знаков.
// Результат: 2026-03-01 — удобно для имён файлов и обмена
СтрокаДаты = Формат(ТекущаяДатаСеанса(); "ДФ=гггг-ММ-дд");
// Результат: 01.03.2026_10-30 — пригодно для имени файла
СтрокаДаты = Формат(ТекущаяДатаСеанса(); "ДФ='dd.MM.yyyy_HH-mm'");
Для вывода даты прописью (например, «первое марта две тысячи двадцать пятого года») в типовых конфигурациях применяется функция РаботаСКурсамиВалют.СформироватьСуммуПрописью() и аналогичные механизмы, а также НСтр() с параметрами форматирования. В собственных разработках проще использовать Формат() с ДЛФ=DD — этого достаточно для большинства печатных форм.
Как получить текущую дату в запросе
В языке запросов 1С нет встроенной функции «текущая дата». Стандартный приём — передать дату в запрос как параметр из кода. Это надёжно и делает поведение запроса предсказуемым.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| РеализацияТоваровУслуг.Ссылка
|ИЗ
| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
|ГДЕ
| РеализацияТоваровУслуг.Дата >= &ТекущаяДата";
Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());
Если нужно сравнивать с датой без времени, передавайте НачалоДня(ТекущаяДатаСеанса()) или КонецДня(ТекущаяДатаСеанса()) — иначе документы за текущий день, проведённые раньше текущей секунды, могут попасть или не попасть в выборку неожиданным образом.
В схеме компоновки данных (СКД) параметр «ТекущаяДата» многие типовые отчёты заполняют автоматически. В собственном отчёте значение параметра можно задать через выражение на вкладке «Параметры» конструктора СКД, указав в поле «Выражение» значение &ТекущаяДата с заполнением в коде, либо через стандартную дату периода.
Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса()));Вывод текущей даты на форму и в сообщения
Для простого информирования пользователя используются Сообщить() или ПоказатьПредупреждение(). Оба метода принимают строку, поэтому дату предварительно форматируют.
Сообщить("Сегодня: " + Формат(ТекущаяДатаСеанса(); "ДЛФ=DD"));
Чтобы вывести дату на управляемую форму, добавьте реквизит формы типа «Дата» (или «Строка») и заполните его в обработчике ПриСозданииНаСервере. Если дата должна обновляться (например, часы на форме), используйте ПодключитьОбработчикОжидания() с разумным интервалом — не чаще одного раза в секунду, чтобы не нагружать клиентское приложение.
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
ДатаНаФорме = ТекущаяДатаСеанса();
КонецПроцедуры
Не вызывайте ТекущаяДата() в клиентском коде формы для служебных целей: дата компьютера пользователя может быть сбита, и логика, завязанная на неё, даст сбой. Для отображения это допустимо, для расчётов и проверок — нет.
Текущая дата в печатных формах и шаблонах
В макетах печатных форм дата выводится через параметр области. В коде формирования печатной формы параметру присваивается отформатированное значение:
ОбластьМакета.Параметры.ДатаПечати = Формат(ТекущаяДатаСеанса(); "ДЛФ=DD");
В макетах типа «Текстовый документ» и в шаблонах писем (например, в механизме учёта почты типовых конфигураций) текущая дата подставляется через те же параметры шаблона — в тексте макета указывается имя параметра в квадратных скобках, а значение заполняется кодом.
Если печатная форма формируется внешней обработкой, убедитесь, что дата берётся на сервере, а не на клиенте: обработки часто запускаются в файловом режиме, где разницы нет, но при переносе в клиент-серверную базу поведение изменится.
- 1Откройте макет и добавьте параметр, например [ДатаПечати], в нужную ячейку
- 2В коде формирования получите область макета и присвойте параметру Формат(ТекущаяДатаСеанса(); "ДЛФ=DD")
- 3Сформируйте табличный документ и проверьте результат на печати или в предпросмотре
- 4Убедитесь, что код выполняется в серверном контексте
Частые ошибки и как их проверить
Самая распространённая ошибка — сравнение дат с разным временем. Документ проведён в 14:20, а условие проверяет равенство с ТекущаяДатаСеанса() без приведения — совпадения не будет никогда. Решение: сравнивать НачалоДня() от обеих дат либо использовать диапазон от начала до конца дня.
Вторая типичная проблема — часовые пояса. Если база обслуживает пользователей в разных регионах, убедитесь, что у сеансов корректно установлен часовой пояс (параметр сеанса или настройка пользователя), иначе «текущая дата» у части пользователей будет вчерашней или завтрашней.
Третья ошибка — вывод даты в файл или строку обмена в региональном формате «дд.ММ.гггг». Внешние системы часто ожидают ISO-формат. Используйте явный шаблон ДФ=гггг-ММ-дд, чтобы формат не зависел от настроек операционной системы.
Как проверить результат
Дата отображается в ожидаемом формате, совпадает с датой сервера
Дата отличается от серверной — код выполняется на клиенте
В выборку попадают все документы текущего дня
Часть документов пропадает — сравнение идёт с точностью до секунды
В предпросмотре дата проставлена корректно
Пустое поле — параметр макета не заполнен в коде
FAQ
Как получить только дату без времени?
Используйте НачалоДня(ТекущаяДатаСеанса()) — время будет 00:00:00. Если нужна строка без времени, примените Формат(ТекущаяДатаСеанса(); "ДЛФ=D") — он выведет только дату в коротком формате.
Чем ТекущаяДатаСеанса() лучше ТекущаяДата()?
ТекущаяДатаСеанса() всегда формируется на сервере с учётом часового пояса сеанса, поэтому все пользователи базы получают согласованное время. ТекущаяДата() зависит от того, где выполняется код, и может различаться между клиентом и сервером.
Как вывести дату словами, например «1 марта 2026 г.»?
Используйте Формат(ТекущаяДатаСеанса(); "ДЛФ=DD"). Названия месяца и года подставляются автоматически с учётом языка, заданного в коде или региональных настройках сеанса.
Можно ли получить текущую дату прямо в запросе без параметра?
Штатной функции «текущая дата» в языке запросов нет. Стандартный подход — передать значение через УстановитьПараметр(). В отчётах на СКД параметр может заполняться выражением или кодом формы отчёта.
Почему в цикле ТекущаяДатаСеанса() возвращает одно и то же значение?
Это нормально: между итерациями цикла проходят доли секунды, а функция возвращает время с точностью до секунды. Если нужны уникальные метки внутри цикла, добавьте счётчик или используйте УниверсальноеВремя() вместе с порядковым номером.
Как вывести дату в формате для имени файла?
Примените явный шаблон без запрещённых для файлов символов: Формат(ТекущаяДатаСеанса(); "ДФ=гггг-ММ-дд_чч-мм-сс"). Двоеточия в имени файла недопустимы в Windows, поэтому их заменяют дефисами.
Что важно запомнить
Используйте ТекущаяДатаСеанса() в серверном коде, форматируйте вывод через Формат() с ДЛФ или ДФ, в запросы передавайте дату параметром, а перед сравнением дат приводите их к началу дня.