Как в СКД сделать итогом одной колонки значение из другой колонки?

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

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

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

Разбор базового решения через вкладку «Ресурсы»

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

Рассмотрим пошагово, как подменить формулу для итогов:

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

Часто возникает проблема наследования формул. Проанализируем ситуацию: если у вас сложная структура группировок, формула в подчиненной группировке может наследоваться от родительской. Чтобы этого избежать, для поля Количество1 в ресурсах можно добавить две строки:

Работа с несколькими наборами данных

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

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

Применим следующую формулу в ресурсах:

Сумма(ЕстьNull(Количество, 0))

Это обеспечит корректное сложение, даже если в одном из наборов данных отсутствуют соответствующие записи.

Использование функции ВычислитьВыражение (EvalExpression)

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

Рассмотрим пример использования этой функции для поля Количество1 в колонке «Выражение» на вкладке «Ресурсы»:

ВычислитьВыражение("Сумма(Количество)", , "ОбщийИтог")

Проанализируем параметры этой функции:

Альтернативный метод через «Вычисляемые поля»

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

  1. Перейдем на вкладку Вычисляемые поля.
  2. Создадим новое поле, назовем его, например, КоличествоДляИтогов.
  3. В поле «Выражение» просто укажем Количество.
  4. Затем на вкладке Ресурсы назначим это новое поле ресурсом для колонки Количество1.

Этот способ позволяет избежать конфликтов, если СКД «теряет» связь с полем при выполнении сложных запросов к разным наборам данных.

Тонкая настройка области расчета

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

  1. В ресурсах добавьте поле Количество1 первый раз. Формула: Сумма(Количество1). В колонке «Рассчитывать по» выберите все ваши группировки, кроме «Общего итога».
  2. Добавьте поле Количество1 второй раз. Формула: Сумма(Количество). В колонке «Рассчитывать по» выберите только «Общий итог».

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

Использование оформления для визуальной подмены

Если технический расчет итога не так важен для последующих вычислений, а цель — чисто визуальное соответствие, можно рассмотреть механизм Условного оформления.

Посмотрим на алгоритм настройки:

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

Резюме

Мы рассмотрели несколько способов решения задачи по подмене итогов в СКД. Самым эффективным является явное переопределение формулы ресурса с ограничением области расчета через колонку «Рассчитывать по...». Если же отчет базируется на нескольких слабо связанных наборах данных, использование функции ВычислитьВыражение с контекстом "ОбщийИтог" станет вашим главным инструментом для достижения результата.

← На главную