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

Для извлечения отдельных компонентов времени из значения типа Дата в 1С применяются встроенные функции Часы(), Минуты() и Секунды(). Каждая из них принимает одно значение даты и возвращает соответствующую числовую часть временной составляющей.
Пример базового использования в модуле:
ТекущаяДата = ТекущаяДата();
Час = Часы(ТекущаяДата);
Минута = Минуты(ТекущаяДата);
Секунда = Секунды(ТекущаяДата);
Функции возвращают целые числа: часы в диапазоне от 0 до 23, минуты и секунды от 0 до 59. Значение даты при этом не изменяется, извлекается только нужная часть. Такой подход подходит для проверок условий, расчетов интервалов и логики управления процессами.
При работе с данными, полученными из реквизитов объектов, регистров или параметров форм, предварительное преобразование не требуется, если тип значения уже Дата. Если источник данных может содержать Неопределено, рекомендуется выполнить проверку перед вызовом функций, чтобы избежать ошибки выполнения.
Функции Часы(), Минуты() и Секунды() доступны как в клиентском, так и в серверном коде, что позволяет использовать их без дополнительных условий в большинстве сценариев прикладной разработки.
Использование функций Часы(), Минуты() и Секунды() в коде

Функции Часы(), Минуты() и Секунды() применяются в процедурном коде 1С для прямого доступа к временной части значения типа Дата. Они работают одинаково в модулях объектов, формах, общих модулях и серверных процедурах без ограничений по контексту выполнения.
Типовой сценарий – проверка условий по времени. Например, ограничение выполнения операции по часам или контроль попадания события в заданный временной интервал. В таких случаях извлечение отдельных компонентов предпочтительнее сравнения полных дат, так как исключает влияние календарной части.
Пример проверки времени:
Если Часы(ДатаДокумента) >= 9 И Часы(ДатаДокумента) < 18 Тогда
РазрешитьПроведение = Истина;
КонецЕсли;
Для вычислений допускается комбинирование значений. Часто используется перевод времени в секунды с начала суток: Часы()*3600 + Минуты()*60 + Секунды(). Такой прием удобен при сравнении интервалов и сортировке событий внутри одного дня.
Функции корректно обрабатывают значения, полученные из базы данных, включая даты документов, записей регистров и результаты выражений. При работе с параметрами, которые могут быть пустыми, перед вызовом рекомендуется проверка на Неопределено, так как передача некорректного значения приведет к исключению во время выполнения.
Использование этих функций не изменяет исходное значение даты и не создает новых объектов, что позволяет вызывать их многократно внутри циклов без побочных эффектов для бизнес-логики.
Извлечение времени из даты через функцию Формат()
Функция Формат() позволяет получить временную часть значения типа Дата в виде строки с заданным представлением. Этот способ используется, когда требуется вывести время пользователю, передать его во внешний интерфейс или подготовить данные для текстовой обработки.
Для извлечения времени применяется форматная строка с указанием нужных элементов:
- ЧЧ – часы в 24-часовом формате
- мм – минуты
- сс – секунды
Пример получения времени без даты:
ВремяСтрокой = Формат(ДатаЗначение, «ЧЧ:мм:сс»);
Функция возвращает строку, поэтому результат не подходит для прямых арифметических операций. Если требуется дальнейшая обработка, рекомендуется заранее определить, где используется строковое представление, а где числовые значения.
- исключать секунды при работе с расписаниями
- использовать разделители, принятые во внешних системах
- приводить время к фиксированной длине для отчетов
При использовании Формат() следует учитывать региональные настройки. Явное указание шаблона исключает зависимость от локали и предотвращает расхождения при выполнении кода на разных серверах.
Метод подходит только для чтения и отображения времени. Для сравнений и расчетов предпочтительнее извлекать часы, минуты и секунды числовыми функциями.
Получение времени из даты в запросах 1С
В запросах 1С извлечение времени из значений типа Дата выполняется с помощью функций Часы(), Минуты() и Секунды(), которые поддерживаются в языке запросов. Это позволяет фильтровать и группировать данные по временным интервалам без изменения основной структуры базы.
Пример запроса для выборки документов, созданных после 9 часов утра:
ВЫБРАТЬ
Документы.Дата КАК ДатаДокумента,
Документы.Сумма
ИЗ Документы.Продажи КАК Документы
ГДЕ Часы(Документы.Дата) >= 9
Рекомендации при работе с временем в запросах:
- Использовать функции Часы(), Минуты(), Секунды() для вычислений в выражениях SELECT и WHERE.
- При группировке по времени применять комбинацию: Часы()*3600 + Минуты()*60 + Секунды() для получения секунд с начала суток.
- Сравнения с фиксированным временем лучше делать в числовом формате, чтобы избежать ошибок при локальных настройках сервера.
Функции корректно работают с любыми реквизитами типа Дата, включая регистры накопления и документы, что позволяет строить точные выборки и выполнять агрегирование по часам, минутам и секундам внутри одного дня.
Преобразование значения Дата в тип Время без даты
В 1С отдельного типа «Время» нет, но можно получить временную составляющую значения Дата и использовать её как самостоятельный объект для вычислений и сравнений. Для этого применяют функцию Время, создавая значение с нулевой календарной частью.
Пример преобразования:
ИсходнаяДата = ТекущаяДата();
ВремяТолько = Время(Часы(ИсходнаяДата), Минуты(ИсходнаяДата), Секунды(ИсходнаяДата));
Функция Время(Часы, Минуты, Секунды) возвращает значение типа Дата с календарной частью 30.12.1899, которое можно использовать для:
- сравнения временных интервалов без учета дня, месяца и года;
- вычисления разницы между событиями в течение суток;
- передачи времени в отчеты и формы с исключением даты.
При операциях с таким значением следует учитывать, что арифметика работает корректно только внутри одних суток. Для интервалов, превышающих 24 часа, необходимо отдельно обрабатывать перенос через сутки.
Использование преобразования позволяет отделить логику времени от даты, облегчая построение расписаний, проверку условий по часам и работу с временными фильтрами в запросах и коде модулей.
Особенности работы со временем сервера и клиента 1С

В 1С значение типа Дата может формироваться как на клиенте, так и на сервере. Различия в источнике данных влияют на корректность вычислений и сравнений временных значений, особенно при работе с часовыми поясами и переносом данных между пользователями.
Основные моменты:
- Текущая дата на клиенте определяется функцией ТекущаяДата() в контексте пользователя.
- На сервере та же функция возвращает серверное время с учетом часового пояса сервера.
- При обмене данными между клиентом и сервером возможны смещения, если клиент и сервер находятся в разных часовых поясах.
- Для отчетов и расчетов рекомендуется использовать единый источник времени, чаще серверный, чтобы избежать рассогласования.
Таблица основных функций и особенностей их работы:
| Функция/Метод | Источник времени | Особенности |
|---|---|---|
| ТекущаяДата() | Клиент/Сервер | Возвращает дату и время текущего контекста; различие по часовому поясу влияет на сравнения |
| Часы(), Минуты(), Секунды() | Любой | Извлекают компоненты времени без учета календарной части; корректны для вычислений и фильтров |
| Время(Часы, Минуты, Секунды) | Любой | Создает значение времени с фиксированной датой 30.12.1899; удобно для интервалов в пределах суток |
При проектировании логики рекомендуется явно указывать, с чьим временем работают процедуры, и при необходимости синхронизировать значения между клиентом и сервером. Это предотвращает ошибки при фильтрации и расчетах интервалов.
Типовые ошибки при извлечении времени из даты

Другой тип ошибки – попытка сравнивать строковое представление времени, полученное через Формат(), с числовыми значениями. Строки нельзя корректно использовать в арифметических операциях и условиях диапазонов без преобразования в числа.
Также часто возникает путаница при работе с серверным и клиентским временем. Если клиент и сервер находятся в разных часовых поясах, прямое сравнение временных частей может дать некорректный результат. Рекомендуется приводить все значения к единой временной зоне.
Использование значения времени с календарной частью для вычисления интервалов без корректного обнуления даты может привести к отрицательным или неверным результатам. Для интервалов в пределах суток лучше создавать значение через Время(Часы, Минуты, Секунды).
Неправильное использование функций в запросах – еще одна причина ошибок. Применение Часы(), Минуты(), Секунды() в выражениях SELECT и WHERE без учета индексов может снизить производительность и вызвать неожиданные выборки при фильтрации больших таблиц.
Практические примеры кода в модулях и управляемых формах

В модулях объектов и общих модулях извлечение времени из значения Дата используется для проверки условий и вычислений:
Процедура ПроверитьВремяДокумента(ДатаДокумента)
Час = Часы(ДатаДокумента);
Минута = Минуты(ДатаДокумента);
Если Час >= 9 И Час < 18 Тогда
Сообщить(«Документ попадает в рабочий день»);
Иначе
Сообщить(«Документ вне рабочего времени»);
КонецЕсли;
КонецПроцедуры;
В управляемых формах время часто отображается отдельно, для этого используют функцию Формат():
ЭлементФормы.Текст = Формат(Документ.Дата, «ЧЧ:мм:сс»);
Для вычислений интервалов между событиями удобно преобразовывать дату в «время без даты»:
ВремяНачало = Время(Часы(СобытиеНачало), Минуты(СобытиеНачало), Секунды(СобытиеНачало));
ВремяКонец = Время(Часы(СобытиеКонец), Минуты(СобытиеКонец), Секунды(СобытиеКонец));
ДлительностьСек = ВремяКонец — ВремяНачало;
Для запросов к базе примеры включают фильтрацию по времени:
ВЫБРАТЬ
Документы.Дата КАК ДатаДокумента,
Документы.Сумма
ИЗ Документы.Продажи КАК Документы
ГДЕ Часы(Документы.Дата) >= 8 И Часы(Документы.Дата) < 20;
Эти примеры показывают, как объединять функции для извлечения времени с отображением и вычислениями, обеспечивая корректную работу бизнес-логики в различных модулях и формах.
Вопрос-ответ:
Как извлечь только время из значения Дата в 1С для сравнения с рабочим графиком?
Для извлечения часов, минут и секунд используется набор функций: Часы(), Минуты() и Секунды(). Например, чтобы проверить, попадает ли документ в рабочие часы с 9 до 18, можно написать: Если Часы(ДатаДокумента) >= 9 И Часы(ДатаДокумента) < 18 Тогда…. Такой подход позволяет игнорировать календарную часть и работать исключительно с временной составляющей.
Можно ли использовать форматирование через Формат() для расчетов времени?
Функция Формат() возвращает строку с заданным отображением времени, например, «ЧЧ:мм:сс». Строки нельзя использовать в арифметических вычислениях напрямую. Для расчетов интервалов лучше применять функции Часы(), Минуты() и Секунды(), преобразуя их в секунды или минуты для получения числового значения.
Как правильно работать с временем сервера и клиента, чтобы избежать смещения?
В 1С клиент и сервер могут находиться в разных часовых поясах. Функция ТекущаяДата() на клиенте возвращает локальное время пользователя, а на сервере — серверное. Для согласованности вычислений и фильтров рекомендуется использовать единый источник, чаще серверный, и учитывать смещение часового пояса при передаче данных между клиентом и сервером.
Какие ошибки чаще всего встречаются при извлечении времени из даты и как их избежать?
Типичные ошибки включают: вызов функций Часы(), Минуты(), Секунды() на неопределенном значении даты, использование строкового результата Формат() для арифметики, некорректное сравнение клиентского и серверного времени и использование даты с ненулевой календарной частью для расчета интервалов. Избежать проблем помогает проверка на Неопределено, использование числовых функций для расчетов и приведение всех временных значений к единой временной зоне.
