Как убрать самый верхний элемент иерархической группировки в отчете СКД?

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

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

Метод 1: Использование отбора по системному полю «Уровень»

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

  1. Откройте настройки отчета в Консоли компоновки данных или в конфигураторе.
  2. Перейдите на вкладку «Настройки» и выберите нужную группировку строк.
  3. Перейдите на закладку «Отбор».
  4. Добавьте новый элемент отбора:
    • Поле: выберите системное поле Уровень (или СистемныеПоля.УровеньВГруппировке).
    • Вид сравнения: Больше.
    • Значение: 1.

Такой подход заставит СКД отсечь все элементы, находящиеся на первом уровне иерархии (корневые элементы), но при этом все их подчиненные элементы (уровни 2, 3 и т.д.) будут выведены корректно. Важным преимуществом этого метода является то, что СКД автоматически пересчитает итоговые показатели, исключив данные скрытого элемента.

Метод 2: Программная настройка иерархии через процедуру «ПринятьНастройки»

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

Для решения задачи можно использовать следующий алгоритм работы с объектом КомпоновщикНастроек:


Процедура ПринятьНастройки(КомпоновщикНастроек, мУровень)
    Если КомпоновщикНастроек.Настройки.Структура.Количество() > 0 Тогда
        Для каждого текГруппировка из КомпоновщикНастроек.Настройки.Структура[0].Строки Цикл
            ПроверитьГруппировкуНастройки(текГруппировка, мУровень);
        КонецЦикла;
    КонецЕсли;
КонецПроцедуры

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

Важные рекомендации и предостережения

Ранее часто практиковался метод, при котором Результат отчета (объект ТабличныйДокумент) принудительно очищался после формирования через методы Разгруппировать и УдалитьОбласть. Мы настоятельно не рекомендуем использовать этот способ по следующим причинам:

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

← На главную