Как исключить данные конкретных организаций из общего итога в СКД, сохранив их в детальных колонках?

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

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

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

Способ 1. Использование нескольких записей на вкладке «Ресурсы»

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

  1. Перейдем в схеме компоновки данных на вкладку Ресурсы.
  2. Добавим наше поле Сумма в список ресурсов дважды.
  3. Для первой записи в поле Выражение пропишем стандартную формулу: Сумма(Сумма). В колонке Рассчитывать по... выберем только группировку Организация. Это обеспечит корректный вывод данных в колонках каждой отдельной организации.
  4. Для второй записи (которая будет отвечать за итоги) в поле Выражение напишем условие. Например, если нам нужно исключить организацию "ЗапрещеннаяОрганизация", формула будет выглядеть так:
    
    Сумма(Выбор 
        Когда Организация <> &ИсключаемаяОрганизация 
        Тогда Сумма 
        Иначе 0 
    Конец)
    
  5. В колонке Рассчитывать по... для этой второй записи укажем Общий итог (или оставим поле пустым, если хотим, чтобы эта формула применялась ко всем уровням выше организации).

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

Способ 2. Использование функции ВычислитьВыражение

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

Рассмотрим пример выражения для ресурса Сумма:


ВычислитьВыражение("Сумма(Сумма)", , "ОбщийИтог", "Организация <> &ИсключаемаяОрганизация")

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

Способ 3. Создание вычисляемого поля для итогов

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

Разберем алгоритм:

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

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

Способ 4. Группировка с отбором в настройках

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

  1. Отключите стандартные Общие итоги в настройках расположения итогов.
  2. Добавьте в структуру отчета новую группировку (без указания поля — это будет аналог общего итога).
  3. На уровне этой конкретной группировки установите Отбор, исключающий ненужные организации.

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

Резюме

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

← На главную