При разработке отчетов на базе Системы Компоновки Данных (СКД) часто возникает задача динамического управления видимостью полей. Например, требуется скрывать колонку с себестоимостью, если пользователь не активировал соответствующий флажок в настройках. Разберем основные способы реализации этой задачи. При необходимости скрывать колонки только при отсутствии в них данных можно использовать готовое решение для автоматического скрытия пустых столбцов.
Этот метод является наиболее простым и предпочтительным, если вы хотите решить задачу исключительно в конструкторе СКД — для этого отлично подойдет инструментарий для разработки и отладки СКД-отчетов. Суть метода заключается в принудительном изменении ширины колонки до нуля, что визуально скрывает её из отчета.
Максимальная ширина равным -1, а Минимальная ширина также равным -1.ПоказыватьСебестоимость равно Ложь).Таким образом, при установке значения параметра в Ложь, система применит оформление, которое «схлопнет» колонку до невидимого состояния. Если необходимо, чтобы при Истина колонка всегда отображалась, добавьте аналогичное условие с установкой ширины, например, 10.
Если вам требуется не просто скрыть колонку визуально, а полностью исключить её из процесса формирования отчета для оптимизации или безопасности, используйте программный подход в модуле объекта (процедура ПриКомпоновкеРезультата).
Рассмотрим, как можно программно управлять использованием полей в настройках компоновщика:
// В процедуре ПриКомпоновкеРезультата
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
// Получаем текущее значение параметра из пользовательских настроек
Настройки = КомпоновщикНастроек.ПолучитьНастройки();
ПараметрВидимости = Настройки.ПараметрыДанных.НайтиЗначениеПараметра(Новый ПараметрКомпоновкиДанных("ПоказыватьСебестоимость"));
Если ПараметрВидимости <> Неопределено Тогда
Видимость = ПараметрВидимости.Значение;
// Перебираем выбранные поля и включаем/отключаем их использование
Для Каждого ЭлементВыбора Из Настройки.Выбор.Элементы Цикл
Если ТипЗнч(ЭлементВыбора) = Тип("ВыбранноеПолеКомпоновкиДанных") И ЭлементВыбора.Поле = Новый ПолеКомпоновкиДанных("Себестоимость") Тогда
ЭлементВыбора.Использование = Видимость;
КонецЕсли;
КонецЦикла;
КонецЕсли;
// Далее выполняем процесс компоновки стандартными средствами
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
При выборе метода учитывайте следующие нюансы:
-1) скрывает колонку визуально, но она технически остается в табличном документе. Если пользователь выделит ячейки, он сможет растянуть колонку обратно. Программное исключение поля через Использование является более надежным способом для защиты данных.ПриКомпоновкеРезультата оправдано только тогда, когда стандартные возможности СКД не позволяют достичь нужной гибкости (например, при сложной динамической структуре отчета).Комбинируйте эти подходы в зависимости от сложности вашей задачи, чтобы создавать удобные и гибкие отчеты для конечных пользователей.