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

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

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

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

Способ 1. Настройка выбранных полей для конкретной группировки

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

Разберем алгоритм действий:

  1. Перейдем на вкладку Настройки в схеме компоновки данных.
  2. В дереве настроек (левая часть окна) найдем группировку колонок, которая отвечает за вывод месяцев (например, ПериодМесяц).
  3. Выделим эту группировку и в правой нижней части окна перейдем на закладку Выбранные поля.
  4. По умолчанию там стоит флажок Использовать родительские настройки (или просто выведено поле Авто). Нам необходимо снять этот флажок.
  5. После снятия флажка список станет пустым. Теперь вручную перенесем в него только те поля, которые должны отображаться в каждом месяце: План и Факт. Поле Отклонение добавлять сюда не будем.
  6. Вернемся на самый верхний уровень настроек отчета (корневой элемент Отчет) и убедимся, что на его вкладке Выбранные поля присутствуют все три поля: План, Факт и Отклонение.

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

Способ 2. Использование функций проверки контекста в ресурсах

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

Рассмотрим использование функции ЭтоОбщийИтог() или УровеньГруппировки(). Мы можем изменить выражение ресурса на вкладке Ресурсы так, чтобы оно возвращало значение только в итоговых позициях.

Пример выражения для ресурса Отклонение:


ВЫБОР 
    КОГДА ЭтоОбщийИтог() 
        ТОГДА Сумма(План) - Сумма(Факт) 
    ИНАЧЕ NULL 
КОНЕЦ

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

Способ 3. Ограничение расчета по группировкам

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

Разберем последовательность:

  1. Зайдем на вкладку Ресурсы.
  2. Найдем поле Отклонение.
  3. В колонке Рассчитывать по нажмем кнопку выбора.
  4. Снимем все галочки и установим только одну — Общие итоги.

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

Способ 4. Условное оформление (Визуальное скрытие)

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

Попробуем настроить ширину колонки:

  1. Перейдем в Настройки -> Условное оформление.
  2. Добавим новое правило.
  3. В Оформлении установим параметры Минимальная ширина и Максимальная ширина равными 0.1 или 1 (значение 0 в некоторых версиях платформы игнорируется).
  4. В Условии можно ничего не ставить, если мы планируем применить это к конкретной области.
  5. В Оформляемых полях выберем наше Отклонение.
  6. В Области использования (внизу окна) крайне важно указать, что оформление действует только В группировке и выбрать именно ту группировку колонок, где мы хотим спрятать поле.

Внимание: При выгрузке такого отчета в Excel пользователь может увидеть очень узкие пустые колонки, которые можно «раздвинуть». Если это критично, лучше использовать Способ 1.

Способ 5. Программное управление структурой (для продвинутых задач)

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


// Получаем настройки отчета
Настройки = КомпоновщикНастроек.ПолучитьНастройки();

// Ищем нужную группировку в колонках таблицы
Для Каждого ГруппировкаКолонок Из Настройки.Структура[0].Колонки Цикл
    Если ТипЗнч(ГруппировкаКолонок) = Тип("ГруппировкаКомпоновкиДанных") Тогда
        // Проверяем, что это группировка по периоду
        Если ГруппировкаКолонок.ПоляГруппировки.Элементы[0].Поле = Новый ПолеКомпоновкиДанных("Месяц") Тогда
            // Очищаем автополе и добавляем только нужные ресурсы
            ГруппировкаКолонок.Выбранные поля.Элементы.Очистить();
            
            ПолеПлан = ГруппировкаКолонок.ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
            ПолеПлан.Поле = Новый ПолеКомпоновкиДанных("План");
            
            ПолеФакт = ГруппировкаКолонок.ВыбранныеПоля.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
            ПолеФакт.Поле = Новый ПолеКомпоновкиДанных("Факт");
        КонецЕсли;
    КонецЕсли;
КонецЦикла;

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

Резюме

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

← На главную