Как правильно настроить сортировку часов в СКД при эфирном времени, начинающемся с 06:00?

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

При построении отчетов в Системе Компоновки Данных (СКД), где логические сутки начинаются не в полночь (например, в 06:00 для ТВ-программ), часто возникает проблема с порядком следования группировок. Стандартный часовой формат выводит данные по календарному времени, из-за чего часы с 00 по 05 оказываются «выше» часов с 06 по 23. Рассмотрим, как решить эту задачу и добиться правильной визуализации данных.

Метод 1: Добавление поля для сортировки в запрос

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

  1. В тексте запроса нам необходимо рассчитать два значения для часов: «красивое» для вывода в отчет и «сдвинутое» для правильной сортировки.
  2. Для сдвига времени на 6 часов назад воспользуемся функцией ДОБАВИТЬКДАТЕ или простой арифметикой с типом Дата.

Посмотрим на пример правильного запроса:


ВЫБРАТЬ
    ТВ_Программа.ТВ_Передача.Наименование КАК ТВ_Передача,
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6), ДЕНЬ) КАК День,
    ЧАС(ТВ_Программа.Период) КАК Час,
    ЧАС(ДОБАВИТЬКДАТЕ(ТВ_Программа.Период, ЧАС, -6)) КАК ЧасДляСортировки
ИЗ
    РегистрСведений.ТВ_Программа КАК ТВ_Программа
ГДЕ
    ТВ_Программа.Период МЕЖДУ &С И &По

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

Метод 2: Использование выражений в настройках

Если вы хотите избежать добавления лишних полей в запрос, можно использовать выражения непосредственно в настройках СКД. Это более лаконичный способ, который позволяет сделать код запроса «чистым».

Для этого в настройках группировки Час откройте свойство Выражение упорядочивания и впишите туда формулу расчета сдвига. Можно использовать как функцию ЧАС с ДОБАВИТЬКДАТЕ, так и прямое вычитание секунд (в 6 часах содержится 21600 секунд):

ЧАС(ДОБАВИТЬКДАТЕ(Период, ЧАС, -6)) или ЧАС(Период - 21600)

Этот подход гарантирует, что Система Компоновки Данных будет ранжировать строки согласно сдвинутому времени, при этом в ячейках отчета будет отображаться привычное для пользователя значение Час.

Важные рекомендации при работе с эфирным временем

При реализации подобных задач всегда учитывайте следующие моменты:

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

← На главную