Как скрыть или показать колонку в отчете СКД в зависимости от значения параметра?

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

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

Способ 1: Условное оформление (без программирования)

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

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

Таким образом, при установке значения параметра в Ложь, система применит оформление, которое «схлопнет» колонку до невидимого состояния. Если необходимо, чтобы при Истина колонка всегда отображалась, добавьте аналогичное условие с установкой ширины, например, 10.

Способ 2: Программное управление видимостью при компоновке

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

Рассмотрим, как можно программно управлять использованием полей в настройках компоновщика:


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

Важные замечания по реализации

При выборе метода учитывайте следующие нюансы:

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

← На главную