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

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

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

Попытка решить такую задачу через вычисляемые поля с конструкцией ВЫБОР КОГДА обычно не приводит к результату, так как на этапе вычисления полей СКД контекст текущей группировки еще не определен. Разберем штатные механизмы платформы 1С:Предприятие, позволяющие гибко управлять расчетом и выводом ресурсов на разных уровнях отчета.

Способ 1. Раздельный расчет формул на вкладке «Ресурсы»

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

Разберем по шагам, как настроить расчет:

  1. Перейдем на вкладку Ресурсы в схеме компоновки данных.
  2. Добавим ресурс (например, Количество) и в колонке Рассчитывать по... выберем группировку Номенклатура. В колонке Выражение укажем стандартную агрегатную функцию: Сумма(КоличествоОборот)
  3. Добавим вторую строку с тем же ресурсом Количество, но в колонке Рассчитывать по... укажем подчиненную группировку Операция. В поле Выражение укажем формулу для операции: Сумма(КоличествоОперации)
  4. Для расчета стоимости или выручки по операции, где требуется перемножить количество продукции на цену операции, применим функцию языка выражений СКД ВычислитьВыражение: ВычислитьВыражение("Сумма(КоличествоОборот)", "Номенклатура") * ВТ_Операции.Цена Функция ВычислитьВыражение позволяет явно обратиться к расчетному контексту вышестоящей группировки Номенклатура, находясь на уровне подчиненных записей Операция.
  5. Обязательно добавим строку с расчетом для общего итога. Если для ресурса указаны разные формулы под конкретные группировки, платформа не сможет рассчитать общий итог автоматически. В колонке Рассчитывать по... выберем значение Общий итог и зададим корректную формулу.

Способ 2. Индивидуальный состав выбранных полей для каждой группировки

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

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

  1. Перейдем на вкладку Настройки и выделим корень отчета или группировку Номенклатура.
  2. На вкладке Выбранные поля укажем поля, относящиеся к номенклатуре: Номенклатура, КоличествоОборот, ВыручкаОборот.
  3. В дереве структуры отчета выделим подчиненную группировку Операция.
  4. В нижней панели перейдем на вкладку Выбранные поля, снимем флаг Авто (чтобы отменить наследование полей от родительской группировки) и добавим только нужные поля для операций: Операция, КоличествоОперации, СтоимостьОперации.

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

Способ 3. Подготовка данных в тексте запроса через объединение

В ситуациях со сложной иерархией и специфическими требованиями к расчету итогов можно рассчитать все показатели непосредственно в тексте запроса с помощью оператора ОБЪЕДИНИТЬ ВСЕ.

Посмотрим на пример структуры запроса:


ВЫБРАТЬ
    Продажи.Номенклатура КАК Номенклатура,
    ЗНАЧЕНИЕ(Справочник.ТехнологическиеОперации.ПустаяСсылка) КАК Операция,
    Продажи.КоличествоОборот КАК Количество,
    Продажи.ВыручкаОборот КАК Сумма
ИЗ
    РегистрНакопления.Продажи.Обороты(&НачалоПериода, &КонецПериода, , ) КАК Продажи

ОБЪЕДИНИТЬ ВСЕ

ВЫБРАТЬ
    Операции.Номенклатура,
    Операции.Операция,
    Операции.Количество,
    Операции.Количество * Операции.Цена
ИЗ
    втОперации КАК Операции

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

← На главную