Разработка и Конфигурация · 8 мин
Как в 1С узнать текущее время
Как узнать текущее время в 1С: команды ТекущаяДата и ТекущаяДатаСеанса, просмотр времени в интерфейсе, часовые пояса, примеры кода и типичные ошибки.
Время в 1С фигурирует почти в каждом документе: дата проведения, отметки в журналах, сроки в отчётах. При этом «узнать время» можно по-разному — посмотреть его в интерфейсе, получить программно в коде или выяснить, какое время использует сервер. Выбор способа зависит от того, кто вы: обычный пользователь, которому нужно сверить часы, или разработчик, пишущий обработку.
Важный нюанс: в клиент-серверном варианте работы время на компьютере пользователя и на сервере 1С может отличаться. Из-за этого документы иногда «уезжают» на другую дату, а отчёты показывают неожиданные итоги. Поэтому в платформе есть несколько функций получения времени, и каждая ведёт себя по-своему.
Ниже разобраны все практические варианты: просмотр времени в интерфейсе, команды встроенного языка, работа с часовыми поясами и проверка расхождений между клиентом и сервером.
Как посмотреть время в интерфейсе 1С без программирования
Самый простой способ — не искать часы внутри 1С, а посмотреть системное время Windows в трее. 1С в файловом варианте берёт дату и время именно с компьютера пользователя, поэтому часы на панели задач и есть то время, которое проставится в новый документ.
Второй ориентир — поле «Дата» в любом документе. При создании нового документа 1С автоматически подставляет текущую дату и время. Откройте черновик документа и посмотрите значение в поле даты — это фактическое рабочее время программы.
Третий вариант — журналы документов и регистры. Отсортируйте журнал по дате и найдите последний созданный объект: его время покажет, какое время фиксировала система. Это полезно, когда нужно понять, «по каким часам» живёт база.
Функция ТекущаяДата() — время на стороне клиента
Основная команда встроенного языка — ТекущаяДата(). Она возвращает значение типа «Дата» с точностью до секунды, взятое с того компьютера, где выполняется код. Если код работает в клиентском контексте (например, в модуле формы с директивой &НаКлиенте), это время рабочей станции пользователя.
Пример использования:
ДатаСейчас = ТекущаяДата();
Сообщить("Сейчас: " + Формат(ДатаСейчас, "ДЛФ=DT"));
Функция Формат() с шаблоном ДЛФ=DT выводит дату и время в читаемом виде. Если нужно только время, используйте форматную строку "ДЛФ=T" или извлеките компоненты функциями Час(), Минута(), Секунда().
Учтите: в толстом и тонком клиенте при файловом режиме ТекущаяДата() всегда совпадает с системным временем компьютера. А вот в серверном вызове та же функция вернёт время сервера приложений — это источник многих ошибок.
ВремяСтрокой = Формат(ТекущаяДата(), "ДЛФ=T"); // например, 14:35:07ТекущаяДатаСеанса() — правильное время для серверной логики
Функция ТекущаяДатаСеанса() возвращает время сеанса с учётом часового пояса, установленного для информационной базы или пользователя. Именно её рекомендуется применять в серверных процедурах, регламентных заданиях, бизнес-процессах и при записи данных, где важна единая точка отсчёта.
Часовой пояс сеанса настраивается в свойствах информационной базы (через конфигуратор или консоль кластера) и может переопределяться для конкретного пользователя. Благодаря этому филиалы в разных регионах видят согласованное время, даже если сервер стоит в другом поясе.
Пример типового применения — фиксация момента события в регистре:
МенеджерЗаписи = РегистрыСведений.ЖурналСобытий.СоздатьМенеджерЗаписи();
МенеджерЗаписи.Период = ТекущаяДатаСеанса();
МенеджерЗаписи.Событие = "Загрузка данных";
МенеджерЗаписи.Записать();
Сравнение вариантов
Подходит для клиентских подсказок и интерфейсных задач. Ограничение: результат зависит от того, где выполняется код, и от настроек конкретного компьютера.
Правильный выбор для записи данных, регламентных заданий и отчётов. Учитывает часовой пояс сеанса, но требует корректной настройки пояса в базе.
Возвращает время UTC. Используется для обмена данными между системами в разных поясах, но неудобно для показа пользователю.
Как получить только часы, минуты или сдвинуть время
Часто нужна не полная дата, а отдельные компоненты. Для этого во встроенном языке есть функции Час(Дата), Минута(Дата) и Секунда(Дата). Они принимают значение типа «Дата» и возвращают число.
Для сдвига времени используют простое сложение: дата в 1С хранится как момент времени, и прибавление числа означает прибавление секунд. Например, «через полчаса» — это ТекущаяДатаСеанса() + 1800. Для сдвига на дни удобнее функция ДобавитьКДате().
ТекВремя = ТекущаяДатаСеанса();
ЧерезЧас = ТекВремя + 3600;
НачалоСегодня = НачалоДня(ТекВремя);
Расхождение времени клиента и сервера: как проверить и исправить
Характерный симптом проблемы: пользователь создаёт документ «сейчас», а он попадает на вчерашнюю или завтрашнюю дату. Причина почти всегда в разнице системных часов между рабочей станцией и сервером 1С или СУБД.
Для диагностики сравните три значения: системное время компьютера пользователя, время сервера приложений и результат ТекущаяДатаСеанса(). Если серверное время отличается от реального — корректируйте часы и часовой пояс на самом сервере (в ОС), а не в 1С.
Как проверить результат
Совпадает с реальным с точностью до минут
Сдвинуто на часы или сутки — проверяйте пояс сервера
Разница равна заявленному смещению часового пояса
Разница произвольная — неверно настроен пояс базы
Запускаются в ожидаемое локальное время
Срабатывают ночью вместо дня — перепутан пояс сеанса
Типичные ошибки при работе со временем в 1С
Самая распространённая ошибка — использовать ТекущаяДата() в серверном коде и ожидать время пользователя. На сервере функция вернёт серверное время, и при разных поясах данные запишутся некорректно.
Вторая ошибка — сравнивать даты «в лоб» без учёта времени. Дата документа содержит и время, поэтому условие Дата = НачалоДня(ТекущаяДатаСеанса()) почти никогда не выполнится. Для сравнения по дню используйте НачалоДня() и КонецДня() с обеих сторон.
FAQ
Как узнать время без даты — только часы и минуты?
Используйте форматирование: Формат(ТекущаяДатаСеанса(), "ДЛФ=T") вернёт строку вида «14:35:07». Либо возьмите числа через Час() и Минута() и соберите строку вручную.
Почему время в документе отличается от времени на компьютере?
В клиент-серверном режиме дату документа формирует сервер, а не ваш компьютер. Проверьте системное время и часовой пояс на сервере приложений и настройку пояса информационной базы.
Чем ТекущаяДатаСеанса() лучше ТекущаяДата()?
Она учитывает часовой пояс сеанса и даёт единообразный результат независимо от того, где выполняется код. Для записи данных, отчётов и регламентных заданий это предпочтительный вариант.
Как получить время в формате UTC для обмена с другой системой?
Примените функцию УниверсальноеВремя(ТекущаяДатаСеанса()) — она переведёт локальное время сеанса в UTC. При обратной загрузке используйте МестноеВремя() для преобразования обратно.
Можно ли изменить время, которое 1С ставит в новые документы?
Напрямую «часы программы» не переопределяются — 1С берёт время из системы и настроек сеанса. Меняется либо системное время сервера, либо часовой пояс базы. В отдельном документе дату всегда можно отредактировать вручную.
Как прибавить к текущему времени 15 минут?
Прибавьте число секунд: ТекущаяДатаСеанса() + 900. Для сдвигов на дни, месяцы и годы надёжнее использовать ДобавитьКДате(), чтобы корректно обрабатывались границы месяцев.
Что важно запомнить
Для просмотра времени достаточно системных часов или даты нового документа. В коде используйте ТекущаяДатаСеанса() для серверной логики и записи данных, а ТекущаяДата() — только для клиентских задач. При расхождениях времени проверяйте часы и часовые пояса сервера, а не саму 1С.