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

Разработка и Конфигурация · 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С нет встроенной функции «текущая дата». Стандартный приём — передать дату в запрос как параметр из кода. Это надёжно и делает поведение запроса предсказуемым.

Запрос = Новый Запрос;

Запрос.Текст =

"ВЫБРАТЬ

| РеализацияТоваровУслуг.Ссылка

|ИЗ

| Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг

|ГДЕ

| РеализацияТоваровУслуг.Дата >= &ТекущаяДата";

Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса());

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

В схеме компоновки данных (СКД) параметр «ТекущаяДата» многие типовые отчёты заполняют автоматически. В собственном отчёте значение параметра можно задать через выражение на вкладке «Параметры» конструктора СКД, указав в поле «Выражение» значение &ТекущаяДата с заполнением в коде, либо через стандартную дату периода.

bsl
Запрос.УстановитьПараметр("ТекущаяДата", НачалоДня(ТекущаяДатаСеанса()));

Вывод текущей даты на форму и в сообщения

Для простого информирования пользователя используются Сообщить() или ПоказатьПредупреждение(). Оба метода принимают строку, поэтому дату предварительно форматируют.

Сообщить("Сегодня: " + Формат(ТекущаяДатаСеанса(); "ДЛФ=DD"));

Чтобы вывести дату на управляемую форму, добавьте реквизит формы типа «Дата» (или «Строка») и заполните его в обработчике ПриСозданииНаСервере. Если дата должна обновляться (например, часы на форме), используйте ПодключитьОбработчикОжидания() с разумным интервалом — не чаще одного раза в секунду, чтобы не нагружать клиентское приложение.

&НаСервере

Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

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

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

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

Текущая дата в печатных формах и шаблонах

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

ОбластьМакета.Параметры.ДатаПечати = Формат(ТекущаяДатаСеанса(); "ДЛФ=DD");

В макетах типа «Текстовый документ» и в шаблонах писем (например, в механизме учёта почты типовых конфигураций) текущая дата подставляется через те же параметры шаблона — в тексте макета указывается имя параметра в квадратных скобках, а значение заполняется кодом.

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

Порядок действий для вывода даты в печатную форму
  1. 1
    Откройте макет и добавьте параметр, например [ДатаПечати], в нужную ячейку
  2. 2
    В коде формирования получите область макета и присвойте параметру Формат(ТекущаяДатаСеанса(); "ДЛФ=DD")
  3. 3
    Сформируйте табличный документ и проверьте результат на печати или в предпросмотре
  4. 4
    Убедитесь, что код выполняется в серверном контексте

Частые ошибки и как их проверить

Самая распространённая ошибка — сравнение дат с разным временем. Документ проведён в 14:20, а условие проверяет равенство с ТекущаяДатаСеанса() без приведения — совпадения не будет никогда. Решение: сравнивать НачалоДня() от обеих дат либо использовать диапазон от начала до конца дня.

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

Третья ошибка — вывод даты в файл или строку обмена в региональном формате «дд.ММ.гггг». Внешние системы часто ожидают ISO-формат. Используйте явный шаблон ДФ=гггг-ММ-дд, чтобы формат не зависел от настроек операционной системы.

Типичные ошибки
01
Сравнение дат с временем через «=» без НачалоДня() — условие никогда не срабатывает
02
Использование ТекущаяДата() на клиенте для служебных проверок — логика ломается при сбитых часах пользователя
03
Передача даты в обмен в формате по умолчанию — внешняя система не распознаёт строку
04
Игнорирование часовых поясов сеансов — у филиалов «сегодня» наступает в разное время
Контрольные точки

Как проверить результат

Вывод даты в сообщении
Норма

Дата отображается в ожидаемом формате, совпадает с датой сервера

Тревожный признак

Дата отличается от серверной — код выполняется на клиенте

Отбор документов за сегодня
Норма

В выборку попадают все документы текущего дня

Тревожный признак

Часть документов пропадает — сравнение идёт с точностью до секунды

Печатная форма
Норма

В предпросмотре дата проставлена корректно

Тревожный признак

Пустое поле — параметр макета не заполнен в коде

FAQ

Как получить только дату без времени?

Используйте НачалоДня(ТекущаяДатаСеанса()) — время будет 00:00:00. Если нужна строка без времени, примените Формат(ТекущаяДатаСеанса(); "ДЛФ=D") — он выведет только дату в коротком формате.

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

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

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

Используйте Формат(ТекущаяДатаСеанса(); "ДЛФ=DD"). Названия месяца и года подставляются автоматически с учётом языка, заданного в коде или региональных настройках сеанса.

Можно ли получить текущую дату прямо в запросе без параметра?

Штатной функции «текущая дата» в языке запросов нет. Стандартный подход — передать значение через УстановитьПараметр(). В отчётах на СКД параметр может заполняться выражением или кодом формы отчёта.

Почему в цикле ТекущаяДатаСеанса() возвращает одно и то же значение?

Это нормально: между итерациями цикла проходят доли секунды, а функция возвращает время с точностью до секунды. Если нужны уникальные метки внутри цикла, добавьте счётчик или используйте УниверсальноеВремя() вместе с порядковым номером.

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

Примените явный шаблон без запрещённых для файлов символов: Формат(ТекущаяДатаСеанса(); "ДФ=гггг-ММ-дд_чч-мм-сс"). Двоеточия в имени файла недопустимы в Windows, поэтому их заменяют дефисами.

Итог

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

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