При разработке отчетов в системе компоновки данных (СКД) часто возникает задача построить кросс-таблицу, где в строках и колонках используются одни группировки (например, даты и счета), а в самом конце отчета, после всех динамических колонок, необходимо вывести одну или несколько итоговых колонок с совершенно другим ресурсом (например, контрольную сумму из другого регистра). Проблема в том, что стандартными средствами СКД такой ресурс либо попадает в каждую колонку, либо требует сложных манипуляций с объединением наборов данных, что часто приводит к появлению пустых, "фантомных" колонок.
Рассмотрим несколько надежных способов, как решить эту задачу и получить отчет нужного вида.
Этот подход является одним из самых популярных и управляемых. Суть метода заключается в том, что мы искусственно создаем новую группировку для колонок с постоянным значением, которое будет служить заголовком для нашей итоговой колонки. Проанализируем этот метод по шагам.
ИтоговаяКолонкаЗаголовок. В колонке "Выражение" для этого поля нужно указать простое строковое значение в кавычках. Это и будет заголовок нашей будущей колонки. Например: "Сумма по регистру".
Счет. Нам нужно добавить еще одну группировку колонок на том же уровне. Для этого выделим корневой элемент "Колонки" и добавим новую группировку.
ИтоговаяКолонкаЗаголовок.
ИтоговаяКолонкаЗаголовок). По умолчанию СКД может добавить сюда все ресурсы отчета (СуммаОборотДт, СуммаОборотКт, СуммаПоРегистру). Нам нужно оставить здесь только тот ресурс, который мы хотим видеть в итоговой колонке. В нашем случае это СуммаПоРегистру. Остальные ресурсы из списка "Выбранные поля" для этой группировки следует удалить.
В результате СКД сначала выведет все колонки, сгруппированные по полю Счет, а затем, на том же уровне, выведет одну колонку с заголовком "Сумма по регистру", в которой будут рассчитаны значения только для ресурса СуммаПоРегистру. Этот метод дает полный контроль над содержимым и заголовком итоговой колонки.
Этот способ был предложен на форуме и является достаточно простым и быстрым решением. Он хорошо подходит, когда не требуется сложной кастомизации заголовка и нужно просто вывести значение ресурса в конце.
Разберем последовательность действий:
Счет), а не внутри нее.СуммаПоРегистру.СКД выведет эту группировку в виде отдельной колонки справа от всех остальных. Заголовком колонки, как правило, будет представление ресурса. Этот метод очень быстрый, но менее гибкий в плане оформления по сравнению с первым.
Автор исходного вопроса столкнулся с проблемой "фантомных" колонок при попытке объединить два набора данных: один с оборотами по счетам, другой — с суммой из регистра накопления. Выясним причину и найдем решение.
Причина проблемы: Когда мы объединяем два набора данных, например, по полю Дата, в результирующем наборе появляются записи, где есть данные из первого набора (Счет, СуммаОборотДт), но нет данных из второго (СуммаПоРегистру), и наоборот. Для записей из второго набора данных поле Счет будет иметь значение NULL. СКД, строя колонки по полю Счет, видит это значение NULL и создает для него отдельную пустую колонку. Аналогично для записей из первого набора будут пустыми ресурсы из второго.
Как это исправить: Проблема решается одной настройкой роли поля, по которому строятся колонки.
Счет.Счет.Счет необходимо установить флаг "Игнорировать значения NULL".Эта настройка — прямое указание для СКД не создавать колонку, если значение поля группировки (в нашем случае Счет) является пустым. Таким образом, записи из второго набора данных, где есть только СуммаПоРегистру, не будут формировать лишнюю колонку. Для вывода самой итоговой колонки после этого нужно будет воспользоваться одним из двух методов, описанных выше (например, методом с вычисляемым полем).
В обсуждении также упоминался вариант использования группировки "Дополнительная информация". Важно понимать, для чего предназначен этот механизм. Он служит для вывода полей-реквизитов, семантически связанных с полем группировки, а не для вывода итоговых ресурсов.
Например, если в строках у нас номенклатура, то в "Дополнительную информацию" можно вывести ее артикул или единицу измерения. Эти данные не являются расчетными итогами. Попытка вывести туда ресурс, который должен рассчитываться по всей строке отчета, часто приводит к непредсказуемому поведению: итоги могут не выводиться или выводиться некорректно. Поэтому для нашей задачи использовать "Дополнительную информацию" не рекомендуется, так как это не является ее целевым назначением и результат не гарантирован.