Как вывести шапку документа и его табличную часть в СКД в виде разворачиваемого списка

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

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

Настройка структуры группировок в СКД

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

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

Такой подход позволит нам получить структуру, где в первой строке выведены все данные шапки, а при нажатии на символ "+" открываются строки табличной части. Однако здесь мы сталкиваемся со следующей проблемой: расположением колонок.

Настройка расположения полей для компактного вида

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

Перейдем на вкладку Другие настройки. Здесь нас интересует параметр Расположение полей группировок. Если установить значение Вместе, СКД постарается объединить поля группировки в минимально возможное количество колонок. Если же мы хотим, чтобы поля шапки были строго в своих колонках, а под ними начинались колонки табличной части, важно правильно настроить состав выбранных полей в каждой группировке, убирая "автополе" и добавляя конкретные реквизиты.

Решение проблемы дублирования итоговых сумм

Это самая критичная часть настройки. Когда мы выводим в одном запросе и шапку документа, и его табличную часть, записи шапки дублируются столько раз, сколько строк в табличной части. Если в документе на 1000 рублей есть 5 строк в таблице, то при обычном суммировании ресурса СуммаДокумента СКД выдаст итог 5000 рублей. Выясним причину: агрегатная функция Сумма складывает значение из каждой строки набора данных.

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

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


Сумма(ВычислитьВыражениеСГруппировкойМассив("Максимум(СуммаДокумента)", "Ссылка"))

Разберем, что делает этот код:

  1. Максимум(СуммаДокумента) — внутри каждого конкретного документа берется максимальное (оно же единственное верное) значение суммы шапки.
  2. ВычислитьВыражениеСГруппировкойМассив — собирает эти значения по всем документам в массив.
  3. Сумма(...) — складывает уникальные суммы документов из полученного массива.

Если структура отчета простая, можно воспользоваться более коротким вариантом, указав расчет по конкретной группировке в поле Рассчитывать по..., но использование ВычислитьВыражениеСГруппировкойМассив является более универсальным и надежным методом для сложных отчетов.

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

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

Вместо одного сложного запроса создадим два отдельных:

  1. НаборДанныхШапка: Выбирает только ссылку и реквизиты шапки (номер, дату, общую сумму).
  2. НаборДанныхТабличнаяЧасть: Выбирает ссылку на документ-владелец и данные строк (номенклатуру, количество).

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

Заключение

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

← На главную