Приветствую, коллеги. Столкнулся с задачкой, решение которой найти пока не удается. Есть данные вида:

24.04.2020 20:16 111
24.04.2020 21:16 222
25.04.2020 20:16 333
27.04.2020 00:00 444

Требуется построить в отчете на СКД - таблицу, где колонками будут даты месяца, а строками - часы дня. Для отсутствующих дат и отсутствующих часов сделать - дополнение. В строках будут часы. Они должны быть сгруппированы. Сделал внешний отчет, прикрепил к теме. Его проблема в том, что часы не группируются, т.е. среди строк встречаются по нескольку раз "00:00:00" и т.д., происходит этого из-за того, что реальная дата "внутри" - разная, время только одинаковое и оно выведено через Формат. По сути мне надо время привести к началу часа, убрав секунды. Сгруппировать часы с разных дат в одну последовательность как на циферблате.
---
Сделал иначе. Так как на не интересует дата, то я взял за константу дату 1 января 2000 года. Вычислил количество секунд прошедших с начала дня даты строки и добавил к этой константе. В результате во всех строках выборки получается одна дата, но с разным временем.

```1c
    ВЫБРАТЬ
    &Период КАК Дата,
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Период, ДЕНЬ), &Период, СЕКУНДА)), ЧАС) КАК Часы,
    1 КАК Ресурс

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 1),
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 1), ДЕНЬ), ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 1), СЕКУНДА)), ЧАС) КАК Часы,
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 2),
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 2), ДЕНЬ), ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 2), СЕКУНДА)), ЧАС) КАК Часы,
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 4),
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 4), ДЕНЬ), ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 4), СЕКУНДА)), ЧАС) КАК Часы,
    4

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 6),
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 6), ДЕНЬ), ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 6), СЕКУНДА)), ЧАС) КАК Часы,
    5
```

P.S.: На скорость запроса это положительно не влияет, но как вариант.
---
Добрый день! Я не очень поняла задачу. Исходные данные - это файл, или это даты документов?
Если даты, тогда
День(Документ.Дата) КАК Дата,
ЧАС(Документ.Дата) КАК Часы,

Если данные из текстового массива - нужно обрабатывать массив.
Или что-то еще?
---
Исходные данные это регистр сведений содержащий дату события в одном из измерений.

(2) ЧАС(Документ.Дата) КАК Часы
И в этом случае мы получим на выходе значение типа Число и последовательность вида "1,4,8,10,11,12", а не "00:00:00, 01:00:00". Но самое печальное в том, что при этом не работает дополнение периода, т.к. Число <> Дата. В случае отсутствия записи, скажем на 9 утра, в отчете будет "пробел" в данных.
---
Я бы сделала без СКД 2 цикла внешний по датам, внутренний по часам, и обработку данных с отнесением в границы периода.
---
Сделал иначе. Так как на не интересует дата, то я взял за константу дату 1 января 2000 года. Вычислил количество секунд прошедших с начала дня даты строки и добавил к этой константе. В результате во всех строках выборки получается одна дата, но с разным временем.

```1c
    ВЫБРАТЬ
    &Период КАК Дата,
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(&Период, ДЕНЬ), &Период, СЕКУНДА)), ЧАС) КАК Часы,
    1 КАК Ресурс

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 1),
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 1), ДЕНЬ), ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 1), СЕКУНДА)), ЧАС) КАК Часы,
    2

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 2),
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 2), ДЕНЬ), ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 2), СЕКУНДА)), ЧАС) КАК Часы,
    3

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 4),
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 4), ДЕНЬ), ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 4), СЕКУНДА)), ЧАС) КАК Часы,
    4

    ОБЪЕДИНИТЬ ВСЕ

    ВЫБРАТЬ
    ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 6),
    НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(ДАТАВРЕМЯ(2000,1,1), СЕКУНДА, РАЗНОСТЬДАТ(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 6), ДЕНЬ), ДОБАВИТЬКДАТЕ(&Период, ДЕНЬ, 6), СЕКУНДА)), ЧАС) КАК Часы,
    5
```

P.S.: На скорость запроса это положительно не влияет, но как вариант.