Быстрый старт · 8 мин
Как добавить время в 1С: документы, поля и код
Как добавить время в 1С: ввод даты и времени в документах, функции ТекущаяДата и ТекущаяДатаСеанса, работа с часовыми поясами и типичные ошибки.
Работа с датой и временем в 1С встречается постоянно: при создании документов, заполнении реквизитов, в отчётах и при написании обработок. При этом пользователи часто путают, где именно нужно «добавить время» — в поле документа, в коде на встроенном языке или в настройках сеанса.
Дата и время в 1С хранятся единым значением типа «Дата», которое всегда содержит и дату, и время с точностью до секунды. Даже если на форме видно только число, внутри хранится полное значение, например полночь соответствующего дня. Это важно понимать, чтобы правильно сравнивать даты и строить отчёты.
Ниже разобраны основные сценарии: ручной ввод времени в документе, включение отображения времени на форме, получение текущего времени в коде, прибавление интервалов, а также нюансы часовых поясов в клиент-серверных базах.
Как ввести дату и время в поле документа
В большинстве документов 1С дата создаётся автоматически при записи — подставляется текущая дата сеанса. Чтобы изменить её вручную, кликните по полю даты в шапке документа и введите нужное значение. Если поле настроено на состав «Дата и время», после числа через пробел укажите время в формате часы:минуты, например 15.03.2026 14:30.
Быстрый ввод работает и без точек: набрав 1503, вы получите 15 марта текущего года. Для времени достаточно набрать 1430 — программа преобразует это в 14:30. После ввода нажмите Enter или Tab, чтобы значение зафиксировалось.
Если поле принимает только дату и время «съедается», значит состав даты реквизита настроен как «Дата» без времени. Это ограничение конфигурации, а не ошибка ввода — как его изменить, описано в следующем разделе.
- 1Откройте документ и найдите поле даты в шапке
- 2Введите дату, затем через пробел время: 15.03.2026 14:30
- 3Нажмите Enter и проверьте, что время сохранилось
- 4Если время исчезло — проверьте состав даты реквизита
Как включить отображение времени в поле даты
Если время не вводится или не отображается, причина обычно в свойстве «Состав даты» реквизита в конфигураторе. Откройте конфигуратор, найдите нужный реквизит документа или справочника, в палитре свойств установите «Состав даты» = «Дата и время». После обновления конфигурации базы данных поле начнёт принимать и показывать время.
Для формы также проверьте свойство элемента «Формат» — если задана строка вида ДЛФ=D, будет показана только дата. Значение ДЛФ=DT выводит дату и время. Эти настройки влияют только на отображение, хранимое значение не меняется.
Учтите, что изменение состава даты существующего реквизита — это изменение конфигурации, требующее прав администратора и монопольного доступа при обновлении. В типовых конфигурациях такие правки лучше согласовывать со специалистом по сопровождению, чтобы не потерять их при обновлении.
Как получить текущее время в коде 1С
Во встроенном языке для получения текущего момента используются две функции. ТекущаяДата() возвращает дату и время компьютера, на котором выполняется код: на клиенте — время рабочей станции, на сервере — время сервера. ТекущаяДатаСеанса() возвращает время сеанса с учётом часового пояса, заданного для информационной базы или пользователя.
Для документов, проводок и любых данных, влияющих на учёт, рекомендуется ТекущаяДатаСеанса() — она даёт согласованное время для всех пользователей базы независимо от настроек их компьютеров. Функция ТекущаяДата() уместна для технических меток на клиенте, например для замера длительности операции.
// Текущее время сеанса — для учётных данных
ДатаДокумента = ТекущаяДатаСеанса();
// Время конкретного компьютера — для технических целей
МоментНаКлиенте = ТекущаяДата();
Как прибавить или вычесть время у даты
Дата в 1С поддерживает арифметику в секундах: чтобы прибавить час, добавьте 3600, чтобы прибавить сутки — 86400. Например, НоваяДата = ТекущаяДатаСеанса() + 3600; вернёт время на час позже. Вычитание двух дат дает разницу в секундах, что удобно для расчёта длительности операций.
Для сдвига на месяцы и годы простое сложение не подходит из-за разной длины месяцев — используйте функцию ДобавитьМесяц(Дата, КоличествоМесяцев). Она корректно обрабатывает переходы: прибавление месяца к 31 января даст последний день февраля.
Для получения границ периода есть функции НачалоДня(), КонецДня(), НачалоМесяца() и аналогичные. Они особенно полезны в запросах и отчётах: КонецДня() возвращает 23:59:59, что позволяет захватить весь день целиком при отборе по периоду.
| Задача | Способ | Пример |
|---|---|---|
| Прибавить часы/минуты | Сложение секунд | Дата + 3600 |
| Прибавить месяцы | ДобавитьМесяц() | ДобавитьМесяц(Дата, 3) |
| Разница между датами | Вычитание (секунды) | Дата2 - Дата1 |
| Границы периода | НачалоДня(), КонецДня() | КонецДня(Дата) |
Часовые пояса и время сеанса
В клиент-серверных базах и при работе пользователей из разных регионов критично, какой часовой пояс назначен информационной базе. Пояс базы задаётся в консоли кластера или в параметрах публикации; пояс пользователя может переопределяться в его настройках. От этого зависит, что вернёт ТекущаяДатаСеанса().
Если пользователи жалуются, что документы «создаются вчера» или «в будущем», первым делом сверьте три значения: время сервера 1С, часовой пояс информационной базы и пояс сеанса конкретного пользователя. Расхождение хотя бы одного из них даёт сдвиг дат в документах и отчётах.
Как проверить корректность времени
Совпадает с реальным временем в регионе пользователя
Сдвиг на целые часы — неверный часовой пояс базы или сеанса
Возвращает ожидаемое локальное время
Отличается от времени сервера без видимой причины
Документы дня попадают в выборку целиком
Документы края дня «выпадают» — проблема с границами периода
Типичные ошибки при работе со временем
Самая частая ошибка — сравнение дат «в лоб» без учёта времени. Условие ДатаДокумента = Дата("20260315") не сработает для документа от 15 марта 10:23, потому что время отличается. Сравнивайте через НачалоДня() или используйте диапазоны.
Вторая распространённая проблема — использование ТекущаяДата() в серверном коде проведения документов. Если сервер находится в другом часовом поясе, документы получат «чужое» время. Для учётных данных всегда применяйте ТекущаяДатаСеанса().
FAQ: частые вопросы о времени в 1С
Почему в поле даты нельзя ввести время?
У реквизита в конфигураторе установлен состав даты «Дата» вместо «Дата и время». Изменить это может только администратор или разработчик через конфигуратор с последующим обновлением конфигурации базы данных.
Чем ТекущаяДата() отличается от ТекущаяДатаСеанса()?
ТекущаяДата() возвращает время того компьютера, где выполняется код. ТекущаяДатаСеанса() — время сеанса с учётом часового пояса базы и пользователя. Для учётных данных правильнее второй вариант: он одинаков для всех пользователей базы.
Как прибавить к дате один день в коде?
Добавьте 86400 секунд: НоваяДата = Дата + 86400. Для месяцев и лет используйте ДобавитьМесяц(), так как длительность месяцев различается и простое сложение даст ошибку.
Почему документ не попадает в отчёт за свой день?
Чаще всего отчёт отбирает по периоду, где конечная дата задана как начало дня (00:00:00). Документ, созданный днём, оказывается за границей. Проверьте, что в отборе используется КонецДня() или включён режим «включая время».
Можно ли поменять часовой пояс только для одного пользователя?
Да, часовой пояс сеанса можно задать индивидуально — в настройках пользователя или программно через УстановитьЧасовойПоясСеанса(). Это влияет на ТекущаяДатаСеанса() и отображение времени только для этого сеанса.
Как проверить, что реквизит даты пустой?
Сравните значение с пустой датой: Если Реквизит = '00010101' Тогда ... Либо используйте ЗначениеЗаполнено(Реквизит) — для пустой даты функция вернёт Ложь.
Что важно запомнить
Время в 1С — часть единого типа «Дата». В документах время вводится через пробел после даты, если реквизит это позволяет. В коде для учётных данных используйте ТекущаяДатаСеанса(), сдвигайте время сложением секунд, а месяцы — через ДобавитьМесяц(). При сбоях времени проверяйте часовые пояса сервера, базы и сеанса.