При разработке отчетов в системе компоновки данных (СКД) часто возникает задача не просто вывести список документов, а сгруппировать их по периодам и ответственным, подсчитав при этом итоговые показатели. Рассмотрим ситуацию, когда нам необходимо получить статистику: сколько документов создал каждый сотрудник за определенный месяц. Разберем по шагам, как правильно составить запрос, настроить ресурсы и оформить результат в виде удобной таблицы.
Для начала нам необходимо извлечь данные из информационной базы. В нашем примере мы будем использовать журнал документов, но аналогичный подход применим к любым документам или регистрам. Проанализируем пример запроса, который позволит получить данные для отчета:
ВЫБРАТЬ
Журнал9.Ссылка КАК Ссылка,
Журнал9.Ответственный КАК Ответственный,
Журнал9.Дата КАК Дата,
НАЧАЛОПЕРИОДА(Журнал9.Дата, МЕСЯЦ) КАК Месяц
ИЗ
Документ.Журнал9 КАК Журнал9
ГДЕ
Журнал9.Дата МЕЖДУ &НачалоПериода И &КонецПериода
Обратите внимание на использование функции НАЧАЛОПЕРИОДА(Дата, МЕСЯЦ). Это критически важный момент для корректной работы отчета. Многие начинающие разработчики пытаются преобразовать дату в строку (например, "Январь", "Февраль") прямо в запросе через конструкцию ВЫБОР КОГДА. Рассмотрим, почему это не совсем верно: строки сортируются по алфавиту, и в вашем отчете "Август" окажется раньше "Января". Используя НАЧАЛОПЕРИОДА, мы сохраняем тип данных "Дата", что гарантирует правильную хронологическую сортировку.
Теперь выясним, как заставить СКД считать количество документов. Просто вывести поле Ссылка недостаточно, нам нужно превратить его в числовой итог. Разберем два способа реализации этой задачи.
Способ 1: Через вычисляемое поле (для наглядности)
КоличествоДокументов.1.Сумма(КоличествоДокументов).Способ 2: Профессиональный (через агрегатные функции)
Этот способ более оптимален, так как не загромождает список полей. Мы сразу переходим на закладку Ресурсы и выбираем наше поле Ссылка. В поле Выражение прописываем следующую функцию:
Количество(Различные Ссылка)
Использование ключевого слова Различные гарантирует, что даже если документ попадет в выборку несколько раз (например, из-за дублей в соединениях запроса), он будет учтен в итоговой сумме только один раз.
После настройки данных нам нужно определить, как они будут выглядеть на экране. Рассмотрим классическую иерархическую структуру:
Ответственный.Месяц.Ответственный, Месяц и наш ресурс (количество документов).В таком виде отчет выведет список сотрудников, под каждым из которых будет список месяцев с количеством документов.
Поскольку наше поле Месяц является датой (первое число месяца), по умолчанию 1С выведет его в формате "01.10.2023 00:00:00". Чтобы отчет выглядел профессионально, настроим формат представления:
Месяц.ДФ='MMMM yyyy'.Теперь вместо точной даты пользователь увидит красивое название: "Октябрь 2023".
Если задача стоит вывести месяцы в колонки (как в шахматке), проанализируем использование структуры Таблица. Это один из самых мощных инструментов СКД:
Ответственный.Месяц.Количество.Такая настройка позволит видеть всех сотрудников в левой части отчета, а месяцы — в шапке колонок. На пересечении будет автоматически подсчитано количество документов.
Рассмотрим ситуацию, когда в какой-то месяц документов не было. По умолчанию СКД просто пропустит этот месяц. Чтобы отчет был непрерывным, мы можем воспользоваться механизмом Дополнения периодов:
Месяц перейдите на вкладку Дополнительные настройки (или выберите свойства поля в настройках).Месяц.&НачалоПериода и &КонецПериода).Это заставит систему вывести даже те месяцы, в которых деятельность не велась, проставив там пустые значения или нули.
Таким образом, мы проанализировали полный цикл создания аналитического отчета: от формирования правильного запроса с типизацией периодов до настройки сложных визуальных структур типа "Таблица". Использование встроенных функций СКД для подсчета и форматирования позволяет избежать написания лишнего кода и делает отчет гибким для дальнейших изменений пользователем.