Рассмотрим частую задачу при работе с Системой компоновки данных (СКД): как превратить плоский список документов, например, актов, в структурированный отчет с иерархией. Цель — сгруппировать все акты сначала по контрагенту, а затем по соответствующему договору. Часто при решении этой задачи возникает путаница между вкладками "Настройки" и "Макеты" в конструкторе СКД. Разберемся, как правильно настроить такую группировку и в чем заключается различие этих вкладок.
Прежде чем перейти к решению, проанализируем распространенное заблуждение. Вкладка "Макеты" предназначена не для определения структуры отчета (то есть, какие группировки и в какой последовательности выводить), а для кастомизации внешнего вида уже существующих элементов отчета. Здесь вы можете задать особый формат для заголовка, подвала, детальных записей или итогов, но не создать саму группировку.
Вся логика структуры отчета, включая вложенность и порядок группировок, настраивается исключительно на вкладке "Настройки". Именно там мы и будем работать, даже когда реализуются две разных схемы в отчете СКД.
Давайте по шагам создадим нужную нам структуру отчета, где акты будут сгруппированы по контрагентам и их договорам. Если вы планируете создавать структуру программно, обратите внимание на СКДБилдер: упрощаем программное создание СКД.
Ins). В появившемся окне система предложит выбрать поле для группировки. Выберите поле Контрагент.
Договор.
Акт.Номер, Акт.Дата, СуммаДокумента и т.д. Просто перетащите их из списка доступных полей в список выбранных.
После выполнения этих шагов структура вашего отчета в дереве настроек будет выглядеть иерархически:
Теперь при формировании отчета СКД автоматически сгруппирует все записи сначала по значению поля Контрагент, а затем, внутри каждой такой группы, — по полю Договор. Это и есть то, что требовалось.
Как мы уже выяснили, вкладка Макеты отвечает за внешний вид (например, когда нужно реализовать условие нет данных — нет столбцов). Давайте разберем на примере, когда она может пригодиться.
Предположим, мы хотим, чтобы в заголовке группировки по контрагенту выводилась не просто его наименование, а строка вида: "Контрагент: ООО 'Ромашка' (ИНН: 1234567890)". Стандартными средствами на вкладке "Настройки" этого добиться сложно. Вот здесь и вступают в игру макеты.
Порядок действий был бы таким:
Контрагент.Контрагент: [Контрагент] (ИНН: [Контрагент.ИНН]).Таким образом, мы не изменили структуру отчета, но полностью переопределили внешний вид заголовка для одной из группировок. Главный вывод: структура и логика — это Настройки, а оформление и "красота" — это Макеты.
В некоторых случаях, особенно когда требуется создать отчет с очень жесткой, фиксированной структурой, можно выполнить группировку данных еще на уровне запроса к базе данных. Для этого в тексте запроса используется конструкция СГРУППИРОВАТЬ ПО и агрегатные функции (СУММА(), КОЛИЧЕСТВО() и т.д.).
Пример фрагмента запроса:
ВЫБРАТЬ
РеализацияТоваровУслуг.Контрагент,
РеализацияТоваровУслуг.ДоговорКонтрагента,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ РеализацияТоваровУслуг.Ссылка) КАК КоличествоАктов,
СУММА(РеализацияТоваровУслуг.СуммаДокумента) КАК ОбщаяСумма
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
СГРУППИРОВАТЬ ПО
РеализацияТоваровУслуг.Контрагент,
РеализацияТоваровУслуг.ДоговорКонтрагента
Плюсы этого метода:
Минусы:
Для задачи, описанной в вопросе, этот метод избыточен и не рекомендуется. Использование стандартных группировок на вкладке Настройки является правильным и наиболее гибким решением.