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

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с отчетами и запросами в платформе 1С разработчики часто сталкиваются с задачей отобразить или выгрузить только время (часы, минуты, секунды) без даты. Рассмотрим подробнее, как устроена работа со временем в языке запросов и как правильно решить эту задачу разными способами.

Особенности типа данных дата в платформе 1С

В платформе 1С отсутствует отдельный тип данных Время. Существует единый составной тип Дата, который всегда содержит полный состав сведений: год, месяц, день, час, минуту и секунду. Даже если дата задана как пустая или минимальная (например, 01.01.0001 09:30:00), составная часть даты всё равно присутствует.

Поэтому решение задачи разделяется на два основных подхода:

  1. Выделение числовых составляющих или количества секунд в запросе — требуется, когда со временем необходимо производить математические вычисления, группировки или сортировки.
  2. Форматирование представления даты при выводе — применяют, когда данные выходят в отчет СКД, форму или печатную форму и пользователю нужно визуально скрыть дату, оставив только время.

Способ 1. Извлечение компонентов времени (ЧАС, МИНУТА, СЕКУНДА)

Разберем случай, когда в запросе требуется получить отдельные числовые показатели часов, минут или секунд. В языке запросов 1С для этого предусмотрены специальные встроенные функции:


ВЫБРАТЬ
    ЧАС(ДокументТаблица.Дата) КАК Час,
    МИНУТА(ДокументТаблица.Дата) КАК Минута,
    СЕКУНДА(ДокументТаблица.Дата) КАК Секунда
ИЗ
    Документ.Продажи КАК ДокументТаблица

Эти функции возвращают числовые значения, с которыми можно выполнять любые арифметические операции или использовать их в условиях отбора. Однако если объединять эти составные части обратно в дату через функцию ДОБАВИТЬКДАТЕ, платформа снова вернет значение с датой 01.01.0001. Если цель — просто красиво показать время пользователю, лучше использовать форматирование.

Способ 2. Расчет количества секунд от начала дня

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


ВЫБРАТЬ
    РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДокументТаблица.Дата, ДЕНЬ), ДокументТаблица.Дата, СЕКУНДА) КАК СекундОтНачалаДня
ИЗ
    Документ.Продажи КАК ДокументТаблица

Результатом выполнения данной конструкции станет целое число секунд от 0 до 86399. Это числовое значение очень удобно использовать для построения гистограмм, интервальной группировки или точной сортировки по времени.

Способ 3. Форматирование вывода времени (рекомендуемый вариант)

Выясним, как скрыть дату и оставить только время в отчетах на базе Системы компоновки данных (СКД) или при выводе на форму. В этом случае в самом запросе поле даты оставляют без изменений, а преобразование выполняют на уровне визуального оформления.

Для настройки форматирования в СКД выполним следующие шаги:

  1. Откроем схему компоновки данных и перейдем на вкладку Наборы данных или Поля компоновки данных.
  2. Найдем нужное поле с датой и откроем его свойство Формат.
  3. Зададим строку формата. Для вывода только времени используются параметры:
    • ДЛФ=В (длина даты — только время);
    • или явное задание формата: ДФ=ЧЧ:мм:сс (для 24-часового формата) или ДФ=HH:mm:ss.

Если требуется применить форматирование через Условное форматирование в настройках отчета, перейдем на вкладку Настройки > Условное форматирование, добавим элемент оформления, укажем свойство Формат со значением ДФ=ЧЧ:мм:сс и выберем оформляемое поле.

Также в СКД можно задать выражение представления для поля даты на вкладке Наборы данных:

Формат(ДатаСтатуса, "ДФ=ЧЧ:мм:сс")

При таком подходе значение в запросе остается полноценной датой (что сохраняет возможность расшифровки и правильных отборов), а пользователь в отчете видит привычное время в формате 14:35:00.

← На главную