Как сгруппировать данные в отчете СКД по контрагенту и договору?

Программист
← На главную

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

Основная ошибка: попытка настроить структуру на вкладке "Макеты"

Прежде чем перейти к решению, проанализируем распространенное заблуждение. Вкладка "Макеты" предназначена не для определения структуры отчета (то есть, какие группировки и в какой последовательности выводить), а для кастомизации внешнего вида уже существующих элементов отчета. Здесь вы можете задать особый формат для заголовка, подвала, детальных записей или итогов, но не создать саму группировку.

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

Пошаговая инструкция по созданию вложенных группировок

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

  1. Откройте конструктор схемы компоновки данных и перейдите на вкладку "Настройки". Вы увидите дерево, которое представляет структуру будущего отчета. По умолчанию там может быть только один элемент – "Отчет".
  2. Создайте первую группировку по Контрагенту.
    Выделите корневой элемент "Отчет", нажмите правую кнопку мыши и выберите "Новая группировка" (или воспользуйтесь клавишей Ins). В появившемся окне система предложит выбрать поле для группировки. Выберите поле Контрагент.
  3. Создайте вложенную группировку по Договору.
    Теперь, когда у нас есть группировка по контрагенту, нужно добавить группировку по договору внутри нее. Для этого выделите только что созданную группировку "Контрагент", снова нажмите правую кнопку мыши и выберите "Новая группировка". В окне выбора полей укажите поле Договор.
  4. Настройте выводимые поля.
    Структура готова. Теперь нужно указать, какие данные мы хотим видеть. Перейдите на вкладку "Выбранные поля". Здесь нужно добавить поля, которые будут отображаться в детальных записях (в нашем случае, это информация по конкретному акту). Обычно это такие поля, как Акт.Номер, Акт.Дата, СуммаДокумента и т.д. Просто перетащите их из списка доступных полей в список выбранных.

После выполнения этих шагов структура вашего отчета в дереве настроек будет выглядеть иерархически:

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

Для чего же тогда нужна вкладка "Макеты"?

Как мы уже выяснили, вкладка Макеты отвечает за внешний вид (например, когда нужно реализовать условие нет данных — нет столбцов). Давайте разберем на примере, когда она может пригодиться.

Предположим, мы хотим, чтобы в заголовке группировки по контрагенту выводилась не просто его наименование, а строка вида: "Контрагент: ООО 'Ромашка' (ИНН: 1234567890)". Стандартными средствами на вкладке "Настройки" этого добиться сложно. Вот здесь и вступают в игру макеты.

Порядок действий был бы таким:

  1. Переходим на вкладку "Макеты".
  2. Нажимаем кнопку "Добавить макет" и выбираем тип макета "Заголовок".
  3. В появившемся окне указываем, для какой группировки мы создаем макет. Выбираем нашу группировку Контрагент.
  4. Откроется редактор макета, похожий на табличный документ. В ячейке макета мы можем написать текст и использовать параметры, которые СКД заполнит данными. Наш текст будет выглядеть так: Контрагент: [Контрагент] (ИНН: [Контрагент.ИНН]).
  5. Для ячейки с этим текстом в палитре свойств нужно установить способ заполнения "Шаблон", чтобы СКД обработала выражения в квадратных скобках.

Таким образом, мы не изменили структуру отчета, но полностью переопределили внешний вид заголовка для одной из группировок. Главный вывод: структура и логика — это Настройки, а оформление и "красота" — это Макеты.

Альтернативный подход: группировка в запросе

В некоторых случаях, особенно когда требуется создать отчет с очень жесткой, фиксированной структурой, можно выполнить группировку данных еще на уровне запроса к базе данных. Для этого в тексте запроса используется конструкция СГРУППИРОВАТЬ ПО и агрегатные функции (СУММА(), КОЛИЧЕСТВО() и т.д.).

Пример фрагмента запроса:


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

Плюсы этого метода:

Минусы:

Для задачи, описанной в вопросе, этот метод избыточен и не рекомендуется. Использование стандартных группировок на вкладке Настройки является правильным и наиболее гибким решением.

← На главную