Как просуммировать количество документов в СКД и правильно сгруппировать их по датам

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

При разработке отчетов на базе Системы компоновки данных (СКД) программисты часто сталкиваются с ситуацией, когда данные, которые должны выводиться одной строкой, "разваливаются" на несколько. Особенно часто это происходит при попытке посчитать количество документов (например, РеализацияТоваровУслуг) в разрезе дней. Основная причина кроется в специфике хранения типа Дата в 1С:Предприятие — она всегда содержит время с точностью до секунды. Разберем подробно, как решить эту проблему, правильно настроить ресурсы и оформить отчет в виде удобной таблицы.

Анализ проблемы: почему данные не сворачиваются

Рассмотрим типичную ситуацию. В запросе выбираются поля Дата и Подразделение. На первый взгляд, если мы выставим формат даты "ДФ=dd.MM.yyyy", в отчете мы увидим только день, месяц и год. Однако СКД продолжает видеть время. Если один документ создан в 09:00:00, а другой в 15:30:00, для системы это разные значения группировки. В итоге мы получаем несколько строк на одну календарную дату.

Проанализируем пример неудачного запроса:


ВЫБРАТЬ
    РеализацияТоваровУслуг.Дата КАК Дата,
    РеализацияТоваровУслуг.Подразделение КАК Подразделение,
    РеализацияТоваровУслуг.Ссылка КАК Ссылка
ИЗ
    Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
    РеализацияТоваровУслуг.Дата МЕЖДУ &ДатаНачало И &ДатаКонец

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

Решение 1: Приведение даты к началу дня в запросе

Самый надежный способ заставить СКД группировать данные по дням — это использование функции НАЧАЛОПЕРИОДА непосредственно в тексте запроса. Это гарантирует, что время во всех записях будет "обнулено" (установлено в 00:00:00), и система сможет корректно свернуть строки.

Скорректируем наш запрос:


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

Важный момент: если мы используем группировку СГРУППИРОВАТЬ ПО внутри самого запроса, нам также необходимо применить НАЧАЛОПЕРИОДА в блоке группировки:


СГРУППИРОВАТЬ ПО
    НАЧАЛОПЕРИОДА(РеализацияТоваровУслуг.Дата, ДЕНЬ),
    РеализацияТоваровУслуг.Подразделение

Решение 2: Использование возможностей настроек СКД

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

  1. Откроем вкладку Настройки в схеме компоновки данных.
  2. В структуре отчета выберем группировку по полю Дата.
  3. Вместо простого выбора поля Дата, нажмем на "плюсик" рядом с ним и выберем Дата.НачалоДня.
  4. Платформа автоматически создаст виртуальное поле, которое будет использоваться для группировки, не меняя физически данные в выборке.

Настройка ресурсов для подсчета количества

Чтобы получить итоговые цифры (например, количество документов за день), необходимо правильно настроить вкладку Ресурсы. Простое суммирование ссылок не сработает, так как ссылка — это не число.

Рассмотрим правильное выражение для ресурса:

  1. В колонке Поле выбираем Ссылка (или Количество, если оно создано в запросе).
  2. В колонке Выражение пишем: Количество(Различные Ссылка).
  3. Использование ключевого слова Различные критически важно. Если в ваш запрос в будущем попадут табличные части (например, список товаров), обычное Количество посчитает строки товаров, а не уникальные документы. Различные гарантирует, что каждый документ будет учтен ровно один раз.

Создание таблицы (кросс-отчета)

Для достижения результата, как в вопросе автора (даты в строках, подразделения в колонках, на пересечении — количество), выполним следующие действия в настройках СКД:

  1. В окне настроек удалим стандартный "Детальные записи".
  2. Нажмем правую кнопку мыши и выберем Новая таблица.
  3. В Строки таблицы добавим группировку по полю Дата (не забываем про приведение к началу дня).
  4. В Колонки таблицы добавим группировку по полю Подразделение.
  5. На вкладке Выбранные поля убедимся, что выбрано наше ресурсное поле (количество ссылок).

Проанализируем, что получится: СКД создаст матрицу. По вертикали пойдут уникальные даты, по горизонтали — подразделения. На пересечении будет вызвана функция ресурса Количество(Различные Ссылка) для конкретной даты и конкретного подразделения. В конце таблицы автоматически добавятся колонки "Итого", которые просуммируют документы по горизонтали и вертикали.

Тонкости форматирования

Выясним причину, почему даже при правильной группировке отчет может выглядеть "грязным". Это часто связано с отображением времени. Чтобы отчет выглядел профессионально, выполним условное оформление:

В настройках поля Дата (на вкладке Наборы данных или непосредственно в настройках отчета) установим параметр Формат в значение ДФ=dd.MM.yyyy. Теперь, даже если в значении даты технически присутствуют нули времени (00:00:00), пользователь увидит только дату.

Полезный совет: Если вы хотите видеть в отчете пустые дни (дни, когда не было ни одной реализации), в настройках группировки по дате установите флаг Тип дополнения — "День". Тогда СКД автоматически "дорисует" недостающие даты в периоде и поставит в них нули, что очень удобно для анализа динамики продаж.

Резюме

Для корректного суммирования количества документов по датам мы должны:

Такой подход обеспечивает точность данных и гибкость отчета при добавлении новых измерений или фильтров.

← На главную