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

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

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

Базовая настройка структуры: документ и детальные записи

Основная ошибка начинающих разработчиков заключается в попытке вывести все поля на одном уровне — только в ветке Детальные записи. Чтобы получить иерархический вид, необходимо выстроить правильную структуру группировок на вкладке «Настройки» схемы компоновки данных.

Рассмотрим порядок создания правильной структуры:

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

Теперь разделим состав выводимых колонок. Для верхнего уровня (группировка Документ) на вкладке «Выбранные поля» снимем флаг автопозиционирования и укажем реквизиты шапки: дату, номер, контрагента, организацию. Для подчиненной ветки Детальные записи в выбранных полях укажем реквизиты табличной части: номенклатуру, характеристику, количество, цену и сумму.

Настройка отображения реквизитов и группировок

После создания структуры платформа может отображать поля шапки в виде отдельных колонок, сильно растягивая таблицу в ширину. Проанализируем параметры, которые помогут сделать отчет компактным.

На вкладке «Другие настройки» (для группировки документа или для всего отчета в целом) отрегулируем следующие свойства:

  1. Расположение реквизитов: установим значение «Вместе с владельцем». В этом случае реквизиты шапки документа будут выводиться в одной строке группировки, а не дробиться на множество параллельных столбцов.
  2. Расположение полей группировок: выберем вариант «Отдельно и только в итогах» или «Вместе». Это позволит строке с названием документа занимать всю ширину таблицы непосредственно над строками табличной части.
  3. Расположение итогов: для группировки документа часто требуется отключить стандартные строки общих итогов, выбрав значение «Нет», чтобы исключить визуальный мусор в виде пустых полос между документами.

Также полезно использовать объединение полей. В списке выбранных полей группировки шапки выделим несколько реквизитов (например, номер и дату), нажмем правую кнопку мыши и выберем «Сгруппировать поля». Выбрав тип группы «Вместе» или «Вертикально», мы можем расположить реквизиты компактно в рамках одной общей ячейки.

Особенности расчета итогов и ресурсов

Когда в одном запросе СКД соединяются таблица шапки документа и его табличная часть, данные шапки дублируются по количеству строк. Если реквизит шапки (например, СуммаДокумента) объявлен ресурсом, обычная агрегатная функция Сумма(СуммаДокумента) вернет некорректный общий итог, завышенный в несколько раз.

Выясним причину и настроим формулу расчета. На вкладке «Ресурсы» для поля шапки укажем точный расчет по уровням иерархии:


// В поле "Рассчитывать по..." указываем уровень группировки Документ:
Максимум(СуммаДокумента)

Для поля детальных записей (например, СуммаСтроки) оставляем стандартное суммирование по всем группировкам:

Сумма(СуммаСтроки)

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

Вывод нескольких табличных частей

Если в одном отчете под документом требуется вывести две несвязанные между собой табличные части (например, «Товары» и «Услуги»), соединять их в тексте запроса через оператор ЛЕВОЕ СОЕДИНЕНИЕ нельзя — это приведет к декартовому произведению строк. Посмотрим на правильное решение через структуру СКД:

  1. В запросе получаем обе табличные части в виде отдельных наборов полей либо объединением через ОБЪЕДИНИТЬ ВСЕ с признаком типа строки.
  2. В настройках СКД внутри группировки Документ создаем две параллельные подчиненные группировки Детальные записи (одну под другой).
  3. Для первой подчиненной группировки настраиваем отбор по строкам товаров и выбираем соответствующие поля.
  4. Для второй подчиненной группировки настраиваем отбор по услугам и задаем свой набор полей.

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

Использование пользовательских макетов оформления

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

  1. Перейдем на вкладку «Макеты» схемы компоновки данных.
  2. Нажмем «Добавить макет» — «Добавить макет группировки».
  3. В появившемся окне выберем имя группировки Документ и тип макета — «Заголовок».
  4. В табличном поле нарисуем необходимый шаблон шапки: объединим нужные ячейки, расставим рамки, фоновые цвета и укажем параметры в угловых скобках, например <НомерДокумента> и <ДатаДокумента>.
  5. Ниже добавим отдельный макет для группировки Детальные записи с типом «Строка», где зададим сетку таблицы с номенклатурой и ценами.

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

← На главную