Как скрыть конкретный ресурс только в последней колонке таблицы СКД?

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

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

Способ 1. Использование двух смежных группировок с разными наборами полей

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

Разберем этот процесс по шагам:

  1. Подготовка данных: В запросе или в вычисляемых полях нам необходимо определить, какой период является последним. Это можно сделать, вычислив максимальную дату периода по всей выборке.
  2. Настройка структуры: В настройках отчета вместо одной группировки Период создаем две группировки одного уровня.
  3. Первая группировка (Прошлые периоды):
    • Устанавливаем отбор для этой группировки: Период НЕ РАВЕН &МаксимальныйПериод.
    • В разделе «Выбранные поля» указываем все ресурсы: «Сумма», «Приращение», «%».
  4. Вторая группировка (Текущий период):
    • Устанавливаем отбор: Период РАВЕН &МаксимальныйПериод.
    • В разделе «Выбранные поля» оставляем только ресурс «Сумма».

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

Способ 2. Условное оформление и «зануление» ресурсов

Если мы не хотим менять структуру группировок, мы можем воспользоваться механизмом Условного оформления. Рассмотрим, как это сделать:

Сначала создадим в схеме вычисляемое поле или параметр, который будет определять, является ли колонка «последней». Например, в запросе можно добавить поле ЭтоПоследнийМесяц (Булево).

Далее перейдем на закладку «Условное оформление» в настройках СКД:

  1. Добавим новый элемент оформления.
  2. В оформляемых полях выберем наши ресурсы «Приращение» и «%».
  3. В условии укажем: ЭтоПоследнийМесяц Равно Истина.
  4. В параметрах оформления установим Текст = "" (пустая строка).

Важный нюанс: Этот метод скроет значения, но сами подзаголовки колонок в шапке таблицы могут остаться. Чтобы полностью «схлопнуть» колонку, в некоторых версиях платформы можно попробовать установить параметр МинимальнаяШирина = 0 и МаксимальнаяШирина = 0, но результат сильно зависит от настроек конкретного варианта отчета.

Способ 3. Управление выражением ресурса

Выясним причину, по которой данные выводятся: это работа выражений ресурсов. Мы можем изменить саму логику расчета ресурса в зависимости от периода. На закладке «Ресурсы» для поля «Приращение» можно прописать выражение:


ВЫБОР 
    КОГДА Период < НачалоПериода(&КонецПериода, "МЕСЯЦ") 
    ТОГДА Сумма(Приращение) 
    ИНАЧЕ NULL 
КОНЕЦ

В этом случае в последней колонке значение будет NULL. В сочетании с настройкой «Игнорировать значения NULL» или специальным оформлением это позволит визуально очистить ячейки.

Способ 4. Программная модификация настроек

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


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

Этот метод отключает использование полей во всей структуре отчета. Чтобы отключить их только для конкретной колонки, нужно найти в КомпоновщикНастроек.Настройки.Структура именно ту группировку, которая отвечает за последний период (если вы применили Способ 1).

Способ 5. Постобработка Табличного Документа

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

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

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

Резюме

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

← На главную