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

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

Как узнать текущую дату в 1С

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

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

Ключевой нюанс, который часто упускают: в клиент-серверном режиме «текущая дата» на компьютере пользователя и на сервере 1С может различаться. Если игнорировать это различие, документы начинают создаваться «завтрашним» или «вчерашним» числом, а регламентные задания срабатывают не в то время.

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

Где в интерфейсе 1С видна текущая дата

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

Во многих конфигурациях текущая дата также выводится в заголовке окна программы, на начальной странице или в панели информации. В типовых решениях есть команда «Сервис → Параметры», где отображается рабочая дата сеанса и часовой пояс.

Для журналов документов полезно помнить: список по умолчанию часто отфильтрован по периоду, и «пустой» журнал не всегда означает отсутствие документов — иногда просто текущая дата ушла вперёд, а документы остались в прошлом периоде.

Функция ТекущаяДата(): базовый способ в коде

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

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

Сообщить(ДатаСейчас); // например: 15.03.2026 10:25:41

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

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

bsl
ДатаСеанса = ТекущаяДатаСеанса();
НачалоСегодня = НачалоДня(ДатаСеанса);
КонецСегодня = КонецДня(ДатаСеанса);

ТекущаяДатаСеанса(): почему её рекомендуют

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

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

Часовой пояс сеанса при необходимости задаётся программно командой УстановитьЧасовойПоясСеанса() или через параметры информационной базы. Проверить действующий пояс можно функцией ПолучитьЧасовойПоясСеанса().

Сравнение вариантов

ТекущаяДата()

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

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

Рекомендуется для учётных операций: документы, регистры, проверка сроков. Учитывает часовой пояс сеанса и единое серверное время. Ограничение: доступна только в контексте сеанса, в внешних компонентах недоступна.

РабочаяДата (параметры сеанса)

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

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

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

Если дата в программе систематически отличается от реальной, проверьте три места: системные часы и часовой пояс Windows на компьютере пользователя, время на сервере 1С и СУБД (в клиент-серверном варианте) и настройку часового пояса информационной базы в консоли кластера.

В некоторых конфигурациях (например, при работе кассовых смен) существует понятие рабочей даты, которая фиксируется при открытии смены. Закрытие смены переводит рабочую дату на следующий день — это нормальное поведение, а не ошибка.

Как проверить и исправить дату сеанса
  1. 1
    Откройте новый документ и посмотрите дату в поле «Дата» — так видна дата сеанса.
  2. 2
    Сверьте её с системными часами компьютера и реальным временем.
  3. 3
    При расхождении в клиент-серверной базе проверьте время на сервере 1С и сервере СУБД.
  4. 4
    Проверьте часовой пояс информационной базы в консоли кластера серверов.
  5. 5
    В коде замените ТекущаяДата() на ТекущаяДатаСеанса() в серверных процедурах.
  6. 6
    Перезапустите сеанс и убедитесь, что новые документы создаются с правильной датой.

Типичные ошибки при работе с текущей датой

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

Вторая ошибка — сравнение дат с точностью до секунды там, где нужно сравнивать дни. Выражение ДатаДокумента = ТекущаяДатаСеанса() почти никогда не будет истинным, потому что время отличается на секунды. Правильно сравнивать через НачалоДня() обеих дат.

Третья группа проблем связана с границами суток: документ, созданный в 23:59:59 и проведённый в 00:00:01, формально попадает в разные дни. Если логика завязана на «сегодня», учитывайте это в алгоритмах, работающих круглосуточно.

Типичные ошибки
01
Использовать ТекущаяДата() в серверных процедурах — документы получают время сервера, а не сеанса пользователя.
02
Сравнивать даты напрямую на равенство — секунды почти всегда различаются, условие не срабатывает.
03
Исправлять дату переводом часов Windows вместо настройки часового пояса сеанса — ломается время других программ и протоколов.
04
Хранить «текущую дату» в переменной долгоживущего фонового задания — значение устаревает, пока задание работает.

Проверка результата и контрольные точки

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

В клиент-серверной базе дополнительно сверьте время сервера приложений и сервера СУБД: расхождение более чем на несколько минут приводит к ошибкам блокировок и странностям в журналах регистрации.

Контрольные точки

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

Дата нового документа
Норма

Совпадает с календарной датой и временем пользователя

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

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

ТекущаяДатаСеанса() в отладчике
Норма

Возвращает время в поясе пользователя

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

Возвращает время другого пояса — настройте часовой пояс ИБ или сеанса

Время сервера 1С и СУБД
Норма

Расхождение не более нескольких минут

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

Заметное расхождение — настройте синхронизацию времени (NTP)

FAQ: частые вопросы о текущей дате в 1С

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

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

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

Используйте конструкцию НачалоДня(ТекущаяДатаСеанса()) — она вернёт текущую дату со временем 00:00:00. Для конца дня применяется КонецДня() со временем 23:59:59.

Почему у разных пользователей «сегодня» разное?

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

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

Да: откройте любой новый документ — поле «Дата» заполнится текущей датой сеанса автоматически. Также дату видно в системных часах Windows, но в клиент-серверной базе ориентироваться нужно именно на дату сеанса.

Что делать, если документы создаются «завтрашним» числом?

Проверьте часовой пояс сеанса и информационной базы, затем время на сервере 1С и СУБД. Чаще всего смещение на сутки возникает из-за неправильного пояса, а не из-за сбоя часов.

Как в запросе сравнить дату документа с текущей?

Передайте текущую дату в запрос параметром: Запрос.УстановитьПараметр("ТекущаяДата", ТекущаяДатаСеанса()) — и сравнивайте в условии ГДЕ. Вычислять текущую дату внутри текста запроса стандартными средствами нельзя.

Итог

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

Для учётных операций в коде используйте ТекущаяДатаСеанса() — она учитывает часовой пояс сеанса и единое серверное время. ТекущаяДата() оставьте для клиентских задач. Если даты в документах «уезжают», проверяйте часовой пояс сеанса, настройки ИБ и синхронизацию времени серверов.