При разработке отчетов на базе Системы компоновки данных (СКД) часто возникают ситуации, когда стандартный вывод кросс-таблицы не совсем соответствует требованиям заказчика. Типичный пример: отчет по продажам за несколько месяцев, где в каждой колонке выводятся «Сумма», «Приращение» и «% приращения». Однако для последнего (актуального) месяца колонки «Приращение» и «%» не имеют смысла или должны быть скрыты по эстетическим соображениям. Рассмотрим подробнее, как решить эту задачу различными методами.
Этот метод считается наиболее архитектурно правильным в рамках СКД. Суть заключается в том, чтобы вместо одной автоматической группировки по периоду создать две, визуально идущие друг за другом.
Разберем этот процесс по шагам:
Период создаем две группировки одного уровня.Период НЕ РАВЕН &МаксимальныйПериод.Период РАВЕН &МаксимальныйПериод.Проанализируем ситуацию: для пользователя это будет выглядеть как единая таблица, так как обе группировки выводят данные из одного набора, но СКД позволит нам гибко управлять составом колонок для каждой части временной шкалы.
Если мы не хотим менять структуру группировок, мы можем воспользоваться механизмом Условного оформления. Рассмотрим, как это сделать:
Сначала создадим в схеме вычисляемое поле или параметр, который будет определять, является ли колонка «последней». Например, в запросе можно добавить поле ЭтоПоследнийМесяц (Булево).
Далее перейдем на закладку «Условное оформление» в настройках СКД:
ЭтоПоследнийМесяц Равно Истина.Текст = "" (пустая строка).Важный нюанс: Этот метод скроет значения, но сами подзаголовки колонок в шапке таблицы могут остаться. Чтобы полностью «схлопнуть» колонку, в некоторых версиях платформы можно попробовать установить параметр МинимальнаяШирина = 0 и МаксимальнаяШирина = 0, но результат сильно зависит от настроек конкретного варианта отчета.
Выясним причину, по которой данные выводятся: это работа выражений ресурсов. Мы можем изменить саму логику расчета ресурса в зависимости от периода. На закладке «Ресурсы» для поля «Приращение» можно прописать выражение:
ВЫБОР
КОГДА Период < НачалоПериода(&КонецПериода, "МЕСЯЦ")
ТОГДА Сумма(Приращение)
ИНАЧЕ NULL
КОНЕЦ
В этом случае в последней колонке значение будет NULL. В сочетании с настройкой «Игнорировать значения NULL» или специальным оформлением это позволит визуально очистить ячейки.
Иногда требуется более тонкое управление, например, если пользователь сам выбирает, какие колонки скрывать. В этом случае мы можем программно перебрать структуру настроек компоновщика. Рассмотрим пример кода, который можно разместить в модуле отчета перед формированием:
Процедура ИзменитьВидимостьРесурсов(Знач Скрыть = Ложь)
пПриращение = Новый ПолеКомпоновкиДанных("Приращение");
пПроцент = Новый ПолеКомпоновкиДанных("ПроцентПриращения");
// Перебираем структуру настроек (группировки, таблицы)
Для Каждого Структура Из КомпоновщикНастроек.Настройки.Структура Цикл
// Проверяем выбранные поля в группировках
Для Каждого ЭлементВыбора Из Структура.Выбор.Элементы Цикл
Если ТипЗнч(ЭлементВыбора) = Тип("ВыбранноеПолеКомпоновкиДанных") Тогда
Если ЭлементВыбора.Поле = пПриращение Или ЭлементВыбора.Поле = пПроцент Тогда
ЭлементВыбора.Использование = НЕ Скрыть;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
Этот метод отключает использование полей во всей структуре отчета. Чтобы отключить их только для конкретной колонки, нужно найти в КомпоновщикНастроек.Настройки.Структура именно ту группировку, которая отвечает за последний период (если вы применили Способ 1).
Если возможности СКД исчерпаны, а результат все еще не идеален (например, остаются пустые заголовки), мы можем прибегнуть к постобработке готового ТабличногоДокумента. В процедуре ПриКомпоновкеРезультата мы можем вывести отчет программно и затем удалить ненужные области.
Посмотрим на алгоритм:
ТабличныйДокумент.УдалитьОбласть() для удаления конкретных колонок.Важно: При программном удалении колонок следует быть осторожными, чтобы не нарушить структуру расшифровки отчета. Рекомендуется использовать поиск по параметрам расшифровки, а не просто по тексту заголовка.
Мы проанализировали несколько подходов к скрытию ресурсов в СКД. Для большинства задач оптимальным будет Способ 1 (разделение группировок), так как он позволяет штатно управлять составом Выбранных полей для разных периодов без написания сложного кода. Если же структура отчета динамическая и сложная, стоит обратить внимание на комбинацию Вычисляемых полей и Условного оформления.