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

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

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

Разберем по шагам наиболее эффективные подходы к решению этой задачи без жесткой привязки к внутренним идентификаторам (UID) и без изменения типовой конфигурации.

Способ 1. Использование пользовательского параметра и вычисляемого поля для группировки

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

  1. Создание параметра в схеме компоновки: перейдем на вкладку Параметры и добавим новый параметр с именем ВыделеннаяСтатьяЗатрат. Зададим ему тип ссылки на соответствующий справочник (например, СправочникСсылка.СтатьиЗатрат). Снимем флаг Ограничение доступности, чтобы пользователь мог интерактивно выбирать значение в шапке или настройках отчета.
  2. Добавление вычисляемого поля: перейдем на вкладку Вычисляемые поля и создадим поле КатегорияСтатьи. В выражении поля напишем условие:
    
    ВЫБОР 
        КОГДА СтатьяЗатрат = &ВыделеннаяСтатьяЗатрат 
            ТОГДА "Выделенная позиция" 
        ИНАЧЕ "Прочие позиции" 
    КОНЕЦ
    
  3. Настройка структуры отчета: перейдем на вкладку Настройки. В структуру группировок между родителем (например, НоменклатурнаяГруппа) и детальными записями по полю СтатьяЗатрат вставим промежуточную группировку по нашему вычисляемому полю КатегорияСтатьи.

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

Способ 2. Группировка через дополнительный реквизит (свойство) справочника

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

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

Такой подход удобен тем, что правила объединения настраиваются пользователями без вмешательства разработчика в схему компоновки.

Способ 3. Расчет раздельных ресурсов в схеме компоновки

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

Перейдем на вкладку Ресурсы и вместо стандартного поля суммы создадим два отдельных ресурсных поля через вычисляемые поля или выражения ресурсов:

  1. Ресурс для выделенной позиции:
    
    Сумма(ВЫБОР 
        КОГДА СтатьяЗатрат = &ВыделеннаяСтатьяЗатрат 
            ТОГДА Сумма 
        ИНАЧЕ 0 
    КОНЕЦ)
    
  2. Ресурс для остальных позиций:
    
    Сумма(ВЫБОР 
        КОГДА СтатьяЗатрат <> &ВыделеннаяСтатьяЗатрат 
            ТОГДА Сумма 
        ИНАЧЕ 0 
    КОНЕЦ)
    

В колонке Рассчитывать по... укажем вышестоящие группировки (например, НоменклатурнаяГруппа, Подразделение, ОбщийИтог), чтобы раздельные суммы рассчитывались на уровнях итогов.

Расчет процента от общего итога группировки

Выясним, как рассчитать процентное соотношение долей, где сумма выделенной позиции и сумма прочих позиций в рамках номенклатурной группы в сумме дают 100%.

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

На вкладке Ресурсы для поля ПроцентОтИтога укажем следующее выражение:


ВЫБОР 
    КОГДА ВычислитьВыражение("Сумма(Сумма)", "НоменклатурнаяГруппа") = 0 
        ТОГДА 0 
    ИНАЧЕ Сумма(Сумма) / ВычислитьВыражение("Сумма(Сумма)", "НоменклатурнаяГруппа") * 100 
КОНЕЦ

Посмотрим на параметры функции: первым параметром передается агрегатная функция Сумма(Сумма), а вторым — точное имя группировки, данные которой выступают 100%-й базой для расчета.

Настройка внешнего вида подвала через макеты СКД

Если требуется получить точные пользовательские подписи итогов вида «Подр1_Ит2» и «Подр1_Ит1,3,4...», стандартных заголовков группировок может быть недостаточно. В этом случае используем вкладку Макеты:

  1. Добавим Макет подвала группировки для соответствующего уровня.
  2. В ячейках макета назначим тип заполнения Шаблон или Параметр.
  3. В выражении параметра объединим наименование родительской группировки и название вычисляемой категории: [Подразделение] + "_" + [КатегорияСтатьи].

С помощью таких настроек отчет формирует четкую структуру с разделением итогов по заданным правилам без необходимости хардкодить внутренние идентификаторы объектов информационной базы.

← На главную