Как убрать повторение значений группировок в отчете СКД

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

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

Метод 1. Управление составом выбранных полей на разных уровнях

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

Проанализируем шаги для исправления этой ситуации:

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

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

Метод 2. Изменение расположения полей группировок

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

Найдем параметр Расположение полей группировок. Рассмотрим его значения:

Метод 3. Использование типа макета Дерево

Выясним причину, по которой отчет выглядит как плоская таблица. Часто это происходит из-за настройки Тип макета. Если в Дополнительных настройках установлен тип Список, система будет стремиться заполнить каждую ячейку данными, чтобы строку можно было идентифицировать однозначно (как в Excel-таблице для фильтрации).

Рассмотрим переход к иерархическому виду:

  1. Установим Тип макета в значение Дерево.
  2. Проверим параметр Расположение группировок. Рекомендуется использовать значение Ступенчатый.

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

Метод 4. Применение условного оформления

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

Разберем алгоритм настройки:

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

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

Метод 5. Программная корректировка вывода

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


ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);

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

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

Резюме и рекомендации

Мы проанализировали несколько способов решения задачи. Самым эффективным и простым в обслуживании является Метод 1 (настройка состава полей для каждой группировки отдельно). Он не требует написания кода и корректно работает при выгрузке отчета в форматы Excel или PDF.

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

← На главную