При работе с отчетами и запросами в платформе 1С разработчики часто сталкиваются с задачей отобразить или выгрузить только время (часы, минуты, секунды) без даты. Рассмотрим подробнее, как устроена работа со временем в языке запросов и как правильно решить эту задачу разными способами.
В платформе 1С отсутствует отдельный тип данных Время. Существует единый составной тип Дата, который всегда содержит полный состав сведений: год, месяц, день, час, минуту и секунду. Даже если дата задана как пустая или минимальная (например, 01.01.0001 09:30:00), составная часть даты всё равно присутствует.
Поэтому решение задачи разделяется на два основных подхода:
Разберем случай, когда в запросе требуется получить отдельные числовые показатели часов, минут или секунд. В языке запросов 1С для этого предусмотрены специальные встроенные функции:
ВЫБРАТЬ
ЧАС(ДокументТаблица.Дата) КАК Час,
МИНУТА(ДокументТаблица.Дата) КАК Минута,
СЕКУНДА(ДокументТаблица.Дата) КАК Секунда
ИЗ
Документ.Продажи КАК ДокументТаблица
Эти функции возвращают числовые значения, с которыми можно выполнять любые арифметические операции или использовать их в условиях отбора. Однако если объединять эти составные части обратно в дату через функцию ДОБАВИТЬКДАТЕ, платформа снова вернет значение с датой 01.01.0001. Если цель — просто красиво показать время пользователю, лучше использовать форматирование.
Проанализируем ситуацию, когда необходимо отсортировать записи по времени суток независимо от конкретного дня или вычислить длительность в секундах. Для этого вычисляется разность между исходной датой и началом дня этой же даты:
ВЫБРАТЬ
РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДокументТаблица.Дата, ДЕНЬ), ДокументТаблица.Дата, СЕКУНДА) КАК СекундОтНачалаДня
ИЗ
Документ.Продажи КАК ДокументТаблица
Результатом выполнения данной конструкции станет целое число секунд от 0 до 86399. Это числовое значение очень удобно использовать для построения гистограмм, интервальной группировки или точной сортировки по времени.
Выясним, как скрыть дату и оставить только время в отчетах на базе Системы компоновки данных (СКД) или при выводе на форму. В этом случае в самом запросе поле даты оставляют без изменений, а преобразование выполняют на уровне визуального оформления.
Для настройки форматирования в СКД выполним следующие шаги:
ДЛФ=В (длина даты — только время);ДФ=ЧЧ:мм:сс (для 24-часового формата) или ДФ=HH:mm:ss.Если требуется применить форматирование через Условное форматирование в настройках отчета, перейдем на вкладку Настройки > Условное форматирование, добавим элемент оформления, укажем свойство Формат со значением ДФ=ЧЧ:мм:сс и выберем оформляемое поле.
Также в СКД можно задать выражение представления для поля даты на вкладке Наборы данных:
Формат(ДатаСтатуса, "ДФ=ЧЧ:мм:сс")
При таком подходе значение в запросе остается полноценной датой (что сохраняет возможность расшифровки и правильных отборов), а пользователь в отчете видит привычное время в формате 14:35:00.