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

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

Как в 1С узнать текущее время

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

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

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

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

Как посмотреть время в интерфейсе 1С без программирования

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

Второй ориентир — поле «Дата» в любом документе. При создании нового документа 1С автоматически подставляет текущую дату и время. Откройте черновик документа и посмотрите значение в поле даты — это фактическое рабочее время программы.

Третий вариант — журналы документов и регистры. Отсортируйте журнал по дате и найдите последний созданный объект: его время покажет, какое время фиксировала система. Это полезно, когда нужно понять, «по каким часам» живёт база.

Функция ТекущаяДата() — время на стороне клиента

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

Пример использования:

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

Сообщить("Сейчас: " + Формат(ДатаСейчас, "ДЛФ=DT"));

Функция Формат() с шаблоном ДЛФ=DT выводит дату и время в читаемом виде. Если нужно только время, используйте форматную строку "ДЛФ=T" или извлеките компоненты функциями Час(), Минута(), Секунда().

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

bsl
ВремяСтрокой = Формат(ТекущаяДата(), "ДЛФ=T"); // например, 14:35:07

ТекущаяДатаСеанса() — правильное время для серверной логики

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

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

Пример типового применения — фиксация момента события в регистре:

МенеджерЗаписи = РегистрыСведений.ЖурналСобытий.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Период = ТекущаяДатаСеанса();

МенеджерЗаписи.Событие = "Загрузка данных";

МенеджерЗаписи.Записать();

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

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

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

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

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

УниверсальноеВремя()

Возвращает время UTC. Используется для обмена данными между системами в разных поясах, но неудобно для показа пользователю.

Как получить только часы, минуты или сдвинуть время

Часто нужна не полная дата, а отдельные компоненты. Для этого во встроенном языке есть функции Час(Дата), Минута(Дата) и Секунда(Дата). Они принимают значение типа «Дата» и возвращают число.

Для сдвига времени используют простое сложение: дата в 1С хранится как момент времени, и прибавление числа означает прибавление секунд. Например, «через полчаса» — это ТекущаяДатаСеанса() + 1800. Для сдвига на дни удобнее функция ДобавитьКДате().

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

ЧерезЧас = ТекВремя + 3600;

НачалоСегодня = НачалоДня(ТекВремя);

Расхождение времени клиента и сервера: как проверить и исправить

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

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

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

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

Время в новом документе
Норма

Совпадает с реальным с точностью до минут

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

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

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

Разница равна заявленному смещению часового пояса

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

Разница произвольная — неверно настроен пояс базы

Регламентные задания
Норма

Запускаются в ожидаемое локальное время

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

Срабатывают ночью вместо дня — перепутан пояс сеанса

Типичные ошибки при работе со временем в 1С

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

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

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

FAQ

Как узнать время без даты — только часы и минуты?

Используйте форматирование: Формат(ТекущаяДатаСеанса(), "ДЛФ=T") вернёт строку вида «14:35:07». Либо возьмите числа через Час() и Минута() и соберите строку вручную.

Почему время в документе отличается от времени на компьютере?

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

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

Она учитывает часовой пояс сеанса и даёт единообразный результат независимо от того, где выполняется код. Для записи данных, отчётов и регламентных заданий это предпочтительный вариант.

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

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

Можно ли изменить время, которое 1С ставит в новые документы?

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

Как прибавить к текущему времени 15 минут?

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

Итог

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

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