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

Быстрый старт · 8 мин

Как добавить время в 1С: документы, поля и код

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

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

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

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

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

В большинстве документов 1С дата создаётся автоматически при записи — подставляется текущая дата сеанса. Чтобы изменить её вручную, кликните по полю даты в шапке документа и введите нужное значение. Если поле настроено на состав «Дата и время», после числа через пробел укажите время в формате часы:минуты, например 15.03.2026 14:30.

Быстрый ввод работает и без точек: набрав 1503, вы получите 15 марта текущего года. Для времени достаточно набрать 1430 — программа преобразует это в 14:30. После ввода нажмите Enter или Tab, чтобы значение зафиксировалось.

Если поле принимает только дату и время «съедается», значит состав даты реквизита настроен как «Дата» без времени. Это ограничение конфигурации, а не ошибка ввода — как его изменить, описано в следующем разделе.

Порядок действий при вводе времени
  1. 1
    Откройте документ и найдите поле даты в шапке
  2. 2
    Введите дату, затем через пробел время: 15.03.2026 14:30
  3. 3
    Нажмите Enter и проверьте, что время сохранилось
  4. 4
    Если время исчезло — проверьте состав даты реквизита

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

Если время не вводится или не отображается, причина обычно в свойстве «Состав даты» реквизита в конфигураторе. Откройте конфигуратор, найдите нужный реквизит документа или справочника, в палитре свойств установите «Состав даты» = «Дата и время». После обновления конфигурации базы данных поле начнёт принимать и показывать время.

Для формы также проверьте свойство элемента «Формат» — если задана строка вида ДЛФ=D, будет показана только дата. Значение ДЛФ=DT выводит дату и время. Эти настройки влияют только на отображение, хранимое значение не меняется.

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

Как получить текущее время в коде 1С

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

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

// Текущее время сеанса — для учётных данных

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

// Время конкретного компьютера — для технических целей

МоментНаКлиенте = ТекущаяДата();

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

Дата в 1С поддерживает арифметику в секундах: чтобы прибавить час, добавьте 3600, чтобы прибавить сутки — 86400. Например, НоваяДата = ТекущаяДатаСеанса() + 3600; вернёт время на час позже. Вычитание двух дат дает разницу в секундах, что удобно для расчёта длительности операций.

Для сдвига на месяцы и годы простое сложение не подходит из-за разной длины месяцев — используйте функцию ДобавитьМесяц(Дата, КоличествоМесяцев). Она корректно обрабатывает переходы: прибавление месяца к 31 января даст последний день февраля.

Для получения границ периода есть функции НачалоДня(), КонецДня(), НачалоМесяца() и аналогичные. Они особенно полезны в запросах и отчётах: КонецДня() возвращает 23:59:59, что позволяет захватить весь день целиком при отборе по периоду.

ЗадачаСпособПример
Прибавить часы/минутыСложение секундДата + 3600
Прибавить месяцыДобавитьМесяц()ДобавитьМесяц(Дата, 3)
Разница между датамиВычитание (секунды)Дата2 - Дата1
Границы периодаНачалоДня(), КонецДня()КонецДня(Дата)

Часовые пояса и время сеанса

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

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

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

Как проверить корректность времени

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

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

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

Сдвиг на целые часы — неверный часовой пояс базы или сеанса

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

Возвращает ожидаемое локальное время

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

Отличается от времени сервера без видимой причины

Отчёт за день
Норма

Документы дня попадают в выборку целиком

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

Документы края дня «выпадают» — проблема с границами периода

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

Самая частая ошибка — сравнение дат «в лоб» без учёта времени. Условие ДатаДокумента = Дата("20260315") не сработает для документа от 15 марта 10:23, потому что время отличается. Сравнивайте через НачалоДня() или используйте диапазоны.

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

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

FAQ: частые вопросы о времени в 1С

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

У реквизита в конфигураторе установлен состав даты «Дата» вместо «Дата и время». Изменить это может только администратор или разработчик через конфигуратор с последующим обновлением конфигурации базы данных.

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

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

Как прибавить к дате один день в коде?

Добавьте 86400 секунд: НоваяДата = Дата + 86400. Для месяцев и лет используйте ДобавитьМесяц(), так как длительность месяцев различается и простое сложение даст ошибку.

Почему документ не попадает в отчёт за свой день?

Чаще всего отчёт отбирает по периоду, где конечная дата задана как начало дня (00:00:00). Документ, созданный днём, оказывается за границей. Проверьте, что в отборе используется КонецДня() или включён режим «включая время».

Можно ли поменять часовой пояс только для одного пользователя?

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

Как проверить, что реквизит даты пустой?

Сравните значение с пустой датой: Если Реквизит = '00010101' Тогда ... Либо используйте ЗначениеЗаполнено(Реквизит) — для пустой даты функция вернёт Ложь.

Итог

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

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